1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved. */ 3 4 #ifndef _GDM_MUX_H_ 5 #define _GDM_MUX_H_ 6 7 #include <linux/types.h> 8 #include <linux/usb.h> 9 #include <linux/list.h> 10 11 #include "gdm_tty.h" 12 13 #define PM_NORMAL 0 14 #define PM_SUSPEND 1 15 16 #define USB_RT_ACM (USB_TYPE_CLASS | USB_RECIP_INTERFACE) 17 18 #define START_FLAG 0xA512485A 19 #define MUX_HEADER_SIZE 14 20 #define MUX_TX_MAX_SIZE (1024 * 10) 21 #define MUX_RX_MAX_SIZE (1024 * 30) 22 #define AT_PKT_TYPE 0xF011 23 #define DM_PKT_TYPE 0xF010 24 25 #define RETRY_TIMER 30 /* msec */ 26 27 struct mux_pkt_header { 28 __le32 start_flag; 29 __le32 seq_num; 30 __le32 payload_size; 31 __le16 packet_type; 32 unsigned char data[]; 33 }; 34 35 struct mux_tx { 36 struct urb *urb; 37 u8 *buf; 38 int len; 39 void (*callback)(void *cb_data); 40 void *cb_data; 41 }; 42 43 struct mux_rx { 44 struct list_head free_list; 45 struct list_head rx_submit_list; 46 struct list_head to_host_list; 47 struct urb *urb; 48 u8 *buf; 49 void *mux_dev; 50 u32 offset; 51 u32 len; 52 int (*callback)(void *data, 53 int len, 54 int tty_index, 55 struct tty_dev *tty_dev, 56 int complete); 57 }; 58 59 struct rx_cxt { 60 struct list_head to_host_list; 61 struct list_head rx_submit_list; 62 struct list_head rx_free_list; 63 spinlock_t to_host_lock; 64 spinlock_t submit_list_lock; 65 spinlock_t free_list_lock; 66 }; 67 68 struct mux_dev { 69 struct usb_device *usbdev; 70 struct usb_interface *control_intf; 71 struct usb_interface *data_intf; 72 struct rx_cxt rx; 73 struct delayed_work work_rx; 74 struct usb_interface *intf; 75 int usb_state; 76 int (*rx_cb)(void *data, 77 int len, 78 int tty_index, 79 struct tty_dev *tty_dev, 80 int complete); 81 spinlock_t write_lock; 82 struct tty_dev *tty_dev; 83 }; 84 85 #endif /* _GDM_MUX_H_ */ 86