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