14de26129Sxs /* 24de26129Sxs * CDDL HEADER START 34de26129Sxs * 44de26129Sxs * The contents of this file are subject to the terms of the 5cbab2b26Slg * Common Development and Distribution License (the "License"). 6cbab2b26Slg * You may not use this file except in compliance with the License. 74de26129Sxs * 84de26129Sxs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 94de26129Sxs * or http://www.opensolaris.org/os/licensing. 104de26129Sxs * See the License for the specific language governing permissions 114de26129Sxs * and limitations under the License. 124de26129Sxs * 134de26129Sxs * When distributing Covered Code, include this CDDL HEADER in each 144de26129Sxs * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 154de26129Sxs * If applicable, add the following below this CDDL HEADER, with the 164de26129Sxs * fields enclosed by brackets "[]" replaced with your own identifying 174de26129Sxs * information: Portions Copyright [yyyy] [name of copyright owner] 184de26129Sxs * 194de26129Sxs * CDDL HEADER END 204de26129Sxs */ 214de26129Sxs /* 22*d29f5a71Szhigang lu - Sun Microsystems - Beijing China * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 234de26129Sxs * Use is subject to license terms. 244de26129Sxs */ 254de26129Sxs 264de26129Sxs #ifndef _SYS_USB_USBSER_PL2303_VAR_H 274de26129Sxs #define _SYS_USB_USBSER_PL2303_VAR_H 284de26129Sxs 294de26129Sxs 304de26129Sxs /* 314de26129Sxs * USB PL2303 definitions 324de26129Sxs */ 334de26129Sxs 344de26129Sxs #include <sys/types.h> 354de26129Sxs #include <sys/dditypes.h> 364de26129Sxs #include <sys/note.h> 374de26129Sxs 384de26129Sxs #include <sys/usb/clients/usbser/usbser_dsdi.h> 394de26129Sxs 404de26129Sxs #ifdef __cplusplus 414de26129Sxs extern "C" { 424de26129Sxs #endif 434de26129Sxs 444de26129Sxs /* 454de26129Sxs * PM support 464de26129Sxs */ 474de26129Sxs typedef struct pl2303_power { 484de26129Sxs uint8_t pm_wakeup_enabled; /* remote wakeup enabled */ 494de26129Sxs uint8_t pm_pwr_states; /* bit mask of power states */ 504de26129Sxs boolean_t pm_raise_power; /* driver is about to raise power */ 514de26129Sxs uint8_t pm_cur_power; /* current power level */ 524de26129Sxs uint_t pm_busy_cnt; /* number of set_busy requests */ 534de26129Sxs } pl2303_pm_t; 544de26129Sxs 554de26129Sxs 564de26129Sxs /* 574de26129Sxs * From device driver's perspective, there is no difference 58cbab2b26Slg * between PL-2303HX(Chip A) and PL-2303X chips, so PL-2303X will 594de26129Sxs * stand for two chiptypes 604de26129Sxs */ 614de26129Sxs enum pl2303_chip { 624de26129Sxs pl2303_H, /* PL-2303H chip */ 63cbab2b26Slg pl2303_X, /* PL-2303X chip or PL-2303HX(Chip A) */ 64cbab2b26Slg pl2303_HX_CHIP_D, /* PL-2303HX(Chip D) */ 65cbab2b26Slg pl2303_UNKNOWN /* Unknown chip type */ 664de26129Sxs }; 674de26129Sxs 684de26129Sxs /* 694de26129Sxs * per device state structure 704de26129Sxs */ 714de26129Sxs typedef struct pl2303_state { 724de26129Sxs kmutex_t pl_mutex; /* structure lock */ 734de26129Sxs dev_info_t *pl_dip; /* device info */ 744de26129Sxs int pl_dev_flags; /* device flags */ 754de26129Sxs int pl_port_state; /* port state */ 764de26129Sxs int pl_port_flags; /* port flags */ 774de26129Sxs ds_cb_t pl_cb; /* DSD callbacks */ 784de26129Sxs /* 794de26129Sxs * USBA 804de26129Sxs */ 814de26129Sxs usb_client_dev_data_t *pl_dev_data; /* registration data */ 824de26129Sxs usb_event_t *pl_usb_events; /* usb events */ 834de26129Sxs usb_pipe_handle_t pl_def_ph; /* default pipe hdl */ 844de26129Sxs usb_pipe_handle_t pl_bulkin_ph; /* in pipe hdl */ 854de26129Sxs int pl_bulkin_state; /* in pipe state */ 864de26129Sxs usb_pipe_handle_t pl_bulkout_ph; /* in pipe hdl */ 874de26129Sxs int pl_bulkout_state; /* out pipe state */ 884de26129Sxs usb_log_handle_t pl_lh; /* USBA log handle */ 894de26129Sxs int pl_dev_state; /* USB device state */ 904de26129Sxs size_t pl_xfer_sz; /* HCI bulk xfer size */ 914de26129Sxs pl2303_pm_t *pl_pm; /* PM support */ 924de26129Sxs /* 934de26129Sxs * data receipt and transmit 944de26129Sxs */ 954de26129Sxs mblk_t *pl_rx_mp; /* rx data */ 964de26129Sxs mblk_t *pl_tx_mp; /* tx data */ 974de26129Sxs kcondvar_t pl_tx_cv; /* tx completion */ 984de26129Sxs /* 994de26129Sxs * other 1004de26129Sxs */ 1014de26129Sxs uint8_t pl_mctl; /* modem controls */ 1024de26129Sxs enum pl2303_chip pl_chiptype; /* chip type */ 1034de26129Sxs } pl2303_state_t; 1044de26129Sxs 1054de26129Sxs _NOTE(MUTEX_PROTECTS_DATA(pl2303_state::pl_mutex, pl2303_state)) 1064de26129Sxs _NOTE(DATA_READABLE_WITHOUT_LOCK(pl2303_state::{ 1074de26129Sxs pl_dip 1084de26129Sxs pl_dev_data 1094de26129Sxs pl_usb_events 1104de26129Sxs pl_def_ph 1114de26129Sxs pl_lh 1124de26129Sxs pl_xfer_sz 1134de26129Sxs pl_pm 1144de26129Sxs pl_port_state 1154de26129Sxs pl_cb.cb_rx 1164de26129Sxs pl_cb.cb_tx 1174de26129Sxs pl_cb.cb_arg 1184de26129Sxs pl_bulkin_ph 1194de26129Sxs pl_bulkout_ph 1204de26129Sxs pl_chiptype 1214de26129Sxs })) 1224de26129Sxs 1234de26129Sxs 1244de26129Sxs /* port state */ 1254de26129Sxs enum { 1264de26129Sxs PL2303_PORT_CLOSED, /* port is closed */ 1274de26129Sxs PL2303_PORT_OPEN, /* port is open */ 1284de26129Sxs PL2303_PORT_CLOSING 1294de26129Sxs }; 1304de26129Sxs 1314de26129Sxs /* port flags */ 1324de26129Sxs enum { 1334de26129Sxs PL2303_PORT_TX_STOPPED = 0x0001 /* transmit not allowed */ 1344de26129Sxs }; 1354de26129Sxs 1364de26129Sxs /* pipe state */ 1374de26129Sxs enum { 1384de26129Sxs PL2303_PIPE_CLOSED, /* pipe is closed */ 1394de26129Sxs PL2303_PIPE_IDLE, /* open but no requests */ 1404de26129Sxs PL2303_PIPE_BUSY /* servicing request */ 1414de26129Sxs }; 1424de26129Sxs 1434de26129Sxs /* various tunables */ 1444de26129Sxs enum { 1454de26129Sxs PL2303_BULKOUT_TIMEOUT = 15, /* bulkout timeout */ 1464de26129Sxs PL2303_BULKIN_TIMEOUT = 15, /* bulkin timeout */ 1474de26129Sxs PL2303_XFER_SZ_MAX = 64, /* max xfer size */ 1486918308bSyz PL2303_CLEANUP_LEVEL_MAX = 6 /* cleanup level */ 1494de26129Sxs }; 1504de26129Sxs 1514de26129Sxs 1524de26129Sxs /* 1534de26129Sxs * debug printing masks 1544de26129Sxs */ 1554de26129Sxs #define DPRINT_ATTACH 0x00000001 1564de26129Sxs #define DPRINT_OPEN 0x00000002 1574de26129Sxs #define DPRINT_CLOSE 0x00000004 1584de26129Sxs #define DPRINT_DEF_PIPE 0x00000010 1594de26129Sxs #define DPRINT_IN_PIPE 0x00000020 1604de26129Sxs #define DPRINT_OUT_PIPE 0x00000040 1614de26129Sxs #define DPRINT_IN_DATA 0x00000400 1624de26129Sxs #define DPRINT_OUT_DATA 0x00000800 1634de26129Sxs #define DPRINT_CTLOP 0x00001000 1644de26129Sxs #define DPRINT_HOTPLUG 0x00002000 1654de26129Sxs #define DPRINT_PM 0x00004000 1664de26129Sxs #define DPRINT_MASK_ALL 0xFFFFFFFF 1674de26129Sxs 1684de26129Sxs 1694de26129Sxs /* 1704de26129Sxs * misc macros 1714de26129Sxs */ 1724de26129Sxs #define NELEM(a) (sizeof (a) / sizeof (*(a))) 1734de26129Sxs 1744de26129Sxs #ifdef __cplusplus 1754de26129Sxs } 1764de26129Sxs #endif 1774de26129Sxs 1784de26129Sxs #endif /* _SYS_USB_USBSER_PL2303_VAR_H */ 179