4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _USBSER_USBFTDI_UFTDI_VAR_H
27 #define _USBSER_USBFTDI_UFTDI_VAR_H
30 * USB UFTDI definitions
33 #include <sys/types.h>
34 #include <sys/dditypes.h>
37 #include <sys/usb/clients/usbser/usbser_dsdi.h>
46 typedef struct uftdi_pm
{
47 uint8_t pm_wakeup_enabled
; /* remote wakeup enabled */
48 uint8_t pm_pwr_states
; /* bit mask of power states */
49 boolean_t pm_raise_power
; /* driver is about to raise power */
50 uint8_t pm_cur_power
; /* current power level */
51 uint_t pm_busy_cnt
; /* number of set_busy requests */
54 typedef struct uftdi_regs
{
61 _NOTE(SCHEME_PROTECTS_DATA("uftdi_regs", uftdi_regs
))
64 * per device state structure
66 typedef struct uftdi_state
{
67 kmutex_t uf_lock
; /* structure lock */
68 dev_info_t
*uf_dip
; /* device info */
69 int uf_dev_flags
; /* device flags */
70 int uf_hwport
; /* hw port number */
71 int uf_port_state
; /* port state */
72 int uf_port_flags
; /* port flags */
73 ds_cb_t uf_cb
; /* DSD callbacks */
78 usb_client_dev_data_t
*uf_dev_data
; /* registration data */
79 usb_event_t
*uf_usb_events
; /* usb events */
80 usb_pipe_handle_t uf_def_ph
; /* default pipe hdl */
81 usb_pipe_handle_t uf_bulkin_ph
; /* in pipe hdl */
82 int uf_bulkin_state
; /* in pipe state */
83 usb_pipe_handle_t uf_bulkout_ph
; /* in pipe hdl */
84 int uf_bulkout_state
; /* out pipe state */
85 usb_log_handle_t uf_lh
; /* USBA log handle */
86 int uf_dev_state
; /* USB device state */
87 size_t uf_xfer_sz
; /* HCI bulk xfer size */
89 uftdi_pm_t
*uf_pm
; /* PM support */
92 * data receive and transmit
94 mblk_t
*uf_rx_mp
; /* rx data */
95 mblk_t
*uf_tx_mp
; /* tx data */
96 kcondvar_t uf_tx_cv
; /* tx completion */
101 uftdi_regs_t uf_softr
; /* config registers */
102 uint16_t uf_mctl
; /* modem control */
103 uint8_t uf_msr
; /* modem status */
104 uint8_t uf_lsr
; /* line status register */
108 _NOTE(MUTEX_PROTECTS_DATA(uftdi_state::uf_lock
, uftdi_state
))
109 _NOTE(DATA_READABLE_WITHOUT_LOCK(uftdi_state::{
126 UFTDI_PORT_CLOSED
, /* port is closed */
127 UFTDI_PORT_OPEN
, /* port is open */
133 UFTDI_PORT_TX_STOPPED
= 0x0001 /* transmit not allowed */
138 UFTDI_PIPE_CLOSED
, /* pipe is closed */
139 UFTDI_PIPE_IDLE
, /* open but no requests */
140 UFTDI_PIPE_BUSY
/* servicing request */
143 /* various numbers */
145 UFTDI_BULKOUT_TIMEOUT
= 15, /* bulkout timeout */
146 UFTDI_BULKIN_TIMEOUT
= 15, /* bulkin timeout */
147 UFTDI_XFER_SZ_MAX
= 64, /* max xfer size */
148 UFTDI_CLEANUP_LEVEL_MAX
= 6 /* cleanup level */
153 * debug printing masks
155 #define DPRINT_ATTACH 0x00000001
156 #define DPRINT_OPEN 0x00000002
157 #define DPRINT_CLOSE 0x00000004
158 #define DPRINT_DEF_PIPE 0x00000010
159 #define DPRINT_IN_PIPE 0x00000020
160 #define DPRINT_OUT_PIPE 0x00000040
161 #define DPRINT_IN_DATA 0x00000400
162 #define DPRINT_OUT_DATA 0x00000800
163 #define DPRINT_CTLOP 0x00001000
164 #define DPRINT_HOTPLUG 0x00002000
165 #define DPRINT_PM 0x00004000
166 #define DPRINT_MASK_ALL 0xFFFFFFFF
172 #endif /* _USBSER_USBFTDI_UFTDI_VAR_H */