diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_fcpim.h')
-rw-r--r-- | drivers/scsi/bfa/bfa_fcpim.h | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/drivers/scsi/bfa/bfa_fcpim.h b/drivers/scsi/bfa/bfa_fcpim.h index 57b695ad4ee..1080bcb81cb 100644 --- a/drivers/scsi/bfa/bfa_fcpim.h +++ b/drivers/scsi/bfa/bfa_fcpim.h | |||
@@ -79,14 +79,22 @@ bfa_ioim_get_index(u32 n) { | |||
79 | if (n >= (1UL)<<22) | 79 | if (n >= (1UL)<<22) |
80 | return BFA_IOBUCKET_MAX - 1; | 80 | return BFA_IOBUCKET_MAX - 1; |
81 | n >>= 8; | 81 | n >>= 8; |
82 | if (n >= (1UL)<<16) | 82 | if (n >= (1UL)<<16) { |
83 | n >>= 16; pos += 16; | 83 | n >>= 16; |
84 | if (n >= 1 << 8) | 84 | pos += 16; |
85 | n >>= 8; pos += 8; | 85 | } |
86 | if (n >= 1 << 4) | 86 | if (n >= 1 << 8) { |
87 | n >>= 4; pos += 4; | 87 | n >>= 8; |
88 | if (n >= 1 << 2) | 88 | pos += 8; |
89 | n >>= 2; pos += 2; | 89 | } |
90 | if (n >= 1 << 4) { | ||
91 | n >>= 4; | ||
92 | pos += 4; | ||
93 | } | ||
94 | if (n >= 1 << 2) { | ||
95 | n >>= 2; | ||
96 | pos += 2; | ||
97 | } | ||
90 | if (n >= 1 << 1) | 98 | if (n >= 1 << 1) |
91 | pos += 1; | 99 | pos += 1; |
92 | 100 | ||
@@ -102,6 +110,7 @@ struct bfad_ioim_s; | |||
102 | struct bfad_tskim_s; | 110 | struct bfad_tskim_s; |
103 | 111 | ||
104 | typedef void (*bfa_fcpim_profile_t) (struct bfa_ioim_s *ioim); | 112 | typedef void (*bfa_fcpim_profile_t) (struct bfa_ioim_s *ioim); |
113 | typedef bfa_boolean_t (*bfa_ioim_lm_proc_rsp_data_t) (struct bfa_ioim_s *ioim); | ||
105 | 114 | ||
106 | struct bfa_fcpim_s { | 115 | struct bfa_fcpim_s { |
107 | struct bfa_s *bfa; | 116 | struct bfa_s *bfa; |
@@ -115,7 +124,7 @@ struct bfa_fcpim_s { | |||
115 | u32 path_tov; | 124 | u32 path_tov; |
116 | u16 q_depth; | 125 | u16 q_depth; |
117 | u8 reqq; /* Request queue to be used */ | 126 | u8 reqq; /* Request queue to be used */ |
118 | u8 rsvd; | 127 | u8 lun_masking_pending; |
119 | struct list_head itnim_q; /* queue of active itnim */ | 128 | struct list_head itnim_q; /* queue of active itnim */ |
120 | struct list_head ioim_resfree_q; /* IOs waiting for f/w */ | 129 | struct list_head ioim_resfree_q; /* IOs waiting for f/w */ |
121 | struct list_head ioim_comp_q; /* IO global comp Q */ | 130 | struct list_head ioim_comp_q; /* IO global comp Q */ |
@@ -170,7 +179,9 @@ struct bfa_ioim_s { | |||
170 | bfa_cb_cbfn_t io_cbfn; /* IO completion handler */ | 179 | bfa_cb_cbfn_t io_cbfn; /* IO completion handler */ |
171 | struct bfa_ioim_sp_s *iosp; /* slow-path IO handling */ | 180 | struct bfa_ioim_sp_s *iosp; /* slow-path IO handling */ |
172 | u8 reqq; /* Request queue for I/O */ | 181 | u8 reqq; /* Request queue for I/O */ |
182 | u8 mode; /* IO is passthrough or not */ | ||
173 | u64 start_time; /* IO's Profile start val */ | 183 | u64 start_time; /* IO's Profile start val */ |
184 | bfa_ioim_lm_proc_rsp_data_t proc_rsp_data; /* RSP data adjust */ | ||
174 | }; | 185 | }; |
175 | 186 | ||
176 | struct bfa_ioim_sp_s { | 187 | struct bfa_ioim_sp_s { |
@@ -250,6 +261,10 @@ struct bfa_itnim_s { | |||
250 | (__ioim)->iotag |= k << BFA_IOIM_RETRY_TAG_OFFSET; \ | 261 | (__ioim)->iotag |= k << BFA_IOIM_RETRY_TAG_OFFSET; \ |
251 | } while (0) | 262 | } while (0) |
252 | 263 | ||
264 | #define BFA_IOIM_TO_LPS(__ioim) \ | ||
265 | BFA_LPS_FROM_TAG(BFA_LPS_MOD(__ioim->bfa), \ | ||
266 | __ioim->itnim->rport->rport_info.lp_tag) | ||
267 | |||
253 | static inline bfa_boolean_t | 268 | static inline bfa_boolean_t |
254 | bfa_ioim_maxretry_reached(struct bfa_ioim_s *ioim) | 269 | bfa_ioim_maxretry_reached(struct bfa_ioim_s *ioim) |
255 | { | 270 | { |
@@ -297,6 +312,8 @@ bfa_status_t bfa_fcpim_port_iostats(struct bfa_s *bfa, | |||
297 | struct bfa_itnim_iostats_s *stats, u8 lp_tag); | 312 | struct bfa_itnim_iostats_s *stats, u8 lp_tag); |
298 | void bfa_fcpim_add_stats(struct bfa_itnim_iostats_s *fcpim_stats, | 313 | void bfa_fcpim_add_stats(struct bfa_itnim_iostats_s *fcpim_stats, |
299 | struct bfa_itnim_iostats_s *itnim_stats); | 314 | struct bfa_itnim_iostats_s *itnim_stats); |
315 | bfa_status_t bfa_fcpim_profile_on(struct bfa_s *bfa, u32 time); | ||
316 | bfa_status_t bfa_fcpim_profile_off(struct bfa_s *bfa); | ||
300 | 317 | ||
301 | #define bfa_fcpim_ioredirect_enabled(__bfa) \ | 318 | #define bfa_fcpim_ioredirect_enabled(__bfa) \ |
302 | (((struct bfa_fcpim_s *)(BFA_FCPIM(__bfa)))->ioredirect) | 319 | (((struct bfa_fcpim_s *)(BFA_FCPIM(__bfa)))->ioredirect) |
@@ -397,4 +414,14 @@ void bfa_tskim_start(struct bfa_tskim_s *tskim, | |||
397 | void bfa_cb_tskim_done(void *bfad, struct bfad_tskim_s *dtsk, | 414 | void bfa_cb_tskim_done(void *bfad, struct bfad_tskim_s *dtsk, |
398 | enum bfi_tskim_status tsk_status); | 415 | enum bfi_tskim_status tsk_status); |
399 | 416 | ||
417 | void bfa_fcpim_lunmask_rp_update(struct bfa_s *bfa, wwn_t lp_wwn, | ||
418 | wwn_t rp_wwn, u16 rp_tag, u8 lp_tag); | ||
419 | bfa_status_t bfa_fcpim_lunmask_update(struct bfa_s *bfa, u32 on_off); | ||
420 | bfa_status_t bfa_fcpim_lunmask_query(struct bfa_s *bfa, void *buf); | ||
421 | bfa_status_t bfa_fcpim_lunmask_delete(struct bfa_s *bfa, u16 vf_id, | ||
422 | wwn_t *pwwn, wwn_t rpwwn, struct scsi_lun lun); | ||
423 | bfa_status_t bfa_fcpim_lunmask_add(struct bfa_s *bfa, u16 vf_id, | ||
424 | wwn_t *pwwn, wwn_t rpwwn, struct scsi_lun lun); | ||
425 | bfa_status_t bfa_fcpim_lunmask_clear(struct bfa_s *bfa); | ||
426 | |||
400 | #endif /* __BFA_FCPIM_H__ */ | 427 | #endif /* __BFA_FCPIM_H__ */ |