1 | /* $NetBSD: usbdi_util.h,v 1.47 2016/04/23 10:15:32 skrll Exp $ */ |
2 | |
3 | /* |
4 | * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. |
5 | * All rights reserved. |
6 | * |
7 | * This code is derived from software contributed to The NetBSD Foundation |
8 | * by Lennart Augustsson (lennart@augustsson.net) at |
9 | * Carlstedt Research & Technology. |
10 | * |
11 | * Redistribution and use in source and binary forms, with or without |
12 | * modification, are permitted provided that the following conditions |
13 | * are met: |
14 | * 1. Redistributions of source code must retain the above copyright |
15 | * notice, this list of conditions and the following disclaimer. |
16 | * 2. Redistributions in binary form must reproduce the above copyright |
17 | * notice, this list of conditions and the following disclaimer in the |
18 | * documentation and/or other materials provided with the distribution. |
19 | * |
20 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
21 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
22 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
24 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
25 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
26 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
27 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
28 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
29 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
30 | * POSSIBILITY OF SUCH DAMAGE. |
31 | */ |
32 | |
33 | #ifndef _USBDI_UTIL_H_ |
34 | #define _USBDI_UTIL_H_ |
35 | |
36 | #include <dev/usb/usbhid.h> |
37 | |
38 | usbd_status usbd_get_desc(struct usbd_device *, int, |
39 | int, int, void *); |
40 | usbd_status usbd_get_config_desc(struct usbd_device *, int, |
41 | usb_config_descriptor_t *); |
42 | usbd_status usbd_get_config_desc_full(struct usbd_device *, int, void *, int); |
43 | usbd_status usbd_get_bos_desc(struct usbd_device *, int, |
44 | usb_bos_descriptor_t *); |
45 | usbd_status usbd_get_bos_desc_full(struct usbd_device *, int, void *, int); |
46 | usbd_status usbd_get_device_desc(struct usbd_device *, |
47 | usb_device_descriptor_t *); |
48 | usbd_status usbd_set_address(struct usbd_device *, int); |
49 | usbd_status usbd_get_port_status(struct usbd_device *, |
50 | int, usb_port_status_t *); |
51 | usbd_status usbd_get_port_status_ext(struct usbd_device *, |
52 | int, usb_port_status_ext_t *); |
53 | usbd_status usbd_set_hub_feature(struct usbd_device *, int); |
54 | usbd_status usbd_clear_hub_feature(struct usbd_device *, int); |
55 | usbd_status usbd_set_port_feature(struct usbd_device *, int, int); |
56 | usbd_status usbd_clear_port_feature(struct usbd_device *, int, int); |
57 | usbd_status usbd_set_port_u1_timeout(struct usbd_device *, int, int); |
58 | usbd_status usbd_set_port_u2_timeout(struct usbd_device *, int, int); |
59 | usbd_status usbd_get_device_status(struct usbd_device *, usb_status_t *); |
60 | usbd_status usbd_get_hub_status(struct usbd_device *, usb_hub_status_t *); |
61 | usbd_status usbd_get_protocol(struct usbd_interface *, uint8_t *); |
62 | usbd_status usbd_set_protocol(struct usbd_interface *, int); |
63 | usbd_status usbd_get_report_descriptor(struct usbd_device *, int, |
64 | int, void *); |
65 | usb_hid_descriptor_t *usbd_get_hid_descriptor(struct usbd_interface *); |
66 | usbd_status usbd_set_report(struct usbd_interface *, int, int, |
67 | void *, int); |
68 | usbd_status usbd_get_report(struct usbd_interface *, int, int, |
69 | void *, int); |
70 | usbd_status usbd_set_idle(struct usbd_interface *, int, int); |
71 | usbd_status usbd_read_report_desc(struct usbd_interface *, void **, |
72 | int *); |
73 | usbd_status usbd_get_config(struct usbd_device *, uint8_t *); |
74 | usbd_status usbd_get_string_desc(struct usbd_device *, int, |
75 | int, usb_string_descriptor_t *, |
76 | int *); |
77 | |
78 | |
79 | usbd_status usbd_set_config_no(struct usbd_device *, int, int); |
80 | usbd_status usbd_set_config_index(struct usbd_device *, int, int); |
81 | |
82 | usbd_status usbd_bulk_transfer(struct usbd_xfer *, struct usbd_pipe *, |
83 | uint16_t, uint32_t, void *, uint32_t *); |
84 | |
85 | usbd_status usbd_intr_transfer(struct usbd_xfer *, struct usbd_pipe *, |
86 | uint16_t, uint32_t, void *, uint32_t *); |
87 | |
88 | void usb_detach_waitold(device_t); |
89 | void usb_detach_wakeupold(device_t); |
90 | |
91 | /* |
92 | * MPSAFE versions - mutex must be at IPL_USB. |
93 | */ |
94 | void usb_detach_wait(device_t dv, kcondvar_t *, kmutex_t *); |
95 | void usb_detach_broadcast(device_t, kcondvar_t *); |
96 | |
97 | |
98 | typedef struct { |
99 | uByte bLength; |
100 | uByte bDescriptorType; |
101 | uByte bDescriptorSubtype; |
102 | } UPACKED usb_cdc_descriptor_t; |
103 | |
104 | const usb_cdc_descriptor_t *usb_find_desc(struct usbd_device *, int, |
105 | int); |
106 | const usb_cdc_descriptor_t *usb_find_desc_if(struct usbd_device *, int, |
107 | int, |
108 | usb_interface_descriptor_t *); |
109 | #define USBD_CDCSUBTYPE_ANY (~0) |
110 | |
111 | #endif /* _USBDI_UTIL_H_ */ |
112 | |