mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 04:42:04 -04:00
msm: ipa3: EoGRE feature
Ethernet VLAN frames are now encapsulated in IP/GRE on uplink, while IP/GRE headers are stripped on downlink. Change-Id: I8f8820abf390815ed1f4a3a81bf1943a1fecf310 Signed-off-by: Perry Randise <prandise@codeaurora.org>
This commit is contained in:
parent
c30dc7b7b1
commit
978a822178
1 changed files with 111 additions and 13 deletions
|
|
@ -138,6 +138,8 @@
|
|||
#define IPA_IOCTL_SET_SW_FLT 85
|
||||
#define IPA_IOCTL_GET_HW_FEATURE_SUPPORT 86
|
||||
#define IPA_IOCTL_SET_PKT_THRESHOLD 87
|
||||
#define IPA_IOCTL_ADD_EoGRE_MAPPING 88
|
||||
#define IPA_IOCTL_DEL_EoGRE_MAPPING 89
|
||||
|
||||
/**
|
||||
* max size of the header to be inserted
|
||||
|
|
@ -834,7 +836,14 @@ enum ipa_move_nat_table_event {
|
|||
#define IPA_MOVE_NAT_EVENT_MAX IPA_MOVE_NAT_EVENT_MAX
|
||||
};
|
||||
|
||||
#define IPA_EVENT_MAX_NUM (IPA_MOVE_NAT_EVENT_MAX)
|
||||
enum ipa_eogre_event {
|
||||
IPA_EoGRE_UP_EVENT = IPA_MOVE_NAT_EVENT_MAX,
|
||||
IPA_EoGRE_DOWN_EVENT,
|
||||
IPA_EoGRE_EVENT_MAX
|
||||
#define IPA_EoGRE_EVENT_MAX IPA_EoGRE_EVENT_MAX
|
||||
};
|
||||
|
||||
#define IPA_EVENT_MAX_NUM (IPA_EoGRE_EVENT_MAX)
|
||||
#define IPA_EVENT_MAX ((int)IPA_EVENT_MAX_NUM)
|
||||
|
||||
/**
|
||||
|
|
@ -1266,17 +1275,23 @@ enum ipa_hdr_l2_type {
|
|||
|
||||
/**
|
||||
* enum ipa_hdr_l2_type - Processing context type
|
||||
* IPA_HDR_PROC_NONE: No processing context
|
||||
* IPA_HDR_PROC_ETHII_TO_ETHII: Process Ethernet II to Ethernet II
|
||||
* IPA_HDR_PROC_ETHII_TO_802_3: Process Ethernet II to 802_3
|
||||
* IPA_HDR_PROC_802_3_TO_ETHII: Process 802_3 to Ethernet II
|
||||
* IPA_HDR_PROC_802_3_TO_802_3: Process 802_3 to 802_3
|
||||
* IPA_HDR_PROC_ETHII_TO_ETHII_EX: Process Ethernet II to Ethernet II with
|
||||
* generic lengths of src and dst headers
|
||||
* IPA_HDR_PROC_L2TP_UDP_HEADER_ADD: Process WLAN To Ethernet packets to
|
||||
* add L2TP UDP header.
|
||||
*
|
||||
* IPA_HDR_PROC_NONE: No processing context
|
||||
* IPA_HDR_PROC_ETHII_TO_ETHII: Process Ethernet II to Ethernet II
|
||||
* IPA_HDR_PROC_ETHII_TO_802_3: Process Ethernet II to 802_3
|
||||
* IPA_HDR_PROC_802_3_TO_ETHII: Process 802_3 to Ethernet II
|
||||
* IPA_HDR_PROC_802_3_TO_802_3: Process 802_3 to 802_3
|
||||
* IPA_HDR_PROC_L2TP_HEADER_ADD:
|
||||
* IPA_HDR_PROC_L2TP_HEADER_REMOVE:
|
||||
* IPA_HDR_PROC_ETHII_TO_ETHII_EX: Process Ethernet II to Ethernet II with
|
||||
* generic lengths of src and dst headers
|
||||
* IPA_HDR_PROC_L2TP_UDP_HEADER_ADD: Process WLAN To Ethernet packets to
|
||||
* add L2TP UDP header.
|
||||
* IPA_HDR_PROC_L2TP_UDP_HEADER_REMOVE: Process Ethernet To WLAN packets to
|
||||
* remove L2TP UDP header.
|
||||
* remove L2TP UDP header.
|
||||
* IPA_HDR_PROC_SET_DSCP:
|
||||
* IPA_HDR_PROC_EoGRE_HEADER_ADD: Add IPV[46] GRE header
|
||||
* IPA_HDR_PROC_EoGRE_HEADER_REMOVE: Remove IPV[46] GRE header
|
||||
*/
|
||||
enum ipa_hdr_proc_type {
|
||||
IPA_HDR_PROC_NONE,
|
||||
|
|
@ -1289,9 +1304,11 @@ enum ipa_hdr_proc_type {
|
|||
IPA_HDR_PROC_ETHII_TO_ETHII_EX,
|
||||
IPA_HDR_PROC_L2TP_UDP_HEADER_ADD,
|
||||
IPA_HDR_PROC_L2TP_UDP_HEADER_REMOVE,
|
||||
IPA_HDR_PROC_SET_DSCP
|
||||
IPA_HDR_PROC_SET_DSCP,
|
||||
IPA_HDR_PROC_EoGRE_HEADER_ADD,
|
||||
IPA_HDR_PROC_EoGRE_HEADER_REMOVE,
|
||||
};
|
||||
#define IPA_HDR_PROC_MAX (IPA_HDR_PROC_SET_DSCP + 1)
|
||||
#define IPA_HDR_PROC_MAX (IPA_HDR_PROC_EoGRE_HEADER_REMOVE + 1)
|
||||
|
||||
/**
|
||||
* struct ipa_rt_rule - attributes of a routing rule
|
||||
|
|
@ -1452,6 +1469,78 @@ struct ipa_l2tp_hdr_proc_ctx_params {
|
|||
enum ipa_client_type dst_pipe;
|
||||
};
|
||||
|
||||
#define IPA_EoGRE_MAX_PCP_IDX 8 /* From 802.1Q tag format (reflects IEEE P802.1p) */
|
||||
#define IPA_EoGRE_MAX_VLAN 8 /* Our supported number of VLAN id's */
|
||||
|
||||
/* vlan 12 bits + pcp 3 bites <-> dscp 6 bits */
|
||||
struct IpaDscpVlanPcpMap_t {
|
||||
/*
|
||||
* valid only lower 12 bits
|
||||
*/
|
||||
uint16_t vlan[IPA_EoGRE_MAX_VLAN];
|
||||
/*
|
||||
* dscp[vlan][pcp], valid only lower 6 bits, using pcp as index
|
||||
*/
|
||||
uint8_t dscp[IPA_EoGRE_MAX_VLAN][IPA_EoGRE_MAX_PCP_IDX];
|
||||
uint8_t num_vlan; /* indicate how many vlans valid */
|
||||
uint8_t reserved0;
|
||||
} __packed;
|
||||
|
||||
struct ipa_ipgre_info {
|
||||
/* ip address type */
|
||||
enum ipa_ip_type iptype;
|
||||
/* ipv4 */
|
||||
uint32_t ipv4_src;
|
||||
uint32_t ipv4_dst;
|
||||
/* ipv6 */
|
||||
uint32_t ipv6_src[4];
|
||||
uint32_t ipv6_dst[4];
|
||||
/* gre header info */
|
||||
uint16_t gre_protocol;
|
||||
};
|
||||
|
||||
struct ipa_ioc_eogre_info {
|
||||
/* ip and gre info */
|
||||
struct ipa_ipgre_info ipgre_info;
|
||||
/* mapping info */
|
||||
struct IpaDscpVlanPcpMap_t map_info;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ipa_eogre_header_add_procparams -
|
||||
* @eth_hdr_retained: Specifies if Ethernet header is retained or not
|
||||
* @input_ip_version: Specifies if Input header is IPV4(0) or IPV6(1)
|
||||
* @output_ip_version: Specifies if template header's outer IP is IPV4(0) or IPV6(1)
|
||||
* @second_pass: Specifies if the data should be processed again.
|
||||
*/
|
||||
struct ipa_eogre_header_add_procparams {
|
||||
uint32_t eth_hdr_retained :1;
|
||||
uint32_t input_ip_version :1;
|
||||
uint32_t output_ip_version :1;
|
||||
uint32_t second_pass :1;
|
||||
uint32_t reserved :28;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ipa_eogre_header_remove_procparams -
|
||||
* @hdr_len_remove: Specifies how much (in bytes) of the header needs
|
||||
* to be removed
|
||||
*/
|
||||
struct ipa_eogre_header_remove_procparams {
|
||||
uint32_t hdr_len_remove:8; /* 44 bytes for IPV6, 24 for IPV4 */
|
||||
uint32_t reserved:24;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ipa_eogre_hdr_proc_ctx_params -
|
||||
* @hdr_add_param: parameters for header add
|
||||
* @hdr_remove_param: parameters for header remove
|
||||
*/
|
||||
struct ipa_eogre_hdr_proc_ctx_params {
|
||||
struct ipa_eogre_header_add_procparams hdr_add_param;
|
||||
struct ipa_eogre_header_remove_procparams hdr_remove_param;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ipa_eth_II_to_eth_II_ex_procparams -
|
||||
* @input_ethhdr_negative_offset: Specifies where the ethernet hdr offset is
|
||||
|
|
@ -1474,6 +1563,7 @@ struct ipa_eth_II_to_eth_II_ex_procparams {
|
|||
* @type: processing context type
|
||||
* @hdr_hdl: in parameter, handle to header
|
||||
* @l2tp_params: l2tp parameters
|
||||
* @eogre_params: eogre parameters
|
||||
* @generic_params: generic proc_ctx params
|
||||
* @proc_ctx_hdl: out parameter, handle to proc_ctx, valid when status is 0
|
||||
* @status: out parameter, status of header add operation,
|
||||
|
|
@ -1486,6 +1576,7 @@ struct ipa_hdr_proc_ctx_add {
|
|||
uint32_t proc_ctx_hdl;
|
||||
int status;
|
||||
struct ipa_l2tp_hdr_proc_ctx_params l2tp_params;
|
||||
struct ipa_eogre_hdr_proc_ctx_params eogre_params;
|
||||
struct ipa_eth_II_to_eth_II_ex_procparams generic_params;
|
||||
};
|
||||
|
||||
|
|
@ -3435,6 +3526,13 @@ struct ipa_ioc_sw_flt_list_type {
|
|||
#define IPA_IOC_SET_PKT_THRESHOLD _IOWR(IPA_IOC_MAGIC, \
|
||||
IPA_IOCTL_SET_PKT_THRESHOLD, \
|
||||
struct ipa_ioc_set_pkt_threshold)
|
||||
|
||||
#define IPA_IOC_ADD_EoGRE_MAPPING _IOWR(IPA_IOC_MAGIC, \
|
||||
IPA_IOCTL_ADD_EoGRE_MAPPING, \
|
||||
struct ipa_ioc_eogre_info)
|
||||
#define IPA_IOC_DEL_EoGRE_MAPPING _IOWR(IPA_IOC_MAGIC, \
|
||||
IPA_IOCTL_DEL_EoGRE_MAPPING, \
|
||||
struct ipa_ioc_eogre_info)
|
||||
/*
|
||||
* unique magic number of the Tethering bridge ioctls
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue