1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2008 Emulex. All rights reserved. 24 * Use is subject to License terms. 25 */ 26 27 28 #ifndef _EMLXS_EXTERN_H 29 #define _EMLXS_EXTERN_H 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #include <emlxs_hbaapi.h> 36 37 extern void *emlxs_soft_state; 38 extern uint32_t emlxs_instance[MAX_FC_BRDS]; 39 extern uint32_t emlxs_instance_count; 40 extern char emlxs_revision[32]; 41 extern char emlxs_version[32]; 42 extern char emlxs_name[64]; 43 extern char emlxs_label[64]; 44 45 extern emlxs_device_t emlxs_device; 46 extern uint32_t emlxs_instance[MAX_FC_BRDS]; 47 extern uint32_t emlxs_instance_count; 48 49 extern ddi_device_acc_attr_t emlxs_data_acc_attr; 50 extern ddi_device_acc_attr_t emlxs_dev_acc_attr; 51 extern ddi_dma_lim_t emlxs_dma_lim; 52 extern uint32_t emlxs_diag_state; 53 extern emlxs_config_t emlxs_cfg[]; 54 extern ddi_dma_attr_t emlxs_dma_attr; 55 extern ddi_dma_attr_t emlxs_dma_attr_ro; 56 extern ddi_dma_attr_t emlxs_dma_attr_fcip_rsp; 57 extern ddi_dma_attr_t emlxs_dma_attr_1sg; 58 59 /* Module emlxs_msg.c External Routine Declarations */ 60 extern void emlxs_msg_printf(emlxs_port_t *port, const uint32_t fileno, 61 const uint32_t line, void *bp, uint32_t size, emlxs_msg_t *msg, 62 const char *fmt, ...); 63 extern uint32_t emlxs_msg_log_create(emlxs_hba_t *hba); 64 extern uint32_t emlxs_msg_log_destroy(emlxs_hba_t *hba); 65 extern uint32_t emlxs_msg_log_get(emlxs_hba_t *hba, emlxs_log_req_t *req, 66 emlxs_log_resp_t *resp); 67 extern void emlxs_log_dump_event(emlxs_port_t *port, uint8_t *buffer, 68 uint32_t size); 69 extern void emlxs_log_link_event(emlxs_port_t *port); 70 extern uint32_t emlxs_log_ct_event(emlxs_port_t *port, uint8_t *payload, 71 uint32_t size, uint32_t rxid); 72 extern void emlxs_log_rscn_event(emlxs_port_t *port, uint8_t *payload, 73 uint32_t size); 74 extern uint32_t emlxs_get_dfc_event(emlxs_port_t *port, 75 emlxs_dfc_event_t *dfc_event, uint32_t sleep); 76 extern uint32_t emlxs_kill_dfc_event(emlxs_port_t *port, 77 emlxs_dfc_event_t *dfc_event); 78 extern uint32_t emlxs_get_dfc_eventinfo(emlxs_port_t *port, 79 HBA_EVENTINFO *eventinfo, uint32_t *eventcount, uint32_t *missed); 80 extern void emlxs_log_temp_event(emlxs_port_t *port, uint32_t type, 81 uint32_t temp); 82 extern void emlxs_log_fcoe_event(emlxs_port_t *port, 83 menlo_init_rsp_t *init_rsp); 84 85 /* Module emlxs_solaris.c External Routine Declarations */ 86 extern int32_t emlxs_pkt_abort(opaque_t fca_port_handle, fc_packet_t *pkt, 87 int32_t sleep); 88 extern char *emlxs_state_xlate(uint8_t state); 89 extern char *emlxs_error_xlate(uint8_t errno); 90 extern void emlxs_mem_free(emlxs_hba_t *hba, MBUF_INFO *buf_info); 91 extern uint8_t *emlxs_mem_alloc(emlxs_hba_t *hba, MBUF_INFO *buf_info); 92 extern int emlxs_mapmem(emlxs_hba_t *hba); 93 extern void emlxs_unmapmem(emlxs_hba_t *hba); 94 extern fc_unsol_buf_t *emlxs_ub_find(emlxs_port_t *port, uint32_t token); 95 extern fc_unsol_buf_t *emlxs_ub_get(emlxs_port_t *port, uint32_t size, 96 uint32_t type, uint32_t resv); 97 extern int32_t emlxs_log_printf(int32_t f, int32_t type, int32_t num, 98 int32_t brdno, const char *fmt, ...); 99 extern void emlxs_set_pkt_state(emlxs_buf_t *sbp, uint32_t iostat, 100 uint8_t localstat, uint32_t lock); 101 extern char *emlxs_elscmd_xlate(uint32_t cmd); 102 extern char *emlxs_ctcmd_xlate(uint32_t cmd); 103 extern char *emlxs_rmcmd_xlate(uint32_t cmd); 104 extern char *emlxs_wwn_xlate(char *buffer, uint8_t *wwn); 105 extern int32_t emlxs_transport(opaque_t fca_port_handle, fc_packet_t *pkt); 106 extern int32_t emlxs_pkt_uninit(opaque_t fca_port_handle, fc_packet_t *pkt); 107 extern int32_t emlxs_pkt_init(opaque_t fca_port_handle, fc_packet_t *pkt, 108 int32_t sleep); 109 extern void emlxs_pkt_complete(emlxs_buf_t *sbp, uint32_t iostat, 110 uint8_t localstat, uint32_t doneq); 111 extern uint32_t emlxs_get_instance(int32_t ddiinst); 112 extern char *emlxs_mscmd_xlate(uint16_t cmd); 113 extern int32_t emlxs_reset(opaque_t fca_port_handle, uint32_t cmd); 114 extern void emlxs_swap_service_params(SERV_PARM *sp); 115 extern void emlxs_swap_fcp_pkt(emlxs_buf_t *sbp); 116 extern void emlxs_swap_ct_pkt(emlxs_buf_t *sbp); 117 extern void emlxs_swap_els_pkt(emlxs_buf_t *sbp); 118 extern int emlxs_ub_release(opaque_t fca_port_handle, uint32_t count, 119 uint64_t tokens[]); 120 extern void emlxs_swap_els_ub(fc_unsol_buf_t *ubp); 121 extern void emlxs_unswap_pkt(emlxs_buf_t *sbp); 122 extern uint32_t emlxs_get_key(emlxs_hba_t *hba, MAILBOX *mb); 123 extern int emlxs_pm_busy_component(dev_info_t *dip); 124 extern int emlxs_pm_idle_component(dev_info_t *dip); 125 extern void emlxs_pm_idle_timer(dev_info_t *dip); 126 extern void emlxs_shutdown_thread(void *arg); 127 extern uint32_t emlxs_set_parm(emlxs_hba_t *hba, uint32_t index, 128 uint32_t new_value); 129 extern void emlxs_ub_destroy(emlxs_port_t *port, emlxs_unsol_buf_t *pool); 130 extern void emlxs_ub_callback(emlxs_port_t *port, fc_unsol_buf_t *ubp); 131 extern void emlxs_ub_flush(emlxs_port_t *port); 132 extern uint32_t emlxs_check_parm(emlxs_hba_t *hba, uint32_t index, 133 uint32_t new_value); 134 extern int32_t emlxs_port_manage(opaque_t fca_port_handle, fc_fca_pm_t *pm); 135 extern void emlxs_port_init(emlxs_port_t *port); 136 extern void emlxs_get_fcode_version(emlxs_hba_t *hba); 137 138 #ifdef MENLO_SUPPORT 139 extern char *emlxs_menlo_cmd_xlate(uint32_t cmd); 140 extern char *emlxs_menlo_rsp_xlate(uint32_t rsp); 141 #endif /* MENLO_SUPPORT */ 142 143 /* Module emlxs_pkt.c External Routine Declarations */ 144 extern int32_t emlxs_pkt_send(fc_packet_t *pkt, uint32_t now); 145 extern void emlxs_pkt_free(fc_packet_t *pkt); 146 extern void emlxs_pkt_callback(fc_packet_t *pkt); 147 extern fc_packet_t *emlxs_pkt_alloc(emlxs_port_t *port, uint32_t cmdlen, 148 uint32_t rsplen, uint32_t datalen, int32_t sleep); 149 150 /* Module emlxs_clock.c External Routine Declarations */ 151 extern void emlxs_timer_start(emlxs_hba_t *hba); 152 extern void emlxs_timer_stop(emlxs_hba_t *hba); 153 extern void emlxs_link_timeout(emlxs_hba_t *hba); 154 extern clock_t emlxs_timeout(emlxs_hba_t *hba, uint32_t timeout); 155 156 /* Module emlxs_dhchap.c External Routine Declarations */ 157 #ifdef DHCHAP_SUPPORT 158 extern int emlxs_dhchap_state_machine(emlxs_port_t *port, RING *ring, 159 IOCBQ *iocbq, MATCHMAP *mp, NODELIST *node, int event); 160 161 extern void emlxs_dhc_attach(emlxs_hba_t *hba); 162 extern void emlxs_dhc_detach(emlxs_hba_t *hba); 163 extern void emlxs_dhc_authrsp_timeout(emlxs_port_t *port, void *node, 164 void *null); 165 extern void emlxs_dhc_reauth_timeout(emlxs_port_t *port, void *newtimeout, 166 void *node); 167 extern void emlxs_dhc_auth_stop(emlxs_port_t *port, emlxs_node_t *node); 168 extern int emlxs_dhc_auth_start(emlxs_port_t *port, emlxs_node_t *node, 169 uint8_t *sbp, uint8_t *ubp); 170 extern void emlxs_dhc_init_sp(emlxs_port_t *port, uint32_t did, SERV_PARM *sp, 171 char **msg); 172 extern uint32_t emlxs_dhc_verify_login(emlxs_port_t *port, uint32_t sid, 173 SERV_PARM *sp); 174 extern void emlxs_dhc_status(emlxs_port_t *port, emlxs_node_t *ndlp, 175 uint32_t reason, uint32_t explaination); 176 extern void emlxs_dhc_state(emlxs_port_t *port, emlxs_node_t *ndlp, 177 uint32_t state, uint32_t reason, uint32_t explaination); 178 extern uint32_t emlxs_dhc_init_auth(emlxs_hba_t *hba, uint8_t *lwwpn, 179 uint8_t *rwwpn); 180 extern uint32_t emlxs_dhc_get_auth_cfg(emlxs_hba_t *hba, 181 dfc_fcsp_config_t *fcsp_cfg); 182 extern uint32_t emlxs_dhc_get_auth_key(emlxs_hba_t *hba, 183 dfc_auth_password_t *dfc_auth_pwd); 184 extern uint32_t emlxs_dhc_add_auth_cfg(emlxs_hba_t *hba, 185 dfc_fcsp_config_t *fcsp_cfg, dfc_password_t *dfc_pwd); 186 extern uint32_t emlxs_dhc_delete_auth_cfg(emlxs_hba_t *hba, 187 dfc_fcsp_config_t *fcsp_cfg, dfc_password_t *dfc_pwd); 188 extern uint32_t emlxs_dhc_set_auth_key(emlxs_hba_t *hba, 189 dfc_auth_password_t *dfc_pwd); 190 extern uint32_t emlxs_dhc_get_auth_status(emlxs_hba_t *hba, 191 dfc_auth_status_t *fcsp_status); 192 extern uint32_t emlxs_dhc_get_auth_cfg_table(emlxs_hba_t *hba, 193 dfc_fcsp_config_t *fcsp_cfg); 194 extern uint32_t emlxs_dhc_get_auth_key_table(emlxs_hba_t *hba, 195 dfc_auth_password_t *auth_pwd); 196 #endif /* DHCHAP_SUPPORT */ 197 198 /* Module emlxs_node.c External Routine Declarations */ 199 extern void emlxs_node_open(emlxs_port_t *port, NODELIST *ndlp, 200 uint32_t ringno); 201 extern void emlxs_node_close(emlxs_port_t *port, NODELIST *ndlp, 202 uint32_t ringno, uint32_t tics); 203 extern NODELIST *emlxs_node_find_did(emlxs_port_t *port, uint32_t did); 204 extern NODELIST *emlxs_node_find_rpi(emlxs_port_t *port, uint32_t rpi); 205 extern void emlxs_node_destroy_all(emlxs_port_t *port); 206 extern NODELIST *emlxs_node_find_mac(emlxs_port_t *port, uint8_t *mac); 207 extern void emlxs_node_add(emlxs_port_t *port, NODELIST *ndlp); 208 extern void emlxs_node_rm(emlxs_port_t *port, NODELIST *ndlp); 209 extern NODELIST *emlxs_node_find_wwpn(emlxs_port_t *port, uint8_t *wwpn); 210 extern NODELIST *emlxs_node_find_index(emlxs_port_t *port, uint32_t index, 211 uint32_t nports_only); 212 extern uint32_t emlxs_nport_count(emlxs_port_t *port); 213 214 /* Module emlxs_els.c External Routine Declarations */ 215 extern int32_t emlxs_els_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 216 extern int32_t emlxs_els_handle_unsol_req(emlxs_port_t *port, RING *rp, 217 IOCBQ *iocbq, MATCHMAP *mp, uint32_t size); 218 extern uint32_t emlxs_generate_rscn(emlxs_port_t *port, uint32_t d_id); 219 extern int32_t emlxs_ct_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 220 extern int32_t emlxs_ct_handle_unsol_req(emlxs_port_t *port, RING *rp, 221 IOCBQ *iocbq, MATCHMAP *mp, uint32_t size); 222 extern int32_t emlxs_els_reply(emlxs_port_t *port, IOCBQ *iocbq, 223 uint32_t type, uint32_t type2, uint32_t reason, uint32_t explain); 224 extern void emlxs_send_logo(emlxs_port_t *port, uint32_t d_id); 225 extern void emlxs_reset_link_thread(void *arg); 226 extern uint32_t emlxs_process_unsol_flogi(emlxs_port_t *port, IOCBQ *iocbq, 227 MATCHMAP *mp, uint32_t size, char *buffer); 228 extern uint32_t emlxs_process_unsol_plogi(emlxs_port_t *port, IOCBQ *iocbq, 229 MATCHMAP *mp, uint32_t size, char *buffer); 230 extern uint32_t emlxs_ub_send_login_acc(emlxs_port_t *port, fc_unsol_buf_t *bp); 231 232 #ifdef MENLO_SUPPORT 233 extern int emlxs_menlo_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *iocbq); 234 #endif /* MENLO_SUPPORT */ 235 236 /* Module emlxs_ip.c External Routine Declarations */ 237 extern int32_t emlxs_ip_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 238 extern int emlxs_ip_handle_rcv_seq_list(emlxs_hba_t *hba, RING *rp, 239 IOCBQ *saveq); 240 extern int emlxs_ip_handle_unsol_req(emlxs_port_t *port, RING *rp, 241 IOCBQ *iocbq, MATCHMAP *mp, uint32_t size); 242 extern int emlxs_create_xri(emlxs_port_t *port, RING *rp, NODELIST *ndlp); 243 extern int emlxs_handle_create_xri(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 244 extern int emlxs_handle_xri_aborted(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 245 246 /* Module emlxs_mbox.c External Routine Declarations */ 247 extern void emlxs_mb_config_msi(emlxs_hba_t *hba, MAILBOX *mb, 248 uint32_t *intr_map, uint32_t intr_count); 249 extern void emlxs_mb_config_msix(emlxs_hba_t *hba, MAILBOX *mb, 250 uint32_t *intr_map, uint32_t intr_count); 251 extern void emlxs_mb_read_lnk_stat(emlxs_hba_t *hba, MAILBOX *mb); 252 extern void emlxs_mb_config_link(emlxs_hba_t *hba, MAILBOX *mb); 253 extern uint32_t emlxs_mb_config_port(emlxs_hba_t *hba, MAILBOX *mb, 254 uint32_t sli_mode, uint32_t hbainit); 255 extern void emlxs_mb_config_ring(emlxs_hba_t *hba, int32_t ring, MAILBOX *mb); 256 extern void emlxs_mb_init_link(emlxs_hba_t *hba, MAILBOX *mb, 257 uint32_t topology, uint32_t linkspeed); 258 extern void emlxs_mb_down_link(emlxs_hba_t *hba, MAILBOX *mb); 259 extern uint32_t emlxs_mb_read_la(emlxs_hba_t *hba, MAILBOX *mb); 260 extern void emlxs_mb_read_nv(emlxs_hba_t *hba, MAILBOX *mb); 261 extern void emlxs_mb_read_rev(emlxs_hba_t *hba, MAILBOX *mb, uint32_t v3); 262 extern uint32_t emlxs_mb_read_rpi(emlxs_hba_t *hba, uint32_t rpi, 263 MAILBOX *mb, uint32_t flg); 264 extern uint32_t emlxs_mb_read_xri(emlxs_hba_t *hba, uint32_t xri, 265 MAILBOX *mb, uint32_t flg); 266 extern uint32_t emlxs_mb_read_sparam(emlxs_hba_t *hba, MAILBOX *mb); 267 extern uint32_t emlxs_mb_reg_did(emlxs_port_t *port, uint32_t did, 268 SERV_PARM *param, emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, IOCBQ *iocbq); 269 extern void emlxs_disable_tc(emlxs_hba_t *hba, MAILBOX *mb); 270 extern uint32_t emlxs_mb_run_biu_diag(emlxs_hba_t *hba, MAILBOX *mb, 271 uint64_t in, uint64_t out); 272 extern uint32_t emlxs_handle_mb_event(emlxs_hba_t *hba); 273 extern uint32_t emlxs_mb_unreg_rpi(emlxs_port_t *port, uint32_t rpi, 274 emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, IOCBQ *iocbq); 275 extern uint32_t emlxs_mb_unreg_did(emlxs_port_t *port, uint32_t did, 276 emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, IOCBQ *iocbq); 277 extern void emlxs_mb_dump_vpd(emlxs_hba_t *hba, MAILBOX *mb, uint32_t offset); 278 extern void emlxs_mb_config_farp(emlxs_hba_t *hba, MAILBOX *mb); 279 extern void emlxs_mb_read_config(emlxs_hba_t *hba, MAILBOX *mb); 280 extern void emlxs_mb_put(emlxs_hba_t *hba, MAILBOXQ *mbq); 281 extern MAILBOXQ *emlxs_mb_get(emlxs_hba_t *hba); 282 extern uint32_t emlxs_mb_issue_cmd(emlxs_hba_t *hba, MAILBOX *mb, 283 int32_t flag, uint32_t timeout); 284 extern void emlxs_mb_clear_la(emlxs_hba_t *hba, MAILBOX *mb); 285 extern void emlxs_mb_set_var(emlxs_hba_t *hba, MAILBOX *mb, uint32_t addr, 286 uint32_t value); 287 extern void emlxs_mb_reset_ring(emlxs_hba_t *hba, MAILBOX *mb, uint32_t ringno); 288 extern char *emlxs_mb_cmd_xlate(uint8_t command); 289 extern void emlxs_mb_read_status(emlxs_hba_t *hba, MAILBOX *mb); 290 extern uint32_t emlxs_mb_reg_vpi(emlxs_port_t *port); 291 extern uint32_t emlxs_mb_unreg_vpi(emlxs_port_t *port); 292 extern void emlxs_mb_fini(emlxs_hba_t *hba, MAILBOX *mb, uint32_t mbxStatus); 293 extern void emlxs_mb_heartbeat(emlxs_hba_t *hba, MAILBOX *mb); 294 extern void emlxs_mb_async_event(emlxs_hba_t *hba, MAILBOX *mb); 295 extern int32_t emlxs_mb_check_sparm(emlxs_hba_t *hba, SERV_PARM *nsp); 296 297 #ifdef SLI3_SUPPORT 298 extern void emlxs_mb_config_hbq(emlxs_hba_t *hba, MAILBOX *mb, int hbq_id); 299 #endif /* SLI3_SUPPORT */ 300 301 /* Module emlxs_mem.c External Routine Declarations */ 302 extern MATCHMAP *emlxs_mem_get_vaddr(emlxs_hba_t *hba, RING *rp, uint64_t mbp); 303 extern uint8_t *emlxs_mem_get(emlxs_hba_t *hba, uint32_t seg); 304 extern uint8_t *emlxs_mem_put(emlxs_hba_t *hba, uint32_t seg, uint8_t *bp); 305 extern int32_t emlxs_mem_free_buffer(emlxs_hba_t *hba); 306 extern int32_t emlxs_mem_alloc_buffer(emlxs_hba_t *hba); 307 extern void emlxs_mem_map_vaddr(emlxs_hba_t *hba, RING *rp, MATCHMAP *mp, 308 uint32_t *haddr, uint32_t *laddr); 309 extern uint8_t *emlxs_mem_buf_alloc(emlxs_hba_t *hba); 310 extern uint8_t *emlxs_mem_buf_free(emlxs_hba_t *hba, uint8_t *bp); 311 #ifdef SLI3_SUPPORT 312 extern void emlxs_update_HBQ_index(emlxs_hba_t *hba, uint32_t hbq_id); 313 extern uint32_t emlxs_hbq_setup(emlxs_hba_t *hba, uint32_t hbq_id); 314 #endif /* SLI3_SUPPORT */ 315 316 /* Module emlxs_hba.c External Routine Declarations */ 317 extern uint32_t emlxs_interlock(emlxs_hba_t *hba); 318 extern uint32_t emlxs_hba_reset(emlxs_hba_t *hba, uint32_t restart, 319 uint32_t skip_post); 320 extern int32_t emlxs_ffinit(emlxs_hba_t *hba); 321 extern void emlxs_issue_iocb_cmd(emlxs_hba_t *hba, RING *rp, IOCBQ *iocb_cmd); 322 extern void emlxs_decode_firmware_rev(emlxs_hba_t *hba, emlxs_vpd_t *vp); 323 extern void emlxs_poll_intr(emlxs_hba_t *hba, uint32_t att_bit); 324 extern uint32_t emlxs_init_adapter_info(emlxs_hba_t *hba); 325 extern uint32_t emlxs_strtol(char *str, uint32_t base); 326 extern uint64_t emlxs_strtoll(char *str, uint32_t base); 327 extern void emlxs_decode_version(uint32_t version, char *buffer); 328 extern char *emlxs_ffstate_xlate(uint32_t new_state); 329 extern char *emlxs_ring_xlate(uint32_t ringno); 330 extern uint32_t emlxs_reset_ring(emlxs_hba_t *hba, uint32_t ringno); 331 extern void emlxs_proc_ring(emlxs_hba_t *hba, RING *rp, void *arg2); 332 extern void emlxs_pcix_mxr_update(emlxs_hba_t *hba, uint32_t verbose); 333 extern void emlxs_restart_thread(void *arg); 334 extern void emlxs_handle_ff_error(emlxs_hba_t *hba); 335 336 #ifdef MSI_SUPPORT 337 extern int32_t emlxs_msi_add(emlxs_hba_t *hba); 338 extern int32_t emlxs_msi_remove(emlxs_hba_t *hba); 339 extern int32_t emlxs_msi_init(emlxs_hba_t *hba, uint32_t max); 340 extern int32_t emlxs_msi_uninit(emlxs_hba_t *hba); 341 #endif /* MSI_SUPPORT */ 342 343 extern int32_t emlxs_intx_add(emlxs_hba_t *hba); 344 extern int32_t emlxs_intx_remove(emlxs_hba_t *hba); 345 extern int32_t emlxs_intx_init(emlxs_hba_t *hba, uint32_t max); 346 extern int32_t emlxs_intx_uninit(emlxs_hba_t *hba); 347 348 349 /* Module emlxs_diag.c External Routine Declarations */ 350 extern uint32_t emlxs_diag_post_run(emlxs_hba_t *hba); 351 extern uint32_t emlxs_diag_biu_run(emlxs_hba_t *hba, uint32_t pattern); 352 extern uint32_t emlxs_diag_pattern[256]; 353 extern uint32_t emlxs_diag_echo_run(emlxs_port_t *port, uint32_t did, 354 uint32_t pattern); 355 extern uint32_t emlxs_core_size(emlxs_hba_t *hba); 356 extern uint32_t emlxs_core_dump(emlxs_hba_t *hba, char *buffer, uint32_t size); 357 358 /* Module emlxs_download.c External Routine Declarations */ 359 extern int32_t emlxs_fw_download(emlxs_hba_t *hba, caddr_t buffer, 360 uint32_t len, uint32_t offline); 361 extern uint32_t emlxs_get_max_sram(emlxs_hba_t *hba, uint32_t *MaxRbusSize, 362 uint32_t *MaxIbusSize); 363 extern uint32_t emlxs_get_load_list(emlxs_hba_t *hba, PROG_ID *load_list); 364 extern uint32_t emlxs_read_wakeup_parms(emlxs_hba_t *hba, 365 PWAKE_UP_PARMS WakeUpParms, uint32_t verbose); 366 extern int32_t emlxs_cfl_download(emlxs_hba_t *hba, uint32_t region, 367 caddr_t buffer, uint32_t len); 368 369 extern uint32_t emlxs_boot_code_disable(emlxs_hba_t *hba); 370 extern uint32_t emlxs_boot_code_enable(emlxs_hba_t *hba); 371 extern uint32_t emlxs_boot_code_state(emlxs_hba_t *hba); 372 373 /* Module emlxs_fcp.c External Routine Declarations */ 374 extern int emlxs_power_up(emlxs_hba_t *hba); 375 extern int emlxs_power_down(emlxs_hba_t *hba); 376 extern int emlxs_reset_link(emlxs_hba_t *hba, uint32_t linkup); 377 extern emlxs_buf_t *emlxs_unregister_pkt(RING *rp, uint16_t iotag, 378 uint32_t forced); 379 extern uint16_t emlxs_register_pkt(RING *rp, emlxs_buf_t *sbp); 380 381 extern IOCBQ *emlxs_create_abort_xri_cn(emlxs_port_t *port, NODELIST *ndlp, 382 uint16_t iotag, RING *rp, uint8_t class, int32_t flag); 383 extern IOCBQ *emlxs_create_close_xri_cn(emlxs_port_t *port, NODELIST *ndlp, 384 uint16_t iotag, RING *rp); 385 extern IOCBQ *emlxs_create_abort_xri_cx(emlxs_port_t *port, NODELIST *ndlp, 386 uint16_t xid, RING *rp, uint8_t class, int32_t flag); 387 extern IOCBQ *emlxs_create_close_xri_cx(emlxs_port_t *port, NODELIST *ndlp, 388 uint16_t xid, RING *rp); 389 extern void emlxs_abort_ct_exchange(emlxs_port_t *port, uint32_t rxid); 390 391 extern emlxs_buf_t *emlxs_chipq_get(RING *rp, uint16_t iotag); 392 extern void emlxs_chipq_put(RING *rp, emlxs_buf_t *sbp); 393 extern uint32_t emlxs_chipq_node_flush(emlxs_port_t *port, RING *rp, 394 NODELIST *ndlp, emlxs_buf_t *fpkt); 395 extern uint32_t emlxs_chipq_lun_flush(emlxs_port_t *port, NODELIST *ndlp, 396 uint32_t lun, emlxs_buf_t *fpkt); 397 extern uint32_t emlxs_chipq_node_check(emlxs_port_t *port, RING *ring, 398 NODELIST *ndlp); 399 400 extern IOCBQ *emlxs_tx_get(RING *rp, uint32_t lock); 401 extern void emlxs_tx_put(IOCBQ *iocbq, uint32_t lock); 402 extern uint32_t emlxs_tx_node_check(emlxs_port_t *port, NODELIST *ndlp, 403 RING *ring); 404 extern uint32_t emlxs_tx_node_flush(emlxs_port_t *port, NODELIST *ndlp, 405 RING *ring, uint32_t shutdown, emlxs_buf_t *fpkt); 406 extern uint32_t emlxs_tx_lun_flush(emlxs_port_t *port, NODELIST *ndlp, 407 uint32_t lun, emlxs_buf_t *fpkt); 408 extern uint32_t emlxs_tx_ring_flush(emlxs_hba_t *hba, RING *rp, 409 emlxs_buf_t *fpkt); 410 411 extern void emlxs_linkdown(emlxs_hba_t *hba); 412 extern void emlxs_linkup(emlxs_hba_t *hba); 413 extern void emlxs_port_online(emlxs_port_t *port); 414 extern int32_t emlxs_port_offline(emlxs_port_t *port, uint32_t scope); 415 extern void emlxs_ffcleanup(emlxs_hba_t *hba); 416 extern int32_t emlxs_offline(emlxs_hba_t *hba); 417 extern int32_t emlxs_online(emlxs_hba_t *hba); 418 extern void emlxs_pcimem_bcopy(uint32_t *src, uint32_t *dest, uint32_t cnt); 419 extern int32_t emlxs_post_buffer(emlxs_hba_t *hba, RING *rp, int16_t cnt); 420 extern void emlxs_swap_bcopy(uint32_t *src, uint32_t *dest, uint32_t cnt); 421 extern void emlxs_ff_start(emlxs_hba_t *hba); 422 extern void emlxs_handle_fcp_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 423 424 /* Module emlxs_thread.c External Routine Declarations */ 425 extern void emlxs_taskq_destroy(emlxs_taskq_t *taskq); 426 extern void emlxs_taskq_create(emlxs_hba_t *hba, emlxs_taskq_t *taskq); 427 extern uint32_t emlxs_taskq_dispatch(emlxs_taskq_t *taskq, 428 void (*func) (), void *arg); 429 extern void emlxs_thread_create(emlxs_hba_t *hba, emlxs_thread_t *ethread); 430 extern void emlxs_thread_destroy(emlxs_thread_t *ethread); 431 extern void emlxs_thread_trigger1(emlxs_thread_t *ethread, void (*func) ()); 432 extern void emlxs_thread_trigger2(emlxs_thread_t *ethread, 433 void (*func) (), RING *rp); 434 435 /* Module emlxs_dfc.c External Routine Declarations */ 436 extern int32_t emlxs_dfc_manage(emlxs_hba_t *hba, void *dfc, int32_t mode); 437 extern int32_t emlxs_dfc_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp); 438 extern int emlxs_dfc_handle_unsol_req(emlxs_port_t *port, RING *rp, 439 IOCBQ *iocbq, MATCHMAP *mp, uint32_t size); 440 extern void emlxs_fcoe_attention_thread(void *arg); 441 442 443 #ifdef SFCT_SUPPORT 444 /* Module emlxs_fct.c External Routine Declarations */ 445 extern void emlxs_fct_link_down(emlxs_port_t *port); 446 extern void emlxs_fct_link_up(emlxs_port_t *port); 447 extern void emlxs_fct_init(emlxs_hba_t *hba); 448 extern void emlxs_fct_detach(emlxs_hba_t *hba); 449 extern int emlxs_fct_handle_unsol_els(emlxs_port_t *port, RING *rp, 450 IOCBQ *iocbq, MATCHMAP *mp, uint32_t size); 451 extern int emlxs_fct_handle_unsol_req(emlxs_port_t *port, RING *rp, 452 IOCBQ *iocbq, MATCHMAP *mp, uint32_t size); 453 extern int emlxs_fct_handle_fcp_event(emlxs_hba_t *hba, RING *rp, IOCBQ *iocbq); 454 extern void emlxs_fct_bind_port(emlxs_port_t *port); 455 extern void emlxs_fct_unbind_port(emlxs_port_t *port); 456 extern void emlxs_fct_unsol_callback(emlxs_port_t *port, fct_cmd_t *fct_cmd); 457 extern void emlxs_fct_attach(emlxs_hba_t *hba); 458 extern int emlxs_fct_port_shutdown(emlxs_port_t *port); 459 extern int emlxs_fct_port_initialize(emlxs_port_t *port); 460 461 #ifdef MODSYM_SUPPORT 462 extern void emlxs_fct_modclose(); 463 #endif /* MODSYM_SUPPORT */ 464 465 #endif /* SFCT_SUPPORT */ 466 467 #ifdef __cplusplus 468 } 469 #endif 470 471 #endif /* _EMLXS_EXTERN_H */ 472