1de81e71eSTim Marsland /*
2de81e71eSTim Marsland  * CDDL HEADER START
3de81e71eSTim Marsland  *
4de81e71eSTim Marsland  * The contents of this file are subject to the terms of the
5de81e71eSTim Marsland  * Common Development and Distribution License (the "License").
6de81e71eSTim Marsland  * You may not use this file except in compliance with the License.
7de81e71eSTim Marsland  *
8de81e71eSTim Marsland  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9de81e71eSTim Marsland  * or http://www.opensolaris.org/os/licensing.
10de81e71eSTim Marsland  * See the License for the specific language governing permissions
11de81e71eSTim Marsland  * and limitations under the License.
12de81e71eSTim Marsland  *
13de81e71eSTim Marsland  * When distributing Covered Code, include this CDDL HEADER in each
14de81e71eSTim Marsland  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15de81e71eSTim Marsland  * If applicable, add the following below this CDDL HEADER, with the
16de81e71eSTim Marsland  * fields enclosed by brackets "[]" replaced with your own identifying
17de81e71eSTim Marsland  * information: Portions Copyright [yyyy] [name of copyright owner]
18de81e71eSTim Marsland  *
19de81e71eSTim Marsland  * CDDL HEADER END
20de81e71eSTim Marsland  */
21de81e71eSTim Marsland /*
22de81e71eSTim Marsland  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23de81e71eSTim Marsland  * Use is subject to license terms.
24de81e71eSTim Marsland  */
25*452fab4bSHans Rosenfeld /*
26*452fab4bSHans Rosenfeld  * Copyright 2013 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
27*452fab4bSHans Rosenfeld  */
28de81e71eSTim Marsland 
29de81e71eSTim Marsland #ifndef _USBSER_USBFTDI_UFTDI_VAR_H
30de81e71eSTim Marsland #define	_USBSER_USBFTDI_UFTDI_VAR_H
31de81e71eSTim Marsland 
32de81e71eSTim Marsland /*
33de81e71eSTim Marsland  * USB UFTDI definitions
34de81e71eSTim Marsland  */
35de81e71eSTim Marsland 
36de81e71eSTim Marsland #include <sys/types.h>
37de81e71eSTim Marsland #include <sys/dditypes.h>
38de81e71eSTim Marsland #include <sys/note.h>
39de81e71eSTim Marsland 
40de81e71eSTim Marsland #include <sys/usb/clients/usbser/usbser_dsdi.h>
41de81e71eSTim Marsland 
42de81e71eSTim Marsland #ifdef	__cplusplus
43de81e71eSTim Marsland extern "C" {
44de81e71eSTim Marsland #endif
45de81e71eSTim Marsland 
46de81e71eSTim Marsland /*
47de81e71eSTim Marsland  * PM support
48de81e71eSTim Marsland  */
49de81e71eSTim Marsland typedef struct uftdi_pm {
50de81e71eSTim Marsland 	uint8_t		pm_wakeup_enabled;	/* remote wakeup enabled */
51de81e71eSTim Marsland 	uint8_t		pm_pwr_states;	/* bit mask of power states */
52de81e71eSTim Marsland 	boolean_t	pm_raise_power;	/* driver is about to raise power */
53de81e71eSTim Marsland 	uint8_t		pm_cur_power;	/* current power level */
54de81e71eSTim Marsland 	uint_t		pm_busy_cnt;	/* number of set_busy requests */
55de81e71eSTim Marsland } uftdi_pm_t;
56de81e71eSTim Marsland 
57de81e71eSTim Marsland typedef struct uftdi_regs {
58de81e71eSTim Marsland 	uint16_t	ur_baud;
59de81e71eSTim Marsland 	uint16_t	ur_data;
60de81e71eSTim Marsland 	uint16_t	ur_flowval;
61de81e71eSTim Marsland 	uint16_t	ur_flowidx;
62de81e71eSTim Marsland } uftdi_regs_t;
63de81e71eSTim Marsland 
64de81e71eSTim Marsland _NOTE(SCHEME_PROTECTS_DATA("uftdi_regs", uftdi_regs))
65de81e71eSTim Marsland 
66de81e71eSTim Marsland /*
67de81e71eSTim Marsland  * per device state structure
68de81e71eSTim Marsland  */
69de81e71eSTim Marsland typedef struct uftdi_state {
70de81e71eSTim Marsland 	kmutex_t		uf_lock;		/* structure lock */
71de81e71eSTim Marsland 	dev_info_t		*uf_dip;		/* device info */
72de81e71eSTim Marsland 	int			uf_dev_flags;		/* device flags */
731babaf94SHans Rosenfeld 	int			uf_hwport;		/* hw port number */
74de81e71eSTim Marsland 	int			uf_port_state;		/* port state */
75de81e71eSTim Marsland 	int			uf_port_flags;		/* port flags */
76de81e71eSTim Marsland 	ds_cb_t			uf_cb;			/* DSD callbacks */
77de81e71eSTim Marsland 
78de81e71eSTim Marsland 	/*
79de81e71eSTim Marsland 	 * USBA
80de81e71eSTim Marsland 	 */
81de81e71eSTim Marsland 	usb_client_dev_data_t	*uf_dev_data;		/* registration data */
82de81e71eSTim Marsland 	usb_event_t		*uf_usb_events;		/* usb events */
83de81e71eSTim Marsland 	usb_pipe_handle_t	uf_def_ph;		/* default pipe hdl */
84de81e71eSTim Marsland 	usb_pipe_handle_t	uf_bulkin_ph;		/* in pipe hdl */
85de81e71eSTim Marsland 	int			uf_bulkin_state;	/* in pipe state */
86de81e71eSTim Marsland 	usb_pipe_handle_t	uf_bulkout_ph;		/* in pipe hdl */
87de81e71eSTim Marsland 	int			uf_bulkout_state;	/* out pipe state */
88de81e71eSTim Marsland 	usb_log_handle_t	uf_lh;			/* USBA log handle */
89de81e71eSTim Marsland 	int			uf_dev_state;		/* USB device state */
90*452fab4bSHans Rosenfeld 	size_t			uf_ibuf_sz;		/* input buffer size */
91*452fab4bSHans Rosenfeld 	size_t			uf_obuf_sz;		/* output buffer size */
92de81e71eSTim Marsland 
93de81e71eSTim Marsland 	uftdi_pm_t		*uf_pm;			/* PM support */
94de81e71eSTim Marsland 
95de81e71eSTim Marsland 	/*
96de81e71eSTim Marsland 	 * data receive and transmit
97de81e71eSTim Marsland 	 */
98de81e71eSTim Marsland 	mblk_t			*uf_rx_mp;		/* rx data */
99de81e71eSTim Marsland 	mblk_t			*uf_tx_mp;		/* tx data */
100de81e71eSTim Marsland 	kcondvar_t		uf_tx_cv;		/* tx completion */
101de81e71eSTim Marsland 
102de81e71eSTim Marsland 	/*
103de81e71eSTim Marsland 	 * soft registers
104de81e71eSTim Marsland 	 */
105de81e71eSTim Marsland 	uftdi_regs_t		uf_softr;	/* config registers */
106de81e71eSTim Marsland 	uint16_t		uf_mctl;	/* modem control */
107de81e71eSTim Marsland 	uint8_t			uf_msr;		/* modem status */
108de81e71eSTim Marsland 	uint8_t			uf_lsr;		/* line status register */
109de81e71eSTim Marsland 
110de81e71eSTim Marsland } uftdi_state_t;
111de81e71eSTim Marsland 
112de81e71eSTim Marsland _NOTE(MUTEX_PROTECTS_DATA(uftdi_state::uf_lock, uftdi_state))
113de81e71eSTim Marsland _NOTE(DATA_READABLE_WITHOUT_LOCK(uftdi_state::{
114de81e71eSTim Marsland 	uf_dip
115de81e71eSTim Marsland 	uf_dev_data
116de81e71eSTim Marsland 	uf_usb_events
117de81e71eSTim Marsland 	uf_def_ph
118de81e71eSTim Marsland 	uf_lh
119*452fab4bSHans Rosenfeld 	uf_ibuf_sz
120*452fab4bSHans Rosenfeld 	uf_obuf_sz
121de81e71eSTim Marsland 	uf_pm
122de81e71eSTim Marsland 	uf_port_state
1234634c44fSTim Marsland 	uf_cb
124de81e71eSTim Marsland 	uf_bulkin_ph
125de81e71eSTim Marsland 	uf_bulkout_ph
1261babaf94SHans Rosenfeld 	uf_hwport
127de81e71eSTim Marsland }))
128de81e71eSTim Marsland 
129de81e71eSTim Marsland /* port state */
130de81e71eSTim Marsland enum {
131de81e71eSTim Marsland 	UFTDI_PORT_CLOSED,			/* port is closed */
132de81e71eSTim Marsland 	UFTDI_PORT_OPEN,			/* port is open */
133de81e71eSTim Marsland 	UFTDI_PORT_CLOSING
134de81e71eSTim Marsland };
135de81e71eSTim Marsland 
136de81e71eSTim Marsland /* port flags */
137de81e71eSTim Marsland enum {
138de81e71eSTim Marsland 	UFTDI_PORT_TX_STOPPED	= 0x0001	/* transmit not allowed */
139de81e71eSTim Marsland };
140de81e71eSTim Marsland 
141de81e71eSTim Marsland /* pipe state */
142de81e71eSTim Marsland enum {
143de81e71eSTim Marsland 	UFTDI_PIPE_CLOSED,			/* pipe is closed */
144de81e71eSTim Marsland 	UFTDI_PIPE_IDLE,			/* open but no requests */
145de81e71eSTim Marsland 	UFTDI_PIPE_BUSY			/* servicing request */
146de81e71eSTim Marsland };
147de81e71eSTim Marsland 
148de81e71eSTim Marsland /* various numbers */
149de81e71eSTim Marsland enum {
150de81e71eSTim Marsland 	UFTDI_BULKOUT_TIMEOUT		= 15,	/* bulkout timeout */
151de81e71eSTim Marsland 	UFTDI_BULKIN_TIMEOUT		= 15,	/* bulkin timeout */
152de81e71eSTim Marsland 	UFTDI_XFER_SZ_MAX		= 64,	/* max xfer size */
153de81e71eSTim Marsland 	UFTDI_CLEANUP_LEVEL_MAX	= 6	/* cleanup level */
154de81e71eSTim Marsland };
155de81e71eSTim Marsland 
156de81e71eSTim Marsland 
157de81e71eSTim Marsland /*
158de81e71eSTim Marsland  * debug printing masks
159de81e71eSTim Marsland  */
160de81e71eSTim Marsland #define	DPRINT_ATTACH		0x00000001
161de81e71eSTim Marsland #define	DPRINT_OPEN		0x00000002
162de81e71eSTim Marsland #define	DPRINT_CLOSE		0x00000004
163de81e71eSTim Marsland #define	DPRINT_DEF_PIPE		0x00000010
164de81e71eSTim Marsland #define	DPRINT_IN_PIPE		0x00000020
165de81e71eSTim Marsland #define	DPRINT_OUT_PIPE		0x00000040
166de81e71eSTim Marsland #define	DPRINT_IN_DATA		0x00000400
167de81e71eSTim Marsland #define	DPRINT_OUT_DATA		0x00000800
168de81e71eSTim Marsland #define	DPRINT_CTLOP		0x00001000
169de81e71eSTim Marsland #define	DPRINT_HOTPLUG		0x00002000
170de81e71eSTim Marsland #define	DPRINT_PM		0x00004000
171de81e71eSTim Marsland #define	DPRINT_MASK_ALL		0xFFFFFFFF
172de81e71eSTim Marsland 
173de81e71eSTim Marsland #ifdef	__cplusplus
174de81e71eSTim Marsland }
175de81e71eSTim Marsland #endif
176de81e71eSTim Marsland 
177de81e71eSTim Marsland #endif	/* _USBSER_USBFTDI_UFTDI_VAR_H */
178