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