Kaynağa Gözat

msm: ipa3: Update metadata register based on vlan id from packets

Update metadata register to pick up metadata value with vlan id
from header of packets.

Change-Id: I04fb0ae5a348c316220cb4667252892397560859
Signed-off-by: Akshay Pandit <[email protected]>
Akshay Pandit 4 yıl önce
ebeveyn
işleme
9496877331

+ 6 - 0
drivers/platform/msm/ipa/ipa_clients/ecm_ipa.c

@@ -1344,6 +1344,12 @@ static int ecm_ipa_ep_registers_cfg(u32 usb_to_ipa_hdl, u32 ipa_to_usb_hdl,
 
 	/* enable hdr_metadata_reg_valid */
 	usb_to_ipa_ep_cfg.hdr.hdr_metadata_reg_valid = true;
+	/*xlat config in vlan mode */
+	if (is_vlan_mode) {
+		usb_to_ipa_ep_cfg.hdr.hdr_ofst_metadata_valid = 1;
+		usb_to_ipa_ep_cfg.hdr.hdr_ofst_metadata = ETH_HLEN;
+		usb_to_ipa_ep_cfg.hdr.hdr_metadata_reg_valid = false;
+	}
 
 	result = ipa3_cfg_ep(usb_to_ipa_hdl, &usb_to_ipa_ep_cfg);
 	if (result) {

+ 8 - 0
drivers/platform/msm/ipa/ipa_clients/rndis_ipa.c

@@ -2020,6 +2020,14 @@ static int rndis_ipa_ep_registers_cfg(
 	/* enable hdr_metadata_reg_valid */
 	usb_to_ipa_ep_cfg->hdr.hdr_metadata_reg_valid = true;
 
+	/*xlat config in vlan mode */
+	if (is_vlan_mode) {
+		usb_to_ipa_ep_cfg->hdr.hdr_ofst_metadata_valid = 1;
+		usb_to_ipa_ep_cfg->hdr.hdr_ofst_metadata =
+			sizeof(struct rndis_pkt_hdr) + ETH_HLEN;
+		usb_to_ipa_ep_cfg->hdr.hdr_metadata_reg_valid = false;
+	}
+
 	result = ipa3_cfg_ep(ipa_to_usb_hdl, &ipa_to_usb_ep_cfg);
 	if (result) {
 		pr_err("failed to configure IPA to USB end-point\n");

+ 8 - 0
drivers/platform/msm/ipa/ipa_v3/ipa_uc_ntn.c

@@ -392,6 +392,7 @@ int ipa3_setup_uc_ntn_pipes(struct ipa_ntn_conn_in_params *in,
 	int ipa_ep_idx_ul;
 	int ipa_ep_idx_dl;
 	int result = 0;
+	bool is_vlan_mode;
 
 	if (in == NULL) {
 		IPAERR("invalid input\n");
@@ -439,6 +440,13 @@ int ipa3_setup_uc_ntn_pipes(struct ipa_ntn_conn_in_params *in,
 	ep_ul->cfg.hdr.hdr_len = hdr_len;
 	ep_ul->cfg.mode.mode = IPA_BASIC;
 
+	result = ipa_is_vlan_mode(IPA_VLAN_IF_ETH, &is_vlan_mode);
+	if (is_vlan_mode) {
+		ep_ul->cfg.hdr.hdr_ofst_metadata_valid = 1;
+		ep_ul->cfg.hdr.hdr_ofst_metadata = ETH_HLEN;
+		ep_ul->cfg.hdr.hdr_metadata_reg_valid = false;
+	}
+
 	if (ipa3_cfg_ep(ipa_ep_idx_ul, &ep_ul->cfg)) {
 		IPAERR("fail to setup ul pipe cfg\n");
 		result = -EFAULT;