diff options
Diffstat (limited to 'drivers/scsi/fnic/fnic_res.h')
-rw-r--r-- | drivers/scsi/fnic/fnic_res.h | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/drivers/scsi/fnic/fnic_res.h b/drivers/scsi/fnic/fnic_res.h index b6f310262534..ef8aaf2156dd 100644 --- a/drivers/scsi/fnic/fnic_res.h +++ b/drivers/scsi/fnic/fnic_res.h | |||
@@ -51,6 +51,31 @@ static inline void fnic_queue_wq_desc(struct vnic_wq *wq, | |||
51 | vnic_wq_post(wq, os_buf, dma_addr, len, sop, eop); | 51 | vnic_wq_post(wq, os_buf, dma_addr, len, sop, eop); |
52 | } | 52 | } |
53 | 53 | ||
54 | static inline void fnic_queue_wq_eth_desc(struct vnic_wq *wq, | ||
55 | void *os_buf, dma_addr_t dma_addr, | ||
56 | unsigned int len, | ||
57 | int vlan_tag_insert, | ||
58 | unsigned int vlan_tag, | ||
59 | int cq_entry) | ||
60 | { | ||
61 | struct wq_enet_desc *desc = vnic_wq_next_desc(wq); | ||
62 | |||
63 | wq_enet_desc_enc(desc, | ||
64 | (u64)dma_addr | VNIC_PADDR_TARGET, | ||
65 | (u16)len, | ||
66 | 0, /* mss_or_csum_offset */ | ||
67 | 0, /* fc_eof */ | ||
68 | 0, /* offload_mode */ | ||
69 | 1, /* eop */ | ||
70 | (u8)cq_entry, | ||
71 | 0, /* fcoe_encap */ | ||
72 | (u8)vlan_tag_insert, | ||
73 | (u16)vlan_tag, | ||
74 | 0 /* loopback */); | ||
75 | |||
76 | vnic_wq_post(wq, os_buf, dma_addr, len, 1, 1); | ||
77 | } | ||
78 | |||
54 | static inline void fnic_queue_wq_copy_desc_icmnd_16(struct vnic_wq_copy *wq, | 79 | static inline void fnic_queue_wq_copy_desc_icmnd_16(struct vnic_wq_copy *wq, |
55 | u32 req_id, | 80 | u32 req_id, |
56 | u32 lunmap_id, u8 spl_flags, | 81 | u32 lunmap_id, u8 spl_flags, |
@@ -58,6 +83,7 @@ static inline void fnic_queue_wq_copy_desc_icmnd_16(struct vnic_wq_copy *wq, | |||
58 | u64 sgl_addr, u64 sns_addr, | 83 | u64 sgl_addr, u64 sns_addr, |
59 | u8 crn, u8 pri_ta, | 84 | u8 crn, u8 pri_ta, |
60 | u8 flags, u8 *scsi_cdb, | 85 | u8 flags, u8 *scsi_cdb, |
86 | u8 cdb_len, | ||
61 | u32 data_len, u8 *lun, | 87 | u32 data_len, u8 *lun, |
62 | u32 d_id, u16 mss, | 88 | u32 d_id, u16 mss, |
63 | u32 ratov, u32 edtov) | 89 | u32 ratov, u32 edtov) |
@@ -82,7 +108,8 @@ static inline void fnic_queue_wq_copy_desc_icmnd_16(struct vnic_wq_copy *wq, | |||
82 | desc->u.icmnd_16.pri_ta = pri_ta; /* SCSI Pri & Task attribute */ | 108 | desc->u.icmnd_16.pri_ta = pri_ta; /* SCSI Pri & Task attribute */ |
83 | desc->u.icmnd_16._resvd1 = 0; /* reserved: should be 0 */ | 109 | desc->u.icmnd_16._resvd1 = 0; /* reserved: should be 0 */ |
84 | desc->u.icmnd_16.flags = flags; /* command flags */ | 110 | desc->u.icmnd_16.flags = flags; /* command flags */ |
85 | memcpy(desc->u.icmnd_16.scsi_cdb, scsi_cdb, CDB_16); /* SCSI CDB */ | 111 | memset(desc->u.icmnd_16.scsi_cdb, 0, CDB_16); |
112 | memcpy(desc->u.icmnd_16.scsi_cdb, scsi_cdb, cdb_len); /* SCSI CDB */ | ||
86 | desc->u.icmnd_16.data_len = data_len; /* length of data expected */ | 113 | desc->u.icmnd_16.data_len = data_len; /* length of data expected */ |
87 | memcpy(desc->u.icmnd_16.lun, lun, LUN_ADDRESS); /* LUN address */ | 114 | memcpy(desc->u.icmnd_16.lun, lun, LUN_ADDRESS); /* LUN address */ |
88 | desc->u.icmnd_16._resvd2 = 0; /* reserved */ | 115 | desc->u.icmnd_16._resvd2 = 0; /* reserved */ |
@@ -132,12 +159,37 @@ static inline void fnic_queue_wq_copy_desc_flogi_reg(struct vnic_wq_copy *wq, | |||
132 | desc->hdr.tag.u.req_id = req_id; /* id for this request */ | 159 | desc->hdr.tag.u.req_id = req_id; /* id for this request */ |
133 | 160 | ||
134 | desc->u.flogi_reg.format = format; | 161 | desc->u.flogi_reg.format = format; |
162 | desc->u.flogi_reg._resvd = 0; | ||
135 | hton24(desc->u.flogi_reg.s_id, s_id); | 163 | hton24(desc->u.flogi_reg.s_id, s_id); |
136 | memcpy(desc->u.flogi_reg.gateway_mac, gw_mac, ETH_ALEN); | 164 | memcpy(desc->u.flogi_reg.gateway_mac, gw_mac, ETH_ALEN); |
137 | 165 | ||
138 | vnic_wq_copy_post(wq); | 166 | vnic_wq_copy_post(wq); |
139 | } | 167 | } |
140 | 168 | ||
169 | static inline void fnic_queue_wq_copy_desc_fip_reg(struct vnic_wq_copy *wq, | ||
170 | u32 req_id, u32 s_id, | ||
171 | u8 *fcf_mac, u8 *ha_mac, | ||
172 | u32 r_a_tov, u32 e_d_tov) | ||
173 | { | ||
174 | struct fcpio_host_req *desc = vnic_wq_copy_next_desc(wq); | ||
175 | |||
176 | desc->hdr.type = FCPIO_FLOGI_FIP_REG; /* enum fcpio_type */ | ||
177 | desc->hdr.status = 0; /* header status entry */ | ||
178 | desc->hdr._resvd = 0; /* reserved */ | ||
179 | desc->hdr.tag.u.req_id = req_id; /* id for this request */ | ||
180 | |||
181 | desc->u.flogi_fip_reg._resvd0 = 0; | ||
182 | hton24(desc->u.flogi_fip_reg.s_id, s_id); | ||
183 | memcpy(desc->u.flogi_fip_reg.fcf_mac, fcf_mac, ETH_ALEN); | ||
184 | desc->u.flogi_fip_reg._resvd1 = 0; | ||
185 | desc->u.flogi_fip_reg.r_a_tov = r_a_tov; | ||
186 | desc->u.flogi_fip_reg.e_d_tov = e_d_tov; | ||
187 | memcpy(desc->u.flogi_fip_reg.ha_mac, ha_mac, ETH_ALEN); | ||
188 | desc->u.flogi_fip_reg._resvd2 = 0; | ||
189 | |||
190 | vnic_wq_copy_post(wq); | ||
191 | } | ||
192 | |||
141 | static inline void fnic_queue_wq_copy_desc_fw_reset(struct vnic_wq_copy *wq, | 193 | static inline void fnic_queue_wq_copy_desc_fw_reset(struct vnic_wq_copy *wq, |
142 | u32 req_id) | 194 | u32 req_id) |
143 | { | 195 | { |