39
39
40
40
#define DRV_NAME "fnic"
41
41
#define DRV_DESCRIPTION "Cisco FCoE HBA Driver"
42
- #define DRV_VERSION "1.7 .0.0 "
42
+ #define DRV_VERSION "1.6 .0.53 "
43
43
#define PFX DRV_NAME ": "
44
44
#define DFX DRV_NAME "%d: "
45
45
48
48
#define FNIC_MIN_IO_REQ 256 /* Min IO throttle count */
49
49
#define FNIC_MAX_IO_REQ 1024 /* scsi_cmnd tag map entries */
50
50
#define FNIC_DFLT_IO_REQ 256 /* Default scsi_cmnd tag map entries */
51
+ #define FNIC_IO_LOCKS 64 /* IO locks: power of 2 */
51
52
#define FNIC_DFLT_QUEUE_DEPTH 256
52
53
#define FNIC_STATS_RATE_LIMIT 4 /* limit rate at which stats are pulled up */
53
54
88
89
#define FNIC_DEV_RST_ABTS_PENDING BIT(21)
89
90
90
91
/*
91
- * fnic private data per SCSI command .
92
+ * Usage of the scsi_cmnd scratchpad .
92
93
* These fields are locked by the hashed io_req_lock.
93
94
*/
94
- struct fnic_cmd_priv {
95
- struct fnic_io_req * io_req ;
96
- enum fnic_ioreq_state state ;
97
- u32 flags ;
98
- u16 abts_status ;
99
- u16 lr_status ;
100
- };
101
-
102
- static inline struct fnic_cmd_priv * fnic_priv (struct scsi_cmnd * cmd )
103
- {
104
- return scsi_cmd_priv (cmd );
105
- }
106
-
107
- static inline u64 fnic_flags_and_state (struct scsi_cmnd * cmd )
108
- {
109
- struct fnic_cmd_priv * fcmd = fnic_priv (cmd );
110
-
111
- return ((u64 )fcmd -> flags << 32 ) | fcmd -> state ;
112
- }
95
+ #define CMD_SP (Cmnd ) ((Cmnd)->SCp.ptr)
96
+ #define CMD_STATE (Cmnd ) ((Cmnd)->SCp.phase)
97
+ #define CMD_ABTS_STATUS (Cmnd ) ((Cmnd)->SCp.Message)
98
+ #define CMD_LR_STATUS (Cmnd ) ((Cmnd)->SCp.have_data_in)
99
+ #define CMD_TAG (Cmnd ) ((Cmnd)->SCp.sent_command)
100
+ #define CMD_FLAGS (Cmnd ) ((Cmnd)->SCp.Status)
113
101
114
102
#define FCPIO_INVALID_CODE 0x100 /* hdr_status value unused by firmware */
115
103
@@ -120,7 +108,7 @@ static inline u64 fnic_flags_and_state(struct scsi_cmnd *cmd)
120
108
#define FNIC_ABT_TERM_DELAY_TIMEOUT 500 /* mSec */
121
109
122
110
#define FNIC_MAX_FCP_TARGET 256
123
- #define FNIC_PCI_OFFSET 2
111
+
124
112
/**
125
113
* state_flags to identify host state along along with fnic's state
126
114
**/
@@ -155,56 +143,39 @@ do { \
155
143
} while (0); \
156
144
} while (0)
157
145
158
- #define FNIC_MAIN_DBG (kern_level , host , fnic_num , fmt , args ...) \
146
+ #define FNIC_MAIN_DBG (kern_level , host , fmt , args ...) \
159
147
FNIC_CHECK_LOGGING(FNIC_MAIN_LOGGING, \
160
- shost_printk(kern_level, host, \
161
- "fnic<%d>: %s: %d: " fmt, fnic_num,\
162
- __func__, __LINE__, ##args);)
148
+ shost_printk(kern_level, host, fmt, ##args);)
163
149
164
- #define FNIC_FCS_DBG (kern_level , host , fnic_num , fmt , args ...) \
150
+ #define FNIC_FCS_DBG (kern_level , host , fmt , args ...) \
165
151
FNIC_CHECK_LOGGING(FNIC_FCS_LOGGING, \
166
- shost_printk(kern_level, host, \
167
- "fnic<%d>: %s: %d: " fmt, fnic_num,\
168
- __func__, __LINE__, ##args);)
152
+ shost_printk(kern_level, host, fmt, ##args);)
169
153
170
- #define FNIC_SCSI_DBG (kern_level , host , fnic_num , fmt , args ...) \
154
+ #define FNIC_SCSI_DBG (kern_level , host , fmt , args ...) \
171
155
FNIC_CHECK_LOGGING(FNIC_SCSI_LOGGING, \
172
- shost_printk(kern_level, host, \
173
- "fnic<%d>: %s: %d: " fmt, fnic_num,\
174
- __func__, __LINE__, ##args);)
156
+ shost_printk(kern_level, host, fmt, ##args);)
175
157
176
- #define FNIC_ISR_DBG (kern_level , host , fnic_num , fmt , args ...) \
158
+ #define FNIC_ISR_DBG (kern_level , host , fmt , args ...) \
177
159
FNIC_CHECK_LOGGING(FNIC_ISR_LOGGING, \
178
- shost_printk(kern_level, host, \
179
- "fnic<%d>: %s: %d: " fmt, fnic_num,\
180
- __func__, __LINE__, ##args);)
160
+ shost_printk(kern_level, host, fmt, ##args);)
181
161
182
162
#define FNIC_MAIN_NOTE (kern_level , host , fmt , args ...) \
183
163
shost_printk(kern_level, host, fmt, ##args)
184
164
185
- #define FNIC_WQ_COPY_MAX 64
186
- #define FNIC_WQ_MAX 1
187
- #define FNIC_RQ_MAX 1
188
- #define FNIC_CQ_MAX (FNIC_WQ_COPY_MAX + FNIC_WQ_MAX + FNIC_RQ_MAX)
189
- #define FNIC_DFLT_IO_COMPLETIONS 256
190
-
191
- #define FNIC_MQ_CQ_INDEX 2
192
-
193
165
extern const char * fnic_state_str [];
194
166
195
167
enum fnic_intx_intr_index {
196
168
FNIC_INTX_WQ_RQ_COPYWQ ,
197
- FNIC_INTX_DUMMY ,
198
- FNIC_INTX_NOTIFY ,
199
169
FNIC_INTX_ERR ,
170
+ FNIC_INTX_NOTIFY ,
200
171
FNIC_INTX_INTR_MAX ,
201
172
};
202
173
203
174
enum fnic_msix_intr_index {
204
175
FNIC_MSIX_RQ ,
205
176
FNIC_MSIX_WQ ,
206
177
FNIC_MSIX_WQ_COPY ,
207
- FNIC_MSIX_ERR_NOTIFY = FNIC_MSIX_WQ_COPY + FNIC_WQ_COPY_MAX ,
178
+ FNIC_MSIX_ERR_NOTIFY ,
208
179
FNIC_MSIX_INTR_MAX ,
209
180
};
210
181
@@ -213,7 +184,6 @@ struct fnic_msix_entry {
213
184
char devname [IFNAMSIZ + 11 ];
214
185
irqreturn_t (* isr )(int , void * );
215
186
void * devid ;
216
- int irq_num ;
217
187
};
218
188
219
189
enum fnic_state {
@@ -223,6 +193,12 @@ enum fnic_state {
223
193
FNIC_IN_ETH_TRANS_FC_MODE ,
224
194
};
225
195
196
+ #define FNIC_WQ_COPY_MAX 1
197
+ #define FNIC_WQ_MAX 1
198
+ #define FNIC_RQ_MAX 1
199
+ #define FNIC_CQ_MAX (FNIC_WQ_COPY_MAX + FNIC_WQ_MAX + FNIC_RQ_MAX)
200
+ #define FNIC_DFLT_IO_COMPLETIONS 256
201
+
226
202
struct mempool ;
227
203
228
204
enum fnic_evt {
@@ -237,16 +213,8 @@ struct fnic_event {
237
213
enum fnic_evt event ;
238
214
};
239
215
240
- struct fnic_cpy_wq {
241
- unsigned long hw_lock_flags ;
242
- u16 active_ioreq_count ;
243
- u16 ioreq_table_size ;
244
- ____cacheline_aligned struct fnic_io_req * * io_req_table ;
245
- };
246
-
247
216
/* Per-instance private data structure */
248
217
struct fnic {
249
- int fnic_num ;
250
218
struct fc_lport * lport ;
251
219
struct fcoe_ctlr ctlr ; /* FIP FCoE controller structure */
252
220
struct vnic_dev_bar bar0 ;
@@ -267,9 +235,6 @@ struct fnic {
267
235
unsigned int wq_count ;
268
236
unsigned int cq_count ;
269
237
270
- struct mutex sgreset_mutex ;
271
- spinlock_t sgreset_lock ; /* lock for sgreset */
272
- struct scsi_cmnd * sgreset_sc ;
273
238
struct dentry * fnic_stats_debugfs_host ;
274
239
struct dentry * fnic_stats_debugfs_file ;
275
240
struct dentry * fnic_reset_debugfs_file ;
@@ -313,11 +278,10 @@ struct fnic {
313
278
struct fnic_host_tag * tags ;
314
279
mempool_t * io_req_pool ;
315
280
mempool_t * io_sgl_pool [FNIC_SGL_NUM_CACHES ];
281
+ spinlock_t io_req_lock [FNIC_IO_LOCKS ]; /* locks for scsi cmnds */
316
282
317
- unsigned int copy_wq_base ;
318
283
struct work_struct link_work ;
319
284
struct work_struct frame_work ;
320
- struct work_struct flush_work ;
321
285
struct sk_buff_head frame_queue ;
322
286
struct sk_buff_head tx_queue ;
323
287
@@ -334,9 +298,7 @@ struct fnic {
334
298
/*** FIP related data members -- end ***/
335
299
336
300
/* copy work queue cache line section */
337
- ____cacheline_aligned struct vnic_wq_copy hw_copy_wq [FNIC_WQ_COPY_MAX ];
338
- ____cacheline_aligned struct fnic_cpy_wq sw_copy_wq [FNIC_WQ_COPY_MAX ];
339
-
301
+ ____cacheline_aligned struct vnic_wq_copy wq_copy [FNIC_WQ_COPY_MAX ];
340
302
/* completion queue cache line section */
341
303
____cacheline_aligned struct vnic_cq cq [FNIC_CQ_MAX ];
342
304
@@ -364,7 +326,6 @@ extern struct device_attribute *fnic_attrs[];
364
326
365
327
void fnic_clear_intr_mode (struct fnic * fnic );
366
328
int fnic_set_intr_mode (struct fnic * fnic );
367
- int fnic_set_intr_mode_msix (struct fnic * fnic );
368
329
void fnic_free_intr (struct fnic * fnic );
369
330
int fnic_request_intr (struct fnic * fnic );
370
331
@@ -376,7 +337,7 @@ void fnic_handle_event(struct work_struct *work);
376
337
int fnic_rq_cmpl_handler (struct fnic * fnic , int );
377
338
int fnic_alloc_rq_frame (struct vnic_rq * rq );
378
339
void fnic_free_rq_buf (struct vnic_rq * rq , struct vnic_rq_buf * buf );
379
- void fnic_flush_tx (struct work_struct * work );
340
+ void fnic_flush_tx (struct fnic * );
380
341
void fnic_eth_send (struct fcoe_ctlr * , struct sk_buff * skb );
381
342
void fnic_set_port_id (struct fc_lport * , u32 , struct fc_frame * );
382
343
void fnic_update_mac (struct fc_lport * , u8 * new );
@@ -391,15 +352,15 @@ void fnic_scsi_cleanup(struct fc_lport *);
391
352
void fnic_scsi_abort_io (struct fc_lport * );
392
353
void fnic_empty_scsi_cleanup (struct fc_lport * );
393
354
void fnic_exch_mgr_reset (struct fc_lport * , u32 , u32 );
394
- int fnic_wq_copy_cmpl_handler (struct fnic * fnic , int copy_work_to_do , unsigned int cq_index );
355
+ int fnic_wq_copy_cmpl_handler (struct fnic * fnic , int );
395
356
int fnic_wq_cmpl_handler (struct fnic * fnic , int );
396
357
int fnic_flogi_reg_handler (struct fnic * fnic , u32 );
397
358
void fnic_wq_copy_cleanup_handler (struct vnic_wq_copy * wq ,
398
359
struct fcpio_host_req * desc );
399
360
int fnic_fw_reset_handler (struct fnic * fnic );
400
361
void fnic_terminate_rport_io (struct fc_rport * );
401
362
const char * fnic_state_to_str (unsigned int state );
402
- void fnic_mq_map_queues_cpus ( struct Scsi_Host * host );
363
+
403
364
void fnic_log_q_error (struct fnic * fnic );
404
365
void fnic_handle_link_event (struct fnic * fnic );
405
366
0 commit comments