Program Listing for File sysinfo.h#

Return to documentation for file (src/generated/structs/sysinfo.h)

#pragma once

#include "../ifgen/common.h"

namespace RP2040
{

struct [[gnu::packed]] sysinfo
{
    /* Constant attributes. */
    static constexpr std::size_t size = 68;
    /* Fields. */
    const uint32_t CHIP_ID =
        {};
    const uint32_t PLATFORM =
        {};
    static constexpr std::size_t reserved_padding0_length = 14;
    const uint32_t reserved_padding0[reserved_padding0_length] = {};
    uint32_t GITREF_RP2040;
    /* Methods. */

    inline uint16_t get_CHIP_ID_MANUFACTURER() volatile
    {
        return (CHIP_ID >> 0u) & 0b111111111111u;
    }

    inline uint16_t get_CHIP_ID_PART() volatile
    {
        return (CHIP_ID >> 12u) & 0b1111111111111111u;
    }

    inline uint8_t get_CHIP_ID_REVISION() volatile
    {
        return (CHIP_ID >> 28u) & 0b1111u;
    }

    inline void get_CHIP_ID(uint16_t &MANUFACTURER, uint16_t &PART,
                            uint8_t &REVISION) volatile
    {
        uint32_t curr = CHIP_ID;

        MANUFACTURER = (curr >> 0u) & 0b111111111111u;
        PART = (curr >> 12u) & 0b1111111111111111u;
        REVISION = (curr >> 28u) & 0b1111u;
    }

    inline bool get_PLATFORM_FPGA() volatile
    {
        return PLATFORM & (1u << 0u);
    }

    inline bool get_PLATFORM_ASIC() volatile
    {
        return PLATFORM & (1u << 1u);
    }

    inline void get_PLATFORM(bool &FPGA, bool &ASIC) volatile
    {
        uint32_t curr = PLATFORM;

        FPGA = curr & (1u << 0u);
        ASIC = curr & (1u << 1u);
    }
};

static_assert(sizeof(sysinfo) == sysinfo::size);

static volatile sysinfo *const SYSINFO =
    reinterpret_cast<sysinfo *>(0x40000000);

}; // namespace RP2040