lkml.org 
[lkml]   [2023]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 05/32] usb: host: xhci-mem: Allow for interrupter clients to choose specific index
    Date
    Some clients may operate only on a specific XHCI interrupter instance.
    Allow for the associated class driver to request for the interrupter that
    it requires.

    Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
    ---
    drivers/usb/host/xhci-mem.c | 12 ++++++------
    include/linux/usb/xhci-intr.h | 2 +-
    2 files changed, 7 insertions(+), 7 deletions(-)

    diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
    index 6b01d56c176f..310137df06eb 100644
    --- a/drivers/usb/host/xhci-mem.c
    +++ b/drivers/usb/host/xhci-mem.c
    @@ -2396,7 +2396,7 @@ xhci_add_interrupter(struct xhci_hcd *xhci, struct xhci_interrupter *ir,
    }

    struct xhci_interrupter *
    -xhci_create_secondary_interrupter(struct usb_hcd *hcd)
    +xhci_create_secondary_interrupter(struct usb_hcd *hcd, int intr_num)
    {
    struct xhci_hcd *xhci = hcd_to_xhci(hcd);
    struct xhci_interrupter *ir;
    @@ -2411,15 +2411,15 @@ xhci_create_secondary_interrupter(struct usb_hcd *hcd)
    return NULL;

    spin_lock_irq(&xhci->lock);
    -
    /* Find available secondary interrupter, interrupter 0 is reserverd for primary */
    for (i = 1; i < xhci->max_interrupters; i++) {
    - if (xhci->interrupters[i] == NULL) {
    - err = xhci_add_interrupter(xhci, ir, i);
    - break;
    + if ((intr_num > 0 && i == intr_num) || intr_num <= 0) {
    + if (xhci->interrupters[i] == NULL) {
    + err = xhci_add_interrupter(xhci, ir, i);
    + break;
    + }
    }
    }
    -
    spin_unlock_irq(&xhci->lock);

    if (!err) {
    diff --git a/include/linux/usb/xhci-intr.h b/include/linux/usb/xhci-intr.h
    index e0091ee2c73a..738b0f0481a6 100644
    --- a/include/linux/usb/xhci-intr.h
    +++ b/include/linux/usb/xhci-intr.h
    @@ -81,6 +81,6 @@ struct xhci_interrupter {
    };

    struct xhci_interrupter *
    -xhci_create_secondary_interrupter(struct usb_hcd *hcd);
    +xhci_create_secondary_interrupter(struct usb_hcd *hcd, int intr_num);
    void xhci_remove_secondary_interrupter(struct usb_hcd *hcd, struct xhci_interrupter *ir);
    #endif
    \
     
     \ /
      Last update: 2023-07-25 04:37    [W:4.062 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site