xref: /dragonfly/sys/bus/u4b/usbdi_util.h (revision 01698658)
112bd3c8bSSascha Wildner /*-
212bd3c8bSSascha Wildner  * Copyright (c) 2009 Andrew Thompson
312bd3c8bSSascha Wildner  *
412bd3c8bSSascha Wildner  * Redistribution and use in source and binary forms, with or without
512bd3c8bSSascha Wildner  * modification, are permitted provided that the following conditions
612bd3c8bSSascha Wildner  * are met:
712bd3c8bSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
812bd3c8bSSascha Wildner  *    notice, this list of conditions and the following disclaimer.
912bd3c8bSSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
1012bd3c8bSSascha Wildner  *    notice, this list of conditions and the following disclaimer in the
1112bd3c8bSSascha Wildner  *    documentation and/or other materials provided with the distribution.
1212bd3c8bSSascha Wildner  *
1312bd3c8bSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1412bd3c8bSSascha Wildner  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1512bd3c8bSSascha Wildner  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1612bd3c8bSSascha Wildner  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1712bd3c8bSSascha Wildner  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1812bd3c8bSSascha Wildner  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1912bd3c8bSSascha Wildner  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2012bd3c8bSSascha Wildner  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2112bd3c8bSSascha Wildner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2212bd3c8bSSascha Wildner  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2312bd3c8bSSascha Wildner  *
24*01698658SMarkus Pfeiffer  * $FreeBSD: head/sys/dev/usb/usbdi_util.h 213435 2010-10-04 23:18:05Z hselasky $
2512bd3c8bSSascha Wildner  */
2612bd3c8bSSascha Wildner #ifndef _USB_USBDI_UTIL_H_
2712bd3c8bSSascha Wildner #define _USB_USBDI_UTIL_H_
2812bd3c8bSSascha Wildner 
2912bd3c8bSSascha Wildner struct cv;
3012bd3c8bSSascha Wildner 
3112bd3c8bSSascha Wildner /* structures */
3212bd3c8bSSascha Wildner 
3312bd3c8bSSascha Wildner struct usb_idesc_parse_state {
3412bd3c8bSSascha Wildner 	struct usb_descriptor *desc;
3512bd3c8bSSascha Wildner 	uint8_t iface_index;		/* current interface index */
3612bd3c8bSSascha Wildner 	uint8_t iface_no_last;
3712bd3c8bSSascha Wildner 	uint8_t iface_index_alt;	/* current alternate setting */
3812bd3c8bSSascha Wildner };
3912bd3c8bSSascha Wildner 
4012bd3c8bSSascha Wildner /* prototypes */
4112bd3c8bSSascha Wildner 
4212bd3c8bSSascha Wildner usb_error_t usbd_do_request_proc(struct usb_device *udev, struct usb_process *pproc,
4312bd3c8bSSascha Wildner 		    struct usb_device_request *req, void *data, uint16_t flags,
4412bd3c8bSSascha Wildner 		    uint16_t *actlen, usb_timeout_t timeout);
4512bd3c8bSSascha Wildner 
4612bd3c8bSSascha Wildner struct usb_descriptor *usb_desc_foreach(struct usb_config_descriptor *cd,
4712bd3c8bSSascha Wildner 	    struct usb_descriptor *desc);
4812bd3c8bSSascha Wildner struct usb_interface_descriptor *usb_idesc_foreach(
4912bd3c8bSSascha Wildner 	    struct usb_config_descriptor *cd,
5012bd3c8bSSascha Wildner 	    struct usb_idesc_parse_state *ps);
5112bd3c8bSSascha Wildner struct usb_endpoint_descriptor *usb_edesc_foreach(
5212bd3c8bSSascha Wildner 	    struct usb_config_descriptor *cd,
5312bd3c8bSSascha Wildner 	    struct usb_endpoint_descriptor *ped);
5412bd3c8bSSascha Wildner struct usb_endpoint_ss_comp_descriptor *usb_ed_comp_foreach(
5512bd3c8bSSascha Wildner 	    struct usb_config_descriptor *cd,
5612bd3c8bSSascha Wildner 	    struct usb_endpoint_ss_comp_descriptor *ped);
5712bd3c8bSSascha Wildner uint8_t usbd_get_no_descriptors(struct usb_config_descriptor *cd,
5812bd3c8bSSascha Wildner 	    uint8_t type);
5912bd3c8bSSascha Wildner uint8_t usbd_get_no_alts(struct usb_config_descriptor *cd,
6012bd3c8bSSascha Wildner 	    struct usb_interface_descriptor *id);
6112bd3c8bSSascha Wildner 
62722d05c3SSascha Wildner usb_error_t usbd_req_get_report(struct usb_device *udev, struct lock *lock,
6312bd3c8bSSascha Wildner 		    void *data, uint16_t len, uint8_t iface_index, uint8_t type,
6412bd3c8bSSascha Wildner 		    uint8_t id);
6512bd3c8bSSascha Wildner usb_error_t usbd_req_get_report_descriptor(struct usb_device *udev,
66722d05c3SSascha Wildner 		    struct lock *lock, void *d, uint16_t size,
6712bd3c8bSSascha Wildner 		    uint8_t iface_index);
68722d05c3SSascha Wildner usb_error_t usbd_req_get_string_any(struct usb_device *udev, struct lock *lock,
6912bd3c8bSSascha Wildner 		    char *buf, uint16_t len, uint8_t string_index);
70722d05c3SSascha Wildner usb_error_t usbd_req_get_string_desc(struct usb_device *udev, struct lock *lock,
7112bd3c8bSSascha Wildner 		    void *sdesc, uint16_t max_len, uint16_t lang_id,
7212bd3c8bSSascha Wildner 		    uint8_t string_index);
73722d05c3SSascha Wildner usb_error_t usbd_req_set_config(struct usb_device *udev, struct lock *lock,
7412bd3c8bSSascha Wildner 		    uint8_t conf);
7512bd3c8bSSascha Wildner usb_error_t usbd_req_set_alt_interface_no(struct usb_device *udev,
76722d05c3SSascha Wildner 		    struct lock *lock, uint8_t iface_index, uint8_t alt_no);
77722d05c3SSascha Wildner usb_error_t usbd_req_set_idle(struct usb_device *udev, struct lock *lock,
7812bd3c8bSSascha Wildner 		    uint8_t iface_index, uint8_t duration, uint8_t id);
79722d05c3SSascha Wildner usb_error_t usbd_req_set_protocol(struct usb_device *udev, struct lock *lock,
8012bd3c8bSSascha Wildner 		    uint8_t iface_index, uint16_t report);
81722d05c3SSascha Wildner usb_error_t usbd_req_set_report(struct usb_device *udev, struct lock *lock,
8212bd3c8bSSascha Wildner 		    void *data, uint16_t len, uint8_t iface_index,
8312bd3c8bSSascha Wildner 		    uint8_t type, uint8_t id);
8412bd3c8bSSascha Wildner 
8512bd3c8bSSascha Wildner /* The following functions will not return NULL strings. */
8612bd3c8bSSascha Wildner 
8712bd3c8bSSascha Wildner const char *usb_get_manufacturer(struct usb_device *);
8812bd3c8bSSascha Wildner const char *usb_get_product(struct usb_device *);
8912bd3c8bSSascha Wildner const char *usb_get_serial(struct usb_device *);
9012bd3c8bSSascha Wildner 
9112bd3c8bSSascha Wildner #endif /* _USB_USBDI_UTIL_H_ */
92