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 /*
  27  * WUSB cable association driver private data structures and definitions.
  28  */
  29 #ifndef _SYS_USB_WUSB_CA_PRIV_H
  30 #define _SYS_USB_WUSB_CA_PRIV_H
  31 
  32 
  33 #ifdef  __cplusplus
  34 extern "C" {
  35 #endif
  36 
  37 #include <sys/usb/usba/usbai_private.h>
  38 
  39 /*
  40  * Power Management support
  41  */
  42 typedef struct wusb_ca_power  {
  43 
  44         void            *wusb_ca_state; /* points back to wusb_ca_state */
  45         uint8_t         wusb_ca_pwr_states; /* bit mask of device pwr states */
  46         int             wusb_ca_pm_busy;
  47 
  48         /* wakeup and power transistion capabilites of an interface */
  49         uint8_t         wusb_ca_pm_capabilities;
  50 
  51         /* flag to indicate if driver is about to raise power level */
  52         boolean_t       wusb_ca_raise_power;
  53 
  54         uint8_t         wusb_ca_current_power;
  55         uint8_t         wusb_ca_remote_wakeup;
  56 } wusb_ca_power_t;
  57 
  58 
  59 /*
  60  * State structure
  61  */
  62 typedef struct wusb_ca_state {
  63         dev_info_t              *wusb_ca_dip;   /* per-device info handle */
  64         usb_client_dev_data_t   *wusb_ca_reg;   /* registration data */
  65         char                    *wusb_ca_devinst;       /* Dev and instance */
  66         int                     wusb_ca_dev_state; /* USB device states. */
  67         int                     wusb_ca_drv_state; /* driver states. */
  68         kmutex_t                wusb_ca_mutex;
  69         kcondvar_t              wusb_ca_serial_cv;
  70         boolean_t               wusb_ca_serial_inuse;
  71         boolean_t               wusb_ca_locks_initialized;
  72         wusb_ca_power_t         *wusb_ca_pm;
  73         usb_log_handle_t        wusb_ca_log_hdl;
  74 } wusb_ca_state_t;
  75 
  76 _NOTE(MUTEX_PROTECTS_DATA(wusb_ca_state::wusb_ca_mutex, wusb_ca_state))
  77 
  78 _NOTE(DATA_READABLE_WITHOUT_LOCK(wusb_ca_state_t::{
  79         wusb_ca_log_hdl
  80         wusb_ca_dip
  81         wusb_ca_reg
  82 }))
  83 /* Macros */
  84 #define WUSB_CA_OPEN            0x00000001
  85 
  86 #define WUSB_CA_REQUEST_SIZE    65535   /* Read request size maximum */
  87 #define USB_DEV_DESCR_SIZE      18      /* device descr size */
  88 
  89 /* Other */
  90 #define WUSB_CA_DRAIN_TMO       15
  91 
  92 /* For serialization. */
  93 #define WUSB_CA_SER_NOSIG       B_FALSE
  94 #define WUSB_CA_SER_SIG         B_TRUE
  95 
  96 /* For logging. */
  97 #define WUSB_CA_LOG_LOG         1
  98 #define WUSB_CA_LOG_CONSOLE     0
  99 
 100 #define PRINT_MASK_ALL          0xFFFFFFFF
 101 #define PRINT_MASK_ATTA         0x00000001
 102 #define PRINT_MASK_CLOSE        0x00000002
 103 #define PRINT_MASK_OPEN         0x00000004
 104 #define PRINT_MASK_EVENTS       0x00000008
 105 #define PRINT_MASK_PM           0x00000010
 106 #define PRINT_MASK_CB           0x00000020
 107 #define PRINT_MASK_CPR          0x00000040
 108 
 109 int wusb_cbaf_get_asso_info(wusb_ca_state_t *, intptr_t, int);
 110 int wusb_cbaf_get_asso_reqs(wusb_ca_state_t *, intptr_t, int);
 111 int wusb_cbaf_set_host_info(wusb_ca_state_t *, intptr_t, int);
 112 int wusb_cbaf_get_device_info(wusb_ca_state_t *, intptr_t, int);
 113 int wusb_cbaf_set_connection(wusb_ca_state_t *, intptr_t, int);
 114 int wusb_cbaf_set_failure(wusb_ca_state_t *, intptr_t, int);
 115 
 116 
 117 #ifdef __cplusplus
 118 }
 119 #endif
 120 
 121 #endif  /* _SYS_USB_WUSB_CA_PRIV_H */