19599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#ifndef _UAPI_MSM_RMNET_H_
29599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define _UAPI_MSM_RMNET_H_
39599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
49599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* Bitmap macros for RmNET driver operation mode. */
59599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_MODE_NONE     (0x00)
69599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_MODE_LLP_ETH  (0x01)
79599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_MODE_LLP_IP   (0x02)
89599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_MODE_QOS      (0x04)
99599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_MODE_MASK     (RMNET_MODE_LLP_ETH | \
109599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			     RMNET_MODE_LLP_IP  | \
119599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			     RMNET_MODE_QOS)
129599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
139599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IS_MODE_QOS(mode)  \
149599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	((mode & RMNET_MODE_QOS) == RMNET_MODE_QOS)
159599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IS_MODE_IP(mode)   \
169599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP)
179599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
189599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* IOCTL command enum
199599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj * Values chosen to not conflict with other drivers in the ecosystem */
209599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramarajenum rmnet_ioctl_cmds_e {
219599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_LLP_ETHERNET = 0x000089F1, /* Set Ethernet protocol  */
229599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_LLP_IP       = 0x000089F2, /* Set RAWIP protocol     */
239599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_LLP          = 0x000089F3, /* Get link protocol      */
249599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_QOS_ENABLE   = 0x000089F4, /* Set QoS header enabled */
259599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_QOS_DISABLE  = 0x000089F5, /* Set QoS header disabled*/
269599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_QOS          = 0x000089F6, /* Get QoS header state   */
279599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_OPMODE       = 0x000089F7, /* Get operation mode     */
289599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_OPEN             = 0x000089F8, /* Open transport port    */
299599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_CLOSE            = 0x000089F9, /* Close transport port   */
309599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_FLOW_ENABLE      = 0x000089FA, /* Flow enable            */
319599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_FLOW_DISABLE     = 0x000089FB, /* Flow disable           */
329599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_FLOW_SET_HNDL    = 0x000089FC, /* Set flow handle        */
339599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_EXTENDED         = 0x000089FD, /* Extended IOCTLs        */
349599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_MAX
359599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj};
369599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
379599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramarajenum rmnet_ioctl_extended_cmds_e {
389599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* RmNet Data Required IOCTLs */
399599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_SUPPORTED_FEATURES     = 0x0000,   /* Get features    */
409599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_MRU                    = 0x0001,   /* Set MRU         */
419599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_MRU                    = 0x0002,   /* Get MRU         */
429599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_EPID                   = 0x0003,   /* Get endpoint ID */
439599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_DRIVER_NAME            = 0x0004,   /* Get driver name */
449599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_ADD_MUX_CHANNEL            = 0x0005,   /* Add MUX ID      */
459599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_EGRESS_DATA_FORMAT     = 0x0006,   /* Set EDF         */
469599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_INGRESS_DATA_FORMAT    = 0x0007,   /* Set IDF         */
479599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_AGGREGATION_COUNT      = 0x0008,   /* Set agg count   */
489599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_AGGREGATION_COUNT      = 0x0009,   /* Get agg count   */
499599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_AGGREGATION_SIZE       = 0x000A,   /* Set agg size    */
509599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_AGGREGATION_SIZE       = 0x000B,   /* Get agg size    */
519599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_FLOW_CONTROL               = 0x000C,   /* Do flow control */
529599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL   = 0x000D,   /* For legacy use  */
539599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_HWSW_MAP               = 0x000E,   /* Get HW/SW map   */
549599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_RX_HEADROOM            = 0x000F,   /* RX Headroom     */
559599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_EP_PAIR                = 0x0010,   /* Endpoint pair   */
569599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_SET_QOS_VERSION            = 0x0011,   /* 8/6 byte QoS hdr*/
579599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_QOS_VERSION            = 0x0012,   /* 8/6 byte QoS hdr*/
589599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_GET_SUPPORTED_QOS_MODES    = 0x0013,   /* Get QoS modes   */
599599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	RMNET_IOCTL_EXTENDED_MAX               = 0x0014
609599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj};
619599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
629599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
639599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL              (1<<0)
649599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT          (1<<1)
659599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT         (1<<2)
669599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT           (1<<3)
679599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT           (1<<4)
689599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE            (1<<5)
699599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE            (1<<6)
709599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_FLOW_CONTROL                    (1<<7)
719599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL        (1<<8)
729599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_FEAT_GET_HWSW_MAP                    (1<<9)
739599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
749599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL  */
759599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_EGRESS_FORMAT_MAP                  (1<<1)
769599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION          (1<<2)
779599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_EGRESS_FORMAT_MUXING               (1<<3)
789599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM             (1<<4)
799599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
809599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */
819599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_INGRESS_FORMAT_MAP                 (1<<1)
829599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION       (1<<2)
839599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING            (1<<3)
849599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM            (1<<4)
859599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
869599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* User space may not have this defined. */
879599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#ifndef IFNAMSIZ
889599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define IFNAMSIZ 16
899599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#endif
909599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
919599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramarajstruct rmnet_ioctl_extended_s {
929599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	uint32_t   extended_ioctl;
939599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	union {
949599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		uint32_t data; /* Generic data field for most extended IOCTLs */
959599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
969599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		/* Return values for
979599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		 *    RMNET_IOCTL_GET_DRIVER_NAME
989599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		 *    RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL */
999599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		int8_t if_name[IFNAMSIZ];
1009599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1019599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		/* Input values for the RMNET_IOCTL_ADD_MUX_CHANNEL IOCTL */
1029599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		struct {
1039599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			uint32_t  mux_id;
1049599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			int8_t    vchannel_name[IFNAMSIZ];
1059599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		} rmnet_mux_val;
1069599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1079599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		/* Input values for the RMNET_IOCTL_FLOW_CONTROL IOCTL */
1089599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		struct {
1099599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			uint8_t   flow_mode;
1109599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			uint8_t   mux_id;
1119599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		} flow_control_prop;
1129599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1139599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		/* Return values for RMNET_IOCTL_GET_EP_PAIR */
1149599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		struct {
1159599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			uint32_t   consumer_pipe_num;
1169599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj			uint32_t   producer_pipe_num;
1179599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		} ipa_ep_pair;
1189599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	} u;
1199599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj};
1209599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1219599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramarajstruct rmnet_ioctl_data_s {
1229599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	union {
1239599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		uint32_t	operation_mode;
1249599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj		uint32_t	tcm_handle;
1259599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	} u;
1269599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj};
1279599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1289599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_QOS_MODE_6   (1<<0)
1299599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define RMNET_IOCTL_QOS_MODE_8   (1<<1)
1309599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1319599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* QMI QoS header definition */
1329599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#define QMI_QOS_HDR_S  __attribute((__packed__)) qmi_qos_hdr_s
1339599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramarajstruct QMI_QOS_HDR_S {
1349599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	unsigned char    version;
1359599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	unsigned char    flags;
1369599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	unsigned long    flow_id;
1379599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj};
1389599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1399599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj/* QMI QoS 8-byte header. */
1409599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramarajstruct qmi_qos_hdr8_s {
1419599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	struct QMI_QOS_HDR_S   hdr;
1429599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj	uint8_t                reserved[2];
1439599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj} __attribute((__packed__));
1449599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj
1459599cb08d7b1c963f6cce6ca338389ca4b6e17acNaveen Ramaraj#endif /* _UAPI_MSM_RMNET_H_ */
146