\r
#include "AtaBus.h"\r
\r
-#define ATA_CMD_TRUST_NON_DATA 0x5B\r
-#define ATA_CMD_TRUST_RECEIVE 0x5C\r
-#define ATA_CMD_TRUST_RECEIVE_DMA 0x5D\r
-#define ATA_CMD_TRUST_SEND 0x5E\r
-#define ATA_CMD_TRUST_SEND_DMA 0x5F\r
+#define ATA_CMD_TRUST_NON_DATA 0x5B\r
+#define ATA_CMD_TRUST_RECEIVE 0x5C\r
+#define ATA_CMD_TRUST_RECEIVE_DMA 0x5D\r
+#define ATA_CMD_TRUST_SEND 0x5E\r
+#define ATA_CMD_TRUST_SEND_DMA 0x5F\r
\r
//\r
// Look up table (UdmaValid, IsWrite) for EFI_ATA_PASS_THRU_CMD_PROTOCOL\r
//\r
-EFI_ATA_PASS_THRU_CMD_PROTOCOL mAtaPassThruCmdProtocols[][2] = {\r
+EFI_ATA_PASS_THRU_CMD_PROTOCOL mAtaPassThruCmdProtocols[][2] = {\r
{\r
EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_IN,\r
EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_OUT\r
//\r
// Look up table (UdmaValid, Lba48Bit, IsIsWrite) for ATA_CMD\r
//\r
-UINT8 mAtaCommands[][2][2] = {\r
+UINT8 mAtaCommands[][2][2] = {\r
{\r
{\r
ATA_CMD_READ_SECTORS, // 28-bit LBA; PIO read\r
//\r
// Look up table (UdmaValid, IsTrustSend) for ATA_CMD\r
//\r
-UINT8 mAtaTrustCommands[2][2] = {\r
+UINT8 mAtaTrustCommands[2][2] = {\r
{\r
ATA_CMD_TRUST_RECEIVE, // PIO read\r
ATA_CMD_TRUST_SEND // PIO write\r
}\r
};\r
\r
-\r
//\r
// Look up table (Lba48Bit) for maximum transfer block number\r
//\r
-UINTN mMaxTransferBlockNumber[] = {\r
+UINTN mMaxTransferBlockNumber[] = {\r
MAX_28BIT_TRANSFER_BLOCK_NUM,\r
MAX_48BIT_TRANSFER_BLOCK_NUM\r
};\r
\r
-\r
/**\r
Wrapper for EFI_ATA_PASS_THRU_PROTOCOL.PassThru().\r
\r
**/\r
EFI_STATUS\r
AtaDevicePassThru (\r
- IN OUT ATA_DEVICE *AtaDevice,\r
- IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,\r
- IN OUT EFI_EVENT Event OPTIONAL\r
+ IN OUT ATA_DEVICE *AtaDevice,\r
+ IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,\r
+ IN OUT EFI_EVENT Event OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;\r
- EFI_ATA_PASS_THRU_COMMAND_PACKET *Packet;\r
+ EFI_STATUS Status;\r
+ EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;\r
+ EFI_ATA_PASS_THRU_COMMAND_PACKET *Packet;\r
\r
//\r
// Assemble packet. If it is non blocking mode, the Ata driver should keep each\r
// subtask and clean them when the event is signaled.\r
//\r
if (TaskPacket != NULL) {\r
- Packet = TaskPacket;\r
+ Packet = TaskPacket;\r
Packet->Asb = AllocateAlignedBuffer (AtaDevice, sizeof (EFI_ATA_STATUS_BLOCK));\r
if (Packet->Asb == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
CopyMem (Packet->Asb, AtaDevice->Asb, sizeof (EFI_ATA_STATUS_BLOCK));\r
Packet->Acb = AllocateCopyPool (sizeof (EFI_ATA_COMMAND_BLOCK), &AtaDevice->Acb);\r
} else {\r
- Packet = &AtaDevice->Packet;\r
+ Packet = &AtaDevice->Packet;\r
Packet->Asb = AtaDevice->Asb;\r
Packet->Acb = &AtaDevice->Acb;\r
}\r
return Status;\r
}\r
\r
-\r
/**\r
Wrapper for EFI_ATA_PASS_THRU_PROTOCOL.ResetDevice().\r
\r
**/\r
EFI_STATUS\r
ResetAtaDevice (\r
- IN ATA_DEVICE *AtaDevice\r
+ IN ATA_DEVICE *AtaDevice\r
)\r
{\r
- EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;\r
+ EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;\r
\r
AtaPassThru = AtaDevice->AtaBusDriverData->AtaPassThru;\r
\r
);\r
}\r
\r
-\r
/**\r
Prints ATA model name to ATA device structure.\r
\r
CHAR8 *Source;\r
CHAR16 *Destination;\r
\r
- Source = AtaDevice->IdentifyData->ModelName;\r
+ Source = AtaDevice->IdentifyData->ModelName;\r
Destination = AtaDevice->ModelName;\r
\r
//\r
// Swap the byte order in the original module name.\r
//\r
for (Index = 0; Index < MAX_MODEL_NAME_LEN; Index += 2) {\r
- Destination[Index] = Source[Index + 1];\r
- Destination[Index + 1] = Source[Index];\r
+ Destination[Index] = Source[Index + 1];\r
+ Destination[Index + 1] = Source[Index];\r
}\r
+\r
AtaDevice->ModelName[MAX_MODEL_NAME_LEN] = L'\0';\r
}\r
\r
-\r
/**\r
Gets ATA device Capacity according to ATA 6.\r
\r
**/\r
EFI_LBA\r
GetAtapi6Capacity (\r
- IN ATA_DEVICE *AtaDevice\r
+ IN ATA_DEVICE *AtaDevice\r
)\r
{\r
- EFI_LBA Capacity;\r
- EFI_LBA TmpLba;\r
- UINTN Index;\r
- ATA_IDENTIFY_DATA *IdentifyData;\r
+ EFI_LBA Capacity;\r
+ EFI_LBA TmpLba;\r
+ UINTN Index;\r
+ ATA_IDENTIFY_DATA *IdentifyData;\r
\r
IdentifyData = AtaDevice->IdentifyData;\r
if ((IdentifyData->command_set_supported_83 & BIT10) == 0) {\r
//\r
// Lower byte goes first: word[100] is the lowest word, word[103] is highest\r
//\r
- TmpLba = IdentifyData->maximum_lba_for_48bit_addressing[Index];\r
+ TmpLba = IdentifyData->maximum_lba_for_48bit_addressing[Index];\r
Capacity |= LShiftU64 (TmpLba, 16 * Index);\r
}\r
\r
return Capacity;\r
}\r
\r
-\r
/**\r
Identifies ATA device via the Identify data.\r
\r
**/\r
EFI_STATUS\r
IdentifyAtaDevice (\r
- IN OUT ATA_DEVICE *AtaDevice\r
+ IN OUT ATA_DEVICE *AtaDevice\r
)\r
{\r
- ATA_IDENTIFY_DATA *IdentifyData;\r
- EFI_BLOCK_IO_MEDIA *BlockMedia;\r
- EFI_LBA Capacity;\r
- UINT16 PhyLogicSectorSupport;\r
- UINT16 UdmaMode;\r
+ ATA_IDENTIFY_DATA *IdentifyData;\r
+ EFI_BLOCK_IO_MEDIA *BlockMedia;\r
+ EFI_LBA Capacity;\r
+ UINT16 PhyLogicSectorSupport;\r
+ UINT16 UdmaMode;\r
\r
IdentifyData = AtaDevice->IdentifyData;\r
\r
//\r
// This is a hard disk <= 120GB capacity, treat it as normal hard disk\r
//\r
- Capacity = ((UINT32)IdentifyData->user_addressable_sectors_hi << 16) | IdentifyData->user_addressable_sectors_lo;\r
+ Capacity = ((UINT32)IdentifyData->user_addressable_sectors_hi << 16) | IdentifyData->user_addressable_sectors_lo;\r
AtaDevice->Lba48Bit = FALSE;\r
}\r
\r
//\r
// Block Media Information:\r
//\r
- BlockMedia = &AtaDevice->BlockMedia;\r
+ BlockMedia = &AtaDevice->BlockMedia;\r
BlockMedia->LastBlock = Capacity - 1;\r
- BlockMedia->IoAlign = AtaDevice->AtaBusDriverData->AtaPassThru->Mode->IoAlign;\r
+ BlockMedia->IoAlign = AtaDevice->AtaBusDriverData->AtaPassThru->Mode->IoAlign;\r
//\r
// Check whether Long Physical Sector Feature is supported\r
//\r
// Check whether one physical block contains multiple physical blocks\r
//\r
if ((PhyLogicSectorSupport & BIT13) != 0) {\r
- BlockMedia->LogicalBlocksPerPhysicalBlock = (UINT32) (1 << (PhyLogicSectorSupport & 0x000f));\r
+ BlockMedia->LogicalBlocksPerPhysicalBlock = (UINT32)(1 << (PhyLogicSectorSupport & 0x000f));\r
//\r
// Check lowest alignment of logical blocks within physical block\r
//\r
if ((IdentifyData->alignment_logic_in_phy_blocks & (BIT14 | BIT15)) == BIT14) {\r
- BlockMedia->LowestAlignedLba = (EFI_LBA) ((BlockMedia->LogicalBlocksPerPhysicalBlock - ((UINT32)IdentifyData->alignment_logic_in_phy_blocks & 0x3fff)) %\r
- BlockMedia->LogicalBlocksPerPhysicalBlock);\r
+ BlockMedia->LowestAlignedLba = (EFI_LBA)((BlockMedia->LogicalBlocksPerPhysicalBlock - ((UINT32)IdentifyData->alignment_logic_in_phy_blocks & 0x3fff)) %\r
+ BlockMedia->LogicalBlocksPerPhysicalBlock);\r
}\r
}\r
+\r
//\r
// Check logical block size\r
//\r
if ((PhyLogicSectorSupport & BIT12) != 0) {\r
- BlockMedia->BlockSize = (UINT32) (((IdentifyData->logic_sector_size_hi << 16) | IdentifyData->logic_sector_size_lo) * sizeof (UINT16));\r
+ BlockMedia->BlockSize = (UINT32)(((IdentifyData->logic_sector_size_hi << 16) | IdentifyData->logic_sector_size_lo) * sizeof (UINT16));\r
}\r
+\r
AtaDevice->BlockIo.Revision = EFI_BLOCK_IO_PROTOCOL_REVISION2;\r
}\r
+\r
//\r
// Get ATA model name from identify data structure.\r
//\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Discovers whether it is a valid ATA device.\r
\r
**/\r
EFI_STATUS\r
DiscoverAtaDevice (\r
- IN OUT ATA_DEVICE *AtaDevice\r
+ IN OUT ATA_DEVICE *AtaDevice\r
)\r
{\r
EFI_STATUS Status;\r
//\r
// Prepare for ATA command block.\r
//\r
- Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));\r
- Acb->AtaCommand = ATA_CMD_IDENTIFY_DRIVE;\r
- Acb->AtaDeviceHead = (UINT8) (BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));\r
+ Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));\r
+ Acb->AtaCommand = ATA_CMD_IDENTIFY_DRIVE;\r
+ Acb->AtaDeviceHead = (UINT8)(BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));\r
\r
//\r
// Prepare for ATA pass through packet.\r
//\r
- Packet = ZeroMem (&AtaDevice->Packet, sizeof (EFI_ATA_PASS_THRU_COMMAND_PACKET));\r
- Packet->InDataBuffer = AtaDevice->IdentifyData;\r
+ Packet = ZeroMem (&AtaDevice->Packet, sizeof (EFI_ATA_PASS_THRU_COMMAND_PACKET));\r
+ Packet->InDataBuffer = AtaDevice->IdentifyData;\r
Packet->InTransferLength = sizeof (ATA_IDENTIFY_DATA);\r
- Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_IN;\r
- Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES | EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;\r
- Packet->Timeout = ATA_TIMEOUT;\r
+ Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_IN;\r
+ Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES | EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;\r
+ Packet->Timeout = ATA_TIMEOUT;\r
\r
Retry = MAX_RETRY_TIMES;\r
do {\r
**/\r
EFI_STATUS\r
TransferAtaDevice (\r
- IN OUT ATA_DEVICE *AtaDevice,\r
- IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,\r
- IN OUT VOID *Buffer,\r
- IN EFI_LBA StartLba,\r
- IN UINT32 TransferLength,\r
- IN BOOLEAN IsWrite,\r
- IN EFI_EVENT Event OPTIONAL\r
+ IN OUT ATA_DEVICE *AtaDevice,\r
+ IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,\r
+ IN OUT VOID *Buffer,\r
+ IN EFI_LBA StartLba,\r
+ IN UINT32 TransferLength,\r
+ IN BOOLEAN IsWrite,\r
+ IN EFI_EVENT Event OPTIONAL\r
)\r
{\r
EFI_ATA_COMMAND_BLOCK *Acb;\r
//\r
// Ensure AtaDevice->UdmaValid, AtaDevice->Lba48Bit and IsWrite are valid boolean values\r
//\r
- ASSERT ((UINTN) AtaDevice->UdmaValid < 2);\r
- ASSERT ((UINTN) AtaDevice->Lba48Bit < 2);\r
- ASSERT ((UINTN) IsWrite < 2);\r
+ ASSERT ((UINTN)AtaDevice->UdmaValid < 2);\r
+ ASSERT ((UINTN)AtaDevice->Lba48Bit < 2);\r
+ ASSERT ((UINTN)IsWrite < 2);\r
//\r
// Prepare for ATA command block.\r
//\r
- Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));\r
- Acb->AtaCommand = mAtaCommands[AtaDevice->UdmaValid][AtaDevice->Lba48Bit][IsWrite];\r
- Acb->AtaSectorNumber = (UINT8) StartLba;\r
- Acb->AtaCylinderLow = (UINT8) RShiftU64 (StartLba, 8);\r
- Acb->AtaCylinderHigh = (UINT8) RShiftU64 (StartLba, 16);\r
- Acb->AtaDeviceHead = (UINT8) (BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));\r
- Acb->AtaSectorCount = (UINT8) TransferLength;\r
+ Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));\r
+ Acb->AtaCommand = mAtaCommands[AtaDevice->UdmaValid][AtaDevice->Lba48Bit][IsWrite];\r
+ Acb->AtaSectorNumber = (UINT8)StartLba;\r
+ Acb->AtaCylinderLow = (UINT8)RShiftU64 (StartLba, 8);\r
+ Acb->AtaCylinderHigh = (UINT8)RShiftU64 (StartLba, 16);\r
+ Acb->AtaDeviceHead = (UINT8)(BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));\r
+ Acb->AtaSectorCount = (UINT8)TransferLength;\r
if (AtaDevice->Lba48Bit) {\r
- Acb->AtaSectorNumberExp = (UINT8) RShiftU64 (StartLba, 24);\r
- Acb->AtaCylinderLowExp = (UINT8) RShiftU64 (StartLba, 32);\r
- Acb->AtaCylinderHighExp = (UINT8) RShiftU64 (StartLba, 40);\r
- Acb->AtaSectorCountExp = (UINT8) (TransferLength >> 8);\r
+ Acb->AtaSectorNumberExp = (UINT8)RShiftU64 (StartLba, 24);\r
+ Acb->AtaCylinderLowExp = (UINT8)RShiftU64 (StartLba, 32);\r
+ Acb->AtaCylinderHighExp = (UINT8)RShiftU64 (StartLba, 40);\r
+ Acb->AtaSectorCountExp = (UINT8)(TransferLength >> 8);\r
} else {\r
- Acb->AtaDeviceHead = (UINT8) (Acb->AtaDeviceHead | RShiftU64 (StartLba, 24));\r
+ Acb->AtaDeviceHead = (UINT8)(Acb->AtaDeviceHead | RShiftU64 (StartLba, 24));\r
}\r
\r
//\r
}\r
\r
if (IsWrite) {\r
- Packet->OutDataBuffer = Buffer;\r
+ Packet->OutDataBuffer = Buffer;\r
Packet->OutTransferLength = TransferLength;\r
} else {\r
- Packet->InDataBuffer = Buffer;\r
+ Packet->InDataBuffer = Buffer;\r
Packet->InTransferLength = TransferLength;\r
}\r
\r
Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsWrite];\r
- Packet->Length = EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;\r
+ Packet->Length = EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;\r
//\r
// |------------------------|-----------------|------------------------|-----------------|\r
// | ATA PIO Transfer Mode | Transfer Rate | ATA DMA Transfer Mode | Transfer Rate |\r
//\r
// Calculate the maximum timeout value for DMA read/write operation.\r
//\r
- Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 2100000) + 31);\r
+ Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 2100000) + 31);\r
} else {\r
//\r
// Calculate the maximum timeout value for PIO read/write operation\r
//\r
- Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 3300000) + 31);\r
+ Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 3300000) + 31);\r
}\r
\r
return AtaDevicePassThru (AtaDevice, TaskPacket, Event);\r
if (Task->Packet.Asb != NULL) {\r
FreeAlignedBuffer (Task->Packet.Asb, sizeof (EFI_ATA_STATUS_BLOCK));\r
}\r
+\r
if (Task->Packet.Acb != NULL) {\r
FreePool (Task->Packet.Acb);\r
}\r
VOID\r
EFIAPI\r
AtaTerminateNonBlockingTask (\r
- IN ATA_DEVICE *AtaDevice\r
+ IN ATA_DEVICE *AtaDevice\r
)\r
{\r
- BOOLEAN SubTaskEmpty;\r
- EFI_TPL OldTpl;\r
- ATA_BUS_ASYN_TASK *AtaTask;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *List;\r
+ BOOLEAN SubTaskEmpty;\r
+ EFI_TPL OldTpl;\r
+ ATA_BUS_ASYN_TASK *AtaTask;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *List;\r
\r
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
//\r
\r
List = &AtaDevice->AtaTaskList;\r
for (Entry = GetFirstNode (List); !IsNull (List, Entry);) {\r
- AtaTask = ATA_ASYN_TASK_FROM_ENTRY (Entry);\r
+ AtaTask = ATA_ASYN_TASK_FROM_ENTRY (Entry);\r
AtaTask->Token->TransactionStatus = EFI_ABORTED;\r
gBS->SignalEvent (AtaTask->Token->Event);\r
\r
Entry = RemoveEntryList (Entry);\r
FreePool (AtaTask);\r
}\r
+\r
gBS->RestoreTPL (OldTpl);\r
\r
do {\r
//\r
// Aborting operation has been done. From now on, don't need to abort normal operation.\r
//\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
AtaDevice->Abort = FALSE;\r
gBS->RestoreTPL (OldTpl);\r
}\r
VOID\r
EFIAPI\r
AtaNonBlockingCallBack (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- ATA_BUS_ASYN_SUB_TASK *Task;\r
- ATA_BUS_ASYN_TASK *AtaTask;\r
- ATA_DEVICE *AtaDevice;\r
- LIST_ENTRY *Entry;\r
- EFI_STATUS Status;\r
+ ATA_BUS_ASYN_SUB_TASK *Task;\r
+ ATA_BUS_ASYN_TASK *AtaTask;\r
+ ATA_DEVICE *AtaDevice;\r
+ LIST_ENTRY *Entry;\r
+ EFI_STATUS Status;\r
\r
- Task = (ATA_BUS_ASYN_SUB_TASK *) Context;\r
+ Task = (ATA_BUS_ASYN_SUB_TASK *)Context;\r
gBS->CloseEvent (Event);\r
\r
AtaDevice = Task->AtaDevice;\r
//\r
// Reduce the SubEventCount, till it comes to zero.\r
//\r
- (*Task->UnsignalledEventCount) --;\r
+ (*Task->UnsignalledEventCount)--;\r
DEBUG ((DEBUG_BLKIO, "UnsignalledEventCount = %d\n", *Task->UnsignalledEventCount));\r
\r
//\r
FreePool (Task->UnsignalledEventCount);\r
FreePool (Task->IsError);\r
\r
-\r
//\r
// Finish all subtasks and move to the next task in AtaTaskList.\r
//\r
AtaTask->Token->TransactionStatus = Status;\r
gBS->SignalEvent (AtaTask->Token->Event);\r
}\r
+\r
RemoveEntryList (Entry);\r
FreePool (AtaTask);\r
}\r
\r
**/\r
EFI_STATUS\r
-AccessAtaDevice(\r
- IN OUT ATA_DEVICE *AtaDevice,\r
- IN OUT UINT8 *Buffer,\r
- IN EFI_LBA StartLba,\r
- IN UINTN NumberOfBlocks,\r
- IN BOOLEAN IsWrite,\r
- IN OUT EFI_BLOCK_IO2_TOKEN *Token\r
+AccessAtaDevice (\r
+ IN OUT ATA_DEVICE *AtaDevice,\r
+ IN OUT UINT8 *Buffer,\r
+ IN EFI_LBA StartLba,\r
+ IN UINTN NumberOfBlocks,\r
+ IN BOOLEAN IsWrite,\r
+ IN OUT EFI_BLOCK_IO2_TOKEN *Token\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN MaxTransferBlockNumber;\r
- UINTN TransferBlockNumber;\r
- UINTN BlockSize;\r
- ATA_BUS_ASYN_SUB_TASK *SubTask;\r
- UINTN *EventCount;\r
- UINTN TempCount;\r
- ATA_BUS_ASYN_TASK *AtaTask;\r
- EFI_EVENT SubEvent;\r
- UINTN Index;\r
- BOOLEAN *IsError;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ UINTN MaxTransferBlockNumber;\r
+ UINTN TransferBlockNumber;\r
+ UINTN BlockSize;\r
+ ATA_BUS_ASYN_SUB_TASK *SubTask;\r
+ UINTN *EventCount;\r
+ UINTN TempCount;\r
+ ATA_BUS_ASYN_TASK *AtaTask;\r
+ EFI_EVENT SubEvent;\r
+ UINTN Index;\r
+ BOOLEAN *IsError;\r
+ EFI_TPL OldTpl;\r
\r
TempCount = 0;\r
Status = EFI_SUCCESS;\r
//\r
// Ensure AtaDevice->Lba48Bit is a valid boolean value\r
//\r
- ASSERT ((UINTN) AtaDevice->Lba48Bit < 2);\r
+ ASSERT ((UINTN)AtaDevice->Lba48Bit < 2);\r
MaxTransferBlockNumber = mMaxTransferBlockNumber[AtaDevice->Lba48Bit];\r
BlockSize = AtaDevice->BlockMedia.BlockSize;\r
\r
gBS->RestoreTPL (OldTpl);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
AtaTask->AtaDevice = AtaDevice;\r
AtaTask->Buffer = Buffer;\r
AtaTask->IsWrite = IsWrite;\r
gBS->RestoreTPL (OldTpl);\r
return EFI_SUCCESS;\r
}\r
+\r
gBS->RestoreTPL (OldTpl);\r
\r
Token->TransactionStatus = EFI_SUCCESS;\r
- EventCount = AllocateZeroPool (sizeof (UINTN));\r
+ EventCount = AllocateZeroPool (sizeof (UINTN));\r
if (EventCount == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
FreePool (EventCount);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
DEBUG ((DEBUG_BLKIO, "Allocation IsError Addr=%x\n", IsError));\r
- *IsError = FALSE;\r
+ *IsError = FALSE;\r
TempCount = (NumberOfBlocks + MaxTransferBlockNumber - 1) / MaxTransferBlockNumber;\r
*EventCount = TempCount;\r
DEBUG ((DEBUG_BLKIO, "AccessAtaDevice, NumberOfBlocks=%x\n", NumberOfBlocks));\r
if (NumberOfBlocks > MaxTransferBlockNumber) {\r
TransferBlockNumber = MaxTransferBlockNumber;\r
NumberOfBlocks -= MaxTransferBlockNumber;\r
- } else {\r
+ } else {\r
TransferBlockNumber = NumberOfBlocks;\r
NumberOfBlocks = 0;\r
}\r
goto EXIT;\r
}\r
\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
SubTask->UnsignalledEventCount = EventCount;\r
SubTask->Signature = ATA_SUB_TASK_SIGNATURE;\r
SubTask->AtaDevice = AtaDevice;\r
goto EXIT;\r
}\r
\r
- Status = TransferAtaDevice (AtaDevice, &SubTask->Packet, Buffer, StartLba, (UINT32) TransferBlockNumber, IsWrite, SubEvent);\r
+ Status = TransferAtaDevice (AtaDevice, &SubTask->Packet, Buffer, StartLba, (UINT32)TransferBlockNumber, IsWrite, SubEvent);\r
} else {\r
//\r
// Blocking Mode.\r
//\r
DEBUG ((DEBUG_BLKIO, "Blocking AccessAtaDevice, TransferBlockNumber=%x; StartLba = %x\n", TransferBlockNumber, StartLba));\r
- Status = TransferAtaDevice (AtaDevice, NULL, Buffer, StartLba, (UINT32) TransferBlockNumber, IsWrite, NULL);\r
+ Status = TransferAtaDevice (AtaDevice, NULL, Buffer, StartLba, (UINT32)TransferBlockNumber, IsWrite, NULL);\r
}\r
\r
if (EFI_ERROR (Status)) {\r
// Release resource at non-blocking mode.\r
//\r
if (EFI_ERROR (Status)) {\r
- OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
Token->TransactionStatus = Status;\r
- *EventCount = (*EventCount) - (TempCount - Index);\r
- *IsError = TRUE;\r
+ *EventCount = (*EventCount) - (TempCount - Index);\r
+ *IsError = TRUE;\r
\r
if (*EventCount == 0) {\r
FreePool (EventCount);\r
if (SubEvent != NULL) {\r
gBS->CloseEvent (SubEvent);\r
}\r
+\r
gBS->RestoreTPL (OldTpl);\r
}\r
}\r
EFI_STATUS\r
EFIAPI\r
TrustTransferAtaDevice (\r
- IN OUT ATA_DEVICE *AtaDevice,\r
- IN OUT VOID *Buffer,\r
- IN UINT8 SecurityProtocolId,\r
- IN UINT16 SecurityProtocolSpecificData,\r
- IN UINTN TransferLength,\r
- IN BOOLEAN IsTrustSend,\r
- IN UINT64 Timeout,\r
- OUT UINTN *TransferLengthOut\r
+ IN OUT ATA_DEVICE *AtaDevice,\r
+ IN OUT VOID *Buffer,\r
+ IN UINT8 SecurityProtocolId,\r
+ IN UINT16 SecurityProtocolSpecificData,\r
+ IN UINTN TransferLength,\r
+ IN BOOLEAN IsTrustSend,\r
+ IN UINT64 Timeout,\r
+ OUT UINTN *TransferLengthOut\r
)\r
{\r
EFI_ATA_COMMAND_BLOCK *Acb;\r
//\r
// Ensure AtaDevice->UdmaValid and IsTrustSend are valid boolean values\r
//\r
- ASSERT ((UINTN) AtaDevice->UdmaValid < 2);\r
- ASSERT ((UINTN) IsTrustSend < 2);\r
+ ASSERT ((UINTN)AtaDevice->UdmaValid < 2);\r
+ ASSERT ((UINTN)IsTrustSend < 2);\r
//\r
// Prepare for ATA command block.\r
//\r
Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));\r
if (TransferLength == 0) {\r
- Acb->AtaCommand = ATA_CMD_TRUST_NON_DATA;\r
+ Acb->AtaCommand = ATA_CMD_TRUST_NON_DATA;\r
} else {\r
- Acb->AtaCommand = mAtaTrustCommands[AtaDevice->UdmaValid][IsTrustSend];\r
+ Acb->AtaCommand = mAtaTrustCommands[AtaDevice->UdmaValid][IsTrustSend];\r
}\r
- Acb->AtaFeatures = SecurityProtocolId;\r
- Acb->AtaSectorCount = (UINT8) (TransferLength / 512);\r
- Acb->AtaSectorNumber = (UINT8) ((TransferLength / 512) >> 8);\r
+\r
+ Acb->AtaFeatures = SecurityProtocolId;\r
+ Acb->AtaSectorCount = (UINT8)(TransferLength / 512);\r
+ Acb->AtaSectorNumber = (UINT8)((TransferLength / 512) >> 8);\r
//\r
// NOTE: ATA Spec has no explicitly definition for Security Protocol Specific layout.\r
// Here use big endian for Cylinder register.\r
//\r
- Acb->AtaCylinderHigh = (UINT8) SecurityProtocolSpecificData;\r
- Acb->AtaCylinderLow = (UINT8) (SecurityProtocolSpecificData >> 8);\r
- Acb->AtaDeviceHead = (UINT8) (BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));\r
+ Acb->AtaCylinderHigh = (UINT8)SecurityProtocolSpecificData;\r
+ Acb->AtaCylinderLow = (UINT8)(SecurityProtocolSpecificData >> 8);\r
+ Acb->AtaDeviceHead = (UINT8)(BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));\r
\r
//\r
// Prepare for ATA pass through packet.\r
if (TransferLength == 0) {\r
Packet->InTransferLength = 0;\r
Packet->OutTransferLength = 0;\r
- Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_ATA_NON_DATA;\r
+ Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_ATA_NON_DATA;\r
} else if (IsTrustSend) {\r
//\r
// Check the alignment of the incoming buffer prior to invoking underlying ATA PassThru\r
FreePool (Buffer);\r
Buffer = NewBuffer;\r
}\r
- Packet->OutDataBuffer = Buffer;\r
- Packet->OutTransferLength = (UINT32) TransferLength;\r
- Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];\r
+\r
+ Packet->OutDataBuffer = Buffer;\r
+ Packet->OutTransferLength = (UINT32)TransferLength;\r
+ Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];\r
} else {\r
- Packet->InDataBuffer = Buffer;\r
- Packet->InTransferLength = (UINT32) TransferLength;\r
- Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];\r
+ Packet->InDataBuffer = Buffer;\r
+ Packet->InTransferLength = (UINT32)TransferLength;\r
+ Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];\r
}\r
- Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES;\r
- Packet->Timeout = Timeout;\r
+\r
+ Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES;\r
+ Packet->Timeout = Timeout;\r
\r
Status = AtaDevicePassThru (AtaDevice, NULL, NULL);\r
if (TransferLengthOut != NULL) {\r
- if (! IsTrustSend) {\r
+ if (!IsTrustSend) {\r
*TransferLengthOut = Packet->InTransferLength;\r
}\r
}\r
+\r
return Status;\r
}\r