blob: 3d50383c6cedf76ab6303b7dbdca4dc5fac02ecd [file] [log] [blame]
Won Kang61e12102013-07-25 03:36:17 +09001/*
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_MUX_H_
15#define _GDM_MUX_H_
16
17#include <linux/types.h>
18#include <linux/usb.h>
19#include <linux/list.h>
20
Won Kangbf0373f2013-08-16 13:13:44 +090021#include "gdm_tty.h"
22
Won Kang61e12102013-07-25 03:36:17 +090023#define PM_NORMAL 0
24#define PM_SUSPEND 1
25
26#define USB_RT_ACM (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
27
28#define START_FLAG 0xA512485A
29#define MUX_HEADER_SIZE 14
30#define MUX_TX_MAX_SIZE (1024*10)
31#define MUX_RX_MAX_SIZE (1024*30)
32#define AT_PKT_TYPE 0xF011
33#define DM_PKT_TYPE 0xF010
34
35#define RETRY_TIMER 30 /* msec */
36
37struct mux_pkt_header {
Ebru Akagunduz48131a62014-10-07 11:41:08 +030038 __le32 start_flag;
39 __le32 seq_num;
40 __le32 payload_size;
41 __le16 packet_type;
Won Kang61e12102013-07-25 03:36:17 +090042 unsigned char data[0];
43};
44
45struct mux_tx {
46 struct urb *urb;
47 u8 *buf;
48 int len;
49 void (*callback)(void *cb_data);
50 void *cb_data;
51};
52
53struct mux_rx {
54 struct list_head free_list;
55 struct list_head rx_submit_list;
56 struct list_head to_host_list;
57 struct urb *urb;
58 u8 *buf;
59 void *mux_dev;
60 u32 offset;
61 u32 len;
Won Kangbf0373f2013-08-16 13:13:44 +090062 int (*callback)(void *data,
63 int len,
64 int tty_index,
65 struct tty_dev *tty_dev,
Greg Kroah-Hartmanaee94402013-07-24 13:26:12 -070066 int complete);
Won Kang61e12102013-07-25 03:36:17 +090067};
68
69struct rx_cxt {
70 struct list_head to_host_list;
71 struct list_head rx_submit_list;
72 struct list_head rx_free_list;
73 spinlock_t to_host_lock;
74 spinlock_t submit_list_lock;
75 spinlock_t free_list_lock;
76};
77
78struct mux_dev {
79 struct usb_device *usbdev;
80 struct usb_interface *control_intf;
81 struct usb_interface *data_intf;
82 struct rx_cxt rx;
83 struct delayed_work work_rx;
84 struct usb_interface *intf;
85 int usb_state;
Won Kangbf0373f2013-08-16 13:13:44 +090086 int (*rx_cb)(void *data,
87 int len,
88 int tty_index,
89 struct tty_dev *tty_dev,
Greg Kroah-Hartmanaee94402013-07-24 13:26:12 -070090 int complete);
Won Kang61e12102013-07-25 03:36:17 +090091 spinlock_t write_lock;
Won Kangbf0373f2013-08-16 13:13:44 +090092 struct tty_dev *tty_dev;
Won Kang61e12102013-07-25 03:36:17 +090093};
94
95#endif /* _GDM_MUX_H_ */