if (!entry)
return -ENOMEM;
+ IPA_ACTIVE_CLIENTS_INC_SIMPLE();
mutex_lock(&ipa3_ctx->lock);
for (j = 0; j < num_tbls; j++) {
pr_err("== NON HASHABLE TABLE tbl:%d ==\n", j);
}
mutex_unlock(&ipa3_ctx->lock);
kfree(entry);
+ IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
return 0;
}
if (!entry)
return -ENOMEM;
+ IPA_ACTIVE_CLIENTS_INC_SIMPLE();
mutex_lock(&ipa3_ctx->lock);
for (j = 0; j < ipa3_ctx->ipa_num_pipes; j++) {
if (!ipa_is_ep_support_flt(j))
}
mutex_unlock(&ipa3_ctx->lock);
kfree(entry);
+ IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
return 0;
}
int rule_idx;
u8 rule_size;
int i;
+ void *ipa_sram_mmio;
IPADBG("pipe_idx=%d ip_type=%d hashable=%d\n",
pipe_idx, ip_type, hashable);
return -EINVAL;
}
+ /* map IPA SRAM */
+ ipa_sram_mmio = ioremap(ipa3_ctx->ipa_wrapper_base +
+ ipa3_ctx->ctrl->ipa_reg_base_ofst +
+ ipahal_get_reg_n_ofst(
+ IPA_SRAM_DIRECT_ACCESS_n,
+ 0),
+ ipa3_ctx->smem_sz);
+ if (!ipa_sram_mmio) {
+ IPAERR("fail to ioremap IPA SRAM\n");
+ return -ENOMEM;
+ }
+
memset(entry, 0, sizeof(*entry) * (*num_entry));
/* calculate the offset of the tbl entry */
tbl_entry_idx = 1; /* to skip the bitmap */
IPADBG("tbl_entry_in_hdr_ofst=0x%llx\n", tbl_entry_in_hdr_ofst);
- tbl_entry_in_hdr = ipa3_ctx->mmio +
- ipahal_get_reg_n_ofst(IPA_SRAM_DIRECT_ACCESS_n, 0) +
- tbl_entry_in_hdr_ofst;
+ tbl_entry_in_hdr = ipa_sram_mmio + tbl_entry_in_hdr_ofst;
/* for tables resides in DDR access it from the virtual memory */
if (*tbl_entry_in_hdr & 0x1) {
/* local */
- hdr = (void *)(tbl_entry_in_hdr -
+ hdr = (void *)((u8 *)tbl_entry_in_hdr -
tbl_entry_idx * IPA_HW_TBL_HDR_WIDTH +
- (*tbl_entry_in_hdr - 1) * 16);
+ (*tbl_entry_in_hdr - 1) / 16);
} else {
/* system */
if (hashable)
}
*num_entry = rule_idx;
+ iounmap(ipa_sram_mmio);
return 0;
}
u8 *buf;
int rule_idx;
u8 rule_size;
+ void *ipa_sram_mmio;
IPADBG("tbl_idx=%d ip_type=%d hashable=%d\n",
tbl_idx, ip_type, hashable);
return -EFAULT;
}
+ /* map IPA SRAM */
+ ipa_sram_mmio = ioremap(ipa3_ctx->ipa_wrapper_base +
+ ipa3_ctx->ctrl->ipa_reg_base_ofst +
+ ipahal_get_reg_n_ofst(
+ IPA_SRAM_DIRECT_ACCESS_n,
+ 0),
+ ipa3_ctx->smem_sz);
+ if (!ipa_sram_mmio) {
+ IPAERR("fail to ioremap IPA SRAM\n");
+ return -ENOMEM;
+ }
+
memset(entry, 0, sizeof(*entry) * (*num_entry));
if (hashable) {
if (ip_type == IPA_IP_v4)
IPADBG("tbl_entry_in_hdr_ofst=0x%llx\n", tbl_entry_in_hdr_ofst);
- tbl_entry_in_hdr = ipa3_ctx->mmio +
- ipahal_get_reg_n_ofst(IPA_SRAM_DIRECT_ACCESS_n, 0) +
- tbl_entry_in_hdr_ofst;
+ tbl_entry_in_hdr = ipa_sram_mmio + tbl_entry_in_hdr_ofst;
/* for tables which reside in DDR access it from the virtual memory */
if (!(*tbl_entry_in_hdr & 0x1)) {
hdr = ipa3_ctx->empty_rt_tbl_mem.base;
} else {
/* local */
- hdr = (void *)(tbl_entry_in_hdr -
+ hdr = (void *)((u8 *)tbl_entry_in_hdr -
tbl_idx * IPA_HW_TBL_HDR_WIDTH +
- (*tbl_entry_in_hdr - 1) * 16);
+ (*tbl_entry_in_hdr - 1) / 16);
}
IPADBG("*tbl_entry_in_hdr=0x%llx\n", *tbl_entry_in_hdr);
IPADBG("hdr=0x%p\n", hdr);
}
*num_entry = rule_idx;
+ iounmap(ipa_sram_mmio);
return 0;
}