xref: /minix3/minix/drivers/usb/usb_hub/urb_helper.h (revision 2d64210c1dbcd340904718f2d4e9e81adeab3c7d)
1*2d64210cSWojciech Zajac /*
2*2d64210cSWojciech Zajac  * URB formatting related definitions
3*2d64210cSWojciech Zajac  */
4*2d64210cSWojciech Zajac 
5*2d64210cSWojciech Zajac #ifndef _URB_HELPER_H_
6*2d64210cSWojciech Zajac #define _URB_HELPER_H_
7*2d64210cSWojciech Zajac 
8*2d64210cSWojciech Zajac #include <ddekit/usb.h>
9*2d64210cSWojciech Zajac #include <ddekit/semaphore.h>
10*2d64210cSWojciech Zajac 
11*2d64210cSWojciech Zajac /* Possible values for attach_urb_data's buf_type */
12*2d64210cSWojciech Zajac /* Both may be used for single URB */
13*2d64210cSWojciech Zajac #define URB_BUF_TYPE_DATA 0		/* attached buffer is data buffer */
14*2d64210cSWojciech Zajac #define URB_BUF_TYPE_SETUP 1		/* attached buffer is setup structure */
15*2d64210cSWojciech Zajac 
16*2d64210cSWojciech Zajac /* Possible values for blocking_urb_submit's check_len */
17*2d64210cSWojciech Zajac /* Use URB_SUBMIT_CHECK_LEN when actual data buffer length returned
18*2d64210cSWojciech Zajac  * by HCD must match expected length, supplied in attach_urb_data */
19*2d64210cSWojciech Zajac #define URB_SUBMIT_CHECK_LEN 0		/* return error on length mismatch */
20*2d64210cSWojciech Zajac #define URB_SUBMIT_ALLOW_MISMATCH 1	/* ignore length check */
21*2d64210cSWojciech Zajac 
22*2d64210cSWojciech Zajac /* Endpoint configuration related */
23*2d64210cSWojciech Zajac #define URB_INVALID_EP (-1)		/* default for unset endpoint */
24*2d64210cSWojciech Zajac 
25*2d64210cSWojciech Zajac /*---------------------------*
26*2d64210cSWojciech Zajac  *    declared types         *
27*2d64210cSWojciech Zajac  *---------------------------*/
28*2d64210cSWojciech Zajac /* URB's endpoint configuration */
29*2d64210cSWojciech Zajac typedef struct urb_ep_config {
30*2d64210cSWojciech Zajac 
31*2d64210cSWojciech Zajac 	ddekit_int32_t ep_num;
32*2d64210cSWojciech Zajac 	ddekit_int32_t direction;
33*2d64210cSWojciech Zajac 	ddekit_int32_t type;
34*2d64210cSWojciech Zajac 	ddekit_int32_t max_packet_size;
35*2d64210cSWojciech Zajac 	ddekit_int32_t interval;
36*2d64210cSWojciech Zajac }
37*2d64210cSWojciech Zajac urb_ep_config;
38*2d64210cSWojciech Zajac 
39*2d64210cSWojciech Zajac /*---------------------------*
40*2d64210cSWojciech Zajac  *    declared functions     *
41*2d64210cSWojciech Zajac  *---------------------------*/
42*2d64210cSWojciech Zajac void init_urb(struct ddekit_usb_urb *, struct ddekit_usb_dev *,
43*2d64210cSWojciech Zajac 		urb_ep_config *);
44*2d64210cSWojciech Zajac void attach_urb_data(struct ddekit_usb_urb *, int, void *, ddekit_uint32_t);
45*2d64210cSWojciech Zajac int blocking_urb_submit(struct ddekit_usb_urb *, ddekit_sem_t *, int);
46*2d64210cSWojciech Zajac 
47*2d64210cSWojciech Zajac #endif /* !_URB_HELPER_H_ */
48