diff options
Diffstat (limited to 'drivers/staging/gdm724x')
-rw-r--r-- | drivers/staging/gdm724x/gdm_lte.c | 2 | ||||
-rw-r--r-- | drivers/staging/gdm724x/gdm_tty.c | 5 | ||||
-rw-r--r-- | drivers/staging/gdm724x/gdm_usb.c | 40 | ||||
-rw-r--r-- | drivers/staging/gdm724x/netlink_k.c | 2 |
4 files changed, 26 insertions, 23 deletions
diff --git a/drivers/staging/gdm724x/gdm_lte.c b/drivers/staging/gdm724x/gdm_lte.c index c2268527422f..c657639f884b 100644 --- a/drivers/staging/gdm724x/gdm_lte.c +++ b/drivers/staging/gdm724x/gdm_lte.c @@ -447,6 +447,7 @@ static int gdm_lte_tx(struct sk_buff *skb, struct net_device *dev) */ if (nic_type & NIC_TYPE_F_VLAN) { struct vlan_ethhdr *vlan_eth = (struct vlan_ethhdr *)skb->data; + nic->vlan_id = ntohs(vlan_eth->h_vlan_TCI) & VLAN_VID_MASK; data_buf = skb->data + (VLAN_ETH_HLEN - ETH_HLEN); data_len = skb->len - (VLAN_ETH_HLEN - ETH_HLEN); @@ -505,6 +506,7 @@ static int gdm_lte_tx(struct sk_buff *skb, struct net_device *dev) static struct net_device_stats *gdm_lte_stats(struct net_device *dev) { struct nic *nic = netdev_priv(dev); + return &nic->stats; } diff --git a/drivers/staging/gdm724x/gdm_tty.c b/drivers/staging/gdm724x/gdm_tty.c index fe47cd3eb2ed..001348ccacf9 100644 --- a/drivers/staging/gdm724x/gdm_tty.c +++ b/drivers/staging/gdm724x/gdm_tty.c @@ -111,24 +111,28 @@ static int gdm_tty_install(struct tty_driver *driver, struct tty_struct *tty) static int gdm_tty_open(struct tty_struct *tty, struct file *filp) { struct gdm *gdm = tty->driver_data; + return tty_port_open(&gdm->port, tty, filp); } static void gdm_tty_cleanup(struct tty_struct *tty) { struct gdm *gdm = tty->driver_data; + tty_port_put(&gdm->port); } static void gdm_tty_hangup(struct tty_struct *tty) { struct gdm *gdm = tty->driver_data; + tty_port_hangup(&gdm->port); } static void gdm_tty_close(struct tty_struct *tty, struct file *filp) { struct gdm *gdm = tty->driver_data; + tty_port_close(&gdm->port, tty, filp); } @@ -139,6 +143,7 @@ static int gdm_tty_recv_complete(void *data, int complete) { struct gdm *gdm = tty_dev->gdm[index]; + if (!GDM_TTY_READY(gdm)) { if (complete == RECV_PACKET_PROCESS_COMPLETE) gdm_tty_recv(gdm, gdm_tty_recv_complete); diff --git a/drivers/staging/gdm724x/gdm_usb.c b/drivers/staging/gdm724x/gdm_usb.c index ee6e40facca7..483185bb4ecf 100644 --- a/drivers/staging/gdm724x/gdm_usb.c +++ b/drivers/staging/gdm724x/gdm_usb.c @@ -125,11 +125,11 @@ static struct usb_tx_sdu *alloc_tx_sdu_struct(void) { struct usb_tx_sdu *t_sdu; - t_sdu = kzalloc(sizeof(struct usb_tx_sdu), GFP_ATOMIC); + t_sdu = kzalloc(sizeof(struct usb_tx_sdu), GFP_KERNEL); if (!t_sdu) return NULL; - t_sdu->buf = kmalloc(SDU_BUF_SIZE, GFP_ATOMIC); + t_sdu->buf = kmalloc(SDU_BUF_SIZE, GFP_KERNEL); if (!t_sdu->buf) { kfree(t_sdu); return NULL; @@ -183,14 +183,14 @@ static struct usb_rx *alloc_rx_struct(void) struct usb_rx *r = NULL; int ret = 0; - r = kmalloc(sizeof(struct usb_rx), GFP_ATOMIC); + r = kmalloc(sizeof(struct usb_rx), GFP_KERNEL); if (!r) { ret = -ENOMEM; goto out; } - r->urb = usb_alloc_urb(0, GFP_ATOMIC); - r->buf = kmalloc(RX_BUF_SIZE, GFP_ATOMIC); + r->urb = usb_alloc_urb(0, GFP_KERNEL); + r->buf = kmalloc(RX_BUF_SIZE, GFP_KERNEL); if (!r->urb || !r->buf) { ret = -ENOMEM; goto out; @@ -264,28 +264,25 @@ static void release_usb(struct lte_udev *udev) unsigned long flags; spin_lock_irqsave(&tx->lock, flags); - list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->sdu_list, list) - { + list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->sdu_list, list) { list_del(&t_sdu->list); free_tx_sdu_struct(t_sdu); } - list_for_each_entry_safe(t, t_next, &tx->hci_list, list) - { + list_for_each_entry_safe(t, t_next, &tx->hci_list, list) { list_del(&t->list); free_tx_struct(t); } - list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->free_list, list) - { + list_for_each_entry_safe(t_sdu, t_sdu_next, &tx->free_list, list) { list_del(&t_sdu->list); free_tx_sdu_struct(t_sdu); } spin_unlock_irqrestore(&tx->lock, flags); spin_lock_irqsave(&rx->submit_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, rx_submit_list) - { + list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, + rx_submit_list) { spin_unlock_irqrestore(&rx->submit_lock, flags); usb_kill_urb(r->urb); spin_lock_irqsave(&rx->submit_lock, flags); @@ -293,16 +290,14 @@ static void release_usb(struct lte_udev *udev) spin_unlock_irqrestore(&rx->submit_lock, flags); spin_lock_irqsave(&rx->rx_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->free_list, free_list) - { + list_for_each_entry_safe(r, r_next, &rx->free_list, free_list) { list_del(&r->free_list); free_rx_struct(r); } spin_unlock_irqrestore(&rx->rx_lock, flags); spin_lock_irqsave(&rx->to_host_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->to_host_list, to_host_list) - { + list_for_each_entry_safe(r, r_next, &rx->to_host_list, to_host_list) { if (r->index == (void *)udev) { list_del(&r->to_host_list); free_rx_struct(r); @@ -366,6 +361,7 @@ static int init_usb(struct lte_udev *udev) INIT_DELAYED_WORK(&udev->work_rx, do_rx); return 0; fail: + release_usb(udev); return ret; } @@ -457,9 +453,8 @@ static void remove_rx_submit_list(struct usb_rx *r, struct rx_cxt *rx) struct usb_rx *r_remove, *r_remove_next; spin_lock_irqsave(&rx->submit_lock, flags); - list_for_each_entry_safe(r_remove, - r_remove_next, &rx->rx_submit_list, rx_submit_list) - { + list_for_each_entry_safe(r_remove, r_remove_next, + &rx->rx_submit_list, rx_submit_list) { if (r == r_remove) { list_del(&r->rx_submit_list); break; @@ -895,6 +890,7 @@ static void gdm_usb_disconnect(struct usb_interface *intf) struct lte_udev *udev; u16 idVendor, idProduct; struct usb_device *usbdev; + usbdev = interface_to_usbdev(intf); idVendor = __le16_to_cpu(usbdev->descriptor.idVendor); @@ -936,8 +932,8 @@ static int gdm_usb_suspend(struct usb_interface *intf, pm_message_t pm_msg) udev->usb_state = PM_SUSPEND; spin_lock_irqsave(&rx->submit_lock, flags); - list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, rx_submit_list) - { + list_for_each_entry_safe(r, r_next, &rx->rx_submit_list, + rx_submit_list) { spin_unlock_irqrestore(&rx->submit_lock, flags); usb_kill_urb(r->urb); spin_lock_irqsave(&rx->submit_lock, flags); diff --git a/drivers/staging/gdm724x/netlink_k.c b/drivers/staging/gdm724x/netlink_k.c index 5ddd36948a2f..59a18304ef4a 100644 --- a/drivers/staging/gdm724x/netlink_k.c +++ b/drivers/staging/gdm724x/netlink_k.c @@ -54,7 +54,7 @@ static void netlink_rcv_cb(struct sk_buff *skb) return; } - if (skb->len < NLMSG_SPACE(0)) { + if (skb->len < NLMSG_HDRLEN) { pr_err("nl cb - invalid skb length\n"); return; } |