[PATCH] 2.4.4-ac11 aironet fixes

From: Andrzej Krzysztofowicz (ankry@green.mif.pg.gda.pl)
Date: Sat May 19 2001 - 17:42:41 EDT

  • Next message: Jacob Luna Lundberg: "2.4.4 del_timer_sync oops in schedule_timeout"

    Hi,

    The following patch fixes aironet drivers. It contains
    - fixed Config.in to disable non-working configurations (PNP without isapnp,
      built-in ISA or I365)
    - marked __init/__devinit/__devinitdata some initial code/variables
    - disable (#if 0) currently unused function (awc4500_pnp_hw_reset)
    - version printing fixes
    - long delay fixes (udelay()->mdelay())
    - added MODULE_PARM_DESC
    - functions with local onlu use marked static
    - removes duplicated version string from PCMCIA driver.

    Andrzej

    diff -ur linux-2.4.4-ac11/drivers/net/Config.in linux/drivers/net/Config.in
    --- linux-2.4.4-ac11/drivers/net/Config.in Fri May 18 17:56:21 2001
    +++ linux/drivers/net/Config.in Fri May 18 23:27:59 2001
    @@ -260,10 +260,14 @@
        tristate ' Aironet 4500/4800 series adapters' CONFIG_AIRONET4500
        dep_tristate ' Aironet 4500/4800 ISA/PCI/PNP/365 support ' CONFIG_AIRONET4500_NONCS $CONFIG_AIRONET4500
        if [ "$CONFIG_AIRONET4500" != "n" -a "$CONFIG_AIRONET4500_NONCS" != "n" ]; then
    - bool ' Aironet 4500/4800 PNP support ' CONFIG_AIRONET4500_PNP
    + if [ "$CONFIG_AIRONET4500_NONCS" = "m" -a "$CONFIG_ISAPNP" = "m" -o "$CONFIG_ISAPNP" = "y" ]; then
    + bool ' Aironet 4500/4800 PNP support ' CONFIG_AIRONET4500_PNP
    + fi
           dep_bool ' Aironet 4500/4800 PCI support ' CONFIG_AIRONET4500_PCI $CONFIG_PCI
    - dep_bool ' Aironet 4500/4800 ISA broken support (EXPERIMENTAL)' CONFIG_AIRONET4500_ISA $CONFIG_EXPERIMENTAL
    - dep_bool ' Aironet 4500/4800 I365 broken support (EXPERIMENTAL)' CONFIG_AIRONET4500_I365 $CONFIG_EXPERIMENTAL
    + if [ "$CONFIG_AIRONET4500_NONCS" = "m" ]; then
    + dep_bool ' Aironet 4500/4800 ISA broken support (EXPERIMENTAL)' CONFIG_AIRONET4500_ISA $CONFIG_EXPERIMENTAL
    + dep_bool ' Aironet 4500/4800 I365 broken support (EXPERIMENTAL)' CONFIG_AIRONET4500_I365 $CONFIG_EXPERIMENTAL
    + fi
        fi
        dep_tristate ' Aironet 4500/4800 PROC interface ' CONFIG_AIRONET4500_PROC $CONFIG_AIRONET4500 m
     
    diff -ur linux-2.4.4-ac11/drivers/net/aironet4500_card.c linux/drivers/net/aironet4500_card.c
    --- linux-2.4.4-ac11/drivers/net/aironet4500_card.c Tue May 1 21:14:31 2001
    +++ linux/drivers/net/aironet4500_card.c Fri May 18 22:59:20 2001
    @@ -11,10 +11,6 @@
      * Jeff Garzik - softnet, cleanups
      *
      */
    -#ifdef MODULE
    -static const char *awc_version =
    -"aironet4500_cards.c v0.2 Feb 27, 2000 Elmer Joandi, elmer@ylenurme.ee.\n";
    -#endif
     
     #include <linux/version.h>
     #include <linux/config.h>
    @@ -56,6 +52,11 @@
     #define AIRONET4500_365 4
     
     
    +static char awc_version[] __devinitdata =
    +KERN_INFO "aironet4500_cards.c v0.2 Feb 27, 2000 Elmer Joandi, elmer@ylenurme.ee.\n";
    +
    +static int version_printed __devinitdata = 0;
    +
     #ifdef CONFIG_AIRONET4500_PCI
     
     #include <linux/pci.h>
    @@ -75,7 +76,7 @@
                              int ioaddr, int cis_addr, int mem_addr,u8 pci_irq_line) ;
     
     
    -int awc4500_pci_probe(struct net_device *dev)
    +int __devinit awc4500_pci_probe(struct net_device *dev)
     {
             int cards_found = 0;
             static int pci_index; /* Static, for multiple probe calls. */
    @@ -136,6 +137,11 @@
     // request_region(pci_cisaddr, AIRONET4X00_CIS_SIZE, "aironet4x00 cis");
     // request_region(pci_memaddr, AIRONET4X00_MEM_SIZE, "aironet4x00 mem");
     
    +#ifndef MODULE
    + if (!version_printed++)
    + printk(awc_version);
    +#endif /* MODULE */
    +
                     mdelay(10);
     
                     pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
    @@ -164,7 +170,7 @@
     }
     
     
    -static int awc_pci_init(struct net_device * dev, struct pci_dev *pdev,
    +static int __devinit awc_pci_init(struct net_device * dev, struct pci_dev *pdev,
                              int ioaddr, int cis_addr, int mem_addr, u8 pci_irq_line) {
     
             int i, allocd_dev = 0;
    @@ -294,6 +300,7 @@
     #define PNP_BUS_NUMBER number
     #define PNP_DEV_NUMBER devfn
     
    +#if 0 /* unused ? */
     
     int awc4500_pnp_hw_reset(struct net_device *dev){
             struct isapnp_logdev *logdev;
    @@ -331,8 +338,9 @@
     
             return 0;
     }
    +#endif /* 0 */
     
    -int awc4500_pnp_probe(struct net_device *dev)
    +int __init awc4500_pnp_probe(struct net_device *dev)
     {
             int isa_index = 0;
             int isa_irq_line = 0;
    @@ -383,6 +391,12 @@
                                     return -ENOMEM;
                             }
                     }
    +
    +#ifndef MODULE
    + if (!version_printed++)
    + printk(awc_version);
    +#endif /* MODULE */
    +
                     dev->priv = kmalloc(sizeof(struct awc_private),GFP_KERNEL );
                     memset(dev->priv,0,sizeof(struct awc_private));
                     if (!dev->priv) {
    @@ -523,7 +537,7 @@
     
     
     
    -int awc4500_isa_probe(struct net_device *dev)
    +static int __init awc4500_isa_probe(struct net_device *dev)
     {
     // int cards_found = 0;
     // static int isa_index; /* Static, for multiple probe calls. */
    @@ -670,18 +684,18 @@
             int product;
     };
             
    -inline u8 i365_in (struct i365_socket * s, int offset) {
    +static inline u8 i365_in (struct i365_socket * s, int offset) {
             outb(offset + (s->socket % 2)* 0x40, s->offset_port);
             return inb(s->data_port);
     };
     
    -inline void i365_out (struct i365_socket * s, int offset,int data){
    +static inline void i365_out (struct i365_socket * s, int offset,int data){
             outb(offset + (s->socket % 2)* 0x40 ,s->offset_port);
             outb((data & 0xff),s->data_port) ;
             
     };
     
    -void awc_i365_card_release(struct i365_socket * s){
    +static void __init awc_i365_card_release(struct i365_socket * s){
             
             i365_out(s, 0x5, 0); // clearing ints
             i365_out(s, 0x6, 0x20); // mem 16 bits
    @@ -690,10 +704,10 @@
             i365_out(s, 0x2, 0); // reset power
             i365_out(s, 0x2, i365_in(s, 0x2) & 0x7f ); // cardenable off
             i365_out(s, 0x2, 0); // remove power
    -
     
     };
    -int awc_i365_probe_once(struct i365_socket * s ){
    +
    +static int __init awc_i365_probe_once(struct i365_socket * s ){
     
     
             int caps=i365_in(s, 0);
    @@ -723,14 +737,14 @@
             awc_i365_card_release(s);
     
     
    - udelay(100000);
    + mdelay(100);
             
             i365_out(s, 0x2, 0x10 ); // power enable
    - udelay(200000);
    + mdelay(200);
             
             i365_out(s, 0x2, 0x10 | 0x01 | 0x04 | 0x80); //power enable
             
    - udelay(250000);
    + mdelay(250);
             
             if (!s->irq)
                     s->irq = 11;
    @@ -756,7 +770,7 @@
             i365_out(s,0x15,0x3f | 0x40); // enab mem reg bit
             i365_out(s,0x06,0x01); // enab mem
             
    - udelay(10000);
    + mdelay(10);
             
             cis[0] = 0x45;
             
    @@ -767,7 +781,7 @@
     
             mem[0x3e0] = 0x45;
     
    - udelay(10000);
    + mdelay(10);
             
             memcpy_fromio(cis,0xD000, 0x3e0);
             
    @@ -795,7 +809,7 @@
                     s->socket, s->manufacturer,s->product);
     
             i365_out(s,0x07, 0x1 | 0x2); // enable io 16bit
    - udelay(1000);
    + mdelay(1);
             port = s->io;
             i365_out(s,0x08, port & 0xff);
             i365_out(s,0x09, (port & 0xff00)/ 0x100);
    @@ -804,7 +818,7 @@
     
             i365_out(s,0x06, 0x40); // enable io window
     
    - udelay(1000);
    + mdelay(1);
     
             i365_out(s,0x3e0,0x45);
             
    @@ -822,17 +836,14 @@
     
             
             outw(0x10, s->io + 0x34);
    - udelay(10000);
    + mdelay(10);
             
             return 0;
    -
    -
     
    -
     };
     
     
    -static int awc_i365_init(struct i365_socket * s) {
    +static int __init awc_i365_init(struct i365_socket * s) {
     
             struct net_device * dev;
             int i;
    @@ -877,9 +888,10 @@
             }
     
             return 0;
    -
    +
       failed:
               return -1;
    +
     }
     
     
    @@ -912,17 +924,12 @@
     
                     i++;
             }
    -
    -
    -}
    -
     
     
    +}
     
     
    -
    -
    -int awc_i365_probe(void) {
    +static int __init awc_i365_probe(void) {
     
             int i = 1;
             int k = 0;
    @@ -930,7 +937,6 @@
             int found=0;
             
             struct i365_socket s;
    - /* Always emit the version, before any failure. */
     
             if (!awc_i365_sockets) {
                     printk(" awc i82635 4x00: use bitfiel opts awc_i365_sockets=0x3 <- (1|2) to probe sockets 0 and 1\n");
    @@ -952,7 +958,13 @@
                             if (!ret){
                                     if (awc_i365_init(&s))
                                             goto failed;
    - else found++;
    + else{
    + found++;
    +#ifndef MODULE
    + if (!version_printed++)
    + printk(awc_version);
    +#endif /* MODULE */
    + }
                             } else if (ret == -1)
                                     goto failed;
                     };
    @@ -969,8 +981,6 @@
     failed:
             awc_i365_release();
             return -1;
    -
    -
     }
     
     #endif /* CONFIG_AIRONET4500_I365 */
    diff -ur linux-2.4.4-ac11/drivers/net/aironet4500_core.c linux/drivers/net/aironet4500_core.c
    --- linux-2.4.4-ac11/drivers/net/aironet4500_core.c Tue May 1 21:14:31 2001
    +++ linux/drivers/net/aironet4500_core.c Fri May 18 23:13:36 2001
    @@ -2537,8 +2537,8 @@
     
     };
     
    -static const char *aironet4500_core_version =
    -"aironet4500.c v0.1 1/1/99 Elmer Joandi, elmer@ylenurme.ee.\n";
    +static char aironet4500_core_version[] __initdata =
    + KERN_INFO "aironet4500_core.c v0.1 1/1/99 Elmer Joandi, elmer@ylenurme.ee.\n";
     
     struct net_device * aironet4500_devices[MAX_AWCS];
     
    @@ -2566,7 +2566,7 @@
     MODULE_PARM(awc_debug,"i");
     MODULE_PARM(tx_rate,"i");
     MODULE_PARM(channel,"i");
    -MODULE_PARM(tx_full_rate,"i");
    +//MODULE_PARM(tx_full_rate,"i");
     MODULE_PARM(adhoc,"i");
     MODULE_PARM(master,"i");
     MODULE_PARM(slave,"i");
    @@ -2575,6 +2575,12 @@
     MODULE_PARM(large_buff_mem,"i");
     MODULE_PARM(small_buff_no,"i");
     MODULE_PARM(SSID,"c33");
    +MODULE_PARM_DESC(awc_debug,"Aironet debug mask");
    +MODULE_PARM_DESC(channel,"Aironet ");
    +MODULE_PARM_DESC(adhoc,"Aironet Access Points not available (0-1)");
    +MODULE_PARM_DESC(master,"Aironet is Adhoc master (creates network sync) (0-1)");
    +MODULE_PARM_DESC(slave,"Aironet is Adhoc slave (0-1)");
    +MODULE_PARM_DESC(max_mtu,"Aironet MTU limit (256-2312)");
     #endif
     
     /*EXPORT_SYMBOL(tx_queue_len);
    @@ -3209,18 +3215,18 @@
             return 0;
     };
     
    -static int aironet_core_init(void)
    +static int __init aironet_core_init(void)
     {
     // unsigned long flags;
     
                     
    - printk(KERN_INFO"%s", aironet4500_core_version);
    + printk(aironet4500_core_version);
             return 0;
             
     
     }
     
    -static void aironet_core_exit(void)
    +static void __exit aironet_core_exit(void)
     {
             printk(KERN_INFO "aironet4500 unloading core module \n");
     
    diff -ur linux-2.4.4-ac11/drivers/net/aironet4500_proc.c linux/drivers/net/aironet4500_proc.c
    --- linux-2.4.4-ac11/drivers/net/aironet4500_proc.c Fri May 18 22:03:13 2001
    +++ linux/drivers/net/aironet4500_proc.c Fri May 18 22:02:19 2001
    @@ -1,5 +1,5 @@
     /*
    - * Aironet 4500 Pcmcia driver
    + * Aironet 4500 /proc interface
      *
      * Elmer Joandi, Januar 1999
      * Copyright GPL
    diff -uNr linux-2.4.4-ac11/drivers/net/pcmcia/aironet4500_cs.c linux/drivers/net/pcmcia/aironet4500_cs.c
    --- linux-2.4.4-ac11/drivers/net/pcmcia/aironet4500_cs.c Sat May 19 18:35:47 2001
    +++ linux/drivers/net/pcmcia/aironet4500_cs.c Sat May 19 23:19:08 2001
    @@ -10,10 +10,6 @@
      *
      */
     
    -static const char *awc_version =
    -"aironet4500_cs.c v0.1 1/1/99 Elmer Joandi, elmer@ylenurme.ee.\n";
    -
    -
     #include <linux/module.h>
     #include <linux/init.h>
     #include <linux/kernel.h>
    @@ -50,6 +46,8 @@
     
     #include "../aironet4500.h"
     
    +static const char awc_version[] =
    +KERN_INFO "aironet4500_cs.c v0.1 1/1/99 Elmer Joandi, elmer@ylenurme.ee.\n";
     
     static u_int irq_mask = 0x5eF8;
     static int awc_ports[] = {0x140,0x100,0xc0, 0x80 };
    @@ -65,8 +63,6 @@
     static int pc_debug = PCMCIA_DEBUG;
     MODULE_PARM(pc_debug, "i");
     #define PC_DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
    -static char *version =
    -"aironet4500_cs.c v0.1 1/1/99 Elmer Joandi, elmer@ylenurme.ee.\n";
     #else
     #define PC_DEBUG(n, args...)
     #endif
    @@ -615,8 +611,7 @@
             servinfo_t serv;
     
             /* Always emit the version, before any failure. */
    - printk(KERN_INFO"%s", awc_version);
    - PC_DEBUG(0, "%s\n", version);
    + printk(awc_version);
             CardServices(GetCardServicesInfo, &serv);
             if (serv.Revision != CS_RELEASE_CODE) {
                     printk(KERN_NOTICE "awc_cs: Card Services release "

    -- 
    =======================================================================
      Andrzej M. Krzysztofowicz               ankry@mif.pg.gda.pl
      phone (48)(58) 347 14 61
    Faculty of Applied Phys. & Math.,   Technical University of Gdansk
    -
    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/
    



    This archive was generated by hypermail 2b29 : Sat May 19 2001 - 17:49:00 EDT