// Copyright 2017 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 SYSROOT_ZIRCON_RIGHTS_H_
#define SYSROOT_ZIRCON_RIGHTS_H_

#include <stdint.h>

typedef uint32_t zx_rights_t;
#define ZX_RIGHT_NONE ((zx_rights_t)0u)
#define ZX_RIGHT_DUPLICATE ((zx_rights_t)1u << 0)
#define ZX_RIGHT_TRANSFER ((zx_rights_t)1u << 1)
#define ZX_RIGHT_READ ((zx_rights_t)1u << 2)
#define ZX_RIGHT_WRITE ((zx_rights_t)1u << 3)
#define ZX_RIGHT_EXECUTE ((zx_rights_t)1u << 4)
#define ZX_RIGHT_MAP ((zx_rights_t)1u << 5)
#define ZX_RIGHT_GET_PROPERTY ((zx_rights_t)1u << 6)
#define ZX_RIGHT_SET_PROPERTY ((zx_rights_t)1u << 7)
#define ZX_RIGHT_ENUMERATE ((zx_rights_t)1u << 8)
#define ZX_RIGHT_DESTROY ((zx_rights_t)1u << 9)
#define ZX_RIGHT_SET_POLICY ((zx_rights_t)1u << 10)
#define ZX_RIGHT_GET_POLICY ((zx_rights_t)1u << 11)
#define ZX_RIGHT_SIGNAL ((zx_rights_t)1u << 12)
#define ZX_RIGHT_SIGNAL_PEER ((zx_rights_t)1u << 13)
#define ZX_RIGHT_WAIT ((zx_rights_t)1u << 14)
#define ZX_RIGHT_INSPECT ((zx_rights_t)1u << 15)
#define ZX_RIGHT_MANAGE_JOB ((zx_rights_t)1u << 16)
#define ZX_RIGHT_MANAGE_PROCESS ((zx_rights_t)1u << 17)
#define ZX_RIGHT_MANAGE_THREAD ((zx_rights_t)1u << 18)
#define ZX_RIGHT_APPLY_PROFILE ((zx_rights_t)1u << 19)
#define ZX_RIGHT_SAME_RIGHTS ((zx_rights_t)1u << 31)

// Convenient names for commonly grouped rights.
#define ZX_RIGHTS_BASIC (ZX_RIGHT_TRANSFER | ZX_RIGHT_DUPLICATE | ZX_RIGHT_WAIT | ZX_RIGHT_INSPECT)

#define ZX_RIGHTS_IO (ZX_RIGHT_READ | ZX_RIGHT_WRITE)

#define ZX_RIGHTS_PROPERTY (ZX_RIGHT_GET_PROPERTY | ZX_RIGHT_SET_PROPERTY)

#define ZX_RIGHTS_POLICY (ZX_RIGHT_GET_POLICY | ZX_RIGHT_SET_POLICY)

#define ZX_DEFAULT_CHANNEL_RIGHTS                                                 \
    ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_DUPLICATE)) | ZX_RIGHTS_IO | ZX_RIGHT_SIGNAL | \
     ZX_RIGHT_SIGNAL_PEER)

#define ZX_DEFAULT_EVENT_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_EVENTPAIR_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHT_SIGNAL | ZX_RIGHT_SIGNAL_PEER)

#define ZX_DEFAULT_FIFO_RIGHTS        \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | \
     ZX_RIGHT_SIGNAL | ZX_RIGHT_SIGNAL_PEER)

#define ZX_DEFAULT_GUEST_RIGHTS                                \
    (ZX_RIGHT_TRANSFER | ZX_RIGHT_DUPLICATE | ZX_RIGHT_WRITE | \
     ZX_RIGHT_INSPECT | ZX_RIGHT_MANAGE_PROCESS)

#define ZX_DEFAULT_INTERRUPT_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_IO_MAPPING_RIGHTS \
    (ZX_RIGHT_READ | ZX_RIGHT_INSPECT)

#define ZX_DEFAULT_JOB_RIGHTS                                                                      \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY | ZX_RIGHTS_POLICY | ZX_RIGHT_ENUMERATE | \
     ZX_RIGHT_DESTROY | ZX_RIGHT_SIGNAL | ZX_RIGHT_MANAGE_JOB | ZX_RIGHT_MANAGE_PROCESS |          \
     ZX_RIGHT_MANAGE_THREAD)

#define ZX_DEFAULT_LOG_RIGHTS \
    (ZX_RIGHTS_BASIC | ZX_RIGHT_WRITE | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_PCI_DEVICE_RIGHTS \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO)

#define ZX_DEFAULT_PCI_INTERRUPT_RIGHTS \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_PORT_RIGHTS \
    ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT)) | ZX_RIGHTS_IO)

#define ZX_DEFAULT_PROCESS_RIGHTS                                                                  \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY | ZX_RIGHT_ENUMERATE | ZX_RIGHT_DESTROY | \
     ZX_RIGHT_SIGNAL | ZX_RIGHT_MANAGE_PROCESS | ZX_RIGHT_MANAGE_THREAD)

#define ZX_DEFAULT_RESOURCE_RIGHTS                             \
    (ZX_RIGHT_TRANSFER | ZX_RIGHT_DUPLICATE | ZX_RIGHT_WRITE | \
     ZX_RIGHT_INSPECT)

#define ZX_DEFAULT_SOCKET_RIGHTS                              \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_GET_PROPERTY | \
     ZX_RIGHT_SET_PROPERTY | ZX_RIGHT_SIGNAL | ZX_RIGHT_SIGNAL_PEER)

#define ZX_DEFAULT_THREAD_RIGHTS                           \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY | \
     ZX_RIGHT_DESTROY | ZX_RIGHT_SIGNAL | ZX_RIGHT_MANAGE_THREAD)

#define ZX_DEFAULT_TIMER_RIGHTS (ZX_RIGHTS_BASIC | ZX_RIGHT_WRITE | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_VCPU_RIGHTS \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHT_EXECUTE | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_VMAR_RIGHTS \
    (ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT))

#define ZX_DEFAULT_VMO_RIGHTS                              \
    (ZX_RIGHTS_BASIC | ZX_RIGHTS_IO | ZX_RIGHTS_PROPERTY | \
     ZX_RIGHT_MAP | ZX_RIGHT_SIGNAL)

#define ZX_DEFAULT_IOMMU_RIGHTS \
    (ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT))

#define ZX_DEFAULT_BTI_RIGHTS \
    ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT)) | ZX_RIGHTS_IO | ZX_RIGHT_MAP)

#define ZX_DEFAULT_PROFILE_RIGHTS \
    ((ZX_RIGHTS_BASIC & (~ZX_RIGHT_WAIT)) | ZX_RIGHT_APPLY_PROFILE)

#define ZX_DEFAULT_PMT_RIGHTS \
    (ZX_RIGHT_INSPECT)

#define ZX_DEFAULT_SUSPEND_TOKEN_RIGHTS \
    (ZX_RIGHT_TRANSFER | ZX_RIGHT_INSPECT)

#define ZX_DEFAULT_PAGER_RIGHTS                                      \
    (ZX_RIGHT_INSPECT | ZX_RIGHT_ENUMERATE | ZX_RIGHT_GET_PROPERTY | \
     ZX_RIGHT_SET_PROPERTY | ZX_RIGHT_TRANSFER)

#define ZX_DEFAULT_EXCEPTION_RIGHTS \
    (ZX_RIGHT_TRANSFER | ZX_RIGHTS_PROPERTY | ZX_RIGHT_INSPECT)

#endif // SYSROOT_ZIRCON_RIGHTS_H_
