Fix bug in libdomain/domain_cap_hash()
[barrelfish] / include / barrelfish_kpi / types.h
1 /**
2  * \file
3  * \brief Definitions of standard Barrelfish types.
4  */
5
6 /*
7  * Copyright (c) 2007, 2008, 2010, 2012, ETH Zurich.
8  * All rights reserved.
9  *
10  * This file is distributed under the terms in the attached LICENSE file.
11  * If you do not find this file, copies can be found by writing to:
12  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13  */
14
15 #ifndef BARRELFISH_KPI_TYPES_H
16 #define BARRELFISH_KPI_TYPES_H
17
18 /* Number of bits in a byte */
19 #define NBBY            8
20
21 /// Capability NULL pointer
22 #define CPTR_NULL       ((capaddr_t)0)
23
24 #ifndef __ASSEMBLER__
25
26 #include <stdint.h>
27 #include <stddef.h>
28 #include <inttypes.h>
29 #include <barrelfish/static_assert.h>
30
31 /* natural machine word size */
32 typedef signed int      word_t;
33 typedef unsigned int    uword_t;
34
35 /* Local physical address. */
36 typedef uintptr_t lpaddr_t;
37 #define PRIuLPADDR PRIuPTR
38 #define PRIxLPADDR PRIxPTR
39
40 /* Global (system-wide) physical address, currently 64 bits */
41 typedef uint64_t genpaddr_t;
42 #define PRIuGENPADDR PRIu64
43 #define PRIxGENPADDR PRIx64
44
45 /* Global (system-wide) size type, currently 64 bits */
46 typedef uint64_t gensize_t;
47 #define PRIuGENSIZE PRIu64
48 #define PRIxGENSIZE PRIx64
49
50 /* Local virtual address */
51 typedef uintptr_t lvaddr_t;
52 #define PRIuLVADDR PRIuPTR
53 #define PRIxLVADDR PRIxPTR
54
55 /* Global (system-wide) virtual address, currently 64 bits */
56 typedef uint64_t genvaddr_t;
57 #define PRIuGENVADDR PRIu64
58 #define PRIxGENVADDR PRIx64
59
60 /* A virtual address in a foreign address space. */
61 typedef genvaddr_t forvaddr_t;
62 #define PRIuFORVADDR PRIuGENVADDR
63 #define PRIxFORVADDR PRIxGENVADDR
64
65 /* capability addresses */
66 typedef uint32_t capaddr_t;
67 #define PRIuCADDR PRIu32
68 #define PRIxCADDR PRIx32
69
70 /* physical address space identifier */
71 typedef uint32_t pasid_t;
72 #define PRIuPASID PRIu32
73 #define PRIxPASID PRIx32
74
75 /// Number of bits in a cspace address
76 #define CPTR_BITS       (sizeof(capaddr_t) * NBBY)
77
78 /* slot number */
79 typedef capaddr_t cslot_t;
80 #define PRIuCSLOT PRIuCADDR
81 #define PRIxCSLOT PRIxCADDR
82
83 /* core id type */
84 // This is also used as a count of cores, so the maximum core ID must be
85 // one less than the maximum value representable here.
86 typedef uint8_t coreid_t;
87 #define PRIuCOREID  PRIu8
88 #define PRIxCOREID  PRIx8
89
90 #ifndef MAX_COREID
91 #define MAX_COREID  254 // limit of coreid_t type (see comment above)
92 #endif
93
94 /* node id type */
95 typedef coreid_t nodeid_t;
96 #define PRIuNODEID PRIu8
97 #define PRIxNODEID PRIx8
98
99 #ifndef MAX_NODEID
100 #define MAX_NODEID 255
101 #endif
102
103 /* hardware id (apic, mpdir, ...) */
104 typedef uintptr_t hwid_t;
105 #define PRIuHWID PRIu64
106 #define PRIxHWID PRIx64
107
108 /* ID capability ID */
109 // Returned if IDCmd_Identify is invoked on an ID capability.
110 typedef uint64_t idcap_id_t;
111 #define PRIuIDCAPID PRIu64
112 #define PRIxIDCAPID PRIx64
113
114 /* Resource id */
115 typedef uint32_t rsrcid_t;
116 #define PRIuRSRCID  PRIu32
117 #define PRIxRSRCID  PRIx32
118
119 /* Domain ID */
120 typedef uint32_t     domainid_t;
121 #define MAX_DOMAINID 0xffffffff
122 #define PRIuDOMAINID    PRIu32
123 #define PRIxDOMAINID    PRIx32
124
125 /* Performance counter */
126 // Performance counter
127 typedef uint8_t perfmon_counter_t;
128 // Performance event
129 typedef uint64_t perfmon_event_t;
130 // Performance mask
131 typedef uint64_t perfmon_mask_t;
132
133 /// Absolute system wallclock time in ticks
134 typedef uint64_t systime_t;
135 #define PRIuSYSTIME PRIu64
136 #define PRIxSYSTIME PRIx64
137 #define PRIXSYSTIME PRIX64
138
139 #define PRIxERRV    PRIxPTR
140 #define PRIuERRV    PRIuPTR
141
142 #endif // __ASSEMBLER__
143
144 #endif // BARRELFISH_KPI_TYPES_H