cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

reset.c (1045B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Reset a Jazz machine.
      4 *
      5 * We don't trust the firmware so we do it the classic way by poking and
      6 * stabbing at the keyboard controller ...
      7 */
      8#include <linux/jiffies.h>
      9#include <asm/jazz.h>
     10
     11#define KBD_STAT_IBF		0x02	/* Keyboard input buffer full */
     12
     13static void jazz_write_output(unsigned char val)
     14{
     15	int status;
     16
     17	do {
     18		status = jazz_kh->command;
     19	} while (status & KBD_STAT_IBF);
     20	jazz_kh->data = val;
     21}
     22
     23static void jazz_write_command(unsigned char val)
     24{
     25	int status;
     26
     27	do {
     28		status = jazz_kh->command;
     29	} while (status & KBD_STAT_IBF);
     30	jazz_kh->command = val;
     31}
     32
     33static unsigned char jazz_read_status(void)
     34{
     35	return jazz_kh->command;
     36}
     37
     38static inline void kb_wait(void)
     39{
     40	unsigned long start = jiffies;
     41	unsigned long timeout = start + HZ/2;
     42
     43	do {
     44		if (! (jazz_read_status() & 0x02))
     45			return;
     46	} while (time_before_eq(jiffies, timeout));
     47}
     48
     49void jazz_machine_restart(char *command)
     50{
     51	while(1) {
     52		kb_wait();
     53		jazz_write_command(0xd1);
     54		kb_wait();
     55		jazz_write_output(0x00);
     56	}
     57}