The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/pexpert/i386/kd.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 2ef7a916e1412ecb2034a0bb8694228f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.