1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <asm/byteorder.h>
24
25 struct lpfc_hba;
26 #define LPFC_FCP_CDB_LEN 16
27
28 #define list_remove_head(list, entry, type, member) \
29 do { \
30 entry = NULL; \
31 if (!list_empty(list)) { \
32 entry = list_entry((list)->next, type, member); \
33 list_del_init(&entry->member); \
34 } \
35 } while(0)
36
37 #define list_get_first(list, type, member) \
38 (list_empty(list)) ? NULL : \
39 list_entry((list)->next, type, member)
40
41
42 struct lpfc_rport_data {
43 struct lpfc_nodelist *pnode;
44 };
45
46 struct lpfc_device_id {
47 struct lpfc_name vport_wwpn;
48 struct lpfc_name target_wwpn;
49 uint64_t lun;
50 };
51
52 struct lpfc_device_data {
53 struct list_head listentry;
54 struct lpfc_rport_data *rport_data;
55 struct lpfc_device_id device_id;
56 uint8_t priority;
57 bool oas_enabled;
58 bool available;
59 };
60
61 struct fcp_rsp {
62 uint32_t rspRsvd1;
63 uint32_t rspRsvd2;
64
65 uint8_t rspStatus0;
66 uint8_t rspStatus1;
67 uint8_t rspStatus2;
68 #define RSP_LEN_VALID 0x01
69 #define SNS_LEN_VALID 0x02
70 #define RESID_OVER 0x04
71 #define RESID_UNDER 0x08
72 uint8_t rspStatus3;
73
74 uint32_t rspResId;
75
76
77 uint32_t rspSnsLen;
78
79 uint32_t rspRspLen;
80
81
82 uint8_t rspInfo0;
83 uint8_t rspInfo1;
84 uint8_t rspInfo2;
85 uint8_t rspInfo3;
86
87 #define RSP_NO_FAILURE 0x00
88 #define RSP_DATA_BURST_ERR 0x01
89 #define RSP_CMD_FIELD_ERR 0x02
90 #define RSP_RO_MISMATCH_ERR 0x03
91 #define RSP_TM_NOT_SUPPORTED 0x04
92 #define RSP_TM_NOT_COMPLETED 0x05
93 #define RSP_TM_INVALID_LU 0x09
94
95 uint32_t rspInfoRsvd;
96
97 uint8_t rspSnsInfo[128];
98 #define SNS_ILLEGAL_REQ 0x05
99 #define SNSCOD_BADCMD 0x20
100 };
101
102 struct fcp_cmnd {
103 struct scsi_lun fcp_lun;
104
105 uint8_t fcpCntl0;
106 uint8_t fcpCntl1;
107 #define SIMPLE_Q 0x00
108 #define HEAD_OF_Q 0x01
109 #define ORDERED_Q 0x02
110 #define ACA_Q 0x04
111 #define UNTAGGED 0x05
112 uint8_t fcpCntl2;
113 #define FCP_ABORT_TASK_SET 0x02
114 #define FCP_CLEAR_TASK_SET 0x04
115 #define FCP_BUS_RESET 0x08
116 #define FCP_LUN_RESET 0x10
117 #define FCP_TARGET_RESET 0x20
118 #define FCP_CLEAR_ACA 0x40
119 #define FCP_TERMINATE_TASK 0x80
120 uint8_t fcpCntl3;
121 #define WRITE_DATA 0x01
122 #define READ_DATA 0x02
123
124 uint8_t fcpCdb[LPFC_FCP_CDB_LEN];
125 uint32_t fcpDl;
126
127 };
128
129 struct lpfc_scsicmd_bkt {
130 uint32_t cmd_count;
131 };
132
133 #define LPFC_SCSI_DMA_EXT_SIZE 264
134 #define LPFC_BPL_SIZE 1024
135 #define MDAC_DIRECT_CMD 0x22
136
137 #define FIND_FIRST_OAS_LUN 0
138 #define NO_MORE_OAS_LUN -1
139 #define NOT_OAS_ENABLED_LUN NO_MORE_OAS_LUN
140
141 #ifndef FC_PORTSPEED_128GBIT
142 #define FC_PORTSPEED_128GBIT 0x2000
143 #endif
144
145 #define TXRDY_PAYLOAD_LEN 12
146
147
148 #define LPFC_MAX_SCSI_INFO_TMP_LEN 79
149