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