14d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#ifndef _UAPI_MSM_RMNET_H_
24d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define _UAPI_MSM_RMNET_H_
34d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
44d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Bitmap macros for RmNET driver operation mode. */
54d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_MODE_NONE     (0x00)
64d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_MODE_LLP_ETH  (0x01)
74d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_MODE_LLP_IP   (0x02)
84d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_MODE_QOS      (0x04)
94d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_MODE_MASK     (RMNET_MODE_LLP_ETH | \
104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			     RMNET_MODE_LLP_IP  | \
114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			     RMNET_MODE_QOS)
124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IS_MODE_QOS(mode)  \
144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	((mode & RMNET_MODE_QOS) == RMNET_MODE_QOS)
154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IS_MODE_IP(mode)   \
164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP)
174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* IOCTL command enum
194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin * Values chosen to not conflict with other drivers in the ecosystem */
204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum rmnet_ioctl_cmds_e {
214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_LLP_ETHERNET = 0x000089F1, /* Set Ethernet protocol  */
224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_LLP_IP       = 0x000089F2, /* Set RAWIP protocol     */
234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_LLP          = 0x000089F3, /* Get link protocol      */
244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_QOS_ENABLE   = 0x000089F4, /* Set QoS header enabled */
254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_QOS_DISABLE  = 0x000089F5, /* Set QoS header disabled*/
264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_QOS          = 0x000089F6, /* Get QoS header state   */
274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_OPMODE       = 0x000089F7, /* Get operation mode     */
284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_OPEN             = 0x000089F8, /* Open transport port    */
294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_CLOSE            = 0x000089F9, /* Close transport port   */
304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_FLOW_ENABLE      = 0x000089FA, /* Flow enable            */
314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_FLOW_DISABLE     = 0x000089FB, /* Flow disable           */
324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_FLOW_SET_HNDL    = 0x000089FC, /* Set flow handle        */
334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_EXTENDED         = 0x000089FD, /* Extended IOCTLs        */
344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_MAX
354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin};
364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinenum rmnet_ioctl_extended_cmds_e {
384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* RmNet Data Required IOCTLs */
394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_SUPPORTED_FEATURES     = 0x0000,   /* Get features    */
404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_MRU                    = 0x0001,   /* Set MRU         */
414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_MRU                    = 0x0002,   /* Get MRU         */
424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_EPID                   = 0x0003,   /* Get endpoint ID */
434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_DRIVER_NAME            = 0x0004,   /* Get driver name */
444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_ADD_MUX_CHANNEL            = 0x0005,   /* Add MUX ID      */
454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_EGRESS_DATA_FORMAT     = 0x0006,   /* Set EDF         */
464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_INGRESS_DATA_FORMAT    = 0x0007,   /* Set IDF         */
474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_AGGREGATION_COUNT      = 0x0008,   /* Set agg count   */
484d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_AGGREGATION_COUNT      = 0x0009,   /* Get agg count   */
494d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_AGGREGATION_SIZE       = 0x000A,   /* Set agg size    */
504d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_AGGREGATION_SIZE       = 0x000B,   /* Get agg size    */
514d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_FLOW_CONTROL               = 0x000C,   /* Do flow control */
524d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL   = 0x000D,   /* For legacy use  */
534d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_HWSW_MAP               = 0x000E,   /* Get HW/SW map   */
544d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_RX_HEADROOM            = 0x000F,   /* RX Headroom     */
554d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_EP_PAIR                = 0x0010,   /* Endpoint pair   */
564d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_QOS_VERSION            = 0x0011,   /* 8/6 byte QoS hdr*/
574d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_QOS_VERSION            = 0x0012,   /* 8/6 byte QoS hdr*/
584d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_GET_SUPPORTED_QOS_MODES    = 0x0013,   /* Get QoS modes   */
594d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_SLEEP_STATE            = 0x0014,   /* Set sleep state */
604d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_SET_XLAT_DEV_INFO          = 0x0015,   /* xlat dev name   */
614d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	RMNET_IOCTL_EXTENDED_MAX               = 0x0016
624d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin};
634d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
644d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
654d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL              (1<<0)
664d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT          (1<<1)
674d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT         (1<<2)
684d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT           (1<<3)
694d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT           (1<<4)
704d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE            (1<<5)
714d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE            (1<<6)
724d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_FLOW_CONTROL                    (1<<7)
734d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL        (1<<8)
744d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_FEAT_GET_HWSW_MAP                    (1<<9)
754d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
764d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL  */
774d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_EGRESS_FORMAT_MAP                  (1<<1)
784d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION          (1<<2)
794d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_EGRESS_FORMAT_MUXING               (1<<3)
804d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM             (1<<4)
814d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
824d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */
834d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_INGRESS_FORMAT_MAP                 (1<<1)
844d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION       (1<<2)
854d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING            (1<<3)
864d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM            (1<<4)
874d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
884d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* User space may not have this defined. */
894d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#ifndef IFNAMSIZ
904d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define IFNAMSIZ 16
914d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#endif
924d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
934d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct rmnet_ioctl_extended_s {
944d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	uint32_t   extended_ioctl;
954d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	union {
964d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		uint32_t data; /* Generic data field for most extended IOCTLs */
974d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
984d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		/* Return values for
994d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		 *    RMNET_IOCTL_GET_DRIVER_NAME
1004d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		 *    RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL */
1014d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		int8_t if_name[IFNAMSIZ];
1024d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1034d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		/* Input values for the RMNET_IOCTL_ADD_MUX_CHANNEL IOCTL */
1044d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		struct {
1054d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			uint32_t  mux_id;
1064d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			int8_t    vchannel_name[IFNAMSIZ];
1074d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		} rmnet_mux_val;
1084d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1094d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		/* Input values for the RMNET_IOCTL_FLOW_CONTROL IOCTL */
1104d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		struct {
1114d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			uint8_t   flow_mode;
1124d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			uint8_t   mux_id;
1134d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		} flow_control_prop;
1144d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1154d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		/* Return values for RMNET_IOCTL_GET_EP_PAIR */
1164d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		struct {
1174d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			uint32_t   consumer_pipe_num;
1184d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin			uint32_t   producer_pipe_num;
1194d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		} ipa_ep_pair;
1204d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	} u;
1214d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin};
1224d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1234d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct rmnet_ioctl_data_s {
1244d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	union {
1254d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		uint32_t	operation_mode;
1264d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin		uint32_t	tcm_handle;
1274d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	} u;
1284d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin};
1294d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1304d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_QOS_MODE_6   (1<<0)
1314d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define RMNET_IOCTL_QOS_MODE_8   (1<<1)
1324d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1334d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* QMI QoS header definition */
1344d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#define QMI_QOS_HDR_S  __attribute((__packed__)) qmi_qos_hdr_s
1354d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct QMI_QOS_HDR_S {
1364d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	unsigned char    version;
1374d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	unsigned char    flags;
1384d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	uint32_t         flow_id;
1394d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin};
1404d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1414d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin/* QMI QoS 8-byte header. */
1424d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjinstruct qmi_qos_hdr8_s {
1434d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	struct QMI_QOS_HDR_S   hdr;
1444d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin	uint8_t                reserved[2];
1454d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin} __attribute((__packed__));
1464d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin
1474d667bae0175a66dffc4d241a449e706bdee0a85Patrick Tjin#endif /* _UAPI_MSM_RMNET_H_ */
148