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_EHCI_ISOCH_UTIL_H
27 #define	_SYS_USB_EHCI_ISOCH_UTIL_H
28 
29 
30 #ifdef	__cplusplus
31 extern "C" {
32 #endif
33 
34 /*
35  * Isochronous pool functions
36  */
37 extern int ehci_allocate_isoc_pools(
38 	ehci_state_t		*ehcip);
39 extern int ehci_get_itd_pool_size();
40 
41 /*
42  * Isochronous Transfer Wrapper Functions
43  */
44 extern ehci_isoc_xwrapper_t *ehci_allocate_itw_resources(
45 	ehci_state_t 		*ehcip,
46 	ehci_pipe_private_t	*pp,
47 	size_t			itw_length,
48 	usb_flags_t		usb_flags,
49 	size_t 			pkt_count);
50 extern void ehci_deallocate_itw(
51 	ehci_state_t		*ehcip,
52 	ehci_pipe_private_t	*pp,
53 	ehci_isoc_xwrapper_t	*itw);
54 
55 /*
56  * Isochronous transfer descripter functions
57  */
58 extern ehci_itd_t *ehci_allocate_itd(
59 	ehci_state_t		*ehcip);
60 
61 extern void ehci_deallocate_itd(
62 	ehci_state_t		*ehcip,
63 	ehci_isoc_xwrapper_t	*itw,
64 	ehci_itd_t		*old_itd);
65 extern uint_t ehci_calc_num_itds(
66 	ehci_isoc_xwrapper_t	*itw,
67 	size_t 			pkt_count);
68 extern int ehci_allocate_itds_for_itw(
69 	ehci_state_t		*ehcip,
70 	ehci_isoc_xwrapper_t	*itw,
71 	uint_t			itd_count);
72 extern void ehci_insert_itd_on_itw(
73 	ehci_state_t		*ehcip,
74 	ehci_isoc_xwrapper_t	*itw,
75 	ehci_itd_t		*itd);
76 extern void ehci_insert_itd_into_active_list(
77 	ehci_state_t		*ehcip,
78 	ehci_itd_t		*itd);
79 extern void ehci_remove_itd_from_active_list(
80 	ehci_state_t		*ehcip,
81 	ehci_itd_t		*itd);
82 extern ehci_itd_t *ehci_create_done_itd_list(
83 	ehci_state_t		*ehcip);
84 extern int ehci_insert_isoc_to_pfl(
85 	ehci_state_t		*ehcip,
86 	ehci_pipe_private_t	*pp,
87 	ehci_isoc_xwrapper_t	*itw);
88 extern void ehci_remove_isoc_from_pfl(
89 	ehci_state_t		*ehcip,
90 	ehci_itd_t		*curr_itd);
91 
92 /*
93  * Isochronous in resource functions
94  */
95 extern int ehci_allocate_isoc_in_resource(
96 	ehci_state_t		*ehcip,
97 	ehci_pipe_private_t	*pp,
98 	ehci_isoc_xwrapper_t	*tw,
99 	usb_flags_t		flags);
100 extern void ehci_deallocate_isoc_in_resource(
101 	ehci_state_t		*ehcip,
102 	ehci_pipe_private_t	*pp,
103 	ehci_isoc_xwrapper_t	*itw);
104 
105 /*
106  * Isochronous memory addr functions
107  */
108 extern uint32_t ehci_itd_cpu_to_iommu(
109 	ehci_state_t		*ehcip,
110 	ehci_itd_t		*addr);
111 
112 extern ehci_itd_t *ehci_itd_iommu_to_cpu(
113 	ehci_state_t		*ehcip,
114 	uintptr_t		addr);
115 
116 /*
117  * Error parsing functions
118  */
119 extern void ehci_parse_isoc_error(
120 	ehci_state_t		*ehcip,
121 	ehci_isoc_xwrapper_t	*itw,
122 	ehci_itd_t		*itd);
123 
124 /*
125  * print functions
126  */
127 extern void ehci_print_itd(
128 	ehci_state_t		*ehcip,
129 	ehci_itd_t		*itd);
130 extern void ehci_print_sitd(
131 	ehci_state_t		*ehcip,
132 	ehci_itd_t		*itd);
133 
134 #ifdef __cplusplus
135 }
136 #endif
137 
138 #endif /* _SYS_USB_EHCI_ISOCH_UTIL_H */
139