/**
 * @file        scp_common.h
 * @brief       Common SCP types and constants.
 *
 * @details     Contains all symbols not otherwise belonging to any specific
 *              subcomponent of the SCP driver.
 *
 * @note        Client applications should include scp.h instead of this file.
 *
 * Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * * Neither the name of NVIDIA CORPORATION nor the names of its
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef SCP__SCP_COMMON_H
#define SCP__SCP_COMMON_H
#define FSP__SCP__SCP_COMMON_H 1


/**
 * @brief The minimum required alignment for SCP buffers.
 *
 * The minimum required alignment for input and output buffers passed to
 * SCP interfaces, in bytes. Note that this alignment only applies to buffer
 * arguments and not to other interface parameters.
 */
#define SCP_BUFFER_ALIGNMENT 16U


/**
 * @brief A collection of enumerated values for referring to specific SCP GPRs.
 */
typedef enum scp_register_index_t
{
    // Long-form versions to match naming scheme.

    SCP_REGISTER_INDEX_0 = 0,
    SCP_REGISTER_INDEX_1,
    SCP_REGISTER_INDEX_2,
    SCP_REGISTER_INDEX_3,
    SCP_REGISTER_INDEX_4,
    SCP_REGISTER_INDEX_5,
    SCP_REGISTER_INDEX_6,
    SCP_REGISTER_INDEX_7,
    SCP_REGISTER_INDEX_COUNT,

    // Short-form versions for brevity.

    SCP_R0 = 0,
    SCP_R1,
    SCP_R2,
    SCP_R3,
    SCP_R4,
    SCP_R5,
    SCP_R6,
    SCP_R7,
    SCP_RCOUNT,

} scp_register_index_t;

#endif // SCP__SCP_COMMON_H
