// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ZIRCON_SYSCALLS_RESOURCE_H_
#define ZIRCON_SYSCALLS_RESOURCE_H_

#include <stdint.h>
#include <zircon/compiler.h>

// Resources that require a region allocator to handle exclusive reservations
// are defined in a contiguous block starting at 0 up to ZX_RSRC_KIND_COUNT-1.
// After that point, all resource 'kinds' are abstract and need no underlying
// bookkeeping. It's important that ZX_RSRC_KIND_COUNT is defined for each
// architecture to properly allocate only the bookkeeping necessary.
//
// TODO(fxbug.dev/32272): Don't expose ZX_RSRC_KIND_COUNT to userspace

typedef uint32_t zx_rsrc_kind_t;
#define ZX_RSRC_KIND_MMIO ((zx_rsrc_kind_t)0u)
#define ZX_RSRC_KIND_IRQ ((zx_rsrc_kind_t)1u)
#define ZX_RSRC_KIND_IOPORT ((zx_rsrc_kind_t)2u)
#define ZX_RSRC_KIND_ROOT ((zx_rsrc_kind_t)3u)
#define ZX_RSRC_KIND_SMC ((zx_rsrc_kind_t)4u)
#define ZX_RSRC_KIND_SYSTEM ((zx_rsrc_kind_t)5u)
#define ZX_RSRC_KIND_COUNT ((zx_rsrc_kind_t)6u)

typedef uint32_t zx_rsrc_flags_t;
#define ZX_RSRC_FLAG_EXCLUSIVE ((zx_rsrc_flags_t)0x00010000u)
#define ZX_RSRC_FLAGS_MASK ((zx_rsrc_flags_t)ZX_RSRC_FLAG_EXCLUSIVE)

#define ZX_RSRC_EXTRACT_KIND(x) ((x) & 0x0000FFFF)
#define ZX_RSRC_EXTRACT_FLAGS(x) ((x) & 0xFFFF0000)

typedef uint64_t zx_rsrc_system_base_t;
#define ZX_RSRC_SYSTEM_HYPERVISOR_BASE ((zx_rsrc_system_base_t)0u)
#define ZX_RSRC_SYSTEM_VMEX_BASE ((zx_rsrc_system_base_t)1u)
#define ZX_RSRC_SYSTEM_DEBUG_BASE ((zx_rsrc_system_base_t)2u)
#define ZX_RSRC_SYSTEM_INFO_BASE ((zx_rsrc_system_base_t)3u)
#define ZX_RSRC_SYSTEM_CPU_BASE ((zx_rsrc_system_base_t)4u)
#define ZX_RSRC_SYSTEM_POWER_BASE ((zx_rsrc_system_base_t)5u)
#define ZX_RSRC_SYSTEM_MEXEC_BASE ((zx_rsrc_system_base_t)6u)
#define ZX_RSRC_SYSTEM_ENERGY_INFO_BASE ((zx_rsrc_system_base_t)7u)
#define ZX_RSRC_SYSTEM_IOMMU_BASE ((zx_rsrc_system_base_t)8u)
#define ZX_RSRC_SYSTEM_COUNT ((zx_rsrc_system_base_t)9u)

#endif  // ZIRCON_SYSCALLS_RESOURCE_H_
