diff --git a/include/uapi/linux/msm_ipa.h b/include/uapi/linux/msm_ipa.h index dcd4980ea987..0abf3da4beac 100644 --- a/include/uapi/linux/msm_ipa.h +++ b/include/uapi/linux/msm_ipa.h @@ -152,6 +152,8 @@ #define IPA_IOCTL_SET_EXT_ROUTER_MODE 95 #define IPA_IOCTL_ADD_DEL_DSCP_PCP_MAPPING 96 #define IPA_IOCTL_SEND_VLAN_MUXID_MAPPING 97 +#define IPA_IOCTL_SEND_TUNNEL_TEMPLATE_INFO 98 +#define IPA_IOCTL_QUERY_TUNNEL_FEATURE 99 /** * max size of the header to be inserted */ @@ -1776,6 +1778,104 @@ struct ipa_ioc_mux_mapping_table { struct singletag_mux_map_entry map_entries[MAX_VLAN_CONFIGURE]; }; +/* Feature Type Supported Design*/ +/* Cache all Design Support with Regular HPS for both EoGRE and MPLSoGRE tunnel */ +#define DEFAULT_FEATURE 0x00 +/* EoGRE to support Single Tag packet with new HPS */ +#define SINGLE_TAG_FEATURE 0x01 +/* MPLSoGRE to support Double Tag packet with new HPS */ +#define DOUBLE_TAG_FEATURE 0x02 +/* EoGRE to support UnTag packet with new HPS */ +#define UNTAG_FEATURE 0x03 + +/* l2 header is adjusted for every hwp_pkt_next_action */ +/* uc evaluate l2 header length and send packet to exception */ +#define SW_PATH_ADJ_L2_EXCEPTION 0x00 +/* uc evaluate l2 header length and send packet to 2nd pass */ +#define HW_PATH_ADJ_L2_RESUME_2ND_PASS 0x01 +/* uc evaluate l2 header length, update the metadata and send packet to 2nd pass */ +#define HW_PATH_ADJ_L2_METADATA_UPDATE_RESUME_2ND_PASS 0x02 +/* uc evaluate l2 header length, add outer header and send packet to 2nd pass */ +#define HW_PATH_ADJ_L2_ADD_TUNNEL_RESUME_2ND_PASS 0x03 +/* uc evaluate l2 header, update metadata, add outer header and send packet to 2nd pass */ +#define HW_PATH_ADJ_L2_ADD_TUNNEL_WITH_METADATA_UPDATE_RESUME_2ND_PASS 0x04 + +/* untagged packet configuration */ +struct untag_pkt_config_t { + /* packet action that should follow untag packet */ + uint32_t action_configured; + /* pdn from which untag packet should transfer */ + uint8_t mux_id; + /* flag if 1=>pkt_with_option_hdr 0=>pkt_without_option_hdr */ + uint8_t is_v6_options_hdr_present; + uint16_t pad0; /*for alignment*/ + /* lower 32 bit of tunnel header address */ + uint32_t *tunnel_template_addr; + uint32_t pad1; /*for alignment*/ +} __packed; + + +/* vlanid - action - tunnel_id - mux_id */ +struct singletag_mux_mapping_table_t { + /* multi tunnel purpose */ + uint16_t vlan_id_start; + uint16_t vlan_id_end; + uint32_t action_configured; + /* pdn from which untag packet should transfer */ + uint8_t mux_id; + /* flag if 1=>pkt_with_option_hdr 0=>pkt_without_option_hdr */ + uint8_t is_v6_options_hdr_present; + uint16_t pad0; /*for alignment*/ + uint32_t *tunnel_template_addr; +} __packed; + +struct doubletag_mux_mapping_table_t { + /* multi tunnel purpose */ + uint16_t stag_id_start; + uint16_t stag_id_end; + uint16_t ctag_id_start; + uint16_t ctag_id_end; + uint32_t action_configured; + /* pdn from which untag packet should transfer */ + uint8_t mux_id; + /* flag if 1=>pkt_with_option_hdr 0=>pkt_without_option_hdr */ + uint8_t is_v6_options_hdr_present; + uint16_t pad0; /*for alignment*/ + uint32_t *tunnel_template_addr; + uint32_t pad1; /*for alignment*/ +} __packed; + +/* max template side pass to uc */ +#define MAX_TEMPLATE_SIZE 64 +/* max number of tunnel to support ie: per PDN two tunnel (2*8)*/ +#define MAX_TUNNEL_SUPPORT 16 + +/* configuration table */ +struct tunnel_protocols_config_table_t { + struct untag_pkt_config_t untagged_mapping_table; + uint8_t num_of_single_tag_configs; + uint8_t pad0; /*for alignment*/ + uint16_t pad1; /*for alignment*/ + uint32_t pad2; /*for alignment*/ + /* table for single tag pkt */ + struct singletag_mux_mapping_table_t singletag_mux_mapping_table[MAX_TUNNEL_SUPPORT]; + uint8_t num_of_double_tag_configs; + uint8_t pad3; /*for alignment*/ + uint16_t pad4; /*for alignment*/ + uint32_t pad5; /*for alignment*/ + /* table for double tag pkt */ + struct doubletag_mux_mapping_table_t doubletag_mux_mapping_table[MAX_TUNNEL_SUPPORT]; +}; + +/* ioctl tunnel configuration table */ + +struct ipa_ioc_tunnel_template_info { + uint8_t template_header[MAX_TEMPLATE_SIZE]; + uint32_t template_len; + uint32_t template_type; + /*tunnel configuration table*/ + struct tunnel_protocols_config_table_t tunnel_config; +}; /** * struct ipa_exception @@ -4103,6 +4203,14 @@ struct ipa_ioc_dscp_pcp_map_info { IPA_IOCTL_SEND_VLAN_MUXID_MAPPING, \ struct ipa_ioc_mux_mapping_table) +#define IPA_IOC_SEND_TUNNEL_TEMPLATE_INFO _IOW(IPA_IOC_MAGIC, \ + IPA_IOCTL_SEND_TUNNEL_TEMPLATE_INFO, \ + struct ipa_ioc_tunnel_template_info) + + +#define IPA_IOC_QUERY_TUNNEL_FEATURE _IOW(IPA_IOC_MAGIC, \ + IPA_IOCTL_QUERY_TUNNEL_FEATURE, \ + uint8_t) /* * unique magic number of the Tethering bridge ioctls