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