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 2006 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_USB_USB_MIDVAR_H 27 #define _SYS_USB_USB_MIDVAR_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include <sys/usb/usba/usbai_private.h> 34 35 36 /* 37 * soft state information for this usb_mid 38 */ 39 typedef struct usb_mid { 40 int mi_instance; 41 42 uint_t mi_init_state; 43 uint_t mi_ugen_open_count; 44 45 kmutex_t mi_mutex; 46 47 /* 48 * dev_info_t reference 49 */ 50 dev_info_t *mi_dip; 51 52 /* pointer to usb_common_power_t */ 53 usb_common_power_t *mi_pm; 54 55 /* 56 * save the usba_device pointer 57 */ 58 usba_device_t *mi_usba_device; 59 60 int mi_softstate; 61 62 int mi_dev_state; 63 64 int mi_n_ifs; 65 66 /* track event registration of children */ 67 uint8_t *mi_child_events; 68 69 /* record the interface num of each child node */ 70 uint_t *mi_children_ifs; 71 72 /* 73 * mi_children_dips is an array for holding 74 * each child dip indexed by interface number 75 */ 76 dev_info_t **mi_children_dips; 77 78 boolean_t mi_removed_children; 79 80 size_t mi_cd_list_length; 81 int mi_attach_count; 82 83 /* logging of messages */ 84 usb_log_handle_t mi_log_handle; 85 86 /* usb registration */ 87 usb_client_dev_data_t *mi_dev_data; 88 89 /* event support */ 90 ndi_event_hdl_t mi_ndi_event_hdl; 91 92 /* ugen support */ 93 usb_ugen_hdl_t mi_ugen_hdl; 94 95 } usb_mid_t; 96 97 _NOTE(MUTEX_PROTECTS_DATA(usb_mid::mi_mutex, usb_mid)) 98 _NOTE(MUTEX_PROTECTS_DATA(usb_mid::mi_mutex, usb_common_power_t)) 99 _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_mid::mi_instance 100 usb_mid::mi_ndi_event_hdl 101 usb_mid::mi_dev_data 102 usb_mid::mi_log_handle 103 usb_mid::mi_ugen_hdl 104 usb_mid::mi_dip 105 usb_mid::mi_pm)) 106 107 #define USB_MID_MINOR_UGEN_BITS_MASK 0x1ff 108 #define USB_MID_MINOR_INSTANCE_SHIFT 9 109 #define USB_MID_MINOR_INSTANCE_MASK ~USB_MID_MINOR_UGEN_BITS_MASK 110 #define USB_MID_MINOR_TO_INSTANCE(minor) \ 111 (((minor) & USB_MID_MINOR_INSTANCE_MASK) >> \ 112 USB_MID_MINOR_INSTANCE_SHIFT) 113 114 /* init state */ 115 #define USB_MID_LOCK_INIT 0x0001 116 #define USB_MID_MINOR_NODE_CREATED 0x0002 117 #define USB_MID_EVENTS_REGISTERED 0x0004 118 119 /* Tracking events registered by children */ 120 #define USB_MID_CHILD_EVENT_DISCONNECT 0x01 121 #define USB_MID_CHILD_EVENT_PRESUSPEND 0x02 122 123 /* 124 * Debug printing 125 * Masks 126 */ 127 #define DPRINT_MASK_ATTA 0x00000001 128 #define DPRINT_MASK_CBOPS 0x00000002 129 #define DPRINT_MASK_EVENTS 0x00000004 130 #define DPRINT_MASK_DUMPING 0x00000008 /* usb_mid dump mask */ 131 #define DPRINT_MASK_PM 0x00000010 132 #define DPRINT_MASK_ALL 0xFFFFFFFF 133 134 135 #ifdef __cplusplus 136 } 137 #endif 138 139 #endif /* _SYS_USB_USB_MIDVAR_H */ 140