36#pragma data_alignment=32
38#pragma data_alignment=32
59void usbh_init_memory()
72 dev_alloc_mark[i] = 0;
75 urb_alloc_mark[i] = 0;
78 hub_alloc_mark[i] = 0;
96 if (urb_alloc_mark[i] == 0)
98 urb_alloc_mark[i] = 1;
99 memset((
char *)&g_urb_pool[i], 0,
sizeof(
URB_T));
100 return &g_urb_pool[i];
103 USB_error(
"USBH_AllocUrb failed!\n");
119 if (&g_urb_pool[i] == urb)
121 urb_alloc_mark[i] = 0;
125 USB_error(
"USBH_FreeUrb - missed!\n");
137 if (urb_alloc_mark[i])
139 if (g_urb_pool[i].dev == dev)
142 urb_alloc_mark[i] = 0;
149ED_T * ohci_alloc_ed()
155 if (ed_alloc_mark[i] == 0)
157 ed_alloc_mark[i] = 1;
158 memset((
char *)&g_ed_pool[i], 0,
sizeof(ED_T));
160 return &g_ed_pool[i];
163 USB_error(
"ohci_alloc_ed failed!\n");
168void ohci_free_ed(ED_T *ed_p)
174 if (&g_ed_pool[i] == ed_p)
176 ed_alloc_mark[i] = 0;
181 USB_error(
"ohci_free_ed - missed!\n");
191 if (td_alloc_mark[i] == 0)
193 td_alloc_mark[i] = 1;
194 td_alloc_dev[i] = dev;
195 memset((
char *)&g_td_pool[i], 0,
sizeof(TD_T));
197 return &g_td_pool[i];
200 USB_error(
"ohci_alloc_td failed!\n");
205void ohci_free_td(TD_T *td_p)
211 if ((&g_td_pool[i] == td_p) && (td_alloc_mark[i]))
214 td_alloc_mark[i] = 0;
226 if ((td_alloc_mark[i]) && (td_alloc_dev[i] == dev))
229 td_alloc_mark[i] = 0;
247 if (dev_alloc_mark[i] == 0)
249 dev_alloc_mark[i] = 1;
250 dev = &g_dev_pool[i];
251 memset((
char *)dev, 0,
sizeof(*dev));
252 dev->act_config = -1;
253 dev->parent = parent;
255 if (dev->bus->op->allocate(dev) != 0)
257 dev_alloc_mark[i] = 0;
263 USB_error(
"usbh_alloc_device failed!\n");
271 OHCI_DEVICE_T *ohcidev;
273 dev->bus->op->deallocate(dev);
276 if (&g_dev_pool[i] == dev)
278 ohcidev = usb_to_ohci(dev);
279 for (j = 0; j < NUM_EDS; j++)
281 if (ohcidev->edp[j] !=
NULL)
282 ohci_free_ed(ohcidev->edp[j]);
284 dev_alloc_mark[i] = 0;
288 USB_error(
"usbh_free_device - missed!\n");
292USB_HUB_T * usbh_alloc_hubdev()
298 if (hub_alloc_mark[i] == 0)
300 hub_alloc_mark[i] = 1;
301 memset((
char *)&g_hub_pool[i], 0,
sizeof(USB_HUB_T));
302 return &g_hub_pool[i];
305 USB_error(
"usbh_alloc_hubdev failed!\n");
310void usbh_free_hubdev(USB_HUB_T *hub)
316 if (&g_hub_pool[i] == hub)
318 hub_alloc_mark[i] = 0;
322 USB_error(
"ohci_free_ed - missed!\n");
326USB_HUB_T * usbh_get_hub_by_dev(
USB_DEV_T *dev)
332 if (hub_alloc_mark[i])
334 if (g_hub_pool[i].dev == dev)
335 return &g_hub_pool[i];
346void usbh_mdelay(uint32_t msec)
348 volatile uint32_t t0;
349 volatile uint32_t frame_no;
351 if ((
USBH->HcControl & 0xC0) == 0x40)
354 for (t0 = 0; t0 < msec; t0++)
356 frame_no =
USBH->HcFmNumber;
357 while (
USBH->HcFmNumber == frame_no) ;
362 for (t0 = 0; t0 < msec * 0x1000; t0++) ;
void *__dso_handle __attribute__((weak))
NUC472/NUC442 peripheral access layer header file. This file contains all the peripheral register's d...
int32_t USBH_UnlinkUrb(URB_T *urb)
Cancel an URB which has been submit to USB core.
URB_T * USBH_AllocUrb(void)
Allocate an URB from USB Core driver internal URB pool.
void USBH_FreeUrb(URB_T *)
Free the URB allocated from USBH_AllocUrb()
HIDDEN_SYMBOLS struct usb_device USB_DEV_T
#define NULL
NULL pointer.
USB Host core driver header file.