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 2008 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef	_SYS_USB_HCDI_IMPL_H
27#define	_SYS_USB_HCDI_IMPL_H
28
29
30#ifdef	__cplusplus
31extern "C" {
32#endif
33
34/*
35 * Per HCD Data Structures
36 */
37typedef  struct usba_hcdi {
38	dev_info_t		*hcdi_dip;	/* ptr to devinfo struct */
39
40	ddi_dma_attr_t		*hcdi_dma_attr;
41
42	/*
43	 * list of HCD operations
44	 */
45	struct usba_hcdi_ops	*hcdi_ops;
46
47	int			hcdi_flags;	    /* flag options */
48
49	/* soft interrupt support */
50	ddi_softint_handle_t	hcdi_softint_hdl;	/* soft intr handle */
51	usba_list_entry_t	hcdi_cb_queue;
52
53	/*
54	 * min xfer and min/max burstsizes for DDI_CTLOPS_IOMIN
55	 */
56	uint_t			hcdi_min_xfer;
57	uchar_t			hcdi_min_burst_size;
58	uchar_t			hcdi_max_burst_size;
59
60	/*
61	 * usba_device ptr for root hub
62	 */
63	usba_device_t		*hcdi_usba_device;
64
65	/*
66	 * usb bus address allocation
67	 */
68	char		hcdi_usb_address_in_use[USBA_ADDRESS_ARRAY_SIZE];
69
70	usb_log_handle_t	hcdi_log_handle;
71
72	kmutex_t		hcdi_mutex;
73	ddi_iblock_cookie_t	hcdi_iblock_cookie;
74	ddi_iblock_cookie_t	hcdi_soft_iblock_cookie;
75
76	/*
77	 * Hotplug event statistics since hcdi loaded.
78	 */
79	ulong_t			hcdi_total_hotplug_success;
80	ulong_t			hcdi_total_hotplug_failure;
81
82	/*
83	 * Resetable hotplug event statistics.
84	 */
85	ulong_t			hcdi_hotplug_success;
86	ulong_t			hcdi_hotplug_failure;
87
88	/*
89	 * Total number of devices currently enumerated.
90	 */
91	uchar_t			hcdi_device_count;
92
93	/*
94	 * kstat structures
95	 */
96	kstat_t			*hcdi_hotplug_stats;
97	kstat_t			*hcdi_error_stats;
98
99	/*
100	 * ugen default binding
101	 */
102	uint_t			hcdi_ugen_default_binding;
103} usba_hcdi_t;
104
105_NOTE(MUTEX_PROTECTS_DATA(usba_hcdi::hcdi_mutex,
106				usba_hcdi::hcdi_usb_address_in_use))
107_NOTE(DATA_READABLE_WITHOUT_LOCK(usba_hcdi_t::hcdi_usba_device))
108_NOTE(DATA_READABLE_WITHOUT_LOCK(usba_hcdi_t::hcdi_ugen_default_binding))
109
110
111/*
112 * retrieving the hcdi structure from dip
113 */
114void usba_hcdi_set_hcdi(dev_info_t *dip, usba_hcdi_t *hcdi);
115usba_hcdi_t *usba_hcdi_get_hcdi(dev_info_t *dip);
116
117/* initialize/destroy HCDI info */
118void usba_hcdi_initialization();
119void usba_hcdi_destroy();
120
121#ifdef __cplusplus
122}
123#endif
124
125#endif	/* _SYS_USB_HCDI_IMPL_H */
126