0001
0002
0003
0004 #ifndef _GDM_USB_H_
0005 #define _GDM_USB_H_
0006
0007 #include <linux/types.h>
0008 #include <linux/usb.h>
0009 #include <linux/list.h>
0010 #include <linux/time.h>
0011
0012 #include "gdm_endian.h"
0013 #include "hci_packet.h"
0014
0015 #define PM_NORMAL 0
0016 #define PM_SUSPEND 1
0017 #define AUTO_SUSPEND_TIMER 5000
0018
0019 #define RX_BUF_SIZE (1024 * 32)
0020 #define TX_BUF_SIZE (1024 * 32)
0021 #define SDU_BUF_SIZE 2048
0022 #define MAX_SDU_SIZE (1024 * 30)
0023 #define MAX_PACKET_IN_MULTI_SDU 256
0024
0025 #define VID_GCT 0x1076
0026 #define PID_GDM7240 0x8000
0027 #define PID_GDM7243 0x9000
0028
0029 #define NETWORK_INTERFACE 1
0030 #define USB_SC_SCSI 0x06
0031 #define USB_PR_BULK 0x50
0032
0033 #define MAX_NUM_SDU_BUF 64
0034
0035 struct usb_tx {
0036 struct list_head list;
0037 struct urb *urb;
0038 u8 *buf;
0039 u32 len;
0040 void (*callback)(void *cb_data);
0041 void *cb_data;
0042 struct tx_cxt *tx;
0043 u8 is_sdu;
0044 };
0045
0046 struct usb_tx_sdu {
0047 struct list_head list;
0048 u8 *buf;
0049 u32 len;
0050 void (*callback)(void *cb_data);
0051 void *cb_data;
0052 };
0053
0054 struct usb_rx {
0055 struct list_head to_host_list;
0056 struct list_head free_list;
0057 struct list_head rx_submit_list;
0058 struct rx_cxt *rx;
0059 struct urb *urb;
0060 u8 *buf;
0061 int (*callback)(void *cb_data, void *data, int len, int context);
0062 void *cb_data;
0063 void *index;
0064 };
0065
0066 struct tx_cxt {
0067 struct list_head sdu_list;
0068 struct list_head hci_list;
0069 struct list_head free_list;
0070 u32 avail_count;
0071 spinlock_t lock;
0072 };
0073
0074 struct rx_cxt {
0075 struct list_head to_host_list;
0076 struct list_head rx_submit_list;
0077 struct list_head free_list;
0078 u32 avail_count;
0079 spinlock_t to_host_lock;
0080 spinlock_t rx_lock;
0081 spinlock_t submit_lock;
0082 };
0083
0084 struct lte_udev {
0085 struct usb_device *usbdev;
0086 struct tx_cxt tx;
0087 struct rx_cxt rx;
0088 struct delayed_work work_tx;
0089 struct delayed_work work_rx;
0090 u8 gdm_ed;
0091 u8 send_complete;
0092 u8 tx_stop;
0093 struct usb_interface *intf;
0094 int (*rx_cb)(void *cb_data, void *data, int len, int context);
0095 int usb_state;
0096 u8 request_mac_addr;
0097 };
0098
0099 #endif