1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2014 Joyent, Inc. All rights reserved. 14 * Copyright (c) 2014, Tegile Systems Inc. All rights reserved. 15 */ 16 17 #ifndef _SYS_SCSI_ADAPTERS_MPTSAS3_HASH_H 18 #define _SYS_SCSI_ADAPTERS_MPTSAS3_HASH_H 19 20 #include <sys/types.h> 21 #include <sys/list.h> 22 23 #define RHL_F_DEAD 0x01 24 25 typedef struct refhash_link { 26 list_node_t rhl_chain_link; 27 list_node_t rhl_global_link; 28 uint_t rhl_flags; 29 uint_t rhl_refcnt; 30 } refhash_link_t; 31 32 typedef uint64_t (*refhash_hash_f)(const void *); 33 typedef int (*refhash_cmp_f)(const void *, const void *); 34 typedef void (*refhash_dtor_f)(void *); 35 typedef int (*refhash_eval_f)(const void *, void *); 36 37 typedef struct refhash { 38 list_t *rh_buckets; 39 uint_t rh_bucket_count; 40 list_t rh_objs; 41 size_t rh_obj_size; /* used by mdb */ 42 size_t rh_link_off; 43 size_t rh_tag_off; 44 refhash_hash_f rh_hash; 45 refhash_cmp_f rh_cmp; 46 refhash_dtor_f rh_dtor; 47 } refhash_t; 48 49 extern refhash_t *refhash_create(uint_t, refhash_hash_f, refhash_cmp_f, 50 refhash_dtor_f, size_t, size_t, size_t, int); 51 extern void refhash_destroy(refhash_t *); 52 extern void refhash_insert(refhash_t *, void *); 53 extern void refhash_remove(refhash_t *, void *); 54 extern void *refhash_lookup(refhash_t *, const void *); 55 extern void *refhash_linear_search(refhash_t *, refhash_eval_f, void *); 56 extern void refhash_hold(refhash_t *, void *); 57 extern void refhash_rele(refhash_t *, void *); 58 extern void *refhash_first(refhash_t *); 59 extern void *refhash_next(refhash_t *, void *); 60 extern boolean_t refhash_obj_valid(refhash_t *hp, const void *); 61 62 #endif /* _SYS_SCSI_ADAPTERS_MPTSAS3_HASH_H */