X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fhamradio%2Fyam.c;h=f98f5777dfbb7807729e20c79651ee8c7291e1bb;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hp=c516e7156ca135514471991bf162403f5b0c0990;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c index c516e7156..f98f5777d 100644 --- a/drivers/net/hamradio/yam.c +++ b/drivers/net/hamradio/yam.c @@ -42,7 +42,6 @@ /*****************************************************************************/ -#include #include #include #include @@ -50,7 +49,7 @@ #include #include #include -#include +#include #include #include #include @@ -60,15 +59,7 @@ #include #include #include -#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) -/* prototypes for ax25_encapsulate and ax25_rebuild_header */ #include -#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */ - -/* make genksyms happy */ -#include -#include -#include #include #include @@ -170,7 +161,7 @@ static char ax25_bcast[7] = static char ax25_test[7] = {'L' << 1, 'I' << 1, 'N' << 1, 'U' << 1, 'X' << 1, ' ' << 1, '1' << 1}; -static struct timer_list yam_timer = TIMER_INITIALIZER(NULL, 0, 0); +static DEFINE_TIMER(yam_timer, NULL, 0, 0); /* --------------------------------------------------------------------- */ @@ -442,7 +433,7 @@ static int fpga_download(int iobase, int bitrate) static void yam_set_uart(struct net_device *dev) { - struct yam_port *yp = (struct yam_port *) dev->priv; + struct yam_port *yp = netdev_priv(dev); int divisor = 115200 / yp->baudrate; outb(0, IER(dev->base_addr)); @@ -522,12 +513,10 @@ static inline void yam_rx_flag(struct net_device *dev, struct yam_port *yp) ++yp->stats.rx_dropped; } else { unsigned char *cp; - skb->dev = dev; cp = skb_put(skb, pkt_len); *cp++ = 0; /* KISS kludge */ memcpy(cp, yp->rx_buf, pkt_len - 1); - skb->protocol = htons(ETH_P_AX25); - skb->mac.raw = skb->data; + skb->protocol = ax25_type_trans(skb, dev); netif_rx(skb); dev->last_rx = jiffies; ++yp->stats.rx_packets; @@ -565,7 +554,7 @@ static void ptt_off(struct net_device *dev) static int yam_send_packet(struct sk_buff *skb, struct net_device *dev) { - struct yam_port *yp = dev->priv; + struct yam_port *yp = netdev_priv(dev); skb_queue_tail(&yp->send_queue, skb); dev->trans_start = jiffies; @@ -592,12 +581,11 @@ static inline unsigned short random_num(void) static void yam_arbitrate(struct net_device *dev) { - struct yam_port *yp = dev->priv; + struct yam_port *yp = netdev_priv(dev); - if (!yp || yp->magic != YAM_MAGIC - || yp->tx_state != TX_OFF || skb_queue_empty(&yp->send_queue)) { + if (yp->magic != YAM_MAGIC || yp->tx_state != TX_OFF || + skb_queue_empty(&yp->send_queue)) return; - } /* tx_state is TX_OFF and there is data to send */ if (yp->dupmode) { @@ -725,7 +713,7 @@ static irqreturn_t yam_interrupt(int irq, void *dev_id, struct pt_regs *regs) for (i = 0; i < NR_PORTS; i++) { dev = yam_devs[i]; - yp = dev->priv; + yp = netdev_priv(dev); if (!netif_running(dev)) continue; @@ -784,8 +772,8 @@ static void yam_seq_stop(struct seq_file *seq, void *v) static int yam_seq_show(struct seq_file *seq, void *v) { - const struct net_device *dev = v; - const struct yam_port *yp = dev->priv; + struct net_device *dev = v; + const struct yam_port *yp = netdev_priv(dev); seq_printf(seq, "Device %s\n", dev->name); seq_printf(seq, " Up %d\n", netif_running(dev)); @@ -838,10 +826,10 @@ static struct net_device_stats *yam_get_stats(struct net_device *dev) { struct yam_port *yp; - if (!dev || !dev->priv) + if (!dev) return NULL; - yp = (struct yam_port *) dev->priv; + yp = netdev_priv(dev); if (yp->magic != YAM_MAGIC) return NULL; @@ -856,14 +844,14 @@ static struct net_device_stats *yam_get_stats(struct net_device *dev) static int yam_open(struct net_device *dev) { - struct yam_port *yp = (struct yam_port *) dev->priv; + struct yam_port *yp = netdev_priv(dev); enum uart u; int i; int ret=0; printk(KERN_INFO "Trying %s at iobase 0x%lx irq %u\n", dev->name, dev->base_addr, dev->irq); - if (!dev || !yp || !yp->bitrate) + if (!dev || !yp->bitrate) return -ENXIO; if (!dev->base_addr || dev->base_addr > 0x1000 - YAM_EXTENT || dev->irq < 2 || dev->irq > 15) { @@ -885,7 +873,7 @@ static int yam_open(struct net_device *dev) goto out_release_base; } outb(0, IER(dev->base_addr)); - if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT | SA_SHIRQ, dev->name, dev)) { + if (request_irq(dev->irq, yam_interrupt, IRQF_DISABLED | IRQF_SHARED, dev->name, dev)) { printk(KERN_ERR "%s: irq %d busy\n", dev->name, dev->irq); ret = -EBUSY; goto out_release_base; @@ -900,7 +888,7 @@ static int yam_open(struct net_device *dev) /* Reset overruns for all ports - FPGA programming makes overruns */ for (i = 0; i < NR_PORTS; i++) { struct net_device *dev = yam_devs[i]; - struct yam_port *yp = dev->priv; + struct yam_port *yp = netdev_priv(dev); inb(LSR(dev->base_addr)); yp->stats.rx_fifo_errors = 0; } @@ -919,10 +907,11 @@ out_release_base: static int yam_close(struct net_device *dev) { struct sk_buff *skb; - struct yam_port *yp = (struct yam_port *) dev->priv; + struct yam_port *yp = netdev_priv(dev); - if (!dev || !yp) + if (!dev) return -EINVAL; + /* * disable interrupts */ @@ -944,7 +933,7 @@ static int yam_close(struct net_device *dev) static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { - struct yam_port *yp = (struct yam_port *) dev->priv; + struct yam_port *yp = netdev_priv(dev); struct yamdrv_ioctl_cfg yi; struct yamdrv_ioctl_mcs *ym; int ioctl_cmd; @@ -952,7 +941,7 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) if (copy_from_user(&ioctl_cmd, ifr->ifr_data, sizeof(int))) return -EFAULT; - if (yp == NULL || yp->magic != YAM_MAGIC) + if (yp->magic != YAM_MAGIC) return -EINVAL; if (!capable(CAP_NET_ADMIN)) @@ -1091,7 +1080,7 @@ static int yam_set_mac_address(struct net_device *dev, void *addr) static void yam_setup(struct net_device *dev) { - struct yam_port *yp = dev->priv; + struct yam_port *yp = netdev_priv(dev); yp->magic = YAM_MAGIC; yp->bitrate = DEFAULT_BITRATE; @@ -1108,7 +1097,6 @@ static void yam_setup(struct net_device *dev) dev->base_addr = yp->iobase; dev->irq = yp->irq; - SET_MODULE_OWNER(dev); dev->open = yam_open; dev->stop = yam_close; @@ -1118,23 +1106,17 @@ static void yam_setup(struct net_device *dev) skb_queue_head_init(&yp->send_queue); -#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) - dev->hard_header = ax25_encapsulate; + dev->hard_header = ax25_hard_header; dev->rebuild_header = ax25_rebuild_header; -#else /* CONFIG_AX25 || CONFIG_AX25_MODULE */ - dev->hard_header = NULL; - dev->rebuild_header = NULL; -#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */ dev->set_mac_address = yam_set_mac_address; - dev->type = ARPHRD_AX25; /* AF_AX25 device */ - dev->hard_header_len = 73; /* We do digipeaters now */ - dev->mtu = 256; /* AX25 is the default */ - dev->addr_len = 7; /* sizeof an ax.25 address */ - memcpy(dev->broadcast, ax25_bcast, 7); - memcpy(dev->dev_addr, ax25_test, 7); - + dev->type = ARPHRD_AX25; + dev->hard_header_len = AX25_MAX_HEADER_LEN; + dev->mtu = AX25_MTU; + dev->addr_len = AX25_ADDR_LEN; + memcpy(dev->broadcast, ax25_bcast, AX25_ADDR_LEN); + memcpy(dev->dev_addr, ax25_test, AX25_ADDR_LEN); } static int __init yam_init_driver(void)