UINT64 *Prp;\r
VOID *PrpListHost;\r
UINTN PrpListNo;\r
+ UINT32 Attributes;\r
UINT32 IoAlign;\r
UINT32 Data;\r
NVME_PASS_THRU_ASYNC_REQ *AsyncRequest;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ //\r
+ // 'Attributes' with neither EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL nor\r
+ // EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL set is an illegal\r
+ // configuration.\r
+ //\r
+ Attributes = This->Mode->Attributes;\r
+ if ((Attributes & (EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL |\r
+ EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL)) == 0) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
//\r
// Buffer alignment check for TransferBuffer & MetadataBuffer.\r
//\r
- IoAlign = This->Mode->IoAlign;\r
+ IoAlign = This->Mode->IoAlign;\r
if (IoAlign > 0 && (((UINTN) Packet->TransferBuffer & (IoAlign - 1)) != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r