// Copyright 2019 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#ifndef ZIRCON_KERNEL_VM_INCLUDE_VM_PAGE_STATE_H_
#define ZIRCON_KERNEL_VM_INCLUDE_VM_PAGE_STATE_H_

#include <lib/relaxed_atomic.h>
#include <stddef.h>
#include <stdint.h>

// Defines the state of a VM page (|vm_page_t|).
//
// Be sure to keep this enum in sync with the definition of |vm_page_t|.
enum class vm_page_state : uint8_t {
  FREE = 0,
  ALLOC,
  OBJECT,
  WIRED,
  HEAP,
  MMU,    // allocated to serve arch-specific mmu purposes
  IOMMU,  // allocated for platform-specific iommu structures
  IPC,
  CACHE,
  SLAB,
  ZRAM,

  COUNT_
};

static inline constexpr size_t VmPageStateIndex(vm_page_state state) {
  return static_cast<size_t>(state);
}

typedef struct vm_page_counts {
  // See comment in percpu::vm_page_counts for why we used a RelaxedAtomic.
  RelaxedAtomic<int64_t> by_state[VmPageStateIndex(vm_page_state::COUNT_)];
} vm_page_counts_t;

// Returns a string description of |state|.
const char* page_state_to_string(vm_page_state state);

#endif  // ZIRCON_KERNEL_VM_INCLUDE_VM_PAGE_STATE_H_
