mirror of https://github.com/acidanthera/audk.git
fix a invalid pointer conversion when builing 32bit image.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11352 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
3fee5868b1
commit
ed365e934d
|
@ -1778,6 +1778,9 @@ AhciCreateTransferDescriptor (
|
||||||
UINT64 MaxReceiveFisSize;
|
UINT64 MaxReceiveFisSize;
|
||||||
UINT64 MaxCommandListSize;
|
UINT64 MaxCommandListSize;
|
||||||
UINT64 MaxCommandTableSize;
|
UINT64 MaxCommandTableSize;
|
||||||
|
EFI_PHYSICAL_ADDRESS AhciRFisPciAddr;
|
||||||
|
EFI_PHYSICAL_ADDRESS AhciCmdListPciAddr;
|
||||||
|
EFI_PHYSICAL_ADDRESS AhciCommandTablePciAddr;
|
||||||
|
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
//
|
//
|
||||||
|
@ -1796,7 +1799,7 @@ AhciCreateTransferDescriptor (
|
||||||
PciIo,
|
PciIo,
|
||||||
AllocateAnyPages,
|
AllocateAnyPages,
|
||||||
EfiBootServicesData,
|
EfiBootServicesData,
|
||||||
(UINTN)EFI_SIZE_TO_PAGES (MaxReceiveFisSize),
|
EFI_SIZE_TO_PAGES ((UINTN) MaxReceiveFisSize),
|
||||||
&Buffer,
|
&Buffer,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -1816,7 +1819,7 @@ AhciCreateTransferDescriptor (
|
||||||
EfiPciIoOperationBusMasterCommonBuffer,
|
EfiPciIoOperationBusMasterCommonBuffer,
|
||||||
Buffer,
|
Buffer,
|
||||||
&Bytes,
|
&Bytes,
|
||||||
(EFI_PHYSICAL_ADDRESS *) &AhciRegisters->AhciRFisPciAddr,
|
&AhciRFisPciAddr,
|
||||||
&AhciRegisters->MapRFis
|
&AhciRegisters->MapRFis
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1828,13 +1831,14 @@ AhciCreateTransferDescriptor (
|
||||||
goto Error6;
|
goto Error6;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!Support64Bit) && ((EFI_PHYSICAL_ADDRESS)(UINTN)AhciRegisters->AhciRFisPciAddr > 0x100000000ULL)) {
|
if ((!Support64Bit) && (AhciRFisPciAddr > 0x100000000ULL)) {
|
||||||
//
|
//
|
||||||
// The AHCI HBA doesn't support 64bit addressing, so should not get a >4G pci bus master address.
|
// The AHCI HBA doesn't support 64bit addressing, so should not get a >4G pci bus master address.
|
||||||
//
|
//
|
||||||
Status = EFI_DEVICE_ERROR;
|
Status = EFI_DEVICE_ERROR;
|
||||||
goto Error5;
|
goto Error5;
|
||||||
}
|
}
|
||||||
|
AhciRegisters->AhciRFisPciAddr = (EFI_AHCI_RECEIVED_FIS *)(UINTN)AhciRFisPciAddr;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Allocate memory for command list
|
// Allocate memory for command list
|
||||||
|
@ -1846,7 +1850,7 @@ AhciCreateTransferDescriptor (
|
||||||
PciIo,
|
PciIo,
|
||||||
AllocateAnyPages,
|
AllocateAnyPages,
|
||||||
EfiBootServicesData,
|
EfiBootServicesData,
|
||||||
(UINTN)EFI_SIZE_TO_PAGES (MaxCommandListSize),
|
EFI_SIZE_TO_PAGES ((UINTN) MaxCommandListSize),
|
||||||
&Buffer,
|
&Buffer,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -1870,7 +1874,7 @@ AhciCreateTransferDescriptor (
|
||||||
EfiPciIoOperationBusMasterCommonBuffer,
|
EfiPciIoOperationBusMasterCommonBuffer,
|
||||||
Buffer,
|
Buffer,
|
||||||
&Bytes,
|
&Bytes,
|
||||||
(EFI_PHYSICAL_ADDRESS *)&AhciRegisters->AhciCmdListPciAddr,
|
&AhciCmdListPciAddr,
|
||||||
&AhciRegisters->MapCmdList
|
&AhciRegisters->MapCmdList
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1882,13 +1886,14 @@ AhciCreateTransferDescriptor (
|
||||||
goto Error4;
|
goto Error4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!Support64Bit) && ((EFI_PHYSICAL_ADDRESS)(UINTN)AhciRegisters->AhciCmdListPciAddr > 0x100000000ULL)) {
|
if ((!Support64Bit) && (AhciCmdListPciAddr > 0x100000000ULL)) {
|
||||||
//
|
//
|
||||||
// The AHCI HBA doesn't support 64bit addressing, so should not get a >4G pci bus master address.
|
// The AHCI HBA doesn't support 64bit addressing, so should not get a >4G pci bus master address.
|
||||||
//
|
//
|
||||||
Status = EFI_DEVICE_ERROR;
|
Status = EFI_DEVICE_ERROR;
|
||||||
goto Error3;
|
goto Error3;
|
||||||
}
|
}
|
||||||
|
AhciRegisters->AhciCmdListPciAddr = (EFI_AHCI_COMMAND_LIST *)(UINTN)AhciCmdListPciAddr;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Allocate memory for command table
|
// Allocate memory for command table
|
||||||
|
@ -1901,7 +1906,7 @@ AhciCreateTransferDescriptor (
|
||||||
PciIo,
|
PciIo,
|
||||||
AllocateAnyPages,
|
AllocateAnyPages,
|
||||||
EfiBootServicesData,
|
EfiBootServicesData,
|
||||||
(UINTN)EFI_SIZE_TO_PAGES (MaxCommandTableSize),
|
EFI_SIZE_TO_PAGES ((UINTN) MaxCommandTableSize),
|
||||||
&Buffer,
|
&Buffer,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -1925,7 +1930,7 @@ AhciCreateTransferDescriptor (
|
||||||
EfiPciIoOperationBusMasterCommonBuffer,
|
EfiPciIoOperationBusMasterCommonBuffer,
|
||||||
Buffer,
|
Buffer,
|
||||||
&Bytes,
|
&Bytes,
|
||||||
(EFI_PHYSICAL_ADDRESS *)&AhciRegisters->AhciCommandTablePciAddr,
|
&AhciCommandTablePciAddr,
|
||||||
&AhciRegisters->MapCommandTable
|
&AhciRegisters->MapCommandTable
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1937,13 +1942,14 @@ AhciCreateTransferDescriptor (
|
||||||
goto Error2;
|
goto Error2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!Support64Bit) && ((EFI_PHYSICAL_ADDRESS)(UINTN)AhciRegisters->AhciCommandTablePciAddr > 0x100000000ULL)) {
|
if ((!Support64Bit) && (AhciCommandTablePciAddr > 0x100000000ULL)) {
|
||||||
//
|
//
|
||||||
// The AHCI HBA doesn't support 64bit addressing, so should not get a >4G pci bus master address.
|
// The AHCI HBA doesn't support 64bit addressing, so should not get a >4G pci bus master address.
|
||||||
//
|
//
|
||||||
Status = EFI_DEVICE_ERROR;
|
Status = EFI_DEVICE_ERROR;
|
||||||
goto Error1;
|
goto Error1;
|
||||||
}
|
}
|
||||||
|
AhciRegisters->AhciCommandTablePciAddr = (EFI_AHCI_COMMAND_TABLE *)(UINTN)AhciCommandTablePciAddr;
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
//
|
//
|
||||||
|
@ -1957,7 +1963,7 @@ Error1:
|
||||||
Error2:
|
Error2:
|
||||||
PciIo->FreeBuffer (
|
PciIo->FreeBuffer (
|
||||||
PciIo,
|
PciIo,
|
||||||
(UINTN)EFI_SIZE_TO_PAGES (MaxCommandTableSize),
|
EFI_SIZE_TO_PAGES ((UINTN) MaxCommandTableSize),
|
||||||
AhciRegisters->AhciCommandTable
|
AhciRegisters->AhciCommandTable
|
||||||
);
|
);
|
||||||
Error3:
|
Error3:
|
||||||
|
@ -1968,7 +1974,7 @@ Error3:
|
||||||
Error4:
|
Error4:
|
||||||
PciIo->FreeBuffer (
|
PciIo->FreeBuffer (
|
||||||
PciIo,
|
PciIo,
|
||||||
(UINTN)EFI_SIZE_TO_PAGES (MaxCommandListSize),
|
EFI_SIZE_TO_PAGES ((UINTN) MaxCommandListSize),
|
||||||
AhciRegisters->AhciCmdList
|
AhciRegisters->AhciCmdList
|
||||||
);
|
);
|
||||||
Error5:
|
Error5:
|
||||||
|
@ -1979,7 +1985,7 @@ Error5:
|
||||||
Error6:
|
Error6:
|
||||||
PciIo->FreeBuffer (
|
PciIo->FreeBuffer (
|
||||||
PciIo,
|
PciIo,
|
||||||
(UINTN)EFI_SIZE_TO_PAGES (MaxReceiveFisSize),
|
EFI_SIZE_TO_PAGES ((UINTN) MaxReceiveFisSize),
|
||||||
AhciRegisters->AhciRFis
|
AhciRegisters->AhciRFis
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
This file implements ATA_PASSTHRU_PROCTOCOL and EXT_SCSI_PASSTHRU_PROTOCOL interfaces
|
This file implements ATA_PASSTHRU_PROCTOCOL and EXT_SCSI_PASSTHRU_PROTOCOL interfaces
|
||||||
for managed ATA controllers.
|
for managed ATA controllers.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -610,7 +610,7 @@ AtaAtapiPassThruStop (
|
||||||
);
|
);
|
||||||
PciIo->FreeBuffer (
|
PciIo->FreeBuffer (
|
||||||
PciIo,
|
PciIo,
|
||||||
(UINTN) EFI_SIZE_TO_PAGES (AhciRegisters->MaxCommandTableSize),
|
EFI_SIZE_TO_PAGES ((UINTN) AhciRegisters->MaxCommandTableSize),
|
||||||
AhciRegisters->AhciCommandTable
|
AhciRegisters->AhciCommandTable
|
||||||
);
|
);
|
||||||
PciIo->Unmap (
|
PciIo->Unmap (
|
||||||
|
@ -619,7 +619,7 @@ AtaAtapiPassThruStop (
|
||||||
);
|
);
|
||||||
PciIo->FreeBuffer (
|
PciIo->FreeBuffer (
|
||||||
PciIo,
|
PciIo,
|
||||||
(UINTN) EFI_SIZE_TO_PAGES (AhciRegisters->MaxCommandListSize),
|
EFI_SIZE_TO_PAGES ((UINTN) AhciRegisters->MaxCommandListSize),
|
||||||
AhciRegisters->AhciCmdList
|
AhciRegisters->AhciCmdList
|
||||||
);
|
);
|
||||||
PciIo->Unmap (
|
PciIo->Unmap (
|
||||||
|
@ -628,7 +628,7 @@ AtaAtapiPassThruStop (
|
||||||
);
|
);
|
||||||
PciIo->FreeBuffer (
|
PciIo->FreeBuffer (
|
||||||
PciIo,
|
PciIo,
|
||||||
(UINTN) EFI_SIZE_TO_PAGES (AhciRegisters->MaxReceiveFisSize),
|
EFI_SIZE_TO_PAGES ((UINTN) AhciRegisters->MaxReceiveFisSize),
|
||||||
AhciRegisters->AhciRFis
|
AhciRegisters->AhciRFis
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue