Loading drivers/net/wan/ixp4xx_hss.c +43 −23 Original line number Original line Diff line number Diff line Loading @@ -510,10 +510,12 @@ static int hss_load_firmware(struct port *port) if (port->initialized) if (port->initialized) return 0; return 0; if (!npe_running(port->npe) && if (!npe_running(port->npe)) { (err = npe_load_firmware(port->npe, npe_name(port->npe), err = npe_load_firmware(port->npe, npe_name(port->npe), port->dev))) port->dev); if (err) return err; return err; } /* HDLC mode configuration */ /* HDLC mode configuration */ memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg)); Loading Loading @@ -579,7 +581,8 @@ static inline int queue_get_desc(unsigned int queue, struct port *port, u32 phys, tab_phys, n_desc; u32 phys, tab_phys, n_desc; struct desc *tab; struct desc *tab; if (!(phys = qmgr_get_entry(queue))) phys = qmgr_get_entry(queue); if (!phys) return -1; return -1; BUG_ON(phys & 0x1F); BUG_ON(phys & 0x1F); Loading Loading @@ -664,7 +667,8 @@ static int hss_hdlc_poll(struct napi_struct *napi, int budget) u32 phys; u32 phys; #endif #endif if ((n = queue_get_desc(rxq, port, 0)) < 0) { n = queue_get_desc(rxq, port, 0); if (n < 0) { #if DEBUG_RX #if DEBUG_RX printk(KERN_DEBUG "%s: hss_hdlc_poll" printk(KERN_DEBUG "%s: hss_hdlc_poll" " napi_complete\n", dev->name); " napi_complete\n", dev->name); Loading Loading @@ -699,7 +703,8 @@ static int hss_hdlc_poll(struct napi_struct *napi, int budget) switch (desc->status) { switch (desc->status) { case 0: case 0: #ifdef __ARMEB__ #ifdef __ARMEB__ if ((skb = netdev_alloc_skb(dev, RX_SIZE)) != NULL) { skb = netdev_alloc_skb(dev, RX_SIZE); if (skb) { phys = dma_map_single(&dev->dev, skb->data, phys = dma_map_single(&dev->dev, skb->data, RX_SIZE, RX_SIZE, DMA_FROM_DEVICE); DMA_FROM_DEVICE); Loading Loading @@ -847,7 +852,8 @@ static int hss_hdlc_xmit(struct sk_buff *skb, struct net_device *dev) #else #else offset = (int)skb->data & 3; /* keep 32-bit alignment */ offset = (int)skb->data & 3; /* keep 32-bit alignment */ bytes = ALIGN(offset + len, 4); bytes = ALIGN(offset + len, 4); if (!(mem = kmalloc(bytes, GFP_ATOMIC))) { mem = kmalloc(bytes, GFP_ATOMIC); if (!mem) { dev_kfree_skb(skb); dev_kfree_skb(skb); dev->stats.tx_dropped++; dev->stats.tx_dropped++; return NETDEV_TX_OK; return NETDEV_TX_OK; Loading Loading @@ -966,8 +972,9 @@ static int init_hdlc_queues(struct port *port) return -ENOMEM; return -ENOMEM; } } if (!(port->desc_tab = dma_pool_alloc(dma_pool, GFP_KERNEL, port->desc_tab = dma_pool_alloc(dma_pool, GFP_KERNEL, &port->desc_tab_phys))) &port->desc_tab_phys); if (!port->desc_tab) return -ENOMEM; return -ENOMEM; memset(port->desc_tab, 0, POOL_ALLOC_SIZE); memset(port->desc_tab, 0, POOL_ALLOC_SIZE); memset(port->rx_buff_tab, 0, sizeof(port->rx_buff_tab)); /* tables */ memset(port->rx_buff_tab, 0, sizeof(port->rx_buff_tab)); /* tables */ Loading @@ -979,11 +986,13 @@ static int init_hdlc_queues(struct port *port) buffer_t *buff; buffer_t *buff; void *data; void *data; #ifdef __ARMEB__ #ifdef __ARMEB__ if (!(buff = netdev_alloc_skb(port->netdev, RX_SIZE))) buff = netdev_alloc_skb(port->netdev, RX_SIZE); if (!buff) return -ENOMEM; return -ENOMEM; data = buff->data; data = buff->data; #else #else if (!(buff = kmalloc(RX_SIZE, GFP_KERNEL))) buff = kmalloc(RX_SIZE, GFP_KERNEL); if (!buff) return -ENOMEM; return -ENOMEM; data = buff; data = buff; #endif #endif Loading Loading @@ -1041,23 +1050,29 @@ static int hss_hdlc_open(struct net_device *dev) unsigned long flags; unsigned long flags; int i, err = 0; int i, err = 0; if ((err = hdlc_open(dev))) err = hdlc_open(dev); if (err) return err; return err; if ((err = hss_load_firmware(port))) err = hss_load_firmware(port); if (err) goto err_hdlc_close; goto err_hdlc_close; if ((err = request_hdlc_queues(port))) err = request_hdlc_queues(port); if (err) goto err_hdlc_close; goto err_hdlc_close; if ((err = init_hdlc_queues(port))) err = init_hdlc_queues(port); if (err) goto err_destroy_queues; goto err_destroy_queues; spin_lock_irqsave(&npe_lock, flags); spin_lock_irqsave(&npe_lock, flags); if (port->plat->open) if (port->plat->open) { if ((err = port->plat->open(port->id, dev, err = port->plat->open(port->id, dev, hss_hdlc_set_carrier); hss_hdlc_set_carrier))) if (err) goto err_unlock; goto err_unlock; } spin_unlock_irqrestore(&npe_lock, flags); spin_unlock_irqrestore(&npe_lock, flags); /* Populate queues with buffers, no failure after this point */ /* Populate queues with buffers, no failure after this point */ Loading Loading @@ -1328,15 +1343,19 @@ static int hss_init_one(struct platform_device *pdev) hdlc_device *hdlc; hdlc_device *hdlc; int err; int err; if ((port = kzalloc(sizeof(*port), GFP_KERNEL)) == NULL) port = kzalloc(sizeof(*port), GFP_KERNEL); if (!port) return -ENOMEM; return -ENOMEM; if ((port->npe = npe_request(0)) == NULL) { port->npe = npe_request(0); if (!port->npe) { err = -ENODEV; err = -ENODEV; goto err_free; goto err_free; } } if ((port->netdev = dev = alloc_hdlcdev(port)) == NULL) { dev = alloc_hdlcdev(port); port->netdev = alloc_hdlcdev(port); if (!port->netdev) { err = -ENOMEM; err = -ENOMEM; goto err_plat; goto err_plat; } } Loading @@ -1355,7 +1374,8 @@ static int hss_init_one(struct platform_device *pdev) port->plat = pdev->dev.platform_data; port->plat = pdev->dev.platform_data; netif_napi_add(dev, &port->napi, hss_hdlc_poll, NAPI_WEIGHT); netif_napi_add(dev, &port->napi, hss_hdlc_poll, NAPI_WEIGHT); if ((err = register_hdlc_device(dev))) err = register_hdlc_device(dev); if (err) goto err_free_netdev; goto err_free_netdev; platform_set_drvdata(pdev, port); platform_set_drvdata(pdev, port); Loading Loading
drivers/net/wan/ixp4xx_hss.c +43 −23 Original line number Original line Diff line number Diff line Loading @@ -510,10 +510,12 @@ static int hss_load_firmware(struct port *port) if (port->initialized) if (port->initialized) return 0; return 0; if (!npe_running(port->npe) && if (!npe_running(port->npe)) { (err = npe_load_firmware(port->npe, npe_name(port->npe), err = npe_load_firmware(port->npe, npe_name(port->npe), port->dev))) port->dev); if (err) return err; return err; } /* HDLC mode configuration */ /* HDLC mode configuration */ memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg)); Loading Loading @@ -579,7 +581,8 @@ static inline int queue_get_desc(unsigned int queue, struct port *port, u32 phys, tab_phys, n_desc; u32 phys, tab_phys, n_desc; struct desc *tab; struct desc *tab; if (!(phys = qmgr_get_entry(queue))) phys = qmgr_get_entry(queue); if (!phys) return -1; return -1; BUG_ON(phys & 0x1F); BUG_ON(phys & 0x1F); Loading Loading @@ -664,7 +667,8 @@ static int hss_hdlc_poll(struct napi_struct *napi, int budget) u32 phys; u32 phys; #endif #endif if ((n = queue_get_desc(rxq, port, 0)) < 0) { n = queue_get_desc(rxq, port, 0); if (n < 0) { #if DEBUG_RX #if DEBUG_RX printk(KERN_DEBUG "%s: hss_hdlc_poll" printk(KERN_DEBUG "%s: hss_hdlc_poll" " napi_complete\n", dev->name); " napi_complete\n", dev->name); Loading Loading @@ -699,7 +703,8 @@ static int hss_hdlc_poll(struct napi_struct *napi, int budget) switch (desc->status) { switch (desc->status) { case 0: case 0: #ifdef __ARMEB__ #ifdef __ARMEB__ if ((skb = netdev_alloc_skb(dev, RX_SIZE)) != NULL) { skb = netdev_alloc_skb(dev, RX_SIZE); if (skb) { phys = dma_map_single(&dev->dev, skb->data, phys = dma_map_single(&dev->dev, skb->data, RX_SIZE, RX_SIZE, DMA_FROM_DEVICE); DMA_FROM_DEVICE); Loading Loading @@ -847,7 +852,8 @@ static int hss_hdlc_xmit(struct sk_buff *skb, struct net_device *dev) #else #else offset = (int)skb->data & 3; /* keep 32-bit alignment */ offset = (int)skb->data & 3; /* keep 32-bit alignment */ bytes = ALIGN(offset + len, 4); bytes = ALIGN(offset + len, 4); if (!(mem = kmalloc(bytes, GFP_ATOMIC))) { mem = kmalloc(bytes, GFP_ATOMIC); if (!mem) { dev_kfree_skb(skb); dev_kfree_skb(skb); dev->stats.tx_dropped++; dev->stats.tx_dropped++; return NETDEV_TX_OK; return NETDEV_TX_OK; Loading Loading @@ -966,8 +972,9 @@ static int init_hdlc_queues(struct port *port) return -ENOMEM; return -ENOMEM; } } if (!(port->desc_tab = dma_pool_alloc(dma_pool, GFP_KERNEL, port->desc_tab = dma_pool_alloc(dma_pool, GFP_KERNEL, &port->desc_tab_phys))) &port->desc_tab_phys); if (!port->desc_tab) return -ENOMEM; return -ENOMEM; memset(port->desc_tab, 0, POOL_ALLOC_SIZE); memset(port->desc_tab, 0, POOL_ALLOC_SIZE); memset(port->rx_buff_tab, 0, sizeof(port->rx_buff_tab)); /* tables */ memset(port->rx_buff_tab, 0, sizeof(port->rx_buff_tab)); /* tables */ Loading @@ -979,11 +986,13 @@ static int init_hdlc_queues(struct port *port) buffer_t *buff; buffer_t *buff; void *data; void *data; #ifdef __ARMEB__ #ifdef __ARMEB__ if (!(buff = netdev_alloc_skb(port->netdev, RX_SIZE))) buff = netdev_alloc_skb(port->netdev, RX_SIZE); if (!buff) return -ENOMEM; return -ENOMEM; data = buff->data; data = buff->data; #else #else if (!(buff = kmalloc(RX_SIZE, GFP_KERNEL))) buff = kmalloc(RX_SIZE, GFP_KERNEL); if (!buff) return -ENOMEM; return -ENOMEM; data = buff; data = buff; #endif #endif Loading Loading @@ -1041,23 +1050,29 @@ static int hss_hdlc_open(struct net_device *dev) unsigned long flags; unsigned long flags; int i, err = 0; int i, err = 0; if ((err = hdlc_open(dev))) err = hdlc_open(dev); if (err) return err; return err; if ((err = hss_load_firmware(port))) err = hss_load_firmware(port); if (err) goto err_hdlc_close; goto err_hdlc_close; if ((err = request_hdlc_queues(port))) err = request_hdlc_queues(port); if (err) goto err_hdlc_close; goto err_hdlc_close; if ((err = init_hdlc_queues(port))) err = init_hdlc_queues(port); if (err) goto err_destroy_queues; goto err_destroy_queues; spin_lock_irqsave(&npe_lock, flags); spin_lock_irqsave(&npe_lock, flags); if (port->plat->open) if (port->plat->open) { if ((err = port->plat->open(port->id, dev, err = port->plat->open(port->id, dev, hss_hdlc_set_carrier); hss_hdlc_set_carrier))) if (err) goto err_unlock; goto err_unlock; } spin_unlock_irqrestore(&npe_lock, flags); spin_unlock_irqrestore(&npe_lock, flags); /* Populate queues with buffers, no failure after this point */ /* Populate queues with buffers, no failure after this point */ Loading Loading @@ -1328,15 +1343,19 @@ static int hss_init_one(struct platform_device *pdev) hdlc_device *hdlc; hdlc_device *hdlc; int err; int err; if ((port = kzalloc(sizeof(*port), GFP_KERNEL)) == NULL) port = kzalloc(sizeof(*port), GFP_KERNEL); if (!port) return -ENOMEM; return -ENOMEM; if ((port->npe = npe_request(0)) == NULL) { port->npe = npe_request(0); if (!port->npe) { err = -ENODEV; err = -ENODEV; goto err_free; goto err_free; } } if ((port->netdev = dev = alloc_hdlcdev(port)) == NULL) { dev = alloc_hdlcdev(port); port->netdev = alloc_hdlcdev(port); if (!port->netdev) { err = -ENOMEM; err = -ENOMEM; goto err_plat; goto err_plat; } } Loading @@ -1355,7 +1374,8 @@ static int hss_init_one(struct platform_device *pdev) port->plat = pdev->dev.platform_data; port->plat = pdev->dev.platform_data; netif_napi_add(dev, &port->napi, hss_hdlc_poll, NAPI_WEIGHT); netif_napi_add(dev, &port->napi, hss_hdlc_poll, NAPI_WEIGHT); if ((err = register_hdlc_device(dev))) err = register_hdlc_device(dev); if (err) goto err_free_netdev; goto err_free_netdev; platform_set_drvdata(pdev, port); platform_set_drvdata(pdev, port); Loading