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 45struct 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 56struct 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 64struct 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 76struct 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 84struct 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 94struct 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