160b08185Syz /*
260b08185Syz  * CDDL HEADER START
360b08185Syz  *
460b08185Syz  * The contents of this file are subject to the terms of the
502dd2108Slg  * Common Development and Distribution License (the "License").
602dd2108Slg  * You may not use this file except in compliance with the License.
760b08185Syz  *
860b08185Syz  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
960b08185Syz  * or http://www.opensolaris.org/os/licensing.
1060b08185Syz  * See the License for the specific language governing permissions
1160b08185Syz  * and limitations under the License.
1260b08185Syz  *
1360b08185Syz  * When distributing Covered Code, include this CDDL HEADER in each
1460b08185Syz  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1560b08185Syz  * If applicable, add the following below this CDDL HEADER, with the
1660b08185Syz  * fields enclosed by brackets "[]" replaced with your own identifying
1760b08185Syz  * information: Portions Copyright [yyyy] [name of copyright owner]
1860b08185Syz  *
1960b08185Syz  * CDDL HEADER END
2060b08185Syz  */
2160b08185Syz /*
22*d29f5a71Szhigang lu - Sun Microsystems - Beijing China  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
2360b08185Syz  * Use is subject to license terms.
2460b08185Syz  */
2560b08185Syz 
2660b08185Syz #ifndef _SYS_USB_USBSER_KEYSPAN_PIPE_H
2760b08185Syz #define	_SYS_USB_USBSER_KEYSPAN_PIPE_H
2860b08185Syz 
2960b08185Syz 
3060b08185Syz /*
3160b08185Syz  * USB pipe management (mostly device-neutral)
3260b08185Syz  */
3360b08185Syz 
3460b08185Syz #ifdef	__cplusplus
3560b08185Syz extern "C" {
3660b08185Syz #endif
3760b08185Syz 
3860b08185Syz /*
3960b08185Syz  * pipe structure
4060b08185Syz  */
4160b08185Syz typedef struct keyspan_pipe {
4260b08185Syz 	kmutex_t		pipe_mutex;	/* structure lock */
4360b08185Syz 	keyspan_state_t		*pipe_ksp;	/* backpointer to state */
4460b08185Syz 	usb_pipe_handle_t	pipe_handle;	/* pipe handle */
4560b08185Syz 	usb_ep_descr_t		pipe_ep_descr;	/* endpoint descriptor */
4660b08185Syz 	usb_pipe_policy_t	pipe_policy;	/* pipe policy */
4760b08185Syz 	int			pipe_state;	/* pipe state */
4860b08185Syz 	usb_log_handle_t	pipe_lh;	/* log handle */
4960b08185Syz } keyspan_pipe_t;
5060b08185Syz 
5160b08185Syz _NOTE(MUTEX_PROTECTS_DATA(keyspan_pipe::pipe_mutex, keyspan_pipe))
5260b08185Syz _NOTE(DATA_READABLE_WITHOUT_LOCK(keyspan_pipe::{
5360b08185Syz 	pipe_ksp
5460b08185Syz 	pipe_handle
5560b08185Syz 	pipe_lh
5660b08185Syz 	pipe_ep_descr
5760b08185Syz 	pipe_policy
5860b08185Syz }))
5960b08185Syz 
6060b08185Syz /* pipe states */
6160b08185Syz enum {
6260b08185Syz 	KEYSPAN_PIPE_NOT_INIT = 0,
6360b08185Syz 	KEYSPAN_PIPE_CLOSED,
6460b08185Syz 	KEYSPAN_PIPE_OPEN
6560b08185Syz };
6660b08185Syz 
6760b08185Syz 
6860b08185Syz int	keyspan_init_pipes(keyspan_state_t *);
6902dd2108Slg int	keyspan_init_pipes_usa49wg(keyspan_state_t *);
7060b08185Syz void	keyspan_fini_pipes(keyspan_state_t *);
7160b08185Syz int	keyspansp_open_pipes(keyspan_state_t *);
7260b08185Syz void	keyspansp_close_pipes(keyspan_state_t *);
7360b08185Syz int	keyspan_open_dev_pipes(keyspan_state_t *);
7460b08185Syz void	keyspan_close_dev_pipes(keyspan_state_t *);
7560b08185Syz int	keyspan_open_port_pipes(keyspan_port_t *);
7660b08185Syz void	keyspan_close_port_pipes(keyspan_port_t *);
7760b08185Syz int	keyspan_reopen_pipes(keyspan_state_t *);
7860b08185Syz void	keyspan_close_pipes(keyspan_state_t *);
7960b08185Syz void	keyspan_close_open_pipes(keyspan_state_t *esp);
8060b08185Syz 
8160b08185Syz int	keyspan_receive_data(keyspan_pipe_t *, int, void *);
8260b08185Syz int	keyspan_send_data(keyspan_pipe_t *, mblk_t **, void *);
8302dd2108Slg int	keyspan_send_data_port0(keyspan_pipe_t *, mblk_t **, void *);
8460b08185Syz 
8560b08185Syz int	keyspan_receive_status(keyspan_state_t	*);
8602dd2108Slg void	keyspan_pipe_start_polling(keyspan_pipe_t *);
8760b08185Syz 
8860b08185Syz #ifdef	__cplusplus
8960b08185Syz }
9060b08185Syz #endif
9160b08185Syz 
9260b08185Syz #endif	/* _SYS_USB_USBSER_KEYSPAN_PIPE_H */
93