linux/arch/mips/jazz/reset.c
<<
>>
Prefs
   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}
  58