diff options
Diffstat (limited to 'drivers/staging/gdm724x')
-rw-r--r-- | drivers/staging/gdm724x/gdm_lte.c | 8 | ||||
-rw-r--r-- | drivers/staging/gdm724x/gdm_mux.c | 20 | ||||
-rw-r--r-- | drivers/staging/gdm724x/gdm_usb.c | 34 |
3 files changed, 16 insertions, 46 deletions
diff --git a/drivers/staging/gdm724x/gdm_lte.c b/drivers/staging/gdm724x/gdm_lte.c index 17d148f6e..bb552193e 100644 --- a/drivers/staging/gdm724x/gdm_lte.c +++ b/drivers/staging/gdm724x/gdm_lte.c @@ -382,7 +382,7 @@ static s32 gdm_lte_tx_nic_type(struct net_device *dev, struct sk_buff *skb) /* Check DHCPv4 */ if (ip->protocol == IPPROTO_UDP) { struct udphdr *udp = - (network_data + sizeof(struct iphdr)); + network_data + sizeof(struct iphdr); if (ntohs(udp->dest) == 67 || ntohs(udp->dest) == 68) nic_type |= NIC_TYPE_F_DHCP; } @@ -393,12 +393,12 @@ static s32 gdm_lte_tx_nic_type(struct net_device *dev, struct sk_buff *skb) if (ipv6->nexthdr == IPPROTO_ICMPV6) /* Check NDP request */ { struct icmp6hdr *icmp6 = - (network_data + sizeof(struct ipv6hdr)); + network_data + sizeof(struct ipv6hdr); if (icmp6->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION) nic_type |= NIC_TYPE_ICMPV6; } else if (ipv6->nexthdr == IPPROTO_UDP) /* Check DHCPv6 */ { struct udphdr *udp = - (network_data + sizeof(struct ipv6hdr)); + network_data + sizeof(struct ipv6hdr); if (ntohs(udp->dest) == 546 || ntohs(udp->dest) == 547) nic_type |= NIC_TYPE_F_DHCP; } @@ -855,7 +855,7 @@ static void form_mac_address(u8 *dev_addr, u8 *nic_src, u8 *nic_dest, /* Create random nic src and copy the first * 3 bytes to be the same as dev_addr */ - random_ether_addr(nic_src); + eth_random_addr(nic_src); memcpy(nic_src, dev_addr, 3); /* Copy the nic_dest from dev_addr*/ diff --git a/drivers/staging/gdm724x/gdm_mux.c b/drivers/staging/gdm724x/gdm_mux.c index 445f83615..6bedd6683 100644 --- a/drivers/staging/gdm724x/gdm_mux.c +++ b/drivers/staging/gdm724x/gdm_mux.c @@ -26,8 +26,6 @@ #include "gdm_mux.h" -static struct workqueue_struct *mux_rx_wq; - static u16 packet_type[TTY_MAX_COUNT] = {0xF011, 0xF010}; #define USB_DEVICE_CDC_DATA(vid, pid) \ @@ -275,7 +273,7 @@ static void gdm_mux_rcv_complete(struct urb *urb) r->len = r->urb->actual_length; spin_lock_irqsave(&rx->to_host_lock, flags); list_add_tail(&r->to_host_list, &rx->to_host_list); - queue_work(mux_rx_wq, &mux_dev->work_rx.work); + schedule_work(&mux_dev->work_rx.work); spin_unlock_irqrestore(&rx->to_host_lock, flags); } } @@ -435,7 +433,7 @@ static int gdm_mux_send_control(void *priv_dev, int request, int value, if (ret < 0) pr_err("usb_control_msg error: %d\n", ret); - return ret < 0 ? ret : 0; + return min(ret, 0); } static void release_usb(struct mux_dev *mux_dev) @@ -602,6 +600,8 @@ static int gdm_mux_suspend(struct usb_interface *intf, pm_message_t pm_msg) mux_dev = tty_dev->priv_dev; rx = &mux_dev->rx; + cancel_work_sync(&mux_dev->work_rx.work); + if (mux_dev->usb_state != PM_NORMAL) { dev_err(intf->usb_dev, "usb suspend - invalid state\n"); return -1; @@ -656,13 +656,6 @@ static struct usb_driver gdm_mux_driver = { static int __init gdm_usb_mux_init(void) { - - mux_rx_wq = create_workqueue("mux_rx_wq"); - if (!mux_rx_wq) { - pr_err("work queue create fail\n"); - return -1; - } - register_lte_tty_driver(); return usb_register(&gdm_mux_driver); @@ -672,11 +665,6 @@ static void __exit gdm_usb_mux_exit(void) { unregister_lte_tty_driver(); - if (mux_rx_wq) { - flush_workqueue(mux_rx_wq); - destroy_workqueue(mux_rx_wq); - } - usb_deregister(&gdm_mux_driver); } diff --git a/drivers/staging/gdm724x/gdm_usb.c b/drivers/staging/gdm724x/gdm_usb.c index 92ea1a16a..9db9b903f 100644 --- a/drivers/staging/gdm724x/gdm_usb.c +++ b/drivers/staging/gdm724x/gdm_usb.c @@ -55,9 +55,6 @@ static const struct usb_device_id id_table[] = { MODULE_DEVICE_TABLE(usb, id_table); -static struct workqueue_struct *usb_tx_wq; -static struct workqueue_struct *usb_rx_wq; - static void do_tx(struct work_struct *work); static void do_rx(struct work_struct *work); @@ -476,7 +473,7 @@ static void gdm_usb_rcv_complete(struct urb *urb) if (!urb->status && r->callback) { spin_lock_irqsave(&rx->to_host_lock, flags); list_add_tail(&r->to_host_list, &rx->to_host_list); - queue_work(usb_rx_wq, &udev->work_rx.work); + schedule_work(&udev->work_rx.work); spin_unlock_irqrestore(&rx->to_host_lock, flags); } else { if (urb->status && udev->usb_state == PM_NORMAL) @@ -568,7 +565,7 @@ static void gdm_usb_send_complete(struct urb *urb) spin_lock_irqsave(&tx->lock, flags); udev->send_complete = 1; - queue_work(usb_tx_wq, &udev->work_tx.work); + schedule_work(&udev->work_tx.work); spin_unlock_irqrestore(&tx->lock, flags); } @@ -759,7 +756,7 @@ static int gdm_usb_sdu_send(void *priv_dev, void *data, int len, spin_lock_irqsave(&tx->lock, flags); list_add_tail(&t_sdu->list, &tx->sdu_list); - queue_work(usb_tx_wq, &udev->work_tx.work); + schedule_work(&udev->work_tx.work); spin_unlock_irqrestore(&tx->lock, flags); if (no_spc) @@ -796,7 +793,7 @@ static int gdm_usb_hci_send(void *priv_dev, void *data, int len, spin_lock_irqsave(&tx->lock, flags); list_add_tail(&t->list, &tx->hci_list); - queue_work(usb_tx_wq, &udev->work_tx.work); + schedule_work(&udev->work_tx.work); spin_unlock_irqrestore(&tx->lock, flags); return 0; @@ -944,6 +941,9 @@ static int gdm_usb_suspend(struct usb_interface *intf, pm_message_t pm_msg) } spin_unlock_irqrestore(&rx->submit_lock, flags); + cancel_work_sync(&udev->work_tx.work); + cancel_work_sync(&udev->work_rx.work); + return 0; } @@ -981,7 +981,7 @@ static int gdm_usb_resume(struct usb_interface *intf) tx = &udev->tx; spin_lock_irqsave(&tx->lock, flags); - queue_work(usb_tx_wq, &udev->work_tx.work); + schedule_work(&udev->work_tx.work); spin_unlock_irqrestore(&tx->lock, flags); return 0; @@ -1005,14 +1005,6 @@ static int __init gdm_usb_lte_init(void) return -1; } - usb_tx_wq = create_workqueue("usb_tx_wq"); - if (!usb_tx_wq) - return -1; - - usb_rx_wq = create_workqueue("usb_rx_wq"); - if (!usb_rx_wq) - return -1; - return usb_register(&gdm_usb_lte_driver); } @@ -1021,16 +1013,6 @@ static void __exit gdm_usb_lte_exit(void) gdm_lte_event_exit(); usb_deregister(&gdm_usb_lte_driver); - - if (usb_tx_wq) { - flush_workqueue(usb_tx_wq); - destroy_workqueue(usb_tx_wq); - } - - if (usb_rx_wq) { - flush_workqueue(usb_rx_wq); - destroy_workqueue(usb_rx_wq); - } } module_init(gdm_usb_lte_init); |