diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-09 22:42:25 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-09 22:42:25 -0500 |
commit | 382f51fe2f2276344d8a21447656778cdf6583b6 (patch) | |
tree | c2836a2cca4126c9c026ce5aa2fdf9f1c8ccded6 /drivers/scsi/fnic/fnic_res.h | |
parent | 701791cc3c8fc6dd83f6ec8af7e2541b4a316606 (diff) | |
parent | 54987386ee3790f3900de4df2ed4deb0e18dfc9f (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (222 commits)
[SCSI] zfcp: Remove flag ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP
[SCSI] zfcp: Activate fc4s attributes for zfcp in FC transport class
[SCSI] zfcp: Block scsi_eh thread for rport state BLOCKED
[SCSI] zfcp: Update FSF error reporting
[SCSI] zfcp: Improve ELS ADISC handling
[SCSI] zfcp: Simplify handling of ct and els requests
[SCSI] zfcp: Remove ZFCP_DID_MASK
[SCSI] zfcp: Move WKA port to zfcp FC code
[SCSI] zfcp: Use common code definitions for FC CT structs
[SCSI] zfcp: Use common code definitions for FC ELS structs
[SCSI] zfcp: Update FCP protocol related code
[SCSI] zfcp: Dont fail SCSI commands when transitioning to blocked fc_rport
[SCSI] zfcp: Assign scheduled work to driver queue
[SCSI] zfcp: Remove STATUS_COMMON_REMOVE flag as it is not required anymore
[SCSI] zfcp: Implement module unloading
[SCSI] zfcp: Merge trace code for fsf requests in one function
[SCSI] zfcp: Access ports and units with container_of in sysfs code
[SCSI] zfcp: Remove suspend callback
[SCSI] zfcp: Remove global config_mutex
[SCSI] zfcp: Replace local reference counting with common kref
...
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 | { |