X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/58531e4910ac0d44f6e72bbd13217fdba3dbcc51..25ec0aa7d25a6d19e8ebf2fe981185bf61f18762:/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c 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 e4a764f49..1391bbe8c 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,6 +20,8 @@ #include #include "adm5120sw.h" +#include + MODULE_AUTHOR("Jeroen Vreeken (pe1rxq@amsat.org)"); MODULE_DESCRIPTION("ADM5120 ethernet switch driver"); MODULE_LICENSE("GPL"); @@ -27,7 +29,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: @@ -40,7 +42,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))), @@ -157,7 +159,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; @@ -316,7 +318,7 @@ static int adm5120_sw_set_mac_address(struct net_device *dev, void *p) static int adm5120_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { int err; - struct adm5120_info info; + struct adm5120_sw_info info; struct adm5120_sw *priv = netdev_priv(dev); switch(cmd) { @@ -387,14 +389,9 @@ static int __init adm5120_sw_init(void) 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 (boot_loader_type == CFE) - adm5120_nrdevs = 2 - else - adm5120_nrdevs = 6; adm5120_set_reg(ADM5120_CPUP_CONF, ADM5120_DISCCPUPORT | ADM5120_CRC_PADDING | @@ -424,14 +421,14 @@ 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; idev_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;