aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/usb/rmnet_usb.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/usb/rmnet_usb.h')
-rw-r--r--drivers/net/usb/rmnet_usb.h72
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*/