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