aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/fcoe/fcoe.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/fcoe/fcoe.h')
-rw-r--r--drivers/scsi/fcoe/fcoe.h82
1 files changed, 59 insertions, 23 deletions
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h
index ce7f60fb1bc0..c69b2c56c2d1 100644
--- a/drivers/scsi/fcoe/fcoe.h
+++ b/drivers/scsi/fcoe/fcoe.h
@@ -32,7 +32,7 @@
32#define FCOE_NAME "fcoe" 32#define FCOE_NAME "fcoe"
33#define FCOE_VENDOR "Open-FCoE.org" 33#define FCOE_VENDOR "Open-FCoE.org"
34 34
35#define FCOE_MAX_LUN 255 35#define FCOE_MAX_LUN 0xFFFF
36#define FCOE_MAX_FCP_TARGET 256 36#define FCOE_MAX_FCP_TARGET 256
37 37
38#define FCOE_MAX_OUTSTANDING_COMMANDS 1024 38#define FCOE_MAX_OUTSTANDING_COMMANDS 1024
@@ -40,11 +40,17 @@
40#define FCOE_MIN_XID 0x0000 /* the min xid supported by fcoe_sw */ 40#define FCOE_MIN_XID 0x0000 /* the min xid supported by fcoe_sw */
41#define FCOE_MAX_XID 0x0FFF /* the max xid supported by fcoe_sw */ 41#define FCOE_MAX_XID 0x0FFF /* the max xid supported by fcoe_sw */
42 42
43/*
44 * Max MTU for FCoE: 14 (FCoE header) + 24 (FC header) + 2112 (max FC payload)
45 * + 4 (FC CRC) + 4 (FCoE trailer) = 2158 bytes
46 */
47#define FCOE_MTU 2158
48
43unsigned int fcoe_debug_logging; 49unsigned int fcoe_debug_logging;
44module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR); 50module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR);
45MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels"); 51MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels");
46 52
47#define FCOE_LOGGING 0x01 /* General logging, not categorized */ 53#define FCOE_LOGGING 0x01 /* General logging, not categorized */
48#define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */ 54#define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
49 55
50#define FCOE_CHECK_LOGGING(LEVEL, CMD) \ 56#define FCOE_CHECK_LOGGING(LEVEL, CMD) \
@@ -64,8 +70,13 @@ do { \
64 printk(KERN_INFO "fcoe: %s: " fmt, \ 70 printk(KERN_INFO "fcoe: %s: " fmt, \
65 netdev->name, ##args);) 71 netdev->name, ##args);)
66 72
67/* 73/**
68 * this percpu struct for fcoe 74 * struct fcoe_percpu_s - The per-CPU context for FCoE receive threads
75 * @thread: The thread context
76 * @fcoe_rx_list: The queue of pending packets to process
77 * @page: The memory page for calculating frame trailer CRCs
78 * @crc_eof_offset: The offset into the CRC page pointing to available
79 * memory for a new trailer
69 */ 80 */
70struct fcoe_percpu_s { 81struct fcoe_percpu_s {
71 struct task_struct *thread; 82 struct task_struct *thread;
@@ -74,37 +85,62 @@ struct fcoe_percpu_s {
74 int crc_eof_offset; 85 int crc_eof_offset;
75}; 86};
76 87
77/* 88/**
78 * an FCoE interface, 1:1 with netdev 89 * struct fcoe_interface - A FCoE interface
90 * @list: Handle for a list of FCoE interfaces
91 * @netdev: The associated net device
92 * @fcoe_packet_type: FCoE packet type
93 * @fip_packet_type: FIP packet type
94 * @ctlr: The FCoE controller (for FIP)
95 * @oem: The offload exchange manager for all local port
96 * instances associated with this port
97 * @kref: The kernel reference
98 *
99 * This structure is 1:1 with a net devive.
79 */ 100 */
80struct fcoe_interface { 101struct fcoe_interface {
81 struct list_head list; 102 struct list_head list;
82 struct net_device *netdev; 103 struct net_device *netdev;
83 struct packet_type fcoe_packet_type; 104 struct packet_type fcoe_packet_type;
84 struct packet_type fip_packet_type; 105 struct packet_type fip_packet_type;
85 struct fcoe_ctlr ctlr; 106 struct fcoe_ctlr ctlr;
86 struct fc_exch_mgr *oem; /* offload exchange manager */ 107 struct fc_exch_mgr *oem;
87 struct kref kref; 108 struct kref kref;
88}; 109};
89 110
90/* 111/**
91 * the FCoE private structure that's allocated along with the 112 * struct fcoe_port - The FCoE private structure
92 * Scsi_Host and libfc fc_lport structures 113 * @fcoe: The associated fcoe interface
114 * @lport: The associated local port
115 * @fcoe_pending_queue: The pending Rx queue of skbs
116 * @fcoe_pending_queue_active: Indicates if the pending queue is active
117 * @timer: The queue timer
118 * @destroy_work: Handle for work context
119 * (to prevent RTNL deadlocks)
120 * @data_srt_addr: Source address for data
121 *
122 * An instance of this structure is to be allocated along with the
123 * Scsi_Host and libfc fc_lport structures.
93 */ 124 */
94struct fcoe_port { 125struct fcoe_port {
95 struct fcoe_interface *fcoe; 126 struct fcoe_interface *fcoe;
96 struct fc_lport *lport; 127 struct fc_lport *lport;
97 struct sk_buff_head fcoe_pending_queue; 128 struct sk_buff_head fcoe_pending_queue;
98 u8 fcoe_pending_queue_active; 129 u8 fcoe_pending_queue_active;
99 struct timer_list timer; /* queue timer */ 130 struct timer_list timer;
100 struct work_struct destroy_work; /* to prevent rtnl deadlocks */ 131 struct work_struct destroy_work;
132 u8 data_src_addr[ETH_ALEN];
101}; 133};
102 134
103#define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr) 135#define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
104 136
105static inline struct net_device *fcoe_netdev(const struct fc_lport *lp) 137/**
138 * fcoe_netdev() - Return the net device associated with a local port
139 * @lport: The local port to get the net device from
140 */
141static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
106{ 142{
107 return ((struct fcoe_port *)lport_priv(lp))->fcoe->netdev; 143 return ((struct fcoe_port *)lport_priv(lport))->fcoe->netdev;
108} 144}
109 145
110#endif /* _FCOE_H_ */ 146#endif /* _FCOE_H_ */