/* * Copyright (c) 2017 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /** * DOC: i_qdf_lro.h * This file provides OS dependent LRO API's. */ #ifndef _I_QDF_LRO_H #define _I_QDF_LRO_H #if defined(FEATURE_LRO) #include #include #include #include /** * qdf_lro_desc_entry - defines the LRO descriptor * element stored in the list * @lro_node: node of the list * @lro_desc: the LRO descriptor contained in this list entry */ struct qdf_lro_desc_entry { struct list_head lro_node; struct net_lro_desc *lro_desc; }; /** * qdf_lro_desc_pool - pool of free LRO descriptors * @lro_desc_array: array of LRO descriptors allocated * @lro_free_list_head: head of the list * @lro_pool_lock: lock to protect access to the list */ struct qdf_lro_desc_pool { struct qdf_lro_desc_entry *lro_desc_array; struct list_head lro_free_list_head; }; /** * qdf_lro_desc_table - defines each entry of the LRO hash table * @lro_desc_list: list of LRO descriptors */ struct qdf_lro_desc_table { struct list_head lro_desc_list; }; /** * qdf_lro_desc_info - structure containing the LRO descriptor * information * @lro_hash_table: hash table used for a quick desc. look-up * @lro_hash_lock: lock to protect access to the hash table * @lro_desc_pool: Free pool of LRO descriptors */ struct qdf_lro_desc_info { struct qdf_lro_desc_table *lro_hash_table; struct qdf_lro_desc_pool lro_desc_pool; }; /** * qdf_lro_info_s - LRO information * @lro_mgr: LRO manager * @lro_desc_info: LRO descriptor information * @lro_mgr_arr_access_lock: Lock to access LRO manager array. * @lro_stats: LRO statistics */ struct qdf_lro_s { struct net_lro_mgr *lro_mgr; struct qdf_lro_desc_info lro_desc_info; }; typedef struct qdf_lro_s *__qdf_lro_ctx_t; /* LRO_DESC_TABLE_SZ must be a power of 2 */ #define QDF_LRO_DESC_TABLE_SZ 16 #define QDF_LRO_DESC_TABLE_SZ_MASK (QDF_LRO_DESC_TABLE_SZ - 1) #define QDF_LRO_DESC_POOL_SZ 10 #define QDF_LRO_DESC_TABLE_SZ 16 #define QDF_LRO_DESC_TABLE_SZ_MASK (QDF_LRO_DESC_TABLE_SZ - 1) #define QDF_LRO_DESC_POOL_SZ 10 #define QDF_LRO_MAX_AGGR_SIZE 100 #else struct qdf_lro_s {}; typedef struct qdf_lro_s *__qdf_lro_ctx_t; #endif /* FEATURE_LRO */ #endif /*_I_QDF_NET_BUF_H */