xref: /minix/minix/include/ddekit/usb.h (revision 433d6423)
1 #ifndef _DDEKIT_USB_H
2 #define _DDEKIT_USB_H
3 
4 #include <ddekit/ddekit.h>
5 #include <ddekit/types.h>
6 
7 /** isochronous transfer */
8 #define  DDEKIT_USB_TRANSFER_ISO 0
9 /** interrupt transfer */
10 #define  DDEKIT_USB_TRANSFER_INT 1
11  /** control transfer */
12 #define  DDEKIT_USB_TRANSFER_CTL 2
13 /** bulk transfer */
14 #define  DDEKIT_USB_TRANSFER_BLK 3
15 
16 #define DDEKIT_USB_IN  1
17 #define DDEKIT_USB_OUT 0
18 
19 struct ddekit_usb_dev;
20 struct ddekit_usb_urb;
21 
22 struct ddekit_usb_device_id {
23 	ddekit_uint16_t idVendor;
24 	ddekit_uint16_t idProduct;
25 	ddekit_uint32_t bcdDevice;
26 
27 	ddekit_uint8_t  bDeviceClass;
28 	ddekit_uint8_t  bDeviceSubClass;
29 	ddekit_uint8_t  bDeviceProtocol;
30 
31 	ddekit_uint8_t  bInterfaceClass;
32 	ddekit_uint8_t  bInterfaceSubClass;
33 	ddekit_uint8_t  bInterfaceProtocol;
34 
35 };
36 
37 struct ddekit_usb_iso_packet_desc {
38 	ddekit_int32_t offset;
39 	ddekit_int32_t length;		/* expected length */
40 	ddekit_int32_t actual_length;
41 	ddekit_int32_t status;
42 };
43 
44 typedef void (*ddekit_usb_completion_cb)(void* priv);
45 
46 typedef void (*ddekit_usb_connect_cb)(struct ddekit_usb_dev *dev,
47                                       unsigned int interfaces);
48 
49 typedef void (*ddekit_usb_disconnect_cb)(struct ddekit_usb_dev *dev);
50 
51 typedef void *(*ddekit_usb_malloc_fn)(unsigned size);
52 typedef void (*ddekit_usb_free_fn)(void *ptr);
53 
54 struct ddekit_usb_driver {
55 	ddekit_usb_completion_cb completion;
56 	ddekit_usb_connect_cb    connect;
57 	ddekit_usb_disconnect_cb    disconnect;
58 };
59 
60 
61 struct ddekit_usb_urb {
62 	struct ddekit_usb_dev *dev;
63 	ddekit_int32_t type;
64 	ddekit_int32_t endpoint;
65 	ddekit_int32_t direction;
66 	ddekit_int32_t status;
67 	ddekit_int32_t interval;
68 	ddekit_uint32_t transfer_flags;
69 	ddekit_uint32_t size;
70 	ddekit_uint32_t actual_length;
71 	ddekit_int32_t number_of_packets;
72 	ddekit_int32_t error_count;
73 	ddekit_int32_t start_frame;
74 	char *setup_packet;
75 	char *data;
76 	struct ddekit_usb_iso_packet_desc *iso_desc;
77 	void *priv;
78 	void *ddekit_priv;
79 };
80 
81 int ddekit_usb_dev_set_data(struct ddekit_usb_dev *dev, void *data);
82 void *ddekit_usb_dev_get_data(struct ddekit_usb_dev *dev);
83 void ddekit_usb_get_device_id(struct ddekit_usb_dev *dev, struct
84 	ddekit_usb_device_id *id);
85 int ddekit_usb_submit_urb(struct ddekit_usb_urb *d_urb);
86 int ddekit_usb_cancle_urb(struct ddekit_usb_urb *d_urb);
87 
88 /*
89  * This one is only implemented for the client side. For the server side is
90  * has to be implemented in the DDELinux/FBSD part.
91  */
92 int ddekit_usb_init(struct ddekit_usb_driver *drv, ddekit_usb_malloc_fn
93 	*_m, ddekit_usb_free_fn *_f);
94 
95 #endif
96