41 #define LINE_WIDTH_MAX 80 42 #define HW_VER_STRING "Revision" 44 #define PERIPH_BASE_RPI 0x20000000 45 #define PERIPH_BASE_RPI2 0x3f000000 46 #define PERIPH_BASE_RPI4 0xfe000000 48 #define VIDEOCORE_BASE_RPI 0x40000000 49 #define VIDEOCORE_BASE_RPI2 0xc0000000 51 #define RPI_MANUFACTURER_MASK (0xf << 16) 52 #define RPI_WARRANTY_MASK (0x3 << 24) 63 .desc =
"Pi 400 - 4GB v1.0" 70 .desc =
"Pi 400 - 4GB v1.1" 80 .desc =
"Pi 4 Model B - 1GB v1.1" 87 .desc =
"Pi 4 Model B - 2GB v.1.1" 94 .desc =
"Pi 4 Model B - 4GB v1.1" 101 .desc =
"Pi 4 Model B - 1GB v1.2" 108 .desc =
"Pi 4 Model B - 2GB v.1.2" 115 .desc =
"Pi 4 Model B - 4GB v1.2" 122 .desc =
"Pi 4 Model B - 2GB v1.4" 129 .desc =
"Pi 4 Model B - 8GB v1.4" 136 .desc =
"Pi 4 Model B - 4GB v1.4" 143 .desc =
"Pi 4 Model B - 1GB v1.5" 150 .desc =
"Pi 4 Model B - 2GB v1.5" 157 .desc =
"Pi 4 Model B - 4GB v1.5" 164 .desc =
"Pi 4 Model B - 8GB v1.5" 174 .desc =
"Compute Module 4 v1.0 eMMC" 181 .desc =
"Compute Module 4 v1.0 Lite" 188 .desc =
"Compute Module 4 v1.0 WiFi" 195 .desc =
"Compute Module 4 v1.0 WiFi 8GB" 323 .desc =
"Compute Module 1",
330 .desc =
"Compute Module 1",
341 .desc =
"Pi Zero v1.2",
348 .desc =
"Pi Zero v1.3",
355 .desc =
"Pi Zero v1.3",
362 .desc =
"Pi Zero W v1.1",
369 .desc =
"Pi Zero W v1.1",
380 .desc =
"Pi Zero 2 W v1.0",
485 .desc =
"Model 3 A+",
496 .desc =
"Compute Module 3/L3",
506 .desc =
"Compute Module 3+",
522 FILE *
f = fopen(
"/proc/device-tree/system/linux,revision",
"r");
527 size_t read = fread(&rev, 1,
sizeof(uint32_t), f);
528 if (read !=
sizeof(uint32_t))
530 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 534 for (i = 0; i < (
sizeof(
rpi_hw_info) /
sizeof(rpi_hw_info[0])); i++)
536 uint32_t hwver = rpi_hw_info[i].
hwver;
539 result = &rpi_hw_info[i];
545 FILE *f = fopen(
"/proc/cpuinfo",
"r");
559 substr = strstr(line,
": ");
566 rev = strtoul(&substr[1], NULL, 16);
572 for (i = 0; i < (
sizeof(
rpi_hw_info) /
sizeof(rpi_hw_info[0])); i++)
574 uint32_t hwver = rpi_hw_info[i].
hwver;
582 result = &rpi_hw_info[i];
const rpi_hw_t * rpi_hw_detect(void)
static const rpi_hw_t rpi_hw_info[]
#define RPI_WARRANTY_MASK
#define RPI_HWVER_TYPE_PI1
#define VIDEOCORE_BASE_RPI
#define RPI_MANUFACTURER_MASK
#define VIDEOCORE_BASE_RPI2
#define RPI_HWVER_TYPE_PI4
#define RPI_HWVER_TYPE_PI2