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