X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/3f8c5b95adbaa43fd5fcfa94a713971e8331fc58..23314df94957bf3c355b60b66ea7a6fee7ebaecf:/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c?ds=sidebyside diff --git a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c index c75ad4abb..33489e50f 100644 --- a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c +++ b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c @@ -3,7 +3,7 @@ * * Copyright Jeroen Vreeken (pe1rxq@amsat.org), 2005 * - * Inspiration for this driver came from the original ADMtek 2.4 + * Inspiration for this driver came from the original ADMtek 2.4 * driver, Copyright ADMtek Inc. */ #include @@ -20,7 +20,8 @@ #include #include "adm5120sw.h" -#include "adm5120_info.h" +#include +#include MODULE_AUTHOR("Jeroen Vreeken (pe1rxq@amsat.org)"); MODULE_DESCRIPTION("ADM5120 ethernet switch driver"); @@ -29,7 +30,7 @@ MODULE_LICENSE("GPL"); /* * The ADM5120 uses an internal matrix to determine which ports * belong to which VLAN. - * The default generates a VLAN (and device) for each port + * The default generates a VLAN (and device) for each port * (including MII port) and the CPU port is part of all of them. * * Another example, one big switch and everything mapped to eth0: @@ -42,7 +43,7 @@ static unsigned char vlan_matrix[SW_DEVS] = { static int adm5120_nrdevs; static struct net_device *adm5120_devs[SW_DEVS]; -static struct adm5120_dma +static struct adm5120_dma adm5120_dma_txh_v[ADM5120_DMA_TXH] __attribute__((aligned(16))), adm5120_dma_txl_v[ADM5120_DMA_TXL] __attribute__((aligned(16))), adm5120_dma_rxh_v[ADM5120_DMA_RXH] __attribute__((aligned(16))), @@ -159,7 +160,7 @@ static inline void adm5120_tx(struct adm5120_dma *dma, struct sk_buff **skbl, } } -irqreturn_t adm5120_sw_irq(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t adm5120_sw_irq(int irq, void *dev_id) { unsigned long intreg; @@ -385,18 +386,13 @@ static int __init adm5120_sw_init(void) int i, err; struct net_device *dev; - err = request_irq(SW_IRQ, adm5120_sw_irq, 0, "ethernet switch", NULL); + err = request_irq(ADM5120_IRQ_SWITCH, adm5120_sw_irq, 0, "ethernet switch", NULL); if (err) goto out; - /* MII port? */ - if (adm5120_get_reg(ADM5120_CODE) & ADM5120_CODE_PQFP) + adm5120_nrdevs = adm5120_board.iface_num; + if (adm5120_nrdevs > 5 && !adm5120_has_gmii()) adm5120_nrdevs = 5; - /* CFE based devices only have two enet ports */ - else if (adm5120_info.boot_loader == BOOT_LOADER_CFE) - adm5120_nrdevs = 2; - else - adm5120_nrdevs = 6; adm5120_set_reg(ADM5120_CPUP_CONF, ADM5120_DISCCPUPORT | ADM5120_CRC_PADDING | @@ -426,20 +422,20 @@ static int __init adm5120_sw_init(void) adm5120_set_reg(ADM5120_RECEIVE_LBADDR, KSEG1ADDR(adm5120_dma_rxl)); adm5120_set_vlan(vlan_matrix); - + for (i=0; iport = i; dev->base_addr = SW_BASE; - dev->irq = SW_IRQ; + dev->irq = ADM5120_IRQ_SWITCH; dev->open = adm5120_sw_open; dev->hard_start_xmit = adm5120_sw_tx; dev->stop = adm5120_sw_stop; @@ -456,7 +452,7 @@ static int __init adm5120_sw_init(void) memcpy(dev->dev_addr, "\x00\x50\xfc\x11\x22\x01", 6); dev->dev_addr[5] += i; adm5120_write_mac(dev); - + if ((err = register_netdev(dev))) { free_netdev(dev); goto out_int; @@ -474,7 +470,7 @@ out_int: unregister_netdev(adm5120_devs[i-1]); free_netdev(adm5120_devs[i-1]); } - free_irq(SW_IRQ, NULL); + free_irq(ADM5120_IRQ_SWITCH, NULL); out: printk(KERN_ERR "ADM5120 Ethernet switch init failed\n"); return err; @@ -489,7 +485,7 @@ static void __exit adm5120_sw_exit(void) free_netdev(adm5120_devs[i-1]); } - free_irq(SW_IRQ, NULL); + free_irq(ADM5120_IRQ_SWITCH, NULL); for (i = 0; i < ADM5120_DMA_RXH; i++) { if (!adm5120_skb_rxh[i])