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 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 /* 26 * Copyright 2012 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org> 27 */ 28 29 #ifndef _USBSER_USBFTDI_UFTDI_VAR_H 30 #define _USBSER_USBFTDI_UFTDI_VAR_H 31 32 /* 33 * USB UFTDI definitions 34 */ 35 36 #include <sys/types.h> 37 #include <sys/dditypes.h> 38 #include <sys/note.h> 39 40 #include <sys/usb/clients/usbser/usbser_dsdi.h> 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /* 47 * PM support 48 */ 49 typedef struct uftdi_pm { 50 uint8_t pm_wakeup_enabled; /* remote wakeup enabled */ 51 uint8_t pm_pwr_states; /* bit mask of power states */ 52 boolean_t pm_raise_power; /* driver is about to raise power */ 53 uint8_t pm_cur_power; /* current power level */ 54 uint_t pm_busy_cnt; /* number of set_busy requests */ 55 } uftdi_pm_t; 56 57 typedef struct uftdi_regs { 58 uint16_t ur_baud; 59 uint16_t ur_data; 60 uint16_t ur_flowval; 61 uint16_t ur_flowidx; 62 } uftdi_regs_t; 63 64 _NOTE(SCHEME_PROTECTS_DATA("uftdi_regs", uftdi_regs)) 65 66 /* 67 * per device state structure 68 */ 69 typedef struct uftdi_state { 70 kmutex_t uf_lock; /* structure lock */ 71 dev_info_t *uf_dip; /* device info */ 72 int uf_dev_flags; /* device flags */ 73 int uf_hwport; /* hw port number */ 74 int uf_port_state; /* port state */ 75 int uf_port_flags; /* port flags */ 76 ds_cb_t uf_cb; /* DSD callbacks */ 77 78 /* 79 * USBA 80 */ 81 usb_client_dev_data_t *uf_dev_data; /* registration data */ 82 usb_event_t *uf_usb_events; /* usb events */ 83 usb_pipe_handle_t uf_def_ph; /* default pipe hdl */ 84 usb_pipe_handle_t uf_bulkin_ph; /* in pipe hdl */ 85 int uf_bulkin_state; /* in pipe state */ 86 usb_pipe_handle_t uf_bulkout_ph; /* in pipe hdl */ 87 int uf_bulkout_state; /* out pipe state */ 88 usb_log_handle_t uf_lh; /* USBA log handle */ 89 int uf_dev_state; /* USB device state */ 90 size_t uf_ibuf_sz; /* input buffer size */ 91 size_t uf_obuf_sz; /* output buffer size */ 92 93 uftdi_pm_t *uf_pm; /* PM support */ 94 95 /* 96 * data receive and transmit 97 */ 98 mblk_t *uf_rx_mp; /* rx data */ 99 mblk_t *uf_tx_mp; /* tx data */ 100 kcondvar_t uf_tx_cv; /* tx completion */ 101 102 /* 103 * soft registers 104 */ 105 uftdi_regs_t uf_softr; /* config registers */ 106 uint16_t uf_mctl; /* modem control */ 107 uint8_t uf_msr; /* modem status */ 108 uint8_t uf_lsr; /* line status register */ 109 110 } uftdi_state_t; 111 112 _NOTE(MUTEX_PROTECTS_DATA(uftdi_state::uf_lock, uftdi_state)) 113 _NOTE(DATA_READABLE_WITHOUT_LOCK(uftdi_state::{ 114 uf_dip 115 uf_dev_data 116 uf_usb_events 117 uf_def_ph 118 uf_lh 119 uf_ibuf_sz 120 uf_obuf_sz 121 uf_pm 122 uf_port_state 123 uf_cb 124 uf_bulkin_ph 125 uf_bulkout_ph 126 uf_hwport 127 })) 128 129 /* port state */ 130 enum { 131 UFTDI_PORT_CLOSED, /* port is closed */ 132 UFTDI_PORT_OPEN, /* port is open */ 133 UFTDI_PORT_CLOSING 134 }; 135 136 /* port flags */ 137 enum { 138 UFTDI_PORT_TX_STOPPED = 0x0001 /* transmit not allowed */ 139 }; 140 141 /* pipe state */ 142 enum { 143 UFTDI_PIPE_CLOSED, /* pipe is closed */ 144 UFTDI_PIPE_IDLE, /* open but no requests */ 145 UFTDI_PIPE_BUSY /* servicing request */ 146 }; 147 148 /* various numbers */ 149 enum { 150 UFTDI_BULKOUT_TIMEOUT = 15, /* bulkout timeout */ 151 UFTDI_BULKIN_TIMEOUT = 15, /* bulkin timeout */ 152 UFTDI_XFER_SZ_MAX = 64, /* max xfer size */ 153 UFTDI_CLEANUP_LEVEL_MAX = 6 /* cleanup level */ 154 }; 155 156 157 /* 158 * debug printing masks 159 */ 160 #define DPRINT_ATTACH 0x00000001 161 #define DPRINT_OPEN 0x00000002 162 #define DPRINT_CLOSE 0x00000004 163 #define DPRINT_DEF_PIPE 0x00000010 164 #define DPRINT_IN_PIPE 0x00000020 165 #define DPRINT_OUT_PIPE 0x00000040 166 #define DPRINT_IN_DATA 0x00000400 167 #define DPRINT_OUT_DATA 0x00000800 168 #define DPRINT_CTLOP 0x00001000 169 #define DPRINT_HOTPLUG 0x00002000 170 #define DPRINT_PM 0x00004000 171 #define DPRINT_MASK_ALL 0xFFFFFFFF 172 173 #ifdef __cplusplus 174 } 175 #endif 176 177 #endif /* _USBSER_USBFTDI_UFTDI_VAR_H */