diff options
Diffstat (limited to 'include/scsi/libfcoe.h')
-rw-r--r-- | include/scsi/libfcoe.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index feb6a94c90ea..8c1638b8c28e 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
@@ -33,6 +33,12 @@ | |||
33 | #define FCOE_MAX_CMD_LEN 16 /* Supported CDB length */ | 33 | #define FCOE_MAX_CMD_LEN 16 /* Supported CDB length */ |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Max MTU for FCoE: 14 (FCoE header) + 24 (FC header) + 2112 (max FC payload) | ||
37 | * + 4 (FC CRC) + 4 (FCoE trailer) = 2158 bytes | ||
38 | */ | ||
39 | #define FCOE_MTU 2158 | ||
40 | |||
41 | /* | ||
36 | * FIP tunable parameters. | 42 | * FIP tunable parameters. |
37 | */ | 43 | */ |
38 | #define FCOE_CTLR_START_DELAY 2000 /* mS after first adv. to choose FCF */ | 44 | #define FCOE_CTLR_START_DELAY 2000 /* mS after first adv. to choose FCF */ |
@@ -221,6 +227,8 @@ int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *, struct fc_lport *, | |||
221 | u64 fcoe_wwn_from_mac(unsigned char mac[], unsigned int, unsigned int); | 227 | u64 fcoe_wwn_from_mac(unsigned char mac[], unsigned int, unsigned int); |
222 | int fcoe_libfc_config(struct fc_lport *, struct fcoe_ctlr *, | 228 | int fcoe_libfc_config(struct fc_lport *, struct fcoe_ctlr *, |
223 | const struct libfc_function_template *, int init_fcp); | 229 | const struct libfc_function_template *, int init_fcp); |
230 | u32 fcoe_fc_crc(struct fc_frame *fp); | ||
231 | int fcoe_start_io(struct sk_buff *skb); | ||
224 | 232 | ||
225 | /** | 233 | /** |
226 | * is_fip_mode() - returns true if FIP mode selected. | 234 | * is_fip_mode() - returns true if FIP mode selected. |
@@ -231,5 +239,102 @@ static inline bool is_fip_mode(struct fcoe_ctlr *fip) | |||
231 | return fip->state == FIP_ST_ENABLED; | 239 | return fip->state == FIP_ST_ENABLED; |
232 | } | 240 | } |
233 | 241 | ||
242 | /* helper for FCoE SW HBA drivers, can include subven and subdev if needed. The | ||
243 | * modpost would use pci_device_id table to auto-generate formatted module alias | ||
244 | * into the corresponding .mod.c file, but there may or may not be a pci device | ||
245 | * id table for FCoE drivers so we use the following helper for build the fcoe | ||
246 | * driver module alias. | ||
247 | */ | ||
248 | #define MODULE_ALIAS_FCOE_PCI(ven, dev) \ | ||
249 | MODULE_ALIAS("fcoe-pci:" \ | ||
250 | "v" __stringify(ven) \ | ||
251 | "d" __stringify(dev) "sv*sd*bc*sc*i*") | ||
252 | |||
253 | /* the name of the default FCoE transport driver fcoe.ko */ | ||
254 | #define FCOE_TRANSPORT_DEFAULT "fcoe" | ||
255 | |||
256 | /* struct fcoe_transport - The FCoE transport interface | ||
257 | * @name: a vendor specific name for their FCoE transport driver | ||
258 | * @attached: whether this transport is already attached | ||
259 | * @list: list linkage to all attached transports | ||
260 | * @match: handler to allow the transport driver to match up a given netdev | ||
261 | * @create: handler to sysfs entry of create for FCoE instances | ||
262 | * @destroy: handler to sysfs entry of destroy for FCoE instances | ||
263 | * @enable: handler to sysfs entry of enable for FCoE instances | ||
264 | * @disable: handler to sysfs entry of disable for FCoE instances | ||
265 | */ | ||
266 | struct fcoe_transport { | ||
267 | char name[IFNAMSIZ]; | ||
268 | bool attached; | ||
269 | struct list_head list; | ||
270 | bool (*match) (struct net_device *device); | ||
271 | int (*create) (struct net_device *device, enum fip_state fip_mode); | ||
272 | int (*destroy) (struct net_device *device); | ||
273 | int (*enable) (struct net_device *device); | ||
274 | int (*disable) (struct net_device *device); | ||
275 | }; | ||
276 | |||
277 | /** | ||
278 | * struct fcoe_percpu_s - The context for FCoE receive thread(s) | ||
279 | * @thread: The thread context | ||
280 | * @fcoe_rx_list: The queue of pending packets to process | ||
281 | * @page: The memory page for calculating frame trailer CRCs | ||
282 | * @crc_eof_offset: The offset into the CRC page pointing to available | ||
283 | * memory for a new trailer | ||
284 | */ | ||
285 | struct fcoe_percpu_s { | ||
286 | struct task_struct *thread; | ||
287 | struct sk_buff_head fcoe_rx_list; | ||
288 | struct page *crc_eof_page; | ||
289 | int crc_eof_offset; | ||
290 | }; | ||
291 | |||
292 | /** | ||
293 | * struct fcoe_port - The FCoE private structure | ||
294 | * @priv: The associated fcoe interface. The structure is | ||
295 | * defined by the low level driver | ||
296 | * @lport: The associated local port | ||
297 | * @fcoe_pending_queue: The pending Rx queue of skbs | ||
298 | * @fcoe_pending_queue_active: Indicates if the pending queue is active | ||
299 | * @max_queue_depth: Max queue depth of pending queue | ||
300 | * @min_queue_depth: Min queue depth of pending queue | ||
301 | * @timer: The queue timer | ||
302 | * @destroy_work: Handle for work context | ||
303 | * (to prevent RTNL deadlocks) | ||
304 | * @data_srt_addr: Source address for data | ||
305 | * | ||
306 | * An instance of this structure is to be allocated along with the | ||
307 | * Scsi_Host and libfc fc_lport structures. | ||
308 | */ | ||
309 | struct fcoe_port { | ||
310 | void *priv; | ||
311 | struct fc_lport *lport; | ||
312 | struct sk_buff_head fcoe_pending_queue; | ||
313 | u8 fcoe_pending_queue_active; | ||
314 | u32 max_queue_depth; | ||
315 | u32 min_queue_depth; | ||
316 | struct timer_list timer; | ||
317 | struct work_struct destroy_work; | ||
318 | u8 data_src_addr[ETH_ALEN]; | ||
319 | }; | ||
320 | void fcoe_clean_pending_queue(struct fc_lport *); | ||
321 | void fcoe_check_wait_queue(struct fc_lport *lport, struct sk_buff *skb); | ||
322 | void fcoe_queue_timer(ulong lport); | ||
323 | int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen, | ||
324 | struct fcoe_percpu_s *fps); | ||
325 | |||
326 | /** | ||
327 | * struct netdev_list | ||
328 | * A mapping from netdevice to fcoe_transport | ||
329 | */ | ||
330 | struct fcoe_netdev_mapping { | ||
331 | struct list_head list; | ||
332 | struct net_device *netdev; | ||
333 | struct fcoe_transport *ft; | ||
334 | }; | ||
335 | |||
336 | /* fcoe transports registration and deregistration */ | ||
337 | int fcoe_transport_attach(struct fcoe_transport *ft); | ||
338 | int fcoe_transport_detach(struct fcoe_transport *ft); | ||
234 | 339 | ||
235 | #endif /* _LIBFCOE_H */ | 340 | #endif /* _LIBFCOE_H */ |