diff options
Diffstat (limited to 'kernel/framework/include/udi.h')
-rw-r--r-- | kernel/framework/include/udi.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/kernel/framework/include/udi.h b/kernel/framework/include/udi.h new file mode 100644 index 0000000..4fda377 --- /dev/null +++ b/kernel/framework/include/udi.h @@ -0,0 +1,111 @@ +/* + * Purpose: USB abstraction structures and functions used by OSS + * + * OS dependent wrappers for various USB related kernel interfaces. Each + * operating system will have it's private udi.c file which implements + * the services defined here. + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +/* typedef struct udi_usb_devc udi_usb_devc; // Moved to os.h */ + +typedef struct +{ + char *altsetting_labels; + int default_altsetting; + unsigned int altsetting_mask; +} ossusb_altsetting_def_t; + +#define MAX_ALTSETTINGS 20 + +typedef struct udi_usb_devinfo +{ + int vendor, product; + char *name; + const ossusb_altsetting_def_t altsettings[MAX_ALTSETTINGS]; +} +udi_usb_devinfo; + +typedef struct +{ + void *(*attach) (udi_usb_devc * devc, oss_device_t * osdev); + void (*disconnect) (void *devc); +} udi_usb_driver; + +extern int udi_attach_usbdriver (oss_device_t * osdev, + const udi_usb_devinfo * devlist, + udi_usb_driver * driver); +extern void udi_unload_usbdriver (oss_device_t * osdev); + +extern int udi_usb_trace; +extern int udi_usbdev_get_class (udi_usb_devc * usbdev); +extern int udi_usbdev_get_subclass (udi_usb_devc * usbdev); +extern int udi_usbdev_get_vendor (udi_usb_devc * usbdev); +extern int udi_usbdev_get_product (udi_usb_devc * usbdev); +extern int udi_usbdev_get_inum (udi_usb_devc * usbdev); +extern unsigned char *udi_usbdev_get_endpoint (udi_usb_devc * usbdev, + int altsetting, int n, + int *len); +#define EP_IN 0 +#define EP_OUT 1 +extern char *udi_usbdev_get_name (udi_usb_devc * usbdev); +extern char *udi_usbdev_get_altsetting_labels (udi_usb_devc * usbdev, int if_num, int *default_alt, unsigned int *mask); +extern char *udi_usbdev_get_string (udi_usb_devc * usbdev, int ix); +extern char *udi_usbdev_get_devpath (udi_usb_devc * usbdev); +extern int udi_usbdev_get_num_altsettings (udi_usb_devc * usbdev); +extern int udi_usbdev_get_usb_version (udi_usb_devc * usbdev); +extern unsigned char *udi_usbdev_get_altsetting (udi_usb_devc * usbdev, int n, + int *size); +extern int udi_usbdev_set_interface (udi_usb_devc * usbdev, int inum, + int altset); +extern int udi_usb_snd_control_msg (udi_usb_devc * usbdev, + unsigned int endpoint, unsigned char rq, + unsigned char rqtype, + unsigned short value, + unsigned short index, void *buf, int len, + int timeout); +extern int udi_usb_rcv_control_msg (udi_usb_devc * usbdev, + unsigned int endpoint, unsigned char rq, + unsigned char rqtype, + unsigned short value, + unsigned short index, void *buf, int len, + int timeout); + +typedef struct udi_usb_request udi_usb_request_t; /* Opaque type */ +typedef struct _udi_endpoint_handle_t udi_endpoint_handle_t; + +extern udi_endpoint_handle_t *udi_open_endpoint (udi_usb_devc * usbdev, + void *ep_descr); +extern void udi_close_endpoint (udi_endpoint_handle_t * eph); +extern int udi_endpoint_get_num (udi_endpoint_handle_t * eph); + +#define UDI_USBXFER_ISO_WRITE 1 +#define UDI_USBXFER_ISO_READ 2 +#define UDI_USBXFER_BULK_READ 3 +#define UDI_USBXFER_BULK_WRITE 4 +#define UDI_USBXFER_INTR_READ 5 +typedef void (*udi_usb_complete_func_t) (udi_usb_request_t * request, + void *arg); + +extern udi_usb_request_t *udi_usb_alloc_request (udi_usb_devc * usbdev, + udi_endpoint_handle_t * eph, + int nframes, int xfer_type); +extern void udi_usb_free_request (udi_usb_request_t * request); +extern int udi_usb_submit_request (udi_usb_request_t * request, + udi_usb_complete_func_t callback, + void *callback_arg, + udi_endpoint_handle_t * eph, int xfer_type, + void *data, int data_len); +extern void udi_usb_cancel_request (udi_usb_request_t * request); +extern int udi_usb_request_actlen (udi_usb_request_t * request); +extern unsigned char *udi_usb_request_actdata (udi_usb_request_t * request); |