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