Home | History | Annotate | Line # | Download | only in ic
isp_library.h revision 1.4
      1  1.4  mjacob /* $Id: isp_library.h,v 1.4 2010/03/26 20:52:00 mjacob Exp $ */
      2  1.2  mjacob /*-
      3  1.2  mjacob  *  Copyright (c) 1997-2008 by Matthew Jacob
      4  1.2  mjacob  *  All rights reserved.
      5  1.2  mjacob  *
      6  1.2  mjacob  *  Redistribution and use in source and binary forms, with or without
      7  1.2  mjacob  *  modification, are permitted provided that the following conditions
      8  1.2  mjacob  *  are met:
      9  1.2  mjacob  *
     10  1.2  mjacob  *  1. Redistributions of source code must retain the above copyright
     11  1.2  mjacob  *     notice, this list of conditions and the following disclaimer.
     12  1.2  mjacob  *  2. Redistributions in binary form must reproduce the above copyright
     13  1.2  mjacob  *     notice, this list of conditions and the following disclaimer in the
     14  1.2  mjacob  *     documentation and/or other materials provided with the distribution.
     15  1.2  mjacob  *
     16  1.2  mjacob  *  THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17  1.2  mjacob  *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  1.2  mjacob  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19  1.2  mjacob  *  ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
     20  1.2  mjacob  *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21  1.2  mjacob  *  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22  1.2  mjacob  *  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  1.2  mjacob  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24  1.2  mjacob  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  1.2  mjacob  *  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  1.2  mjacob  *  SUCH DAMAGE.
     27  1.2  mjacob  *
     28  1.2  mjacob  *
     29  1.2  mjacob  *  Matthew Jacob
     30  1.2  mjacob  *  Feral Software
     31  1.2  mjacob  *  421 Laurel Avenue
     32  1.2  mjacob  *  Menlo Park, CA 94025
     33  1.2  mjacob  *  USA
     34  1.2  mjacob  *
     35  1.2  mjacob  *  gplbsd at feral com
     36  1.1  mjacob  */
     37  1.2  mjacob #ifndef _ISP_LIBRARY_H
     38  1.2  mjacob #define _ISP_LIBRARY_H
     39  1.2  mjacob 
     40  1.3  mjacob /*
     41  1.3  mjacob  * Common command shipping routine.
     42  1.3  mjacob  *
     43  1.3  mjacob  * This used to be platform specific, but basically once you get the segment
     44  1.3  mjacob  * stuff figured out, you can make all the code in one spot.
     45  1.3  mjacob  */
     46  1.3  mjacob typedef enum { ISP_TO_DEVICE, ISP_FROM_DEVICE, ISP_NOXFR} isp_ddir_t;
     47  1.3  mjacob int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t);
     48  1.3  mjacob 
     49  1.3  mjacob /*
     50  1.3  mjacob  * Handle management functions.
     51  1.3  mjacob  *
     52  1.3  mjacob  * These handles are associate with a command.
     53  1.3  mjacob  */
     54  1.4  mjacob int isp_allocate_xs(ispsoftc_t *, XS_T *, uint32_t *);
     55  1.2  mjacob XS_T * isp_find_xs(ispsoftc_t *, uint32_t);
     56  1.2  mjacob uint32_t isp_find_handle(ispsoftc_t *, XS_T *);
     57  1.4  mjacob uint32_t isp_handle_index(ispsoftc_t *, uint32_t);
     58  1.2  mjacob void isp_destroy_handle(ispsoftc_t *, uint32_t);
     59  1.3  mjacob 
     60  1.3  mjacob /*
     61  1.3  mjacob  * Request Queue allocation
     62  1.3  mjacob  */
     63  1.3  mjacob void *isp_getrqentry(ispsoftc_t *);
     64  1.3  mjacob 
     65  1.3  mjacob /*
     66  1.3  mjacob  * Queue Entry debug functions
     67  1.3  mjacob  */
     68  1.3  mjacob void isp_print_qentry (ispsoftc_t *, const char *, int, void *);
     69  1.2  mjacob void isp_print_bytes(ispsoftc_t *, const char *, int, void *);
     70  1.3  mjacob 
     71  1.3  mjacob /*
     72  1.3  mjacob  * Fibre Channel specific routines and data.
     73  1.3  mjacob  */
     74  1.3  mjacob extern const char *isp_class3_roles[4];
     75  1.2  mjacob int isp_fc_runstate(ispsoftc_t *, int, int);
     76  1.2  mjacob void isp_dump_portdb(ispsoftc_t *, int);
     77  1.3  mjacob 
     78  1.3  mjacob const char *isp_fc_fw_statename(int);
     79  1.3  mjacob const char *isp_fc_loop_statename(int);
     80  1.3  mjacob const char *isp_fc_toponame(fcparam *);
     81  1.3  mjacob 
     82  1.3  mjacob int isp_fc_change_role(ispsoftc_t *, int, int);
     83  1.3  mjacob 
     84  1.3  mjacob 
     85  1.3  mjacob /*
     86  1.3  mjacob  * Cleanup
     87  1.3  mjacob  */
     88  1.3  mjacob void isp_clear_commands(ispsoftc_t *);
     89  1.3  mjacob 
     90  1.3  mjacob /*
     91  1.3  mjacob  * Common chip shutdown function
     92  1.3  mjacob  */
     93  1.2  mjacob void isp_shutdown(ispsoftc_t *);
     94  1.3  mjacob 
     95  1.3  mjacob /*
     96  1.3  mjacob  * Put/Get routines to push from CPU view to device view
     97  1.3  mjacob  * or to pull from device view to CPU view for various
     98  1.3  mjacob  * data structures (IOCB)
     99  1.3  mjacob  */
    100  1.2  mjacob void isp_put_hdr(ispsoftc_t *, isphdr_t *, isphdr_t *);
    101  1.2  mjacob void isp_get_hdr(ispsoftc_t *, isphdr_t *, isphdr_t *);
    102  1.2  mjacob int isp_get_response_type(ispsoftc_t *, isphdr_t *);
    103  1.2  mjacob void isp_put_request(ispsoftc_t *, ispreq_t *, ispreq_t *);
    104  1.2  mjacob void isp_put_marker(ispsoftc_t *, isp_marker_t *, isp_marker_t *);
    105  1.2  mjacob void isp_put_marker_24xx(ispsoftc_t *, isp_marker_24xx_t *, isp_marker_24xx_t *);
    106  1.2  mjacob void isp_put_request_t2(ispsoftc_t *, ispreqt2_t *, ispreqt2_t *);
    107  1.2  mjacob void isp_put_request_t2e(ispsoftc_t *, ispreqt2e_t *, ispreqt2e_t *);
    108  1.2  mjacob void isp_put_request_t3(ispsoftc_t *, ispreqt3_t *, ispreqt3_t *);
    109  1.2  mjacob void isp_put_request_t3e(ispsoftc_t *, ispreqt3e_t *, ispreqt3e_t *);
    110  1.2  mjacob void isp_put_extended_request(ispsoftc_t *, ispextreq_t *, ispextreq_t *);
    111  1.2  mjacob void isp_put_request_t7(ispsoftc_t *, ispreqt7_t *, ispreqt7_t *);
    112  1.2  mjacob void isp_put_24xx_tmf(ispsoftc_t *, isp24xx_tmf_t *, isp24xx_tmf_t *);
    113  1.2  mjacob void isp_put_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *);
    114  1.2  mjacob void isp_put_cont_req(ispsoftc_t *, ispcontreq_t *, ispcontreq_t *);
    115  1.2  mjacob void isp_put_cont64_req(ispsoftc_t *, ispcontreq64_t *, ispcontreq64_t *);
    116  1.2  mjacob void isp_get_response(ispsoftc_t *, ispstatusreq_t *, ispstatusreq_t *);
    117  1.2  mjacob void isp_get_24xx_response(ispsoftc_t *, isp24xx_statusreq_t *, isp24xx_statusreq_t *);
    118  1.2  mjacob void isp_get_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *);
    119  1.4  mjacob void isp_get_rio1(ispsoftc_t *, isp_rio1_t *, isp_rio1_t *);
    120  1.2  mjacob void isp_get_rio2(ispsoftc_t *, isp_rio2_t *, isp_rio2_t *);
    121  1.2  mjacob void isp_put_icb(ispsoftc_t *, isp_icb_t *, isp_icb_t *);
    122  1.2  mjacob void isp_put_icb_2400(ispsoftc_t *, isp_icb_2400_t *, isp_icb_2400_t *);
    123  1.2  mjacob void isp_put_icb_2400_vpinfo(ispsoftc_t *, isp_icb_2400_vpinfo_t *, isp_icb_2400_vpinfo_t *);
    124  1.2  mjacob void isp_put_vp_port_info(ispsoftc_t *, vp_port_info_t *, vp_port_info_t *);
    125  1.2  mjacob void isp_get_vp_port_info(ispsoftc_t *, vp_port_info_t *, vp_port_info_t *);
    126  1.2  mjacob void isp_put_vp_ctrl_info(ispsoftc_t *, vp_ctrl_info_t *, vp_ctrl_info_t *);
    127  1.2  mjacob void isp_get_vp_ctrl_info(ispsoftc_t *, vp_ctrl_info_t *, vp_ctrl_info_t *);
    128  1.2  mjacob void isp_put_vp_modify(ispsoftc_t *, vp_modify_t *, vp_modify_t *);
    129  1.2  mjacob void isp_get_vp_modify(ispsoftc_t *, vp_modify_t *, vp_modify_t *);
    130  1.2  mjacob void isp_get_pdb_21xx(ispsoftc_t *, isp_pdb_21xx_t *, isp_pdb_21xx_t *);
    131  1.2  mjacob void isp_get_pdb_24xx(ispsoftc_t *, isp_pdb_24xx_t *, isp_pdb_24xx_t *);
    132  1.2  mjacob void isp_get_ridacq(ispsoftc_t *, isp_ridacq_t *, isp_ridacq_t *);
    133  1.2  mjacob void isp_get_plogx(ispsoftc_t *, isp_plogx_t *, isp_plogx_t *);
    134  1.2  mjacob void isp_put_plogx(ispsoftc_t *, isp_plogx_t *, isp_plogx_t *);
    135  1.2  mjacob void isp_get_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *, isp_ct_pt_t *);
    136  1.2  mjacob void isp_get_ms(ispsoftc_t *isp, isp_ms_t *, isp_ms_t *);
    137  1.2  mjacob void isp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *, isp_ct_pt_t *);
    138  1.2  mjacob void isp_put_ms(ispsoftc_t *isp, isp_ms_t *, isp_ms_t *);
    139  1.2  mjacob void isp_put_sns_request(ispsoftc_t *, sns_screq_t *, sns_screq_t *);
    140  1.2  mjacob void isp_put_gid_ft_request(ispsoftc_t *, sns_gid_ft_req_t *, sns_gid_ft_req_t *);
    141  1.2  mjacob void isp_put_gxn_id_request(ispsoftc_t *, sns_gxn_id_req_t *, sns_gxn_id_req_t *);
    142  1.2  mjacob void isp_get_sns_response(ispsoftc_t *, sns_scrsp_t *, sns_scrsp_t *, int);
    143  1.2  mjacob void isp_get_gid_ft_response(ispsoftc_t *, sns_gid_ft_rsp_t *, sns_gid_ft_rsp_t *, int);
    144  1.2  mjacob void isp_get_gxn_id_response(ispsoftc_t *, sns_gxn_id_rsp_t *, sns_gxn_id_rsp_t *);
    145  1.2  mjacob void isp_get_gff_id_response(ispsoftc_t *, sns_gff_id_rsp_t *, sns_gff_id_rsp_t *);
    146  1.2  mjacob void isp_get_ga_nxt_response(ispsoftc_t *, sns_ga_nxt_rsp_t *, sns_ga_nxt_rsp_t *);
    147  1.2  mjacob void isp_get_els(ispsoftc_t *, els_t *, els_t *);
    148  1.2  mjacob void isp_put_els(ispsoftc_t *, els_t *, els_t *);
    149  1.2  mjacob void isp_get_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
    150  1.2  mjacob void isp_get_fcp_cmnd_iu(ispsoftc_t *, fcp_cmnd_iu_t *, fcp_cmnd_iu_t *);
    151  1.2  mjacob void isp_put_rft_id(ispsoftc_t *, rft_id_t *, rft_id_t *);
    152  1.2  mjacob void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
    153  1.2  mjacob void isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
    154  1.1  mjacob 
    155  1.2  mjacob #define ISP_HANDLE_MASK  0x7fff
    156  1.1  mjacob 
    157  1.2  mjacob #ifdef ISP_TARGET_MODE
    158  1.2  mjacob #if defined(__NetBSD__) || defined(__OpenBSD__)
    159  1.1  mjacob #include <dev/ic/isp_target.h>
    160  1.2  mjacob #elif  defined(__FreeBSD__)
    161  1.1  mjacob #include <dev/isp/isp_target.h>
    162  1.1  mjacob #else
    163  1.1  mjacob #include "isp_target.h"
    164  1.1  mjacob #endif
    165  1.1  mjacob 
    166  1.3  mjacob int isp_send_tgt_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t, void *, uint32_t);
    167  1.3  mjacob 
    168  1.4  mjacob int isp_allocate_xs_tgt(ispsoftc_t *, void *, uint32_t *);
    169  1.2  mjacob void *isp_find_xs_tgt(ispsoftc_t *, uint32_t);
    170  1.2  mjacob uint32_t isp_find_tgt_handle(ispsoftc_t *, void *);
    171  1.2  mjacob void isp_destroy_tgt_handle(ispsoftc_t *, uint32_t);
    172  1.2  mjacob 
    173  1.3  mjacob int isp_find_pdb_by_wwn(ispsoftc_t *, int, uint64_t, fcportdb_t **);
    174  1.3  mjacob int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
    175  1.3  mjacob int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
    176  1.3  mjacob void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *);
    177  1.3  mjacob void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
    178  1.3  mjacob void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
    179  1.3  mjacob void isp_del_all_wwn_entries(ispsoftc_t *, int);
    180  1.3  mjacob void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *);
    181  1.3  mjacob 
    182  1.2  mjacob void isp_put_atio(ispsoftc_t *, at_entry_t *, at_entry_t *);
    183  1.2  mjacob void isp_get_atio(ispsoftc_t *, at_entry_t *, at_entry_t *);
    184  1.2  mjacob void isp_put_atio2(ispsoftc_t *, at2_entry_t *, at2_entry_t *);
    185  1.2  mjacob void isp_put_atio2e(ispsoftc_t *, at2e_entry_t *, at2e_entry_t *);
    186  1.2  mjacob void isp_get_atio2(ispsoftc_t *, at2_entry_t *, at2_entry_t *);
    187  1.2  mjacob void isp_get_atio2e(ispsoftc_t *, at2e_entry_t *, at2e_entry_t *);
    188  1.2  mjacob void isp_get_atio7(ispsoftc_t *isp, at7_entry_t *, at7_entry_t *);
    189  1.2  mjacob void isp_put_ctio(ispsoftc_t *, ct_entry_t *, ct_entry_t *);
    190  1.2  mjacob void isp_get_ctio(ispsoftc_t *, ct_entry_t *, ct_entry_t *);
    191  1.2  mjacob void isp_put_ctio2(ispsoftc_t *, ct2_entry_t *, ct2_entry_t *);
    192  1.2  mjacob void isp_put_ctio2e(ispsoftc_t *, ct2e_entry_t *, ct2e_entry_t *);
    193  1.2  mjacob void isp_put_ctio7(ispsoftc_t *, ct7_entry_t *, ct7_entry_t *);
    194  1.2  mjacob void isp_get_ctio2(ispsoftc_t *, ct2_entry_t *, ct2_entry_t *);
    195  1.2  mjacob void isp_get_ctio2e(ispsoftc_t *, ct2e_entry_t *, ct2e_entry_t *);
    196  1.2  mjacob void isp_get_ctio7(ispsoftc_t *, ct7_entry_t *, ct7_entry_t *);
    197  1.2  mjacob void isp_put_enable_lun(ispsoftc_t *, lun_entry_t *, lun_entry_t *);
    198  1.2  mjacob void isp_get_enable_lun(ispsoftc_t *, lun_entry_t *, lun_entry_t *);
    199  1.2  mjacob void isp_put_notify(ispsoftc_t *, in_entry_t *, in_entry_t *);
    200  1.2  mjacob void isp_get_notify(ispsoftc_t *, in_entry_t *, in_entry_t *);
    201  1.2  mjacob void isp_put_notify_fc(ispsoftc_t *, in_fcentry_t *, in_fcentry_t *);
    202  1.2  mjacob void isp_put_notify_fc_e(ispsoftc_t *, in_fcentry_e_t *, in_fcentry_e_t *);
    203  1.2  mjacob void isp_put_notify_24xx(ispsoftc_t *, in_fcentry_24xx_t *, in_fcentry_24xx_t *);
    204  1.2  mjacob void isp_get_notify_fc(ispsoftc_t *, in_fcentry_t *, in_fcentry_t *);
    205  1.2  mjacob void isp_get_notify_fc_e(ispsoftc_t *, in_fcentry_e_t *, in_fcentry_e_t *);
    206  1.2  mjacob void isp_get_notify_24xx(ispsoftc_t *, in_fcentry_24xx_t *, in_fcentry_24xx_t *);
    207  1.2  mjacob void isp_put_notify_ack(ispsoftc_t *, na_entry_t *, na_entry_t *);
    208  1.2  mjacob void isp_get_notify_ack(ispsoftc_t *, na_entry_t *, na_entry_t *);
    209  1.2  mjacob void isp_put_notify_24xx_ack(ispsoftc_t *, na_fcentry_24xx_t *, na_fcentry_24xx_t *);
    210  1.2  mjacob void isp_put_notify_ack_fc(ispsoftc_t *, na_fcentry_t *, na_fcentry_t *);
    211  1.2  mjacob void isp_put_notify_ack_fc_e(ispsoftc_t *, na_fcentry_e_t *, na_fcentry_e_t *);
    212  1.2  mjacob void isp_put_notify_ack_24xx(ispsoftc_t *, na_fcentry_24xx_t *, na_fcentry_24xx_t *);
    213  1.2  mjacob void isp_get_notify_ack_fc(ispsoftc_t *, na_fcentry_t *, na_fcentry_t *);
    214  1.2  mjacob void isp_get_notify_ack_fc_e(ispsoftc_t *, na_fcentry_e_t *, na_fcentry_e_t *);
    215  1.2  mjacob void isp_get_notify_ack_24xx(ispsoftc_t *, na_fcentry_24xx_t *, na_fcentry_24xx_t *);
    216  1.2  mjacob void isp_get_abts(ispsoftc_t *, abts_t *, abts_t *);
    217  1.2  mjacob void isp_put_abts_rsp(ispsoftc_t *, abts_rsp_t *, abts_rsp_t *);
    218  1.2  mjacob void isp_get_abts_rsp(ispsoftc_t *, abts_rsp_t *, abts_rsp_t *);
    219  1.2  mjacob #endif /* ISP_TARGET_MODE */
    220  1.2  mjacob #endif /* _ISP_LIBRARY_H */
    221