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 9 * http://www.opensource.org/licenses/cddl1.txt. 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 (c) 2004-2011 Emulex. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _EMLXS_EXTERN_H 28 #define _EMLXS_EXTERN_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 extern void *emlxs_soft_state; 35 extern uint32_t emlxs_instance[MAX_FC_BRDS]; 36 extern uint32_t emlxs_instance_count; 37 extern char emlxs_revision[32]; 38 extern char emlxs_version[32]; 39 extern char emlxs_name[64]; 40 extern char emlxs_label[64]; 41 42 extern emlxs_device_t emlxs_device; 43 extern uint32_t emlxs_instance[MAX_FC_BRDS]; 44 extern uint32_t emlxs_instance_count; 45 46 extern ddi_device_acc_attr_t emlxs_data_acc_attr; 47 extern ddi_device_acc_attr_t emlxs_dev_acc_attr; 48 extern ddi_dma_lim_t emlxs_dma_lim; 49 extern emlxs_config_t emlxs_cfg[]; 50 extern ddi_dma_attr_t emlxs_dma_attr; 51 extern ddi_dma_attr_t emlxs_dma_attr_ro; 52 extern ddi_dma_attr_t emlxs_dma_attr_fcip_rsp; 53 extern ddi_dma_attr_t emlxs_dma_attr_1sg; 54 55 /* Module emlxs_msg.c External Routine Declarations */ 56 extern void emlxs_msg_printf(emlxs_port_t *port, 57 const uint32_t fileno, 58 const uint32_t line, 59 emlxs_msg_t *msg, 60 const char *fmt, ...); 61 extern uint32_t emlxs_msg_log_create(emlxs_hba_t *hba); 62 extern void emlxs_msg_lock_reinit(emlxs_hba_t *hba); 63 extern void emlxs_msg_log_destroy(emlxs_hba_t *hba); 64 extern uint32_t emlxs_msg_log_get(emlxs_hba_t *hba, 65 emlxs_log_req_t *req, 66 emlxs_log_resp_t *resp); 67 68 /* Module emlxs_event.c External Routine Declarations */ 69 extern uint32_t emlxs_flush_ct_event(emlxs_port_t *port, 70 uint32_t rxid); 71 extern void emlxs_timer_check_events(emlxs_hba_t *hba); 72 73 extern uint32_t emlxs_event_queue_create(emlxs_hba_t *hba); 74 75 extern void emlxs_event_queue_destroy(emlxs_hba_t *hba); 76 77 extern void emlxs_event(emlxs_port_t *port, 78 emlxs_event_t *evt, void *bp, 79 uint32_t size); 80 extern void emlxs_log_dump_event(emlxs_port_t *port, 81 uint8_t *buffer, uint32_t size); 82 extern void emlxs_log_link_event(emlxs_port_t *port); 83 84 extern uint32_t emlxs_log_ct_event(emlxs_port_t *port, 85 uint8_t *payload, uint32_t size, 86 uint32_t rxid); 87 extern void emlxs_log_rscn_event(emlxs_port_t *port, 88 uint8_t *payload, uint32_t size); 89 extern void emlxs_log_vportrscn_event(emlxs_port_t *port, 90 uint8_t *payload, uint32_t size); 91 extern void emlxs_get_dfc_event(emlxs_port_t *port, 92 emlxs_dfc_event_t *dfc_event, 93 uint32_t sleep); 94 extern uint32_t emlxs_kill_dfc_event(emlxs_port_t *port, 95 emlxs_dfc_event_t *dfc_event); 96 extern uint32_t emlxs_get_dfc_eventinfo(emlxs_port_t *port, 97 HBA_EVENTINFO *eventinfo, 98 uint32_t *eventcount, 99 uint32_t *missed); 100 extern void emlxs_log_temp_event(emlxs_port_t *port, 101 uint32_t type, uint32_t temp); 102 extern void emlxs_log_fcoe_event(emlxs_port_t *port, 103 menlo_init_rsp_t *init_rsp); 104 extern void emlxs_log_async_event(emlxs_port_t *port, 105 IOCB *iocb); 106 107 #ifdef SAN_DIAG_SUPPORT 108 extern void emlxs_get_sd_event(emlxs_port_t *port, 109 emlxs_dfc_event_t *dfc_event, 110 uint32_t sleep); 111 extern void emlxs_log_sd_basic_els_event(emlxs_port_t *port, 112 uint32_t subcat, HBA_WWN *portname, 113 HBA_WWN *nodename); 114 extern void emlxs_log_sd_prlo_event(emlxs_port_t *port, 115 HBA_WWN *portname); 116 extern void emlxs_log_sd_lsrjt_event(emlxs_port_t *port, 117 HBA_WWN *remoteport, uint32_t orig_cmd, 118 uint32_t reason, uint32_t reason_expl); 119 extern void emlxs_log_sd_fc_bsy_event(emlxs_port_t *port, 120 HBA_WWN *remoteport); 121 extern void emlxs_log_sd_fc_rdchk_event(emlxs_port_t *port, 122 HBA_WWN *remoteport, uint32_t lun, 123 uint32_t opcode, uint32_t fcp_param); 124 extern void emlxs_log_sd_scsi_event(emlxs_port_t *port, 125 uint32_t type, HBA_WWN *remoteport, 126 int32_t lun); 127 extern void emlxs_log_sd_scsi_check_event( 128 emlxs_port_t *port, 129 HBA_WWN *remoteport, uint32_t lun, 130 uint32_t cmdcode, uint32_t sensekey, 131 uint32_t asc, uint32_t ascq); 132 #endif /* SAN_DIAG_SUPPORT */ 133 134 /* Module emlxs_solaris.c External Routine Declarations */ 135 136 extern void emlxs_fca_link_up(emlxs_port_t *port); 137 138 extern void emlxs_fca_link_down(emlxs_port_t *port); 139 140 extern void emlxs_ulp_unsol_cb(emlxs_port_t *port, 141 fc_unsol_buf_t *ubp); 142 extern void emlxs_ulp_statec_cb(emlxs_port_t *port, 143 uint32_t statec); 144 extern int32_t emlxs_fca_reset(opaque_t fca_port_handle, 145 uint32_t cmd); 146 extern int32_t emlxs_fca_pkt_abort(opaque_t fca_port_handle, 147 fc_packet_t *pkt, int32_t sleep); 148 extern char *emlxs_state_xlate(uint8_t state); 149 extern char *emlxs_error_xlate(uint8_t errno); 150 extern void emlxs_mem_free(emlxs_hba_t *hba, 151 MBUF_INFO *buf_info); 152 extern uint8_t *emlxs_mem_alloc(emlxs_hba_t *hba, 153 MBUF_INFO *buf_info); 154 extern int emlxs_map_bus(emlxs_hba_t *hba); 155 extern void emlxs_unmap_bus(emlxs_hba_t *hba); 156 extern fc_unsol_buf_t *emlxs_ub_find(emlxs_port_t *port, 157 uint32_t token); 158 extern fc_unsol_buf_t *emlxs_ub_get(emlxs_port_t *port, uint32_t size, 159 uint32_t type, uint32_t resv); 160 extern int32_t emlxs_log_printf(int32_t f, int32_t type, 161 int32_t num, int32_t brdno, 162 const char *fmt, ...); 163 extern void emlxs_set_pkt_state(emlxs_buf_t *sbp, 164 uint32_t iostat, uint8_t localstat, 165 uint32_t lock); 166 extern char *emlxs_elscmd_xlate(uint32_t cmd); 167 extern char *emlxs_ctcmd_xlate(uint32_t cmd); 168 extern char *emlxs_rmcmd_xlate(uint32_t cmd); 169 extern char *emlxs_wwn_xlate(char *buffer, size_t len, 170 uint8_t *wwn); 171 extern int32_t emlxs_wwn_cmp(uint8_t *wwn1, uint8_t *wwn2); 172 extern int32_t emlxs_fca_transport(opaque_t fca_port_handle, 173 fc_packet_t *pkt); 174 extern int32_t emlxs_fca_pkt_uninit(opaque_t fca_port_handle, 175 fc_packet_t *pkt); 176 extern int32_t emlxs_fca_pkt_init(opaque_t fca_port_handle, 177 fc_packet_t *pkt, int32_t sleep); 178 extern void emlxs_pkt_complete(emlxs_buf_t *sbp, 179 uint32_t iostat, uint8_t localstat, 180 uint32_t doneq); 181 182 #ifdef SAN_DIAG_SUPPORT 183 extern void emlxs_update_sd_bucket(emlxs_buf_t *sbp); 184 #endif /* SAN_DIAG_SUPPORT */ 185 186 extern uint32_t emlxs_get_instance(int32_t ddiinst); 187 extern char *emlxs_mscmd_xlate(uint16_t cmd); 188 extern int32_t emlxs_reset(emlxs_port_t *port, uint32_t cmd); 189 extern void emlxs_swap_service_params(SERV_PARM *sp); 190 extern void emlxs_swap_fcp_pkt(emlxs_buf_t *sbp); 191 extern void emlxs_swap_ct_pkt(emlxs_buf_t *sbp); 192 extern void emlxs_swap_els_pkt(emlxs_buf_t *sbp); 193 extern int emlxs_fca_ub_release(opaque_t fca_port_handle, 194 uint32_t count, uint64_t tokens[]); 195 extern void emlxs_swap_els_ub(fc_unsol_buf_t *ubp); 196 extern void emlxs_unswap_pkt(emlxs_buf_t *sbp); 197 extern uint32_t emlxs_get_key(emlxs_hba_t *hba, MAILBOXQ *mbq); 198 extern int emlxs_pm_busy_component(dev_info_t *dip); 199 extern int emlxs_pm_idle_component(dev_info_t *dip); 200 extern void emlxs_pm_idle_timer(dev_info_t *dip); 201 extern void emlxs_shutdown_thread(emlxs_hba_t *hba, 202 void *arg1, void *arg2); 203 extern uint32_t emlxs_set_parm(emlxs_hba_t *hba, uint32_t index, 204 uint32_t new_value); 205 extern void emlxs_ub_destroy(emlxs_port_t *port, 206 emlxs_unsol_buf_t *pool); 207 extern void emlxs_ub_callback(emlxs_port_t *port, 208 fc_unsol_buf_t *ubp); 209 extern void emlxs_ub_flush(emlxs_port_t *port); 210 extern uint32_t emlxs_check_parm(emlxs_hba_t *hba, 211 uint32_t index, uint32_t new_value); 212 extern int32_t emlxs_fca_port_manage(opaque_t fca_port_handle, 213 fc_fca_pm_t *pm); 214 extern void emlxs_port_init(emlxs_port_t *port); 215 extern void emlxs_get_fcode_version(emlxs_hba_t *hba); 216 217 extern void emlxs_swap32_buffer(uint8_t *buffer, 218 uint32_t size); 219 extern void emlxs_swap32_bcopy(uint8_t *src, 220 uint8_t *dst, uint32_t size); 221 222 extern char *emlxs_strtoupper(char *str); 223 224 extern void emlxs_mode_set(emlxs_hba_t *hba); 225 226 extern char *emlxs_mode_xlate(uint32_t mode); 227 228 #ifdef MENLO_SUPPORT 229 extern char *emlxs_menlo_cmd_xlate(uint32_t cmd); 230 extern char *emlxs_menlo_rsp_xlate(uint32_t rsp); 231 #endif /* MENLO_SUPPORT */ 232 233 #ifdef FMA_SUPPORT 234 extern void emlxs_fm_init(emlxs_hba_t *hba); 235 extern void emlxs_fm_fini(emlxs_hba_t *hba); 236 extern int emlxs_fm_check_acc_handle(emlxs_hba_t *hba, 237 ddi_acc_handle_t handle); 238 extern int emlxs_fm_check_dma_handle(emlxs_hba_t *hba, 239 ddi_dma_handle_t handle); 240 extern void emlxs_fm_ereport(emlxs_hba_t *hba, 241 char *detail); 242 extern void emlxs_fm_service_impact(emlxs_hba_t *hba, 243 int impact); 244 extern int emlxs_fm_error_cb(dev_info_t *dip, 245 ddi_fm_error_t *err, 246 const void *impl_data); 247 extern void emlxs_check_dma(emlxs_hba_t *hba, 248 emlxs_buf_t *sbp); 249 #endif /* FMA_SUPPORT */ 250 251 /* Module emlxs_pkt.c External Routine Declarations */ 252 extern int32_t emlxs_pkt_send(fc_packet_t *pkt, uint32_t now); 253 extern void emlxs_pkt_free(fc_packet_t *pkt); 254 extern void emlxs_pkt_callback(fc_packet_t *pkt); 255 extern fc_packet_t *emlxs_pkt_alloc(emlxs_port_t *port, 256 uint32_t cmdlen, uint32_t rsplen, 257 uint32_t datalen, int32_t sleep); 258 259 /* Module emlxs_clock.c External Routine Declarations */ 260 extern void emlxs_timer_checks(emlxs_hba_t *hba); 261 extern void emlxs_timer_start(emlxs_hba_t *hba); 262 extern void emlxs_timer_stop(emlxs_hba_t *hba); 263 extern void emlxs_link_timeout(emlxs_hba_t *hba); 264 extern clock_t emlxs_timeout(emlxs_hba_t *hba, 265 uint32_t timeout); 266 extern void emlxs_timer_cancel_clean_address( 267 emlxs_port_t *port); 268 269 /* Module emlxs_dhchap.c External Routine Declarations */ 270 #ifdef DHCHAP_SUPPORT 271 extern int emlxs_dhchap_state_machine(emlxs_port_t *port, 272 CHANNEL *cp, IOCBQ *iocbq, 273 MATCHMAP *mp, NODELIST *node, int evt); 274 275 extern void emlxs_dhc_attach(emlxs_hba_t *hba); 276 extern void emlxs_dhc_detach(emlxs_hba_t *hba); 277 extern void emlxs_dhc_authrsp_timeout(emlxs_port_t *port, 278 void *node, void *null); 279 extern void emlxs_dhc_reauth_timeout(emlxs_port_t *port, 280 void *newtimeout, void *node); 281 extern void emlxs_dhc_auth_stop(emlxs_port_t *port, 282 emlxs_node_t *node); 283 extern int emlxs_dhc_auth_start(emlxs_port_t *port, 284 emlxs_node_t *node, uint8_t *sbp, 285 uint8_t *ubp); 286 extern void emlxs_dhc_init_sp(emlxs_port_t *port, 287 uint32_t did, SERV_PARM *sp, 288 char **msg); 289 extern uint32_t emlxs_dhc_verify_login(emlxs_port_t *port, 290 uint32_t sid, SERV_PARM *sp); 291 extern void emlxs_dhc_status(emlxs_port_t *port, 292 emlxs_node_t *ndlp, uint32_t reason, 293 uint32_t explaination); 294 extern void emlxs_dhc_state(emlxs_port_t *port, 295 emlxs_node_t *ndlp, uint32_t state, 296 uint32_t reason, 297 uint32_t explaination); 298 extern uint32_t emlxs_dhc_init_auth(emlxs_hba_t *hba, 299 uint8_t *lwwpn, uint8_t *rwwpn); 300 extern uint32_t emlxs_dhc_get_auth_cfg(emlxs_hba_t *hba, 301 dfc_fcsp_config_t *fcsp_cfg); 302 extern uint32_t emlxs_dhc_get_auth_key(emlxs_hba_t *hba, 303 dfc_auth_password_t *dfc_auth_pwd); 304 extern uint32_t emlxs_dhc_add_auth_cfg(emlxs_hba_t *hba, 305 dfc_fcsp_config_t *fcsp_cfg, 306 dfc_password_t *dfc_pwd); 307 extern uint32_t emlxs_dhc_delete_auth_cfg(emlxs_hba_t *hba, 308 dfc_fcsp_config_t *fcsp_cfg, 309 dfc_password_t *dfc_pwd); 310 extern uint32_t emlxs_dhc_set_auth_key(emlxs_hba_t *hba, 311 dfc_auth_password_t *dfc_pwd); 312 extern uint32_t emlxs_dhc_get_auth_status(emlxs_hba_t *hba, 313 dfc_auth_status_t *fcsp_status); 314 extern uint32_t emlxs_dhc_get_auth_cfg_table(emlxs_hba_t *hba, 315 dfc_fcsp_config_t *fcsp_cfg); 316 extern uint32_t emlxs_dhc_get_auth_key_table(emlxs_hba_t *hba, 317 dfc_auth_password_t *auth_pwd); 318 #endif /* DHCHAP_SUPPORT */ 319 320 /* Module emlxs_node.c External Routine Declarations */ 321 extern void emlxs_node_throttle_set(emlxs_port_t *port, 322 NODELIST *node); 323 extern NODELIST * emlxs_node_create(emlxs_port_t *port, 324 uint32_t did, uint32_t rpi, 325 SERV_PARM *sp); 326 extern void emlxs_node_timeout(emlxs_port_t *port, 327 NODELIST *ndlp, uint32_t ringno); 328 extern void emlxs_node_open(emlxs_port_t *port, 329 NODELIST *ndlp, uint32_t ringno); 330 extern void emlxs_node_close(emlxs_port_t *port, 331 NODELIST *ndlp, uint32_t ringno, 332 int32_t timeout); 333 extern NODELIST *emlxs_node_find_did(emlxs_port_t *port, 334 uint32_t did, uint32_t lock); 335 extern NODELIST *emlxs_node_find_rpi(emlxs_port_t *port, 336 uint32_t rpi); 337 extern void emlxs_node_destroy_all(emlxs_port_t *port); 338 extern NODELIST *emlxs_node_find_mac(emlxs_port_t *port, 339 uint8_t *mac); 340 extern void emlxs_node_rm(emlxs_port_t *port, 341 NODELIST *ndlp); 342 extern NODELIST *emlxs_node_find_wwpn(emlxs_port_t *port, 343 uint8_t *wwpn, uint32_t lock); 344 extern NODELIST *emlxs_node_find_index(emlxs_port_t *port, 345 uint32_t index, uint32_t nports_only); 346 extern uint32_t emlxs_nport_count(emlxs_port_t *port); 347 348 /* Module emlxs_els.c External Routine Declarations */ 349 extern int32_t emlxs_els_handle_event(emlxs_hba_t *hba, 350 CHANNEL *cp, IOCBQ *temp); 351 extern int32_t emlxs_els_handle_unsol_req(emlxs_port_t *port, 352 CHANNEL *cp, IOCBQ *iocbq, 353 MATCHMAP *mp, uint32_t size); 354 extern uint32_t emlxs_generate_rscn(emlxs_port_t *port, 355 uint32_t d_id); 356 extern int32_t emlxs_ct_handle_event(emlxs_hba_t *hba, 357 CHANNEL *cp, IOCBQ *temp); 358 extern int32_t emlxs_ct_handle_unsol_req(emlxs_port_t *port, 359 CHANNEL *cp, IOCBQ *iocbq, 360 MATCHMAP *mp, uint32_t size); 361 extern int32_t emlxs_els_reply(emlxs_port_t *port, 362 IOCBQ *iocbq, uint32_t type, 363 uint32_t type2, uint32_t reason, 364 uint32_t explain); 365 extern void emlxs_send_logo(emlxs_port_t *port, 366 uint32_t d_id); 367 extern void emlxs_reset_link_thread(emlxs_hba_t *hba, 368 void *arg1, void *arg2); 369 extern uint32_t emlxs_process_unsol_flogi(emlxs_port_t *port, 370 IOCBQ *iocbq, MATCHMAP *mp, 371 uint32_t size, char *buffer, 372 size_t len); 373 extern uint32_t emlxs_process_unsol_plogi(emlxs_port_t *port, 374 IOCBQ *iocbq, MATCHMAP *mp, 375 uint32_t size, char *buffer, 376 size_t len); 377 extern uint32_t emlxs_ub_send_login_acc(emlxs_port_t *port, 378 fc_unsol_buf_t *ubp); 379 380 #ifdef MENLO_SUPPORT 381 extern int emlxs_menlo_handle_event(emlxs_hba_t *hba, 382 CHANNEL *cp, IOCBQ *iocbq); 383 #endif /* MENLO_SUPPORT */ 384 385 /* Module emlxs_ip.c External Routine Declarations */ 386 extern int32_t emlxs_ip_handle_event(emlxs_hba_t *hba, 387 CHANNEL *cp, IOCBQ *temp); 388 extern int emlxs_ip_handle_rcv_seq_list(emlxs_hba_t *hba, 389 CHANNEL *cp, IOCBQ *saveq); 390 extern int emlxs_ip_handle_unsol_req(emlxs_port_t *port, 391 CHANNEL *cp, IOCBQ *iocbq, MATCHMAP *mp, 392 uint32_t size); 393 extern int emlxs_create_xri(emlxs_port_t *port, 394 CHANNEL *cp, NODELIST *ndlp); 395 extern int emlxs_handle_create_xri(emlxs_hba_t *hba, 396 CHANNEL *cp, IOCBQ *temp); 397 extern int emlxs_handle_xri_aborted(emlxs_hba_t *hba, 398 CHANNEL *cp, IOCBQ *temp); 399 400 /* Module emlxs_mbox.c External Routine Declarations */ 401 extern void emlxs_mb_get_port_name(emlxs_hba_t *hba, 402 MAILBOXQ *mbq); 403 extern void emlxs_mb_get_extents_info(emlxs_hba_t *hba, 404 MAILBOXQ *mbq, uint16_t type); 405 extern void emlxs_mb_get_extents(emlxs_hba_t *hba, 406 MAILBOXQ *mbq, uint16_t type); 407 extern void emlxs_mb_dealloc_extents(emlxs_hba_t *hba, 408 MAILBOXQ *mbq, uint16_t type); 409 extern void emlxs_mb_alloc_extents(emlxs_hba_t *hba, 410 MAILBOXQ *mbq, uint16_t type, 411 uint16_t count); 412 extern void emlxs_mb_get_sli4_params(emlxs_hba_t *hba, 413 MAILBOXQ *mbq); 414 extern char *emlxs_mb_xlate_status(uint32_t status); 415 416 extern void emlxs_mb_config_msi(emlxs_hba_t *hba, 417 MAILBOXQ *mbq, uint32_t *intr_map, 418 uint32_t intr_count); 419 extern void emlxs_mb_config_msix(emlxs_hba_t *hba, 420 MAILBOXQ *mbq, uint32_t *intr_map, 421 uint32_t intr_count); 422 extern void emlxs_mb_read_lnk_stat(emlxs_hba_t *hba, 423 MAILBOXQ *mbq); 424 extern void emlxs_mb_config_link(emlxs_hba_t *hba, 425 MAILBOXQ *mbq); 426 extern void emlxs_mb_config_ring(emlxs_hba_t *hba, 427 int32_t ring, MAILBOXQ *mbq); 428 extern void emlxs_mb_init_link(emlxs_hba_t *hba, 429 MAILBOXQ *mbq, uint32_t topology, 430 uint32_t linkspeed); 431 extern void emlxs_mb_down_link(emlxs_hba_t *hba, 432 MAILBOXQ *mbq); 433 extern uint32_t emlxs_mb_read_la(emlxs_hba_t *hba, 434 MAILBOXQ *mbq); 435 extern void emlxs_mb_read_nv(emlxs_hba_t *hba, 436 MAILBOXQ *mbq); 437 extern void emlxs_mb_read_rev(emlxs_hba_t *hba, 438 MAILBOXQ *mbq, uint32_t v3); 439 extern uint32_t emlxs_mb_read_rpi(emlxs_hba_t *hba, 440 uint32_t rpi, MAILBOXQ *mbq, 441 uint32_t flg); 442 extern uint32_t emlxs_mb_read_xri(emlxs_hba_t *hba, 443 uint32_t xri, MAILBOXQ *mbq, 444 uint32_t flg); 445 extern uint32_t emlxs_mb_read_sparam(emlxs_hba_t *hba, 446 MAILBOXQ *mbq); 447 extern void emlxs_disable_tc(emlxs_hba_t *hba, 448 MAILBOXQ *mbq); 449 extern uint32_t emlxs_mb_run_biu_diag(emlxs_hba_t *hba, 450 MAILBOXQ *mbq, uint64_t in, 451 uint64_t out); 452 extern void emlxs_mb_dump_vpd(emlxs_hba_t *hba, 453 MAILBOXQ *mbq, uint32_t offset); 454 extern void emlxs_mb_dump_fcoe(emlxs_hba_t *hba, 455 MAILBOXQ *mbq, uint32_t offset); 456 extern void emlxs_mb_config_farp(emlxs_hba_t *hba, 457 MAILBOXQ *mbq); 458 extern void emlxs_mb_read_config(emlxs_hba_t *hba, 459 MAILBOXQ *mbq); 460 extern void emlxs_mb_put(emlxs_hba_t *hba, 461 MAILBOXQ *mbq); 462 extern MAILBOXQ *emlxs_mb_get(emlxs_hba_t *hba); 463 extern void emlxs_mb_clear_la(emlxs_hba_t *hba, 464 MAILBOXQ *mbq); 465 extern void emlxs_mb_set_var(emlxs_hba_t *hba, 466 MAILBOXQ *mbq, uint32_t addr, 467 uint32_t value); 468 extern void emlxs_mb_reset_ring(emlxs_hba_t *hba, 469 MAILBOXQ *mbq, uint32_t ringno); 470 extern char *emlxs_mb_cmd_xlate(uint8_t command); 471 extern char *emlxs_request_feature_xlate(uint32_t mask); 472 extern void emlxs_mb_read_status(emlxs_hba_t *hba, 473 MAILBOXQ *mbq); 474 extern int emlxs_cmpl_init_vpi(void *arg1, MAILBOXQ *mbq); 475 extern uint32_t emlxs_mb_init_vpi(emlxs_port_t *port); 476 extern int emlxs_cmpl_reg_vpi(void *arg1, MAILBOXQ *mbq); 477 extern uint32_t emlxs_mb_reg_vpi(emlxs_port_t *port, 478 emlxs_buf_t *sbp); 479 extern int emlxs_cmpl_unreg_vpi(void *arg1, MAILBOXQ *mbq); 480 extern uint32_t emlxs_mb_unreg_vpi(emlxs_port_t *port); 481 extern void emlxs_mb_fini(emlxs_hba_t *hba, 482 MAILBOX *mb, uint32_t mbxStatus); 483 extern void emlxs_mb_deferred_cmpl(emlxs_port_t *port, 484 uint32_t mbxStatus, emlxs_buf_t *sbp, 485 fc_unsol_buf_t *ubp, IOCBQ *iocbq); 486 extern void emlxs_mb_flush(emlxs_hba_t *hba); 487 extern void emlxs_mb_heartbeat(emlxs_hba_t *hba, 488 MAILBOXQ *mbq); 489 extern void emlxs_mb_gpio_write(emlxs_hba_t *hba, 490 MAILBOXQ *mbq, uint8_t pin, 491 uint8_t val); 492 extern void emlxs_mb_request_features(emlxs_hba_t *hba, 493 MAILBOXQ *mbq, uint32_t mask); 494 extern int emlxs_mb_resume_rpi(emlxs_hba_t *hba, 495 emlxs_buf_t *sbp, uint16_t rpi); 496 extern void emlxs_mb_noop(emlxs_hba_t *hba, 497 MAILBOXQ *mbq); 498 extern int emlxs_mbext_noop(emlxs_hba_t *hba, 499 MAILBOXQ *mbq); 500 extern void emlxs_mb_resetport(emlxs_hba_t *hba, 501 MAILBOXQ *mbq); 502 extern void emlxs_mb_eq_create(emlxs_hba_t *hba, 503 MAILBOXQ *mbq, uint32_t num); 504 extern void emlxs_mb_cq_create(emlxs_hba_t *hba, 505 MAILBOXQ *mbq, uint32_t num); 506 extern void emlxs_mb_wq_create(emlxs_hba_t *hba, 507 MAILBOXQ *mbq, uint32_t num); 508 extern void emlxs_mb_rq_create(emlxs_hba_t *hba, 509 MAILBOXQ *mbq, uint32_t num); 510 extern void emlxs_mb_mq_create(emlxs_hba_t *hba, 511 MAILBOXQ *mbq); 512 extern void emlxs_mb_mq_create_ext(emlxs_hba_t *hba, 513 MAILBOXQ *mbq); 514 extern int emlxs_mb_reg_fcfi(emlxs_hba_t *hba, 515 MAILBOXQ *mbq, FCFIobj_t *fcfp); 516 extern int emlxs_mb_unreg_fcfi(emlxs_hba_t *hba, 517 FCFIobj_t *fcfp); 518 extern int emlxs_mb_reg_vfi(emlxs_hba_t *hba, 519 MAILBOXQ *mb, VFIobj_t *vfip, 520 emlxs_port_t *vpip); 521 extern int emlxs_mb_unreg_vfi(emlxs_hba_t *hba, 522 VFIobj_t *vfip); 523 extern int emlxs_mbext_read_fcf_table(emlxs_hba_t *hba, 524 MAILBOXQ *mbq, uint32_t index); 525 extern int emlxs_mbext_add_fcf_table(emlxs_hba_t *hba, 526 MAILBOXQ *mbq, uint32_t index); 527 extern void emlxs_mb_rediscover_fcf_table(emlxs_hba_t *hba, 528 MAILBOXQ *mbq); 529 extern void emlxs_mb_async_event(emlxs_hba_t *hba, 530 MAILBOXQ *mbq); 531 extern int32_t emlxs_mb_check_sparm(emlxs_hba_t *hba, 532 SERV_PARM *nsp); 533 extern void emlxs_cmpl_mbox(emlxs_hba_t *hba, MAILBOXQ *mq); 534 extern void emlxs_mb_dump(emlxs_hba_t *hba, MAILBOXQ *mbq, 535 uint32_t offset, uint32_t words); 536 extern void emlxs_mb_retry(emlxs_hba_t *hba, MAILBOXQ *mbq); 537 extern void emlxs_mb_init(emlxs_hba_t *hba, MAILBOXQ *mbq, 538 uint32_t flag, uint32_t tmo); 539 extern void emlxs_mb_config_hbq(emlxs_hba_t *hba, 540 MAILBOXQ *mbq, int hbq_id); 541 542 /* Module emlxs_mem.c External Routine Declarations */ 543 extern void *emlxs_mem_pool_get(emlxs_hba_t *hba, 544 MEMSEG *seg); 545 extern void emlxs_mem_pool_put(emlxs_hba_t *hba, 546 MEMSEG *seg, void *bp); 547 extern uint32_t emlxs_mem_pool_create(emlxs_hba_t *hba, 548 MEMSEG *seg); 549 extern void emlxs_mem_pool_destroy(emlxs_hba_t *hba, 550 MEMSEG *seg); 551 extern void emlxs_mem_pool_clean(emlxs_hba_t *hba, 552 MEMSEG *seg); 553 extern MATCHMAP *emlxs_mem_get_vaddr(emlxs_hba_t *hba, 554 RING *rp, uint64_t mapbp); 555 extern void *emlxs_mem_get(emlxs_hba_t *hba, 556 uint32_t seg_id); 557 extern void emlxs_mem_put(emlxs_hba_t *hba, 558 uint32_t seg_id, void *bp); 559 extern int32_t emlxs_mem_free_buffer(emlxs_hba_t *hba); 560 extern int32_t emlxs_mem_alloc_buffer(emlxs_hba_t *hba); 561 extern void emlxs_mem_map_vaddr(emlxs_hba_t *hba, 562 RING *rp, MATCHMAP *mp, uint32_t *haddr, 563 uint32_t *laddr); 564 extern MATCHMAP *emlxs_mem_buf_alloc(emlxs_hba_t *hba, 565 uint32_t size); 566 extern void emlxs_mem_buf_free(emlxs_hba_t *hba, 567 MATCHMAP *mp); 568 extern uint32_t emlxs_hbq_alloc(emlxs_hba_t *hba, 569 uint32_t hbq_id); 570 571 /* Module emlxs_hba.c External Routine Declarations */ 572 extern char *emlxs_pci_cap_xlate(uint32_t id); 573 extern char *emlxs_pci_ecap_xlate(uint32_t id); 574 575 extern void emlxs_decode_firmware_rev(emlxs_hba_t *hba, 576 emlxs_vpd_t *vp); 577 extern uint32_t emlxs_init_adapter_info(emlxs_hba_t *hba); 578 extern uint32_t emlxs_strtol(char *str, uint32_t base); 579 extern uint64_t emlxs_strtoll(char *str, uint32_t base); 580 extern void emlxs_decode_version(uint32_t version, 581 char *buffer, size_t len); 582 extern char *emlxs_ffstate_xlate(uint32_t new_state); 583 extern char *emlxs_ring_xlate(uint32_t ringno); 584 extern void emlxs_proc_channel(emlxs_hba_t *hba, 585 CHANNEL *cp, void *arg2); 586 extern void emlxs_pcix_mxr_update(emlxs_hba_t *hba, 587 uint32_t verbose); 588 extern void emlxs_restart_thread(emlxs_hba_t *hba, 589 void *arg1, void *arg2); 590 extern void emlxs_fw_show(emlxs_hba_t *hba); 591 extern void emlxs_proc_channel_event(emlxs_hba_t *hba, 592 CHANNEL *cp, IOCBQ *iocbq); 593 594 #ifdef MODFW_SUPPORT 595 extern void emlxs_fw_load(emlxs_hba_t *hba, 596 emlxs_firmware_t *fw); 597 extern void emlxs_fw_unload(emlxs_hba_t *hba, 598 emlxs_firmware_t *fw); 599 #endif /* MODFW_SUPPORT */ 600 601 #ifdef MSI_SUPPORT 602 extern int32_t emlxs_msi_add(emlxs_hba_t *hba); 603 extern int32_t emlxs_msi_remove(emlxs_hba_t *hba); 604 extern int32_t emlxs_msi_init(emlxs_hba_t *hba, uint32_t max); 605 extern int32_t emlxs_msi_uninit(emlxs_hba_t *hba); 606 #endif /* MSI_SUPPORT */ 607 608 extern int32_t emlxs_intx_add(emlxs_hba_t *hba); 609 extern int32_t emlxs_intx_remove(emlxs_hba_t *hba); 610 extern int32_t emlxs_intx_init(emlxs_hba_t *hba, uint32_t max); 611 extern int32_t emlxs_intx_uninit(emlxs_hba_t *hba); 612 613 extern void emlxs_parse_prog_types(emlxs_hba_t *hba, 614 char *types); 615 extern int32_t emlxs_parse_vpd(emlxs_hba_t *hba, uint8_t *vpd, 616 uint32_t size); 617 extern int32_t emlxs_parse_fcoe(emlxs_hba_t *hba, uint8_t *p, 618 uint32_t size); 619 620 extern void emlxs_decode_label(char *label, char *buffer, 621 int bige, size_t len); 622 extern void emlxs_build_prog_types(emlxs_hba_t *hba, 623 emlxs_vpd_t *vpd); 624 extern void emlxs_process_link_speed(emlxs_hba_t *hba); 625 626 extern uint32_t emlxs_iotag_flush(emlxs_hba_t *hba); 627 628 extern int emlxs_pci_model_count; 629 extern emlxs_model_t emlxs_pci_model[]; 630 631 extern int emlxs_fw_count; 632 extern emlxs_firmware_t emlxs_fw_table[]; 633 634 635 /* Module emlxs_sli3.c External Routine Declarations */ 636 extern emlxs_sli_api_t emlxs_sli3_api; 637 638 extern int emlxs_handle_rcv_seq(emlxs_hba_t *hba, 639 CHANNEL *cp, IOCBQ *iocbq); 640 extern void emlxs_update_HBQ_index(emlxs_hba_t *hba, 641 uint32_t hbq_id); 642 extern void emlxs_hbq_free_all(emlxs_hba_t *hba, 643 uint32_t hbq_id); 644 645 /* Module emlxs_sli4.c External Routine Declarations */ 646 647 extern uint32_t emlxs_sli4_vfi_to_index(emlxs_hba_t *hba, 648 uint32_t vfi); 649 extern uint32_t emlxs_sli4_index_to_vfi(emlxs_hba_t *hba, 650 uint32_t index); 651 extern uint32_t emlxs_sli4_vpi_to_index(emlxs_hba_t *hba, 652 uint32_t vpi); 653 extern uint32_t emlxs_sli4_index_to_vpi(emlxs_hba_t *hba, 654 uint32_t index); 655 extern uint32_t emlxs_sli4_xri_to_index(emlxs_hba_t *hba, 656 uint32_t xri); 657 extern uint32_t emlxs_sli4_index_to_xri(emlxs_hba_t *hba, 658 uint32_t index); 659 extern uint32_t emlxs_sli4_rpi_to_index(emlxs_hba_t *hba, 660 uint32_t rpi); 661 extern uint32_t emlxs_sli4_index_to_rpi(emlxs_hba_t *hba, 662 uint32_t index); 663 664 extern uint32_t emlxs_sli4_unreg_all_nodes( 665 emlxs_port_t *port); 666 extern void emlxs_sli4_hba_reset_all(emlxs_hba_t *hba, 667 uint32_t flag); 668 extern XRIobj_t *emlxs_sli4_reserve_xri(emlxs_port_t *port, 669 RPIobj_t *rpip, uint32_t type, 670 uint16_t rx_id); 671 extern emlxs_sli_api_t emlxs_sli4_api; 672 673 extern FCFIobj_t *emlxs_sli4_assign_fcfi(emlxs_hba_t *hba, 674 FCF_RECORD_t *fcfrec, 675 uint32_t event_tag); 676 extern void emlxs_data_dump(emlxs_port_t *port, char *str, 677 uint32_t *data, int cnt, int err); 678 extern void emlxs_ue_dump(emlxs_hba_t *hba, char *str); 679 680 extern XRIobj_t *emlxs_sli4_find_xri(emlxs_port_t *port, 681 uint16_t xri); 682 extern VFIobj_t *emlxs_sli4_alloc_vfi(emlxs_hba_t *hba, 683 FCFIobj_t *fp); 684 extern void emlxs_sli4_free_vfi(emlxs_hba_t *hba, 685 VFIobj_t *xp); 686 extern void emlxs_sli4_free_fcfi(emlxs_hba_t *hba, 687 FCFIobj_t *xp); 688 extern void emlxs_sli4_free_xri(emlxs_port_t *port, 689 emlxs_buf_t *sbp, XRIobj_t *xp, 690 uint8_t lock); 691 extern FCFIobj_t *emlxs_sli4_bind_fcfi(emlxs_hba_t *hba); 692 693 extern uint32_t emlxs_sli4_unreserve_xri(emlxs_port_t *port, 694 uint16_t xri, uint32_t lock); 695 extern XRIobj_t *emlxs_sli4_register_xri(emlxs_port_t *port, 696 emlxs_buf_t *sbp, uint16_t xri, 697 uint32_t did); 698 699 700 /* Module emlxs_diag.c External Routine Declarations */ 701 extern uint32_t emlxs_diag_post_run(emlxs_hba_t *hba); 702 extern uint32_t emlxs_diag_biu_run(emlxs_hba_t *hba, 703 uint32_t pattern); 704 extern uint32_t emlxs_diag_pattern[256]; 705 extern uint32_t emlxs_diag_echo_run(emlxs_port_t *port, 706 uint32_t did, uint32_t pattern); 707 708 /* Module emlxs_download.c External Routine Declarations */ 709 extern void emlxs_memset(uint8_t *buffer, uint8_t value, 710 uint32_t size); 711 extern int32_t emlxs_fw_download(emlxs_hba_t *hba, 712 caddr_t buffer, uint32_t len, 713 uint32_t offline); 714 extern uint32_t emlxs_get_max_sram(emlxs_hba_t *hba, 715 uint32_t *MaxRbusSize, 716 uint32_t *MaxIbusSize); 717 extern uint32_t emlxs_get_load_list(emlxs_hba_t *hba, 718 PROG_ID *load_list); 719 extern uint32_t emlxs_read_wakeup_parms(emlxs_hba_t *hba, 720 PWAKE_UP_PARMS WakeUpParms, 721 uint32_t verbose); 722 extern int32_t emlxs_cfl_download(emlxs_hba_t *hba, 723 uint32_t region, caddr_t buffer, 724 uint32_t len); 725 726 extern int32_t emlxs_boot_code_disable(emlxs_hba_t *hba); 727 extern int32_t emlxs_boot_code_enable(emlxs_hba_t *hba); 728 extern int32_t emlxs_boot_code_state(emlxs_hba_t *hba); 729 730 extern int32_t emlxs_be_read_fw_version(emlxs_hba_t *hba, 731 emlxs_firmware_t *fw); 732 733 /* Module emlxs_fcp.c External Routine Declarations */ 734 extern int emlxs_power_up(emlxs_hba_t *hba); 735 extern int emlxs_power_down(emlxs_hba_t *hba); 736 extern int emlxs_reset_link(emlxs_hba_t *hba, 737 uint32_t linkup, uint32_t wait); 738 extern emlxs_buf_t *emlxs_unregister_pkt(CHANNEL *cp, 739 uint16_t iotag, uint32_t forced); 740 extern uint16_t emlxs_register_pkt(CHANNEL *cp, 741 emlxs_buf_t *sbp); 742 743 extern IOCBQ *emlxs_create_abort_xri_cn(emlxs_port_t *port, 744 NODELIST *ndlp, uint16_t iotag, 745 CHANNEL *cp, uint8_t class, 746 int32_t flag); 747 extern IOCBQ *emlxs_create_close_xri_cn(emlxs_port_t *port, 748 NODELIST *ndlp, uint16_t iotag, 749 CHANNEL *cp); 750 extern IOCBQ *emlxs_create_abort_xri_cx(emlxs_port_t *port, 751 NODELIST *ndlp, uint16_t xid, 752 CHANNEL *cp, uint8_t class, 753 int32_t flag); 754 extern IOCBQ *emlxs_create_close_xri_cx(emlxs_port_t *port, 755 NODELIST *ndlp, uint16_t xid, 756 CHANNEL *cp); 757 extern void emlxs_abort_ct_exchange(emlxs_hba_t *hba, 758 emlxs_port_t *port, uint32_t rxid); 759 extern void emlxs_abort_els_exchange(emlxs_hba_t *hba, 760 emlxs_port_t *port, uint32_t rxid); 761 extern void emlxs_close_els_exchange(emlxs_hba_t *hba, 762 emlxs_port_t *port, uint32_t rxid); 763 extern void emlxs_abort_fct_exchange(emlxs_hba_t *hba, 764 emlxs_port_t *port, uint32_t rxid); 765 extern emlxs_buf_t *emlxs_chipq_get(CHANNEL *cp, uint16_t iotag); 766 extern void emlxs_chipq_put(CHANNEL *cp, emlxs_buf_t *sbp); 767 extern uint32_t emlxs_chipq_node_flush(emlxs_port_t *port, 768 CHANNEL *cp, NODELIST *ndlp, 769 emlxs_buf_t *fpkt); 770 extern uint32_t emlxs_chipq_lun_flush(emlxs_port_t *port, 771 NODELIST *ndlp, uint32_t lun, 772 emlxs_buf_t *fpkt); 773 extern uint32_t emlxs_chipq_node_check(emlxs_port_t *port, 774 CHANNEL *cp, NODELIST *ndlp); 775 776 extern IOCBQ *emlxs_tx_get(CHANNEL *cp, uint32_t lock); 777 extern void emlxs_tx_put(IOCBQ *iocbq, uint32_t lock); 778 extern void emlxs_tx_move(NODELIST *ndlp, CHANNEL *from, 779 CHANNEL *to, uint32_t cmd, 780 emlxs_buf_t *fpkt, uint32_t lock); 781 782 extern uint32_t emlxs_tx_node_check(emlxs_port_t *port, 783 NODELIST *ndlp, CHANNEL *cp); 784 extern uint32_t emlxs_tx_node_flush(emlxs_port_t *port, 785 NODELIST *ndlp, CHANNEL *cp, 786 uint32_t shutdown, emlxs_buf_t *fpkt); 787 extern uint32_t emlxs_tx_lun_flush(emlxs_port_t *port, 788 NODELIST *ndlp, uint32_t lun, 789 emlxs_buf_t *fpkt); 790 extern uint32_t emlxs_tx_channel_flush(emlxs_hba_t *hba, 791 CHANNEL *cp, emlxs_buf_t *fpkt); 792 793 extern void emlxs_linkdown(emlxs_hba_t *hba); 794 extern void emlxs_linkup(emlxs_hba_t *hba); 795 extern void emlxs_port_online(emlxs_port_t *port); 796 extern int32_t emlxs_port_offline(emlxs_port_t *port, 797 uint32_t scope); 798 extern void emlxs_ffcleanup(emlxs_hba_t *hba); 799 extern int32_t emlxs_offline(emlxs_hba_t *hba, 800 uint32_t reset_requested); 801 extern int32_t emlxs_online(emlxs_hba_t *hba); 802 extern int32_t emlxs_post_buffer(emlxs_hba_t *hba, 803 RING *rp, int16_t cnt); 804 extern void emlxs_ff_start(emlxs_hba_t *hba); 805 extern void emlxs_handle_fcp_event(emlxs_hba_t *hba, 806 CHANNEL *rp, IOCBQ *temp); 807 extern int emlxs_fct_handle_abort(emlxs_hba_t *hba, 808 CHANNEL *rp, IOCBQ *iocbq); 809 810 /* Module emlxs_thread.c External Routine Declarations */ 811 extern void emlxs_taskq_destroy(emlxs_taskq_t *taskq); 812 extern void emlxs_taskq_create(emlxs_hba_t *hba, 813 emlxs_taskq_t *taskq); 814 extern uint32_t emlxs_taskq_dispatch(emlxs_taskq_t *taskq, 815 void (*func) (), void *arg); 816 extern void emlxs_thread_create(emlxs_hba_t *hba, 817 emlxs_thread_t *ethread); 818 extern void emlxs_thread_destroy(emlxs_thread_t *ethread); 819 extern void emlxs_thread_trigger1(emlxs_thread_t *ethread, 820 void (*func) ()); 821 extern void emlxs_thread_trigger2(emlxs_thread_t *ethread, 822 void (*func) (), CHANNEL *cp); 823 extern void emlxs_thread_spawn(emlxs_hba_t *hba, 824 void (*func) (), void *arg1, 825 void *arg2); 826 extern void emlxs_thread_spawn_create(emlxs_hba_t *hba); 827 extern void emlxs_thread_spawn_destroy(emlxs_hba_t *hba); 828 829 /* Module emlxs_dfc.c External Routine Declarations */ 830 extern int32_t emlxs_dfc_manage(emlxs_hba_t *hba, void *dfc, 831 int32_t mode); 832 extern int32_t emlxs_dfc_handle_event(emlxs_hba_t *hba, 833 CHANNEL *cp, IOCBQ *temp); 834 extern int emlxs_dfc_handle_unsol_req(emlxs_port_t *port, 835 CHANNEL *cp, IOCBQ *iocbq, 836 MATCHMAP *mp, uint32_t size); 837 extern void emlxs_fcoe_attention_thread(emlxs_hba_t *hba, 838 void *arg1, void *arg2); 839 extern uint32_t emlxs_set_hba_mode(emlxs_hba_t *hba, uint32_t mode); 840 extern uint32_t emlxs_get_dump_region(emlxs_hba_t *hba, uint32_t region, 841 uint8_t *buffer, uint32_t *psize); 842 extern int32_t emlxs_send_menlo_cmd(emlxs_hba_t *hba, uint8_t *cmd_buf, 843 uint32_t cmd_size, uint8_t *rsp_buf, 844 uint32_t *rsp_size); 845 846 #ifdef SFCT_SUPPORT 847 /* Module emlxs_fct.c External Routine Declarations */ 848 extern uint32_t emlxs_fct_stmf_alloc(emlxs_hba_t *hba, 849 MATCHMAP *mp); 850 extern void emlxs_fct_stmf_free(emlxs_hba_t *hba, 851 MATCHMAP *mp); 852 extern void emlxs_fct_link_down(emlxs_port_t *port); 853 extern void emlxs_fct_link_up(emlxs_port_t *port); 854 extern uint32_t emlxs_fct_init(emlxs_hba_t *hba); 855 extern void emlxs_fct_detach(emlxs_hba_t *hba); 856 extern int emlxs_fct_handle_unsol_els(emlxs_port_t *port, 857 CHANNEL *cp, IOCBQ *iocbq, MATCHMAP *mp, 858 uint32_t size); 859 extern int emlxs_fct_handle_unsol_req(emlxs_port_t *port, 860 CHANNEL *cp, IOCBQ *iocbq, MATCHMAP *mp, 861 uint32_t size); 862 extern int emlxs_fct_handle_fcp_event(emlxs_hba_t *hba, 863 CHANNEL *cp, IOCBQ *iocbq); 864 extern void emlxs_fct_bind_port(emlxs_port_t *port); 865 extern void emlxs_fct_unbind_port(emlxs_port_t *port); 866 extern void emlxs_fct_unsol_callback(emlxs_port_t *port, 867 fct_cmd_t *fct_cmd); 868 extern void emlxs_fct_attach(emlxs_hba_t *hba); 869 extern int emlxs_fct_port_shutdown(emlxs_port_t *port); 870 extern int emlxs_fct_port_initialize(emlxs_port_t *port); 871 872 #ifdef MODSYM_SUPPORT 873 extern int emlxs_fct_modopen(); 874 extern void emlxs_fct_modclose(); 875 #endif /* MODSYM_SUPPORT */ 876 877 #ifdef FCT_IO_TRACE 878 extern void emlxs_fct_io_trace(emlxs_port_t *, 879 fct_cmd_t *, uint32_t); 880 #endif /* FCT_IO_TRACE */ 881 #endif /* SFCT_SUPPORT */ 882 883 #ifdef DUMP_SUPPORT 884 /* Module emlxs_dump.c External Routine Declarations */ 885 extern uint32_t emlxs_dump_drv_event(emlxs_hba_t *hba); 886 extern uint32_t emlxs_dump_user_event(emlxs_hba_t *hba); 887 extern uint32_t emlxs_dump_temp_event(emlxs_hba_t *hba, 888 uint32_t tempType, uint32_t temp); 889 extern void emlxs_dump_drv_thread(emlxs_hba_t *hba, 890 void *arg1, void *arg2); 891 extern void emlxs_dump_user_thread(emlxs_hba_t *hba, 892 void *arg1, void *arg2); 893 extern void emlxs_dump_temp_thread(emlxs_hba_t *hba, 894 void *arg1, void *arg2); 895 extern uint32_t emlxs_ftell(emlxs_file_t *fp); 896 extern uint32_t emlxs_get_dump(emlxs_hba_t *hba, uint8_t *buffer, 897 uint32_t *buflen); 898 extern void emlxs_dump_wait(emlxs_hba_t *hba); 899 extern void emlxs_dump(emlxs_hba_t *hba, uint32_t type, 900 uint32_t temp_type, uint32_t temp); 901 902 extern emlxs_file_t *emlxs_fopen(emlxs_hba_t *hba, uint32_t file_type); 903 extern void emlxs_fflush(emlxs_file_t *fp); 904 extern uint32_t emlxs_fclose(emlxs_file_t *fp); 905 extern uint32_t emlxs_dump_word_dmpfile(emlxs_file_t *fpDmpFile, 906 uint8_t *pBuffer, uint32_t bufferLen, 907 int fSwap); 908 #endif /* DUMP_SUPPORT */ 909 910 911 /* Module emlxs_fcf.c External Routine Declarations */ 912 extern void emlxs_fcf_init(emlxs_hba_t *hba); 913 914 extern void emlxs_fcf_fini(emlxs_hba_t *hba); 915 916 extern uint32_t emlxs_vpi_port_bind_notify(emlxs_port_t *port); 917 918 extern uint32_t emlxs_vpi_port_unbind_notify(emlxs_port_t *port, 919 uint32_t wait); 920 extern uint32_t emlxs_vpi_logo_cmpl_notify(emlxs_port_t *port); 921 922 extern uint32_t emlxs_vpi_logi_notify(emlxs_port_t *port, 923 emlxs_buf_t *sbp); 924 extern uint32_t emlxs_vpi_logi_failed_notify(emlxs_port_t *port, 925 emlxs_buf_t *sbp); 926 extern uint32_t emlxs_vpi_rpi_offline_notify(emlxs_port_t *port, 927 uint32_t did, uint32_t rpi); 928 extern uint32_t emlxs_vpi_rpi_online_notify(emlxs_port_t *port, 929 uint32_t did, uint32_t rpi, uint32_t lock); 930 extern uint32_t emlxs_fcf_shutdown_notify(emlxs_port_t *port, 931 uint32_t wait); 932 extern uint32_t emlxs_fcf_linkup_notify(emlxs_port_t *port); 933 934 extern uint32_t emlxs_fcf_linkdown_notify(emlxs_port_t *port); 935 936 extern uint32_t emlxs_fcf_cvl_notify(emlxs_port_t *port, uint32_t vpi); 937 938 extern uint32_t emlxs_fcf_full_notify(emlxs_port_t *port); 939 940 extern uint32_t emlxs_fcf_found_notify(emlxs_port_t *port, 941 uint32_t fcf_index); 942 extern uint32_t emlxs_fcf_changed_notify(emlxs_port_t *port, 943 uint32_t fcf_index); 944 extern uint32_t emlxs_fcf_lost_notify(emlxs_port_t *port, 945 uint32_t fcf_index); 946 extern void emlxs_fcf_timer_notify(emlxs_hba_t *hba); 947 948 949 extern RPIobj_t *emlxs_rpi_find(emlxs_port_t *port, uint16_t rpi); 950 951 extern RPIobj_t *emlxs_rpi_reserve_notify(emlxs_port_t *port, 952 uint32_t did, XRIobj_t *xrip); 953 extern RPIobj_t *emlxs_rpi_alloc_notify(emlxs_port_t *port, 954 uint32_t did); 955 extern uint32_t emlxs_rpi_free_notify(emlxs_port_t *port, 956 RPIobj_t *rpip); 957 extern uint32_t emlxs_rpi_online_notify(emlxs_port_t *port, 958 RPIobj_t *rpip, uint32_t did, SERV_PARM *sparam, 959 void *arg1, void *arg2, void *arg3); 960 extern uint32_t emlxs_rpi_offline_notify(emlxs_port_t *port, 961 RPIobj_t *rpip, void *arg1, void *arg2, 962 void *arg3); 963 extern uint32_t emlxs_rpi_pause_notify(emlxs_port_t *port, 964 RPIobj_t *rpip); 965 extern uint32_t emlxs_rpi_resume_notify(emlxs_port_t *port, 966 RPIobj_t *rpip, emlxs_buf_t *sbp); 967 968 969 #ifdef __cplusplus 970 } 971 #endif 972 973 #endif /* _EMLXS_EXTERN_H */ 974