1 /* 2 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved. 3 * 4 * This software is licensed under the terms of the GNU General Public 5 * License version 2, as published by the Free Software Foundation, and 6 * may be copied, distributed, and modified under those terms. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14 #ifndef _GDM_USB_H_ 15 #define _GDM_USB_H_ 16 17 #include <linux/types.h> 18 #include <linux/usb.h> 19 #include <linux/list.h> 20 #include <linux/time.h> 21 22 #include "gdm_endian.h" 23 #include "hci_packet.h" 24 25 #define PM_NORMAL 0 26 #define PM_SUSPEND 1 27 #define AUTO_SUSPEND_TIMER 5000 /* ms */ 28 29 #define RX_BUF_SIZE (1024 * 32) 30 #define TX_BUF_SIZE (1024 * 32) 31 #define SDU_BUF_SIZE 2048 32 #define MAX_SDU_SIZE (1024 * 30) 33 #define MAX_PACKET_IN_MULTI_SDU 256 34 35 #define VID_GCT 0x1076 36 #define PID_GDM7240 0x8000 37 #define PID_GDM7243 0x9000 38 39 #define NETWORK_INTERFACE 1 40 #define USB_SC_SCSI 0x06 41 #define USB_PR_BULK 0x50 42 43 #define MAX_NUM_SDU_BUF 64 44 45 struct usb_tx { 46 struct list_head list; 47 struct urb *urb; 48 u8 *buf; 49 u32 len; 50 void (*callback)(void *cb_data); 51 void *cb_data; 52 struct tx_cxt *tx; 53 u8 is_sdu; 54 }; 55 56 struct usb_tx_sdu { 57 struct list_head list; 58 u8 *buf; 59 u32 len; 60 void (*callback)(void *cb_data); 61 void *cb_data; 62 }; 63 64 struct usb_rx { 65 struct list_head to_host_list; 66 struct list_head free_list; 67 struct list_head rx_submit_list; 68 struct rx_cxt *rx; 69 struct urb *urb; 70 u8 *buf; 71 int (*callback)(void *cb_data, void *data, int len, int context); 72 void *cb_data; 73 void *index; 74 }; 75 76 struct tx_cxt { 77 struct list_head sdu_list; 78 struct list_head hci_list; 79 struct list_head free_list; 80 u32 avail_count; 81 spinlock_t lock; 82 }; 83 84 struct rx_cxt { 85 struct list_head to_host_list; 86 struct list_head rx_submit_list; 87 struct list_head free_list; 88 u32 avail_count; 89 spinlock_t to_host_lock; 90 spinlock_t rx_lock; 91 spinlock_t submit_lock; 92 }; 93 94 struct lte_udev { 95 struct usb_device *usbdev; 96 struct gdm_endian gdm_ed; 97 struct tx_cxt tx; 98 struct rx_cxt rx; 99 struct delayed_work work_tx; 100 struct delayed_work work_rx; 101 u8 send_complete; 102 u8 tx_stop; 103 struct usb_interface *intf; 104 int (*rx_cb)(void *cb_data, void *data, int len, int context); 105 int usb_state; 106 u8 request_mac_addr; 107 }; 108 109 #endif /* _GDM_USB_H_ */ 110