1 // Copyright 2016 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #pragma once
6 
7 #include <stdint.h>
8 
9 #include <zircon/compiler.h>
10 
11 // Resources that require a region allocator to handle exclusive reservations
12 // are defined in a contiguous block starting at 0 up to ZX_RSRC_KIND_COUNT-1.
13 // After that point, all resource 'kinds' are abstract and need no underlying
14 // bookkeeping. It's important that ZX_RSRC_KIND_COUNT is defined for each
15 // architecture to properly allocate only the bookkeeping necessary.
16 //
17 // TODO(ZX-2419): Don't expose ZX_RSRC_KIND_COUNT to userspace
18 
19 typedef uint32_t zx_rsrc_kind_t;
20 #define ZX_RSRC_KIND_MMIO           ((zx_rsrc_kind_t)0u)
21 #define ZX_RSRC_KIND_IRQ            ((zx_rsrc_kind_t)1u)
22 #define ZX_RSRC_KIND_IOPORT         ((zx_rsrc_kind_t)2u)
23 #define ZX_RSRC_KIND_HYPERVISOR     ((zx_rsrc_kind_t)3u)
24 #define ZX_RSRC_KIND_ROOT           ((zx_rsrc_kind_t)4u)
25 #define ZX_RSRC_KIND_VMEX           ((zx_rsrc_kind_t)5u)
26 #define ZX_RSRC_KIND_SMC            ((zx_rsrc_kind_t)6u)
27 #define ZX_RSRC_KIND_COUNT          ((zx_rsrc_kind_t)7u)
28 
29 typedef uint32_t zx_rsrc_flags_t;
30 #define ZX_RSRC_FLAG_EXCLUSIVE      ((zx_rsrc_flags_t)0x00010000u)
31 #define ZX_RSRC_FLAGS_MASK          ((zx_rsrc_flags_t)ZX_RSRC_FLAG_EXCLUSIVE)
32 
33 #define ZX_RSRC_EXTRACT_KIND(x)     ((x) & 0x0000FFFF)
34 #define ZX_RSRC_EXTRACT_FLAGS(x)    ((x) & 0xFFFF0000)
35