Synchronize with sys/i386/isa/syscons.c and syscons.h revisions 1.219

and 1.30, respectively.
This commit is contained in:
kato 1997-06-30 10:00:47 +00:00
parent ff5923046a
commit 2dca27a4d2
2 changed files with 37 additions and 22 deletions

View File

@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: syscons.c,v 1.40 1997/05/17 11:52:26 kato Exp $
* $Id: syscons.c,v 1.41 1997/06/23 09:31:03 kato Exp $
*/
#include "sc.h"
@ -598,26 +598,40 @@ sckbdprobe(int unit, int flags)
printf("sc%d: keyboard scancode set %d\n", unit, codeset);
#endif /* DETECT_XT_KEYBOARD */
/* reset keyboard hardware */
if (!reset_kbd(sc_kbdc)) {
/* KEYBOARD ERROR
* Keyboard reset may fail either because the keyboard doen't exist,
* or because the keyboard doesn't pass the self-test, or the keyboard
* controller on the motherboard and the keyboard somehow fail to
* shake hands. It is just possible, particularly in the last case,
* that the keyoard controller may be left in a hung state.
* test_controller() and test_kbd_port() appear to bring the keyboard
* controller back (I don't know why and how, though.)
*/
empty_both_buffers(sc_kbdc, 10);
test_controller(sc_kbdc);
test_kbd_port(sc_kbdc);
/* We could disable the keyboard port and interrupt... but,
* the keyboard may still exist (see above).
*/
if (bootverbose)
printf("sc%d: failed to reset the keyboard.\n", unit);
goto fail;
if (flags & KBD_NORESET) {
write_kbd_command(sc_kbdc, KBDC_ECHO);
if (read_kbd_data(sc_kbdc) != KBD_ECHO) {
empty_both_buffers(sc_kbdc, 10);
test_controller(sc_kbdc);
test_kbd_port(sc_kbdc);
if (bootverbose)
printf("sc%d: failed to get response from the keyboard.\n",
unit);
goto fail;
}
} else {
/* reset keyboard hardware */
if (!reset_kbd(sc_kbdc)) {
/* KEYBOARD ERROR
* Keyboard reset may fail either because the keyboard doen't
* exist, or because the keyboard doesn't pass the self-test,
* or the keyboard controller on the motherboard and the keyboard
* somehow fail to shake hands. It is just possible, particularly
* in the last case, that the keyoard controller may be left
* in a hung state. test_controller() and test_kbd_port() appear
* to bring the keyboard controller back (I don't know why and
* how, though.)
*/
empty_both_buffers(sc_kbdc, 10);
test_controller(sc_kbdc);
test_kbd_port(sc_kbdc);
/* We could disable the keyboard port and interrupt... but,
* the keyboard may still exist (see above).
*/
if (bootverbose)
printf("sc%d: failed to reset the keyboard.\n", unit);
goto fail;
}
}
/*

View File

@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: syscons.h,v 1.12 1997/02/22 09:43:51 peter Exp $
* $Id: syscons.h,v 1.13 1997/05/17 11:52:26 kato Exp $
*/
#ifndef _PC98_PC98_SYSCONS_H_
@ -71,6 +71,7 @@
#define CHAR_CURSOR 0x00004
#define DETECT_KBD 0x00008
#define XT_KEYBD 0x00010
#define KBD_NORESET 0x00020
/* attribute flags */
#define NORMAL_ATTR 0x00