23#pragma data_alignment=32
25#pragma data_alignment=32
61 dev_alloc_mark[i] = 0;
64 urb_alloc_mark[i] = 0;
67 hub_alloc_mark[i] = 0;
82 if(urb_alloc_mark[i] == 0)
84 urb_alloc_mark[i] = 1;
85 memset((
char *)&g_urb_pool[i], 0,
sizeof(
URB_T));
86 return &g_urb_pool[i];
89 USB_error(
"USBH_AllocUrb failed!\n");
105 if(&g_urb_pool[i] == urb)
107 urb_alloc_mark[i] = 0;
111 USB_error(
"USBH_FreeUrb - missed!\n");
121 if(urb_alloc_mark[i])
123 if(g_urb_pool[i].dev == dev)
126 urb_alloc_mark[i] = 0;
139 if(ed_alloc_mark[i] == 0)
141 ed_alloc_mark[i] = 1;
142 memset((
char *)&g_ed_pool[i], 0,
sizeof(ED_T));
144 return &g_ed_pool[i];
147 USB_error(
"ohci_alloc_ed failed!\n");
158 if(&g_ed_pool[i] == ed_p)
160 ed_alloc_mark[i] = 0;
165 USB_error(
"ohci_free_ed - missed!\n");
175 if(td_alloc_mark[i] == 0)
177 td_alloc_mark[i] = 1;
178 td_alloc_dev[i] = dev;
179 memset((
char *)&g_td_pool[i], 0,
sizeof(TD_T));
181 return &g_td_pool[i];
184 USB_error(
"ohci_alloc_td failed!\n");
195 if((&g_td_pool[i] == td_p) && (td_alloc_mark[i]))
198 td_alloc_mark[i] = 0;
210 if((td_alloc_mark[i]) && (td_alloc_dev[i] == dev))
213 td_alloc_mark[i] = 0;
231 if(dev_alloc_mark[i] == 0)
233 dev_alloc_mark[i] = 1;
234 dev = &g_dev_pool[i];
235 memset((
char *)dev, 0,
sizeof(*dev));
236 dev->act_config = -1;
237 dev->parent = parent;
239 if(dev->bus->op->allocate(dev) != 0)
241 dev_alloc_mark[i] = 0;
247 USB_error(
"usbh_alloc_device failed!\n");
255 OHCI_DEVICE_T *ohcidev;
257 dev->bus->op->deallocate(dev);
260 if(&g_dev_pool[i] == dev)
262 ohcidev = usb_to_ohci(dev);
263 for(j = 0; j < NUM_EDS; j++)
265 if(ohcidev->edp[j] !=
NULL)
268 dev_alloc_mark[i] = 0;
272 USB_error(
"usbh_free_device - missed!\n");
282 if(hub_alloc_mark[i] == 0)
284 hub_alloc_mark[i] = 1;
285 memset((
char *)&g_hub_pool[i], 0,
sizeof(USB_HUB_T));
286 return &g_hub_pool[i];
289 USB_error(
"usbh_alloc_hubdev failed!\n");
300 if(&g_hub_pool[i] == hub)
302 hub_alloc_mark[i] = 0;
306 USB_error(
"ohci_free_ed - missed!\n");
316 if(hub_alloc_mark[i])
318 if(g_hub_pool[i].dev == dev)
319 return &g_hub_pool[i];
332 volatile uint32_t t0;
333 volatile uint32_t frame_no;
335 if((
USBH->HcControl & 0xC0) == 0x40)
338 for(t0 = 0; t0 < msec; t0++)
340 frame_no =
USBH->HcFmNumber;
341 while(
USBH->HcFmNumber == frame_no) ;
346 for(t0 = 0; t0 < msec * 0x1000; t0++) ;
void *__dso_handle __attribute__((weak))
URB_T * USBH_AllocUrb()
Allocate an URB from USB Core driver internal URB pool.
int32_t USBH_UnlinkUrb(URB_T *urb)
Cancel an URB which has been submit to USB core.
void USBH_FreeUrb(URB_T *urb)
Free the URB allocated from USBH_AllocUrb()
USB Host core driver header file.
HIDDEN_SYMBOLS struct usb_device USB_DEV_T
USB_HUB_T * usbh_alloc_hubdev()
void usbh_free_device(USB_DEV_T *dev)
void ohci_free_td(TD_T *td_p)
TD_T * ohci_alloc_td(USB_DEV_T *dev)
USB_HUB_T * usbh_get_hub_by_dev(USB_DEV_T *dev)
HIDDEN_SYMBOLS void usbh_init_memory()
void ohci_free_ed(ED_T *ed_p)
void usbh_free_hubdev(USB_HUB_T *hub)
USB_DEV_T * usbh_alloc_device(USB_DEV_T *parent, USB_BUS_T *bus)
void usbh_mdelay(uint32_t msec)
void usbh_free_dev_urbs(USB_DEV_T *dev)
void ohci_free_dev_td(USB_DEV_T *dev)