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