1 /*
2  * Copyright (c) 2011-2015, 2017-2019 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /*
20  *
21  * This file dph_hash_table.h contains the definition of the scheduler class.
22  *
23  * Author:      Sandesh Goel
24  * Date:        02/25/02
25  * History:-
26  * Date            Modified by    Modification Information
27  * --------------------------------------------------------------------
28  *
29  */
30 
31 #ifndef __DPH_HASH_TABLE_H__
32 #define __DPH_HASH_TABLE_H__
33 
34 #include "ani_global.h"
35 /* Compare MAC addresses, return true if same */
dph_compare_mac_addr(uint8_t addr1[],uint8_t addr2[])36 static inline uint8_t dph_compare_mac_addr(uint8_t addr1[], uint8_t addr2[])
37 {
38 	return (addr1[0] == addr2[0]) &&
39 		(addr1[1] == addr2[1]) &&
40 		(addr1[2] == addr2[2]) &&
41 		(addr1[3] == addr2[3]) &&
42 		(addr1[4] == addr2[4]) && (addr1[5] == addr2[5]);
43 }
44 
45 /**
46  * struct dph_hash_table - DPH hash table
47  * @pHashTable: The actual hash table
48  * @pDphNodeArray: The state array
49  * @size: The size of the hash table
50  */
51 struct dph_hash_table {
52 	tpDphHashNode *pHashTable;
53 	tDphHashNode *pDphNodeArray;
54 	uint16_t size;
55 };
56 
57 tpDphHashNode dph_lookup_hash_entry(struct mac_context *mac, uint8_t staAddr[],
58 				    uint16_t *pStaId,
59 				    struct dph_hash_table *hash_table);
60 
61 /* Get a pointer to the hash node */
62 tpDphHashNode dph_get_hash_entry(struct mac_context *mac, uint16_t staId,
63 				 struct dph_hash_table *hash_table);
64 
65 /* Add an entry to the hash table */
66 tpDphHashNode dph_add_hash_entry(struct mac_context *mac,
67 				 tSirMacAddr staAddr,
68 				 uint16_t staId,
69 				 struct dph_hash_table *hash_table);
70 
71 /* Delete an entry from the hash table */
72 QDF_STATUS dph_delete_hash_entry(struct mac_context *mac,
73 				 tSirMacAddr staAddr, uint16_t staId,
74 				 struct dph_hash_table *hash_table);
75 
76 /**
77  * dph_hash_table_init - Initialize a DPH Hash Table
78  * @mac: Global MAC Context
79  * @hash_table: Pointer to the Hash Table to initialize
80  */
81 void dph_hash_table_init(struct mac_context *mac,
82 			 struct dph_hash_table *hash_table);
83 
84 /* Initialize STA state */
85 tpDphHashNode dph_init_sta_state(struct mac_context *mac,
86 				 tSirMacAddr staAddr,
87 				 uint16_t staId,
88 				 struct dph_hash_table *hash_table);
89 
90 #endif
91