diff options
author | Robert Love <robert.w.love@intel.com> | 2012-05-22 22:06:26 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-23 04:43:13 -0400 |
commit | 8d55e507d24c6db7eb012c379c62912e642eb75e (patch) | |
tree | 5118b221cf9eab4ad040c9e1bcabb794e57dc906 /include/scsi | |
parent | 9a74e884ee71dbf3d0967b0321d7b4529a04826c (diff) |
[SCSI] fcoe, bnx2fc, libfcoe: SW FCoE and bnx2fc use FCoE Syfs
This patch has the SW FCoE driver and the bnx2fc
driver make use of the new fcoe_sysfs API added
earlier in this patch series.
After this patch a fcoe_ctlr_device is allocated with
private data in this order.
+------------------+ +------------------+
| fcoe_ctlr_device | | fcoe_ctlr_device |
+------------------+ +------------------+
| fcoe_ctlr | | fcoe_ctlr |
+------------------+ +------------------+
| fcoe_interface | | bnx2fc_interface |
+------------------+ +------------------+
libfcoe also takes part in this new model since it
discovers and manages fcoe_fcf instances. The memory
allocation is different for FCFs. I didn't want to
impact libfcoe's fcoe_fcf processing, so this patch
creates fcoe_fcf_device instances for each discovered
fcoe_fcf. The two are paired using a (void * priv)
member of the fcoe_ctlr_device. This allows libfcoe
to continue maintaining its list of fcoe_fcf instances
and simply attaches and detaches them from existing
or new fcoe_fcf_device instances.
Signed-off-by: Robert Love <robert.w.love@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/libfcoe.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index 7b93f211b935..22b07cc99808 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
@@ -168,9 +168,16 @@ static inline void *fcoe_ctlr_priv(const struct fcoe_ctlr *ctlr) | |||
168 | return (void *)(ctlr + 1); | 168 | return (void *)(ctlr + 1); |
169 | } | 169 | } |
170 | 170 | ||
171 | #define fcoe_ctlr_to_ctlr_dev(x) \ | ||
172 | (struct fcoe_ctlr_device *)(((struct fcoe_ctlr_device *)(x)) - 1) | ||
173 | |||
171 | /** | 174 | /** |
172 | * struct fcoe_fcf - Fibre-Channel Forwarder | 175 | * struct fcoe_fcf - Fibre-Channel Forwarder |
173 | * @list: list linkage | 176 | * @list: list linkage |
177 | * @event_work: Work for FC Transport actions queue | ||
178 | * @event: The event to be processed | ||
179 | * @fip: The controller that the FCF was discovered on | ||
180 | * @fcf_dev: The associated fcoe_fcf_device instance | ||
174 | * @time: system time (jiffies) when an advertisement was last received | 181 | * @time: system time (jiffies) when an advertisement was last received |
175 | * @switch_name: WWN of switch from advertisement | 182 | * @switch_name: WWN of switch from advertisement |
176 | * @fabric_name: WWN of fabric from advertisement | 183 | * @fabric_name: WWN of fabric from advertisement |
@@ -192,6 +199,9 @@ static inline void *fcoe_ctlr_priv(const struct fcoe_ctlr *ctlr) | |||
192 | */ | 199 | */ |
193 | struct fcoe_fcf { | 200 | struct fcoe_fcf { |
194 | struct list_head list; | 201 | struct list_head list; |
202 | struct work_struct event_work; | ||
203 | struct fcoe_ctlr *fip; | ||
204 | struct fcoe_fcf_device *fcf_dev; | ||
195 | unsigned long time; | 205 | unsigned long time; |
196 | 206 | ||
197 | u64 switch_name; | 207 | u64 switch_name; |
@@ -208,6 +218,9 @@ struct fcoe_fcf { | |||
208 | u8 fd_flags:1; | 218 | u8 fd_flags:1; |
209 | }; | 219 | }; |
210 | 220 | ||
221 | #define fcoe_fcf_to_fcf_dev(x) \ | ||
222 | ((x)->fcf_dev) | ||
223 | |||
211 | /** | 224 | /** |
212 | * struct fcoe_rport - VN2VN remote port | 225 | * struct fcoe_rport - VN2VN remote port |
213 | * @time: time of create or last beacon packet received from node | 226 | * @time: time of create or last beacon packet received from node |
@@ -343,6 +356,10 @@ void fcoe_queue_timer(ulong lport); | |||
343 | int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen, | 356 | int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen, |
344 | struct fcoe_percpu_s *fps); | 357 | struct fcoe_percpu_s *fps); |
345 | 358 | ||
359 | /* FCoE Sysfs helpers */ | ||
360 | void fcoe_fcf_get_selected(struct fcoe_fcf_device *); | ||
361 | void fcoe_ctlr_get_fip_mode(struct fcoe_ctlr_device *); | ||
362 | |||
346 | /** | 363 | /** |
347 | * struct netdev_list | 364 | * struct netdev_list |
348 | * A mapping from netdevice to fcoe_transport | 365 | * A mapping from netdevice to fcoe_transport |