1*25cf1a30Sjl /* 2*25cf1a30Sjl * CDDL HEADER START 3*25cf1a30Sjl * 4*25cf1a30Sjl * The contents of this file are subject to the terms of the 5*25cf1a30Sjl * Common Development and Distribution License (the "License"). 6*25cf1a30Sjl * You may not use this file except in compliance with the License. 7*25cf1a30Sjl * 8*25cf1a30Sjl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*25cf1a30Sjl * or http://www.opensolaris.org/os/licensing. 10*25cf1a30Sjl * See the License for the specific language governing permissions 11*25cf1a30Sjl * and limitations under the License. 12*25cf1a30Sjl * 13*25cf1a30Sjl * When distributing Covered Code, include this CDDL HEADER in each 14*25cf1a30Sjl * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*25cf1a30Sjl * If applicable, add the following below this CDDL HEADER, with the 16*25cf1a30Sjl * fields enclosed by brackets "[]" replaced with your own identifying 17*25cf1a30Sjl * information: Portions Copyright [yyyy] [name of copyright owner] 18*25cf1a30Sjl * 19*25cf1a30Sjl * CDDL HEADER END 20*25cf1a30Sjl */ 21*25cf1a30Sjl /* 22*25cf1a30Sjl * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006 23*25cf1a30Sjl */ 24*25cf1a30Sjl 25*25cf1a30Sjl #ifndef _OPLMSU_PROTO_H 26*25cf1a30Sjl #define _OPLMSU_PROTO_H 27*25cf1a30Sjl 28*25cf1a30Sjl #pragma ident "%Z%%M% %I% %E% SMI" 29*25cf1a30Sjl 30*25cf1a30Sjl #ifdef __cplusplus 31*25cf1a30Sjl extern "C" { 32*25cf1a30Sjl #endif 33*25cf1a30Sjl 34*25cf1a30Sjl /* 35*25cf1a30Sjl * PROTOTYPE DECLARATIONS 36*25cf1a30Sjl */ 37*25cf1a30Sjl 38*25cf1a30Sjl int oplmsu_attach(dev_info_t *, ddi_attach_cmd_t); 39*25cf1a30Sjl int oplmsu_detach(dev_info_t *, ddi_detach_cmd_t); 40*25cf1a30Sjl int oplmsu_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **); 41*25cf1a30Sjl int oplmsu_open(queue_t *, dev_t *, int, int, cred_t *); 42*25cf1a30Sjl int oplmsu_close(queue_t *, int, cred_t *); 43*25cf1a30Sjl int oplmsu_uwput(queue_t *, mblk_t *); 44*25cf1a30Sjl int oplmsu_uwsrv(queue_t *); 45*25cf1a30Sjl int oplmsu_lwsrv(queue_t *); 46*25cf1a30Sjl int oplmsu_lrput(queue_t *, mblk_t *); 47*25cf1a30Sjl int oplmsu_lrsrv(queue_t *); 48*25cf1a30Sjl int oplmsu_ursrv(queue_t *); 49*25cf1a30Sjl 50*25cf1a30Sjl int oplmsu_open_msu(dev_info_t *, ldi_ident_t *, ldi_handle_t *); 51*25cf1a30Sjl int oplmsu_plink_serial(dev_info_t *, ldi_handle_t, int *); 52*25cf1a30Sjl int oplmsu_set_lpathnum(int, int); 53*25cf1a30Sjl int oplmsu_dr_attach(dev_info_t *); 54*25cf1a30Sjl int oplmsu_dr_detach(dev_info_t *); 55*25cf1a30Sjl int oplmsu_find_serial(ser_devl_t **); 56*25cf1a30Sjl dev_info_t *oplmsu_find_ser_dip(dev_info_t *); 57*25cf1a30Sjl void oplmsu_conf_stream(uinst_t *); 58*25cf1a30Sjl void oplmsu_unlinks(ldi_handle_t, int *, int); 59*25cf1a30Sjl void oplmsu_setup(uinst_t *); 60*25cf1a30Sjl int oplmsu_create_upath(dev_info_t *); 61*25cf1a30Sjl int oplmsu_config_new(struct msu_path *); 62*25cf1a30Sjl int oplmsu_config_add(dev_info_t *); 63*25cf1a30Sjl int oplmsu_config_del(struct msu_path *); 64*25cf1a30Sjl int oplmsu_config_stop(int); 65*25cf1a30Sjl int oplmsu_config_start(int); 66*25cf1a30Sjl int oplmsu_config_disc(int); 67*25cf1a30Sjl 68*25cf1a30Sjl /* 69*25cf1a30Sjl * UPPER WRITE SERVICE PROCEDURE 70*25cf1a30Sjl */ 71*25cf1a30Sjl int oplmsu_uwioctl_iplink(queue_t *, mblk_t *); 72*25cf1a30Sjl int oplmsu_uwioctl_ipunlink(queue_t *, mblk_t *); 73*25cf1a30Sjl int oplmsu_uwioctl_termios(queue_t *, mblk_t *); 74*25cf1a30Sjl 75*25cf1a30Sjl /* 76*25cf1a30Sjl * LOWER READ SERVICE PROCEDURE 77*25cf1a30Sjl */ 78*25cf1a30Sjl int oplmsu_lrioctl_termios(queue_t *, mblk_t *); 79*25cf1a30Sjl int oplmsu_lrmsg_error(queue_t *, mblk_t *); 80*25cf1a30Sjl int oplmsu_lrdata_xoffxon(queue_t *, mblk_t *); 81*25cf1a30Sjl 82*25cf1a30Sjl /* 83*25cf1a30Sjl * COMMON FUNCTIONS 84*25cf1a30Sjl */ 85*25cf1a30Sjl void oplmsu_link_upath(upath_t *); 86*25cf1a30Sjl void oplmsu_unlink_upath(upath_t *); 87*25cf1a30Sjl void oplmsu_link_lpath(lpath_t *); 88*25cf1a30Sjl void oplmsu_unlink_lpath(lpath_t *); 89*25cf1a30Sjl void oplmsu_link_high_primsg(mblk_t **, mblk_t **, mblk_t *); 90*25cf1a30Sjl int oplmsu_check_lpath_usable(void); 91*25cf1a30Sjl upath_t *oplmsu_search_upath_info(int); 92*25cf1a30Sjl 93*25cf1a30Sjl void oplmsu_iocack(queue_t *, mblk_t *, int); 94*25cf1a30Sjl void oplmsu_delete_upath_info(void); 95*25cf1a30Sjl int oplmsu_set_ioctl_path(lpath_t *, queue_t *, mblk_t *); 96*25cf1a30Sjl void oplmsu_clear_ioctl_path(lpath_t *); 97*25cf1a30Sjl 98*25cf1a30Sjl int oplmsu_get_inst_status(void); 99*25cf1a30Sjl upath_t *oplmsu_search_standby(void); 100*25cf1a30Sjl void oplmsu_search_min_stop_path(void); 101*25cf1a30Sjl int oplmsu_get_pathnum(void); 102*25cf1a30Sjl int oplmsu_cmn_put_xoffxon(queue_t *, int); 103*25cf1a30Sjl void oplmsu_cmn_putxoff_standby(void); 104*25cf1a30Sjl void oplmsu_cmn_set_mflush(mblk_t *); 105*25cf1a30Sjl void oplmsu_cmn_set_upath_sts(upath_t *, int, int, ulong_t); 106*25cf1a30Sjl int oplmsu_cmn_allocmb(queue_t *, mblk_t *, mblk_t **, size_t, int); 107*25cf1a30Sjl int oplmsu_cmn_copymb(queue_t *, mblk_t *, mblk_t **, mblk_t *, int); 108*25cf1a30Sjl void oplmsu_cmn_bufcall(queue_t *, mblk_t *, size_t, int); 109*25cf1a30Sjl int oplmsu_cmn_prechg(queue_t *, mblk_t *, int, mblk_t **, int *, int *); 110*25cf1a30Sjl int oplmsu_stop_prechg(mblk_t **, int *, int *); 111*25cf1a30Sjl int oplmsu_cmn_prechg_termio(queue_t *, mblk_t *, int, int, mblk_t **, 112*25cf1a30Sjl int *); 113*25cf1a30Sjl int oplmsu_cmn_pullup_msg(queue_t *, mblk_t *); 114*25cf1a30Sjl 115*25cf1a30Sjl void oplmsu_cmn_wakeup(queue_t *); 116*25cf1a30Sjl void oplmsu_cmn_bufcb(void *); 117*25cf1a30Sjl void oplmsu_wbufcb_posthndl(ctrl_t *); 118*25cf1a30Sjl 119*25cf1a30Sjl /* 120*25cf1a30Sjl * common functions for write stream 121*25cf1a30Sjl */ 122*25cf1a30Sjl int oplmsu_wcmn_chknode(queue_t *, int, mblk_t *); 123*25cf1a30Sjl void oplmsu_wcmn_flush_hndl(queue_t *, mblk_t *, krw_t); 124*25cf1a30Sjl int oplmsu_wcmn_through_hndl(queue_t *, mblk_t *, int, krw_t); 125*25cf1a30Sjl mblk_t *oplmsu_wcmn_high_getq(queue_t *); 126*25cf1a30Sjl void oplmsu_wcmn_norm_putbq(queue_t *, mblk_t *, queue_t *); 127*25cf1a30Sjl void oplmsu_wcmn_high_qenable(queue_t *, krw_t); 128*25cf1a30Sjl 129*25cf1a30Sjl /* 130*25cf1a30Sjl * common functions for read stream 131*25cf1a30Sjl */ 132*25cf1a30Sjl void oplmsu_rcmn_flush_hndl(queue_t *, mblk_t *); 133*25cf1a30Sjl int oplmsu_rcmn_through_hndl(queue_t *, mblk_t *, int); 134*25cf1a30Sjl void oplmsu_rcmn_high_qenable(queue_t *); 135*25cf1a30Sjl 136*25cf1a30Sjl 137*25cf1a30Sjl #ifdef DEBUG 138*25cf1a30Sjl void oplmsu_cmn_trace(queue_t *, mblk_t *, int); 139*25cf1a30Sjl void oplmsu_cmn_msglog(mblk_t *, int); 140*25cf1a30Sjl void oplmsu_cmn_prt_pathname(dev_info_t *); 141*25cf1a30Sjl #endif 142*25cf1a30Sjl 143*25cf1a30Sjl 144*25cf1a30Sjl /* 145*25cf1a30Sjl * GLOBAL VARIABLES 146*25cf1a30Sjl */ 147*25cf1a30Sjl extern uinst_t *oplmsu_uinst; 148*25cf1a30Sjl extern int oplmsu_queue_flag; 149*25cf1a30Sjl extern int oplmsu_check_su; 150*25cf1a30Sjl 151*25cf1a30Sjl #ifdef DEBUG 152*25cf1a30Sjl extern int oplmsu_debug_mode; 153*25cf1a30Sjl extern int oplmsu_trace_on; 154*25cf1a30Sjl extern uint_t oplmsu_ltrc_size; 155*25cf1a30Sjl extern msu_trc_t *oplmsu_ltrc_top; 156*25cf1a30Sjl extern msu_trc_t *oplmsu_ltrc_tail; 157*25cf1a30Sjl extern msu_trc_t *oplmsu_ltrc_cur; 158*25cf1a30Sjl extern ulong_t oplmsu_ltrc_ccnt; 159*25cf1a30Sjl extern kmutex_t oplmsu_ltrc_lock; 160*25cf1a30Sjl #endif 161*25cf1a30Sjl 162*25cf1a30Sjl #ifdef __cplusplus 163*25cf1a30Sjl } 164*25cf1a30Sjl #endif 165*25cf1a30Sjl 166*25cf1a30Sjl #endif /* _OPLMSU_PROTO_H */ 167