1/* 2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * @OSF_COPYRIGHT@ 30 */ 31/* 32 */ 33 34/* 35 * Olivetti Mach Console driver v0.0 36 * Copyright Ing. C. Olivetti & C. S.p.A. 1988, 1989 37 * All rights reserved. 38 * 39 */ 40/* 41 * Copyright 1988, 1989 by Olivetti Advanced Technology Center, Inc., 42 * Cupertino, California. 43 * 44 * All Rights Reserved 45 * 46 * Permission to use, copy, modify, and distribute this software and 47 * its documentation for any purpose and without fee is hereby 48 * granted, provided that the above copyright notice appears in all 49 * copies and that both the copyright notice and this permission notice 50 * appear in supporting documentation, and that the name of Olivetti 51 * not be used in advertising or publicity pertaining to distribution 52 * of the software without specific, written prior permission. 53 * 54 * OLIVETTI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 55 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, 56 * IN NO EVENT SHALL OLIVETTI BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 57 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 58 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 59 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUR OF OR IN CONNECTION 60 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 61 * 62 * 63 * Copyright 1988, 1989 by Intel Corporation, Santa Clara, California. 64 * 65 * All Rights Reserved 66 * 67 * Permission to use, copy, modify, and distribute this software and 68 * its documentation for any purpose and without fee is hereby 69 * granted, provided that the above copyright notice appears in all 70 * copies and that both the copyright notice and this permission notice 71 * appear in supporting documentation, and that the name of Intel 72 * not be used in advertising or publicity pertaining to distribution 73 * of the software without specific, written prior permission. 74 * 75 * INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 76 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, 77 * IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 78 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 79 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 80 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 81 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 82 */ 83 84/* $ Header: $ */ 85 86#include <pexpert/pexpert.h> 87 88extern void cpu_shutdown(void); 89 90void kdreboot(void); 91 92/* 93 * Common I/O ports. 94 */ 95#define K_RDWR 0x60 /* keyboard data & cmds (read/write) */ 96#define K_STATUS 0x64 /* keybd status (read-only) */ 97#define K_CMD 0x64 /* keybd ctlr command (write-only) */ 98 99/* 100 * Bit definitions for K_STATUS port. 101 */ 102#define K_OBUF_FUL 0x01 /* output (from keybd) buffer full */ 103#define K_IBUF_FUL 0x02 /* input (to keybd) buffer full */ 104#define K_SYSFLAG 0x04 /* "System Flag" */ 105#define K_CMD_DATA 0x08 /* 1 = input buf has cmd, 0 = data */ 106#define K_KBD_INHBT 0x10 /* 0 if keyboard inhibited */ 107#define K_XMT_TIMEOUT 0x20 /* Transmit time out */ 108#define K_RCV_TIMEOUT 0x40 /* Receive time out */ 109 110/* 111 * Keyboard controller commands (sent to K_CMD port). 112 */ 113#define K_CMD_READ 0x20 /* read controller command byte */ 114#define K_CMD_WRITE 0x60 /* write controller command byte */ 115#define K_CMD_TEST 0xab /* test interface */ 116#define K_CMD_DUMP 0xac /* diagnostic dump */ 117#define K_CMD_DISBLE 0xad /* disable keyboard */ 118#define K_CMD_ENBLE 0xae /* enable keyboard */ 119#define K_CMD_RDKBD 0xc4 /* read keyboard ID */ 120#define K_CMD_ECHO 0xee /* used for diagnostic testing */ 121#define K_CMD_RESET 0xfe /* issue a system reset */ 122 123/* 124 * kd_sendcmd 125 * 126 * This function sends a command byte to the keyboard command 127 * port, but first waits until the input/output data buffer is 128 * clear before sending the data. 129 * 130 */ 131 132static void 133kd_sendcmd(unsigned char ch) 134{ 135 while (inb(K_STATUS) & K_IBUF_FUL); 136 outb(K_CMD, ch); 137} 138 139/* 140 * kdreboot 141 * 142 * Send a command to the motherboard keyboard controller to 143 * issue a hardware reset. 144 */ 145 146void 147kdreboot(void) 148{ 149 kd_sendcmd( K_CMD_RESET ); 150 151 /* 152 * DRAT. We're still here. Let's try a "CPU shutdown", which consists 153 * of clearing the IDTR and causing an exception. It's in locore.s 154 */ 155 cpu_shutdown(); 156 /*NOTREACHED*/ 157} 158