Ядерные таймеры (Virtual timer)

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Ядерные таймеры (Virtual timer)

Сообщение БудДен » 29.10.22 19:56

Код: Выделить всё

static void arch_timer_switch_cpu_to_phys(void *dummy)
{
	u32 cvall, cvalh, val;
	pr_info("Switching CPU%d to physical timer\n", smp_processor_id());
	asm volatile("mrrc p15, 3, %0, %1, c14	\n" /* Read CNTV_CVAL */
		     "mcrr p15, 2, %0, %1, c14	\n" /* Write CNTP_CVAL */
		     : "=r" (cvall), "=r" (cvalh));
	isb();
	
	val = arch_timer_virt_reg_read(ARCH_TIMER_REG_CTRL);
	arch_timer_virt_reg_write(ARCH_TIMER_REG_CTRL,
				  val & ~ARCH_TIMER_CTRL_ENABLE);
	arch_timer_phys_reg_write(ARCH_TIMER_REG_CTRL, val);
	*__this_cpu_ptr(arch_timer_reg_ops) = &arch_timer_phys_ops;
}

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Ядерные таймеры (Virtual timer)

Сообщение БудДен » 29.10.22 23:16

https://github.com/tianocore/edk2/blob/ ... rSupport.S - тут есть коды mcr, как читать-писать разные регистры.

Ответить