1#ifndef _UAPI_MSM_RMNET_H_
2#define _UAPI_MSM_RMNET_H_
3
4/* Bitmap macros for RmNET driver operation mode. */
5#define RMNET_MODE_NONE     (0x00)
6#define RMNET_MODE_LLP_ETH  (0x01)
7#define RMNET_MODE_LLP_IP   (0x02)
8#define RMNET_MODE_QOS      (0x04)
9#define RMNET_MODE_MASK     (RMNET_MODE_LLP_ETH | \
10			     RMNET_MODE_LLP_IP  | \
11			     RMNET_MODE_QOS)
12
13#define RMNET_IS_MODE_QOS(mode)  \
14	((mode & RMNET_MODE_QOS) == RMNET_MODE_QOS)
15#define RMNET_IS_MODE_IP(mode)   \
16	((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP)
17
18/* IOCTL command enum
19 * Values chosen to not conflict with other drivers in the ecosystem */
20enum rmnet_ioctl_cmds_e {
21	RMNET_IOCTL_SET_LLP_ETHERNET = 0x000089F1, /* Set Ethernet protocol  */
22	RMNET_IOCTL_SET_LLP_IP       = 0x000089F2, /* Set RAWIP protocol     */
23	RMNET_IOCTL_GET_LLP          = 0x000089F3, /* Get link protocol      */
24	RMNET_IOCTL_SET_QOS_ENABLE   = 0x000089F4, /* Set QoS header enabled */
25	RMNET_IOCTL_SET_QOS_DISABLE  = 0x000089F5, /* Set QoS header disabled*/
26	RMNET_IOCTL_GET_QOS          = 0x000089F6, /* Get QoS header state   */
27	RMNET_IOCTL_GET_OPMODE       = 0x000089F7, /* Get operation mode     */
28	RMNET_IOCTL_OPEN             = 0x000089F8, /* Open transport port    */
29	RMNET_IOCTL_CLOSE            = 0x000089F9, /* Close transport port   */
30	RMNET_IOCTL_FLOW_ENABLE      = 0x000089FA, /* Flow enable            */
31	RMNET_IOCTL_FLOW_DISABLE     = 0x000089FB, /* Flow disable           */
32	RMNET_IOCTL_FLOW_SET_HNDL    = 0x000089FC, /* Set flow handle        */
33	RMNET_IOCTL_EXTENDED         = 0x000089FD, /* Extended IOCTLs        */
34	RMNET_IOCTL_MAX
35};
36
37enum rmnet_ioctl_extended_cmds_e {
38/* RmNet Data Required IOCTLs */
39	RMNET_IOCTL_GET_SUPPORTED_FEATURES     = 0x0000,   /* Get features    */
40	RMNET_IOCTL_SET_MRU                    = 0x0001,   /* Set MRU         */
41	RMNET_IOCTL_GET_MRU                    = 0x0002,   /* Get MRU         */
42	RMNET_IOCTL_GET_EPID                   = 0x0003,   /* Get endpoint ID */
43	RMNET_IOCTL_GET_DRIVER_NAME            = 0x0004,   /* Get driver name */
44	RMNET_IOCTL_ADD_MUX_CHANNEL            = 0x0005,   /* Add MUX ID      */
45	RMNET_IOCTL_SET_EGRESS_DATA_FORMAT     = 0x0006,   /* Set EDF         */
46	RMNET_IOCTL_SET_INGRESS_DATA_FORMAT    = 0x0007,   /* Set IDF         */
47	RMNET_IOCTL_SET_AGGREGATION_COUNT      = 0x0008,   /* Set agg count   */
48	RMNET_IOCTL_GET_AGGREGATION_COUNT      = 0x0009,   /* Get agg count   */
49	RMNET_IOCTL_SET_AGGREGATION_SIZE       = 0x000A,   /* Set agg size    */
50	RMNET_IOCTL_GET_AGGREGATION_SIZE       = 0x000B,   /* Get agg size    */
51	RMNET_IOCTL_FLOW_CONTROL               = 0x000C,   /* Do flow control */
52	RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL   = 0x000D,   /* For legacy use  */
53	RMNET_IOCTL_GET_HWSW_MAP               = 0x000E,   /* Get HW/SW map   */
54	RMNET_IOCTL_SET_RX_HEADROOM            = 0x000F,   /* RX Headroom     */
55	RMNET_IOCTL_GET_EP_PAIR                = 0x0010,   /* Endpoint pair   */
56	RMNET_IOCTL_SET_QOS_VERSION            = 0x0011,   /* 8/6 byte QoS hdr*/
57	RMNET_IOCTL_GET_QOS_VERSION            = 0x0012,   /* 8/6 byte QoS hdr*/
58	RMNET_IOCTL_GET_SUPPORTED_QOS_MODES    = 0x0013,   /* Get QoS modes   */
59	RMNET_IOCTL_EXTENDED_MAX               = 0x0014
60};
61
62/* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
63#define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL              (1<<0)
64#define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT          (1<<1)
65#define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT         (1<<2)
66#define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT           (1<<3)
67#define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT           (1<<4)
68#define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE            (1<<5)
69#define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE            (1<<6)
70#define RMNET_IOCTL_FEAT_FLOW_CONTROL                    (1<<7)
71#define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL        (1<<8)
72#define RMNET_IOCTL_FEAT_GET_HWSW_MAP                    (1<<9)
73
74/* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL  */
75#define RMNET_IOCTL_EGRESS_FORMAT_MAP                  (1<<1)
76#define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION          (1<<2)
77#define RMNET_IOCTL_EGRESS_FORMAT_MUXING               (1<<3)
78#define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM             (1<<4)
79
80/* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */
81#define RMNET_IOCTL_INGRESS_FORMAT_MAP                 (1<<1)
82#define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION       (1<<2)
83#define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING            (1<<3)
84#define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM            (1<<4)
85
86/* User space may not have this defined. */
87#ifndef IFNAMSIZ
88#define IFNAMSIZ 16
89#endif
90
91struct rmnet_ioctl_extended_s {
92	uint32_t   extended_ioctl;
93	union {
94		uint32_t data; /* Generic data field for most extended IOCTLs */
95
96		/* Return values for
97		 *    RMNET_IOCTL_GET_DRIVER_NAME
98		 *    RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL */
99		int8_t if_name[IFNAMSIZ];
100
101		/* Input values for the RMNET_IOCTL_ADD_MUX_CHANNEL IOCTL */
102		struct {
103			uint32_t  mux_id;
104			int8_t    vchannel_name[IFNAMSIZ];
105		} rmnet_mux_val;
106
107		/* Input values for the RMNET_IOCTL_FLOW_CONTROL IOCTL */
108		struct {
109			uint8_t   flow_mode;
110			uint8_t   mux_id;
111		} flow_control_prop;
112
113		/* Return values for RMNET_IOCTL_GET_EP_PAIR */
114		struct {
115			uint32_t   consumer_pipe_num;
116			uint32_t   producer_pipe_num;
117		} ipa_ep_pair;
118	} u;
119};
120
121struct rmnet_ioctl_data_s {
122	union {
123		uint32_t	operation_mode;
124		uint32_t	tcm_handle;
125	} u;
126};
127
128#define RMNET_IOCTL_QOS_MODE_6   (1<<0)
129#define RMNET_IOCTL_QOS_MODE_8   (1<<1)
130
131/* QMI QoS header definition */
132#define QMI_QOS_HDR_S  __attribute((__packed__)) qmi_qos_hdr_s
133struct QMI_QOS_HDR_S {
134	unsigned char    version;
135	unsigned char    flags;
136	unsigned long    flow_id;
137};
138
139/* QMI QoS 8-byte header. */
140struct qmi_qos_hdr8_s {
141	struct QMI_QOS_HDR_S   hdr;
142	uint8_t                reserved[2];
143} __attribute((__packed__));
144
145#endif /* _UAPI_MSM_RMNET_H_ */
146