lkml.org 
[lkml]   [2006]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/13] USBATM: add flags field
    Date
    Have minidrivers and the core signal special requirements
    using a flags field in struct usbatm_data. For the moment
    this is only used to replace the need_heavy_init bind
    parameter, but there'll be new flags in later patches.

    Signed-off-by: Duncan Sands <baldrick@free.fr>
    diff -x '*.orig' -x '*.base' -u -r Linux/drivers/usb/atm.orig/cxacru.c Linux/drivers/usb/atm/cxacru.c
    --- Linux/drivers/usb/atm.orig/cxacru.c 2006-01-12 18:34:35.000000000 +0100
    +++ Linux/drivers/usb/atm/cxacru.c 2006-01-12 18:34:40.000000000 +0100
    @@ -666,8 +666,7 @@
    }

    static int cxacru_bind(struct usbatm_data *usbatm_instance,
    - struct usb_interface *intf, const struct usb_device_id *id,
    - int *need_heavy_init)
    + struct usb_interface *intf, const struct usb_device_id *id)
    {
    struct cxacru_data *instance;
    struct usb_device *usb_dev = interface_to_usbdev(intf);
    @@ -726,7 +725,7 @@

    usbatm_instance->driver_data = instance;

    - *need_heavy_init = cxacru_card_status(instance);
    + usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT);

    return 0;

    Only in Linux/drivers/usb/atm: done
    Only in Linux/drivers/usb/atm.orig/patches: messages
    diff -x '*.orig' -x '*.base' -u -r Linux/drivers/usb/atm.orig/speedtch.c Linux/drivers/usb/atm/speedtch.c
    --- Linux/drivers/usb/atm.orig/speedtch.c 2006-01-12 18:34:35.000000000 +0100
    +++ Linux/drivers/usb/atm/speedtch.c 2006-01-12 18:34:40.000000000 +0100
    @@ -681,8 +681,7 @@

    static int speedtch_bind(struct usbatm_data *usbatm,
    struct usb_interface *intf,
    - const struct usb_device_id *id,
    - int *need_heavy_init)
    + const struct usb_device_id *id)
    {
    struct usb_device *usb_dev = interface_to_usbdev(intf);
    struct usb_interface *cur_intf;
    @@ -754,11 +753,11 @@
    0x12, 0xc0, 0x07, 0x00,
    instance->scratch_buffer + OFFSET_7, SIZE_7, 500);

    - *need_heavy_init = (ret != SIZE_7);
    + usbatm->flags = (ret == SIZE_7 ? UDSL_SKIP_HEAVY_INIT : 0);

    - usb_dbg(usbatm, "%s: firmware %s loaded\n", __func__, need_heavy_init ? "not" : "already");
    + usb_dbg(usbatm, "%s: firmware %s loaded\n", __func__, usbatm->flags & UDSL_SKIP_HEAVY_INIT ? "already" : "not");

    - if (*need_heavy_init)
    + if (!(usbatm->flags & UDSL_SKIP_HEAVY_INIT))
    if ((ret = usb_reset_device(usb_dev)) < 0) {
    usb_err(usbatm, "%s: device reset failed (%d)!\n", __func__, ret);
    goto fail_free;
    diff -x '*.orig' -x '*.base' -u -r Linux/drivers/usb/atm.orig/ueagle-atm.c Linux/drivers/usb/atm/ueagle-atm.c
    --- Linux/drivers/usb/atm.orig/ueagle-atm.c 2006-01-12 18:34:35.000000000 +0100
    +++ Linux/drivers/usb/atm/ueagle-atm.c 2006-01-12 18:34:40.000000000 +0100
    @@ -1617,7 +1617,7 @@
    }

    static int uea_bind(struct usbatm_data *usbatm, struct usb_interface *intf,
    - const struct usb_device_id *id, int *heavy)
    + const struct usb_device_id *id)
    {
    struct usb_device *usb = interface_to_usbdev(intf);
    struct uea_softc *sc;
    @@ -1629,7 +1629,7 @@
    if (ifnum != UEA_INTR_IFACE_NO)
    return -ENODEV;

    - *heavy = sync_wait[modem_index];
    + usbatm_instance->flags = (sync_wait[modem_index] ? 0 : UDSL_SKIP_HEAVY_INIT);

    /* interface 1 is for outbound traffic */
    ret = claim_interface(usb, usbatm, UEA_US_IFACE_NO);
    diff -x '*.orig' -x '*.base' -u -r Linux/drivers/usb/atm.orig/usbatm.c Linux/drivers/usb/atm/usbatm.c
    --- Linux/drivers/usb/atm.orig/usbatm.c 2006-01-12 18:34:35.000000000 +0100
    +++ Linux/drivers/usb/atm/usbatm.c 2006-01-12 18:34:40.000000000 +0100
    @@ -969,7 +969,6 @@
    char *buf;
    int error = -ENOMEM;
    int i, length;
    - int need_heavy;

    dev_dbg(dev, "%s: trying driver %s with vendor=%04x, product=%04x, ifnum %2d\n",
    __func__, driver->driver_name,
    @@ -1014,8 +1013,7 @@
    snprintf(buf, length, ")");

    bind:
    - need_heavy = 1;
    - if (driver->bind && (error = driver->bind(instance, intf, id, &need_heavy)) < 0) {
    + if (driver->bind && (error = driver->bind(instance, intf, id)) < 0) {
    dev_err(dev, "%s: bind failed: %d!\n", __func__, error);
    goto fail_free;
    }
    @@ -1098,7 +1096,7 @@
    __func__, urb->transfer_buffer, urb->transfer_buffer_length, urb);
    }

    - if (need_heavy && driver->heavy_init) {
    + if (!(instance->flags & UDSL_SKIP_HEAVY_INIT) && driver->heavy_init) {
    error = usbatm_heavy_init(instance);
    } else {
    complete(&instance->thread_exited); /* pretend that heavy_init was run */
    diff -x '*.orig' -x '*.base' -u -r Linux/drivers/usb/atm.orig/usbatm.h Linux/drivers/usb/atm/usbatm.h
    --- Linux/drivers/usb/atm.orig/usbatm.h 2006-01-12 18:34:35.000000000 +0100
    +++ Linux/drivers/usb/atm/usbatm.h 2006-01-12 18:34:40.000000000 +0100
    @@ -84,6 +84,11 @@
    #endif


    +/* flags, set by mini-driver in bind() */
    +
    +#define UDSL_SKIP_HEAVY_INIT (1<<0)
    +
    +
    /* mini driver */

    struct usbatm_data;
    @@ -99,12 +104,9 @@

    const char *driver_name;

    - /*
    - * init device ... can sleep, or cause probe() failure. Drivers with a heavy_init
    - * method can avoid having it called by setting need_heavy_init to zero.
    - */
    + /* init device ... can sleep, or cause probe() failure */
    int (*bind) (struct usbatm_data *, struct usb_interface *,
    - const struct usb_device_id *id, int *need_heavy_init);
    + const struct usb_device_id *id);

    /* additional device initialization that is too slow to be done in probe() */
    int (*heavy_init) (struct usbatm_data *, struct usb_interface *);
    @@ -152,6 +154,7 @@
    struct usbatm_driver *driver;
    void *driver_data;
    char driver_name[16];
    + unsigned int flags; /* set by mini-driver in bind() */

    /* USB device */
    struct usb_device *usb_dev;
    diff -x '*.orig' -x '*.base' -u -r Linux/drivers/usb/atm.orig/xusbatm.c Linux/drivers/usb/atm/xusbatm.c
    --- Linux/drivers/usb/atm.orig/xusbatm.c 2006-01-12 18:34:35.000000000 +0100
    +++ Linux/drivers/usb/atm/xusbatm.c 2006-01-12 18:34:40.000000000 +0100
    @@ -62,8 +62,7 @@
    }

    static int xusbatm_bind(struct usbatm_data *usbatm,
    - struct usb_interface *intf, const struct usb_device_id *id,
    - int *need_heavy_init)
    + struct usb_interface *intf, const struct usb_device_id *id)
    {
    struct usb_device *usb_dev = interface_to_usbdev(intf);
    int drv_ix = id - xusbatm_usb_ids;
    \
     
     \ /
      Last update: 2006-01-12 18:51    [W:0.030 / U:92.832 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site