 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); 
int usb_add_hcd(struct usb_hcd *hcd,		unsigned int irqnum, unsigned long irqflags){	int retval;	struct usb_device *rhdev;	dev_info(hcd->self.controller, "%s\n", hcd->product_desc);	/* till now HC has been in an indeterminate state ... */	if (hcd->driver->reset && (retval = hcd->driver->reset(hcd)) < 0) {		dev_err(hcd->self.controller, "can't reset\n");		return retval;	}	if ((retval = hcd_buffer_create(hcd)) != 0) {		dev_dbg(hcd->self.controller, "pool alloc failed\n");		return retval;	}	if ((retval = usb_register_bus(&hcd->self)) < 0)		goto err_register_bus;	if (hcd->driver->irq) {		char	buf[8], *bufp = buf;#ifdef __sparc__		bufp = __irq_itoa(irqnum);#else		sprintf(buf, "%d", irqnum);#endif		snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",				hcd->driver->description, hcd->self.busnum);		if ((retval = request_irq(irqnum, &usb_hcd_irq, irqflags,				hcd->irq_descr, hcd)) != 0) {			dev_err(hcd->self.controller,					"request interrupt %s failed\n", bufp);			goto err_request_irq;		}		hcd->irq = irqnum;		dev_info(hcd->self.controller, "irq %s, %s 0x%08llx\n", bufp,				(hcd->driver->flags & HCD_MEMORY) ?					"io mem" : "io base",					(unsigned long long)hcd->rsrc_start);	} else {		hcd->irq = -1;		if (hcd->rsrc_start)			dev_info(hcd->self.controller, "%s 0x%08llx\n",					(hcd->driver->flags & HCD_MEMORY) ?					"io mem" : "io base",					(unsigned long long)hcd->rsrc_start);	}	/* Allocate the root hub before calling hcd->driver->start(),	 * but don't register it until afterward so that the hardware	 * is running.	 */	if ((rhdev = usb_alloc_dev(NULL, &hcd->self, 0)) == NULL) {		dev_err(hcd->self.controller, "unable to allocate root hub\n");		retval = -ENOMEM;		goto err_allocate_root_hub;	}	rhdev->speed = (hcd->driver->flags & HCD_USB2) ? USB_SPEED_HIGH :			USB_SPEED_FULL;	/* Although in principle hcd->driver->start() might need to use rhdev,	 * none of the current drivers do.	 */	if ((retval = hcd->driver->start(hcd)) < 0) {		dev_err(hcd->self.controller, "startup error %d\n", retval);		goto err_hcd_driver_start;	}	/* hcd->driver->start() reported can_wakeup, probably with	 * assistance from board's boot firmware.	 * NOTE:  normal devices won't enable wakeup by default.	 */	if (hcd->can_wakeup)		dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");	hcd->remote_wakeup = hcd->can_wakeup;	if ((retval = register_root_hub(rhdev, hcd)) != 0)		goto err_register_root_hub;	if (hcd->uses_new_polling && hcd->poll_rh)		usb_hcd_poll_rh_status(hcd);	return retval; err_register_root_hub:	hcd->driver->stop(hcd); err_hcd_driver_start:	usb_put_dev(rhdev); err_allocate_root_hub:	if (hcd->irq >= 0)		free_irq(irqnum, hcd); err_request_irq:	usb_deregister_bus(&hcd->self); err_register_bus:	hcd_buffer_destroy(hcd);	return retval;} 
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/8de98402652c01839ae321be6cb3054cf5735d83/hcd.c/clean/drivers/usb/core/hcd.c