diff options
Diffstat (limited to 'drivers/net/ksz884x.c')
-rw-r--r-- | drivers/net/ksz884x.c | 79 |
1 files changed, 33 insertions, 46 deletions
diff --git a/drivers/net/ksz884x.c b/drivers/net/ksz884x.c index 0606a1f359fb..870185837a3b 100644 --- a/drivers/net/ksz884x.c +++ b/drivers/net/ksz884x.c | |||
@@ -14,10 +14,11 @@ | |||
14 | * GNU General Public License for more details. | 14 | * GNU General Public License for more details. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
18 | |||
17 | #include <linux/init.h> | 19 | #include <linux/init.h> |
18 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
19 | #include <linux/module.h> | 21 | #include <linux/module.h> |
20 | #include <linux/version.h> | ||
21 | #include <linux/ioport.h> | 22 | #include <linux/ioport.h> |
22 | #include <linux/pci.h> | 23 | #include <linux/pci.h> |
23 | #include <linux/proc_fs.h> | 24 | #include <linux/proc_fs.h> |
@@ -1484,11 +1485,6 @@ struct dev_priv { | |||
1484 | int promiscuous; | 1485 | int promiscuous; |
1485 | }; | 1486 | }; |
1486 | 1487 | ||
1487 | #define ks_info(_ks, _msg...) dev_info(&(_ks)->pdev->dev, _msg) | ||
1488 | #define ks_warn(_ks, _msg...) dev_warn(&(_ks)->pdev->dev, _msg) | ||
1489 | #define ks_dbg(_ks, _msg...) dev_dbg(&(_ks)->pdev->dev, _msg) | ||
1490 | #define ks_err(_ks, _msg...) dev_err(&(_ks)->pdev->dev, _msg) | ||
1491 | |||
1492 | #define DRV_NAME "KSZ884X PCI" | 1488 | #define DRV_NAME "KSZ884X PCI" |
1493 | #define DEVICE_NAME "KSZ884x PCI" | 1489 | #define DEVICE_NAME "KSZ884x PCI" |
1494 | #define DRV_VERSION "1.0.0" | 1490 | #define DRV_VERSION "1.0.0" |
@@ -3835,7 +3831,7 @@ static void ksz_check_desc_num(struct ksz_desc_info *info) | |||
3835 | alloc >>= 1; | 3831 | alloc >>= 1; |
3836 | } | 3832 | } |
3837 | if (alloc != 1 || shift < MIN_DESC_SHIFT) { | 3833 | if (alloc != 1 || shift < MIN_DESC_SHIFT) { |
3838 | printk(KERN_ALERT "Hardware descriptor numbers not right!\n"); | 3834 | pr_alert("Hardware descriptor numbers not right!\n"); |
3839 | while (alloc) { | 3835 | while (alloc) { |
3840 | shift++; | 3836 | shift++; |
3841 | alloc >>= 1; | 3837 | alloc >>= 1; |
@@ -4546,8 +4542,7 @@ static int ksz_alloc_mem(struct dev_info *adapter) | |||
4546 | (((sizeof(struct ksz_hw_desc) + DESC_ALIGNMENT - 1) / | 4542 | (((sizeof(struct ksz_hw_desc) + DESC_ALIGNMENT - 1) / |
4547 | DESC_ALIGNMENT) * DESC_ALIGNMENT); | 4543 | DESC_ALIGNMENT) * DESC_ALIGNMENT); |
4548 | if (hw->rx_desc_info.size != sizeof(struct ksz_hw_desc)) | 4544 | if (hw->rx_desc_info.size != sizeof(struct ksz_hw_desc)) |
4549 | printk(KERN_ALERT | 4545 | pr_alert("Hardware descriptor size not right!\n"); |
4550 | "Hardware descriptor size not right!\n"); | ||
4551 | ksz_check_desc_num(&hw->rx_desc_info); | 4546 | ksz_check_desc_num(&hw->rx_desc_info); |
4552 | ksz_check_desc_num(&hw->tx_desc_info); | 4547 | ksz_check_desc_num(&hw->tx_desc_info); |
4553 | 4548 | ||
@@ -5049,8 +5044,6 @@ static inline int rx_proc(struct net_device *dev, struct ksz_hw* hw, | |||
5049 | dma_buf->skb->data, packet_len); | 5044 | dma_buf->skb->data, packet_len); |
5050 | } while (0); | 5045 | } while (0); |
5051 | 5046 | ||
5052 | skb->dev = dev; | ||
5053 | |||
5054 | skb->protocol = eth_type_trans(skb, dev); | 5047 | skb->protocol = eth_type_trans(skb, dev); |
5055 | 5048 | ||
5056 | if (hw->rx_cfg & (DMA_RX_CSUM_UDP | DMA_RX_CSUM_TCP)) | 5049 | if (hw->rx_cfg & (DMA_RX_CSUM_UDP | DMA_RX_CSUM_TCP)) |
@@ -5320,10 +5313,10 @@ static irqreturn_t netdev_intr(int irq, void *dev_id) | |||
5320 | u32 data; | 5313 | u32 data; |
5321 | 5314 | ||
5322 | hw->intr_mask &= ~KS884X_INT_TX_STOPPED; | 5315 | hw->intr_mask &= ~KS884X_INT_TX_STOPPED; |
5323 | printk(KERN_INFO "Tx stopped\n"); | 5316 | pr_info("Tx stopped\n"); |
5324 | data = readl(hw->io + KS_DMA_TX_CTRL); | 5317 | data = readl(hw->io + KS_DMA_TX_CTRL); |
5325 | if (!(data & DMA_TX_ENABLE)) | 5318 | if (!(data & DMA_TX_ENABLE)) |
5326 | printk(KERN_INFO "Tx disabled\n"); | 5319 | pr_info("Tx disabled\n"); |
5327 | break; | 5320 | break; |
5328 | } | 5321 | } |
5329 | } while (0); | 5322 | } while (0); |
@@ -5496,6 +5489,18 @@ static int prepare_hardware(struct net_device *dev) | |||
5496 | return 0; | 5489 | return 0; |
5497 | } | 5490 | } |
5498 | 5491 | ||
5492 | static void set_media_state(struct net_device *dev, int media_state) | ||
5493 | { | ||
5494 | struct dev_priv *priv = netdev_priv(dev); | ||
5495 | |||
5496 | if (media_state == priv->media_state) | ||
5497 | netif_carrier_on(dev); | ||
5498 | else | ||
5499 | netif_carrier_off(dev); | ||
5500 | netif_info(priv, link, dev, "link %s\n", | ||
5501 | media_state == priv->media_state ? "on" : "off"); | ||
5502 | } | ||
5503 | |||
5499 | /** | 5504 | /** |
5500 | * netdev_open - open network device | 5505 | * netdev_open - open network device |
5501 | * @dev: Network device. | 5506 | * @dev: Network device. |
@@ -5585,15 +5590,7 @@ static int netdev_open(struct net_device *dev) | |||
5585 | 5590 | ||
5586 | priv->media_state = port->linked->state; | 5591 | priv->media_state = port->linked->state; |
5587 | 5592 | ||
5588 | if (media_connected == priv->media_state) | 5593 | set_media_state(dev, media_connected); |
5589 | netif_carrier_on(dev); | ||
5590 | else | ||
5591 | netif_carrier_off(dev); | ||
5592 | if (netif_msg_link(priv)) | ||
5593 | printk(KERN_INFO "%s link %s\n", dev->name, | ||
5594 | (media_connected == priv->media_state ? | ||
5595 | "on" : "off")); | ||
5596 | |||
5597 | netif_start_queue(dev); | 5594 | netif_start_queue(dev); |
5598 | 5595 | ||
5599 | return 0; | 5596 | return 0; |
@@ -5767,7 +5764,7 @@ static void netdev_set_rx_mode(struct net_device *dev) | |||
5767 | struct dev_priv *priv = netdev_priv(dev); | 5764 | struct dev_priv *priv = netdev_priv(dev); |
5768 | struct dev_info *hw_priv = priv->adapter; | 5765 | struct dev_info *hw_priv = priv->adapter; |
5769 | struct ksz_hw *hw = &hw_priv->hw; | 5766 | struct ksz_hw *hw = &hw_priv->hw; |
5770 | struct dev_mc_list *mc_ptr; | 5767 | struct netdev_hw_addr *ha; |
5771 | int multicast = (dev->flags & IFF_ALLMULTI); | 5768 | int multicast = (dev->flags & IFF_ALLMULTI); |
5772 | 5769 | ||
5773 | dev_set_promiscuous(dev, priv, hw, (dev->flags & IFF_PROMISC)); | 5770 | dev_set_promiscuous(dev, priv, hw, (dev->flags & IFF_PROMISC)); |
@@ -5784,7 +5781,7 @@ static void netdev_set_rx_mode(struct net_device *dev) | |||
5784 | int i = 0; | 5781 | int i = 0; |
5785 | 5782 | ||
5786 | /* List too big to support so turn on all multicast mode. */ | 5783 | /* List too big to support so turn on all multicast mode. */ |
5787 | if (dev->mc_count > MAX_MULTICAST_LIST) { | 5784 | if (netdev_mc_count(dev) > MAX_MULTICAST_LIST) { |
5788 | if (MAX_MULTICAST_LIST != hw->multi_list_size) { | 5785 | if (MAX_MULTICAST_LIST != hw->multi_list_size) { |
5789 | hw->multi_list_size = MAX_MULTICAST_LIST; | 5786 | hw->multi_list_size = MAX_MULTICAST_LIST; |
5790 | ++hw->all_multi; | 5787 | ++hw->all_multi; |
@@ -5793,13 +5790,12 @@ static void netdev_set_rx_mode(struct net_device *dev) | |||
5793 | return; | 5790 | return; |
5794 | } | 5791 | } |
5795 | 5792 | ||
5796 | netdev_for_each_mc_addr(mc_ptr, dev) { | 5793 | netdev_for_each_mc_addr(ha, dev) { |
5797 | if (!(*mc_ptr->dmi_addr & 1)) | 5794 | if (!(*ha->addr & 1)) |
5798 | continue; | 5795 | continue; |
5799 | if (i >= MAX_MULTICAST_LIST) | 5796 | if (i >= MAX_MULTICAST_LIST) |
5800 | break; | 5797 | break; |
5801 | memcpy(hw->multi_list[i++], mc_ptr->dmi_addr, | 5798 | memcpy(hw->multi_list[i++], ha->addr, MAC_ADDR_LEN); |
5802 | MAC_ADDR_LEN); | ||
5803 | } | 5799 | } |
5804 | hw->multi_list_size = (u8) i; | 5800 | hw->multi_list_size = (u8) i; |
5805 | hw_set_grp_addr(hw); | 5801 | hw_set_grp_addr(hw); |
@@ -6683,16 +6679,8 @@ static void update_link(struct net_device *dev, struct dev_priv *priv, | |||
6683 | { | 6679 | { |
6684 | if (priv->media_state != port->linked->state) { | 6680 | if (priv->media_state != port->linked->state) { |
6685 | priv->media_state = port->linked->state; | 6681 | priv->media_state = port->linked->state; |
6686 | if (netif_running(dev)) { | 6682 | if (netif_running(dev)) |
6687 | if (media_connected == priv->media_state) | 6683 | set_media_state(dev, media_connected); |
6688 | netif_carrier_on(dev); | ||
6689 | else | ||
6690 | netif_carrier_off(dev); | ||
6691 | if (netif_msg_link(priv)) | ||
6692 | printk(KERN_INFO "%s link %s\n", dev->name, | ||
6693 | (media_connected == priv->media_state ? | ||
6694 | "on" : "off")); | ||
6695 | } | ||
6696 | } | 6684 | } |
6697 | } | 6685 | } |
6698 | 6686 | ||
@@ -6986,7 +6974,7 @@ static int __init pcidev_init(struct pci_dev *pdev, | |||
6986 | int pi; | 6974 | int pi; |
6987 | int port_count; | 6975 | int port_count; |
6988 | int result; | 6976 | int result; |
6989 | char banner[80]; | 6977 | char banner[sizeof(version)]; |
6990 | struct ksz_switch *sw = NULL; | 6978 | struct ksz_switch *sw = NULL; |
6991 | 6979 | ||
6992 | result = pci_enable_device(pdev); | 6980 | result = pci_enable_device(pdev); |
@@ -7010,10 +6998,9 @@ static int __init pcidev_init(struct pci_dev *pdev, | |||
7010 | 6998 | ||
7011 | result = -ENOMEM; | 6999 | result = -ENOMEM; |
7012 | 7000 | ||
7013 | info = kmalloc(sizeof(struct platform_info), GFP_KERNEL); | 7001 | info = kzalloc(sizeof(struct platform_info), GFP_KERNEL); |
7014 | if (!info) | 7002 | if (!info) |
7015 | goto pcidev_init_dev_err; | 7003 | goto pcidev_init_dev_err; |
7016 | memset(info, 0, sizeof(struct platform_info)); | ||
7017 | 7004 | ||
7018 | hw_priv = &info->dev_info; | 7005 | hw_priv = &info->dev_info; |
7019 | hw_priv->pdev = pdev; | 7006 | hw_priv->pdev = pdev; |
@@ -7027,15 +7014,15 @@ static int __init pcidev_init(struct pci_dev *pdev, | |||
7027 | cnt = hw_init(hw); | 7014 | cnt = hw_init(hw); |
7028 | if (!cnt) { | 7015 | if (!cnt) { |
7029 | if (msg_enable & NETIF_MSG_PROBE) | 7016 | if (msg_enable & NETIF_MSG_PROBE) |
7030 | printk(KERN_ALERT "chip not detected\n"); | 7017 | pr_alert("chip not detected\n"); |
7031 | result = -ENODEV; | 7018 | result = -ENODEV; |
7032 | goto pcidev_init_alloc_err; | 7019 | goto pcidev_init_alloc_err; |
7033 | } | 7020 | } |
7034 | 7021 | ||
7035 | sprintf(banner, "%s\n", version); | 7022 | snprintf(banner, sizeof(banner), "%s", version); |
7036 | banner[13] = cnt + '0'; | 7023 | banner[13] = cnt + '0'; /* Replace x in "Micrel KSZ884x" */ |
7037 | ks_info(hw_priv, "%s", banner); | 7024 | dev_info(&hw_priv->pdev->dev, "%s\n", banner); |
7038 | ks_dbg(hw_priv, "Mem = %p; IRQ = %d\n", hw->io, pdev->irq); | 7025 | dev_dbg(&hw_priv->pdev->dev, "Mem = %p; IRQ = %d\n", hw->io, pdev->irq); |
7039 | 7026 | ||
7040 | /* Assume device is KSZ8841. */ | 7027 | /* Assume device is KSZ8841. */ |
7041 | hw->dev_count = 1; | 7028 | hw->dev_count = 1; |