1 #ifndef _MSM_RMNET_H_
2 #define _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 commands
19  * Values chosen to not conflict with other drivers in the ecosystem
20  */
21 
22 #define RMNET_IOCTL_SET_LLP_ETHERNET 0x000089F1 /* Set Ethernet protocol  */
23 #define RMNET_IOCTL_SET_LLP_IP       0x000089F2 /* Set RAWIP protocol     */
24 #define RMNET_IOCTL_GET_LLP          0x000089F3 /* Get link protocol      */
25 #define RMNET_IOCTL_SET_QOS_ENABLE   0x000089F4 /* Set QoS header enabled */
26 #define RMNET_IOCTL_SET_QOS_DISABLE  0x000089F5 /* Set QoS header disabled*/
27 #define RMNET_IOCTL_GET_QOS          0x000089F6 /* Get QoS header state   */
28 #define RMNET_IOCTL_GET_OPMODE       0x000089F7 /* Get operation mode     */
29 #define RMNET_IOCTL_OPEN             0x000089F8 /* Open transport port    */
30 #define RMNET_IOCTL_CLOSE            0x000089F9 /* Close transport port   */
31 #define RMNET_IOCTL_FLOW_ENABLE      0x000089FA /* Flow enable            */
32 #define RMNET_IOCTL_FLOW_DISABLE     0x000089FB /* Flow disable           */
33 #define RMNET_IOCTL_FLOW_SET_HNDL    0x000089FC /* Set flow handle        */
34 #define RMNET_IOCTL_EXTENDED         0x000089FD /* Extended IOCTLs        */
35 
36 /* RmNet Data Required IOCTLs */
37 #define RMNET_IOCTL_GET_SUPPORTED_FEATURES     0x0000   /* Get features    */
38 #define RMNET_IOCTL_SET_MRU                    0x0001   /* Set MRU         */
39 #define RMNET_IOCTL_GET_MRU                    0x0002   /* Get MRU         */
40 #define RMNET_IOCTL_GET_EPID                   0x0003   /* Get endpoint ID */
41 #define RMNET_IOCTL_GET_DRIVER_NAME            0x0004   /* Get driver name */
42 #define RMNET_IOCTL_ADD_MUX_CHANNEL            0x0005   /* Add MUX ID      */
43 #define RMNET_IOCTL_SET_EGRESS_DATA_FORMAT     0x0006   /* Set EDF         */
44 #define RMNET_IOCTL_SET_INGRESS_DATA_FORMAT    0x0007   /* Set IDF         */
45 #define RMNET_IOCTL_SET_AGGREGATION_COUNT      0x0008   /* Set agg count   */
46 #define RMNET_IOCTL_GET_AGGREGATION_COUNT      0x0009   /* Get agg count   */
47 #define RMNET_IOCTL_SET_AGGREGATION_SIZE       0x000A   /* Set agg size    */
48 #define RMNET_IOCTL_GET_AGGREGATION_SIZE       0x000B   /* Get agg size    */
49 #define RMNET_IOCTL_FLOW_CONTROL               0x000C   /* Do flow control */
50 #define RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL   0x000D   /* For legacy use  */
51 #define RMNET_IOCTL_GET_HWSW_MAP               0x000E   /* Get HW/SW map   */
52 #define RMNET_IOCTL_SET_RX_HEADROOM            0x000F   /* RX Headroom     */
53 #define RMNET_IOCTL_GET_EP_PAIR                0x0010   /* Endpoint pair   */
54 #define RMNET_IOCTL_SET_QOS_VERSION            0x0011   /* 8/6 byte QoS hdr*/
55 #define RMNET_IOCTL_GET_QOS_VERSION            0x0012   /* 8/6 byte QoS hdr*/
56 #define RMNET_IOCTL_GET_SUPPORTED_QOS_MODES    0x0013   /* Get QoS modes   */
57 #define RMNET_IOCTL_SET_SLEEP_STATE            0x0014   /* Set sleep state */
58 #define RMNET_IOCTL_SET_XLAT_DEV_INFO          0x0015   /* xlat dev name   */
59 #define RMNET_IOCTL_DEREGISTER_DEV             0x0016   /* Dereg a net dev */
60 #define RMNET_IOCTL_GET_SG_SUPPORT             0x0017   /* Query sg support*/
61 #define RMNET_IOCTL_SET_OFFLOAD                0x0018   /* Set IPA offload */
62 
63 /* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
64 #define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL              (1<<0)
65 #define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT          (1<<1)
66 #define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT         (1<<2)
67 #define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT           (1<<3)
68 #define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT           (1<<4)
69 #define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE            (1<<5)
70 #define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE            (1<<6)
71 #define RMNET_IOCTL_FEAT_FLOW_CONTROL                    (1<<7)
72 #define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL        (1<<8)
73 #define RMNET_IOCTL_FEAT_GET_HWSW_MAP                    (1<<9)
74 
75 /* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL  */
76 #define RMNET_IOCTL_EGRESS_FORMAT_MAP                  (1<<1)
77 #define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION          (1<<2)
78 #define RMNET_IOCTL_EGRESS_FORMAT_MUXING               (1<<3)
79 #define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM             (1<<4)
80 #define RMNET_IOCTL_EGRESS_FORMAT_IP_ROUTE             (1<<5)
81 
82 /* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */
83 #define RMNET_IOCTL_INGRESS_FORMAT_MAP                 (1<<1)
84 #define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION       (1<<2)
85 #define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING            (1<<3)
86 #define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM            (1<<4)
87 #define RMNET_IOCTL_INGRESS_FORMAT_AGG_DATA            (1<<5)
88 #define RMNET_IOCTL_INGRESS_FORMAT_IP_ROUTE            (1<<6)
89 
90 /* Input values for the RMNET_IOCTL_SET_OFFLOAD */
91 #define RMNET_IOCTL_OFFLOAD_FORMAT_NONE                   (0)
92 #define RMNET_IOCTL_COALESCING_FORMAT_TCP              (1<<0)
93 #define RMNET_IOCTL_COALESCING_FORMAT_UDP              (1<<1)
94 
95 /* User space may not have this defined. */
96 #ifndef IFNAMSIZ
97 #define IFNAMSIZ 16
98 #endif
99 
100 struct rmnet_ioctl_extended_s {
101 	uint32_t   extended_ioctl;
102 	union {
103 		uint32_t data; /* Generic data field for most extended IOCTLs */
104 
105 		/* Return values for
106 		 *    RMNET_IOCTL_GET_DRIVER_NAME
107 		 *    RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL
108 		 */
109 		int8_t if_name[IFNAMSIZ];
110 
111 		/* Input values for the RMNET_IOCTL_ADD_MUX_CHANNEL IOCTL */
112 		struct {
113 			uint32_t  mux_id;
114 			int8_t    vchannel_name[IFNAMSIZ];
115 		} rmnet_mux_val;
116 
117 		/* Input values for the RMNET_IOCTL_FLOW_CONTROL IOCTL */
118 		struct {
119 			uint8_t   flow_mode;
120 			uint8_t   mux_id;
121 		} flow_control_prop;
122 
123 		/* Return values for RMNET_IOCTL_GET_EP_PAIR */
124 		struct {
125 			uint32_t   consumer_pipe_num;
126 			uint32_t   producer_pipe_num;
127 		} ipa_ep_pair;
128 
129 		struct {
130 			uint32_t __data; /* Placeholder for legacy data*/
131 			uint32_t agg_size;
132 			uint32_t agg_count;
133 		} ingress_format;
134 
135 		/* Input values for the RMNET_IOCTL_SET_OFFLOAD */
136 		struct {
137 			uint32_t   flags;
138 			uint8_t    mux_id;
139 		} offload_params;
140 	} u;
141 };
142 
143 struct rmnet_ioctl_data_s {
144 	union {
145 		uint32_t	operation_mode;
146 		uint32_t	tcm_handle;
147 	} u;
148 };
149 
150 #define RMNET_IOCTL_QOS_MODE_6   (1<<0)
151 #define RMNET_IOCTL_QOS_MODE_8   (1<<1)
152 
153 /* QMI QoS header definition */
154 struct QMI_QOS_HDR_S {
155 	unsigned char    version;
156 	unsigned char    flags;
157 	uint32_t         flow_id;
158 } __attribute((__packed__));
159 
160 /* QMI QoS 8-byte header. */
161 struct qmi_qos_hdr8_s {
162 	struct QMI_QOS_HDR_S   hdr;
163 	uint8_t                reserved[2];
164 } __attribute((__packed__));
165 
166 #endif /* _MSM_RMNET_H_ */
167