Фрагмент системной страницы, характеризующий сведения об одиночном процессоре
#include <sys/syspage.h>
struct cpuinfo_entry {
uint32_t cpu;
uint32_t speed;
uint32_t flags;
uint32_t spare[4];
uint16_t name;
uint8_t ins_cache;
uint8_t data_cache;
};
Структура содержит информацию системной страницы, характеризующую сведения об одиночном процессоре и включает следующие поля:
- cpu
- Число, которое соответствует типу процессора и зависит от его архитектуры. Для процессоров семейства x86 оно совпадает с номером микросхемы (например, 486 или 586), а для MIPS и PowerPC заполняется содержимым регистров версии.
- speed
- Содержит скорость процессора в мегагерцах. Например, для процессора MIPS R4000 с частотой 300 МГц значение этого параметра равно 300.
- flags
- Поле содержит битовую карту функций микросхемы процессора. Префикс именованной константы указывает, к какому семейству процессоров она применяется (например, константа с префиксом
PPC_
применяется к процессорам PowerPC). Если префикс отсутствует (указан префикс CPU_
), константа применима ко всем процессорам. Доступны следующие константы: - CPU_FLAG_FPU
- Имеется блок вычислений с плавающей запятой.
- CPU_FLAG_MMU
- Включенный блок управления памятью (т.е. ЦП работает в виртуальном режиме адресации).
- X86_CPU_CPUID
- Поддержка инструкции CPUID.
- X86_CPU_RDTSC
- Поддержка инструкции RDTSC.
- X86_CPU_INVLPG
- Поддержка инструкции INVLPG.
- X86_CPU_WP
- Наличие бита WP в регистрe CR0.
- X86_CPU_BSWAP
- Поддержка инструкции BSWAP.
- X86_CPU_MMX
- Поддержка инструкций MMX.
- X86_CPU_CMOV
- Поддержка инструкций CMOVxx.
- X86_CPU_PSE
- Поддержка расширенного размера страниц памяти.
- X86_CPU_PGE
- Поддержка глобальных привязок буфера быстрого преобразования адресов (TLB global mappings).
- X86_CPU_MTRR
- Поддержка регистров определения типов памяти (Memory Type Range Register, MTRR).
- X86_CPU_SEP
- Поддержка инструкций SYSENTER/SYSEXIT.
- X86_CPU_SIMD
- Поддержка инструкций SIMD.
- X86_CPU_FXSR
- Поддержка инструкций FXSAVE/FXRSTOR.
- X86_CPU_PAE
- Поддержка расширенной адресации.
- X86_CPU_NX
- Поддержка NX PTE бита.
- X86_CPU_SSE2
- Поддержка инструкций SSE2.
- PPC_CPU_EAR
- Поддержка регистра внешнего адреса (External Address Register, EAR).
- PPC_CPU_HW_HT
- CPU использует аппаратную хеш-таблицу.
- PPC_CPU_HW_POW
- Поддержка управления питанием.
- PPC_CPU_FPREGS
- Поддержка регистров FPU (вычисления с плавающей точкой).
- PPC_CPU_SW_HT
- CPU использует программную хеш-таблицу.
- PPC_CPU_ALTIVEC
- Поддержка инструкций AltiVec SIMD (аналог SSE и SSE2).
- PPC_CPU_XAEN
- Поддержка расширенной адресации.
- PPC_CPU_SW_TLBSYNC
- Синхронизация буферов быстрого преобразования адресов (TLB sync).
- PPC_CPU_TLB_SHADOW
- Имется shadow-регистры в обработчике буферов быстрого преобразования адресов (TLB handler).
- PPC_CPU_DCBZ_NONCOHERENT
- Инструкция DCBZ (Data Cache Block set to Zero) имеет проблемы при работе с несколькими CPU.
- PPC_CPU_SPE
- Поддержка инструкций SPE (Signal Processing Engine).
- PPC_CPU_NO_MFTB
- Отсутствие поддержки MFTB[U].
- PPC_CPU_EXTRA_BAT
- Поддержка регистров BAT.
- PPC_CPU_STWCX_BUG
- Требуется применение errata для обхода (workaround) аппаратных проблем с непарной инструкцией "stwcx." при переключении контекстов ядром.
- PPC_CPU_XASPACE
- Поддержка инструкций Power ISA 2.06 External Process ID Registers, с помощью которых ядро оптимизирует передачу сообщений между различными адресными пространствами. Флаг установлен для процессора Freescale e500mc, поскольку в настоящее время другие процессоры не поддерживают эту функцию. Его установка для них приведёт к непредсказуемым негативным результатам.
- MIPS_CPU_FLAG_PFNTOPSHIFT_MASK
- Используется для создания записей в буфере быстрого преобразования адресов (TLB).
- MIPS_CPU_FLAG_MAX_PGSIZE_MASK
- Маска максимального размера страниц памяти.
- MIPS_CPU_FLAGS_MAX_PGSIZE_SHIFT
- Сдвиг для маски максимального размера страниц памяти.
- MIPS_CPU_FLAG_L2_PAGE_CACHE_OPS
- Поддержка кеша 2-го уровня.
- MIPS_CPU_FLAG_64BIT
- Поддержка 64-разрядных регистров.
- MIPS_CPU_FLAG_128BIT
- Поддержка 128-разрядных регистров.
- MIPS_CPU_FLAG_SUPERVISOR
- Поддержка режима супевизора.
- MIPS_CPU_FLAG_NO_WIRED
- Отсутствие регистра Wired.
- MIPS_CPU_FLAG_NO_COUNT
- Отсутствие регистра Count.
- MIPS_CPU_FLAG_EIC
- CPU поддерживает и сконфигурирован в режиме EIC.
- ARM_CPU_FLAG_XSCALE_CP0
- Поддержка сопроцессора Xscale CP0 MAC.
- ARM_CPU_FLAG_V6
- AARCH32_CPU_FLAG_V6
- Процессорная архитектура соответствует ARMv6 (в противном случае это ARMv7, должен быть установлен флаг ARM_CPU_FLAG_V7).
- ARM_CPU_FLAG_V6_ASID
- Поддержка поля ARMv6 MMU ASID (Address Space IDentifier) для управления адресными пространствами процессов.
- ARM_CPU_FLAG_SMP
- AARCH32_CPU_FLAG_SMP
- AARCH64_CPU_FLAG_SMP
- Поддержка мультипроцессорности.
- ARM_CPU_FLAG_V7_MP
- AARCH32_CPU_FLAG_V7_MP
- Поддержка мультипроцессорных расширений архитектуры ARMv7.
- ARM_CPU_FLAG_V7
- AARCH32_CPU_FLAG_V7
- Процессорная архитектура соответствует ARMv7 (в противном случае это ARMv6, должен быть установлен флаг ARM_CPU_FLAG_V6).
- ARM_CPU_FLAG_NEON
- AARCH32_CPU_FLAG_NEON
- AARCH64_CPU_FLAG_SIMD
- Поддержка SIMD-сопроцессора NEON.
- ARM_CPU_FLAG_WMMX2
- Поддержка SIMD-сопроцессора iWMMX2.
- ARM_CPU_FLAG_V7_MP_ERRATA
- Требуется обход (workaround) проблем с SMP TLB.
- ARM_CPU_FLAG_CC_INCR_BIT_32
- AARCH32_CPU_FLAG_CC_INCR_32
- AARCH64_CPU_FLAG_CC_INCR_32
- Счетчик инструкций процессора 32-х разрядный.
- AARCH32_CPU_FLAG_IDIV
- Поддержка инструкций UDIV и SDIV.
- AARCH32_CPU_FLAG_VFP_D32
- Поддержка сопроцессором VFP (Vector Floating-Point) 32 double-регистров.
- AARCH64_CPU_FLAG_S32G_TLB_ERRATA
- При S32G va > 2TB необходимо использование регистра tlbi vmalle1is.
- AARCH64_CPU_FLAG_IMX8QM_TLB_ERRATA
- Необходимо применение TLD errata для i.MX8 (Board Rev < 2.0(B0)).
- AARCH64_CPU_SPECTRE_V2_FIX
- Необходимо применение workaround для уязвимости Spectre.
- AARCH64_CPU_SPECTRE_V2_MMU
- Необходимо применение workaround на уровне MMU для уязвимости Spectre.
- AARCH64_CPU_ACTLR
- Поддержка ACTLR (Auxiliary Control Register).
- AARCH64_CPU_FLAG_LSE
- Поддержка расширений LSE (Large System Extensions).
- AARCH64_CPU_FLAG_VHE
- Поддержка расширений VHE (Virtualization Host Extensions).
- E2K_CPU_CPUID
- Поддержка инструкции CPUID.
- E2K_CPU_4MB_PAGES
- Поддержка страниц памяти размером 4Mb.
- E2K_CPU_QUADRO_STRD_HWBUG
- Применяется обход аппаратной проблемы "strd,5 (fmt==5) loses tags".
- E2K_CPU_MC_SOFTRESET_HWBUG
- Применяется обход проблемы контроллера памяти при программном сбросе.
- E2K_CPU_2MB_PAGES
- Поддержка страниц памяти размером 2Mb.
- E2K_CPU_MP
- SMP режим требует дополнительного сброса ICACHE.
- E2K_CPU_MMU_PT_V6
- Поддержка нового формата таблицы страниц MMU (V6 page table format).
- name
- Содержит индекс элемента strings системной страницы. Строка символов, которая соответствует указанному индексу, является именем системы в формате ASCII с нулевым символом в конце (например, R4000 для процессора MIPS R4000).
- ins_cache
- Содержит индекс в массиве cacheattr системной страницы. Этот индекс указывает на первое определение в списке для кеша инструкций.
- data_cache
- Содержит индекс в массиве cacheattr системной страницы. Этот индекс указывает на первое определение в списке для кеша данных.
ЗОСРВ «Нейтрино»
struct syspage_entry
Руководство по разработке модуля startup
Предыдущий раздел: Описание API системной библиотеки