diff options
Diffstat (limited to 'drivers/scsi/fcoe/fcoe.h')
-rw-r--r-- | drivers/scsi/fcoe/fcoe.h | 82 |
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 | |||
43 | unsigned int fcoe_debug_logging; | 49 | unsigned int fcoe_debug_logging; |
44 | module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR); | 50 | module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR); |
45 | MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels"); | 51 | MODULE_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 | */ |
70 | struct fcoe_percpu_s { | 81 | struct 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 | */ |
80 | struct fcoe_interface { | 101 | struct 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 | */ |
94 | struct fcoe_port { | 125 | struct 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 | ||
105 | static 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 | */ | ||
141 | static 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_ */ |