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