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