int usb_open(struct usb *usb, int init, struct proc_specific_functions *proc_ops) { struct per_handle *boot; u32 device; u16 options = 1; int n; /*clear global usb structure*/ memset(usb, 0, sizeof(*usb)); local_proc_ops = proc_ops; if (init) { device = DEVICE_USB; usb->dread.config_object = NULL; usb->dread.options = &options; usb->dread.device_type = DEVICE_USB; usb->dwrite.config_object = NULL; usb->dwrite.options = &options; usb->dwrite.device_type = DEVICE_USB; #if defined(CONFIG_IS_OMAP4) /* Bulk transfers default to DMA mode */ usb->dread.xfer_mode = XFER_MODE_DMA; usb->dwrite.xfer_mode = XFER_MODE_DMA; #endif n = rom_get_device_data((void *)&usb->dread.device_data); if (n) return n; usb->dwrite.device_data = usb->dread.device_data; } else { /* get peripheral device descriptor that was used during rom usb boot */ n = rom_get_per_device(&boot); if (n) return n; device = boot->device_type; memcpy(&usb->dread, boot, sizeof(struct per_handle)); memcpy(&usb->dwrite, boot, sizeof(struct per_handle)); } /* get rom usb driver */ n = rom_get_per_driver(&usb->io, device); if (n) return n; if (init) usb_init(usb); return 0; }
int usb_open(struct usb *usb) { int (*rom_get_per_driver)(struct per_driver **io, u32 device_type); int (*rom_get_per_device)(struct per_handle **rh); struct per_handle *boot; int n; u32 base; memset(usb, 0, sizeof(*usb)); if (get_omap_rev() >= OMAP_4460_ES1_DOT_0) base = PUBLIC_API_BASE_4460; else base = PUBLIC_API_BASE_4430; rom_get_per_driver = API(base + PUBLIC_GET_DRIVER_PER_OFFSET); rom_get_per_device = API(base + PUBLIC_GET_DEVICE_PER_OFFSET); n = rom_get_per_device(&boot); if (n) return n; if ((boot->device_type != DEVICE_USB) && (boot->device_type != DEVICE_USBEXT)) return -1; n = rom_get_per_driver(&usb->io, boot->device_type); if (n) return n; usb->dread.xfer_mode = boot->xfer_mode; usb->dread.options = boot->options; usb->dread.device_type = boot->device_type; usb->dwrite.xfer_mode = boot->xfer_mode; usb->dwrite.options = boot->options; usb->dwrite.device_type = boot->device_type; return 0; }