MdeModulePkg/NvmExpressDxe: Fix some bugs
1) The Queue size field in create I/O submission/completion queue cmds is 0-based. the current code is 1-based. 2) a typo on allocated memory page size. it's inconsistent that some places is using 4 pages, but a place is using 6 pages. 3) a typo on PRP/SGL mechanism judgment. should directly use Psdt field rather than Opc field. 4) some platforms may not support UINT64 width access on MMIO register. Fix it to use two 32-bit width access. Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Kinney Michael <michael.d.kinney@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14657 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -172,10 +172,12 @@ NvmeRead (
|
||||
UINT32 BlockSize;
|
||||
NVME_CONTROLLER_PRIVATE_DATA *Controller;
|
||||
UINT32 MaxTransferBlocks;
|
||||
UINTN OrginalBlocks;
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
Controller = Device->Controller;
|
||||
BlockSize = Device->Media.BlockSize;
|
||||
Status = EFI_SUCCESS;
|
||||
Controller = Device->Controller;
|
||||
BlockSize = Device->Media.BlockSize;
|
||||
OrginalBlocks = Blocks;
|
||||
|
||||
if (Controller->ControllerData->Mdts != 0) {
|
||||
MaxTransferBlocks = (1 << (Controller->ControllerData->Mdts)) * (1 << (Controller->Cap.Mpsmin + 12)) / BlockSize;
|
||||
@@ -200,7 +202,7 @@ NvmeRead (
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INFO, "NvmeRead() Lba = %8d, Blocks = %8d, BlockSize = %d Status = %r\n", Lba, Blocks, BlockSize, Status));
|
||||
DEBUG ((EFI_D_INFO, "NvmeRead() Lba = 0x%08x, Original = 0x%08x, Remaining = 0x%08x, BlockSize = 0x%x Status = %r\n", Lba, OrginalBlocks, Blocks, BlockSize, Status));
|
||||
|
||||
return Status;
|
||||
}
|
||||
@@ -229,10 +231,12 @@ NvmeWrite (
|
||||
UINT32 BlockSize;
|
||||
NVME_CONTROLLER_PRIVATE_DATA *Controller;
|
||||
UINT32 MaxTransferBlocks;
|
||||
UINTN OrginalBlocks;
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
Controller = Device->Controller;
|
||||
BlockSize = Device->Media.BlockSize;
|
||||
Status = EFI_SUCCESS;
|
||||
Controller = Device->Controller;
|
||||
BlockSize = Device->Media.BlockSize;
|
||||
OrginalBlocks = Blocks;
|
||||
|
||||
if (Controller->ControllerData->Mdts != 0) {
|
||||
MaxTransferBlocks = (1 << (Controller->ControllerData->Mdts)) * (1 << (Controller->Cap.Mpsmin + 12)) / BlockSize;
|
||||
@@ -257,7 +261,7 @@ NvmeWrite (
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INFO, "NvmeWrite() Lba = %8d, Blocks = %8d, BlockSize = %d Status = %r\n", Lba, Blocks, BlockSize, Status));
|
||||
DEBUG ((EFI_D_INFO, "NvmeWrite() Lba = 0x%08x, Original = 0x%08x, Remaining = 0x%08x, BlockSize = 0x%x Status = %r\n", Lba, OrginalBlocks, Blocks, BlockSize, Status));
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
Reference in New Issue
Block a user