usb: ehci: Make periodic_schedules a per controller variable
Periodic schedules tracks how many int_queue-s are active, and decides whether or not to en/disable the periodic schedule based on this. This is clearly a per controller thing. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
415548d884
commit
36b73109c4
@ -996,6 +996,7 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
|
||||
* Set up periodic list
|
||||
* Step 1: Parent QH for all periodic transfers.
|
||||
*/
|
||||
ehcic[index].periodic_schedules = 0;
|
||||
periodic = &ehcic[index].periodic_queue;
|
||||
memset(periodic, 0, sizeof(*periodic));
|
||||
periodic->qh_link = cpu_to_hc32(QH_LINK_TERMINATE);
|
||||
@ -1154,8 +1155,6 @@ disable_periodic(struct ehci_ctrl *ctrl)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int periodic_schedules;
|
||||
|
||||
struct int_queue *
|
||||
create_int_queue(struct usb_device *dev, unsigned long pipe, int queuesize,
|
||||
int elementsize, void *buffer)
|
||||
@ -1278,7 +1277,7 @@ create_int_queue(struct usb_device *dev, unsigned long pipe, int queuesize,
|
||||
debug("FATAL: periodic should never fail, but did");
|
||||
goto fail3;
|
||||
}
|
||||
periodic_schedules++;
|
||||
ctrl->periodic_schedules++;
|
||||
|
||||
debug("Exit create_int_queue\n");
|
||||
return result;
|
||||
@ -1335,7 +1334,7 @@ destroy_int_queue(struct usb_device *dev, struct int_queue *queue)
|
||||
debug("FATAL: periodic should never fail, but did");
|
||||
goto out;
|
||||
}
|
||||
periodic_schedules--;
|
||||
ctrl->periodic_schedules--;
|
||||
|
||||
struct QH *cur = &ctrl->periodic_queue;
|
||||
timeout = get_timer(0) + 500; /* abort after 500ms */
|
||||
@ -1357,7 +1356,7 @@ destroy_int_queue(struct usb_device *dev, struct int_queue *queue)
|
||||
}
|
||||
}
|
||||
|
||||
if (periodic_schedules > 0) {
|
||||
if (ctrl->periodic_schedules > 0) {
|
||||
result = enable_periodic(ctrl);
|
||||
if (result < 0)
|
||||
debug("FATAL: periodic should never fail, but did");
|
||||
|
@ -246,6 +246,7 @@ struct ehci_ctrl {
|
||||
struct QH qh_list __aligned(USB_DMA_MINALIGN);
|
||||
struct QH periodic_queue __aligned(USB_DMA_MINALIGN);
|
||||
uint32_t *periodic_list;
|
||||
int periodic_schedules;
|
||||
int ntds;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user