1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. 4*4882a593Smuzhiyun * Copyright (C) 2019-2020 Linaro Ltd. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #ifndef _IPA_TABLE_H_ 7*4882a593Smuzhiyun #define _IPA_TABLE_H_ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/types.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct ipa; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* The maximum number of filter table entries (IPv4, IPv6; hashed or not) */ 14*4882a593Smuzhiyun #define IPA_FILTER_COUNT_MAX 14 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* The number of route table entries allotted to the modem */ 17*4882a593Smuzhiyun #define IPA_ROUTE_MODEM_COUNT 8 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* The maximum number of route table entries (IPv4, IPv6; hashed or not) */ 20*4882a593Smuzhiyun #define IPA_ROUTE_COUNT_MAX 15 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #ifdef IPA_VALIDATE 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /** 25*4882a593Smuzhiyun * ipa_table_valid() - Validate route and filter table memory regions 26*4882a593Smuzhiyun * @ipa: IPA pointer 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun * Return: true if all regions are valid, false otherwise 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun bool ipa_table_valid(struct ipa *ipa); 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /** 33*4882a593Smuzhiyun * ipa_filter_map_valid() - Validate a filter table endpoint bitmap 34*4882a593Smuzhiyun * @ipa: IPA pointer 35*4882a593Smuzhiyun * 36*4882a593Smuzhiyun * Return: true if all regions are valid, false otherwise 37*4882a593Smuzhiyun */ 38*4882a593Smuzhiyun bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_mask); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #else /* !IPA_VALIDATE */ 41*4882a593Smuzhiyun ipa_table_valid(struct ipa * ipa)42*4882a593Smuzhiyunstatic inline bool ipa_table_valid(struct ipa *ipa) 43*4882a593Smuzhiyun { 44*4882a593Smuzhiyun return true; 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun ipa_filter_map_valid(struct ipa * ipa,u32 filter_mask)47*4882a593Smuzhiyunstatic inline bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_mask) 48*4882a593Smuzhiyun { 49*4882a593Smuzhiyun return true; 50*4882a593Smuzhiyun } 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #endif /* !IPA_VALIDATE */ 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /** 55*4882a593Smuzhiyun * ipa_table_reset() - Reset filter and route tables entries to "none" 56*4882a593Smuzhiyun * @ipa: IPA pointer 57*4882a593Smuzhiyun * @modem: Whether to reset modem or AP entries 58*4882a593Smuzhiyun */ 59*4882a593Smuzhiyun void ipa_table_reset(struct ipa *ipa, bool modem); 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /** 62*4882a593Smuzhiyun * ipa_table_hash_flush() - Synchronize hashed filter and route updates 63*4882a593Smuzhiyun * @ipa: IPA pointer 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun int ipa_table_hash_flush(struct ipa *ipa); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /** 68*4882a593Smuzhiyun * ipa_table_setup() - Set up filter and route tables 69*4882a593Smuzhiyun * @ipa: IPA pointer 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun int ipa_table_setup(struct ipa *ipa); 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /** 74*4882a593Smuzhiyun * ipa_table_teardown() - Inverse of ipa_table_setup() 75*4882a593Smuzhiyun * @ipa: IPA pointer 76*4882a593Smuzhiyun */ 77*4882a593Smuzhiyun void ipa_table_teardown(struct ipa *ipa); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /** 80*4882a593Smuzhiyun * ipa_table_config() - Configure filter and route tables 81*4882a593Smuzhiyun * @ipa: IPA pointer 82*4882a593Smuzhiyun */ 83*4882a593Smuzhiyun void ipa_table_config(struct ipa *ipa); 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /** 86*4882a593Smuzhiyun * ipa_table_deconfig() - Inverse of ipa_table_config() 87*4882a593Smuzhiyun * @ipa: IPA pointer 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun void ipa_table_deconfig(struct ipa *ipa); 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /** 92*4882a593Smuzhiyun * ipa_table_init() - Do early initialization of filter and route tables 93*4882a593Smuzhiyun * @ipa: IPA pointer 94*4882a593Smuzhiyun */ 95*4882a593Smuzhiyun int ipa_table_init(struct ipa *ipa); 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /** 98*4882a593Smuzhiyun * ipa_table_exit() - Inverse of ipa_table_init() 99*4882a593Smuzhiyun * @ipa: IPA pointer 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun void ipa_table_exit(struct ipa *ipa); 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #endif /* _IPA_TABLE_H_ */ 104