build: remove map.noexstk and map.noexdata (now default)
[unleashed.git] / usr / src / lib / librsm / inc / rsmlib_in.h
blob4dfb8b9c4f20dd3b076ade1272eb2c0dfb9da615
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2001-2002 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _RSMLIB_IN_H
28 #define _RSMLIB_IN_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
36 #include <sys/types.h>
37 #include <sys/mman.h>
38 #include <sys/stat.h>
39 #include <fcntl.h>
41 #define LOOPBACK "loopback"
42 #define DEVRSM "/dev/rsm"
43 #define RSMSEGIDFILE "/etc/rsm/rsm.segmentid"
44 #define RSMSEG_RESERVED "reserved"
46 #define RSM_IMPORT_SEG 1
47 #define RSM_EXPORT_SEG 2
49 #define RSM_MAX_HANDLE_DVMA 0x2000
51 /* This is the default barrier implementation structure */
52 typedef struct {
53 rsmseg_handle_t *rsmgenbar_seg;
54 uint16_t rsmgenbar_gen;
55 rsm_barrier_t *rsmgenbar_data;
56 }rsmgenbar_handle_t;
58 #define RSM_MAX_BUCKETS 128 /* # buckets in the hash table */
59 #define RSM_POLLFD_PER_CHUNK 16 /* # pollfd in each chunk */
61 /* least significant 3 bytes of the fd should be unique enough */
62 #define RSM_POLLFD_HASH(fd) (((fd) ^ ((fd) >> 8) ^ ((fd) >> 16)) % \
63 RSM_MAX_BUCKETS)
66 * pollfd_table maintains a mapping from fd to resource number. It also
67 * provides a mechanism to check if a given fd corresponds to an rsmapi
68 * segment. Entries get added to this table as a result of
69 * rsm_memseg_get_pollfd and removed as a result of rsm_memseg_release_pollfd.
71 typedef struct {
72 int fd;
73 minor_t segrnum;
74 }rsm_pollfd_element_t;
76 typedef struct rsm_pollfd_chunk {
77 struct rsm_pollfd_chunk *next;
78 int nfree;
79 rsm_pollfd_element_t fdarray[RSM_POLLFD_PER_CHUNK];
80 } rsm_pollfd_chunk_t;
82 typedef struct {
83 mutex_t lock;
84 rsm_pollfd_chunk_t *buckets[RSM_MAX_BUCKETS];
85 } rsm_pollfd_table_t;
88 * The following macros are defined only if the DEBUG flag is enabled
89 * The macro makes use of category and level values defined in rsm.h
90 * and the dbg_printf function defined in rsmlib.c (defined as an
91 * extern below)
93 #ifdef DEBUG
94 #define TRACELOG "/tmp/librsm.log"
95 #define DBPRINTF(msg) dbg_printf msg
96 #else
97 #define TRACELOG
98 #define DBPRINTF(msg)
99 #endif
101 extern void dbg_printf(int category, int level, char *fmt, ...);
103 typedef int (*rsm_attach_entry_t)(int, rsm_segops_t **);
105 #ifdef __cplusplus
107 #endif
109 #endif /* _RSMLIB_IN_H */