10Sstevel@tonic-gate /* 20Sstevel@tonic-gate * CDDL HEADER START 30Sstevel@tonic-gate * 40Sstevel@tonic-gate * The contents of this file are subject to the terms of the 55653Slc152243 * Common Development and Distribution License (the "License"). 65653Slc152243 * You may not use this file except in compliance with the License. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 100Sstevel@tonic-gate * See the License for the specific language governing permissions 110Sstevel@tonic-gate * and limitations under the License. 120Sstevel@tonic-gate * 130Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 140Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 160Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 170Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 180Sstevel@tonic-gate * 190Sstevel@tonic-gate * CDDL HEADER END 200Sstevel@tonic-gate * 21*7492SZhigang.Lu@Sun.COM * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 220Sstevel@tonic-gate * Use is subject to license terms. 230Sstevel@tonic-gate */ 240Sstevel@tonic-gate 250Sstevel@tonic-gate #ifndef _SYS_USBA_UGEND_H 260Sstevel@tonic-gate #define _SYS_USBA_UGEND_H 270Sstevel@tonic-gate 280Sstevel@tonic-gate 290Sstevel@tonic-gate /* 300Sstevel@tonic-gate * UGEN - USB Generic Driver Support 310Sstevel@tonic-gate * This file contains the UGEN specific data structure definitions 320Sstevel@tonic-gate * and UGEN specific macros. 330Sstevel@tonic-gate */ 340Sstevel@tonic-gate #include <sys/usb/usba/usbai_private.h> 350Sstevel@tonic-gate 360Sstevel@tonic-gate #ifdef __cplusplus 370Sstevel@tonic-gate extern "C" { 380Sstevel@tonic-gate #endif 390Sstevel@tonic-gate 400Sstevel@tonic-gate /* ugen handle passed to client drivers as an opaque token */ 410Sstevel@tonic-gate typedef struct { 420Sstevel@tonic-gate dev_info_t *hdl_dip; 430Sstevel@tonic-gate uint_t hdl_flags; 440Sstevel@tonic-gate dev_t hdl_minor_node_ugen_bits_mask; 450Sstevel@tonic-gate uint_t hdl_minor_node_ugen_bits_shift; 460Sstevel@tonic-gate uint_t hdl_minor_node_ugen_bits_limit; 470Sstevel@tonic-gate 480Sstevel@tonic-gate dev_t hdl_minor_node_instance_mask; 490Sstevel@tonic-gate uint_t hdl_minor_node_instance_shift; 500Sstevel@tonic-gate uint_t hdl_minor_node_instance_limit; 510Sstevel@tonic-gate 520Sstevel@tonic-gate struct ugen_state *hdl_ugenp; 530Sstevel@tonic-gate char *hdl_log_name; 540Sstevel@tonic-gate uint_t hdl_log_name_length; 550Sstevel@tonic-gate } usb_ugen_hdl_impl_t; 560Sstevel@tonic-gate 570Sstevel@tonic-gate _NOTE(SCHEME_PROTECTS_DATA("stable data", usb_ugen_hdl_impl_t)) 580Sstevel@tonic-gate 590Sstevel@tonic-gate /* devt lookup support */ 600Sstevel@tonic-gate typedef struct ugen_devt_list_entry { 610Sstevel@tonic-gate struct ugen_devt_list_entry *list_next; 620Sstevel@tonic-gate struct ugen_devt_list_entry *list_prev; 630Sstevel@tonic-gate dev_t list_dev; 640Sstevel@tonic-gate struct ugen_state *list_state; 650Sstevel@tonic-gate } ugen_devt_list_entry_t; 660Sstevel@tonic-gate 670Sstevel@tonic-gate typedef struct ugen_devt_cache_entry { 680Sstevel@tonic-gate dev_t cache_dev; 690Sstevel@tonic-gate struct ugen_state *cache_state; 700Sstevel@tonic-gate uint_t cache_hit; 710Sstevel@tonic-gate } ugen_devt_cache_entry_t; 720Sstevel@tonic-gate 730Sstevel@tonic-gate #define UGEN_DEVT_CACHE_SIZE 10 740Sstevel@tonic-gate 750Sstevel@tonic-gate /* minor node definition */ 760Sstevel@tonic-gate #ifdef _LP64 770Sstevel@tonic-gate #define UGEN_MINOR_NODE_SIZE 32 780Sstevel@tonic-gate #else 790Sstevel@tonic-gate #define UGEN_MINOR_NODE_SIZE 18 800Sstevel@tonic-gate #endif 810Sstevel@tonic-gate 820Sstevel@tonic-gate #define UGEN_MINOR_INSTANCE_MASK(ugenp) \ 830Sstevel@tonic-gate (ugenp)->ug_hdl->hdl_minor_node_instance_mask 840Sstevel@tonic-gate #define UGEN_MINOR_INSTANCE_LIMIT(ugenp) \ 850Sstevel@tonic-gate (ugenp)->ug_hdl->hdl_minor_node_instance_limit 860Sstevel@tonic-gate #define UGEN_MINOR_INSTANCE_SHIFT(ugenp) \ 870Sstevel@tonic-gate (ugenp)->ug_hdl->hdl_minor_node_instance_shift 880Sstevel@tonic-gate 890Sstevel@tonic-gate #define UGEN_MINOR_IDX_SHIFT(ugenp) \ 900Sstevel@tonic-gate (ugenp)->ug_hdl->hdl_minor_node_ugen_bits_shift 910Sstevel@tonic-gate #define UGEN_MINOR_IDX_LIMIT(ugenp) \ 920Sstevel@tonic-gate (ugenp)->ug_hdl->hdl_minor_node_ugen_bits_limit 930Sstevel@tonic-gate 940Sstevel@tonic-gate #define UGEN_MINOR_GET_IDX(ugenp, dev) \ 950Sstevel@tonic-gate ((getminor(dev) >> UGEN_MINOR_IDX_SHIFT(ugenp)) & \ 960Sstevel@tonic-gate (ugenp)->ug_hdl->hdl_minor_node_ugen_bits_mask) 970Sstevel@tonic-gate 980Sstevel@tonic-gate #define UGEN_MINOR_INSTANCE(ugenp, dev) \ 990Sstevel@tonic-gate (getminor(dev) & UGEN_MINOR_INSTANCE_MASK(ugenp)) 1000Sstevel@tonic-gate 1010Sstevel@tonic-gate 1020Sstevel@tonic-gate #define UGEN_N_ENDPOINTS 32 1030Sstevel@tonic-gate 1040Sstevel@tonic-gate /* UGEN specific macros */ 1050Sstevel@tonic-gate #define UGEN_SETUP_PKT_SIZE 8 /* Ctrl xfer Setup token sz */ 1060Sstevel@tonic-gate 1070Sstevel@tonic-gate /* 1080Sstevel@tonic-gate * minor node is contructed as follows for ugen driver (other client 1090Sstevel@tonic-gate * drivers that export a ugen interface may have a different layout): 1100Sstevel@tonic-gate * 1110Sstevel@tonic-gate * 17 9 0 1120Sstevel@tonic-gate * +---------------------+----------------------+ 1130Sstevel@tonic-gate * | minor index | instance | 1140Sstevel@tonic-gate * +---------------------+----------------------+ 1150Sstevel@tonic-gate * 1160Sstevel@tonic-gate * Note that only 512 endpoint minor nodes can be supported (each 1170Sstevel@tonic-gate * endpoint requires a status endpoint as well so we can only support 1180Sstevel@tonic-gate * 256 endpoints) 1190Sstevel@tonic-gate * 1200Sstevel@tonic-gate * the real minor node is: 1210Sstevel@tonic-gate * 1220Sstevel@tonic-gate * 47 40 32 24 16 8 0 1230Sstevel@tonic-gate * +-------+-------+-------+------+-------+-------+ 1240Sstevel@tonic-gate * | cfgval| cfgidx| iface | alt |epidx | type | 1250Sstevel@tonic-gate * +-------+-------+-------+------+-------+-------+ 1260Sstevel@tonic-gate * 1270Sstevel@tonic-gate * We get from the minor code to minor number thru ugen_minor_node_table 1280Sstevel@tonic-gate */ 1290Sstevel@tonic-gate typedef uint64_t ugen_minor_t; 1300Sstevel@tonic-gate 1310Sstevel@tonic-gate #define UGEN_MINOR_DEV_STAT_NODE 0x00 1320Sstevel@tonic-gate #define UGEN_MINOR_EP_XFER_NODE 0x01 1330Sstevel@tonic-gate #define UGEN_MINOR_EP_STAT_NODE 0x02 1340Sstevel@tonic-gate #define UGEN_OWNS_DEVICE 0x04 1350Sstevel@tonic-gate 1360Sstevel@tonic-gate #define UGEN_MINOR_EPIDX_SHIFT 8 1370Sstevel@tonic-gate #define UGEN_MINOR_ALT_SHIFT 16 1380Sstevel@tonic-gate #define UGEN_MINOR_IF_SHIFT 24 1390Sstevel@tonic-gate #define UGEN_MINOR_CFGIDX_SHIFT 32 1400Sstevel@tonic-gate #define UGEN_MINOR_CFGVAL_SHIFT 40 1410Sstevel@tonic-gate 1420Sstevel@tonic-gate #define UGEN_MINOR_TYPE(ugenp, dev) \ 1430Sstevel@tonic-gate (ugen_devt2minor((ugenp), (dev)) & 0x3) 1440Sstevel@tonic-gate #define UGEN_MINOR_EPIDX(ugenp, dev) \ 1450Sstevel@tonic-gate ((ugen_devt2minor((ugenp), (dev)) >> UGEN_MINOR_EPIDX_SHIFT) & 0xFF) 1460Sstevel@tonic-gate 1470Sstevel@tonic-gate #define UGEN_MINOR_ALT(ugenp, dev) \ 1480Sstevel@tonic-gate ((ugen_devt2minor((ugenp), (dev)) >> UGEN_MINOR_ALT_SHIFT) & 0xFF) 1490Sstevel@tonic-gate 1500Sstevel@tonic-gate #define UGEN_MINOR_IF(ugenp, dev) \ 1510Sstevel@tonic-gate ((ugen_devt2minor((ugenp), (dev)) >> UGEN_MINOR_IF_SHIFT) & 0xFF) 1520Sstevel@tonic-gate 1530Sstevel@tonic-gate #define UGEN_MINOR_CFGIDX(ugenp, dev) \ 1540Sstevel@tonic-gate ((ugen_devt2minor((ugenp), (dev)) >> UGEN_MINOR_CFGIDX_SHIFT) & 0xFF) 1550Sstevel@tonic-gate 1560Sstevel@tonic-gate #define UGEN_MINOR_CFGVAL(ugenp, dev) \ 1570Sstevel@tonic-gate ((ugen_devt2minor((ugenp), (dev)) >> UGEN_MINOR_CFGVAL_SHIFT) & 0xFF) 1580Sstevel@tonic-gate 1590Sstevel@tonic-gate 1600Sstevel@tonic-gate /* 1615653Slc152243 * According to usb2.0 spec (table 9-13), for all ep, bits 10..0 specify the 1625653Slc152243 * max pkt size; for high speed ISOC/INTR ep, bits 12..11 specify the number of 1635653Slc152243 * additional transaction opportunities per microframe. 1645653Slc152243 */ 1655653Slc152243 #define UGEN_PKT_SIZE(pktsize) (pktsize & 0x07ff) * (1 + ((pktsize >> 11) & 3)) 1665653Slc152243 1675653Slc152243 1685653Slc152243 /* 1695653Slc152243 * Structure for holding isoc data packets information 1705653Slc152243 */ 1715653Slc152243 typedef struct ugen_isoc_pkt_info { 1725653Slc152243 ushort_t isoc_pkts_count; 1735653Slc152243 uint_t isoc_pkts_length; 1745653Slc152243 ugen_isoc_pkt_descr_t *isoc_pkt_descr; /* array of pkt descr */ 1755653Slc152243 } ugen_isoc_pkt_info_t; 1765653Slc152243 1775653Slc152243 /* 1780Sstevel@tonic-gate * Endpoint structure 1790Sstevel@tonic-gate * Holds all the information needed to manage the endpoint 1800Sstevel@tonic-gate */ 1810Sstevel@tonic-gate typedef struct ugen_ep { 1820Sstevel@tonic-gate uint_t ep_state; /* Endpoint state, see below */ 1830Sstevel@tonic-gate usb_ep_descr_t ep_descr; /* Endpoint descriptor */ 1840Sstevel@tonic-gate uchar_t ep_cfgidx; /* cfg index */ 1850Sstevel@tonic-gate uchar_t ep_if; /* Interface # */ 1860Sstevel@tonic-gate uchar_t ep_alt; /* alternate # */ 1870Sstevel@tonic-gate uchar_t ep_done; /* cmd is done */ 1880Sstevel@tonic-gate boolean_t ep_one_xfer; /* use one xfer on intr IN eps */ 1890Sstevel@tonic-gate uint_t ep_lcmd_status; /* last cmd status */ 1900Sstevel@tonic-gate int ep_xfer_oflag; /* open flag */ 1910Sstevel@tonic-gate int ep_stat_oflag; /* open flag */ 1920Sstevel@tonic-gate size_t ep_buf_limit; /* one second of data */ 1930Sstevel@tonic-gate usb_pipe_handle_t ep_ph; /* Endpoint pipe handle */ 1940Sstevel@tonic-gate usb_pipe_policy_t ep_pipe_policy; 1950Sstevel@tonic-gate kmutex_t ep_mutex; /* Mutex protecting ugen_ep */ 1960Sstevel@tonic-gate kcondvar_t ep_wait_cv; /* block for completion */ 1970Sstevel@tonic-gate usb_serialization_t ep_ser_cookie; /* one xfer at the time */ 1980Sstevel@tonic-gate mblk_t *ep_data; /* IN data (ctrl & intr) */ 1990Sstevel@tonic-gate struct buf *ep_bp; /* save current buf ptr */ 2000Sstevel@tonic-gate struct pollhead ep_pollhead; /* for polling */ 2015653Slc152243 ugen_isoc_pkt_info_t ep_isoc_info; /* for isoc eps */ 2025653Slc152243 int ep_isoc_in_inited; /* isoc IN init flag */ 2030Sstevel@tonic-gate } ugen_ep_t; 2040Sstevel@tonic-gate 2050Sstevel@tonic-gate _NOTE(MUTEX_PROTECTS_DATA(ugen_ep::ep_mutex, ugen_ep)) 2060Sstevel@tonic-gate 2070Sstevel@tonic-gate /* endpoints descriptor access */ 2080Sstevel@tonic-gate #define UGEN_XFER_TYPE(epp) ((epp)->ep_descr.bmAttributes & USB_EP_ATTR_MASK) 2090Sstevel@tonic-gate #define UGEN_XFER_DIR(epp) ((epp)->ep_descr.bEndpointAddress & USB_EP_DIR_IN) 2100Sstevel@tonic-gate #define UGEN_XFER_ADDR(epp) ((epp)->ep_descr.bEndpointAddress) 2110Sstevel@tonic-gate 2120Sstevel@tonic-gate #define UGEN_INTR_BUF_LIMIT 4096 2130Sstevel@tonic-gate 2140Sstevel@tonic-gate /* endpoint xfer/stat states */ 2150Sstevel@tonic-gate #define UGEN_EP_STATE_NONE 0x00 2160Sstevel@tonic-gate #define UGEN_EP_STATE_ACTIVE 0x01 2170Sstevel@tonic-gate #define UGEN_EP_STATE_XFER_OPEN 0x02 2180Sstevel@tonic-gate #define UGEN_EP_STATE_STAT_OPEN 0x04 2190Sstevel@tonic-gate #define UGEN_EP_STATE_XS_OPEN (UGEN_EP_STATE_XFER_OPEN | \ 2200Sstevel@tonic-gate UGEN_EP_STATE_STAT_OPEN) 2210Sstevel@tonic-gate #define UGEN_EP_STATE_INTR_IN_POLLING_ON 0x10 2220Sstevel@tonic-gate #define UGEN_EP_STATE_INTR_IN_POLLING_IS_STOPPED 0x20 2230Sstevel@tonic-gate #define UGEN_EP_STATE_INTR_IN_POLL_PENDING 0x40 2240Sstevel@tonic-gate 2255653Slc152243 #define UGEN_EP_STATE_ISOC_IN_POLLING_ON 0x100 2265653Slc152243 #define UGEN_EP_STATE_ISOC_IN_POLLING_IS_STOPPED 0x200 2275653Slc152243 #define UGEN_EP_STATE_ISOC_IN_POLL_PENDING 0x400 2285653Slc152243 2290Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_ep::ep_ph)) 2300Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_ep::ep_descr)) 2310Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_ep::ep_ser_cookie)) 2320Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_ep::ep_if)) 2330Sstevel@tonic-gate 2340Sstevel@tonic-gate _NOTE(SCHEME_PROTECTS_DATA("USBA", usb_ctrl_req)) 2350Sstevel@tonic-gate _NOTE(SCHEME_PROTECTS_DATA("USBA", usb_bulk_req)) 2360Sstevel@tonic-gate _NOTE(SCHEME_PROTECTS_DATA("USBA", usb_intr_req)) 2370Sstevel@tonic-gate 2380Sstevel@tonic-gate typedef struct ugen_dev_stat { 2390Sstevel@tonic-gate int dev_oflag; /* open flag */ 2400Sstevel@tonic-gate uint_t dev_stat; /* internal status */ 2410Sstevel@tonic-gate uint_t dev_state; /* exported state */ 2420Sstevel@tonic-gate kcondvar_t dev_wait_cv; /* block for change */ 2430Sstevel@tonic-gate struct pollhead dev_pollhead; /* for polling */ 2440Sstevel@tonic-gate } ugen_dev_stat_t; 2450Sstevel@tonic-gate 2460Sstevel@tonic-gate /* dev_stat */ 2470Sstevel@tonic-gate #define UGEN_DEV_STATUS_INACTIVE 0x0 2480Sstevel@tonic-gate #define UGEN_DEV_STATUS_ACTIVE 0x1 2490Sstevel@tonic-gate #define UGEN_DEV_STATUS_POLL_PENDING 0x2 2500Sstevel@tonic-gate #define UGEN_DEV_STATUS_CHANGED 0x4 2510Sstevel@tonic-gate 2520Sstevel@tonic-gate /* Power Management support */ 2530Sstevel@tonic-gate typedef struct ugen_power { 2540Sstevel@tonic-gate uint_t pwr_states; 2550Sstevel@tonic-gate int pwr_busy; /* busy accounting */ 2560Sstevel@tonic-gate uint8_t pwr_wakeup_enabled; 2570Sstevel@tonic-gate uint8_t pwr_current; 2580Sstevel@tonic-gate } ugen_power_t; 2590Sstevel@tonic-gate 2600Sstevel@tonic-gate /* UGEN state structure */ 2610Sstevel@tonic-gate typedef struct ugen_state { 2620Sstevel@tonic-gate usb_ugen_hdl_impl_t *ug_hdl; /* pointer to handle */ 2630Sstevel@tonic-gate dev_info_t *ug_dip; /* Dev info */ 2640Sstevel@tonic-gate uint_t ug_instance; /* Instance number */ 2650Sstevel@tonic-gate uint_t ug_dev_state; 2660Sstevel@tonic-gate uint_t ug_dev_stat_state; 2670Sstevel@tonic-gate uint_t ug_open_count; 2680Sstevel@tonic-gate uint_t ug_pending_cmds; 2690Sstevel@tonic-gate uint_t ug_initial_cfgidx; 2700Sstevel@tonic-gate 2710Sstevel@tonic-gate /* locks */ 2720Sstevel@tonic-gate kmutex_t ug_mutex; /* Instance mutex */ 2730Sstevel@tonic-gate usb_serialization_t ug_ser_cookie; /* access */ 2740Sstevel@tonic-gate 2750Sstevel@tonic-gate /* USB debugging system support */ 2760Sstevel@tonic-gate usb_log_handle_t ug_log_hdl; 2770Sstevel@tonic-gate 2780Sstevel@tonic-gate /* registration data */ 2790Sstevel@tonic-gate usb_client_dev_data_t *ug_dev_data; 2800Sstevel@tonic-gate 2810Sstevel@tonic-gate /* Endpoint management list */ 2820Sstevel@tonic-gate ugen_ep_t ug_ep[UGEN_N_ENDPOINTS]; 2830Sstevel@tonic-gate 2840Sstevel@tonic-gate /* encoding minor numbers as we only have 8 bits in the minor # */ 2850Sstevel@tonic-gate ugen_minor_t *ug_minor_node_table; 2860Sstevel@tonic-gate int ug_minor_node_table_index; 2870Sstevel@tonic-gate size_t ug_minor_node_table_size; 2880Sstevel@tonic-gate 2890Sstevel@tonic-gate /* device status management */ 2900Sstevel@tonic-gate ugen_dev_stat_t ug_ds; 2910Sstevel@tonic-gate 2920Sstevel@tonic-gate /* PM Support */ 2930Sstevel@tonic-gate ugen_power_t *ug_pm; 2940Sstevel@tonic-gate 2950Sstevel@tonic-gate /* Maximum transfer size for bulk endpoints */ 2960Sstevel@tonic-gate size_t ug_max_bulk_xfer_sz; 2970Sstevel@tonic-gate 2980Sstevel@tonic-gate /* Used to deallocate allocated resources */ 2990Sstevel@tonic-gate ushort_t ug_cleanup_flags; 3000Sstevel@tonic-gate } ugen_state_t; 3010Sstevel@tonic-gate 3020Sstevel@tonic-gate _NOTE(SCHEME_PROTECTS_DATA("unshared", buf)) 3030Sstevel@tonic-gate 3040Sstevel@tonic-gate _NOTE(MUTEX_PROTECTS_DATA(ugen_state::ug_mutex, ugen_state)) 3050Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_log_hdl)) 3060Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_hdl)) 3070Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_ser_cookie)) 3080Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_dip)) 3090Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_pm)) 3100Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_instance)) 3110Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_minor_node_table)) 3120Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_minor_node_table_index)) 3130Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_max_bulk_xfer_sz)) 3140Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_dev_data)) 3150Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(ugen_state::ug_cleanup_flags)) 3160Sstevel@tonic-gate 3170Sstevel@tonic-gate 3180Sstevel@tonic-gate /* ugen_cleanup_flags */ 3190Sstevel@tonic-gate #define UGEN_INIT_LOCKS 0x01 3200Sstevel@tonic-gate 3210Sstevel@tonic-gate /* additional USB device states */ 3220Sstevel@tonic-gate #define USB_UGEN_DEV_UNAVAILABLE_RESUME 0x90 3230Sstevel@tonic-gate #define USB_UGEN_DEV_UNAVAILABLE_RECONNECT 0x91 3240Sstevel@tonic-gate 3250Sstevel@tonic-gate /* Debugging information */ 3260Sstevel@tonic-gate #define UGEN_PRINT_ATTA 0x1 3270Sstevel@tonic-gate #define UGEN_PRINT_CBOPS 0x2 3280Sstevel@tonic-gate #define UGEN_PRINT_CPR 0x4 3290Sstevel@tonic-gate #define UGEN_PRINT_POLL 0x8 3300Sstevel@tonic-gate #define UGEN_PRINT_XFER 0x10 3310Sstevel@tonic-gate #define UGEN_PRINT_HOTPLUG 0x20 3320Sstevel@tonic-gate #define UGEN_PRINT_STAT 0x40 3330Sstevel@tonic-gate #define UGEN_PRINT_PM 0x80 3340Sstevel@tonic-gate #define UGEN_PRINT_ALL 0xFFFFFFFF 3350Sstevel@tonic-gate 3360Sstevel@tonic-gate #ifdef __cplusplus 3370Sstevel@tonic-gate } 3380Sstevel@tonic-gate #endif 3390Sstevel@tonic-gate 3400Sstevel@tonic-gate #endif /* _SYS_USBA_UGEND_H */ 341