PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c: rewrap code, strip trailing ws

In this patch the code and the comments embedded in code are rewrapped to
79 columns, plus any trailing whitespace is stripped.

Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Regression-tested-by: Gabriel Somlo <somlo@cmu.edu>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17950 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Laszlo Ersek 2015-07-14 12:01:30 +00:00 committed by lersek
parent 5c1d397dc2
commit 3cb4bb68e9
1 changed files with 123 additions and 90 deletions

View File

@ -22,7 +22,7 @@ typedef struct {
RESOURCE_CONFIGURATION Configuration = { RESOURCE_CONFIGURATION Configuration = {
{{0x8A, 0x2B, 1, 0, 0, 0, 0, 0, 0, 0}, {{0x8A, 0x2B, 1, 0, 0, 0, 0, 0, 0, 0},
{0x8A, 0x2B, 0, 0, 0, 32, 0, 0, 0, 0}, {0x8A, 0x2B, 0, 0, 0, 32, 0, 0, 0, 0},
{0x8A, 0x2B, 0, 0, 6, 32, 0, 0, 0, 0}, {0x8A, 0x2B, 0, 0, 6, 32, 0, 0, 0, 0},
{0x8A, 0x2B, 0, 0, 0, 64, 0, 0, 0, 0}, {0x8A, 0x2B, 0, 0, 0, 64, 0, 0, 0, 0},
{0x8A, 0x2B, 0, 0, 6, 64, 0, 0, 0, 0}, {0x8A, 0x2B, 0, 0, 6, 64, 0, 0, 0, 0},
@ -80,7 +80,7 @@ RESOURCE_CONFIGURATION Configuration = {
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
RootBridgeIoPollMem ( RootBridgeIoPollMem (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address, IN UINT64 Address,
@ -135,7 +135,7 @@ RootBridgeIoPollMem (
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
RootBridgeIoPollIo ( RootBridgeIoPollIo (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address, IN UINT64 Address,
@ -723,8 +723,8 @@ RootBridgeIoSetAttributes (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
IN UINT64 Attributes, IN UINT64 Attributes,
IN OUT UINT64 *ResourceBase, IN OUT UINT64 *ResourceBase,
IN OUT UINT64 *ResourceLength IN OUT UINT64 *ResourceLength
); );
/** /**
Retrieves the current resource settings of this PCI root bridge in the form Retrieves the current resource settings of this PCI root bridge in the form
@ -851,7 +851,7 @@ RootBridgeConstructor (
// //
PrivateData->BusBase = ResAperture->BusBase; PrivateData->BusBase = ResAperture->BusBase;
PrivateData->BusLimit = ResAperture->BusLimit; PrivateData->BusLimit = ResAperture->BusLimit;
// //
// Specific for this chipset // Specific for this chipset
// //
@ -861,17 +861,20 @@ RootBridgeConstructor (
PrivateData->ResAllocNode[Index].Length = 0; PrivateData->ResAllocNode[Index].Length = 0;
PrivateData->ResAllocNode[Index].Status = ResNone; PrivateData->ResAllocNode[Index].Status = ResNone;
} }
PrivateData->RootBridgeAttrib = Attri; PrivateData->RootBridgeAttrib = Attri;
PrivateData->Supports = EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO | EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO | \ PrivateData->Supports = EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |
EFI_PCI_ATTRIBUTE_ISA_IO_16 | EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO | \ EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO |
EFI_PCI_ATTRIBUTE_VGA_MEMORY | \ EFI_PCI_ATTRIBUTE_ISA_IO_16 |
EFI_PCI_ATTRIBUTE_VGA_IO_16 | EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO |
EFI_PCI_ATTRIBUTE_VGA_MEMORY |
EFI_PCI_ATTRIBUTE_VGA_IO_16 |
EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16;
PrivateData->Attributes = PrivateData->Supports; PrivateData->Attributes = PrivateData->Supports;
Protocol->ParentHandle = HostBridgeHandle; Protocol->ParentHandle = HostBridgeHandle;
Protocol->PollMem = RootBridgeIoPollMem; Protocol->PollMem = RootBridgeIoPollMem;
Protocol->PollIo = RootBridgeIoPollIo; Protocol->PollIo = RootBridgeIoPollIo;
@ -901,7 +904,8 @@ RootBridgeConstructor (
Protocol->SegmentNumber = 0; Protocol->SegmentNumber = 0;
Status = gBS->LocateProtocol (&gEfiMetronomeArchProtocolGuid, NULL, (VOID **)&mMetronome); Status = gBS->LocateProtocol (&gEfiMetronomeArchProtocolGuid, NULL,
(VOID **)&mMetronome);
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
return EFI_SUCCESS; return EFI_SUCCESS;
@ -1001,18 +1005,18 @@ RootBridgeIoCheckParameter (
PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This); PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This);
// //
// Check to see if any address associated with this transfer exceeds the maximum // Check to see if any address associated with this transfer exceeds the
// allowed address. The maximum address implied by the parameters passed in is // maximum allowed address. The maximum address implied by the parameters
// Address + Size * Count. If the following condition is met, then the transfer // passed in is Address + Size * Count. If the following condition is met,
// is not supported. // then the transfer is not supported.
// //
// Address + Size * Count > Limit + 1 // Address + Size * Count > Limit + 1
// //
// Since Limit can be the maximum integer value supported by the CPU and Count // Since Limit can be the maximum integer value supported by the CPU and
// can also be the maximum integer value supported by the CPU, this range // Count can also be the maximum integer value supported by the CPU, this
// check must be adjusted to avoid all oveflow conditions. // range check must be adjusted to avoid all oveflow conditions.
// //
// The following form of the range check is equivalent but assumes that // The following form of the range check is equivalent but assumes that
// Limit is of the form (2^n - 1). // Limit is of the form (2^n - 1).
// //
if (OperationType == IoOperation) { if (OperationType == IoOperation) {
@ -1023,11 +1027,13 @@ RootBridgeIoCheckParameter (
Limit = PrivateData->MemLimit; Limit = PrivateData->MemLimit;
} else { } else {
PciRbAddr = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &Address; PciRbAddr = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &Address;
if (PciRbAddr->Bus < PrivateData->BusBase || PciRbAddr->Bus > PrivateData->BusLimit) { if (PciRbAddr->Bus < PrivateData->BusBase ||
PciRbAddr->Bus > PrivateData->BusLimit) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
if (PciRbAddr->Device > MAX_PCI_DEVICE_NUMBER || PciRbAddr->Function > MAX_PCI_FUNCTION_NUMBER) { if (PciRbAddr->Device > MAX_PCI_DEVICE_NUMBER ||
PciRbAddr->Function > MAX_PCI_FUNCTION_NUMBER) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
@ -1048,7 +1054,7 @@ RootBridgeIoCheckParameter (
if (Address > Limit) { if (Address > Limit) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
} else { } else {
MaxCount = RShiftU64 (Limit, Width); MaxCount = RShiftU64 (Limit, Width);
if (MaxCount < (Count - 1)) { if (MaxCount < (Count - 1)) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
@ -1107,7 +1113,8 @@ RootBridgeIoMemRW (
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH OperationWidth; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH OperationWidth;
UINT8 *Uint8Buffer; UINT8 *Uint8Buffer;
Status = RootBridgeIoCheckParameter (This, MemOperation, Width, Address, Count, Buffer); Status = RootBridgeIoCheckParameter (This, MemOperation, Width, Address,
Count, Buffer);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
@ -1115,7 +1122,9 @@ RootBridgeIoMemRW (
InStride = mInStride[Width]; InStride = mInStride[Width];
OutStride = mOutStride[Width]; OutStride = mOutStride[Width];
OperationWidth = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) (Width & 0x03); OperationWidth = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) (Width & 0x03);
for (Uint8Buffer = Buffer; Count > 0; Address += InStride, Uint8Buffer += OutStride, Count--) { for (Uint8Buffer = Buffer;
Count > 0;
Address += InStride, Uint8Buffer += OutStride, Count--) {
if (Write) { if (Write) {
switch (OperationWidth) { switch (OperationWidth) {
case EfiPciWidthUint8: case EfiPciWidthUint8:
@ -1162,7 +1171,7 @@ RootBridgeIoMemRW (
} }
} }
} }
return EFI_SUCCESS; return EFI_SUCCESS;
} }
/** /**
@ -1212,7 +1221,8 @@ RootBridgeIoIoRW (
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH OperationWidth; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH OperationWidth;
UINT8 *Uint8Buffer; UINT8 *Uint8Buffer;
Status = RootBridgeIoCheckParameter (This, IoOperation, Width, Address, Count, Buffer); Status = RootBridgeIoCheckParameter (This, IoOperation, Width, Address,
Count, Buffer);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
@ -1265,7 +1275,9 @@ RootBridgeIoIoRW (
} }
#endif #endif
for (Uint8Buffer = Buffer; Count > 0; Address += InStride, Uint8Buffer += OutStride, Count--) { for (Uint8Buffer = Buffer;
Count > 0;
Address += InStride, Uint8Buffer += OutStride, Count--) {
if (Write) { if (Write) {
switch (OperationWidth) { switch (OperationWidth) {
case EfiPciWidthUint8: case EfiPciWidthUint8:
@ -1358,7 +1370,8 @@ RootBridgeIoPciRW (
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *PciRbAddr; EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *PciRbAddr;
UINTN PcieRegAddr; UINTN PcieRegAddr;
Status = RootBridgeIoCheckParameter (This, PciOperation, Width, Address, Count, Buffer); Status = RootBridgeIoCheckParameter (This, PciOperation, Width, Address,
Count, Buffer);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
@ -1377,7 +1390,9 @@ RootBridgeIoPciRW (
InStride = mInStride[Width]; InStride = mInStride[Width];
OutStride = mOutStride[Width]; OutStride = mOutStride[Width];
OperationWidth = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) (Width & 0x03); OperationWidth = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) (Width & 0x03);
for (Uint8Buffer = Buffer; Count > 0; PcieRegAddr += InStride, Uint8Buffer += OutStride, Count--) { for (Uint8Buffer = Buffer;
Count > 0;
PcieRegAddr += InStride, Uint8Buffer += OutStride, Count--) {
if (Write) { if (Write) {
switch (OperationWidth) { switch (OperationWidth) {
case EfiPciWidthUint8: case EfiPciWidthUint8:
@ -1468,7 +1483,7 @@ RootBridgeIoPciRW (
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
RootBridgeIoPollMem ( RootBridgeIoPollMem (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address, IN UINT64 Address,
@ -1496,40 +1511,42 @@ RootBridgeIoPollMem (
Status = This->Mem.Read (This, Width, Address, 1, Result); Status = This->Mem.Read (This, Width, Address, 1, Result);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
if ((*Result & Mask) == Value) { if ((*Result & Mask) == Value) {
return EFI_SUCCESS; return EFI_SUCCESS;
} }
if (Delay == 0) { if (Delay == 0) {
return EFI_SUCCESS; return EFI_SUCCESS;
} else { } else {
// //
// Determine the proper # of metronome ticks to wait for polling the // Determine the proper # of metronome ticks to wait for polling the
// location. The nuber of ticks is Roundup (Delay / mMetronome->TickPeriod)+1 // location. The nuber of ticks is Roundup (Delay /
// mMetronome->TickPeriod)+1
// The "+1" to account for the possibility of the first tick being short // The "+1" to account for the possibility of the first tick being short
// because we started in the middle of a tick. // because we started in the middle of a tick.
// //
// BugBug: overriding mMetronome->TickPeriod with UINT32 until Metronome // BugBug: overriding mMetronome->TickPeriod with UINT32 until Metronome
// protocol definition is updated. // protocol definition is updated.
// //
NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) mMetronome->TickPeriod, &Remainder); NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) mMetronome->TickPeriod,
&Remainder);
if (Remainder != 0) { if (Remainder != 0) {
NumberOfTicks += 1; NumberOfTicks += 1;
} }
NumberOfTicks += 1; NumberOfTicks += 1;
while (NumberOfTicks != 0) { while (NumberOfTicks != 0) {
mMetronome->WaitForTick (mMetronome, 1); mMetronome->WaitForTick (mMetronome, 1);
Status = This->Mem.Read (This, Width, Address, 1, Result); Status = This->Mem.Read (This, Width, Address, 1, Result);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
if ((*Result & Mask) == Value) { if ((*Result & Mask) == Value) {
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -1584,7 +1601,7 @@ RootBridgeIoPollMem (
**/ **/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
RootBridgeIoPollIo ( RootBridgeIoPollIo (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
IN UINT64 Address, IN UINT64 Address,
@ -1609,41 +1626,43 @@ RootBridgeIoPollIo (
if ((UINT32)Width > EfiPciWidthUint64) { if ((UINT32)Width > EfiPciWidthUint64) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
Status = This->Io.Read (This, Width, Address, 1, Result); Status = This->Io.Read (This, Width, Address, 1, Result);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
if ((*Result & Mask) == Value) { if ((*Result & Mask) == Value) {
return EFI_SUCCESS; return EFI_SUCCESS;
} }
if (Delay == 0) { if (Delay == 0) {
return EFI_SUCCESS; return EFI_SUCCESS;
} else { } else {
// //
// Determine the proper # of metronome ticks to wait for polling the // Determine the proper # of metronome ticks to wait for polling the
// location. The number of ticks is Roundup (Delay / mMetronome->TickPeriod)+1 // location. The number of ticks is Roundup (Delay /
// mMetronome->TickPeriod)+1
// The "+1" to account for the possibility of the first tick being short // The "+1" to account for the possibility of the first tick being short
// because we started in the middle of a tick. // because we started in the middle of a tick.
// //
NumberOfTicks = DivU64x32Remainder (Delay, (UINT32)mMetronome->TickPeriod, &Remainder); NumberOfTicks = DivU64x32Remainder (Delay, (UINT32)mMetronome->TickPeriod,
&Remainder);
if (Remainder != 0) { if (Remainder != 0) {
NumberOfTicks += 1; NumberOfTicks += 1;
} }
NumberOfTicks += 1; NumberOfTicks += 1;
while (NumberOfTicks != 0) { while (NumberOfTicks != 0) {
mMetronome->WaitForTick (mMetronome, 1); mMetronome->WaitForTick (mMetronome, 1);
Status = This->Io.Read (This, Width, Address, 1, Result); Status = This->Io.Read (This, Width, Address, 1, Result);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
if ((*Result & Mask) == Value) { if ((*Result & Mask) == Value) {
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -1745,7 +1764,7 @@ RootBridgeIoMemWrite (
IN VOID *Buffer IN VOID *Buffer
) )
{ {
return RootBridgeIoMemRW (This, TRUE, Width, Address, Count, Buffer); return RootBridgeIoMemRW (This, TRUE, Width, Address, Count, Buffer);
} }
/** /**
@ -1787,7 +1806,7 @@ RootBridgeIoIoRead (
OUT VOID *Buffer OUT VOID *Buffer
) )
{ {
return RootBridgeIoIoRW (This, FALSE, Width, Address, Count, Buffer); return RootBridgeIoIoRW (This, FALSE, Width, Address, Count, Buffer);
} }
/** /**
@ -1828,7 +1847,7 @@ RootBridgeIoIoWrite (
IN VOID *Buffer IN VOID *Buffer
) )
{ {
return RootBridgeIoIoRW (This, TRUE, Width, Address, Count, Buffer); return RootBridgeIoIoRW (This, TRUE, Width, Address, Count, Buffer);
} }
/** /**
@ -1886,7 +1905,7 @@ RootBridgeIoCopyMem (
if ((UINT32)Width > EfiPciWidthUint64) { if ((UINT32)Width > EfiPciWidthUint64) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
if (DestAddress == SrcAddress) { if (DestAddress == SrcAddress) {
return EFI_SUCCESS; return EFI_SUCCESS;
@ -1895,7 +1914,8 @@ RootBridgeIoCopyMem (
Stride = (UINTN)(1 << Width); Stride = (UINTN)(1 << Width);
Direction = TRUE; Direction = TRUE;
if ((DestAddress > SrcAddress) && (DestAddress < (SrcAddress + Count * Stride))) { if ((DestAddress > SrcAddress) &&
(DestAddress < (SrcAddress + Count * Stride))) {
Direction = FALSE; Direction = FALSE;
SrcAddress = SrcAddress + (Count-1) * Stride; SrcAddress = SrcAddress + (Count-1) * Stride;
DestAddress = DestAddress + (Count-1) * Stride; DestAddress = DestAddress + (Count-1) * Stride;
@ -2093,10 +2113,11 @@ RootBridgeIoMap (
EFI_PHYSICAL_ADDRESS PhysicalAddress; EFI_PHYSICAL_ADDRESS PhysicalAddress;
MAP_INFO *MapInfo; MAP_INFO *MapInfo;
if (HostAddress == NULL || NumberOfBytes == NULL || DeviceAddress == NULL || Mapping == NULL) { if (HostAddress == NULL || NumberOfBytes == NULL || DeviceAddress == NULL ||
Mapping == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
// //
// Initialize the return values to their defaults // Initialize the return values to their defaults
// //
@ -2119,10 +2140,11 @@ RootBridgeIoMap (
// //
// Common Buffer operations can not be remapped. If the common buffer // Common Buffer operations can not be remapped. If the common buffer
// if above 4GB, then it is not possible to generate a mapping, so return // if above 4GB, then it is not possible to generate a mapping, so return
// an error. // an error.
// //
if (Operation == EfiPciOperationBusMasterCommonBuffer || Operation == EfiPciOperationBusMasterCommonBuffer64) { if (Operation == EfiPciOperationBusMasterCommonBuffer ||
Operation == EfiPciOperationBusMasterCommonBuffer64) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
@ -2131,8 +2153,8 @@ RootBridgeIoMap (
// called later. // called later.
// //
Status = gBS->AllocatePool ( Status = gBS->AllocatePool (
EfiBootServicesData, EfiBootServicesData,
sizeof(MAP_INFO), sizeof(MAP_INFO),
(VOID **)&MapInfo (VOID **)&MapInfo
); );
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
@ -2158,8 +2180,8 @@ RootBridgeIoMap (
// Allocate a buffer below 4GB to map the transfer to. // Allocate a buffer below 4GB to map the transfer to.
// //
Status = gBS->AllocatePages ( Status = gBS->AllocatePages (
AllocateMaxAddress, AllocateMaxAddress,
EfiBootServicesData, EfiBootServicesData,
MapInfo->NumberOfPages, MapInfo->NumberOfPages,
&MapInfo->MappedHostAddress &MapInfo->MappedHostAddress
); );
@ -2174,9 +2196,10 @@ RootBridgeIoMap (
// then copy the contents of the real buffer into the mapped buffer // then copy the contents of the real buffer into the mapped buffer
// so the Bus Master can read the contents of the real buffer. // so the Bus Master can read the contents of the real buffer.
// //
if (Operation == EfiPciOperationBusMasterRead || Operation == EfiPciOperationBusMasterRead64) { if (Operation == EfiPciOperationBusMasterRead ||
Operation == EfiPciOperationBusMasterRead64) {
CopyMem ( CopyMem (
(VOID *)(UINTN)MapInfo->MappedHostAddress, (VOID *)(UINTN)MapInfo->MappedHostAddress,
(VOID *)(UINTN)MapInfo->HostAddress, (VOID *)(UINTN)MapInfo->HostAddress,
MapInfo->NumberOfBytes MapInfo->NumberOfBytes
); );
@ -2188,7 +2211,8 @@ RootBridgeIoMap (
*DeviceAddress = MapInfo->MappedHostAddress; *DeviceAddress = MapInfo->MappedHostAddress;
} else { } else {
// //
// The transfer is below 4GB, so the DeviceAddress is simply the HostAddress // The transfer is below 4GB, so the DeviceAddress is simply the
// HostAddress
// //
*DeviceAddress = PhysicalAddress; *DeviceAddress = PhysicalAddress;
} }
@ -2228,8 +2252,9 @@ RootBridgeIoUnmap (
MAP_INFO *MapInfo; MAP_INFO *MapInfo;
// //
// See if the Map() operation associated with this Unmap() required a mapping buffer. // See if the Map() operation associated with this Unmap() required a mapping
// If a mapping buffer was not required, then this function simply returns EFI_SUCCESS. // buffer. If a mapping buffer was not required, then this function simply
// returns EFI_SUCCESS.
// //
if (Mapping != NULL) { if (Mapping != NULL) {
// //
@ -2242,9 +2267,10 @@ RootBridgeIoUnmap (
// then copy the contents of the mapped buffer into the real buffer // then copy the contents of the mapped buffer into the real buffer
// so the processor can read the contents of the real buffer. // so the processor can read the contents of the real buffer.
// //
if (MapInfo->Operation == EfiPciOperationBusMasterWrite || MapInfo->Operation == EfiPciOperationBusMasterWrite64) { if (MapInfo->Operation == EfiPciOperationBusMasterWrite ||
MapInfo->Operation == EfiPciOperationBusMasterWrite64) {
CopyMem ( CopyMem (
(VOID *)(UINTN)MapInfo->HostAddress, (VOID *)(UINTN)MapInfo->HostAddress,
(VOID *)(UINTN)MapInfo->MappedHostAddress, (VOID *)(UINTN)MapInfo->MappedHostAddress,
MapInfo->NumberOfBytes MapInfo->NumberOfBytes
); );
@ -2321,11 +2347,13 @@ RootBridgeIoAllocateBuffer (
if (HostAddress == NULL) { if (HostAddress == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
// //
// The only valid memory types are EfiBootServicesData and EfiRuntimeServicesData // The only valid memory types are EfiBootServicesData and
// EfiRuntimeServicesData
// //
if (MemoryType != EfiBootServicesData && MemoryType != EfiRuntimeServicesData) { if (MemoryType != EfiBootServicesData &&
MemoryType != EfiRuntimeServicesData) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
@ -2334,7 +2362,8 @@ RootBridgeIoAllocateBuffer (
// //
PhysicalAddress = (EFI_PHYSICAL_ADDRESS)(0xffffffff); PhysicalAddress = (EFI_PHYSICAL_ADDRESS)(0xffffffff);
Status = gBS->AllocatePages (AllocateMaxAddress, MemoryType, Pages, &PhysicalAddress); Status = gBS->AllocatePages (AllocateMaxAddress, MemoryType, Pages,
&PhysicalAddress);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
@ -2451,13 +2480,13 @@ RootBridgeIoGetAttributes (
// Set the return value for Supported and Attributes // Set the return value for Supported and Attributes
// //
if (Supported != NULL) { if (Supported != NULL) {
*Supported = PrivateData->Supports; *Supported = PrivateData->Supports;
} }
if (Attributes != NULL) { if (Attributes != NULL) {
*Attributes = PrivateData->Attributes; *Attributes = PrivateData->Attributes;
} }
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -2510,23 +2539,23 @@ RootBridgeIoSetAttributes (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
IN UINT64 Attributes, IN UINT64 Attributes,
IN OUT UINT64 *ResourceBase, IN OUT UINT64 *ResourceBase,
IN OUT UINT64 *ResourceLength IN OUT UINT64 *ResourceLength
) )
{ {
PCI_ROOT_BRIDGE_INSTANCE *PrivateData; PCI_ROOT_BRIDGE_INSTANCE *PrivateData;
PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(This); PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(This);
if (Attributes != 0) { if (Attributes != 0) {
if ((Attributes & (~(PrivateData->Supports))) != 0) { if ((Attributes & (~(PrivateData->Supports))) != 0) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
} }
// //
// This is a generic driver for a PC-AT class system. It does not have any // This is a generic driver for a PC-AT class system. It does not have any
// chipset specific knowlegde, so none of the attributes can be set or // chipset specific knowlegde, so none of the attributes can be set or
// cleared. Any attempt to set attribute that are already set will succeed, // cleared. Any attempt to set attribute that are already set will succeed,
// and any attempt to set an attribute that is not supported will fail. // and any attempt to set an attribute that is not supported will fail.
// //
if (Attributes & (~PrivateData->Attributes)) { if (Attributes & (~PrivateData->Attributes)) {
@ -2578,16 +2607,20 @@ RootBridgeIoConfiguration (
UINTN Index; UINTN Index;
PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This); PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This);
for (Index = 0; Index < TypeMax; Index++) { for (Index = 0; Index < TypeMax; Index++) {
if (PrivateData->ResAllocNode[Index].Status == ResAllocated) { if (PrivateData->ResAllocNode[Index].Status == ResAllocated) {
Configuration.SpaceDesp[Index].AddrRangeMin = PrivateData->ResAllocNode[Index].Base; EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Desc;
Configuration.SpaceDesp[Index].AddrRangeMax = PrivateData->ResAllocNode[Index].Base + PrivateData->ResAllocNode[Index].Length - 1;
Configuration.SpaceDesp[Index].AddrLen = PrivateData->ResAllocNode[Index].Length; Desc = &Configuration.SpaceDesp[Index];
} Desc->AddrRangeMin = PrivateData->ResAllocNode[Index].Base;
} Desc->AddrRangeMax = PrivateData->ResAllocNode[Index].Base +
PrivateData->ResAllocNode[Index].Length - 1;
*Resources = &Configuration; Desc->AddrLen = PrivateData->ResAllocNode[Index].Length;
}
}
*Resources = &Configuration;
return EFI_SUCCESS; return EFI_SUCCESS;
} }