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
19typedef 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_COUNT          ((zx_rsrc_kind_t)6u)
27
28typedef uint32_t zx_rsrc_flags_t;
29#define ZX_RSRC_FLAG_EXCLUSIVE      ((zx_rsrc_flags_t)0x00010000u)
30#define ZX_RSRC_FLAGS_MASK          ((zx_rsrc_flags_t)ZX_RSRC_FLAG_EXCLUSIVE)
31
32#define ZX_RSRC_EXTRACT_KIND(x)     ((x) & 0x0000FFFF)
33#define ZX_RSRC_EXTRACT_FLAGS(x)    ((x) & 0xFFFF0000)
34