xref: /OK3568_Linux_fs/kernel/drivers/net/ipa/ipa_table.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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*4882a593Smuzhiyun static 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*4882a593Smuzhiyun static 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