\r
@param[in] This This instance of VIRTIO_DEVICE_PROTOCOL\r
\r
- @param[out] DeviceFeatures The 32-bit device features field.\r
+ @param[out] DeviceFeatures The device features field.\r
\r
@retval EFI_SUCCESS The data was read successfully.\r
@retval EFI_UNSUPPORTED The underlying IO device doesn't support the\r
EFI_STATUS\r
(EFIAPI *VIRTIO_GET_DEVICE_FEATURES) (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- OUT UINT32 *DeviceFeatures\r
+ OUT UINT64 *DeviceFeatures\r
);\r
\r
/**\r
\r
@param[in] This This instance of VIRTIO_DEVICE_PROTOCOL\r
\r
- @param[in] Features The 32-bit guest guest features field\r
+ @param[in] Features The guest features field\r
\r
**/\r
typedef\r
EFI_STATUS\r
(EFIAPI *VIRTIO_SET_GUEST_FEATURES) (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT32 Features\r
+ IN UINT64 Features\r
);\r
\r
/**\r
EFIAPI\r
VirtioMmioGetDeviceFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- OUT UINT32 *DeviceFeatures\r
+ OUT UINT64 *DeviceFeatures\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
VirtioMmioSetGuestFeatures (\r
VIRTIO_DEVICE_PROTOCOL *This,\r
- UINT32 Features\r
+ UINT64 Features\r
);\r
\r
#endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_\r
EFIAPI\r
VirtioMmioGetDeviceFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- OUT UINT32 *DeviceFeatures\r
+ OUT UINT64 *DeviceFeatures\r
)\r
{\r
VIRTIO_MMIO_DEVICE *Device;\r
EFIAPI\r
VirtioMmioSetGuestFeatures (\r
VIRTIO_DEVICE_PROTOCOL *This,\r
- UINT32 Features\r
+ UINT64 Features\r
)\r
{\r
VIRTIO_MMIO_DEVICE *Device;\r
\r
Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This);\r
\r
- VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES, Features);\r
+ if (Features > MAX_UINT32) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+ VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES,\r
+ (UINT32)Features);\r
\r
return EFI_SUCCESS;\r
}\r
UINT8 NextDevStat;\r
EFI_STATUS Status;\r
\r
- UINT32 Features;\r
+ UINT64 Features;\r
UINT64 NumSectors;\r
UINT32 BlockSize;\r
UINT8 PhysicalBlockExp;\r
{\r
EFI_STATUS Status;\r
UINT8 NextDevStat;\r
- UINT32 Features;\r
+ UINT64 Features;\r
UINTN MacIdx;\r
UINT16 LinkStatus;\r
\r
EFI_TPL OldTpl;\r
EFI_STATUS Status;\r
UINT8 NextDevStat;\r
- UINT32 Features;\r
+ UINT64 Features;\r
\r
if (This == NULL) {\r
return EFI_INVALID_PARAMETER;\r
EFIAPI\r
VirtioPciGetDeviceFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- OUT UINT32 *DeviceFeatures\r
+ OUT UINT64 *DeviceFeatures\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
VirtioPciSetGuestFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT32 Features\r
+ IN UINT64 Features\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
VirtioPciGetDeviceFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- OUT UINT32 *DeviceFeatures\r
+ OUT UINT64 *DeviceFeatures\r
)\r
{\r
VIRTIO_PCI_DEVICE *Dev;\r
+ EFI_STATUS Status;\r
+ UINT32 Features32;\r
\r
if (DeviceFeatures == NULL) {\r
return EFI_INVALID_PARAMETER;\r
\r
Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This);\r
\r
- return VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_DEVICE_FEATURES, sizeof (UINT32),\r
- sizeof (UINT32), DeviceFeatures);\r
+ Status = VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_DEVICE_FEATURES,\r
+ sizeof (UINT32), sizeof (UINT32), &Features32);\r
+ if (!EFI_ERROR (Status)) {\r
+ *DeviceFeatures = Features32;\r
+ }\r
+ return Status;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
VirtioPciSetGuestFeatures (\r
IN VIRTIO_DEVICE_PROTOCOL *This,\r
- IN UINT32 Features\r
+ IN UINT64 Features\r
)\r
{\r
VIRTIO_PCI_DEVICE *Dev;\r
\r
Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This);\r
\r
+ if (Features > MAX_UINT32) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_GUEST_FEATURES,\r
sizeof (UINT32), Features);\r
}\r
UINT8 NextDevStat;\r
EFI_STATUS Status;\r
UINT16 QueueSize;\r
- UINT32 Features;\r
+ UINT64 Features;\r
\r
//\r
// Execute virtio-0.9.5, 2.2.1 Device Initialization Sequence.\r
UINT8 NextDevStat;\r
EFI_STATUS Status;\r
\r
- UINT32 Features;\r
+ UINT64 Features;\r
UINT16 MaxChannel; // for validation only\r
UINT32 NumQueues; // for validation only\r
UINT16 QueueSize;\r