--- usbdev.c.old 2002-12-11 15:12:29.000000000 +0900 +++ usbdev.c 2003-12-24 12:06:59.000000000 +0900 @@ -27,8 +27,11 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ +#define EXPORT_SYMTAB #include -#include +/*#include */ +#include +#include #include #include #include @@ -53,7 +56,8 @@ #include #ifdef DEBUG -#undef VDEBUG +/* #undef VDEBUG */ +#define VDEBUG #ifdef VDEBUG #define vdbg(fmt, arg...) printk(KERN_DEBUG __FILE__ ": " fmt "\n" , ## arg) #else @@ -197,16 +201,16 @@ return (req >= 0 && req <= 12) ? std_req_name[req] : "UNKNOWN"; } -#if 0 +#ifdef VDEBUG static void dump_setup(struct usb_ctrlrequest* s) { - dbg(__FUNCTION__ ": requesttype=%d", s->requesttype); - dbg(__FUNCTION__ ": request=%d %s", s->request, - get_std_req_name(s->request)); + dbg(__FUNCTION__ ": requesttype=%d", s->bRequestType); + dbg(__FUNCTION__ ": request=%d %s", s->bRequest, + get_std_req_name(s->bRequest)); dbg(__FUNCTION__ ": value=0x%04x", s->wValue); - dbg(__FUNCTION__ ": index=%d", s->index); - dbg(__FUNCTION__ ": length=%d", s->length); + dbg(__FUNCTION__ ": index=%d", s->wIndex); + dbg(__FUNCTION__ ": length=%d", s->wLength); } #endif @@ -647,8 +651,12 @@ case 0x82: // End Point // FIXME: send endpoint status break; + case 0x83: // String ? + // FIXME: send endpoint status + break; default: // Invalid Command + dbg(__FUNCTION__ ":STALL! bRequestType=%d", setup->bRequestType); endpoint_stall(&dev->ep[0]); // Stall End Point 0 break; } @@ -663,8 +671,10 @@ case 0x00: // Device if ((le16_to_cpu(setup->wValue) & 0xff) == 1) dev->remote_wakeup_en = 0; - else + else { + dbg(__FUNCTION__ ":STALL! bRequestType=%d", setup->bRequestType); endpoint_stall(&dev->ep[0]); + } break; case 0x02: // End Point if ((le16_to_cpu(setup->wValue) & 0xff) == 0) { @@ -674,8 +684,10 @@ endpoint_unstall(ep); endpoint_reset_datatoggle(ep); - } else + } else { + dbg(__FUNCTION__ ":STALL! wValue=%d", (le16_to_cpu(setup->wValue) & 0xff)); endpoint_stall(&dev->ep[0]); + } break; } @@ -686,6 +698,7 @@ do_reserved(struct usb_dev* dev, struct usb_ctrlrequest* setup) { // Invalid request, stall End Point 0 + dbg(__FUNCTION__ ":STALL! bRequestType=%d", setup->bRequestType); endpoint_stall(&dev->ep[0]); return SETUP_STAGE; } @@ -697,10 +710,13 @@ case 0x00: // Device if ((le16_to_cpu(setup->wValue) & 0xff) == 1) dev->remote_wakeup_en = 1; - else + else { + dbg(__FUNCTION__ ":STALL! wValue=%d", (le16_to_cpu(setup->wValue) & 0xff)); endpoint_stall(&dev->ep[0]); + } break; case 0x02: // End Point + dbg(__FUNCTION__ ":STALL! bRequestType=%d", setup->bRequestType); if ((le16_to_cpu(setup->wValue) & 0xff) == 0) { endpoint_t *ep = epaddr_to_ep(dev, @@ -750,11 +766,11 @@ switch (le16_to_cpu(setup->wValue) >> 8) { case USB_DT_DEVICE: // send device descriptor! - desc_len = desc_len > dev->dev_desc->bLength ? - dev->dev_desc->bLength : desc_len; + desc_len = desc_len > dev->dev_desc->bLength ? + dev->dev_desc->bLength : desc_len; dbg("sending device desc, size=%d", desc_len); - send_packet(dev, alloc_packet(&dev->ep[0], desc_len, - dev->dev_desc), 0); + send_packet(dev, alloc_packet(&dev->ep[0], desc_len, + dev->dev_desc), 0); break; case USB_DT_CONFIG: // If the config descr index in low-byte of @@ -781,8 +797,10 @@ dev->full_conf_desc), 0); } - } else - endpoint_stall(&dev->ep[0]); + } else { + dbg(__FUNCTION__ ":STALL! Request=%d", (le16_to_cpu(setup->wValue) >> 8)); + endpoint_stall(&dev->ep[0]); + } break; case USB_DT_STRING: // If the string descr index in low-byte of setup->wValue @@ -794,11 +812,13 @@ desc_len = desc_len > desc->bLength ? desc->bLength : desc_len; dbg("sending string desc %d", strnum); - send_packet(dev, + send_packet(dev, alloc_packet(&dev->ep[0], desc_len, desc), 0); - } else - endpoint_stall(&dev->ep[0]); + } else { + dbg(__FUNCTION__ ":STALL! Request=%d", strnum); + endpoint_stall(&dev->ep[0]); + } break; default: // Invalid request @@ -935,7 +955,7 @@ if (setup->bRequestType < sizeof(req_method)/sizeof(req_method_t)) m = req_method[setup->bRequestType]; - else + else m = do_reserved; dev->ep0_stage = (*m)(dev, setup); @@ -973,6 +993,12 @@ vdbg("SU bit is %s in setup stage", (pkt->status & PKT_STATUS_SU) ? "set" : "not set"); + vdbg(__FUNCTION__ ": received pkt size = %d : struct = %d", + pkt->size, sizeof(struct usb_ctrlrequest)); + +#ifdef VDEBUG + dump_setup((struct usb_ctrlrequest*)pkt->payload); +#endif if (pkt->size == sizeof(struct usb_ctrlrequest)) { #ifdef VDEBUG if (pkt->status & PKT_STATUS_ACK) @@ -981,8 +1007,9 @@ vdbg("received NAK SETUP"); #endif do_setup(dev, (struct usb_ctrlrequest*)pkt->payload); - } else - err(__FUNCTION__ ": wrong size SETUP received"); + } else { + err(__FUNCTION__ ": wrong size SETUP received"); + } break; case DATA_STAGE: /* @@ -1275,9 +1302,8 @@ return count; } - void -usbdev_exit(void) +usbdev_stop(void) { endpoint_t *ep; int i; @@ -1312,7 +1338,7 @@ } int -usbdev_init(struct usb_device_descriptor* dev_desc, +usbdev_start(struct usb_device_descriptor* dev_desc, struct usb_config_descriptor* config_desc, struct usb_interface_descriptor* if_desc, struct usb_endpoint_descriptor* ep_desc, @@ -1382,8 +1408,8 @@ err("too many IN ep's requested"); ret = -ENODEV; goto out; - } - } + } + } } else { ep = &usbdev.ep[4]; ep->address = 4; @@ -1394,8 +1420,8 @@ err("too many OUT ep's requested"); ret = -ENODEV; goto out; - } - } + } + } } ep->active = 1; @@ -1547,15 +1573,36 @@ kickstart_receive_packet(ep); } } + info(__FUNCTION__ ": DONE! ret = %d", ret); out: if (ret) - usbdev_exit(); + usbdev_stop(); return ret; } -EXPORT_SYMBOL(usbdev_init); -EXPORT_SYMBOL(usbdev_exit); +static void __exit +usbdev_exit(void) +{ + usbdev_stop(); + info("usbdev_init exitting"); +} + +static int __init usbdev_init(void) +{ + info("usbdev_init -- usbdev lower"); + return 0; +} + +/* Module information */ +MODULE_AUTHOR("Steve Longerbeam, stevel@mvista.com, www.mvista.com"); +MODULE_DESCRIPTION("Au1x00 USB Device-Side (device layer)"); +MODULE_LICENSE("GPL"); + +module_init(usbdev_init); +module_exit(usbdev_exit); +EXPORT_SYMBOL(usbdev_start); +EXPORT_SYMBOL(usbdev_stop); EXPORT_SYMBOL(usbdev_alloc_packet); EXPORT_SYMBOL(usbdev_receive_packet); EXPORT_SYMBOL(usbdev_send_packet);