2 * Copyright (c) 2018 VMware, Inc.
4 * SPDX-License-Identifier: (BSD-2-Clause OR GPL-2.0)
9 /* Hash table for use in the APIs. */
11 #ifndef _VMCI_HASHTABLE_H_
12 #define _VMCI_HASHTABLE_H_
14 #include "vmci_defs.h"
15 #include "vmci_kernel_if.h"
17 struct vmci_hash_entry {
18 struct vmci_handle handle;
20 struct vmci_hash_entry *next;
23 struct vmci_hashtable {
24 struct vmci_hash_entry **entries;
25 /* Number of buckets in above array. */
30 struct vmci_hashtable *vmci_hashtable_create(int size);
31 void vmci_hashtable_destroy(struct vmci_hashtable *table);
32 void vmci_hashtable_init_entry(struct vmci_hash_entry *entry,
33 struct vmci_handle handle);
34 int vmci_hashtable_add_entry(struct vmci_hashtable *table,
35 struct vmci_hash_entry *entry);
36 int vmci_hashtable_remove_entry(struct vmci_hashtable *table,
37 struct vmci_hash_entry *entry);
38 struct vmci_hash_entry *vmci_hashtable_get_entry(struct vmci_hashtable *table,
39 struct vmci_handle handle);
40 void vmci_hashtable_hold_entry(struct vmci_hashtable *table,
41 struct vmci_hash_entry *entry);
42 int vmci_hashtable_release_entry(struct vmci_hashtable *table,
43 struct vmci_hash_entry *entry);
44 bool vmci_hashtable_entry_exists(struct vmci_hashtable *table,
45 struct vmci_handle handle);
46 void vmci_hashtable_sync(struct vmci_hashtable *table);
48 #endif /* !_VMCI_HASHTABLE_H_ */