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