blob: 8e58a25e71438f894035e093d2492fecb9e1f565 [file] [log] [blame]
Sage Ahn247e9cf2012-05-15 13:20:36 +09001/*
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
Ben Chanbbd500d2014-06-30 22:13:17 -070014#ifndef __GDM72XX_GDM_USB_H__
15#define __GDM72XX_GDM_USB_H__
Sage Ahn247e9cf2012-05-15 13:20:36 +090016
17#include <linux/types.h>
18#include <linux/usb.h>
19#include <linux/list.h>
20
Macpaul Lin0d660022012-09-12 17:49:24 +080021#define B_DIFF_DL_DRV (1 << 4)
22#define B_DOWNLOAD (1 << 5)
Sage Ahn247e9cf2012-05-15 13:20:36 +090023#define MAX_NR_SDU_BUF 64
24
25struct usb_tx {
26 struct list_head list;
27#if defined(CONFIG_WIMAX_GDM72XX_USB_PM) || defined(CONFIG_WIMAX_GDM72XX_K_MODE)
28 struct list_head p_list;
29#endif
30 struct tx_cxt *tx_cxt;
Macpaul Lin0d660022012-09-12 17:49:24 +080031 struct urb *urb;
Sage Ahn247e9cf2012-05-15 13:20:36 +090032 u8 *buf;
Sage Ahn247e9cf2012-05-15 13:20:36 +090033 void (*callback)(void *cb_data);
Michalis Pappasac1a3bf2014-05-09 18:08:28 +080034 void *cb_data;
Sage Ahn247e9cf2012-05-15 13:20:36 +090035};
36
37struct tx_cxt {
38 struct list_head free_list;
39 struct list_head sdu_list;
40 struct list_head hci_list;
41#if defined(CONFIG_WIMAX_GDM72XX_USB_PM) || defined(CONFIG_WIMAX_GDM72XX_K_MODE)
42 struct list_head pending_list;
43#endif
Macpaul Lin0d660022012-09-12 17:49:24 +080044 spinlock_t lock;
Sage Ahn247e9cf2012-05-15 13:20:36 +090045};
46
47struct usb_rx {
48 struct list_head list;
49 struct rx_cxt *rx_cxt;
Macpaul Lin0d660022012-09-12 17:49:24 +080050 struct urb *urb;
Sage Ahn247e9cf2012-05-15 13:20:36 +090051 u8 *buf;
Sage Ahn247e9cf2012-05-15 13:20:36 +090052 void (*callback)(void *cb_data, void *data, int len);
53 void *cb_data;
54};
55
56struct rx_cxt {
57 struct list_head free_list;
58 struct list_head used_list;
Macpaul Lin0d660022012-09-12 17:49:24 +080059 spinlock_t lock;
Sage Ahn247e9cf2012-05-15 13:20:36 +090060};
61
62struct usbwm_dev {
63 struct usb_device *usbdev;
64#ifdef CONFIG_WIMAX_GDM72XX_USB_PM
65 struct work_struct pm_ws;
66
67 struct usb_interface *intf;
68#endif
69#ifdef CONFIG_WIMAX_GDM72XX_K_MODE
70 int bw_switch;
71 struct list_head list;
72#endif
Macpaul Lin0d660022012-09-12 17:49:24 +080073 struct tx_cxt tx;
74 struct rx_cxt rx;
Michalis Pappasac1a3bf2014-05-09 18:08:28 +080075 int padding;
Sage Ahn247e9cf2012-05-15 13:20:36 +090076};
77
Ben Chanbbd500d2014-06-30 22:13:17 -070078#endif /* __GDM72XX_GDM_USB_H__ */