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