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 2009 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 extern void *emlxs_soft_state; 36 extern uint32_t emlxs_instance[MAX_FC_BRDS]; 37 extern uint32_t emlxs_instance_count; 38 extern char emlxs_revision[32]; 39 extern char emlxs_version[32]; 40 extern char emlxs_name[64]; 41 extern char emlxs_label[64]; 42 43 extern emlxs_device_t emlxs_device; 44 extern uint32_t emlxs_instance[MAX_FC_BRDS]; 45 extern uint32_t emlxs_instance_count; 46 47 extern ddi_device_acc_attr_t emlxs_data_acc_attr; 48 extern ddi_device_acc_attr_t emlxs_dev_acc_attr; 49 extern ddi_dma_lim_t emlxs_dma_lim; 50 extern uint32_t emlxs_diag_state; 51 extern emlxs_config_t emlxs_cfg[]; 52 extern ddi_dma_attr_t emlxs_dma_attr; 53 extern ddi_dma_attr_t emlxs_dma_attr_ro; 54 extern ddi_dma_attr_t emlxs_dma_attr_fcip_rsp; 55 extern ddi_dma_attr_t emlxs_dma_attr_1sg; 56 57 /* Module emlxs_msg.c External Routine Declarations */ 58 extern void emlxs_msg_printf(emlxs_port_t *port, 59 const uint32_t fileno, 60 const uint32_t line, 61 void *bp, uint32_t size, 62 emlxs_msg_t *msg, 63 const char *fmt, ...); 64 extern uint32_t emlxs_msg_log_create(emlxs_hba_t *hba); 65 extern uint32_t emlxs_msg_log_destroy(emlxs_hba_t *hba); 66 extern uint32_t emlxs_msg_log_get(emlxs_hba_t *hba, 67 emlxs_log_req_t *req, 68 emlxs_log_resp_t *resp); 69 extern void emlxs_log_dump_event(emlxs_port_t *port, 70 uint8_t *buffer, uint32_t size); 71 extern void emlxs_log_link_event(emlxs_port_t *port); 72 extern uint32_t emlxs_log_ct_event(emlxs_port_t *port, 73 uint8_t *payload, uint32_t size, 74 uint32_t rxid); 75 extern void emlxs_log_rscn_event(emlxs_port_t *port, 76 uint8_t *payload, uint32_t size); 77 extern void emlxs_log_vportrscn_event(emlxs_port_t *port, 78 uint8_t *payload, uint32_t size); 79 extern uint32_t emlxs_get_dfc_event(emlxs_port_t *port, 80 emlxs_dfc_event_t *dfc_event, 81 uint32_t sleep); 82 extern uint32_t emlxs_kill_dfc_event(emlxs_port_t *port, 83 emlxs_dfc_event_t *dfc_event); 84 extern uint32_t emlxs_get_dfc_eventinfo(emlxs_port_t *port, 85 HBA_EVENTINFO *eventinfo, 86 uint32_t *eventcount, 87 uint32_t *missed); 88 extern void emlxs_log_temp_event(emlxs_port_t *port, 89 uint32_t type, uint32_t temp); 90 extern void emlxs_log_fcoe_event(emlxs_port_t *port, 91 menlo_init_rsp_t *init_rsp); 92 extern void emlxs_log_async_event(emlxs_port_t *port, 93 IOCB *iocb); 94 95 /* Module emlxs_solaris.c External Routine Declarations */ 96 extern int32_t emlxs_pkt_abort(opaque_t fca_port_handle, 97 fc_packet_t *pkt, int32_t sleep); 98 extern char *emlxs_state_xlate(uint8_t state); 99 extern char *emlxs_error_xlate(uint8_t errno); 100 extern void emlxs_mem_free(emlxs_hba_t *hba, 101 MBUF_INFO *buf_info); 102 extern uint8_t *emlxs_mem_alloc(emlxs_hba_t *hba, 103 MBUF_INFO *buf_info); 104 extern int emlxs_map_bus(emlxs_hba_t *hba); 105 extern void emlxs_unmap_bus(emlxs_hba_t *hba); 106 extern fc_unsol_buf_t *emlxs_ub_find(emlxs_port_t *port, 107 uint32_t token); 108 extern fc_unsol_buf_t *emlxs_ub_get(emlxs_port_t *port, uint32_t size, 109 uint32_t type, uint32_t resv); 110 extern int32_t emlxs_log_printf(int32_t f, int32_t type, 111 int32_t num, int32_t brdno, 112 const char *fmt, ...); 113 extern void emlxs_set_pkt_state(emlxs_buf_t *sbp, 114 uint32_t iostat, uint8_t localstat, 115 uint32_t lock); 116 extern char *emlxs_elscmd_xlate(uint32_t cmd); 117 extern char *emlxs_ctcmd_xlate(uint32_t cmd); 118 extern char *emlxs_rmcmd_xlate(uint32_t cmd); 119 extern char *emlxs_wwn_xlate(char *buffer, uint8_t *wwn); 120 extern int32_t emlxs_transport(opaque_t fca_port_handle, 121 fc_packet_t *pkt); 122 extern int32_t emlxs_pkt_uninit(opaque_t fca_port_handle, 123 fc_packet_t *pkt); 124 extern int32_t emlxs_pkt_init(opaque_t fca_port_handle, 125 fc_packet_t *pkt, int32_t sleep); 126 extern void emlxs_pkt_complete(emlxs_buf_t *sbp, 127 uint32_t iostat, uint8_t localstat, 128 uint32_t doneq); 129 130 #ifdef SAN_DIAG_SUPPORT 131 extern void emlxs_update_sd_bucket(emlxs_buf_t *sbp); 132 #endif /* SAN_DIAG_SUPPORT */ 133 134 extern uint32_t emlxs_get_instance(int32_t ddiinst); 135 extern char *emlxs_mscmd_xlate(uint16_t cmd); 136 extern int32_t emlxs_reset(opaque_t fca_port_handle, 137 uint32_t cmd); 138 extern void emlxs_swap_service_params(SERV_PARM *sp); 139 extern void emlxs_swap_fcp_pkt(emlxs_buf_t *sbp); 140 extern void emlxs_swap_ct_pkt(emlxs_buf_t *sbp); 141 extern void emlxs_swap_els_pkt(emlxs_buf_t *sbp); 142 extern int emlxs_ub_release(opaque_t fca_port_handle, 143 uint32_t count, uint64_t tokens[]); 144 extern void emlxs_swap_els_ub(fc_unsol_buf_t *ubp); 145 extern void emlxs_unswap_pkt(emlxs_buf_t *sbp); 146 extern uint32_t emlxs_get_key(emlxs_hba_t *hba, MAILBOX *mb); 147 extern int emlxs_pm_busy_component(dev_info_t *dip); 148 extern int emlxs_pm_idle_component(dev_info_t *dip); 149 extern void emlxs_pm_idle_timer(dev_info_t *dip); 150 extern void emlxs_shutdown_thread(void *arg); 151 extern uint32_t emlxs_set_parm(emlxs_hba_t *hba, uint32_t index, 152 uint32_t new_value); 153 extern void emlxs_ub_destroy(emlxs_port_t *port, 154 emlxs_unsol_buf_t *pool); 155 extern void emlxs_ub_callback(emlxs_port_t *port, 156 fc_unsol_buf_t *ubp); 157 extern void emlxs_ub_flush(emlxs_port_t *port); 158 extern uint32_t emlxs_check_parm(emlxs_hba_t *hba, 159 uint32_t index, uint32_t new_value); 160 extern int32_t emlxs_port_manage(opaque_t fca_port_handle, 161 fc_fca_pm_t *pm); 162 extern void emlxs_port_init(emlxs_port_t *port); 163 extern void emlxs_get_fcode_version(emlxs_hba_t *hba); 164 165 #ifdef MENLO_SUPPORT 166 extern char *emlxs_menlo_cmd_xlate(uint32_t cmd); 167 extern char *emlxs_menlo_rsp_xlate(uint32_t rsp); 168 #endif /* MENLO_SUPPORT */ 169 170 #ifdef FMA_SUPPORT 171 extern void emlxs_fm_init(emlxs_hba_t *hba); 172 extern void emlxs_fm_fini(emlxs_hba_t *hba); 173 extern int emlxs_fm_check_acc_handle( 174 ddi_acc_handle_t handle); 175 extern int emlxs_fm_check_dma_handle( 176 ddi_dma_handle_t handle); 177 extern void emlxs_fm_ereport(emlxs_hba_t *hba, 178 char *detail); 179 extern int emlxs_fm_error_cb(dev_info_t *dip, 180 ddi_fm_error_t *err, 181 const void *impl_data); 182 #endif /* FMA_SUPPORT */ 183 184 /* Module emlxs_pkt.c External Routine Declarations */ 185 extern int32_t emlxs_pkt_send(fc_packet_t *pkt, uint32_t now); 186 extern void emlxs_pkt_free(fc_packet_t *pkt); 187 extern void emlxs_pkt_callback(fc_packet_t *pkt); 188 extern fc_packet_t *emlxs_pkt_alloc(emlxs_port_t *port, 189 uint32_t cmdlen, uint32_t rsplen, 190 uint32_t datalen, int32_t sleep); 191 192 /* Module emlxs_clock.c External Routine Declarations */ 193 extern void emlxs_timer_checks(emlxs_hba_t *hba); 194 extern void emlxs_timer_start(emlxs_hba_t *hba); 195 extern void emlxs_timer_stop(emlxs_hba_t *hba); 196 extern void emlxs_link_timeout(emlxs_hba_t *hba); 197 extern clock_t emlxs_timeout(emlxs_hba_t *hba, 198 uint32_t timeout); 199 200 /* Module emlxs_dhchap.c External Routine Declarations */ 201 #ifdef DHCHAP_SUPPORT 202 extern int emlxs_dhchap_state_machine(emlxs_port_t *port, 203 RING *ring, IOCBQ *iocbq, MATCHMAP *mp, 204 NODELIST *node, int event); 205 206 extern void emlxs_dhc_attach(emlxs_hba_t *hba); 207 extern void emlxs_dhc_detach(emlxs_hba_t *hba); 208 extern void emlxs_dhc_authrsp_timeout(emlxs_port_t *port, 209 void *node, void *null); 210 extern void emlxs_dhc_reauth_timeout(emlxs_port_t *port, 211 void *newtimeout, void *node); 212 extern void emlxs_dhc_auth_stop(emlxs_port_t *port, 213 emlxs_node_t *node); 214 extern int emlxs_dhc_auth_start(emlxs_port_t *port, 215 emlxs_node_t *node, uint8_t *sbp, 216 uint8_t *ubp); 217 extern void emlxs_dhc_init_sp(emlxs_port_t *port, 218 uint32_t did, SERV_PARM *sp, 219 char **msg); 220 extern uint32_t emlxs_dhc_verify_login(emlxs_port_t *port, 221 uint32_t sid, SERV_PARM *sp); 222 extern void emlxs_dhc_status(emlxs_port_t *port, 223 emlxs_node_t *ndlp, uint32_t reason, 224 uint32_t explaination); 225 extern void emlxs_dhc_state(emlxs_port_t *port, 226 emlxs_node_t *ndlp, uint32_t state, 227 uint32_t reason, 228 uint32_t explaination); 229 extern uint32_t emlxs_dhc_init_auth(emlxs_hba_t *hba, 230 uint8_t *lwwpn, uint8_t *rwwpn); 231 extern uint32_t emlxs_dhc_get_auth_cfg(emlxs_hba_t *hba, 232 dfc_fcsp_config_t *fcsp_cfg); 233 extern uint32_t emlxs_dhc_get_auth_key(emlxs_hba_t *hba, 234 dfc_auth_password_t *dfc_auth_pwd); 235 extern uint32_t emlxs_dhc_add_auth_cfg(emlxs_hba_t *hba, 236 dfc_fcsp_config_t *fcsp_cfg, 237 dfc_password_t *dfc_pwd); 238 extern uint32_t emlxs_dhc_delete_auth_cfg(emlxs_hba_t *hba, 239 dfc_fcsp_config_t *fcsp_cfg, 240 dfc_password_t *dfc_pwd); 241 extern uint32_t emlxs_dhc_set_auth_key(emlxs_hba_t *hba, 242 dfc_auth_password_t *dfc_pwd); 243 extern uint32_t emlxs_dhc_get_auth_status(emlxs_hba_t *hba, 244 dfc_auth_status_t *fcsp_status); 245 extern uint32_t emlxs_dhc_get_auth_cfg_table(emlxs_hba_t *hba, 246 dfc_fcsp_config_t *fcsp_cfg); 247 extern uint32_t emlxs_dhc_get_auth_key_table(emlxs_hba_t *hba, 248 dfc_auth_password_t *auth_pwd); 249 #endif /* DHCHAP_SUPPORT */ 250 251 /* Module emlxs_node.c External Routine Declarations */ 252 extern void emlxs_node_timeout(emlxs_port_t *port, 253 NODELIST *ndlp, uint32_t ringno); 254 extern void emlxs_node_open(emlxs_port_t *port, 255 NODELIST *ndlp, uint32_t ringno); 256 extern void emlxs_node_close(emlxs_port_t *port, 257 NODELIST *ndlp, uint32_t ringno, 258 int32_t timeout); 259 extern NODELIST *emlxs_node_find_did(emlxs_port_t *port, 260 uint32_t did); 261 extern NODELIST *emlxs_node_find_rpi(emlxs_port_t *port, 262 uint32_t rpi); 263 extern void emlxs_node_destroy_all(emlxs_port_t *port); 264 extern NODELIST *emlxs_node_find_mac(emlxs_port_t *port, 265 uint8_t *mac); 266 extern void emlxs_node_add(emlxs_port_t *port, 267 NODELIST *ndlp); 268 extern void emlxs_node_rm(emlxs_port_t *port, 269 NODELIST *ndlp); 270 extern NODELIST *emlxs_node_find_wwpn(emlxs_port_t *port, 271 uint8_t *wwpn); 272 extern NODELIST *emlxs_node_find_index(emlxs_port_t *port, 273 uint32_t index, uint32_t nports_only); 274 extern uint32_t emlxs_nport_count(emlxs_port_t *port); 275 276 /* Module emlxs_els.c External Routine Declarations */ 277 extern int32_t emlxs_els_handle_event(emlxs_hba_t *hba, 278 RING *rp, IOCBQ *temp); 279 extern int32_t emlxs_els_handle_unsol_req(emlxs_port_t *port, 280 RING *rp, IOCBQ *iocbq, MATCHMAP *mp, 281 uint32_t size); 282 extern uint32_t emlxs_generate_rscn(emlxs_port_t *port, 283 uint32_t d_id); 284 extern int32_t emlxs_ct_handle_event(emlxs_hba_t *hba, 285 RING *rp, IOCBQ *temp); 286 extern int32_t emlxs_ct_handle_unsol_req(emlxs_port_t *port, 287 RING *rp, IOCBQ *iocbq, MATCHMAP *mp, 288 uint32_t size); 289 extern int32_t emlxs_els_reply(emlxs_port_t *port, 290 IOCBQ *iocbq, uint32_t type, 291 uint32_t type2, uint32_t reason, 292 uint32_t explain); 293 extern void emlxs_send_logo(emlxs_port_t *port, 294 uint32_t d_id); 295 extern void emlxs_reset_link_thread(void *arg); 296 extern uint32_t emlxs_process_unsol_flogi(emlxs_port_t *port, 297 IOCBQ *iocbq, MATCHMAP *mp, 298 uint32_t size, char *buffer); 299 extern uint32_t emlxs_process_unsol_plogi(emlxs_port_t *port, 300 IOCBQ *iocbq, MATCHMAP *mp, 301 uint32_t size, char *buffer); 302 extern uint32_t emlxs_ub_send_login_acc(emlxs_port_t *port, 303 fc_unsol_buf_t *ubp); 304 305 #ifdef MENLO_SUPPORT 306 extern int emlxs_menlo_handle_event(emlxs_hba_t *hba, 307 RING *rp, IOCBQ *iocbq); 308 #endif /* MENLO_SUPPORT */ 309 310 /* Module emlxs_ip.c External Routine Declarations */ 311 extern int32_t emlxs_ip_handle_event(emlxs_hba_t *hba, 312 RING *rp, IOCBQ *temp); 313 extern int emlxs_ip_handle_rcv_seq_list(emlxs_hba_t *hba, 314 RING *rp, IOCBQ *saveq); 315 extern int emlxs_ip_handle_unsol_req(emlxs_port_t *port, 316 RING *rp, IOCBQ *iocbq, MATCHMAP *mp, 317 uint32_t size); 318 extern int emlxs_create_xri(emlxs_port_t *port, RING *rp, 319 NODELIST *ndlp); 320 extern int emlxs_handle_create_xri(emlxs_hba_t *hba, 321 RING *rp, IOCBQ *temp); 322 extern int emlxs_handle_xri_aborted(emlxs_hba_t *hba, 323 RING *rp, IOCBQ *temp); 324 325 /* Module emlxs_mbox.c External Routine Declarations */ 326 extern void emlxs_mb_config_msi(emlxs_hba_t *hba, 327 MAILBOX *mb, uint32_t *intr_map, 328 uint32_t intr_count); 329 extern void emlxs_mb_config_msix(emlxs_hba_t *hba, 330 MAILBOX *mb, uint32_t *intr_map, 331 uint32_t intr_count); 332 extern void emlxs_mb_read_lnk_stat(emlxs_hba_t *hba, 333 MAILBOX *mb); 334 extern void emlxs_mb_config_link(emlxs_hba_t *hba, 335 MAILBOX *mb); 336 extern void emlxs_mb_config_ring(emlxs_hba_t *hba, 337 int32_t ring, MAILBOX *mb); 338 extern void emlxs_mb_init_link(emlxs_hba_t *hba, 339 MAILBOX *mb, uint32_t topology, 340 uint32_t linkspeed); 341 extern void emlxs_mb_down_link(emlxs_hba_t *hba, 342 MAILBOX *mb); 343 extern uint32_t emlxs_mb_read_la(emlxs_hba_t *hba, 344 MAILBOX *mb); 345 extern void emlxs_mb_read_nv(emlxs_hba_t *hba, 346 MAILBOX *mb); 347 extern void emlxs_mb_read_rev(emlxs_hba_t *hba, 348 MAILBOX *mb, uint32_t v3); 349 extern uint32_t emlxs_mb_read_rpi(emlxs_hba_t *hba, 350 uint32_t rpi, MAILBOX *mb, 351 uint32_t flg); 352 extern uint32_t emlxs_mb_read_xri(emlxs_hba_t *hba, 353 uint32_t xri, MAILBOX *mb, 354 uint32_t flg); 355 extern uint32_t emlxs_mb_read_sparam(emlxs_hba_t *hba, 356 MAILBOX *mb); 357 extern uint32_t emlxs_mb_reg_did(emlxs_port_t *port, 358 uint32_t did, SERV_PARM *param, 359 emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, 360 IOCBQ *iocbq); 361 extern void emlxs_disable_tc(emlxs_hba_t *hba, 362 MAILBOX *mb); 363 extern uint32_t emlxs_mb_run_biu_diag(emlxs_hba_t *hba, 364 MAILBOX *mb, uint64_t in, uint64_t out); 365 extern uint32_t emlxs_mb_unreg_rpi(emlxs_port_t *port, 366 uint32_t rpi, emlxs_buf_t *sbp, 367 fc_unsol_buf_t *ubp, IOCBQ *iocbq); 368 extern uint32_t emlxs_mb_unreg_did(emlxs_port_t *port, 369 uint32_t did, emlxs_buf_t *sbp, 370 fc_unsol_buf_t *ubp, IOCBQ *iocbq); 371 extern void emlxs_mb_dump_vpd(emlxs_hba_t *hba, 372 MAILBOX *mb, uint32_t offset); 373 extern void emlxs_mb_config_farp(emlxs_hba_t *hba, 374 MAILBOX *mb); 375 extern void emlxs_mb_read_config(emlxs_hba_t *hba, 376 MAILBOX *mb); 377 extern void emlxs_mb_put(emlxs_hba_t *hba, 378 MAILBOXQ *mbq); 379 extern MAILBOXQ *emlxs_mb_get(emlxs_hba_t *hba); 380 extern void emlxs_mb_clear_la(emlxs_hba_t *hba, 381 MAILBOX *mb); 382 extern void emlxs_mb_set_var(emlxs_hba_t *hba, 383 MAILBOX *mb, uint32_t addr, 384 uint32_t value); 385 extern void emlxs_mb_reset_ring(emlxs_hba_t *hba, 386 MAILBOX *mb, uint32_t ringno); 387 extern char *emlxs_mb_cmd_xlate(uint8_t command); 388 extern void emlxs_mb_read_status(emlxs_hba_t *hba, 389 MAILBOX *mb); 390 extern uint32_t emlxs_mb_reg_vpi(emlxs_port_t *port); 391 extern uint32_t emlxs_mb_unreg_vpi(emlxs_port_t *port); 392 extern void emlxs_mb_fini(emlxs_hba_t *hba, 393 MAILBOX *mb, uint32_t mbxStatus); 394 extern void emlxs_mb_heartbeat(emlxs_hba_t *hba, 395 MAILBOX *mb); 396 extern void emlxs_mb_async_event(emlxs_hba_t *hba, 397 MAILBOX *mb); 398 extern int32_t emlxs_mb_check_sparm(emlxs_hba_t *hba, 399 SERV_PARM *nsp); 400 extern void emlxs_mb_dump(emlxs_hba_t *hba, MAILBOX *mb, 401 uint32_t offset, uint32_t words); 402 extern void emlxs_mb_retry(emlxs_hba_t *hba, MAILBOX *mb); 403 extern void emlxs_mb_init(emlxs_hba_t *hba, MAILBOXQ *mbq, 404 uint32_t flag, uint32_t tmo); 405 406 #ifdef SLI3_SUPPORT 407 extern void emlxs_mb_config_hbq(emlxs_hba_t *hba, 408 MAILBOX *mb, int hbq_id); 409 #endif /* SLI3_SUPPORT */ 410 411 /* Module emlxs_mem.c External Routine Declarations */ 412 extern MATCHMAP *emlxs_mem_get_vaddr(emlxs_hba_t *hba, 413 RING *rp, uint64_t mapbp); 414 extern uint8_t *emlxs_mem_get(emlxs_hba_t *hba, 415 uint32_t seg); 416 extern uint8_t *emlxs_mem_put(emlxs_hba_t *hba, 417 uint32_t seg, uint8_t *bp); 418 extern int32_t emlxs_mem_free_buffer(emlxs_hba_t *hba); 419 extern int32_t emlxs_mem_alloc_buffer(emlxs_hba_t *hba); 420 extern void emlxs_mem_map_vaddr(emlxs_hba_t *hba, 421 RING *rp, MATCHMAP *mp, uint32_t *haddr, 422 uint32_t *laddr); 423 extern uint8_t *emlxs_mem_buf_alloc(emlxs_hba_t *hba); 424 extern uint8_t *emlxs_mem_buf_free(emlxs_hba_t *hba, 425 uint8_t *bp); 426 #ifdef SLI3_SUPPORT 427 extern uint32_t emlxs_hbq_alloc(emlxs_hba_t *hba, 428 uint32_t hbq_id); 429 #endif /* SLI3_SUPPORT */ 430 431 /* Module emlxs_hba.c External Routine Declarations */ 432 extern int emlxs_ffinit(emlxs_hba_t *hba); 433 extern void emlxs_decode_firmware_rev(emlxs_hba_t *hba, 434 emlxs_vpd_t *vp); 435 extern uint32_t emlxs_init_adapter_info(emlxs_hba_t *hba); 436 extern uint32_t emlxs_strtol(char *str, uint32_t base); 437 extern uint64_t emlxs_strtoll(char *str, uint32_t base); 438 extern void emlxs_decode_version(uint32_t version, 439 char *buffer); 440 extern char *emlxs_ffstate_xlate(uint32_t new_state); 441 extern char *emlxs_ring_xlate(uint32_t ringno); 442 extern void emlxs_proc_ring(emlxs_hba_t *hba, 443 RING *rp, void *arg2); 444 extern void emlxs_pcix_mxr_update(emlxs_hba_t *hba, 445 uint32_t verbose); 446 extern void emlxs_restart_thread(void *arg); 447 extern void emlxs_fw_show(emlxs_hba_t *hba); 448 extern void emlxs_proc_ring_event(emlxs_hba_t *hba, 449 RING *rp, IOCBQ *iocbq); 450 451 452 #ifdef MSI_SUPPORT 453 extern int32_t emlxs_msi_add(emlxs_hba_t *hba); 454 extern int32_t emlxs_msi_remove(emlxs_hba_t *hba); 455 extern int32_t emlxs_msi_init(emlxs_hba_t *hba, uint32_t max); 456 extern int32_t emlxs_msi_uninit(emlxs_hba_t *hba); 457 #endif /* MSI_SUPPORT */ 458 459 extern int32_t emlxs_intx_add(emlxs_hba_t *hba); 460 extern int32_t emlxs_intx_remove(emlxs_hba_t *hba); 461 extern int32_t emlxs_intx_init(emlxs_hba_t *hba, uint32_t max); 462 extern int32_t emlxs_intx_uninit(emlxs_hba_t *hba); 463 464 /* Module emlxs_sli.c External Routine Declarations */ 465 extern int emlxs_sli3_map_hdw(emlxs_hba_t *hba); 466 extern int emlxs_sli4_map_hdw(emlxs_hba_t *hba); 467 468 extern void emlxs_sli3_unmap_hdw(emlxs_hba_t *hba); 469 extern void emlxs_sli4_unmap_hdw(emlxs_hba_t *hba); 470 471 extern int32_t emlxs_sli3_online(emlxs_hba_t *hba); 472 extern int32_t emlxs_sli4_online(emlxs_hba_t *hba); 473 474 extern void emlxs_sli3_offline(emlxs_hba_t *hba); 475 extern void emlxs_sli4_offline(emlxs_hba_t *hba); 476 477 extern uint32_t emlxs_sli3_hba_reset(emlxs_hba_t *hba, 478 uint32_t restart, uint32_t skip_post); 479 extern uint32_t emlxs_sli4_hba_reset(emlxs_hba_t *hba, 480 uint32_t restart, uint32_t skip_post); 481 482 extern uint32_t emlxs_sli2_bde_setup(emlxs_port_t *port, 483 emlxs_buf_t *sbp); 484 #ifdef SLI3_SUPPORT 485 extern uint32_t emlxs_sli3_bde_setup(emlxs_port_t *port, 486 emlxs_buf_t *sbp); 487 #endif 488 extern uint32_t emlxs_sli4_bde_setup(emlxs_port_t *port, 489 emlxs_buf_t *sbp); 490 491 extern uint32_t emlxs_sli2_fct_bde_setup(emlxs_port_t *port, 492 emlxs_buf_t *sbp); 493 extern uint32_t emlxs_sli3_fct_bde_setup(emlxs_port_t *port, 494 emlxs_buf_t *sbp); 495 extern uint32_t emlxs_sli4_fct_bde_setup(emlxs_port_t *port, 496 emlxs_buf_t *sbp); 497 498 extern void emlxs_sli3_issue_iocb_cmd(emlxs_hba_t *hba, 499 RING *rp, IOCBQ *iocb_cmd); 500 extern void emlxs_sli4_issue_iocb_cmd(emlxs_hba_t *hba, 501 RING *rp, IOCBQ *iocb_cmd); 502 503 extern uint32_t emlxs_sli3_issue_mbox_cmd(emlxs_hba_t *hba, 504 MAILBOX *mb, int32_t flg, uint32_t tmo); 505 extern uint32_t emlxs_sli4_issue_mbox_cmd(emlxs_hba_t *hba, 506 MAILBOX *mb, int32_t flg, uint32_t tmo); 507 508 #ifdef SFCT_SUPPORT 509 extern uint32_t emlxs_sli3_prep_fct_iocb(emlxs_port_t *port, 510 emlxs_buf_t *cmd_sbp); 511 extern uint32_t emlxs_sli4_prep_fct_iocb(emlxs_port_t *port, 512 emlxs_buf_t *cmd_sbp); 513 #endif /* SFCT_SUPPORT */ 514 515 extern uint32_t emlxs_sli3_prep_fcp_iocb(emlxs_port_t *port, 516 emlxs_buf_t *sbp); 517 extern uint32_t emlxs_sli4_prep_fcp_iocb(emlxs_port_t *port, 518 emlxs_buf_t *sbp); 519 520 extern uint32_t emlxs_sli3_prep_ip_iocb(emlxs_port_t *port, 521 emlxs_buf_t *sbp); 522 extern uint32_t emlxs_sli4_prep_ip_iocb(emlxs_port_t *port, 523 emlxs_buf_t *sbp); 524 525 extern uint32_t emlxs_sli3_prep_els_iocb(emlxs_port_t *port, 526 emlxs_buf_t *sbp); 527 extern uint32_t emlxs_sli4_prep_els_iocb(emlxs_port_t *port, 528 emlxs_buf_t *sbp); 529 530 extern uint32_t emlxs_sli3_prep_ct_iocb(emlxs_port_t *port, 531 emlxs_buf_t *sbp); 532 extern uint32_t emlxs_sli4_prep_ct_iocb(emlxs_port_t *port, 533 emlxs_buf_t *sbp); 534 535 extern void emlxs_sli3_poll_intr(emlxs_hba_t *hba, 536 uint32_t att_bit); 537 extern void emlxs_sli4_poll_intr(emlxs_hba_t *hba, 538 uint32_t att_bit); 539 extern int32_t emlxs_sli3_intx_intr(char *arg); 540 extern int32_t emlxs_sli4_intx_intr(char *arg); 541 #ifdef MSI_SUPPORT 542 extern uint32_t emlxs_sli3_msi_intr(char *arg1, char *arg2); 543 extern uint32_t emlxs_sli4_msi_intr(char *arg1, char *arg2); 544 #endif /* MSI_SUPPORT */ 545 546 547 extern uint32_t emlxs_interlock(emlxs_hba_t *hba); 548 extern uint32_t emlxs_reset_ring(emlxs_hba_t *hba, 549 uint32_t ringno); 550 extern void emlxs_handle_ff_error(emlxs_hba_t *hba); 551 extern uint32_t emlxs_handle_mb_event(emlxs_hba_t *hba); 552 extern uint32_t emlxs_mb_issue_cmd(emlxs_hba_t *hba, 553 MAILBOX *mb, int32_t flag, 554 uint32_t timeout); 555 extern void emlxs_timer_check_mbox(emlxs_hba_t *hba); 556 extern uint32_t emlxs_mb_config_port(emlxs_hba_t *hba, 557 MAILBOX *mb, uint32_t sli_mode, 558 uint32_t hbainit); 559 extern void emlxs_enable_latt(emlxs_hba_t *hba); 560 extern void emlxs_disable_intr(emlxs_hba_t *hba, 561 uint32_t att); 562 extern uint32_t emlxs_check_attention(emlxs_hba_t *hba); 563 extern uint32_t emlxs_get_attention(emlxs_hba_t *hba, 564 uint32_t msgid); 565 extern void emlxs_proc_attention(emlxs_hba_t *hba, 566 uint32_t ha_copy); 567 extern int emlxs_handle_rcv_seq(emlxs_hba_t *hba, 568 RING *rp, IOCBQ *iocbq); 569 extern void emlxs_intr_initialize(emlxs_hba_t *hba); 570 extern void emlxs_update_HBQ_index(emlxs_hba_t *hba, 571 uint32_t hbq_id); 572 extern void emlxs_hbq_free_all(emlxs_hba_t *hba, 573 uint32_t hbq_id); 574 extern uint32_t emlxs_hbq_setup(emlxs_hba_t *hba, 575 uint32_t hbq_id); 576 577 /* Module emlxs_diag.c External Routine Declarations */ 578 extern uint32_t emlxs_diag_post_run(emlxs_hba_t *hba); 579 extern uint32_t emlxs_diag_biu_run(emlxs_hba_t *hba, 580 uint32_t pattern); 581 extern uint32_t emlxs_diag_pattern[256]; 582 extern uint32_t emlxs_diag_echo_run(emlxs_port_t *port, 583 uint32_t did, uint32_t pattern); 584 extern uint32_t emlxs_core_size(emlxs_hba_t *hba); 585 extern uint32_t emlxs_core_dump(emlxs_hba_t *hba, 586 char *buffer, uint32_t size); 587 588 /* Module emlxs_download.c External Routine Declarations */ 589 extern int32_t emlxs_fw_download(emlxs_hba_t *hba, 590 caddr_t buffer, uint32_t len, 591 uint32_t offline); 592 extern uint32_t emlxs_get_max_sram(emlxs_hba_t *hba, 593 uint32_t *MaxRbusSize, 594 uint32_t *MaxIbusSize); 595 extern uint32_t emlxs_get_load_list(emlxs_hba_t *hba, 596 PROG_ID *load_list); 597 extern uint32_t emlxs_read_wakeup_parms(emlxs_hba_t *hba, 598 PWAKE_UP_PARMS WakeUpParms, 599 uint32_t verbose); 600 extern int32_t emlxs_cfl_download(emlxs_hba_t *hba, 601 uint32_t region, caddr_t buffer, 602 uint32_t len); 603 604 extern int32_t emlxs_boot_code_disable(emlxs_hba_t *hba); 605 extern int32_t emlxs_boot_code_enable(emlxs_hba_t *hba); 606 extern int32_t emlxs_boot_code_state(emlxs_hba_t *hba); 607 608 /* Module emlxs_fcp.c External Routine Declarations */ 609 extern int emlxs_power_up(emlxs_hba_t *hba); 610 extern int emlxs_power_down(emlxs_hba_t *hba); 611 extern int emlxs_reset_link(emlxs_hba_t *hba, 612 uint32_t linkup); 613 extern emlxs_buf_t *emlxs_unregister_pkt(RING *rp, 614 uint16_t iotag, uint32_t forced); 615 extern uint16_t emlxs_register_pkt(RING *rp, 616 emlxs_buf_t *sbp); 617 618 extern IOCBQ *emlxs_create_abort_xri_cn(emlxs_port_t *port, 619 NODELIST *ndlp, uint16_t iotag, 620 RING *rp, uint8_t class, int32_t flag); 621 extern IOCBQ *emlxs_create_close_xri_cn(emlxs_port_t *port, 622 NODELIST *ndlp, uint16_t iotag, 623 RING *rp); 624 extern IOCBQ *emlxs_create_abort_xri_cx(emlxs_port_t *port, 625 NODELIST *ndlp, uint16_t xid, RING *rp, 626 uint8_t class, int32_t flag); 627 extern IOCBQ *emlxs_create_close_xri_cx(emlxs_port_t *port, 628 NODELIST *ndlp, uint16_t xid, RING *rp); 629 extern void emlxs_abort_ct_exchange(emlxs_port_t *port, 630 uint32_t rxid); 631 632 extern emlxs_buf_t *emlxs_chipq_get(RING *rp, uint16_t iotag); 633 extern void emlxs_chipq_put(RING *rp, emlxs_buf_t *sbp); 634 extern uint32_t emlxs_chipq_node_flush(emlxs_port_t *port, 635 RING *rp, NODELIST *ndlp, 636 emlxs_buf_t *fpkt); 637 extern uint32_t emlxs_chipq_lun_flush(emlxs_port_t *port, 638 NODELIST *ndlp, uint32_t lun, 639 emlxs_buf_t *fpkt); 640 extern uint32_t emlxs_chipq_node_check(emlxs_port_t *port, 641 RING *ring, NODELIST *ndlp); 642 643 extern IOCBQ *emlxs_tx_get(RING *rp, uint32_t lock); 644 extern void emlxs_tx_put(IOCBQ *iocbq, uint32_t lock); 645 extern uint32_t emlxs_tx_node_check(emlxs_port_t *port, 646 NODELIST *ndlp, RING *ring); 647 extern uint32_t emlxs_tx_node_flush(emlxs_port_t *port, 648 NODELIST *ndlp, RING *ring, 649 uint32_t shutdown, emlxs_buf_t *fpkt); 650 extern uint32_t emlxs_tx_lun_flush(emlxs_port_t *port, 651 NODELIST *ndlp, uint32_t lun, 652 emlxs_buf_t *fpkt); 653 extern uint32_t emlxs_tx_ring_flush(emlxs_hba_t *hba, 654 RING *rp, emlxs_buf_t *fpkt); 655 656 extern void emlxs_linkdown(emlxs_hba_t *hba); 657 extern void emlxs_linkup(emlxs_hba_t *hba); 658 extern void emlxs_port_online(emlxs_port_t *port); 659 extern int32_t emlxs_port_offline(emlxs_port_t *port, 660 uint32_t scope); 661 extern void emlxs_ffcleanup(emlxs_hba_t *hba); 662 extern int32_t emlxs_offline(emlxs_hba_t *hba); 663 extern int32_t emlxs_online(emlxs_hba_t *hba); 664 extern void emlxs_pcimem_bcopy(uint32_t *src, 665 uint32_t *dest, uint32_t cnt); 666 extern int32_t emlxs_post_buffer(emlxs_hba_t *hba, 667 RING *rp, int16_t cnt); 668 extern void emlxs_swap_bcopy(uint32_t *src, 669 uint32_t *dest, uint32_t cnt); 670 extern void emlxs_ff_start(emlxs_hba_t *hba); 671 extern void emlxs_handle_fcp_event(emlxs_hba_t *hba, 672 RING *rp, IOCBQ *temp); 673 extern int emlxs_fct_handle_abort(emlxs_hba_t *hba, 674 RING *rp, IOCBQ *iocbq); 675 676 /* Module emlxs_thread.c External Routine Declarations */ 677 extern void emlxs_taskq_destroy(emlxs_taskq_t *taskq); 678 extern void emlxs_taskq_create(emlxs_hba_t *hba, 679 emlxs_taskq_t *taskq); 680 extern uint32_t emlxs_taskq_dispatch(emlxs_taskq_t *taskq, 681 void (*func) (), void *arg); 682 extern void emlxs_thread_create(emlxs_hba_t *hba, 683 emlxs_thread_t *ethread); 684 extern void emlxs_thread_destroy(emlxs_thread_t *ethread); 685 extern void emlxs_thread_trigger1(emlxs_thread_t *ethread, 686 void (*func) ()); 687 extern void emlxs_thread_trigger2(emlxs_thread_t *ethread, 688 void (*func) (), RING *rp); 689 690 /* Module emlxs_dfc.c External Routine Declarations */ 691 extern int32_t emlxs_dfc_manage(emlxs_hba_t *hba, void *dfc, 692 int32_t mode); 693 extern int32_t emlxs_dfc_handle_event(emlxs_hba_t *hba, 694 RING *rp, IOCBQ *temp); 695 extern int emlxs_dfc_handle_unsol_req(emlxs_port_t *port, 696 RING *rp, IOCBQ *iocbq, MATCHMAP *mp, 697 uint32_t size); 698 extern void emlxs_fcoe_attention_thread(void *arg); 699 extern uint32_t emlxs_set_hba_mode(emlxs_hba_t *hba, uint32_t mode); 700 extern uint32_t emlxs_get_dump_region(emlxs_hba_t *hba, uint32_t region, 701 uint8_t *buffer, uint32_t *psize); 702 extern int32_t emlxs_send_menlo_cmd(emlxs_hba_t *hba, uint8_t *cmd_buf, 703 uint32_t cmd_size, uint8_t *rsp_buf, 704 uint32_t *rsp_size); 705 706 #ifdef SFCT_SUPPORT 707 /* Module emlxs_fct.c External Routine Declarations */ 708 extern void emlxs_fct_link_down(emlxs_port_t *port); 709 extern void emlxs_fct_link_up(emlxs_port_t *port); 710 extern void emlxs_fct_init(emlxs_hba_t *hba); 711 extern void emlxs_fct_detach(emlxs_hba_t *hba); 712 extern int emlxs_fct_handle_unsol_els(emlxs_port_t *port, 713 RING *rp, IOCBQ *iocbq, MATCHMAP *mp, 714 uint32_t size); 715 extern int emlxs_fct_handle_unsol_req(emlxs_port_t *port, 716 RING *rp, IOCBQ *iocbq, MATCHMAP *mp, 717 uint32_t size); 718 extern int emlxs_fct_handle_fcp_event(emlxs_hba_t *hba, 719 RING *rp, IOCBQ *iocbq); 720 extern void emlxs_fct_bind_port(emlxs_port_t *port); 721 extern void emlxs_fct_unbind_port(emlxs_port_t *port); 722 extern void emlxs_fct_unsol_callback(emlxs_port_t *port, 723 fct_cmd_t *fct_cmd); 724 extern void emlxs_fct_attach(emlxs_hba_t *hba); 725 extern int emlxs_fct_port_shutdown(emlxs_port_t *port); 726 extern int emlxs_fct_port_initialize(emlxs_port_t *port); 727 728 #ifdef MODSYM_SUPPORT 729 extern void emlxs_fct_modclose(); 730 #endif /* MODSYM_SUPPORT */ 731 732 #ifdef FCT_IO_TRACE 733 extern void emlxs_fct_io_trace(emlxs_port_t *, 734 fct_cmd_t *, uint32_t); 735 #endif /* FCT_IO_TRACE */ 736 #endif /* SFCT_SUPPORT */ 737 738 #ifdef SAN_DIAG_SUPPORT 739 extern uint32_t emlxs_get_sd_event(emlxs_port_t *port, 740 emlxs_dfc_event_t *dfc_event, 741 uint32_t sleep); 742 extern void emlxs_log_sd_basic_els_event(emlxs_port_t *port, 743 uint32_t subcat, HBA_WWN *portname, 744 HBA_WWN *nodename); 745 extern void emlxs_log_sd_prlo_event(emlxs_port_t *port, 746 HBA_WWN *portname); 747 extern void emlxs_log_sd_lsrjt_event(emlxs_port_t *port, 748 HBA_WWN *remoteport, uint32_t orig_cmd, 749 uint32_t reason, uint32_t reason_expl); 750 extern void emlxs_log_sd_fc_bsy_event(emlxs_port_t *port, 751 HBA_WWN *remoteport); 752 extern void emlxs_log_sd_fc_rdchk_event(emlxs_port_t *port, 753 HBA_WWN *remoteport, uint32_t lun, 754 uint32_t opcode, uint32_t fcp_param); 755 extern void emlxs_log_sd_scsi_event(emlxs_port_t *port, 756 uint32_t type, HBA_WWN *remoteport, 757 int32_t lun); 758 extern void emlxs_log_sd_scsi_check_event( 759 emlxs_port_t *port, 760 HBA_WWN *remoteport, uint32_t lun, 761 uint32_t cmdcode, uint32_t sensekey, 762 uint32_t asc, uint32_t ascq); 763 #endif /* SAN_DIAG_SUPPORT */ 764 765 766 #ifdef DUMP_SUPPORT 767 /* Module emlxs_dump.c External Routine Declarations */ 768 extern uint32_t emlxs_dump_drv_event(emlxs_hba_t *hba); 769 extern uint32_t emlxs_dump_user_event(emlxs_hba_t *hba); 770 extern uint32_t emlxs_dump_temp_event(emlxs_hba_t *hba, 771 uint32_t tempType, uint32_t temp); 772 extern void emlxs_dump_drv_thread(void *arg); 773 extern void emlxs_dump_user_thread(void *arg); 774 extern void emlxs_dump_temp_thread(void *arg); 775 extern uint32_t emlxs_ftell(emlxs_file_t *fp); 776 extern uint32_t emlxs_get_dump(emlxs_hba_t *hba, uint8_t *buffer, 777 uint32_t *buflen); 778 extern void emlxs_dump_wait(emlxs_hba_t *hba); 779 extern void emlxs_dump(emlxs_hba_t *hba, uint32_t type, 780 uint32_t temp_type, uint32_t temp); 781 782 #endif /* DUMP_SUPPORT */ 783 784 #ifdef __cplusplus 785 } 786 #endif 787 788 #endif /* _EMLXS_EXTERN_H */ 789