1 /*
2  * Copyright (c) 2017 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: i_qdf_lro.h
22  * This file provides OS dependent LRO API's.
23  */
24 
25 #ifndef _I_QDF_LRO_H
26 #define _I_QDF_LRO_H
27 
28 #if defined(FEATURE_LRO)
29 #include <qdf_types.h>
30 #include <i_qdf_nbuf.h>
31 #include <i_qdf_trace.h>
32 
33 #include <linux/inet_lro.h>
34 
35 /**
36  * struct qdf_lro_desc_entry - defines the LRO descriptor
37  * element stored in the list
38  * @lro_node: node of the list
39  * @lro_desc: the LRO descriptor contained in this list entry
40  */
41 struct qdf_lro_desc_entry {
42 	struct list_head lro_node;
43 	struct net_lro_desc *lro_desc;
44 };
45 
46 /**
47  * struct qdf_lro_desc_pool - pool of free LRO descriptors
48  * @lro_desc_array: array of LRO descriptors allocated
49  * @lro_free_list_head: head of the list
50  * @lro_pool_lock: lock to protect access to the list
51  */
52 struct qdf_lro_desc_pool {
53 	struct qdf_lro_desc_entry *lro_desc_array;
54 	struct list_head lro_free_list_head;
55 };
56 
57 /**
58  * struct qdf_lro_desc_table - defines each entry of the LRO hash table
59  * @lro_desc_list: list of LRO descriptors
60  */
61 struct qdf_lro_desc_table {
62 	struct list_head lro_desc_list;
63 };
64 
65 /**
66  * struct qdf_lro_desc_info - structure containing the LRO descriptor
67  * information
68  * @lro_hash_table: hash table used for a quick desc. look-up
69  * @lro_hash_lock: lock to protect access to the hash table
70  * @lro_desc_pool: Free pool of LRO descriptors
71  */
72 struct qdf_lro_desc_info {
73 	struct qdf_lro_desc_table *lro_hash_table;
74 	struct qdf_lro_desc_pool lro_desc_pool;
75 };
76 
77 /**
78  * struct qdf_lro_s - LRO information
79  * @lro_mgr: LRO manager
80  * @lro_desc_info: LRO descriptor information
81  */
82 struct qdf_lro_s {
83 	struct net_lro_mgr *lro_mgr;
84 	struct qdf_lro_desc_info lro_desc_info;
85 };
86 
87 typedef struct qdf_lro_s *__qdf_lro_ctx_t;
88 
89 /* LRO_DESC_TABLE_SZ must be a power of 2 */
90 #define QDF_LRO_DESC_TABLE_SZ 16
91 #define QDF_LRO_DESC_TABLE_SZ_MASK (QDF_LRO_DESC_TABLE_SZ - 1)
92 #define QDF_LRO_DESC_POOL_SZ 10
93 
94 #define QDF_LRO_DESC_TABLE_SZ 16
95 #define QDF_LRO_DESC_TABLE_SZ_MASK (QDF_LRO_DESC_TABLE_SZ - 1)
96 #define QDF_LRO_DESC_POOL_SZ 10
97 
98 #define QDF_LRO_MAX_AGGR_SIZE 100
99 
100 #else
101 
102 struct qdf_lro_s {};
103 
104 typedef struct qdf_lro_s *__qdf_lro_ctx_t;
105 
106 #endif /* FEATURE_LRO */
107 #endif /*_I_QDF_NET_BUF_H */
108