25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER START
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The contents of this file are subject to the terms of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Common Development and Distribution License (the "License").
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You may not use this file except in compliance with the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * or http://www.opensolaris.org/os/licensing.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * See the License for the specific language governing permissions
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * and limitations under the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * When distributing Covered Code, include this CDDL HEADER in each
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * If applicable, add the following below this CDDL HEADER, with the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * fields enclosed by brackets "[]" replaced with your own identifying
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * information: Portions Copyright [yyyy] [name of copyright owner]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER END
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef _OPLMSU_PROTO_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define _OPLMSU_PROTO_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#pragma ident "%Z%%M% %I% %E% SMI"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern "C" {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * PROTOTYPE DECLARATIONS
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_attach(dev_info_t *, ddi_attach_cmd_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_detach(dev_info_t *, ddi_detach_cmd_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_open(queue_t *, dev_t *, int, int, cred_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_close(queue_t *, int, cred_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_uwput(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_uwsrv(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_lwsrv(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_lrput(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_lrsrv(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_ursrv(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_open_msu(dev_info_t *, ldi_ident_t *, ldi_handle_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_plink_serial(dev_info_t *, ldi_handle_t, int *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_set_lpathnum(int, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_dr_attach(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_dr_detach(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_find_serial(ser_devl_t **);
25cf1a301a396c38e8adf52c15f537b80d2483f7jldev_info_t *oplmsu_find_ser_dip(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_conf_stream(uinst_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_unlinks(ldi_handle_t, int *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_setup(uinst_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_create_upath(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_config_new(struct msu_path *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_config_add(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_config_del(struct msu_path *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_config_stop(int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_config_start(int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_config_disc(int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * UPPER WRITE SERVICE PROCEDURE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_uwioctl_iplink(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_uwioctl_ipunlink(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_uwioctl_termios(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * LOWER READ SERVICE PROCEDURE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_lrioctl_termios(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_lrmsg_error(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_lrdata_xoffxon(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * COMMON FUNCTIONS
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_link_upath(upath_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_unlink_upath(upath_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_link_lpath(lpath_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_unlink_lpath(lpath_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_link_high_primsg(mblk_t **, mblk_t **, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_check_lpath_usable(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlupath_t *oplmsu_search_upath_info(int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_iocack(queue_t *, mblk_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_delete_upath_info(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_set_ioctl_path(lpath_t *, queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_clear_ioctl_path(lpath_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_get_inst_status(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlupath_t *oplmsu_search_standby(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_search_min_stop_path(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_get_pathnum(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_cmn_put_xoffxon(queue_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_putxoff_standby(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_set_mflush(mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_set_upath_sts(upath_t *, int, int, ulong_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_cmn_allocmb(queue_t *, mblk_t *, mblk_t **, size_t, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_cmn_copymb(queue_t *, mblk_t *, mblk_t **, mblk_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_bufcall(queue_t *, mblk_t *, size_t, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_cmn_prechg(queue_t *, mblk_t *, int, mblk_t **, int *, int *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_stop_prechg(mblk_t **, int *, int *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_cmn_prechg_termio(queue_t *, mblk_t *, int, int, mblk_t **,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_cmn_pullup_msg(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_wakeup(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_bufcb(void *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_wbufcb_posthndl(ctrl_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * common functions for write stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_wcmn_chknode(queue_t *, int, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_wcmn_flush_hndl(queue_t *, mblk_t *, krw_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_wcmn_through_hndl(queue_t *, mblk_t *, int, krw_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlmblk_t *oplmsu_wcmn_high_getq(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_wcmn_norm_putbq(queue_t *, mblk_t *, queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_wcmn_high_qenable(queue_t *, krw_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * common functions for read stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_rcmn_flush_hndl(queue_t *, mblk_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlint oplmsu_rcmn_through_hndl(queue_t *, mblk_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_rcmn_high_qenable(queue_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef DEBUG
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_trace(queue_t *, mblk_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_msglog(mblk_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid oplmsu_cmn_prt_pathname(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * GLOBAL VARIABLES
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uinst_t *oplmsu_uinst;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int oplmsu_queue_flag;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int oplmsu_check_su;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef DEBUG
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int oplmsu_debug_mode;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int oplmsu_trace_on;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t oplmsu_ltrc_size;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern msu_trc_t *oplmsu_ltrc_top;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern msu_trc_t *oplmsu_ltrc_tail;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern msu_trc_t *oplmsu_ltrc_cur;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern ulong_t oplmsu_ltrc_ccnt;
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern kmutex_t oplmsu_ltrc_lock;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif /* _OPLMSU_PROTO_H */