/*
 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 */

#ifndef __GDM_USB_H__
#define __GDM_USB_H__

#include <linux/types.h>
#include <linux/usb.h>
#include <linux/list.h>

#define B_DIFF_DL_DRV		(1<<4)
#define B_DOWNLOAD			(1 << 5)
#define MAX_NR_SDU_BUF		64

struct usb_tx {
	struct list_head	list;
#if defined(CONFIG_WIMAX_GDM72XX_USB_PM) || defined(CONFIG_WIMAX_GDM72XX_K_MODE)
	struct list_head	p_list;
#endif
	struct tx_cxt		*tx_cxt;

	struct urb	*urb;
	u8			*buf;

	void (*callback)(void *cb_data);
	void *cb_data;
};

struct tx_cxt {
	struct list_head	free_list;
	struct list_head	sdu_list;
	struct list_head	hci_list;
#if defined(CONFIG_WIMAX_GDM72XX_USB_PM) || defined(CONFIG_WIMAX_GDM72XX_K_MODE)
	struct list_head	pending_list;
#endif

	spinlock_t			lock;
};

struct usb_rx {
	struct list_head	list;
	struct rx_cxt		*rx_cxt;

	struct urb	*urb;
	u8			*buf;

	void (*callback)(void *cb_data, void *data, int len);
	void *cb_data;
};

struct rx_cxt {
	struct list_head	free_list;
	struct list_head	used_list;
	spinlock_t			lock;
};

struct usbwm_dev {
	struct usb_device	*usbdev;
#ifdef CONFIG_WIMAX_GDM72XX_USB_PM
	struct work_struct	pm_ws;

	struct usb_interface	*intf;
#endif
#ifdef CONFIG_WIMAX_GDM72XX_K_MODE
	int bw_switch;
	struct list_head	list;
#endif

	struct tx_cxt	tx;
	struct rx_cxt	rx;

	int padding;
};

#endif /* __GDM_USB_H__ */
