/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "esp_types.h"
#include "esp_bit_defs.h"
#include "soc/soc_caps.h"

static uint64_t s_reserve_status = 0;

void esp_gpio_reserve_pins(uint64_t mask)
{
#if SOC_GPIO_PIN_COUNT < 64
    mask &= BIT64(SOC_GPIO_PIN_COUNT) - 1;
#endif
    s_reserve_status |= mask;
}

bool esp_gpio_is_pin_reserved(uint32_t gpio_num)
{
    if (gpio_num >= SOC_GPIO_PIN_COUNT) {
        return false;
    }
    return !!(s_reserve_status & BIT64(gpio_num));
}

// TODO: IDF-6968 reserve the pins that not fanned out regarding the SiP version