summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/usb/usb_mid/usb_midvar.h
blob: 65409ee966e897adfe425e06f7ca5412520b8965 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SYS_USB_USB_MIDVAR_H
#define	_SYS_USB_USB_MIDVAR_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

#include <sys/usb/usba/usbai_private.h>


/*
 * soft	state information for this usb_mid
 */
typedef struct usb_mid {
	int			mi_instance;

	uint_t			mi_init_state;
	uint_t			mi_ugen_open_count;

	kmutex_t		mi_mutex;

	/*
	 * dev_info_t reference
	 */
	dev_info_t		*mi_dip;

	/* pointer to usb_common_power_t */
	usb_common_power_t	*mi_pm;

	/*
	 * save the usba_device pointer
	 */
	usba_device_t		*mi_usba_device;

	int			mi_softstate;

	int			mi_dev_state;

	int			mi_n_ifs;

	/* track event registration of children */
	uint8_t			*mi_child_events;

	/* record the interface num of each child node */
	uint_t			*mi_children_ifs;

	/*
	 * mi_children_dips is an array for holding
	 * each child dip indexed by interface number
	 */
	dev_info_t		**mi_children_dips;

	boolean_t		mi_removed_children;

	size_t			mi_cd_list_length;
	int			mi_attach_count;

	/* logging of messages */
	usb_log_handle_t	mi_log_handle;

	/* usb registration */
	usb_client_dev_data_t	*mi_dev_data;

	/* event support */
	ndi_event_hdl_t		mi_ndi_event_hdl;

	/* ugen support */
	usb_ugen_hdl_t		mi_ugen_hdl;

} usb_mid_t;

_NOTE(MUTEX_PROTECTS_DATA(usb_mid::mi_mutex, usb_mid))
_NOTE(MUTEX_PROTECTS_DATA(usb_mid::mi_mutex, usb_common_power_t))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_mid::mi_instance
		usb_mid::mi_ndi_event_hdl
		usb_mid::mi_dev_data
		usb_mid::mi_log_handle
		usb_mid::mi_ugen_hdl
		usb_mid::mi_dip
		usb_mid::mi_pm))

#define	USB_MID_MINOR_UGEN_BITS_MASK	0x1ff
#define	USB_MID_MINOR_INSTANCE_SHIFT	9
#define	USB_MID_MINOR_INSTANCE_MASK	~USB_MID_MINOR_UGEN_BITS_MASK
#define	USB_MID_MINOR_TO_INSTANCE(minor) \
		(((minor) & USB_MID_MINOR_INSTANCE_MASK) >> \
		USB_MID_MINOR_INSTANCE_SHIFT)

/* init state */
#define	USB_MID_LOCK_INIT		0x0001
#define	USB_MID_MINOR_NODE_CREATED	0x0002
#define	USB_MID_EVENTS_REGISTERED	0x0004

/* Tracking events registered by children */
#define	USB_MID_CHILD_EVENT_DISCONNECT	0x01
#define	USB_MID_CHILD_EVENT_PRESUSPEND	0x02

/*
 * Debug printing
 * Masks
 */
#define	DPRINT_MASK_ATTA	0x00000001
#define	DPRINT_MASK_CBOPS	0x00000002
#define	DPRINT_MASK_EVENTS	0x00000004
#define	DPRINT_MASK_DUMPING	0x00000008	/* usb_mid dump mask */
#define	DPRINT_MASK_PM		0x00000010
#define	DPRINT_MASK_ALL 	0xFFFFFFFF


#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_USB_USB_MIDVAR_H */