Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved. */
0003 
0004 #ifndef _GDM_USB_H_
0005 #define _GDM_USB_H_
0006 
0007 #include <linux/types.h>
0008 #include <linux/usb.h>
0009 #include <linux/list.h>
0010 #include <linux/time.h>
0011 
0012 #include "gdm_endian.h"
0013 #include "hci_packet.h"
0014 
0015 #define PM_NORMAL 0
0016 #define PM_SUSPEND 1
0017 #define AUTO_SUSPEND_TIMER 5000 /* ms */
0018 
0019 #define RX_BUF_SIZE     (1024 * 32)
0020 #define TX_BUF_SIZE     (1024 * 32)
0021 #define SDU_BUF_SIZE    2048
0022 #define MAX_SDU_SIZE    (1024 * 30)
0023 #define MAX_PACKET_IN_MULTI_SDU 256
0024 
0025 #define VID_GCT         0x1076
0026 #define PID_GDM7240     0x8000
0027 #define PID_GDM7243     0x9000
0028 
0029 #define NETWORK_INTERFACE 1
0030 #define USB_SC_SCSI 0x06
0031 #define USB_PR_BULK 0x50
0032 
0033 #define MAX_NUM_SDU_BUF 64
0034 
0035 struct usb_tx {
0036     struct list_head list;
0037     struct urb *urb;
0038     u8 *buf;
0039     u32 len;
0040     void (*callback)(void *cb_data);
0041     void *cb_data;
0042     struct tx_cxt *tx;
0043     u8 is_sdu;
0044 };
0045 
0046 struct usb_tx_sdu {
0047     struct list_head list;
0048     u8 *buf;
0049     u32 len;
0050     void (*callback)(void *cb_data);
0051     void *cb_data;
0052 };
0053 
0054 struct usb_rx {
0055     struct list_head to_host_list;
0056     struct list_head free_list;
0057     struct list_head rx_submit_list;
0058     struct rx_cxt   *rx;
0059     struct urb *urb;
0060     u8 *buf;
0061     int (*callback)(void *cb_data, void *data, int len, int context);
0062     void *cb_data;
0063     void *index;
0064 };
0065 
0066 struct tx_cxt {
0067     struct list_head sdu_list;
0068     struct list_head hci_list;
0069     struct list_head free_list;
0070     u32 avail_count;
0071     spinlock_t lock;
0072 };
0073 
0074 struct rx_cxt {
0075     struct list_head to_host_list;
0076     struct list_head rx_submit_list;
0077     struct list_head free_list;
0078     u32 avail_count;
0079     spinlock_t to_host_lock;
0080     spinlock_t rx_lock;
0081     spinlock_t submit_lock;
0082 };
0083 
0084 struct lte_udev {
0085     struct usb_device *usbdev;
0086     struct tx_cxt tx;
0087     struct rx_cxt rx;
0088     struct delayed_work work_tx;
0089     struct delayed_work work_rx;
0090     u8 gdm_ed;
0091     u8 send_complete;
0092     u8 tx_stop;
0093     struct usb_interface *intf;
0094     int (*rx_cb)(void *cb_data, void *data, int len, int context);
0095     int usb_state;
0096     u8 request_mac_addr;
0097 };
0098 
0099 #endif /* _GDM_USB_H_ */