Merge 3.2-rc3 into usb-linus
authorGreg Kroah-Hartman <gregkh@suse.de>
Sun, 27 Nov 2011 03:46:19 +0000 (19:46 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 27 Nov 2011 03:46:48 +0000 (19:46 -0800)
This pulls in the latest USB bugfixes and helps a few of the drivers
merge nicer in the future due to changes in both branches.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
1  2 
drivers/usb/gadget/Kconfig
drivers/usb/host/ehci-xls.c
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci-pci.c
drivers/usb/host/ohci.h
drivers/usb/host/xhci-ring.c
drivers/usb/musb/musb_core.c
drivers/usb/serial/pl2303.c
drivers/usb/storage/ene_ub6250.c

index a11dbc85d08b5a0585e5c154fc7e06f67f014b4c,23a447373c51f0c7d3f9a08cadad7a90f217c24a..3162a7da872474086f8846ce2f3af7945bab65d5
@@@ -15,7 -15,6 +15,7 @@@
  
  menuconfig USB_GADGET
        tristate "USB Gadget Support"
 +      select NLS
        help
           USB is a master/slave protocol, organized with one master
           host (such as a PC) controlling up to 127 peripheral devices.
@@@ -470,7 -469,7 +470,7 @@@ config USB_LANGWEL
           gadget drivers to also be dynamically linked.
  
  config USB_EG20T
-       tristate "Intel EG20T PCH/OKI SEMICONDUCTOR ML7213 IOH UDC"
+       tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
        depends on PCI
        select USB_GADGET_DUALSPEED
        help
          This driver dose not support interrupt transfer or isochronous
          transfer modes.
  
-         This driver also can be used for OKI SEMICONDUCTOR's ML7213 which is
+         This driver also can be used for LAPIS Semiconductor's ML7213 which is
          for IVI(In-Vehicle Infotainment) use.
-         ML7213 is companion chip for Intel Atom E6xx series.
-         ML7213 is completely compatible for Intel EG20T PCH.
+         ML7831 is for general purpose use.
+         ML7213/ML7831 is companion chip for Intel Atom E6xx series.
+         ML7213/ML7831 is completely compatible for Intel EG20T PCH.
  
  config USB_CI13XXX_MSM
        tristate "MIPS USB CI13xxx for MSM"
index 1078d6746d27138250e9f4cbb82a0f5b4c299ba2,b4fb511d24bcda76a4101aa605e01384c5962d21..72f08196f8cd7f08ae481a8ea3b0ff342e7cef38
@@@ -19,7 -19,7 +19,7 @@@ static int ehci_xls_setup(struct usb_hc
  
        ehci->caps = hcd->regs;
        ehci->regs = hcd->regs +
-               HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
+               HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase));
        dbg_hcs_params(ehci, "reset");
        dbg_hcc_params(ehci, "reset");
  
