ladybird/Kernel/Prekernel/Arch/aarch64/MainIdRegister.h
Nico Weber 3c6ad4c7db Kernel: Add a class to wrap aarch64 MIDR_EL1
We'll need part_num() to determine the MMIO address base. It's
0x3F000000 on rpi3 but 0xFE000000 on rpi4.
2021-09-12 17:26:41 +00:00

37 lines
766 B
C++

/*
* Copyright (c) 2021, Nico Weber <thakis@chromium.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
namespace Prekernel {
class MainIdRegister {
public:
MainIdRegister();
enum Implementer {
ArmLimited = 0x41,
};
unsigned implementer() const { return (m_value >> 24) & 0xFF; }
unsigned variant() const { return (m_value >> 20) & 0xF; }
unsigned architecture() const { return (m_value >> 16) & 0xF; }
enum PartNum {
RaspberryPi1 = 0xB76,
RaspberryPi2 = 0xC07,
RaspberryPi3 = 0xD03,
RaspberryPi4 = 0xD08,
};
unsigned part_num() const { return (m_value >> 4) & 0xFFF; }
unsigned revision() const { return m_value & 0xF; }
private:
unsigned int m_value;
};
}