diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_crtn.h')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_crtn.h | 71 |
1 files changed, 56 insertions, 15 deletions
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h index 776930727058..94e788199568 100644 --- a/drivers/scsi/lpfc/lpfc_crtn.h +++ b/drivers/scsi/lpfc/lpfc_crtn.h | |||
@@ -28,15 +28,18 @@ int lpfc_read_la(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb, | |||
28 | void lpfc_clear_la(struct lpfc_hba *, LPFC_MBOXQ_t *); | 28 | void lpfc_clear_la(struct lpfc_hba *, LPFC_MBOXQ_t *); |
29 | void lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport); | 29 | void lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport); |
30 | void lpfc_config_link(struct lpfc_hba *, LPFC_MBOXQ_t *); | 30 | void lpfc_config_link(struct lpfc_hba *, LPFC_MBOXQ_t *); |
31 | int lpfc_read_sparam(struct lpfc_hba *, LPFC_MBOXQ_t *); | 31 | int lpfc_read_sparam(struct lpfc_hba *, LPFC_MBOXQ_t *, int); |
32 | void lpfc_read_config(struct lpfc_hba *, LPFC_MBOXQ_t *); | 32 | void lpfc_read_config(struct lpfc_hba *, LPFC_MBOXQ_t *); |
33 | void lpfc_read_lnk_stat(struct lpfc_hba *, LPFC_MBOXQ_t *); | 33 | void lpfc_read_lnk_stat(struct lpfc_hba *, LPFC_MBOXQ_t *); |
34 | int lpfc_reg_login(struct lpfc_hba *, uint32_t, uint8_t *, LPFC_MBOXQ_t *, | 34 | int lpfc_reg_login(struct lpfc_hba *, uint16_t, uint32_t, uint8_t *, |
35 | uint32_t); | 35 | LPFC_MBOXQ_t *, uint32_t); |
36 | void lpfc_unreg_login(struct lpfc_hba *, uint32_t, LPFC_MBOXQ_t *); | 36 | void lpfc_unreg_login(struct lpfc_hba *, uint16_t, uint32_t, LPFC_MBOXQ_t *); |
37 | void lpfc_unreg_did(struct lpfc_hba *, uint32_t, LPFC_MBOXQ_t *); | 37 | void lpfc_unreg_did(struct lpfc_hba *, uint16_t, uint32_t, LPFC_MBOXQ_t *); |
38 | void lpfc_reg_vpi(struct lpfc_hba *, uint16_t, uint32_t, LPFC_MBOXQ_t *); | ||
39 | void lpfc_unreg_vpi(struct lpfc_hba *, uint16_t, LPFC_MBOXQ_t *); | ||
38 | void lpfc_init_link(struct lpfc_hba *, LPFC_MBOXQ_t *, uint32_t, uint32_t); | 40 | void lpfc_init_link(struct lpfc_hba *, LPFC_MBOXQ_t *, uint32_t, uint32_t); |
39 | 41 | ||
42 | void lpfc_cleanup_rpis(struct lpfc_vport *vport, int remove); | ||
40 | int lpfc_linkdown(struct lpfc_hba *); | 43 | int lpfc_linkdown(struct lpfc_hba *); |
41 | void lpfc_mbx_cmpl_read_la(struct lpfc_hba *, LPFC_MBOXQ_t *); | 44 | void lpfc_mbx_cmpl_read_la(struct lpfc_hba *, LPFC_MBOXQ_t *); |
42 | 45 | ||
@@ -51,6 +54,10 @@ void lpfc_drop_node(struct lpfc_vport *, struct lpfc_nodelist *); | |||
51 | void lpfc_set_disctmo(struct lpfc_vport *); | 54 | void lpfc_set_disctmo(struct lpfc_vport *); |
52 | int lpfc_can_disctmo(struct lpfc_vport *); | 55 | int lpfc_can_disctmo(struct lpfc_vport *); |
53 | int lpfc_unreg_rpi(struct lpfc_vport *, struct lpfc_nodelist *); | 56 | int lpfc_unreg_rpi(struct lpfc_vport *, struct lpfc_nodelist *); |
57 | void lpfc_unreg_all_rpis(struct lpfc_vport *); | ||
58 | void lpfc_unreg_default_rpis(struct lpfc_vport *); | ||
59 | void lpfc_issue_reg_vpi(struct lpfc_hba *, struct lpfc_vport *); | ||
60 | |||
54 | int lpfc_check_sli_ndlp(struct lpfc_hba *, struct lpfc_sli_ring *, | 61 | int lpfc_check_sli_ndlp(struct lpfc_hba *, struct lpfc_sli_ring *, |
55 | struct lpfc_iocbq *, struct lpfc_nodelist *); | 62 | struct lpfc_iocbq *, struct lpfc_nodelist *); |
56 | void lpfc_nlp_init(struct lpfc_vport *, struct lpfc_nodelist *, uint32_t); | 63 | void lpfc_nlp_init(struct lpfc_vport *, struct lpfc_nodelist *, uint32_t); |
@@ -60,25 +67,33 @@ struct lpfc_nodelist *lpfc_setup_disc_node(struct lpfc_vport *, uint32_t); | |||
60 | void lpfc_disc_list_loopmap(struct lpfc_vport *); | 67 | void lpfc_disc_list_loopmap(struct lpfc_vport *); |
61 | void lpfc_disc_start(struct lpfc_vport *); | 68 | void lpfc_disc_start(struct lpfc_vport *); |
62 | void lpfc_disc_flush_list(struct lpfc_vport *); | 69 | void lpfc_disc_flush_list(struct lpfc_vport *); |
70 | void lpfc_cleanup_discovery_resources(struct lpfc_vport *); | ||
63 | void lpfc_disc_timeout(unsigned long); | 71 | void lpfc_disc_timeout(unsigned long); |
64 | 72 | ||
65 | struct lpfc_nodelist *__lpfc_findnode_rpi(struct lpfc_vport *, uint16_t); | 73 | struct lpfc_nodelist *__lpfc_findnode_rpi(struct lpfc_vport *, uint16_t); |
66 | struct lpfc_nodelist *lpfc_findnode_rpi(struct lpfc_vport *, uint16_t); | 74 | struct lpfc_nodelist *lpfc_findnode_rpi(struct lpfc_vport *, uint16_t); |
67 | 75 | ||
76 | void lpfc_worker_wake_up(struct lpfc_hba *); | ||
68 | int lpfc_workq_post_event(struct lpfc_hba *, void *, void *, uint32_t); | 77 | int lpfc_workq_post_event(struct lpfc_hba *, void *, void *, uint32_t); |
69 | int lpfc_do_work(void *); | 78 | int lpfc_do_work(void *); |
70 | int lpfc_disc_state_machine(struct lpfc_vport *, struct lpfc_nodelist *, void *, | 79 | int lpfc_disc_state_machine(struct lpfc_vport *, struct lpfc_nodelist *, void *, |
71 | uint32_t); | 80 | uint32_t); |
72 | 81 | ||
82 | void lpfc_register_new_vport(struct lpfc_hba *, struct lpfc_vport *, | ||
83 | struct lpfc_nodelist *); | ||
84 | void lpfc_do_scr_ns_plogi(struct lpfc_hba *, struct lpfc_vport *); | ||
73 | int lpfc_check_sparm(struct lpfc_vport *, struct lpfc_nodelist *, | 85 | int lpfc_check_sparm(struct lpfc_vport *, struct lpfc_nodelist *, |
74 | struct serv_parm *, uint32_t); | 86 | struct serv_parm *, uint32_t); |
75 | int lpfc_els_abort(struct lpfc_hba *, struct lpfc_nodelist * ndlp); | 87 | int lpfc_els_abort(struct lpfc_hba *, struct lpfc_nodelist *); |
76 | int lpfc_els_abort_flogi(struct lpfc_hba *); | 88 | int lpfc_els_abort_flogi(struct lpfc_hba *); |
77 | int lpfc_initial_flogi(struct lpfc_vport *); | 89 | int lpfc_initial_flogi(struct lpfc_vport *); |
90 | int lpfc_initial_fdisc(struct lpfc_vport *); | ||
91 | int lpfc_issue_els_fdisc(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); | ||
78 | int lpfc_issue_els_plogi(struct lpfc_vport *, uint32_t, uint8_t); | 92 | int lpfc_issue_els_plogi(struct lpfc_vport *, uint32_t, uint8_t); |
79 | int lpfc_issue_els_prli(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); | 93 | int lpfc_issue_els_prli(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); |
80 | int lpfc_issue_els_adisc(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); | 94 | int lpfc_issue_els_adisc(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); |
81 | int lpfc_issue_els_logo(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); | 95 | int lpfc_issue_els_logo(struct lpfc_vport *, struct lpfc_nodelist *, uint8_t); |
96 | int lpfc_issue_els_npiv_logo(struct lpfc_vport *, struct lpfc_nodelist *); | ||
82 | int lpfc_issue_els_scr(struct lpfc_vport *, uint32_t, uint8_t); | 97 | int lpfc_issue_els_scr(struct lpfc_vport *, uint32_t, uint8_t); |
83 | int lpfc_els_free_iocb(struct lpfc_hba *, struct lpfc_iocbq *); | 98 | int lpfc_els_free_iocb(struct lpfc_hba *, struct lpfc_iocbq *); |
84 | int lpfc_els_rsp_acc(struct lpfc_vport *, uint32_t, struct lpfc_iocbq *, | 99 | int lpfc_els_rsp_acc(struct lpfc_vport *, uint32_t, struct lpfc_iocbq *, |
@@ -95,7 +110,7 @@ void lpfc_els_retry_delay_handler(struct lpfc_nodelist *); | |||
95 | void lpfc_els_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *, | 110 | void lpfc_els_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *, |
96 | struct lpfc_iocbq *); | 111 | struct lpfc_iocbq *); |
97 | int lpfc_els_handle_rscn(struct lpfc_vport *); | 112 | int lpfc_els_handle_rscn(struct lpfc_vport *); |
98 | int lpfc_els_flush_rscn(struct lpfc_vport *); | 113 | void lpfc_els_flush_rscn(struct lpfc_vport *); |
99 | int lpfc_rscn_payload_check(struct lpfc_vport *, uint32_t); | 114 | int lpfc_rscn_payload_check(struct lpfc_vport *, uint32_t); |
100 | void lpfc_els_flush_cmd(struct lpfc_vport *); | 115 | void lpfc_els_flush_cmd(struct lpfc_vport *); |
101 | int lpfc_els_disc_adisc(struct lpfc_vport *); | 116 | int lpfc_els_disc_adisc(struct lpfc_vport *); |
@@ -105,7 +120,7 @@ void lpfc_els_timeout_handler(struct lpfc_vport *); | |||
105 | 120 | ||
106 | void lpfc_ct_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *, | 121 | void lpfc_ct_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *, |
107 | struct lpfc_iocbq *); | 122 | struct lpfc_iocbq *); |
108 | int lpfc_ns_cmd(struct lpfc_vport *, struct lpfc_nodelist *, int); | 123 | int lpfc_ns_cmd(struct lpfc_vport *, int, uint8_t, uint32_t); |
109 | int lpfc_fdmi_cmd(struct lpfc_vport *, struct lpfc_nodelist *, int); | 124 | int lpfc_fdmi_cmd(struct lpfc_vport *, struct lpfc_nodelist *, int); |
110 | void lpfc_fdmi_tmo(unsigned long); | 125 | void lpfc_fdmi_tmo(unsigned long); |
111 | void lpfc_fdmi_timeout_handler(struct lpfc_vport *vport); | 126 | void lpfc_fdmi_timeout_handler(struct lpfc_vport *vport); |
@@ -136,6 +151,7 @@ void lpfc_config_port(struct lpfc_hba *, LPFC_MBOXQ_t *); | |||
136 | void lpfc_kill_board(struct lpfc_hba *, LPFC_MBOXQ_t *); | 151 | void lpfc_kill_board(struct lpfc_hba *, LPFC_MBOXQ_t *); |
137 | void lpfc_mbox_put(struct lpfc_hba *, LPFC_MBOXQ_t *); | 152 | void lpfc_mbox_put(struct lpfc_hba *, LPFC_MBOXQ_t *); |
138 | LPFC_MBOXQ_t *lpfc_mbox_get(struct lpfc_hba *); | 153 | LPFC_MBOXQ_t *lpfc_mbox_get(struct lpfc_hba *); |
154 | void lpfc_mbox_cmpl_put(struct lpfc_hba *, LPFC_MBOXQ_t *); | ||
139 | int lpfc_mbox_tmo_val(struct lpfc_hba *, int); | 155 | int lpfc_mbox_tmo_val(struct lpfc_hba *, int); |
140 | 156 | ||
141 | void lpfc_config_hbq(struct lpfc_hba *, struct lpfc_hbq_init *, uint32_t , | 157 | void lpfc_config_hbq(struct lpfc_hba *, struct lpfc_hbq_init *, uint32_t , |
@@ -144,6 +160,7 @@ struct lpfc_hbq_entry * lpfc_sli_next_hbq_slot(struct lpfc_hba *, uint32_t); | |||
144 | 160 | ||
145 | int lpfc_mem_alloc(struct lpfc_hba *); | 161 | int lpfc_mem_alloc(struct lpfc_hba *); |
146 | void lpfc_mem_free(struct lpfc_hba *); | 162 | void lpfc_mem_free(struct lpfc_hba *); |
163 | void lpfc_stop_vport_timers(struct lpfc_vport *); | ||
147 | 164 | ||
148 | void lpfc_poll_timeout(unsigned long ptr); | 165 | void lpfc_poll_timeout(unsigned long ptr); |
149 | void lpfc_poll_start_timer(struct lpfc_hba * phba); | 166 | void lpfc_poll_start_timer(struct lpfc_hba * phba); |
@@ -176,11 +193,10 @@ int lpfc_sli_ringpostbuf_put(struct lpfc_hba *, struct lpfc_sli_ring *, | |||
176 | struct lpfc_dmabuf *lpfc_sli_ringpostbuf_get(struct lpfc_hba *, | 193 | struct lpfc_dmabuf *lpfc_sli_ringpostbuf_get(struct lpfc_hba *, |
177 | struct lpfc_sli_ring *, | 194 | struct lpfc_sli_ring *, |
178 | dma_addr_t); | 195 | dma_addr_t); |
179 | int lpfc_sli_hbqbuf_fill_hbq(struct lpfc_hba *); | 196 | int lpfc_sli_hbqbuf_init_hbqs(struct lpfc_hba *, uint32_t); |
180 | void lpfc_sli_hbqbuf_free(struct lpfc_hba *, void *, dma_addr_t); | 197 | int lpfc_sli_hbqbuf_add_hbqs(struct lpfc_hba *, uint32_t); |
181 | void lpfc_sli_hbqbuf_free_all(struct lpfc_hba *); | 198 | void lpfc_sli_hbqbuf_free_all(struct lpfc_hba *); |
182 | struct hbq_dmabuf *lpfc_sli_hbqbuf_find(struct lpfc_hba *, uint32_t); | 199 | struct hbq_dmabuf *lpfc_sli_hbqbuf_find(struct lpfc_hba *, uint32_t); |
183 | void lpfc_sli_free_hbq(struct lpfc_hba *, struct hbq_dmabuf *); | ||
184 | int lpfc_sli_hbq_size(void); | 200 | int lpfc_sli_hbq_size(void); |
185 | int lpfc_sli_issue_abort_iotag(struct lpfc_hba *, struct lpfc_sli_ring *, | 201 | int lpfc_sli_issue_abort_iotag(struct lpfc_hba *, struct lpfc_sli_ring *, |
186 | struct lpfc_iocbq *); | 202 | struct lpfc_iocbq *); |
@@ -192,12 +208,15 @@ int lpfc_sli_abort_iocb(struct lpfc_hba *, struct lpfc_sli_ring *, uint16_t, | |||
192 | void lpfc_mbox_timeout(unsigned long); | 208 | void lpfc_mbox_timeout(unsigned long); |
193 | void lpfc_mbox_timeout_handler(struct lpfc_hba *); | 209 | void lpfc_mbox_timeout_handler(struct lpfc_hba *); |
194 | 210 | ||
211 | struct lpfc_nodelist *__lpfc_find_node(struct lpfc_vport *, node_filter, | ||
212 | void *); | ||
213 | struct lpfc_nodelist *lpfc_find_node(struct lpfc_vport *, node_filter, void *); | ||
195 | struct lpfc_nodelist *lpfc_findnode_did(struct lpfc_vport *, uint32_t); | 214 | struct lpfc_nodelist *lpfc_findnode_did(struct lpfc_vport *, uint32_t); |
196 | struct lpfc_nodelist *lpfc_findnode_wwpn(struct lpfc_vport *, | 215 | struct lpfc_nodelist *lpfc_findnode_wwpn(struct lpfc_vport *, |
197 | struct lpfc_name *); | 216 | struct lpfc_name *); |
198 | 217 | ||
199 | int lpfc_sli_issue_mbox_wait(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq, | 218 | int lpfc_sli_issue_mbox_wait(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq, |
200 | uint32_t timeout); | 219 | uint32_t timeout); |
201 | 220 | ||
202 | int lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba, | 221 | int lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba, |
203 | struct lpfc_sli_ring * pring, | 222 | struct lpfc_sli_ring * pring, |
@@ -210,11 +229,13 @@ void lpfc_sli_abort_fcp_cmpl(struct lpfc_hba * phba, | |||
210 | 229 | ||
211 | void *lpfc_hbq_alloc(struct lpfc_hba *, int, dma_addr_t *); | 230 | void *lpfc_hbq_alloc(struct lpfc_hba *, int, dma_addr_t *); |
212 | void lpfc_hbq_free(struct lpfc_hba *, void *, dma_addr_t); | 231 | void lpfc_hbq_free(struct lpfc_hba *, void *, dma_addr_t); |
232 | void lpfc_sli_free_hbq(struct lpfc_hba *, struct hbq_dmabuf *); | ||
213 | 233 | ||
214 | void *lpfc_mbuf_alloc(struct lpfc_hba *, int, dma_addr_t *); | 234 | void *lpfc_mbuf_alloc(struct lpfc_hba *, int, dma_addr_t *); |
215 | void __lpfc_mbuf_free(struct lpfc_hba *, void *, dma_addr_t); | 235 | void __lpfc_mbuf_free(struct lpfc_hba *, void *, dma_addr_t); |
216 | void lpfc_mbuf_free(struct lpfc_hba *, void *, dma_addr_t); | 236 | void lpfc_mbuf_free(struct lpfc_hba *, void *, dma_addr_t); |
217 | 237 | ||
238 | void lpfc_in_buf_free(struct lpfc_hba *, struct lpfc_dmabuf *); | ||
218 | /* Function prototypes. */ | 239 | /* Function prototypes. */ |
219 | const char* lpfc_info(struct Scsi_Host *); | 240 | const char* lpfc_info(struct Scsi_Host *); |
220 | void lpfc_scan_start(struct Scsi_Host *); | 241 | void lpfc_scan_start(struct Scsi_Host *); |
@@ -226,14 +247,34 @@ void lpfc_free_sysfs_attr(struct lpfc_vport *); | |||
226 | extern struct class_device_attribute *lpfc_hba_attrs[]; | 247 | extern struct class_device_attribute *lpfc_hba_attrs[]; |
227 | extern struct scsi_host_template lpfc_template; | 248 | extern struct scsi_host_template lpfc_template; |
228 | extern struct fc_function_template lpfc_transport_functions; | 249 | extern struct fc_function_template lpfc_transport_functions; |
250 | extern struct fc_function_template lpfc_vport_transport_functions; | ||
229 | extern int lpfc_sli_mode; | 251 | extern int lpfc_sli_mode; |
252 | extern int lpfc_npiv_enable; | ||
230 | 253 | ||
231 | void lpfc_get_hba_sym_node_name(struct lpfc_hba *phba, uint8_t *symbp); | 254 | int lpfc_vport_symbolic_node_name(struct lpfc_vport *, char *, size_t); |
232 | void lpfc_terminate_rport_io(struct fc_rport *); | 255 | void lpfc_terminate_rport_io(struct fc_rport *); |
233 | void lpfc_dev_loss_tmo_callbk(struct fc_rport *rport); | 256 | void lpfc_dev_loss_tmo_callbk(struct fc_rport *rport); |
234 | 257 | ||
235 | struct lpfc_vport *lpfc_create_port(struct lpfc_hba *, int); | 258 | struct lpfc_vport *lpfc_create_port(struct lpfc_hba *, int, struct fc_vport *); |
236 | void lpfc_post_hba_setup_vport_init(struct lpfc_vport *); | 259 | int lpfc_vport_disable(struct fc_vport *fc_vport, bool disable); |
260 | void lpfc_mbx_unreg_vpi(struct lpfc_vport *); | ||
237 | void destroy_port(struct lpfc_vport *); | 261 | void destroy_port(struct lpfc_vport *); |
262 | int lpfc_get_instance(void); | ||
263 | void lpfc_host_attrib_init(struct Scsi_Host *); | ||
264 | |||
265 | /* Interface exported by fabric iocb scheduler */ | ||
266 | int lpfc_issue_fabric_iocb(struct lpfc_hba *, struct lpfc_iocbq *); | ||
267 | void lpfc_fabric_abort_vport(struct lpfc_vport *); | ||
268 | void lpfc_fabric_abort_nport(struct lpfc_nodelist *); | ||
269 | void lpfc_fabric_abort_hba(struct lpfc_hba *); | ||
270 | void lpfc_fabric_abort_flogi(struct lpfc_hba *); | ||
271 | void lpfc_fabric_block_timeout(unsigned long); | ||
272 | void lpfc_unblock_fabric_iocbs(struct lpfc_hba *); | ||
273 | void lpfc_adjust_queue_depth(struct lpfc_hba *); | ||
274 | void lpfc_ramp_down_queue_handler(struct lpfc_hba *); | ||
275 | void lpfc_ramp_up_queue_handler(struct lpfc_hba *); | ||
238 | 276 | ||
239 | #define ScsiResult(host_code, scsi_code) (((host_code) << 16) | scsi_code) | 277 | #define ScsiResult(host_code, scsi_code) (((host_code) << 16) | scsi_code) |
278 | #define HBA_EVENT_RSCN 5 | ||
279 | #define HBA_EVENT_LINK_UP 2 | ||
280 | #define HBA_EVENT_LINK_DOWN 3 | ||