}
}
-#ifdef _DU_OHCI_Q
+#ifdef _DU_OHCI_F_HALT
static void dbg_td_flag(u32 flag)
{
printf("**************** dbg_td_flag: 0x%08X ***************\n", flag);
}
#endif
-static void general_td_fill(struct general_td *dest, const usb_transfer_descriptor *src)
+static void general_td_fill(struct general_td *dest, const struct usb_transfer_descriptor *src)
{
if(src->actlen) {
dest->cbp = LE(virt_to_phys(src->buffer));
dest->flags |= LE(OHCI_TD_SET_DELAY_INTERRUPT(7));
}
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
static void dump_address(void *addr, u32 size, const char* str)
{
printf("%s hexdump (%d) @ 0x%08X:\n", str, size, addr);
if((LE(edhead->headp) & OHCI_ENDPOINT_HALTED)) {
n = phys_to_virt(LE(edhead->headp)&~0xf);
prev = phys_to_virt((u32)prev);
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
printf("halted!\n");
#endif
sync_before_read((void*) n, sizeof(struct general_td));
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
printf("n: 0x%08X\n", n);
dump_address(n, sizeof(struct general_td), "n(after)");
#endif
if(n->buflen > 0) {
sync_before_read((void*) n->bufaddr, n->buflen);
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
dump_address((void*) n->bufaddr, n->buflen, "n->bufaddr(after)");
#endif
}
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
dbg_td_flag(LE(n->flags));
#endif
sync_before_read((void*) prev, sizeof(struct general_td));
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
printf("prev: 0x%08X\n", prev);
dump_address(prev, sizeof(struct general_td), "prev(after)");
#endif
if(prev->buflen >0) {
sync_before_read((void*) prev->bufaddr, prev->buflen);
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
dump_address((void*) prev->bufaddr, prev->buflen, "prev->bufaddr(after)");
#endif
}
-#ifdef _DU_OHCI_F
+#ifdef _DU_OHCI_F_HALT
dbg_td_flag(LE(prev->flags));
printf("halted end!\n");
#endif
/**
* Enqueue a transfer descriptor.
*/
-u8 hcdi_enqueue(const usb_transfer_descriptor *td) {
+u8 hcdi_enqueue(const struct usb_transfer_descriptor *td) {
#ifdef _DU_OHCI_Q
printf("*()*()*()*()*()*()*() hcdi_enqueue(start)\n");
#endif
memset(edhead, 0, sizeof(struct endpoint_descriptor));
edhead->flags = LE(OHCI_ENDPOINT_GENERAL_FORMAT);
edhead->headp = edhead->tailp = edhead->nexted = LE(0);
- edhead->flags |= LE(OHCI_ENDPOINT_LOW_SPEED |
- OHCI_ENDPOINT_SET_DEVICE_ADDRESS(td->devaddress) |
+ if(td->fullspeed) {
+ edhead->flags |= LE(OHCI_ENDPOINT_FULL_SPEED);
+ } else {
+ edhead->flags |= LE(OHCI_ENDPOINT_LOW_SPEED);
+ }
+ edhead->flags |= LE(OHCI_ENDPOINT_SET_DEVICE_ADDRESS(td->devaddress) |
OHCI_ENDPOINT_SET_ENDPOINT_NUMBER(td->endpoint) |
OHCI_ENDPOINT_SET_MAX_PACKET_SIZE(td->maxp));
edhead->tdcount = 0;
/**
* Remove an transfer descriptor from transfer queue.
*/
-u8 hcdi_dequeue(usb_transfer_descriptor *td) {
+u8 hcdi_dequeue(struct usb_transfer_descriptor *td) {
return 0;
}
printf("loop done\n");
#endif
- (void) usb_add_device();
+ /* returns usb_device struct */
+ (void) usb_add_device((read32(reg) & RH_PS_LSDA) >> 8);
}
}