\r
Copyright (C) 2012, Red Hat, Inc.\r
\r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License which accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
#include <Protocol/ComponentName.h>\r
#include <Protocol/DriverBinding.h>\r
-#include <Protocol/PciIo.h>\r
#include <Protocol/ScsiPassThruExt.h>\r
\r
#include <IndustryStandard/Virtio.h>\r
\r
-\r
//\r
// This driver supports 2-byte target identifiers and 4-byte LUN identifiers.\r
//\r
// identification, and 8 bytes for LUN identification.\r
//\r
// EFI_EXT_SCSI_PASS_THRU_MODE.AdapterId is also a target identifier,\r
-// consisting of 4 bytes. Make sure TARGET_MAX_BYTES can accomodate both\r
+// consisting of 4 bytes. Make sure TARGET_MAX_BYTES can accommodate both\r
// AdapterId and our target identifiers.\r
//\r
#if TARGET_MAX_BYTES < 4\r
-# error "virtio-scsi requires TARGET_MAX_BYTES >= 4"\r
+ #error "virtio-scsi requires TARGET_MAX_BYTES >= 4"\r
#endif\r
\r
-\r
-#define VSCSI_SIG SIGNATURE_32 ('V', 'S', 'C', 'S')\r
+#define VSCSI_SIG SIGNATURE_32 ('V', 'S', 'C', 'S')\r
\r
typedef struct {\r
//\r
// at various call depths. The table to the right should make it easier to\r
// track them.\r
//\r
- // field init function init depth\r
- // ---------------------- ------------------ ----------\r
- UINT32 Signature; // DriverBindingStart 0\r
- EFI_PCI_IO_PROTOCOL *PciIo; // DriverBindingStart 0\r
- UINT64 OriginalPciAttributes; // DriverBindingStart 0\r
- BOOLEAN InOutSupported; // VirtioScsiInit 1\r
- UINT16 MaxTarget; // VirtioScsiInit 1\r
- UINT32 MaxLun; // VirtioScsiInit 1\r
- UINT32 MaxSectors; // VirtioScsiInit 1\r
- VRING Ring; // VirtioRingInit 2\r
- EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; // VirtioScsiInit 1\r
- EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; // VirtioScsiInit 1\r
+ // field init function init depth\r
+ // ---------------- ------------------ ----------\r
+ UINT32 Signature; // DriverBindingStart 0\r
+ VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0\r
+ EFI_EVENT ExitBoot; // DriverBindingStart 0\r
+ BOOLEAN InOutSupported; // VirtioScsiInit 1\r
+ UINT16 MaxTarget; // VirtioScsiInit 1\r
+ UINT32 MaxLun; // VirtioScsiInit 1\r
+ UINT32 MaxSectors; // VirtioScsiInit 1\r
+ VRING Ring; // VirtioRingInit 2\r
+ EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; // VirtioScsiInit 1\r
+ EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; // VirtioScsiInit 1\r
+ VOID *RingMap; // VirtioRingMap 2\r
} VSCSI_DEV;\r
\r
#define VIRTIO_SCSI_FROM_PASS_THRU(PassThruPointer) \\r
CR (PassThruPointer, VSCSI_DEV, PassThru, VSCSI_SIG)\r
\r
-\r
//\r
// Probe, start and stop functions of this driver, called by the DXE core for\r
// specific devices.\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiDriverBindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiDriverBindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiDriverBindingStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
);\r
\r
-\r
//\r
// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL\r
// for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiPassThru (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun,\r
- IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
- IN EFI_EVENT Event OPTIONAL\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
+ IN EFI_EVENT Event OPTIONAL\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiGetNextTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN OUT UINT8 **Target,\r
- IN OUT UINT64 *Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN OUT UINT8 **Target,\r
+ IN OUT UINT64 *Lun\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiBuildDevicePath (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun,\r
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiGetTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
- OUT UINT8 **Target,\r
- OUT UINT64 *Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
+ OUT UINT8 **Target,\r
+ OUT UINT64 *Lun\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiResetChannel (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiResetTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiGetNextTarget (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN OUT UINT8 **Target\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN OUT UINT8 **Target\r
);\r
\r
-\r
//\r
// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and\r
// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiGetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **DriverName\r
);\r
\r
-\r
EFI_STATUS\r
EFIAPI\r
VirtioScsiGetDeviceName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_HANDLE ChildHandle,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_HANDLE ChildHandle,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
);\r
\r
#endif // _VIRTIO_SCSI_DXE_H_\r