1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved. */
3
4#ifndef _GDM_USB_H_
5#define _GDM_USB_H_
6
7#include <linux/types.h>
8#include <linux/usb.h>
9#include <linux/list.h>
10#include <linux/time.h>
11
12#include "gdm_endian.h"
13#include "hci_packet.h"
14
15#define PM_NORMAL 0
16#define PM_SUSPEND 1
17#define AUTO_SUSPEND_TIMER 5000 /* ms */
18
19#define RX_BUF_SIZE (1024 * 32)
20#define TX_BUF_SIZE (1024 * 32)
21#define SDU_BUF_SIZE 2048
22#define MAX_SDU_SIZE (1024 * 30)
23#define MAX_PACKET_IN_MULTI_SDU 256
24
25#define VID_GCT 0x1076
26#define PID_GDM7240 0x8000
27#define PID_GDM7243 0x9000
28
29#define NETWORK_INTERFACE 1
30#define USB_SC_SCSI 0x06
31#define USB_PR_BULK 0x50
32
33#define MAX_NUM_SDU_BUF 64
34
35struct usb_tx {
36 struct list_head list;
37 struct urb *urb;
38 u8 *buf;
39 u32 len;
40 void (*callback)(void *cb_data);
41 void *cb_data;
42 struct tx_cxt *tx;
43 u8 is_sdu;
44};
45
46struct usb_tx_sdu {
47 struct list_head list;
48 u8 *buf;
49 u32 len;
50 void (*callback)(void *cb_data);
51 void *cb_data;
52};
53
54struct usb_rx {
55 struct list_head to_host_list;
56 struct list_head free_list;
57 struct list_head rx_submit_list;
58 struct rx_cxt *rx;
59 struct urb *urb;
60 u8 *buf;
61 int (*callback)(void *cb_data, void *data, int len, int context);
62 void *cb_data;
63 void *index;
64};
65
66struct tx_cxt {
67 struct list_head sdu_list;
68 struct list_head hci_list;
69 struct list_head free_list;
70 u32 avail_count;
71 spinlock_t lock;
72};
73
74struct rx_cxt {
75 struct list_head to_host_list;
76 struct list_head rx_submit_list;
77 struct list_head free_list;
78 u32 avail_count;
79 spinlock_t to_host_lock;
80 spinlock_t rx_lock;
81 spinlock_t submit_lock;
82};
83
84struct lte_udev {
85 struct usb_device *usbdev;
86 struct tx_cxt tx;
87 struct rx_cxt rx;
88 struct delayed_work work_tx;
89 struct delayed_work work_rx;
90 u8 gdm_ed;
91 u8 send_complete;
92 u8 tx_stop;
93 struct usb_interface *intf;
94 int (*rx_cb)(void *cb_data, void *data, int len, int context);
95 int usb_state;
96 u8 request_mac_addr;
97};
98
99#endif /* _GDM_USB_H_ */
100

source code of linux/drivers/staging/gdm724x/gdm_usb.h