lkml.org 
[lkml]   [2003]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectPATCH: parallel port

    This has been floating around for ages, and in -ac for a while too - is
    there some reason it wasnt merged or did it just escape ?

    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/init.c linux-2.5.65-ac3/drivers/parport/init.c
    --- linux-2.5.65-bk3/drivers/parport/init.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/init.c 2003-03-06 23:08:36.000000000 +0000
    @@ -227,17 +227,3 @@
    EXPORT_SYMBOL(parport_find_device);
    EXPORT_SYMBOL(parport_find_class);
    #endif
    -
    -void inc_parport_count(void)
    -{
    -#ifdef MODULE
    - MOD_INC_USE_COUNT;
    -#endif
    -}
    -
    -void dec_parport_count(void)
    -{
    -#ifdef MODULE
    - MOD_DEC_USE_COUNT;
    -#endif
    -}
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_amiga.c linux-2.5.65-ac3/drivers/parport/parport_amiga.c
    --- linux-2.5.65-bk3/drivers/parport/parport_amiga.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_amiga.c 2003-03-06 23:08:46.000000000 +0000
    @@ -195,51 +195,40 @@
    mb();
    }

    -static void amiga_inc_use_count(void)
    -{
    - MOD_INC_USE_COUNT;
    -}
    -
    -static void amiga_dec_use_count(void)
    -{
    - MOD_DEC_USE_COUNT;
    -}
    -
    static struct parport_operations pp_amiga_ops = {
    - amiga_write_data,
    - amiga_read_data,
    + .write_data = amiga_write_data,
    + .read_data = amiga_read_data,

    - amiga_write_control,
    - amiga_read_control,
    - amiga_frob_control,
    + .write_control = amiga_write_control,
    + .read_control = amiga_read_control,
    + .frob_control = amiga_frob_control,

    - amiga_read_status,
    + .read_status = amiga_read_status,

    - amiga_enable_irq,
    - amiga_disable_irq,
    + .enable_irq = amiga_enable_irq,
    + .disable_irq = amiga_disable_irq,

    - amiga_data_forward,
    - amiga_data_reverse,
    + .data_forward = amiga_data_forward,
    + .data_reverse = amiga_data_reverse,

    - amiga_init_state,
    - amiga_save_state,
    - amiga_restore_state,
    + .init_state = amiga_init_state,
    + .save_state = amiga_save_state,
    + .restore_state = amiga_restore_state,

    - amiga_inc_use_count,
    - amiga_dec_use_count,
    + .epp_write_data = parport_ieee1284_epp_write_data,
    + .epp_read_data = parport_ieee1284_epp_read_data,
    + .epp_write_addr = parport_ieee1284_epp_write_addr,
    + .epp_read_addr = parport_ieee1284_epp_read_addr,

    - parport_ieee1284_epp_write_data,
    - parport_ieee1284_epp_read_data,
    - parport_ieee1284_epp_write_addr,
    - parport_ieee1284_epp_read_addr,
    + .ecp_write_data = parport_ieee1284_ecp_write_data,
    + .ecp_read_data = parport_ieee1284_ecp_read_data,
    + .ecp_write_addr = parport_ieee1284_ecp_write_addr,

    - parport_ieee1284_ecp_write_data,
    - parport_ieee1284_ecp_read_data,
    - parport_ieee1284_ecp_write_addr,
    + .compat_write_data = parport_ieee1284_write_compat,
    + .nibble_read_data = parport_ieee1284_read_nibble,
    + .byte_read_data = parport_ieee1284_read_byte,

    - parport_ieee1284_write_compat,
    - parport_ieee1284_read_nibble,
    - parport_ieee1284_read_byte,
    + .owner = THIS_MODULE,
    };

    /* ----------- Initialisation code --------------------------------- */
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_arc.c linux-2.5.65-ac3/drivers/parport/parport_arc.c
    --- linux-2.5.65-bk3/drivers/parport/parport_arc.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_arc.c 2003-03-06 23:08:51.000000000 +0000
    @@ -65,56 +65,41 @@
    return data_copy;
    }

    -static void arc_inc_use_count(void)
    -{
    -#ifdef MODULE
    - MOD_INC_USE_COUNT;
    -#endif
    -}
    -
    -static void arc_dec_use_count(void)
    -{
    -#ifdef MODULE
    - MOD_DEC_USE_COUNT;
    -#endif
    -}
    -
    static struct parport_operations parport_arc_ops =
    {
    - arc_write_data,
    - arc_read_data,
    + .write_data = arc_write_data,
    + .read_data = arc_read_data,

    - arc_write_control,
    - arc_read_control,
    - arc_frob_control,
    + .write_control = arc_write_control,
    + .read_control = arc_read_control,
    + .frob_control = arc_frob_control,

    - arc_read_status,
    + .read_status = arc_read_status,

    - arc_enable_irq,
    - arc_disable_irq,
    + .enable_irq = arc_enable_irq,
    + .disable_irq = arc_disable_irq,

    - arc_data_forward,
    - arc_data_reverse,
    + .data_forward = arc_data_forward,
    + .data_reverse = arc_data_reverse,

    - arc_init_state,
    - arc_save_state,
    - arc_restore_state,
    + .init_state = arc_init_state,
    + .save_state = arc_save_state,
    + .restore_state = arc_restore_state,

    - arc_inc_use_count,
    - arc_dec_use_count,
    + .epp_write_data = parport_ieee1284_epp_write_data,
    + .epp_read_data = parport_ieee1284_epp_read_data,
    + .epp_write_addr = parport_ieee1284_epp_write_addr,
    + .epp_read_addr = parport_ieee1284_epp_read_addr,

    - parport_ieee1284_epp_write_data,
    - parport_ieee1284_epp_read_data,
    - parport_ieee1284_epp_write_addr,
    - parport_ieee1284_epp_read_addr,
    -
    - parport_ieee1284_ecp_write_data,
    - parport_ieee1284_ecp_read_data,
    - parport_ieee1284_ecp_write_addr,
    + .ecp_write_data = parport_ieee1284_ecp_write_data,
    + .ecp_read_data = parport_ieee1284_ecp_read_data,
    + .ecp_write_addr = parport_ieee1284_ecp_write_addr,

    - parport_ieee1284_write_compat,
    - parport_ieee1284_read_nibble,
    - parport_ieee1284_read_byte,
    + .compat_write_data = parport_ieee1284_write_compat,
    + .nibble_read_data = parport_ieee1284_read_nibble,
    + .byte_read_data = parport_ieee1284_read_byte,
    +
    + .owner = THIS_MODULE,
    };

    /* --- Initialisation code -------------------------------- */
    @@ -123,18 +108,24 @@
    {
    /* Archimedes hardware provides only one port, at a fixed address */
    struct parport *p;
    + struct resource res;
    + char *fake_name = "parport probe");

    - if (check_region(PORT_BASE, 1))
    + res = request_region(PORT_BASE, 1, fake_name);
    + if (res == NULL)
    return 0;

    p = parport_register_port (PORT_BASE, IRQ_PRINTERACK,
    PARPORT_DMA_NONE, &parport_arc_ops);

    - if (!p)
    + if (!p) {
    + release_region(PORT_BASE, 1);
    return 0;
    + }

    p->modes = PARPORT_MODE_ARCSPP;
    p->size = 1;
    + rename_region(res, p->name);

    printk(KERN_INFO "%s: Archimedes on-board port, using irq %d\n",
    p->irq);
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_atari.c linux-2.5.65-ac3/drivers/parport/parport_atari.c
    --- linux-2.5.65-bk3/drivers/parport/parport_atari.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_atari.c 2003-03-06 23:08:56.000000000 +0000
    @@ -147,53 +147,40 @@
    #endif
    }

    -static void
    -parport_atari_inc_use_count(void)
    -{
    - MOD_INC_USE_COUNT;
    -}
    -
    -static void
    -parport_atari_dec_use_count(void)
    -{
    - MOD_DEC_USE_COUNT;
    -}
    -
    static struct parport_operations parport_atari_ops = {
    - parport_atari_write_data,
    - parport_atari_read_data,
    + .write_data = parport_atari_write_data,
    + .read_data = parport_atari_read_data,

    - parport_atari_write_control,
    - parport_atari_read_control,
    - parport_atari_frob_control,
    + .write_control = parport_atari_write_control,
    + .read_control = parport_atari_read_control,
    + .frob_control = parport_atari_frob_control,

    - parport_atari_read_status,
    + .read_status = parport_atari_read_status,

    - parport_atari_enable_irq,
    - parport_atari_disable_irq,
    + .enable_irq = parport_atari_enable_irq,
    + .disable_irq = parport_atari_disable_irq,

    - parport_atari_data_forward,
    - parport_atari_data_reverse,
    + .data_forward = parport_atari_data_forward,
    + .data_reverse = parport_atari_data_reverse,

    - parport_atari_init_state,
    - parport_atari_save_state,
    - parport_atari_restore_state,
    + .init_state = parport_atari_init_state,
    + .save_state = parport_atari_save_state,
    + .restore_state = parport_atari_restore_state,

    - parport_atari_inc_use_count,
    - parport_atari_dec_use_count,
    + .epp_write_data = parport_ieee1284_epp_write_data,
    + .epp_read_data = parport_ieee1284_epp_read_data,
    + .epp_write_addr = parport_ieee1284_epp_write_addr,
    + .epp_read_addr = parport_ieee1284_epp_read_addr,

    - parport_ieee1284_epp_write_data,
    - parport_ieee1284_epp_read_data,
    - parport_ieee1284_epp_write_addr,
    - parport_ieee1284_epp_read_addr,
    + .ecp_write_data = parport_ieee1284_ecp_write_data,
    + .ecp_read_data = parport_ieee1284_ecp_read_data,
    + .ecp_write_addr = parport_ieee1284_ecp_write_addr,

    - parport_ieee1284_ecp_write_data,
    - parport_ieee1284_ecp_read_data,
    - parport_ieee1284_ecp_write_addr,
    + .compat_write_data = parport_ieee1284_write_compat,
    + .nibble_read_data = parport_ieee1284_read_nibble,
    + .byte_read_data = parport_ieee1284_read_byte,

    - parport_ieee1284_write_compat,
    - parport_ieee1284_read_nibble,
    - parport_ieee1284_read_byte,
    + .owner = THIS_MODULE,
    };


    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_gsc.c linux-2.5.65-ac3/drivers/parport/parport_gsc.c
    --- linux-2.5.65-bk3/drivers/parport/parport_gsc.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_gsc.c 2003-03-06 23:09:01.000000000 +0000
    @@ -190,17 +190,6 @@
    parport_writeb (s->u.pc.ctr, CONTROL (p));
    }

    -void parport_gsc_inc_use_count(void)
    -{
    - MOD_INC_USE_COUNT;
    -}
    -
    -void parport_gsc_dec_use_count(void)
    -{
    - MOD_DEC_USE_COUNT;
    -}
    -
    -
    struct parport_operations parport_gsc_ops =
    {
    .write_data = parport_gsc_write_data,
    @@ -222,9 +211,6 @@
    .save_state = parport_gsc_save_state,
    .restore_state = parport_gsc_restore_state,

    - .inc_use_count = parport_gsc_inc_use_count,
    - .dec_use_count = parport_gsc_dec_use_count,
    -
    .epp_write_data = parport_ieee1284_epp_write_data,
    .epp_read_data = parport_ieee1284_epp_read_data,
    .epp_write_addr = parport_ieee1284_epp_write_addr,
    @@ -237,6 +223,8 @@
    .compat_write_data = parport_ieee1284_write_compat,
    .nibble_read_data = parport_ieee1284_read_nibble,
    .byte_read_data = parport_ieee1284_read_byte,
    +
    + .owner = THIS_MODULE,
    };

    /* --- Mode detection ------------------------------------- */
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_mfc3.c linux-2.5.65-ac3/drivers/parport/parport_mfc3.c
    --- linux-2.5.65-bk3/drivers/parport/parport_mfc3.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_mfc3.c 2003-03-06 23:09:05.000000000 +0000
    @@ -281,51 +281,40 @@
    pia(p)->cra |= PIA_DDR;
    }

    -static void mfc3_inc_use_count(void)
    -{
    - MOD_INC_USE_COUNT;
    -}
    -
    -static void mfc3_dec_use_count(void)
    -{
    - MOD_DEC_USE_COUNT;
    -}
    -
    static struct parport_operations pp_mfc3_ops = {
    - mfc3_write_data,
    - mfc3_read_data,
    + .write_data = mfc3_write_data,
    + .read_data = mfc3_read_data,

    - mfc3_write_control,
    - mfc3_read_control,
    - mfc3_frob_control,
    + .write_control = mfc3_write_control,
    + .read_control = mfc3_read_control,
    + .frob_control = mfc3_frob_control,

    - mfc3_read_status,
    + .read_status = mfc3_read_status,

    - mfc3_enable_irq,
    - mfc3_disable_irq,
    + .enable_irq = mfc3_enable_irq,
    + .disable_irq = mfc3_disable_irq,

    - mfc3_data_forward,
    - mfc3_data_reverse,
    + .data_forward = mfc3_data_forward,
    + .data_reverse = mfc3_data_reverse,

    - mfc3_init_state,
    - mfc3_save_state,
    - mfc3_restore_state,
    + .init_state = mfc3_init_state,
    + .save_state = mfc3_save_state,
    + .restore_state = mfc3_restore_state,

    - mfc3_inc_use_count,
    - mfc3_dec_use_count,
    + .epp_write_data = parport_ieee1284_epp_write_data,
    + .epp_read_data = parport_ieee1284_epp_read_data,
    + .epp_write_addr = parport_ieee1284_epp_write_addr,
    + .epp_read_addr = parport_ieee1284_epp_read_addr,

    - parport_ieee1284_epp_write_data,
    - parport_ieee1284_epp_read_data,
    - parport_ieee1284_epp_write_addr,
    - parport_ieee1284_epp_read_addr,
    + .ecp_write_data = parport_ieee1284_ecp_write_data,
    + .ecp_read_data = parport_ieee1284_ecp_read_data,
    + .ecp_write_addr = parport_ieee1284_ecp_write_addr,

    - parport_ieee1284_ecp_write_data,
    - parport_ieee1284_ecp_read_data,
    - parport_ieee1284_ecp_write_addr,
    + .compat_write_data = parport_ieee1284_write_compat,
    + .nibble_read_data = parport_ieee1284_read_nibble,
    + .byte_read_data = parport_ieee1284_read_byte,

    - parport_ieee1284_write_compat,
    - parport_ieee1284_read_nibble,
    - parport_ieee1284_read_byte,
    + .owner = THIS_MODULE,
    };

    /* ----------- Initialisation code --------------------------------- */
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_pc.c linux-2.5.65-ac3/drivers/parport/parport_pc.c
    --- linux-2.5.65-bk3/drivers/parport/parport_pc.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_pc.c 2003-03-06 23:08:41.000000000 +0000
    @@ -1232,57 +1232,41 @@
    * ******************************************
    */

    -
    -void parport_pc_inc_use_count(void)
    -{
    -#ifdef MODULE
    - MOD_INC_USE_COUNT;
    -#endif
    -}
    -
    -void parport_pc_dec_use_count(void)
    -{
    -#ifdef MODULE
    - MOD_DEC_USE_COUNT;
    -#endif
    -}
    -
    struct parport_operations parport_pc_ops =
    {
    - parport_pc_write_data,
    - parport_pc_read_data,
    + .write_data = parport_pc_write_data,
    + .read_data = parport_pc_read_data,

    - parport_pc_write_control,
    - parport_pc_read_control,
    - parport_pc_frob_control,
    + .write_control = parport_pc_write_control,
    + .read_control = parport_pc_read_control,
    + .frob_control = parport_pc_frob_control,

    - parport_pc_read_status,
    + .read_status = parport_pc_read_status,

    - parport_pc_enable_irq,
    - parport_pc_disable_irq,
    + .enable_irq = parport_pc_enable_irq,
    + .disable_irq = parport_pc_disable_irq,

    - parport_pc_data_forward,
    - parport_pc_data_reverse,
    + .data_forward = parport_pc_data_forward,
    + .data_reverse = parport_pc_data_reverse,

    - parport_pc_init_state,
    - parport_pc_save_state,
    - parport_pc_restore_state,
    + .init_state = parport_pc_init_state,
    + .save_state = parport_pc_save_state,
    + .restore_state = parport_pc_restore_state,

    - parport_pc_inc_use_count,
    - parport_pc_dec_use_count,
    + .epp_write_data = parport_ieee1284_epp_write_data,
    + .epp_read_data = parport_ieee1284_epp_read_data,
    + .epp_write_addr = parport_ieee1284_epp_write_addr,
    + .epp_read_addr = parport_ieee1284_epp_read_addr,

    - parport_ieee1284_epp_write_data,
    - parport_ieee1284_epp_read_data,
    - parport_ieee1284_epp_write_addr,
    - parport_ieee1284_epp_read_addr,
    + .ecp_write_data = parport_ieee1284_ecp_write_data,
    + .ecp_read_data = parport_ieee1284_ecp_read_data,
    + .ecp_write_addr = parport_ieee1284_ecp_write_addr,

    - parport_ieee1284_ecp_write_data,
    - parport_ieee1284_ecp_read_data,
    - parport_ieee1284_ecp_write_addr,
    + .compat_write_data = parport_ieee1284_write_compat,
    + .nibble_read_data = parport_ieee1284_read_nibble,
    + .byte_read_data = parport_ieee1284_read_byte,

    - parport_ieee1284_write_compat,
    - parport_ieee1284_read_nibble,
    - parport_ieee1284_read_byte,
    + .owner = THIS_MODULE,
    };

    #ifdef CONFIG_PARPORT_PC_SUPERIO
    @@ -2212,16 +2196,32 @@
    struct parport tmp;
    struct parport *p = &tmp;
    int probedirq = PARPORT_IRQ_NONE;
    - if (check_region(base, 3)) return NULL;
    + struct resource *base_res;
    + struct resource *ECR_res = NULL;
    + struct resource *EPP_res = NULL;
    + char *fake_name = "parport probe";
    +
    + /*
    + * Chicken and Egg problem. request_region() wants the name of
    + * the owner, but this instance will not know that name until
    + * after the parport_register_port() call. Give request_region()
    + * a fake name until after parport_register_port(), then use
    + * rename_region() to set correct name.
    + */
    + base_res = request_region(base, 3, fake_name);
    + if (base_res == NULL)
    + return NULL;
    priv = kmalloc (sizeof (struct parport_pc_private), GFP_KERNEL);
    if (!priv) {
    printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base);
    + release_region(base, 3);
    return NULL;
    }
    ops = kmalloc (sizeof (struct parport_operations), GFP_KERNEL);
    if (!ops) {
    printk (KERN_DEBUG "parport (0x%lx): no memory for ops!\n",
    base);
    + release_region(base, 3);
    kfree (priv);
    return NULL;
    }
    @@ -2242,32 +2242,39 @@
    p->private_data = priv;
    p->physport = p;

    - if (base_hi && !check_region(base_hi,3))
    - parport_ECR_present(p);
    + if (base_hi) {
    + ECR_res = request_region(base_hi, 3, fake_name);
    + if (ECR_res)
    + parport_ECR_present(p);
    + }

    if (base != 0x3bc) {
    - if (!check_region(base+0x3, 5)) {
    + EPP_res = request_region(base+0x3, 5, fake_name);
    + if (EPP_res)
    if (!parport_EPP_supported(p))
    parport_ECPEPP_supported(p);
    - }
    }
    - if (!parport_SPP_supported (p)) {
    + if (!parport_SPP_supported (p))
    /* No port. */
    - kfree (priv);
    - kfree (ops);
    - return NULL;
    - }
    + goto errout;
    if (priv->ecr)
    parport_ECPPS2_supported(p);
    else
    parport_PS2_supported (p);

    if (!(p = parport_register_port(base, PARPORT_IRQ_NONE,
    - PARPORT_DMA_NONE, ops))) {
    - kfree (priv);
    - kfree (ops);
    - return NULL;
    - }
    + PARPORT_DMA_NONE, ops)))
    + goto errout;
    +
    + /*
    + * Now the real name is known... Replace the fake name
    + * in the resources with the correct one.
    + */
    + rename_region(base_res, p->name);
    + if (ECR_res)
    + rename_region(ECR_res, p->name);
    + if (EPP_res)
    + rename_region(EPP_res, p->name);

    p->base_hi = base_hi;
    p->modes = tmp.modes;
    @@ -2343,11 +2350,11 @@
    printk(KERN_INFO "%s: irq %d detected\n", p->name, probedirq);
    parport_proc_register(p);

    - request_region (p->base, 3, p->name);
    - if (p->size > 3)
    - request_region (p->base + 3, p->size - 3, p->name);
    - if (p->modes & PARPORT_MODE_ECP)
    - request_region (p->base_hi, 3, p->name);
    + /* If No ECP release the ports grabbed above. */
    + if (ECR_res && (p->modes & PARPORT_MODE_ECP) == 0) {
    + release_region(base_hi, 3);
    + ECR_res = NULL;
    + }

    if (p->irq != PARPORT_IRQ_NONE) {
    if (request_irq (p->irq, parport_pc_interrupt,
    @@ -2401,6 +2408,17 @@
    parport_announce_port (p);

    return p;
    +
    +errout:
    + release_region(p->base, 3);
    + if (ECR_res)
    + release_region(base_hi, 3);
    + if (EPP_res)
    + release_region(base+0x3, 5);
    +
    + kfree (priv);
    + kfree (ops);
    + return NULL;
    }

    void parport_pc_unregister_port (struct parport *p)
    @@ -2437,9 +2455,11 @@
    int autodma)
    {
    short inta_addr[6] = { 0x2A0, 0x2C0, 0x220, 0x240, 0x1E0 };
    + struct resource *base_res;
    u32 ite8872set;
    u32 ite8872_lpt, ite8872_lpthi;
    u8 ite8872_irq, type;
    + char *fake_name = "parport probe";
    int irq;
    int i;

    @@ -2447,7 +2467,8 @@

    // make sure which one chip
    for(i = 0; i < 5; i++) {
    - if (check_region (inta_addr[i], 0x8) >= 0) {
    + base_res = request_region(inta_addr[i], 0x8, fake_name);
    + if (base_res) {
    int test;
    pci_write_config_dword (pdev, 0x60,
    0xe7000000 | inta_addr[i]);
    @@ -2455,6 +2476,7 @@
    0x00000000 | inta_addr[i]);
    test = inb (inta_addr[i]);
    if (test != 0xff) break;
    + release_region(inta_addr[i], 0x8);
    }
    }
    if(i >= 5) {
    @@ -2515,6 +2537,10 @@
    if (autoirq != PARPORT_IRQ_AUTO)
    irq = PARPORT_IRQ_NONE;

    + /*
    + * Release the resource so that parport_pc_probe_port can get it.
    + */
    + release_resource(base_res);
    if (parport_pc_probe_port (ite8872_lpt, ite8872_lpthi,
    irq, PARPORT_DMA_NONE, NULL)) {
    printk (KERN_INFO
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/parport_sunbpp.c linux-2.5.65-ac3/drivers/parport/parport_sunbpp.c
    --- linux-2.5.65-bk3/drivers/parport/parport_sunbpp.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/parport_sunbpp.c 2003-03-06 23:08:12.000000000 +0000
    @@ -249,56 +249,41 @@
    parport_sunbpp_write_control(p, s->u.pc.ctr);
    }

    -static void parport_sunbpp_inc_use_count(void)
    -{
    -#ifdef MODULE
    - MOD_INC_USE_COUNT;
    -#endif
    -}
    -
    -static void parport_sunbpp_dec_use_count(void)
    -{
    -#ifdef MODULE
    - MOD_DEC_USE_COUNT;
    -#endif
    -}
    -
    static struct parport_operations parport_sunbpp_ops =
    {
    - parport_sunbpp_write_data,
    - parport_sunbpp_read_data,
    + .write_data = parport_sunbpp_write_data,
    + .read_data = parport_sunbpp_read_data,

    - parport_sunbpp_write_control,
    - parport_sunbpp_read_control,
    - parport_sunbpp_frob_control,
    + .write_control = parport_sunbpp_write_control,
    + .read_control = parport_sunbpp_read_control,
    + .frob_control = parport_sunbpp_frob_control,

    - parport_sunbpp_read_status,
    + .read_status = parport_sunbpp_read_status,

    - parport_sunbpp_enable_irq,
    - parport_sunbpp_disable_irq,
    + .enable_irq = parport_sunbpp_enable_irq,
    + .disable_irq = parport_sunbpp_disable_irq,

    - parport_sunbpp_data_forward,
    - parport_sunbpp_data_reverse,
    + .data_forward = parport_sunbpp_data_forward,
    + .data_reverse = parport_sunbpp_data_reverse,

    - parport_sunbpp_init_state,
    - parport_sunbpp_save_state,
    - parport_sunbpp_restore_state,
    + .init_state = parport_sunbpp_init_state,
    + .save_state = parport_sunbpp_save_state,
    + .restore_state = parport_sunbpp_restore_state,

    - parport_sunbpp_inc_use_count,
    - parport_sunbpp_dec_use_count,
    + .epp_write_data = parport_ieee1284_epp_write_data,
    + .epp_read_data = parport_ieee1284_epp_read_data,
    + .epp_write_addr = parport_ieee1284_epp_write_addr,
    + .epp_read_addr = parport_ieee1284_epp_read_addr,

    - parport_ieee1284_epp_write_data,
    - parport_ieee1284_epp_read_data,
    - parport_ieee1284_epp_write_addr,
    - parport_ieee1284_epp_read_addr,
    + .ecp_write_data = parport_ieee1284_ecp_write_data,
    + .ecp_read_data = parport_ieee1284_ecp_read_data,
    + .ecp_write_addr = parport_ieee1284_ecp_write_addr,

    - parport_ieee1284_ecp_write_data,
    - parport_ieee1284_ecp_read_data,
    - parport_ieee1284_ecp_write_addr,
    + .compat_write_data = parport_ieee1284_write_compat,
    + .nibble_read_data = parport_ieee1284_read_nibble,
    + .byte_read_data = parport_ieee1284_read_byte,

    - parport_ieee1284_write_compat,
    - parport_ieee1284_read_nibble,
    - parport_ieee1284_read_byte,
    + .owner = THIS_MODULE,
    };

    static int __init init_one_port(struct sbus_dev *sdev)
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/parport/share.c linux-2.5.65-ac3/drivers/parport/share.c
    --- linux-2.5.65-bk3/drivers/parport/share.c 2003-03-22 19:33:50.000000000 +0000
    +++ linux-2.5.65-ac3/drivers/parport/share.c 2003-03-06 23:08:36.000000000 +0000
    @@ -55,37 +55,44 @@
    static void dead_onearg (struct parport *p){}
    static void dead_initstate (struct pardevice *d, struct parport_state *s) { }
    static void dead_state (struct parport *p, struct parport_state *s) { }
    -static void dead_noargs (void) { }
    static size_t dead_write (struct parport *p, const void *b, size_t l, int f)
    { return 0; }
    static size_t dead_read (struct parport *p, void *b, size_t l, int f)
    { return 0; }
    static struct parport_operations dead_ops = {
    - dead_write_lines, /* data */
    - dead_read_lines,
    - dead_write_lines, /* control */
    - dead_read_lines,
    - dead_frob_lines,
    - dead_read_lines, /* status */
    - dead_onearg, /* enable_irq */
    - dead_onearg, /* disable_irq */
    - dead_onearg, /* data_forward */
    - dead_onearg, /* data_reverse */
    - dead_initstate, /* init_state */
    - dead_state,
    - dead_state,
    - dead_noargs, /* xxx_use_count */
    - dead_noargs,
    - dead_write, /* epp */
    - dead_read,
    - dead_write,
    - dead_read,
    - dead_write, /* ecp */
    - dead_read,
    - dead_write,
    - dead_write, /* compat */
    - dead_read, /* nibble */
    - dead_read /* byte */
    + .write_data = dead_write_lines, /* data */
    + .read_data = dead_read_lines,
    +
    + .write_control = dead_write_lines, /* control */
    + .read_control = dead_read_lines,
    + .frob_control = dead_frob_lines,
    +
    + .read_status = dead_read_lines, /* status */
    +
    + .enable_irq = dead_onearg, /* enable_irq */
    + .disable_irq = dead_onearg, /* disable_irq */
    +
    + .data_forward = dead_onearg, /* data_forward */
    + .data_reverse = dead_onearg, /* data_reverse */
    +
    + .init_state = dead_initstate, /* init_state */
    + .save_state = dead_state,
    + .restore_state = dead_state,
    +
    + .epp_write_data = dead_write, /* epp */
    + .epp_read_data = dead_read,
    + .epp_write_addr = dead_write,
    + .epp_read_addr = dead_read,
    +
    + .ecp_write_data = dead_write, /* ecp */
    + .ecp_read_data = dead_read,
    + .ecp_write_addr = dead_write,
    +
    + .compat_write_data = dead_write, /* compat */
    + .nibble_read_data = dead_read, /* nibble */
    + .byte_read_data = dead_read, /* byte */
    +
    + .owner = NULL,
    };

    /* Call attach(port) for each registered driver. */
    @@ -390,25 +397,6 @@
    return NULL;
    }

    - /* Search for the lowest free parport number. */
    -
    - spin_lock_irq (&parportlist_lock);
    - for (portnum = 0; ; portnum++) {
    - struct parport *itr = portlist;
    - while (itr) {
    - if (itr->number == portnum)
    - /* No good, already used. */
    - break;
    - else
    - itr = itr->next;
    - }
    -
    - if (itr == NULL)
    - /* Got to the end of the list. */
    - break;
    - }
    - spin_unlock_irq (&parportlist_lock);
    -
    /* Init our structure */
    memset(tmp, 0, sizeof(struct parport));
    tmp->base = base;
    @@ -420,7 +408,6 @@
    tmp->devices = tmp->cad = NULL;
    tmp->flags = 0;
    tmp->ops = ops;
    - tmp->portnum = tmp->number = portnum;
    tmp->physport = tmp;
    memset (tmp->probe_info, 0, 5 * sizeof (struct parport_device_info));
    tmp->cad_lock = RW_LOCK_UNLOCKED;
    @@ -438,9 +425,32 @@
    kfree(tmp);
    return NULL;
    }
    + /* Search for the lowest free parport number. */
    +
    + spin_lock_irq (&parportlist_lock);
    + for (portnum = 0; ; portnum++) {
    + struct parport *itr = portlist;
    + while (itr) {
    + if (itr->number == portnum)
    + /* No good, already used. */
    + break;
    + else
    + itr = itr->next;
    + }
    +
    + if (itr == NULL)
    + /* Got to the end of the list. */
    + break;
    + }
    +
    + /*
    + * Now that the portnum is known finish doing the Init.
    + */
    + tmp->portnum = tmp->number = portnum;
    sprintf(name, "parport%d", portnum);
    tmp->name = name;

    +
    /*
    * Chain the entry to our list.
    *
    @@ -448,8 +458,6 @@
    * to clear irq on the local CPU. -arca
    */

    - spin_lock(&parportlist_lock);
    -
    /* We are locked against anyone else performing alterations, but
    * because of parport_enumerate people can still _read_ the list
    * while we are changing it; so be careful..
    @@ -664,8 +672,10 @@
    kmalloc. To be absolutely safe, we have to require that
    our caller doesn't sleep in between parport_enumerate and
    parport_register_device.. */
    - inc_parport_count();
    - port->ops->inc_use_count();
    + if (!try_module_get(port->ops->owner)) {
    + return NULL;
    + }
    +
    parport_get_port (port);

    tmp = kmalloc(sizeof(struct pardevice), GFP_KERNEL);
    @@ -736,9 +746,9 @@
    out_free_pardevice:
    kfree (tmp);
    out:
    - dec_parport_count();
    - port->ops->dec_use_count();
    parport_put_port (port);
    + module_put(port->ops->owner);
    +
    return NULL;
    }

    @@ -801,8 +811,7 @@
    kfree(dev->state);
    kfree(dev);

    - dec_parport_count();
    - port->ops->dec_use_count();
    + module_put(port->ops->owner);
    parport_put_port (port);

    /* Yes, that's right, someone _could_ still have a pointer to
    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/include/linux/parport.h linux-2.5.65-ac3/include/linux/parport.h
    --- linux-2.5.65-bk3/include/linux/parport.h 2003-03-22 19:34:04.000000000 +0000
    +++ linux-2.5.65-ac3/include/linux/parport.h 2003-03-06 23:08:36.000000000 +0000
    @@ -166,9 +166,6 @@
    void (*save_state)(struct parport *, struct parport_state *);
    void (*restore_state)(struct parport *, struct parport_state *);

    - void (*inc_use_count)(void);
    - void (*dec_use_count)(void);
    -
    /* Block read/write */
    size_t (*epp_write_data) (struct parport *port, const void *buf,
    size_t len, int flags);
    @@ -192,6 +189,7 @@
    size_t len, int flags);
    size_t (*byte_read_data) (struct parport *port, void *buf,
    size_t len, int flags);
    + struct module *owner;
    };

    struct parport_device_info {
    @@ -541,9 +539,6 @@
    extern int parport_default_proc_register(void);
    extern int parport_default_proc_unregister(void);

    -extern void dec_parport_count(void);
    -extern void inc_parport_count(void);
    -
    /* If PC hardware is the only type supported, we can optimise a bit. */
    #if (defined(CONFIG_PARPORT_PC) || defined(CONFIG_PARPORT_PC_MODULE)) && !(defined(CONFIG_PARPORT_ARC) || defined(CONFIG_PARPORT_ARC_MODULE)) && !(defined(CONFIG_PARPORT_AMIGA) || defined(CONFIG_PARPORT_AMIGA_MODULE)) && !(defined(CONFIG_PARPORT_MFC3) || defined(CONFIG_PARPORT_MFC3_MODULE)) && !(defined(CONFIG_PARPORT_ATARI) || defined(CONFIG_PARPORT_ATARI_MODULE)) && !(defined(CONFIG_USB_USS720) || defined(CONFIG_USB_USS720_MODULE)) && !(defined(CONFIG_PARPORT_SUNBPP) || defined(CONFIG_PARPORT_SUNBPP_MODULE)) && !defined(CONFIG_PARPORT_OTHER)

    diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/include/linux/parport_pc.h linux-2.5.65-ac3/include/linux/parport_pc.h
    --- linux-2.5.65-bk3/include/linux/parport_pc.h 2003-03-22 19:34:04.000000000 +0000
    +++ linux-2.5.65-ac3/include/linux/parport_pc.h 2003-03-06 23:08:41.000000000 +0000
    @@ -215,10 +215,6 @@

    extern void parport_pc_restore_state(struct parport *p, struct parport_state *s);

    -extern void parport_pc_inc_use_count(void);
    -
    -extern void parport_pc_dec_use_count(void);
    -
    /* PCMCIA code will want to get us to look at a port. Provide a mechanism. */
    extern struct parport *parport_pc_probe_port (unsigned long base,
    unsigned long base_hi,
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:34    [W:0.075 / U:65.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site