]> git.saurik.com Git - apple/xnu.git/blame - pexpert/i386/kd.c
xnu-1228.15.4.tar.gz
[apple/xnu.git] / pexpert / i386 / kd.c
CommitLineData
1c79356b
A
1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
2d21ac55 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
1c79356b 5 *
2d21ac55
A
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.
8f6c56a5 14 *
2d21ac55
A
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
8f6c56a5
A
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
2d21ac55
A
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.
8f6c56a5 25 *
2d21ac55 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
1c79356b
A
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
0b4e3aa0 86#include <pexpert/pexpert.h>
1c79356b 87
91447636
A
88extern void cpu_shutdown(void);
89
91447636
A
90void kdreboot(void);
91
1c79356b 92/*
0b4e3aa0 93 * Common I/O ports.
1c79356b 94 */
0b4e3aa0
A
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) */
1c79356b
A
98
99/*
0b4e3aa0 100 * Bit definitions for K_STATUS port.
1c79356b 101 */
0b4e3aa0
A
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 */
1c79356b 109
0b4e3aa0
A
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 */
1c79356b 122
1c79356b 123/*
0b4e3aa0 124 * kd_sendcmd
1c79356b 125 *
0b4e3aa0
A
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.
1c79356b 129 *
1c79356b
A
130 */
131
0b4e3aa0
A
132static void
133kd_sendcmd(unsigned char ch)
1c79356b 134{
0b4e3aa0
A
135 while (inb(K_STATUS) & K_IBUF_FUL);
136 outb(K_CMD, ch);
1c79356b
A
137}
138
1c79356b 139/*
0b4e3aa0 140 * kdreboot
1c79356b 141 *
0b4e3aa0
A
142 * Send a command to the motherboard keyboard controller to
143 * issue a hardware reset.
1c79356b
A
144 */
145
1c79356b
A
146void
147kdreboot(void)
148{
0b4e3aa0 149 kd_sendcmd( K_CMD_RESET );
1c79356b 150
0b4e3aa0
A
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*/
1c79356b 157}