1247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn/*
2247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
3247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn *
4247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * This software is licensed under the terms of the GNU General Public
5247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * License version 2, as published by the Free Software Foundation, and
6247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * may be copied, distributed, and modified under those terms.
7247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn *
8247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * This program is distributed in the hope that it will be useful,
9247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * but WITHOUT ANY WARRANTY; without even the implied warranty of
10247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn * GNU General Public License for more details.
12247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn */
13247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
14bbd500d8cdb071e7964fc07ab988817d719e1578Ben Chan#ifndef __GDM72XX_GDM_USB_H__
15bbd500d8cdb071e7964fc07ab988817d719e1578Ben Chan#define __GDM72XX_GDM_USB_H__
16247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
17247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#include <linux/types.h>
18247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#include <linux/usb.h>
19247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#include <linux/list.h>
20247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
210d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin#define B_DIFF_DL_DRV		(1 << 4)
220d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin#define B_DOWNLOAD		(1 << 5)
23247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#define MAX_NR_SDU_BUF		64
24247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
25247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahnstruct usb_tx {
26247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	list;
27247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#if defined(CONFIG_WIMAX_GDM72XX_USB_PM) || defined(CONFIG_WIMAX_GDM72XX_K_MODE)
28247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	p_list;
29247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#endif
30247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct tx_cxt		*tx_cxt;
310d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin	struct urb		*urb;
32247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	u8			*buf;
33247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	void (*callback)(void *cb_data);
34ac1a3bfafb66d51be061c341f05f283d38d2e22fMichalis Pappas	void			*cb_data;
35247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn};
36247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
37247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahnstruct tx_cxt {
38247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	free_list;
39247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	sdu_list;
40247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	hci_list;
41247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#if defined(CONFIG_WIMAX_GDM72XX_USB_PM) || defined(CONFIG_WIMAX_GDM72XX_K_MODE)
42247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	pending_list;
43247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#endif
440d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin	spinlock_t		lock;
45247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn};
46247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
47247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahnstruct usb_rx {
48247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	list;
49247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct rx_cxt		*rx_cxt;
500d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin	struct urb		*urb;
51247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	u8			*buf;
52247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	void (*callback)(void *cb_data, void *data, int len);
53247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	void *cb_data;
54247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn};
55247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
56247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahnstruct rx_cxt {
57247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	free_list;
58247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	used_list;
590d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin	spinlock_t		lock;
60247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn};
61247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
62247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahnstruct usbwm_dev {
63247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct usb_device	*usbdev;
64247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#ifdef CONFIG_WIMAX_GDM72XX_USB_PM
65247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct work_struct	pm_ws;
66247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
67247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct usb_interface	*intf;
68247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#endif
69247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#ifdef CONFIG_WIMAX_GDM72XX_K_MODE
70247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	int bw_switch;
71247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn	struct list_head	list;
72247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn#endif
730d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin	struct tx_cxt		tx;
740d660025564343e7c20c096d386f8ef8bacebdcdMacpaul Lin	struct rx_cxt		rx;
75ac1a3bfafb66d51be061c341f05f283d38d2e22fMichalis Pappas	int			padding;
76247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn};
77247e9cffdce024fec5f55f76a8592f2fa8b3aa7bSage Ahn
78bbd500d8cdb071e7964fc07ab988817d719e1578Ben Chan#endif /* __GDM72XX_GDM_USB_H__ */
79