1 | /** @file
|
---|
2 |
|
---|
3 | Virtio SCSI Host Device specific type and macro definitions corresponding to
|
---|
4 | the virtio-0.9.5 specification.
|
---|
5 |
|
---|
6 | Copyright (C) 2012, Red Hat, Inc.
|
---|
7 |
|
---|
8 | This program and the accompanying materials are licensed and made available
|
---|
9 | under the terms and conditions of the BSD License which accompanies this
|
---|
10 | distribution. The full text of the license may be found at
|
---|
11 | http://opensource.org/licenses/bsd-license.php
|
---|
12 |
|
---|
13 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
|
---|
14 | WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
---|
15 |
|
---|
16 | **/
|
---|
17 |
|
---|
18 | #ifndef _VIRTIO_SCSI_H_
|
---|
19 | #define _VIRTIO_SCSI_H_
|
---|
20 |
|
---|
21 | #include <IndustryStandard/Virtio.h>
|
---|
22 |
|
---|
23 |
|
---|
24 | //
|
---|
25 | // virtio-0.9.5, Appendix I: SCSI Host Device
|
---|
26 | //
|
---|
27 | #pragma pack(1)
|
---|
28 | typedef struct {
|
---|
29 | UINT32 NumQueues;
|
---|
30 | UINT32 SegMax;
|
---|
31 | UINT32 MaxSectors;
|
---|
32 | UINT32 CmdPerLun;
|
---|
33 | UINT32 EventInfoSize;
|
---|
34 | UINT32 SenseSize;
|
---|
35 | UINT32 CdbSize;
|
---|
36 | UINT16 MaxChannel;
|
---|
37 | UINT16 MaxTarget;
|
---|
38 | UINT32 MaxLun;
|
---|
39 | } VIRTIO_SCSI_CONFIG;
|
---|
40 | #pragma pack()
|
---|
41 |
|
---|
42 | #define OFFSET_OF_VSCSI(Field) OFFSET_OF (VIRTIO_SCSI_CONFIG, Field)
|
---|
43 | #define SIZE_OF_VSCSI(Field) (sizeof ((VIRTIO_SCSI_CONFIG *) 0)->Field)
|
---|
44 |
|
---|
45 | #define VIRTIO_SCSI_F_INOUT BIT0
|
---|
46 | #define VIRTIO_SCSI_F_HOTPLUG BIT1
|
---|
47 |
|
---|
48 | //
|
---|
49 | // We expect these maximum sizes from the host. Also we force the CdbLength and
|
---|
50 | // SenseDataLength parameters of EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() not
|
---|
51 | // to exceed these limits. See UEFI 2.3.1 errata C 14.7.
|
---|
52 | //
|
---|
53 | #define VIRTIO_SCSI_CDB_SIZE 32
|
---|
54 | #define VIRTIO_SCSI_SENSE_SIZE 96
|
---|
55 |
|
---|
56 | //
|
---|
57 | // We pass the dynamically sized buffers ("dataout", "datain") in separate ring
|
---|
58 | // descriptors.
|
---|
59 | //
|
---|
60 | #pragma pack(1)
|
---|
61 | typedef struct {
|
---|
62 | UINT8 Lun[8];
|
---|
63 | UINT64 Id;
|
---|
64 | UINT8 TaskAttr;
|
---|
65 | UINT8 Prio;
|
---|
66 | UINT8 Crn;
|
---|
67 | UINT8 Cdb[VIRTIO_SCSI_CDB_SIZE];
|
---|
68 | } VIRTIO_SCSI_REQ;
|
---|
69 |
|
---|
70 | typedef struct {
|
---|
71 | UINT32 SenseLen;
|
---|
72 | UINT32 Residual;
|
---|
73 | UINT16 StatusQualifier;
|
---|
74 | UINT8 Status;
|
---|
75 | UINT8 Response;
|
---|
76 | UINT8 Sense[VIRTIO_SCSI_SENSE_SIZE];
|
---|
77 | } VIRTIO_SCSI_RESP;
|
---|
78 | #pragma pack()
|
---|
79 |
|
---|
80 | //
|
---|
81 | // selector of first virtio queue usable for request transfer
|
---|
82 | //
|
---|
83 | #define VIRTIO_SCSI_REQUEST_QUEUE 2
|
---|
84 |
|
---|
85 | //
|
---|
86 | // host response codes
|
---|
87 | //
|
---|
88 | #define VIRTIO_SCSI_S_OK 0
|
---|
89 | #define VIRTIO_SCSI_S_OVERRUN 1
|
---|
90 | #define VIRTIO_SCSI_S_ABORTED 2
|
---|
91 | #define VIRTIO_SCSI_S_BAD_TARGET 3
|
---|
92 | #define VIRTIO_SCSI_S_RESET 4
|
---|
93 | #define VIRTIO_SCSI_S_BUSY 5
|
---|
94 | #define VIRTIO_SCSI_S_TRANSPORT_FAILURE 6
|
---|
95 | #define VIRTIO_SCSI_S_TARGET_FAILURE 7
|
---|
96 | #define VIRTIO_SCSI_S_NEXUS_FAILURE 8
|
---|
97 | #define VIRTIO_SCSI_S_FAILURE 9
|
---|
98 |
|
---|
99 | #endif // _VIRTIO_SCSI_H_
|
---|