diff options
Diffstat (limited to 'drivers/net/usb/rmnet_usb_ctrl.h')
-rw-r--r-- | drivers/net/usb/rmnet_usb_ctrl.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/drivers/net/usb/rmnet_usb_ctrl.h b/drivers/net/usb/rmnet_usb_ctrl.h new file mode 100644 index 00000000000..f6e58761512 --- /dev/null +++ b/drivers/net/usb/rmnet_usb_ctrl.h @@ -0,0 +1,82 @@ +/* Copyright (c) 2011, Code Aurora Forum. 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 + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __RMNET_USB_CTRL_H +#define __RMNET_USB_CTRL_H + +#include <linux/mutex.h> +#include <linux/usb.h> +#include <linux/cdev.h> +#include <linux/usb/ch9.h> +#include <linux/usb/cdc.h> + +#define CTRL_DEV_MAX_LEN 10 + +struct rmnet_ctrl_dev { + + /*for debugging purpose*/ + char name[CTRL_DEV_MAX_LEN]; + + struct cdev cdev; + struct device *devicep; + + struct usb_interface *intf; + unsigned int int_pipe; + struct urb *rcvurb; + struct urb *inturb; + struct usb_anchor tx_submitted; + void *rcvbuf; + void *intbuf; + struct usb_ctrlrequest *in_ctlreq; + + 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; + + unsigned is_opened; + + /*input control lines (DSR, CTS, CD, RI)*/ + unsigned int cbits_tolocal; + + /*output control lines (DTR, RTS)*/ + unsigned int cbits_tomdm; + + /* + * track first resp available from mdm when it boots up + * to avoid bigger timeout value used by qmuxd + */ + bool resp_available; + + unsigned int mdm_wait_timeout; + + /*counters*/ + unsigned int snd_encap_cmd_cnt; + unsigned int get_encap_resp_cnt; + unsigned int resp_avail_cnt; + unsigned int set_ctrl_line_state_cnt; + unsigned int tx_ctrl_err_cnt; +}; + +extern struct rmnet_ctrl_dev *ctrl_dev[]; + +extern int rmnet_usb_ctrl_start(struct rmnet_ctrl_dev *); +extern int rmnet_usb_ctrl_stop_rx(struct rmnet_ctrl_dev *); +extern int rmnet_usb_ctrl_init(void); +extern void rmnet_usb_ctrl_exit(void); +extern int rmnet_usb_ctrl_probe(struct usb_interface *intf, + struct usb_host_endpoint *status, + struct rmnet_ctrl_dev *dev); +extern void rmnet_usb_ctrl_disconnect(struct rmnet_ctrl_dev *); + +#endif /* __RMNET_USB_H*/ |