@@@ -69,7 -69,7 +69,7 @@@ int ehci_xls_probe_internal(const struc
        }
  
        hcd->rsrc_start = res->start;
 -      hcd->rsrc_len = res->end - res->start + 1;
 +      hcd->rsrc_len = resource_size(res);
  
        if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len,
                                driver->description)) {
index 95d639cd5b8c6ca37ce73a9478280297c3ee39b8,b2639191549e88172e803281a6c53300bd103b67..4fa5d8c4d2392254273f54682978eef3525b179e
@@@ -209,7 -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 +274,7 @@@ static int ohci_urb_dequeue(struct usb_
        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 +321,7 @@@ ohci_endpoint_disable (struct usb_hcd *
  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,7 -377,6 +377,7 @@@ static void ohci_usb_reset (struct 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
@@@ -390,17 -389,14 +390,14 @@@ ohci_shutdown (struct usb_hcd *hcd
        struct ohci_hcd *ohci;
  
        ohci = hcd_to_ohci (hcd);
-       ohci_writel (ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable);
-       ohci->hc_control = ohci_readl(ohci, &ohci->regs->control);
+       ohci_writel(ohci, (u32) ~0, &ohci->regs->intrdisable);
  
-       /* If the SHUTDOWN quirk is set, don't put the controller in RESET */
-       ohci->hc_control &= (ohci->flags & OHCI_QUIRK_SHUTDOWN ?
-                       OHCI_CTRL_RWC | OHCI_CTRL_HCFS :
-                       OHCI_CTRL_RWC);
-       ohci_writel(ohci, ohci->hc_control, &ohci->regs->control);
+       /* Software reset, after which the controller goes into SUSPEND */
+       ohci_writel(ohci, OHCI_HCR, &ohci->regs->cmdstatus);
+       ohci_readl(ohci, &ohci->regs->cmdstatus);       /* flush the writes */
+       udelay(10);
  
-       /* flush the writes */
-       (void) ohci_readl (ohci, &ohci->regs->control);
+       ohci_writel(ohci, ohci->fminterval, &ohci->regs->fminterval);
  }
  
  static int check_ed(struct ohci_hcd *ohci, struct ed *ed)
@@@ -504,7 -500,7 +501,7 @@@ static int ohci_init (struct ohci_hcd *
        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
@@@ -579,7 -575,7 +576,7 @@@ static int ohci_run (struct ohci_hcd *o
        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) {
@@@ -692,7 -688,7 +689,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);
  
        // 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 -761,7 +761,7 @@@ static irqreturn_t ohci_irq (struct usb
         * 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;
        ints &= ohci_readl(ohci, &regs->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) {
  
                        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);
                }
  
        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, &regs->intrdisable);
        spin_unlock (&ohci->lock);
  
 -      if (HC_IS_RUNNING(hcd->state)) {
 +      if (ohci->rh_state == OHCI_RH_RUNNING) {
                ohci_writel (ohci, ints, &regs->intrstatus);
                ohci_writel (ohci, OHCI_INTR_MIE, &regs->intrenable);
                // flush those writes
@@@ -932,7 -929,7 +929,7 @@@ static int ohci_restart (struct ohci_hc
        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))
@@@ -1114,7 -1111,7 +1111,7 @@@ MODULE_LICENSE ("GPL")
  #define PLATFORM_DRIVER               ohci_hcd_ath79_driver
  #endif
  
 -#ifdef CONFIG_NLM_XLR
 +#ifdef CONFIG_CPU_XLR
  #include "ohci-xls.c"
  #define PLATFORM_DRIVER               ohci_xls_driver
  #endif
index 847187df50a15ecbc91bc077d9cd5ac8189abccd,bc01b064585ac9da1d232106586d71937b78db66..6109810cc2d3eba72c8eeb6ebb38eff17b93a399
@@@ -175,28 -175,6 +175,6 @@@ static int ohci_quirk_amd700(struct usb
        return 0;
  }
  
- /* nVidia controllers continue to drive Reset signalling on the bus
-  * even after system shutdown, wasting power.  This flag tells the
-  * shutdown routine to leave the controller OPERATIONAL instead of RESET.
-  */
- static int ohci_quirk_nvidia_shutdown(struct usb_hcd *hcd)
- {
-       struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
-       struct ohci_hcd *ohci = hcd_to_ohci(hcd);
-       /* Evidently nVidia fixed their later hardware; this is a guess at
-        * the changeover point.
-        */
- #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_USB         0x026d
-       if (pdev->device < PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_USB) {
-               ohci->flags |= OHCI_QUIRK_SHUTDOWN;
-               ohci_dbg(ohci, "enabled nVidia shutdown quirk\n");
-       }
-       return 0;
- }
  static void sb800_prefetch(struct ohci_hcd *ohci, int on)
  {
        struct pci_dev *pdev;
@@@ -260,10 -238,6 +238,6 @@@ static const struct pci_device_id ohci_
                PCI_DEVICE(PCI_VENDOR_ID_ATI, 0x4399),
                .driver_data = (unsigned long)ohci_quirk_amd700,
        },
-       {
-               PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
-               .driver_data = (unsigned long) ohci_quirk_nvidia_shutdown,
-       },
  
        /* FIXME for some of the early AMD 760 southbridges, OHCI
         * won't work at all.  blacklist them.
@@@ -334,9 -308,12 +308,9 @@@ static int ohci_pci_suspend(struct usb_
         * mark HW unaccessible, bail out if RH has been resumed. Use
         * the spinlock to properly synchronize with possible pending
         * RH suspend or resume activity.
 -       *
 -       * This is still racy as hcd->state is manipulated outside of
 -       * any locks =P But that will be a different fix.
         */
        spin_lock_irqsave (&ohci->lock, flags);
 -      if (hcd->state != HC_STATE_SUSPENDED) {
 +      if (ohci->rh_state != OHCI_RH_SUSPENDED) {
                rc = -EINVAL;
                goto bail;
        }
diff --combined drivers/usb/host/ohci.h
index 3a978a2130cba09ef53c4b215f03c5a84e686afc,0795b934d00c9709800948c137a1aa84fd96e47d..8ff6f7ea96fd1f28a970cce75b36bacdc9dd21ed
@@@ -344,12 -344,6 +344,12 @@@ typedef struct urb_priv 
   * a subset of what the full implementation needs. (Linus)
   */
  
 +enum ohci_rh_state {
 +      OHCI_RH_HALTED,
 +      OHCI_RH_SUSPENDED,
 +      OHCI_RH_RUNNING
 +};
 +
  struct ohci_hcd {
        spinlock_t              lock;
  
        /*
         * driver state
         */
 +      enum ohci_rh_state      rh_state;
        int                     num_ports;
        int                     load [NUM_INTS];
        u32                     hc_control;     /* copy of hc control reg */
  #define       OHCI_QUIRK_HUB_POWER    0x100                   /* distrust firmware power/oc setup */
  #define       OHCI_QUIRK_AMD_PLL      0x200                   /* AMD PLL quirk*/
  #define       OHCI_QUIRK_AMD_PREFETCH 0x400                   /* pre-fetch for ISO transfer */
- #define       OHCI_QUIRK_SHUTDOWN     0x800                   /* nVidia power bug */
        // there are also chip quirks/bugs in init logic
  
        struct work_struct      nec_work;       /* Worker for NEC quirk */
@@@ -687,6 -679,11 +686,6 @@@ static inline u16 ohci_hwPSW(const stru
  
  /*-------------------------------------------------------------------------*/
  
 -static inline void disable (struct ohci_hcd *ohci)
 -{
 -      ohci_to_hcd(ohci)->state = HC_STATE_HALT;
 -}
 -
  #define       FI                      0x2edf          /* 12000 bits per frame (-1) */
  #define       FSMP(fi)                (0x7fff & ((6 * ((fi) - 210)) / 7))
  #define       FIT                     (1 << 31)
@@@ -710,7 -707,7 +709,7 @@@ static inline void periodic_reinit (str
  #define read_roothub(hc, register, mask) ({ \
        u32 temp = ohci_readl (hc, &hc->regs->roothub.register); \
        if (temp == -1) \
 -              disable (hc); \
 +              hc->rh_state = OHCI_RH_HALTED; \
        else if (hc->flags & OHCI_QUIRK_AMD756) \
                while (temp & mask) \
                        temp = ohci_readl (hc, &hc->regs->roothub.register); \
index 2f8c17381c6c54d32a6fa5c7c03a30a31818a967,9f1d4b15d818553fc488c8651a14d0e4b3301f66..133ce302c8607a593f31dcbf872cf0f9ce3870da
@@@ -816,23 -816,24 +816,24 @@@ void xhci_stop_endpoint_command_watchdo
        struct xhci_ring *ring;
        struct xhci_td *cur_td;
        int ret, i, j;
+       unsigned long flags;
  
        ep = (struct xhci_virt_ep *) arg;
        xhci = ep->xhci;
  
-       spin_lock(&xhci->lock);
+       spin_lock_irqsave(&xhci->lock, flags);
  
        ep->stop_cmds_pending--;
        if (xhci->xhc_state & XHCI_STATE_DYING) {
                xhci_dbg(xhci, "Stop EP timer ran, but another timer marked "
                                "xHCI as DYING, exiting.\n");
-               spin_unlock(&xhci->lock);
+               spin_unlock_irqrestore(&xhci->lock, flags);
                return;
        }
        if (!(ep->stop_cmds_pending == 0 && (ep->ep_state & EP_HALT_PENDING))) {
                xhci_dbg(xhci, "Stop EP timer ran, but no command pending, "
                                "exiting.\n");
-               spin_unlock(&xhci->lock);
+               spin_unlock_irqrestore(&xhci->lock, flags);
                return;
        }
  
        xhci->xhc_state |= XHCI_STATE_DYING;
        /* Disable interrupts from the host controller and start halting it */
        xhci_quiesce(xhci);
-       spin_unlock(&xhci->lock);
+       spin_unlock_irqrestore(&xhci->lock, flags);
  
        ret = xhci_halt(xhci);
  
-       spin_lock(&xhci->lock);
+       spin_lock_irqsave(&xhci->lock, flags);
        if (ret < 0) {
                /* This is bad; the host is not responding to commands and it's
                 * not allowing itself to be halted.  At least interrupts are
                        }
                }
        }
-       spin_unlock(&xhci->lock);
+       spin_unlock_irqrestore(&xhci->lock, flags);
        xhci_dbg(xhci, "Calling usb_hc_died()\n");
        usb_hc_died(xhci_to_hcd(xhci)->primary_hcd);
        xhci_dbg(xhci, "xHCI host controller is dead.\n");
@@@ -2389,7 -2390,17 +2390,7 @@@ hw_died
  
  irqreturn_t xhci_msi_irq(int irq, struct usb_hcd *hcd)
  {
 -      irqreturn_t ret;
 -      struct xhci_hcd *xhci;
 -
 -      xhci = hcd_to_xhci(hcd);
 -      set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
 -      if (xhci->shared_hcd)
 -              set_bit(HCD_FLAG_SAW_IRQ, &xhci->shared_hcd->flags);
 -
 -      ret = xhci_irq(hcd);
 -
 -      return ret;
 +      return xhci_irq(hcd);
  }
  
  /****         Endpoint Ring Operations        ****/
index 12044c473c38db7f83b6b5fb3c266c1d3d648179,c1fa12ec7a9ad456a23c761f5c328a721182a070..5495850867982370aa04854a040e96ea079f4785
@@@ -661,6 -661,7 +661,6 @@@ static irqreturn_t musb_stage0_irq(stru
  
                handled = IRQ_HANDLED;
                musb->is_active = 1;
 -              set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
  
                musb->ep0_stage = MUSB_EP0_START;
  
@@@ -1476,8 -1477,7 +1476,7 @@@ static int __init musb_core_init(u16 mu
  /*-------------------------------------------------------------------------*/
  
  #if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_SOC_OMAP3430) || \
-       defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_U8500) || \
-       defined(CONFIG_ARCH_U5500)
+       defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_U8500)
  
  static irqreturn_t generic_interrupt(int irq, void *__hci)
  {
index 56aa1e6cc380c5247765acd1d9a4d7f0dbc5ff65,fc2d66f7f4eb0ce3410a066e3877155651398eff..329295615d0634a86e9a10affe06ae52020e4949
@@@ -91,7 -91,6 +91,6 @@@ static const struct usb_device_id id_ta
        { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
        { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
        { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
-       { USB_DEVICE(WINCHIPHEAD_VENDOR_ID, WINCHIPHEAD_USBSER_PRODUCT_ID) },
        { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
        { }                                     /* Terminating entry */
  };
@@@ -503,20 -502,21 +502,20 @@@ static int pl2303_open(struct tty_struc
        if (tty)
                pl2303_set_termios(tty, port, &tmp_termios);
  
 -      dbg("%s - submitting read urb", __func__);
 -      result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL);
 -      if (result) {
 -              pl2303_close(port);
 -              return -EPROTO;
 -      }
 -
        dbg("%s - submitting interrupt urb", __func__);
        result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
        if (result) {
                dev_err(&port->dev, "%s - failed submitting interrupt urb,"
                        " error %d\n", __func__, result);
 -              pl2303_close(port);
 -              return -EPROTO;
 +              return result;
        }
 +
 +      result = usb_serial_generic_open(tty, port);
 +      if (result) {
 +              usb_kill_urb(port->interrupt_in_urb);
 +              return result;
 +      }
 +
        port->port.drain_delay = 256;
        return 0;
  }
index 9665f15f52a744ab1c83960136a5034a2c500654,9fbe742343c6cb6d023706bd7d5bd8170191d49e..b990726f144ad8af5ea225c069003418ced15ae7
@@@ -42,7 -42,7 +42,7 @@@ MODULE_LICENSE("GPL")
  { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
        .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
  
 -struct usb_device_id ene_ub6250_usb_ids[] = {
 +static struct usb_device_id ene_ub6250_usb_ids[] = {
  #     include "unusual_ene_ub6250.h"
        { }             /* Terminating entry */
  };
@@@ -607,8 -607,8 +607,8 @@@ static int sd_scsi_mode_sense(struct us
  
  static int sd_scsi_read_capacity(struct us_data *us, struct scsi_cmnd *srb)
  {
 -      u32   bl_num;
 -      u16    bl_len;
 +      u32     bl_num;
 +      u32     bl_len;
        unsigned int offset = 0;
        unsigned char    buf[8];
        struct scatterlist *sg = NULL;
                else
                        bl_num = (info->HC_C_SIZE + 1) * 1024 - 1;
        } else {
 -              bl_len = 1<<(info->SD_READ_BL_LEN);
 +              bl_len = 1 << (info->SD_READ_BL_LEN);
                bl_num = info->SD_Block_Mult * (info->SD_C_SIZE + 1)
                                * (1 << (info->SD_C_SIZE_MULT + 2)) - 1;
        }
@@@ -777,7 -777,7 +777,7 @@@ static int ms_lib_free_logicalmap(struc
        return 0;
  }
  
 -int ms_lib_alloc_logicalmap(struct us_data *us)
 +static int ms_lib_alloc_logicalmap(struct us_data *us)
  {
        u32  i;
        struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra;
@@@ -1762,10 -1762,9 +1762,9 @@@ static int ms_scsi_write(struct us_dat
                result = ene_send_scsi_cmd(us, FDIR_WRITE, scsi_sglist(srb), 1);
        } else {
                void *buf;
-               int offset;
+               int offset = 0;
                u16 PhyBlockAddr;
                u8 PageNum;
-               u32 result;
                u16 len, oldphy, newphy;
  
                buf = kmalloc(blenByte, GFP_KERNEL);
@@@ -2249,7 -2248,7 +2248,7 @@@ static int sd_scsi_irp(struct us_data *
  /*
   * ms_scsi_irp()
   */
 -int ms_scsi_irp(struct us_data *us, struct scsi_cmnd *srb)
 +static int ms_scsi_irp(struct us_data *us, struct scsi_cmnd *srb)
  {
        int result;
        struct ene_ub6250_info *info = (struct ene_ub6250_info *)us->extra;
This page took 0.046611 seconds and 5 git commands to generate.