|
@@ -209,7 +209,7 @@ static int ohci_urb_enqueue (
|
|
|
retval = -ENODEV;
|
|
|
goto fail;
|
|
|
}
|
|
|
- if (!HC_IS_RUNNING(hcd->state)) {
|
|
|
+ if (ohci->rh_state != OHCI_RH_RUNNING) {
|
|
|
retval = -ENODEV;
|
|
|
goto fail;
|
|
|
}
|
|
@@ -274,7 +274,7 @@ static int ohci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
|
|
|
rc = usb_hcd_check_unlink_urb(hcd, urb, status);
|
|
|
if (rc) {
|
|
|
; /* Do nothing */
|
|
|
- } else if (HC_IS_RUNNING(hcd->state)) {
|
|
|
+ } else if (ohci->rh_state == OHCI_RH_RUNNING) {
|
|
|
urb_priv_t *urb_priv;
|
|
|
|
|
|
/* Unless an IRQ completed the unlink while it was being
|
|
@@ -321,7 +321,7 @@ ohci_endpoint_disable (struct usb_hcd *hcd, struct usb_host_endpoint *ep)
|
|
|
rescan:
|
|
|
spin_lock_irqsave (&ohci->lock, flags);
|
|
|
|
|
|
- if (!HC_IS_RUNNING (hcd->state)) {
|
|
|
+ if (ohci->rh_state != OHCI_RH_RUNNING) {
|
|
|
sanitize:
|
|
|
ed->state = ED_IDLE;
|
|
|
if (quirk_zfmicro(ohci) && ed->type == PIPE_INTERRUPT)
|
|
@@ -377,6 +377,7 @@ static void ohci_usb_reset (struct ohci_hcd *ohci)
|
|
|
ohci->hc_control = ohci_readl (ohci, &ohci->regs->control);
|
|
|
ohci->hc_control &= OHCI_CTRL_RWC;
|
|
|
ohci_writel (ohci, ohci->hc_control, &ohci->regs->control);
|
|
|
+ ohci->rh_state = OHCI_RH_HALTED;
|
|
|
}
|
|
|
|
|
|
/* ohci_shutdown forcibly disables IRQs and DMA, helping kexec and
|
|
@@ -503,7 +504,7 @@ static int ohci_init (struct ohci_hcd *ohci)
|
|
|
if (distrust_firmware)
|
|
|
ohci->flags |= OHCI_QUIRK_HUB_POWER;
|
|
|
|
|
|
- disable (ohci);
|
|
|
+ ohci->rh_state = OHCI_RH_HALTED;
|
|
|
ohci->regs = hcd->regs;
|
|
|
|
|
|
/* REVISIT this BIOS handshake is now moved into PCI "quirks", and
|
|
@@ -578,7 +579,7 @@ static int ohci_run (struct ohci_hcd *ohci)
|
|
|
int first = ohci->fminterval == 0;
|
|
|
struct usb_hcd *hcd = ohci_to_hcd(ohci);
|
|
|
|
|
|
- disable (ohci);
|
|
|
+ ohci->rh_state = OHCI_RH_HALTED;
|
|
|
|
|
|
/* boot firmware should have set this up (5.1.1.3.1) */
|
|
|
if (first) {
|
|
@@ -691,7 +692,7 @@ retry:
|
|
|
ohci->hc_control &= OHCI_CTRL_RWC;
|
|
|
ohci->hc_control |= OHCI_CONTROL_INIT | OHCI_USB_OPER;
|
|
|
ohci_writel (ohci, ohci->hc_control, &ohci->regs->control);
|
|
|
- hcd->state = HC_STATE_RUNNING;
|
|
|
+ ohci->rh_state = OHCI_RH_RUNNING;
|
|
|
|
|
|
/* wake on ConnectStatusChange, matching external hubs */
|
|
|
ohci_writel (ohci, RH_HS_DRWE, &ohci->regs->roothub.status);
|
|
@@ -728,7 +729,6 @@ retry:
|
|
|
|
|
|
// POTPGT delay is bits 24-31, in 2 ms units.
|
|
|
mdelay ((val >> 23) & 0x1fe);
|
|
|
- hcd->state = HC_STATE_RUNNING;
|
|
|
|
|
|
if (quirk_zfmicro(ohci)) {
|
|
|
/* Create timer to watch for bad queue state on ZF Micro */
|
|
@@ -764,7 +764,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
|
|
* of dead, unclocked, or unplugged (CardBus...) devices
|
|
|
*/
|
|
|
if (ints == ~(u32)0) {
|
|
|
- disable (ohci);
|
|
|
+ ohci->rh_state = OHCI_RH_HALTED;
|
|
|
ohci_dbg (ohci, "device removed!\n");
|
|
|
usb_hc_died(hcd);
|
|
|
return IRQ_HANDLED;
|
|
@@ -774,7 +774,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
|
|
ints &= ohci_readl(ohci, ®s->intrenable);
|
|
|
|
|
|
/* interrupt for some other device? */
|
|
|
- if (ints == 0 || unlikely(hcd->state == HC_STATE_HALT))
|
|
|
+ if (ints == 0 || unlikely(ohci->rh_state == OHCI_RH_HALTED))
|
|
|
return IRQ_NOTMINE;
|
|
|
|
|
|
if (ints & OHCI_INTR_UE) {
|
|
@@ -789,8 +789,8 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
|
|
|
|
|
schedule_work (&ohci->nec_work);
|
|
|
} else {
|
|
|
- disable (ohci);
|
|
|
ohci_err (ohci, "OHCI Unrecoverable Error, disabled\n");
|
|
|
+ ohci->rh_state = OHCI_RH_HALTED;
|
|
|
usb_hc_died(hcd);
|
|
|
}
|
|
|
|
|
@@ -874,11 +874,11 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
|
|
if ((ints & OHCI_INTR_SF) != 0
|
|
|
&& !ohci->ed_rm_list
|
|
|
&& !ohci->ed_to_check
|
|
|
- && HC_IS_RUNNING(hcd->state))
|
|
|
+ && ohci->rh_state == OHCI_RH_RUNNING)
|
|
|
ohci_writel (ohci, OHCI_INTR_SF, ®s->intrdisable);
|
|
|
spin_unlock (&ohci->lock);
|
|
|
|
|
|
- if (HC_IS_RUNNING(hcd->state)) {
|
|
|
+ if (ohci->rh_state == OHCI_RH_RUNNING) {
|
|
|
ohci_writel (ohci, ints, ®s->intrstatus);
|
|
|
ohci_writel (ohci, OHCI_INTR_MIE, ®s->intrenable);
|
|
|
// flush those writes
|
|
@@ -932,7 +932,7 @@ static int ohci_restart (struct ohci_hcd *ohci)
|
|
|
struct urb_priv *priv;
|
|
|
|
|
|
spin_lock_irq(&ohci->lock);
|
|
|
- disable (ohci);
|
|
|
+ ohci->rh_state = OHCI_RH_HALTED;
|
|
|
|
|
|
/* Recycle any "live" eds/tds (and urbs). */
|
|
|
if (!list_empty (&ohci->pending))
|