1 /* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_USB_USBSER_PL2303_VAR_H 27 #define _SYS_USB_USBSER_PL2303_VAR_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 /* 32 * USB PL2303 definitions 33 */ 34 35 #include <sys/types.h> 36 #include <sys/dditypes.h> 37 #include <sys/note.h> 38 39 #include <sys/usb/clients/usbser/usbser_dsdi.h> 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 /* 46 * PM support 47 */ 48 typedef struct pl2303_power { 49 uint8_t pm_wakeup_enabled; /* remote wakeup enabled */ 50 uint8_t pm_pwr_states; /* bit mask of power states */ 51 boolean_t pm_raise_power; /* driver is about to raise power */ 52 uint8_t pm_cur_power; /* current power level */ 53 uint_t pm_busy_cnt; /* number of set_busy requests */ 54 } pl2303_pm_t; 55 56 57 /* 58 * From device driver's perspective, there is no difference 59 * between PL-2303HX(Chip A) and PL-2303X chips, so PL-2303X will 60 * stand for two chiptypes 61 */ 62 enum pl2303_chip { 63 pl2303_H, /* PL-2303H chip */ 64 pl2303_X, /* PL-2303X chip or PL-2303HX(Chip A) */ 65 pl2303_HX_CHIP_D, /* PL-2303HX(Chip D) */ 66 pl2303_UNKNOWN /* Unknown chip type */ 67 }; 68 69 /* 70 * per device state structure 71 */ 72 typedef struct pl2303_state { 73 kmutex_t pl_mutex; /* structure lock */ 74 dev_info_t *pl_dip; /* device info */ 75 int pl_dev_flags; /* device flags */ 76 int pl_port_state; /* port state */ 77 int pl_port_flags; /* port flags */ 78 ds_cb_t pl_cb; /* DSD callbacks */ 79 /* 80 * USBA 81 */ 82 usb_client_dev_data_t *pl_dev_data; /* registration data */ 83 usb_event_t *pl_usb_events; /* usb events */ 84 usb_pipe_handle_t pl_def_ph; /* default pipe hdl */ 85 usb_pipe_handle_t pl_bulkin_ph; /* in pipe hdl */ 86 int pl_bulkin_state; /* in pipe state */ 87 usb_pipe_handle_t pl_bulkout_ph; /* in pipe hdl */ 88 int pl_bulkout_state; /* out pipe state */ 89 usb_log_handle_t pl_lh; /* USBA log handle */ 90 int pl_dev_state; /* USB device state */ 91 size_t pl_xfer_sz; /* HCI bulk xfer size */ 92 pl2303_pm_t *pl_pm; /* PM support */ 93 /* 94 * data receipt and transmit 95 */ 96 mblk_t *pl_rx_mp; /* rx data */ 97 mblk_t *pl_tx_mp; /* tx data */ 98 kcondvar_t pl_tx_cv; /* tx completion */ 99 /* 100 * other 101 */ 102 uint8_t pl_mctl; /* modem controls */ 103 enum pl2303_chip pl_chiptype; /* chip type */ 104 } pl2303_state_t; 105 106 _NOTE(MUTEX_PROTECTS_DATA(pl2303_state::pl_mutex, pl2303_state)) 107 _NOTE(DATA_READABLE_WITHOUT_LOCK(pl2303_state::{ 108 pl_dip 109 pl_dev_data 110 pl_usb_events 111 pl_def_ph 112 pl_lh 113 pl_xfer_sz 114 pl_pm 115 pl_port_state 116 pl_cb.cb_rx 117 pl_cb.cb_tx 118 pl_cb.cb_arg 119 pl_bulkin_ph 120 pl_bulkout_ph 121 pl_chiptype 122 })) 123 124 125 /* port state */ 126 enum { 127 PL2303_PORT_CLOSED, /* port is closed */ 128 PL2303_PORT_OPEN, /* port is open */ 129 PL2303_PORT_CLOSING 130 }; 131 132 /* port flags */ 133 enum { 134 PL2303_PORT_TX_STOPPED = 0x0001 /* transmit not allowed */ 135 }; 136 137 /* pipe state */ 138 enum { 139 PL2303_PIPE_CLOSED, /* pipe is closed */ 140 PL2303_PIPE_IDLE, /* open but no requests */ 141 PL2303_PIPE_BUSY /* servicing request */ 142 }; 143 144 /* various tunables */ 145 enum { 146 PL2303_BULKOUT_TIMEOUT = 15, /* bulkout timeout */ 147 PL2303_BULKIN_TIMEOUT = 15, /* bulkin timeout */ 148 PL2303_XFER_SZ_MAX = 64, /* max xfer size */ 149 PL2303_CLEANUP_LEVEL_MAX = 6 /* cleanup level */ 150 }; 151 152 153 /* 154 * debug printing masks 155 */ 156 #define DPRINT_ATTACH 0x00000001 157 #define DPRINT_OPEN 0x00000002 158 #define DPRINT_CLOSE 0x00000004 159 #define DPRINT_DEF_PIPE 0x00000010 160 #define DPRINT_IN_PIPE 0x00000020 161 #define DPRINT_OUT_PIPE 0x00000040 162 #define DPRINT_IN_DATA 0x00000400 163 #define DPRINT_OUT_DATA 0x00000800 164 #define DPRINT_CTLOP 0x00001000 165 #define DPRINT_HOTPLUG 0x00002000 166 #define DPRINT_PM 0x00004000 167 #define DPRINT_MASK_ALL 0xFFFFFFFF 168 169 170 /* 171 * misc macros 172 */ 173 #define NELEM(a) (sizeof (a) / sizeof (*(a))) 174 175 #ifdef __cplusplus 176 } 177 #endif 178 179 #endif /* _SYS_USB_USBSER_PL2303_VAR_H */ 180