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