diff options
Diffstat (limited to 'drivers/net/usb/rmnet_usb.h')
| -rw-r--r-- | drivers/net/usb/rmnet_usb.h | 72 |
1 files changed, 43 insertions, 29 deletions
diff --git a/drivers/net/usb/rmnet_usb.h b/drivers/net/usb/rmnet_usb.h index 2e7db04351f..ccf59012440 100644 --- a/drivers/net/usb/rmnet_usb.h +++ b/drivers/net/usb/rmnet_usb.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -53,18 +53,16 @@ struct mux_hdr { __u16 pkt_len_w_padding; } __packed; -struct rmnet_ctrl_dev { +struct rmnet_ctrl_udev { - /*for debugging purpose*/ - char name[CTRL_DEV_MAX_LEN]; - - struct cdev cdev; - struct device *devicep; - unsigned ch_id; - - /*to identify the usb device*/ - unsigned id; + /* + * In case of non-mux ctrl channel there is a one to one mapping + * between rmnet_ctrl_dev and rmnet_ctrl_udev. Save the claimed + * device id. + */ + unsigned int ctrldev_id; + unsigned int rdev_num; struct usb_interface *intf; unsigned int int_pipe; struct urb *rcvurb; @@ -75,15 +73,38 @@ struct rmnet_ctrl_dev { void *intbuf; struct usb_ctrlrequest *in_ctlreq; + struct workqueue_struct *wq; + struct work_struct get_encap_work; + + unsigned long status; + + /*counters*/ + unsigned int snd_encap_cmd_cnt; + unsigned int get_encap_resp_cnt; + unsigned int resp_avail_cnt; + unsigned int get_encap_failure_cnt; + unsigned int set_ctrl_line_state_cnt; + unsigned int tx_ctrl_err_cnt; + unsigned int zlp_cnt; + unsigned int invalid_mux_id_cnt; +}; + +struct rmnet_ctrl_dev { + + /*for debugging purpose*/ + char name[CTRL_DEV_MAX_LEN]; + + struct cdev cdev; + struct device *devicep; + unsigned ch_id; + + struct rmnet_ctrl_udev *cudev; + spinlock_t rx_lock; struct mutex dev_lock; struct list_head rx_list; wait_queue_head_t read_wait_queue; wait_queue_head_t open_wait_queue; - - struct workqueue_struct *wq; - struct work_struct get_encap_work; - unsigned long status; bool claimed; @@ -94,27 +115,20 @@ struct rmnet_ctrl_dev { unsigned int cbits_tolocal; /*output control lines (DTR, RTS)*/ unsigned int cbits_tomdm; - - /*counters*/ - unsigned int snd_encap_cmd_cnt; - unsigned int get_encap_resp_cnt; - unsigned int resp_avail_cnt; - unsigned int get_encap_failure_cnt; - unsigned int set_ctrl_line_state_cnt; - unsigned int tx_ctrl_err_cnt; - unsigned int zlp_cnt; }; extern struct workqueue_struct *usbnet_wq; -extern int rmnet_usb_ctrl_start_rx(struct rmnet_ctrl_dev *); -extern int rmnet_usb_ctrl_suspend(struct rmnet_ctrl_dev *dev); -extern int rmnet_usb_ctrl_init(int num_devs, int insts_per_dev); -extern void rmnet_usb_ctrl_exit(int num_devs, int insts_per_dev); +extern int rmnet_usb_ctrl_start_rx(struct rmnet_ctrl_udev *); +extern int rmnet_usb_ctrl_suspend(struct rmnet_ctrl_udev *dev); +extern int rmnet_usb_ctrl_init(int num_devs, int insts_per_dev, + unsigned long mux_info); +extern void rmnet_usb_ctrl_exit(int num_devs, int insts_per_dev, + unsigned long mux_info); extern int rmnet_usb_ctrl_probe(struct usb_interface *intf, struct usb_host_endpoint *int_in, unsigned long rmnet_devnum, unsigned long *data); -extern void rmnet_usb_ctrl_disconnect(struct rmnet_ctrl_dev *); +extern void rmnet_usb_ctrl_disconnect(struct rmnet_ctrl_udev *); #endif /* __RMNET_USB_H*/ |
