diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-07 19:38:55 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-12 07:09:11 +0200 |
commit | b46f943c56a3bc5fafaa2ec475577da6fa8f3475 (patch) | |
tree | 7cc3db0cb7b818cc537addb1d225dc61c4898cf7 /c | |
parent | bsp/beatnik: Avoid RTEMS_RELLDFLAGS (diff) | |
download | rtems-b46f943c56a3bc5fafaa2ec475577da6fa8f3475.tar.bz2 |
bsp/motorola_powerpc: Move polled_io.c
This file was used by this BSP only. Avoid RTEMS_RELLDFLAGS.
This patch is a part of the BSP source reorganization.
Update #3285.
Diffstat (limited to 'c')
5 files changed, 2 insertions, 1597 deletions
diff --git a/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am b/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am index 75e4332284..4fd24a3978 100644 --- a/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am +++ b/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am @@ -54,14 +54,8 @@ librtemsbsp_a_SOURCES += ../../shared/tod.c ../../powerpc/shared/tod/todcfg.c # pclock librtemsbsp_a_SOURCES += ../../powerpc/shared/clock/p_clock.c -# Needs conditional compilation -polledIO_CPPFLAGS = -DSTATIC_LOG_ALLOC -noinst_PROGRAMS += polledIO.rel -polledIO_rel_SOURCES = ../../powerpc/shared/console/polled_io.c -polledIO_rel_CPPFLAGS = $(AM_CPPFLAGS) $(polledIO_CPPFLAGS) -polledIO_rel_LDFLAGS = $(RTEMS_RELLDFLAGS) - # console +librtemsbsp_a_SOURCES += ../../../../../../bsps/powerpc/motorola_powerpc/dev/polled_io.c librtemsbsp_a_SOURCES += ../../powerpc/shared/console/uart.c librtemsbsp_a_SOURCES += ../../powerpc/shared/console/console.c librtemsbsp_a_SOURCES += ../../powerpc/shared/console/consoleIo.h @@ -110,9 +104,6 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/powerpc/shared/mmu/mmuAsm.S librtemsbsp_a_SOURCES += ../../../../../../bsps/powerpc/shared/mmu/pte121.c librtemsbsp_a_SOURCES += ../../../../../../bsps/powerpc/shared/irq/ppc-irq-legacy.c -librtemsbsp_a_LIBADD = polledIO.rel - - include $(top_srcdir)/../../../../automake/local.am include $(srcdir)/../../../../../../bsps/shared/shared-sources.am include $(top_srcdir)/../../../../automake/subdirs.am diff --git a/c/src/lib/libbsp/powerpc/motorola_powerpc/bootloader/Makefile.am b/c/src/lib/libbsp/powerpc/motorola_powerpc/bootloader/Makefile.am index 97f4925f0e..ba22593785 100644 --- a/c/src/lib/libbsp/powerpc/motorola_powerpc/bootloader/Makefile.am +++ b/c/src/lib/libbsp/powerpc/motorola_powerpc/bootloader/Makefile.am @@ -13,7 +13,7 @@ bootloader_SOURCES = ../../../powerpc/shared/bootloader/head.S \ ../../../powerpc/shared/bootloader/zlib.c \ ../../../powerpc/shared/bootloader/mm.c \ ../../../powerpc/shared/bootloader/em86.c \ - ../../../powerpc/shared/console/polled_io.c \ + ../../../../../../../bsps/powerpc/motorola_powerpc/dev/polled_io.c \ ../../../powerpc/shared/bootloader/lib.c \ ../../../powerpc/shared/bootloader/bootldr.h \ ../../../powerpc/shared/bootloader/zlib.h \ diff --git a/c/src/lib/libbsp/powerpc/shared/console/console.inl b/c/src/lib/libbsp/powerpc/shared/console/console.inl deleted file mode 100644 index 177444e870..0000000000 --- a/c/src/lib/libbsp/powerpc/shared/console/console.inl +++ /dev/null @@ -1,49 +0,0 @@ -/* inline routines for console i/o - * - * The purpose of this file is to provide generic inline functions, - * i.e. not using hardcoded base addresses. These are provided by - * the BSP header. - */ - -#include <bsp.h> -#include <stdint.h> - -#define INL_IN_DECL(name,base) \ -static inline unsigned char name(int off) \ -{ \ - return in_8((uint8_t*)(((unsigned long)base) + off)); \ -} - -#define INL_OUT_DECL(name,base) \ -static inline void name(int off, unsigned int val) \ -{ \ - out_8((uint8_t*)(((unsigned long)base) + off), val); \ -} - -#ifdef BSP_UART_IOBASE_COM1 -INL_IN_DECL(com1_inb, BSP_UART_IOBASE_COM1) -INL_OUT_DECL(com1_outb, BSP_UART_IOBASE_COM1) -#endif -#ifdef BSP_UART_IOBASE_COM2 -INL_IN_DECL(com2_inb, BSP_UART_IOBASE_COM2) -INL_OUT_DECL(com2_outb, BSP_UART_IOBASE_COM2) -#endif - -#if defined(BSP_CONSOLE_PORT) -#if (BSP_CONSOLE_PORT == BSP_UART_COM1) && defined(BSP_UART_IOBASE_COM1) -#define INL_CONSOLE_INB com1_inb -#define INL_CONSOLE_OUTB com1_outb -#elif (BSP_CONSOLE_PORT == BSP_UART_COM2) && defined(BSP_UART_IOBASE_COM2) -#define INL_CONSOLE_INB com2_inb -#define INL_CONSOLE_OUTB com2_outb -#endif -#endif - -#ifdef BSP_KBD_IOBASE -INL_IN_DECL(kbd_inb, BSP_KBD_IOBASE) -INL_OUT_DECL(kbd_outb, BSP_KBD_IOBASE) -#endif - -#ifdef BSP_VGA_IOBASE -INL_OUT_DECL(vga_outb, BSP_VGA_IOBASE) -#endif diff --git a/c/src/lib/libbsp/powerpc/shared/console/keyboard.h b/c/src/lib/libbsp/powerpc/shared/console/keyboard.h deleted file mode 100644 index 0a38d0136d..0000000000 --- a/c/src/lib/libbsp/powerpc/shared/console/keyboard.h +++ /dev/null @@ -1,430 +0,0 @@ -/* - * keyboard.h -- keyboard definitions. - * - * Copyright (C) 1999 Eric Valette. valette@crf.canon.fr - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifndef __LINUX_KEYBOARD_H -#define __LINUX_KEYBOARD_H - -#define KG_SHIFT 0 -#define KG_CTRL 2 -#define KG_ALT 3 -#define KG_ALTGR 1 -#define KG_SHIFTL 4 -#define KG_SHIFTR 5 -#define KG_CTRLL 6 -#define KG_CTRLR 7 -#define KG_CAPSSHIFT 8 - -#define NR_SHIFT 9 - -#define NR_KEYS 128 -#define MAX_NR_KEYMAPS 256 -/* This means 64Kb if all keymaps are allocated. Only the superuser - may increase the number of keymaps beyond MAX_NR_OF_USER_KEYMAPS. */ -#define MAX_NR_OF_USER_KEYMAPS 256 /* should be at least 7 */ - -#define MAX_NR_FUNC 256 /* max nr of strings assigned to keys */ - -#define KT_LATIN 0 /* we depend on this being zero */ -#define KT_LETTER 11 /* symbol that can be acted upon by CapsLock */ -#define KT_FN 1 -#define KT_SPEC 2 -#define KT_PAD 3 -#define KT_DEAD 4 -#define KT_CONS 5 -#define KT_CUR 6 -#define KT_SHIFT 7 -#define KT_META 8 -#define KT_ASCII 9 -#define KT_LOCK 10 -#define KT_SLOCK 12 - -#define K(t,v) (((t)<<8)|(v)) -#define KTYP(x) ((x) >> 8) -#define KVAL(x) ((x) & 0xff) - -#define K_F1 K(KT_FN,0) -#define K_F2 K(KT_FN,1) -#define K_F3 K(KT_FN,2) -#define K_F4 K(KT_FN,3) -#define K_F5 K(KT_FN,4) -#define K_F6 K(KT_FN,5) -#define K_F7 K(KT_FN,6) -#define K_F8 K(KT_FN,7) -#define K_F9 K(KT_FN,8) -#define K_F10 K(KT_FN,9) -#define K_F11 K(KT_FN,10) -#define K_F12 K(KT_FN,11) -#define K_F13 K(KT_FN,12) -#define K_F14 K(KT_FN,13) -#define K_F15 K(KT_FN,14) -#define K_F16 K(KT_FN,15) -#define K_F17 K(KT_FN,16) -#define K_F18 K(KT_FN,17) -#define K_F19 K(KT_FN,18) -#define K_F20 K(KT_FN,19) -#define K_FIND K(KT_FN,20) -#define K_INSERT K(KT_FN,21) -#define K_REMOVE K(KT_FN,22) -#define K_SELECT K(KT_FN,23) -#define K_PGUP K(KT_FN,24) /* PGUP is a synonym for PRIOR */ -#define K_PGDN K(KT_FN,25) /* PGDN is a synonym for NEXT */ -#define K_MACRO K(KT_FN,26) -#define K_HELP K(KT_FN,27) -#define K_DO K(KT_FN,28) -#define K_PAUSE K(KT_FN,29) -#define K_F21 K(KT_FN,30) -#define K_F22 K(KT_FN,31) -#define K_F23 K(KT_FN,32) -#define K_F24 K(KT_FN,33) -#define K_F25 K(KT_FN,34) -#define K_F26 K(KT_FN,35) -#define K_F27 K(KT_FN,36) -#define K_F28 K(KT_FN,37) -#define K_F29 K(KT_FN,38) -#define K_F30 K(KT_FN,39) -#define K_F31 K(KT_FN,40) -#define K_F32 K(KT_FN,41) -#define K_F33 K(KT_FN,42) -#define K_F34 K(KT_FN,43) -#define K_F35 K(KT_FN,44) -#define K_F36 K(KT_FN,45) -#define K_F37 K(KT_FN,46) -#define K_F38 K(KT_FN,47) -#define K_F39 K(KT_FN,48) -#define K_F40 K(KT_FN,49) -#define K_F41 K(KT_FN,50) -#define K_F42 K(KT_FN,51) -#define K_F43 K(KT_FN,52) -#define K_F44 K(KT_FN,53) -#define K_F45 K(KT_FN,54) -#define K_F46 K(KT_FN,55) -#define K_F47 K(KT_FN,56) -#define K_F48 K(KT_FN,57) -#define K_F49 K(KT_FN,58) -#define K_F50 K(KT_FN,59) -#define K_F51 K(KT_FN,60) -#define K_F52 K(KT_FN,61) -#define K_F53 K(KT_FN,62) -#define K_F54 K(KT_FN,63) -#define K_F55 K(KT_FN,64) -#define K_F56 K(KT_FN,65) -#define K_F57 K(KT_FN,66) -#define K_F58 K(KT_FN,67) -#define K_F59 K(KT_FN,68) -#define K_F60 K(KT_FN,69) -#define K_F61 K(KT_FN,70) -#define K_F62 K(KT_FN,71) -#define K_F63 K(KT_FN,72) -#define K_F64 K(KT_FN,73) -#define K_F65 K(KT_FN,74) -#define K_F66 K(KT_FN,75) -#define K_F67 K(KT_FN,76) -#define K_F68 K(KT_FN,77) -#define K_F69 K(KT_FN,78) -#define K_F70 K(KT_FN,79) -#define K_F71 K(KT_FN,80) -#define K_F72 K(KT_FN,81) -#define K_F73 K(KT_FN,82) -#define K_F74 K(KT_FN,83) -#define K_F75 K(KT_FN,84) -#define K_F76 K(KT_FN,85) -#define K_F77 K(KT_FN,86) -#define K_F78 K(KT_FN,87) -#define K_F79 K(KT_FN,88) -#define K_F80 K(KT_FN,89) -#define K_F81 K(KT_FN,90) -#define K_F82 K(KT_FN,91) -#define K_F83 K(KT_FN,92) -#define K_F84 K(KT_FN,93) -#define K_F85 K(KT_FN,94) -#define K_F86 K(KT_FN,95) -#define K_F87 K(KT_FN,96) -#define K_F88 K(KT_FN,97) -#define K_F89 K(KT_FN,98) -#define K_F90 K(KT_FN,99) -#define K_F91 K(KT_FN,100) -#define K_F92 K(KT_FN,101) -#define K_F93 K(KT_FN,102) -#define K_F94 K(KT_FN,103) -#define K_F95 K(KT_FN,104) -#define K_F96 K(KT_FN,105) -#define K_F97 K(KT_FN,106) -#define K_F98 K(KT_FN,107) -#define K_F99 K(KT_FN,108) -#define K_F100 K(KT_FN,109) -#define K_F101 K(KT_FN,110) -#define K_F102 K(KT_FN,111) -#define K_F103 K(KT_FN,112) -#define K_F104 K(KT_FN,113) -#define K_F105 K(KT_FN,114) -#define K_F106 K(KT_FN,115) -#define K_F107 K(KT_FN,116) -#define K_F108 K(KT_FN,117) -#define K_F109 K(KT_FN,118) -#define K_F110 K(KT_FN,119) -#define K_F111 K(KT_FN,120) -#define K_F112 K(KT_FN,121) -#define K_F113 K(KT_FN,122) -#define K_F114 K(KT_FN,123) -#define K_F115 K(KT_FN,124) -#define K_F116 K(KT_FN,125) -#define K_F117 K(KT_FN,126) -#define K_F118 K(KT_FN,127) -#define K_F119 K(KT_FN,128) -#define K_F120 K(KT_FN,129) -#define K_F121 K(KT_FN,130) -#define K_F122 K(KT_FN,131) -#define K_F123 K(KT_FN,132) -#define K_F124 K(KT_FN,133) -#define K_F125 K(KT_FN,134) -#define K_F126 K(KT_FN,135) -#define K_F127 K(KT_FN,136) -#define K_F128 K(KT_FN,137) -#define K_F129 K(KT_FN,138) -#define K_F130 K(KT_FN,139) -#define K_F131 K(KT_FN,140) -#define K_F132 K(KT_FN,141) -#define K_F133 K(KT_FN,142) -#define K_F134 K(KT_FN,143) -#define K_F135 K(KT_FN,144) -#define K_F136 K(KT_FN,145) -#define K_F137 K(KT_FN,146) -#define K_F138 K(KT_FN,147) -#define K_F139 K(KT_FN,148) -#define K_F140 K(KT_FN,149) -#define K_F141 K(KT_FN,150) -#define K_F142 K(KT_FN,151) -#define K_F143 K(KT_FN,152) -#define K_F144 K(KT_FN,153) -#define K_F145 K(KT_FN,154) -#define K_F146 K(KT_FN,155) -#define K_F147 K(KT_FN,156) -#define K_F148 K(KT_FN,157) -#define K_F149 K(KT_FN,158) -#define K_F150 K(KT_FN,159) -#define K_F151 K(KT_FN,160) -#define K_F152 K(KT_FN,161) -#define K_F153 K(KT_FN,162) -#define K_F154 K(KT_FN,163) -#define K_F155 K(KT_FN,164) -#define K_F156 K(KT_FN,165) -#define K_F157 K(KT_FN,166) -#define K_F158 K(KT_FN,167) -#define K_F159 K(KT_FN,168) -#define K_F160 K(KT_FN,169) -#define K_F161 K(KT_FN,170) -#define K_F162 K(KT_FN,171) -#define K_F163 K(KT_FN,172) -#define K_F164 K(KT_FN,173) -#define K_F165 K(KT_FN,174) -#define K_F166 K(KT_FN,175) -#define K_F167 K(KT_FN,176) -#define K_F168 K(KT_FN,177) -#define K_F169 K(KT_FN,178) -#define K_F170 K(KT_FN,179) -#define K_F171 K(KT_FN,180) -#define K_F172 K(KT_FN,181) -#define K_F173 K(KT_FN,182) -#define K_F174 K(KT_FN,183) -#define K_F175 K(KT_FN,184) -#define K_F176 K(KT_FN,185) -#define K_F177 K(KT_FN,186) -#define K_F178 K(KT_FN,187) -#define K_F179 K(KT_FN,188) -#define K_F180 K(KT_FN,189) -#define K_F181 K(KT_FN,190) -#define K_F182 K(KT_FN,191) -#define K_F183 K(KT_FN,192) -#define K_F184 K(KT_FN,193) -#define K_F185 K(KT_FN,194) -#define K_F186 K(KT_FN,195) -#define K_F187 K(KT_FN,196) -#define K_F188 K(KT_FN,197) -#define K_F189 K(KT_FN,198) -#define K_F190 K(KT_FN,199) -#define K_F191 K(KT_FN,200) -#define K_F192 K(KT_FN,201) -#define K_F193 K(KT_FN,202) -#define K_F194 K(KT_FN,203) -#define K_F195 K(KT_FN,204) -#define K_F196 K(KT_FN,205) -#define K_F197 K(KT_FN,206) -#define K_F198 K(KT_FN,207) -#define K_F199 K(KT_FN,208) -#define K_F200 K(KT_FN,209) -#define K_F201 K(KT_FN,210) -#define K_F202 K(KT_FN,211) -#define K_F203 K(KT_FN,212) -#define K_F204 K(KT_FN,213) -#define K_F205 K(KT_FN,214) -#define K_F206 K(KT_FN,215) -#define K_F207 K(KT_FN,216) -#define K_F208 K(KT_FN,217) -#define K_F209 K(KT_FN,218) -#define K_F210 K(KT_FN,219) -#define K_F211 K(KT_FN,220) -#define K_F212 K(KT_FN,221) -#define K_F213 K(KT_FN,222) -#define K_F214 K(KT_FN,223) -#define K_F215 K(KT_FN,224) -#define K_F216 K(KT_FN,225) -#define K_F217 K(KT_FN,226) -#define K_F218 K(KT_FN,227) -#define K_F219 K(KT_FN,228) -#define K_F220 K(KT_FN,229) -#define K_F221 K(KT_FN,230) -#define K_F222 K(KT_FN,231) -#define K_F223 K(KT_FN,232) -#define K_F224 K(KT_FN,233) -#define K_F225 K(KT_FN,234) -#define K_F226 K(KT_FN,235) -#define K_F227 K(KT_FN,236) -#define K_F228 K(KT_FN,237) -#define K_F229 K(KT_FN,238) -#define K_F230 K(KT_FN,239) -#define K_F231 K(KT_FN,240) -#define K_F232 K(KT_FN,241) -#define K_F233 K(KT_FN,242) -#define K_F234 K(KT_FN,243) -#define K_F235 K(KT_FN,244) -#define K_F236 K(KT_FN,245) -#define K_F237 K(KT_FN,246) -#define K_F238 K(KT_FN,247) -#define K_F239 K(KT_FN,248) -#define K_F240 K(KT_FN,249) -#define K_F241 K(KT_FN,250) -#define K_F242 K(KT_FN,251) -#define K_F243 K(KT_FN,252) -#define K_F244 K(KT_FN,253) -#define K_F245 K(KT_FN,254) -#define K_UNDO K(KT_FN,255) - -#define K_HOLE K(KT_SPEC,0) -#define K_ENTER K(KT_SPEC,1) -#define K_SH_REGS K(KT_SPEC,2) -#define K_SH_MEM K(KT_SPEC,3) -#define K_SH_STAT K(KT_SPEC,4) -#define K_BREAK K(KT_SPEC,5) -#define K_CONS K(KT_SPEC,6) -#define K_CAPS K(KT_SPEC,7) -#define K_NUM K(KT_SPEC,8) -#define K_HOLD K(KT_SPEC,9) -#define K_SCROLLFORW K(KT_SPEC,10) -#define K_SCROLLBACK K(KT_SPEC,11) -#define K_BOOT K(KT_SPEC,12) -#define K_CAPSON K(KT_SPEC,13) -#define K_COMPOSE K(KT_SPEC,14) -#define K_SAK K(KT_SPEC,15) -#define K_DECRCONSOLE K(KT_SPEC,16) -#define K_INCRCONSOLE K(KT_SPEC,17) -#define K_SPAWNCONSOLE K(KT_SPEC,18) -#define K_BARENUMLOCK K(KT_SPEC,19) - -#define K_ALLOCATED K(KT_SPEC,126) /* dynamically allocated keymap */ -#define K_NOSUCHMAP K(KT_SPEC,127) /* returned by KDGKBENT */ - -#define K_P0 K(KT_PAD,0) -#define K_P1 K(KT_PAD,1) -#define K_P2 K(KT_PAD,2) -#define K_P3 K(KT_PAD,3) -#define K_P4 K(KT_PAD,4) -#define K_P5 K(KT_PAD,5) -#define K_P6 K(KT_PAD,6) -#define K_P7 K(KT_PAD,7) -#define K_P8 K(KT_PAD,8) -#define K_P9 K(KT_PAD,9) -#define K_PPLUS K(KT_PAD,10) /* key-pad plus */ -#define K_PMINUS K(KT_PAD,11) /* key-pad minus */ -#define K_PSTAR K(KT_PAD,12) /* key-pad asterisk (star) */ -#define K_PSLASH K(KT_PAD,13) /* key-pad slash */ -#define K_PENTER K(KT_PAD,14) /* key-pad enter */ -#define K_PCOMMA K(KT_PAD,15) /* key-pad comma: kludge... */ -#define K_PDOT K(KT_PAD,16) /* key-pad dot (period): kludge... */ -#define K_PPLUSMINUS K(KT_PAD,17) /* key-pad plus/minus */ -#define K_PPARENL K(KT_PAD,18) /* key-pad left parenthesis */ -#define K_PPARENR K(KT_PAD,19) /* key-pad right parenthesis */ - -#define NR_PAD 20 - -#define K_DGRAVE K(KT_DEAD,0) -#define K_DACUTE K(KT_DEAD,1) -#define K_DCIRCM K(KT_DEAD,2) -#define K_DTILDE K(KT_DEAD,3) -#define K_DDIERE K(KT_DEAD,4) -#define K_DCEDIL K(KT_DEAD,5) - -#define NR_DEAD 6 - -#define K_DOWN K(KT_CUR,0) -#define K_LEFT K(KT_CUR,1) -#define K_RIGHT K(KT_CUR,2) -#define K_UP K(KT_CUR,3) - -#define K_SHIFT K(KT_SHIFT,KG_SHIFT) -#define K_CTRL K(KT_SHIFT,KG_CTRL) -#define K_ALT K(KT_SHIFT,KG_ALT) -#define K_ALTGR K(KT_SHIFT,KG_ALTGR) -#define K_SHIFTL K(KT_SHIFT,KG_SHIFTL) -#define K_SHIFTR K(KT_SHIFT,KG_SHIFTR) -#define K_CTRLL K(KT_SHIFT,KG_CTRLL) -#define K_CTRLR K(KT_SHIFT,KG_CTRLR) -#define K_CAPSSHIFT K(KT_SHIFT,KG_CAPSSHIFT) - -#define K_ASC0 K(KT_ASCII,0) -#define K_ASC1 K(KT_ASCII,1) -#define K_ASC2 K(KT_ASCII,2) -#define K_ASC3 K(KT_ASCII,3) -#define K_ASC4 K(KT_ASCII,4) -#define K_ASC5 K(KT_ASCII,5) -#define K_ASC6 K(KT_ASCII,6) -#define K_ASC7 K(KT_ASCII,7) -#define K_ASC8 K(KT_ASCII,8) -#define K_ASC9 K(KT_ASCII,9) -#define K_HEX0 K(KT_ASCII,10) -#define K_HEX1 K(KT_ASCII,11) -#define K_HEX2 K(KT_ASCII,12) -#define K_HEX3 K(KT_ASCII,13) -#define K_HEX4 K(KT_ASCII,14) -#define K_HEX5 K(KT_ASCII,15) -#define K_HEX6 K(KT_ASCII,16) -#define K_HEX7 K(KT_ASCII,17) -#define K_HEX8 K(KT_ASCII,18) -#define K_HEX9 K(KT_ASCII,19) -#define K_HEXa K(KT_ASCII,20) -#define K_HEXb K(KT_ASCII,21) -#define K_HEXc K(KT_ASCII,22) -#define K_HEXd K(KT_ASCII,23) -#define K_HEXe K(KT_ASCII,24) -#define K_HEXf K(KT_ASCII,25) - -#define NR_ASCII 26 - -#define K_SHIFTLOCK K(KT_LOCK,KG_SHIFT) -#define K_CTRLLOCK K(KT_LOCK,KG_CTRL) -#define K_ALTLOCK K(KT_LOCK,KG_ALT) -#define K_ALTGRLOCK K(KT_LOCK,KG_ALTGR) -#define K_SHIFTLLOCK K(KT_LOCK,KG_SHIFTL) -#define K_SHIFTRLOCK K(KT_LOCK,KG_SHIFTR) -#define K_CTRLLLOCK K(KT_LOCK,KG_CTRLL) -#define K_CTRLRLOCK K(KT_LOCK,KG_CTRLR) - -#define K_SHIFT_SLOCK K(KT_SLOCK,KG_SHIFT) -#define K_CTRL_SLOCK K(KT_SLOCK,KG_CTRL) -#define K_ALT_SLOCK K(KT_SLOCK,KG_ALT) -#define K_ALTGR_SLOCK K(KT_SLOCK,KG_ALTGR) -#define K_SHIFTL_SLOCK K(KT_SLOCK,KG_SHIFTL) -#define K_SHIFTR_SLOCK K(KT_SLOCK,KG_SHIFTR) -#define K_CTRLL_SLOCK K(KT_SLOCK,KG_CTRLL) -#define K_CTRLR_SLOCK K(KT_SLOCK,KG_CTRLR) - -#define NR_LOCK 8 - -#define MAX_DIACR 256 -#endif diff --git a/c/src/lib/libbsp/powerpc/shared/console/polled_io.c b/c/src/lib/libbsp/powerpc/shared/console/polled_io.c deleted file mode 100644 index 331515b9ef..0000000000 --- a/c/src/lib/libbsp/powerpc/shared/console/polled_io.c +++ /dev/null @@ -1,1107 +0,0 @@ -/* - * polled_io.c -- Basic input/output for early boot - * - * Copyright (C) 1998, 1999 Gabriel Paubert, paubert@iram.es - * - * Modified to compile in RTEMS development environment - * by Eric Valette - * - * Copyright (C) 1999 Eric Valette. valette@crf.canon.fr - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#include <rtems/system.h> -#include <sys/types.h> -#include <libcpu/byteorder.h> -#include <libcpu/mmu.h> -#include <libcpu/io.h> -#include <string.h> -#include <stdarg.h> -#include <bsp/consoleIo.h> -#include <bsp.h> -#include <libcpu/spr.h> - -#ifdef BSP_KBD_IOBASE -#define USE_KBD_SUPPORT -#endif -#ifdef BSP_VGA_IOBASE -#define USE_VGA_SUPPORT -#endif - -#ifdef USE_KBD_SUPPORT -#include "keyboard.h" -#endif -#include "console.inl" - -#ifdef __BOOT__ -extern void boot_udelay(uint32_t _microseconds); -void * __palloc(u_long); -void pfree(void *); -#else -#include <rtems/bspIo.h> -#endif - -#ifndef __BOOT__ -BSP_output_char_function_type BSP_output_char = debug_putc_onlcr; -BSP_polling_getchar_function_type BSP_poll_char = NULL; -#endif - -#ifdef USE_KBD_SUPPORT -unsigned short plain_map[NR_KEYS] = { - 0xf200, 0xf01b, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, - 0xf037, 0xf038, 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf07f, 0xf009, - 0xfb71, 0xfb77, 0xfb65, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69, - 0xfb6f, 0xfb70, 0xf05b, 0xf05d, 0xf201, 0xf702, 0xfb61, 0xfb73, - 0xfb64, 0xfb66, 0xfb67, 0xfb68, 0xfb6a, 0xfb6b, 0xfb6c, 0xf03b, - 0xf027, 0xf060, 0xf700, 0xf05c, 0xfb7a, 0xfb78, 0xfb63, 0xfb76, - 0xfb62, 0xfb6e, 0xfb6d, 0xf02c, 0xf02e, 0xf02f, 0xf700, 0xf30c, - 0xf703, 0xf020, 0xf207, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, - 0xf105, 0xf106, 0xf107, 0xf108, 0xf109, 0xf208, 0xf209, 0xf307, - 0xf308, 0xf309, 0xf30b, 0xf304, 0xf305, 0xf306, 0xf30a, 0xf301, - 0xf302, 0xf303, 0xf300, 0xf310, 0xf206, 0xf200, 0xf03c, 0xf10a, - 0xf10b, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf01c, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf118, 0xf601, 0xf602, 0xf117, 0xf600, 0xf119, 0xf115, 0xf116, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -unsigned short shift_map[NR_KEYS] = { - 0xf200, 0xf01b, 0xf021, 0xf040, 0xf023, 0xf024, 0xf025, 0xf05e, - 0xf026, 0xf02a, 0xf028, 0xf029, 0xf05f, 0xf02b, 0xf07f, 0xf009, - 0xfb51, 0xfb57, 0xfb45, 0xfb52, 0xfb54, 0xfb59, 0xfb55, 0xfb49, - 0xfb4f, 0xfb50, 0xf07b, 0xf07d, 0xf201, 0xf702, 0xfb41, 0xfb53, - 0xfb44, 0xfb46, 0xfb47, 0xfb48, 0xfb4a, 0xfb4b, 0xfb4c, 0xf03a, - 0xf022, 0xf07e, 0xf700, 0xf07c, 0xfb5a, 0xfb58, 0xfb43, 0xfb56, - 0xfb42, 0xfb4e, 0xfb4d, 0xf03c, 0xf03e, 0xf03f, 0xf700, 0xf30c, - 0xf703, 0xf020, 0xf207, 0xf10a, 0xf10b, 0xf10c, 0xf10d, 0xf10e, - 0xf10f, 0xf110, 0xf111, 0xf112, 0xf113, 0xf213, 0xf203, 0xf307, - 0xf308, 0xf309, 0xf30b, 0xf304, 0xf305, 0xf306, 0xf30a, 0xf301, - 0xf302, 0xf303, 0xf300, 0xf310, 0xf206, 0xf200, 0xf03e, 0xf10a, - 0xf10b, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf200, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf20b, 0xf601, 0xf602, 0xf117, 0xf600, 0xf20a, 0xf115, 0xf116, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -unsigned short altgr_map[NR_KEYS] = { - 0xf200, 0xf200, 0xf200, 0xf040, 0xf200, 0xf024, 0xf200, 0xf200, - 0xf07b, 0xf05b, 0xf05d, 0xf07d, 0xf05c, 0xf200, 0xf200, 0xf200, - 0xfb71, 0xfb77, 0xf918, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69, - 0xfb6f, 0xfb70, 0xf200, 0xf07e, 0xf201, 0xf702, 0xf914, 0xfb73, - 0xf917, 0xf919, 0xfb67, 0xfb68, 0xfb6a, 0xfb6b, 0xfb6c, 0xf200, - 0xf200, 0xf200, 0xf700, 0xf200, 0xfb7a, 0xfb78, 0xf916, 0xfb76, - 0xf915, 0xfb6e, 0xfb6d, 0xf200, 0xf200, 0xf200, 0xf700, 0xf30c, - 0xf703, 0xf200, 0xf207, 0xf50c, 0xf50d, 0xf50e, 0xf50f, 0xf510, - 0xf511, 0xf512, 0xf513, 0xf514, 0xf515, 0xf208, 0xf202, 0xf911, - 0xf912, 0xf913, 0xf30b, 0xf90e, 0xf90f, 0xf910, 0xf30a, 0xf90b, - 0xf90c, 0xf90d, 0xf90a, 0xf310, 0xf206, 0xf200, 0xf07c, 0xf516, - 0xf517, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf200, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf118, 0xf601, 0xf602, 0xf117, 0xf600, 0xf119, 0xf115, 0xf116, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -unsigned short ctrl_map[NR_KEYS] = { - 0xf200, 0xf200, 0xf200, 0xf000, 0xf01b, 0xf01c, 0xf01d, 0xf01e, - 0xf01f, 0xf07f, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf008, 0xf200, - 0xf011, 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009, - 0xf00f, 0xf010, 0xf01b, 0xf01d, 0xf201, 0xf702, 0xf001, 0xf013, - 0xf004, 0xf006, 0xf007, 0xf008, 0xf00a, 0xf00b, 0xf00c, 0xf200, - 0xf007, 0xf000, 0xf700, 0xf01c, 0xf01a, 0xf018, 0xf003, 0xf016, - 0xf002, 0xf00e, 0xf00d, 0xf200, 0xf20e, 0xf07f, 0xf700, 0xf30c, - 0xf703, 0xf000, 0xf207, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, - 0xf105, 0xf106, 0xf107, 0xf108, 0xf109, 0xf208, 0xf204, 0xf307, - 0xf308, 0xf309, 0xf30b, 0xf304, 0xf305, 0xf306, 0xf30a, 0xf301, - 0xf302, 0xf303, 0xf300, 0xf310, 0xf206, 0xf200, 0xf200, 0xf10a, - 0xf10b, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf01c, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf118, 0xf601, 0xf602, 0xf117, 0xf600, 0xf119, 0xf115, 0xf116, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -unsigned short shift_ctrl_map[NR_KEYS] = { - 0xf200, 0xf200, 0xf200, 0xf000, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf200, 0xf200, - 0xf011, 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009, - 0xf00f, 0xf010, 0xf200, 0xf200, 0xf201, 0xf702, 0xf001, 0xf013, - 0xf004, 0xf006, 0xf007, 0xf008, 0xf00a, 0xf00b, 0xf00c, 0xf200, - 0xf200, 0xf200, 0xf700, 0xf200, 0xf01a, 0xf018, 0xf003, 0xf016, - 0xf002, 0xf00e, 0xf00d, 0xf200, 0xf200, 0xf200, 0xf700, 0xf30c, - 0xf703, 0xf200, 0xf207, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf208, 0xf200, 0xf307, - 0xf308, 0xf309, 0xf30b, 0xf304, 0xf305, 0xf306, 0xf30a, 0xf301, - 0xf302, 0xf303, 0xf300, 0xf310, 0xf206, 0xf200, 0xf200, 0xf200, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf200, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf118, 0xf601, 0xf602, 0xf117, 0xf600, 0xf119, 0xf115, 0xf116, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -unsigned short alt_map[NR_KEYS] = { - 0xf200, 0xf81b, 0xf831, 0xf832, 0xf833, 0xf834, 0xf835, 0xf836, - 0xf837, 0xf838, 0xf839, 0xf830, 0xf82d, 0xf83d, 0xf87f, 0xf809, - 0xf871, 0xf877, 0xf865, 0xf872, 0xf874, 0xf879, 0xf875, 0xf869, - 0xf86f, 0xf870, 0xf85b, 0xf85d, 0xf80d, 0xf702, 0xf861, 0xf873, - 0xf864, 0xf866, 0xf867, 0xf868, 0xf86a, 0xf86b, 0xf86c, 0xf83b, - 0xf827, 0xf860, 0xf700, 0xf85c, 0xf87a, 0xf878, 0xf863, 0xf876, - 0xf862, 0xf86e, 0xf86d, 0xf82c, 0xf82e, 0xf82f, 0xf700, 0xf30c, - 0xf703, 0xf820, 0xf207, 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, - 0xf505, 0xf506, 0xf507, 0xf508, 0xf509, 0xf208, 0xf209, 0xf907, - 0xf908, 0xf909, 0xf30b, 0xf904, 0xf905, 0xf906, 0xf30a, 0xf901, - 0xf902, 0xf903, 0xf900, 0xf310, 0xf206, 0xf200, 0xf83c, 0xf50a, - 0xf50b, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf01c, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf118, 0xf210, 0xf211, 0xf117, 0xf600, 0xf119, 0xf115, 0xf116, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -unsigned short ctrl_alt_map[NR_KEYS] = { - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf811, 0xf817, 0xf805, 0xf812, 0xf814, 0xf819, 0xf815, 0xf809, - 0xf80f, 0xf810, 0xf200, 0xf200, 0xf201, 0xf702, 0xf801, 0xf813, - 0xf804, 0xf806, 0xf807, 0xf808, 0xf80a, 0xf80b, 0xf80c, 0xf200, - 0xf200, 0xf200, 0xf700, 0xf200, 0xf81a, 0xf818, 0xf803, 0xf816, - 0xf802, 0xf80e, 0xf80d, 0xf200, 0xf200, 0xf200, 0xf700, 0xf30c, - 0xf703, 0xf200, 0xf207, 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, - 0xf505, 0xf506, 0xf507, 0xf508, 0xf509, 0xf208, 0xf200, 0xf307, - 0xf308, 0xf309, 0xf30b, 0xf304, 0xf305, 0xf306, 0xf30a, 0xf301, - 0xf302, 0xf303, 0xf300, 0xf20c, 0xf206, 0xf200, 0xf200, 0xf50a, - 0xf50b, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, - 0xf30e, 0xf702, 0xf30d, 0xf200, 0xf701, 0xf205, 0xf114, 0xf603, - 0xf118, 0xf601, 0xf602, 0xf117, 0xf600, 0xf119, 0xf115, 0xf20c, - 0xf11a, 0xf10c, 0xf10d, 0xf11b, 0xf11c, 0xf110, 0xf311, 0xf11d, - 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, -}; - -ushort *key_maps[MAX_NR_KEYMAPS] = { - plain_map, shift_map, altgr_map, 0, - ctrl_map, shift_ctrl_map, 0, 0, - alt_map, 0, 0, 0, - ctrl_alt_map, 0 -}; - -unsigned int keymap_count = 7; - -/* - * Philosophy: most people do not define more strings, but they who do - * often want quite a lot of string space. So, we statically allocate - * the default and allocate dynamically in chunks of 512 bytes. - */ - -char func_buf[] = { - '\033', '[', '[', 'A', 0, - '\033', '[', '[', 'B', 0, - '\033', '[', '[', 'C', 0, - '\033', '[', '[', 'D', 0, - '\033', '[', '[', 'E', 0, - '\033', '[', '1', '7', '~', 0, - '\033', '[', '1', '8', '~', 0, - '\033', '[', '1', '9', '~', 0, - '\033', '[', '2', '0', '~', 0, - '\033', '[', '2', '1', '~', 0, - '\033', '[', '2', '3', '~', 0, - '\033', '[', '2', '4', '~', 0, - '\033', '[', '2', '5', '~', 0, - '\033', '[', '2', '6', '~', 0, - '\033', '[', '2', '8', '~', 0, - '\033', '[', '2', '9', '~', 0, - '\033', '[', '3', '1', '~', 0, - '\033', '[', '3', '2', '~', 0, - '\033', '[', '3', '3', '~', 0, - '\033', '[', '3', '4', '~', 0, - '\033', '[', '1', '~', 0, - '\033', '[', '2', '~', 0, - '\033', '[', '3', '~', 0, - '\033', '[', '4', '~', 0, - '\033', '[', '5', '~', 0, - '\033', '[', '6', '~', 0, - '\033', '[', 'M', 0, - '\033', '[', 'P', 0, -}; - -char *funcbufptr = func_buf; -int funcbufsize = sizeof(func_buf); -int funcbufleft = 0; /* space left */ - -char *func_table[MAX_NR_FUNC] = { - func_buf + 0, - func_buf + 5, - func_buf + 10, - func_buf + 15, - func_buf + 20, - func_buf + 25, - func_buf + 31, - func_buf + 37, - func_buf + 43, - func_buf + 49, - func_buf + 55, - func_buf + 61, - func_buf + 67, - func_buf + 73, - func_buf + 79, - func_buf + 85, - func_buf + 91, - func_buf + 97, - func_buf + 103, - func_buf + 109, - func_buf + 115, - func_buf + 120, - func_buf + 125, - func_buf + 130, - func_buf + 135, - func_buf + 140, - func_buf + 145, - 0, - 0, - func_buf + 149, - 0, -}; - -struct kbdiacr { - unsigned char diacr, base, result; -}; - -struct kbdiacr accent_table[MAX_DIACR] = { - {'`', 'A', '\300'}, {'`', 'a', '\340'}, - {'\'', 'A', '\301'}, {'\'', 'a', '\341'}, - {'^', 'A', '\302'}, {'^', 'a', '\342'}, - {'~', 'A', '\303'}, {'~', 'a', '\343'}, - {'"', 'A', '\304'}, {'"', 'a', '\344'}, - {'O', 'A', '\305'}, {'o', 'a', '\345'}, - {'0', 'A', '\305'}, {'0', 'a', '\345'}, - {'A', 'A', '\305'}, {'a', 'a', '\345'}, - {'A', 'E', '\306'}, {'a', 'e', '\346'}, - {',', 'C', '\307'}, {',', 'c', '\347'}, - {'`', 'E', '\310'}, {'`', 'e', '\350'}, - {'\'', 'E', '\311'}, {'\'', 'e', '\351'}, - {'^', 'E', '\312'}, {'^', 'e', '\352'}, - {'"', 'E', '\313'}, {'"', 'e', '\353'}, - {'`', 'I', '\314'}, {'`', 'i', '\354'}, - {'\'', 'I', '\315'}, {'\'', 'i', '\355'}, - {'^', 'I', '\316'}, {'^', 'i', '\356'}, - {'"', 'I', '\317'}, {'"', 'i', '\357'}, - {'-', 'D', '\320'}, {'-', 'd', '\360'}, - {'~', 'N', '\321'}, {'~', 'n', '\361'}, - {'`', 'O', '\322'}, {'`', 'o', '\362'}, - {'\'', 'O', '\323'}, {'\'', 'o', '\363'}, - {'^', 'O', '\324'}, {'^', 'o', '\364'}, - {'~', 'O', '\325'}, {'~', 'o', '\365'}, - {'"', 'O', '\326'}, {'"', 'o', '\366'}, - {'/', 'O', '\330'}, {'/', 'o', '\370'}, - {'`', 'U', '\331'}, {'`', 'u', '\371'}, - {'\'', 'U', '\332'}, {'\'', 'u', '\372'}, - {'^', 'U', '\333'}, {'^', 'u', '\373'}, - {'"', 'U', '\334'}, {'"', 'u', '\374'}, - {'\'', 'Y', '\335'}, {'\'', 'y', '\375'}, - {'T', 'H', '\336'}, {'t', 'h', '\376'}, - {'s', 's', '\337'}, {'"', 'y', '\377'}, - {'s', 'z', '\337'}, {'i', 'j', '\377'}, -}; - -unsigned int accent_table_size = 68; - -/* These #defines have been copied from drivers/char/pc_keyb.h, by - * Martin Mares (mj@ucw.cz). - * converted to offsets by Till Straumann <strauman@slac.stanford.edu> - */ -#define KBD_STATUS_REG 0x4 /* Status register (R) */ -#define KBD_CNTL_REG 0x4 /* Controller command register (W) */ -#define KBD_DATA_REG 0x0 /* Keyboard data register (R/W) */ - -/* - * Keyboard Controller Commands - */ - -#define KBD_CCMD_WRITE_MODE 0x60 /* Write mode bits */ -#define KBD_CCMD_GET_VERSION 0xA1 /* Get controller version */ -#define KBD_CCMD_MOUSE_DISABLE 0xA7 /* Disable mouse interface */ -#define KBD_CCMD_MOUSE_ENABLE 0xA8 /* Enable mouse interface */ -#define KBD_CCMD_TEST_MOUSE 0xA9 /* Mouse interface test */ -#define KBD_CCMD_SELF_TEST 0xAA /* Controller self test */ -#define KBD_CCMD_KBD_TEST 0xAB /* Keyboard interface test */ -#define KBD_CCMD_KBD_DISABLE 0xAD /* Keyboard interface disable */ -#define KBD_CCMD_KBD_ENABLE 0xAE /* Keyboard interface enable */ - -/* - * Keyboard Commands - */ - -#define KBD_CMD_ENABLE 0xF4 /* Enable scanning */ -#define KBD_CMD_DISABLE 0xF5 /* Disable scanning */ -#define KBD_CMD_RESET 0xFF /* Reset */ - -/* - * Keyboard Replies - */ - -#define KBD_REPLY_POR 0xAA /* Power on reset */ -#define KBD_REPLY_ACK 0xFA /* Command ACK */ -#define KBD_REPLY_RESEND 0xFE /* Command NACK, send the cmd again */ - -/* - * Status Register Bits - */ - -#define KBD_STAT_OBF 0x01 /* Keyboard output buffer full */ -#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */ -#define KBD_STAT_UNLOCKED 0x10 /* Zero if keyboard locked */ -#define KBD_STAT_GTO 0x40 /* General receive/xmit timeout */ -#define KBD_STAT_PERR 0x80 /* Parity error */ - -/* - * Controller Mode Register Bits - */ - -#define KBD_MODE_KBD_INT 0x01 /* Keyboard data generate IRQ1 */ -#define KBD_MODE_SYS 0x04 /* The system flag (?) */ -#define KBD_MODE_NO_KEYLOCK 0x08 /* The keylock doesn't affect the keyboard if set */ -#define KBD_MODE_DISABLE_KBD 0x10 /* Disable keyboard interface */ -#define KBD_MODE_DISABLE_MOUSE 0x20 /* Disable mouse interface */ -#define KBD_MODE_KCC 0x40 /* Scan code conversion to PC format */ -#define KBD_MODE_RFU 0x80 - -#endif /* USE_KBD_SUPPORT */ - -/* Early messages after mm init but before console init are kept in log - * buffers. - */ -#define PAGE_LOG_CHARS (PAGE_SIZE-sizeof(int)-sizeof(u_long)-1) - -typedef struct _console_log { - struct _console_log *next; - int offset; - u_char data[PAGE_LOG_CHARS]; -} console_log; - -#ifdef STATIC_LOG_ALLOC - -#define STATIC_LOG_DATA_PAGE_NB 3 - -static u_char log_page_pool [STATIC_LOG_DATA_PAGE_NB * PAGE_SIZE]; - -#endif - -static board_memory_map mem_map = { - (__io_ptr) _IO_BASE, /* from libcpu/io.h */ - (__io_ptr) _ISA_MEM_BASE, -}; - -board_memory_map *ptr_mem_map = &mem_map; - -struct _console_global_data { - console_log *log; - int vacuum_sent; - int lines; - int cols; - int orig_x; - int orig_y; - u_char shfts, ctls, alts, caps; -} console_global_data = {NULL, 0, 25, 80, 0, 24, 0, 0, 0, 0}; - -typedef struct console_io { - void (*console_io_putc) (const u_char); - int (*console_io_getc) (void); - int (*console_io_tstc) (void); -}console_io; - -extern console_io* curIo; - -void debug_putc(const u_char c) -{ - curIo->console_io_putc(c); -} - -/* const char arg to be compatible with BSP_output_char decl. */ -void -debug_putc_onlcr(const char c) -{ - debug_putc(c); -} - -int debug_getc(void) -{ - return curIo->console_io_getc(); -} - -int debug_tstc(void) -{ - return curIo->console_io_tstc(); -} - -#define vidmem ((__io_ptr)(ptr_mem_map->isa_mem_base+0xb8000)) - -static void vacuum_putc(u_char c) { - console_global_data.vacuum_sent++; -} - -static int vacuum_getc(void) { - return -1; -} - -static int vacuum_tstc(void) { - return 0; -} - -/* - * COM1 NS16550 support - */ - -#define rbr 0 -#define ier 1 -#define fcr 2 -#define lcr 3 -#define mcr 4 -#define lsr 5 -#define msr 6 -#define scr 7 -#define thr rbr -#define iir fcr -#define dll rbr -#define dlm ier - -#define LSR_DR 0x01 /* Data ready */ -#define LSR_OE 0x02 /* Overrun */ -#define LSR_PE 0x04 /* Parity error */ -#define LSR_FE 0x08 /* Framing error */ -#define LSR_BI 0x10 /* Break */ -#define LSR_THRE 0x20 /* Xmit holding register empty */ -#define LSR_TEMT 0x40 /* Xmitter empty */ -#define LSR_ERR 0x80 /* Error */ - -#ifdef STATIC_LOG_ALLOC -static int global_index = 0; - -static void *__palloc(int s) -{ - if (global_index ==( STATIC_LOG_DATA_PAGE_NB - 1) ) return (void*) 0; - return (void*) &(log_page_pool [PAGE_SIZE * global_index++]); -} - -static void pfree(void* p) -{ - --global_index; -} -#endif - -static void log_putc(const u_char c) { - console_log *l; - for(l=console_global_data.log; l; l=l->next) { - if (l->offset<PAGE_LOG_CHARS) break; - } - if (!l) { - l=__palloc(sizeof(console_log)); - memset(l, 0, sizeof(console_log)); - if (!console_global_data.log) - console_global_data.log = l; - else { - console_log *p; - for (p=console_global_data.log; - p->next; p=p->next); - p->next = l; - } - } - l->data[l->offset++] = c; -} - -/* This puts is non standard since it does not automatically add a newline - * at the end. So it is made private to avoid confusion in other files. - */ -static -void my_puts(const u_char *s) -{ - char c; - - while ( ( c = *s++ ) != '\0' ) { - rtems_putc(c); - } -} - -static -void flush_log(void) { - console_log *p, *next; - if (console_global_data.vacuum_sent) { -#ifdef TRACE_FLUSH_LOG - printk("%d characters sent into oblivion before MM init!\n", - console_global_data.vacuum_sent); -#endif - } - for(p=console_global_data.log; p; p=next) { - my_puts(p->data); - next = p->next; - pfree(p); - } -} - -#ifndef INL_CONSOLE_INB -#error "BSP probably didn't define a console port" -#endif - -static void serial_putc(const u_char c) -{ - while ((INL_CONSOLE_INB(lsr) & LSR_THRE) == 0) ; - INL_CONSOLE_OUTB(thr, c); -} - -static int serial_getc(void) -{ - while ((INL_CONSOLE_INB(lsr) & LSR_DR) == 0) ; - return (INL_CONSOLE_INB(rbr)); -} - -static int serial_tstc(void) -{ - return ((INL_CONSOLE_INB(lsr) & LSR_DR) != 0); -} - -#ifdef USE_VGA_SUPPORT -static void scroll(void) -{ - int i; - - memcpy ( (u_char *)vidmem, (u_char *)vidmem + console_global_data.cols * 2, - ( console_global_data.lines - 1 ) * console_global_data.cols * 2 ); - for ( i = ( console_global_data.lines - 1 ) * console_global_data.cols * 2; - i < console_global_data.lines * console_global_data.cols * 2; - i += 2 ) - vidmem[i] = ' '; -} - -/* - * cursor() sets an offset (0-1999) into the 80x25 text area - */ -static void -cursor(int x, int y) -{ - int pos = console_global_data.cols*y + x; - vga_outb(14, 0x14); - vga_outb(0x15, pos>>8); - vga_outb(0x14, 15); - vga_outb(0x15, pos); -} - -static void -vga_putc(const u_char c) -{ - int x,y; - - x = console_global_data.orig_x; - y = console_global_data.orig_y; - - if ( c == '\n' ) { - if ( ++y >= console_global_data.lines ) { - scroll(); - y--; - } - } else if (c == '\b') { - if (x > 0) { - x--; - } - } else if (c == '\r') { - x = 0; - } else { - vidmem [ ( x + console_global_data.cols * y ) * 2 ] = c; - if ( ++x >= console_global_data.cols ) { - x = 0; - if ( ++y >= console_global_data.lines ) { - scroll(); - y--; - } - } - } - - cursor(x, y); - - console_global_data.orig_x = x; - console_global_data.orig_y = y; -} -#endif /* USE_VGA_SUPPORT */ - -#ifdef USE_KBD_SUPPORT -/* Keyboard support */ -static int kbd_getc(void) -{ - unsigned char dt, brk, val; - unsigned code; -loop: - while((kbd_inb(KBD_STATUS_REG) & KBD_STAT_OBF) == 0) ; - - dt = kbd_inb(KBD_DATA_REG); - - brk = dt & 0x80; /* brk == 1 on key release */ - dt = dt & 0x7f; /* keycode */ - - if (console_global_data.shfts) - code = shift_map[dt]; - else if (console_global_data.ctls) - code = ctrl_map[dt]; - else - code = plain_map[dt]; - - val = KVAL(code); - switch (KTYP(code) & 0x0f) { - case KT_LATIN: - if (brk) - break; - if (console_global_data.alts) - val |= 0x80; - if (val == 0x7f) /* map delete to backspace */ - val = '\b'; - return val; - - case KT_LETTER: - if (brk) - break; - if (console_global_data.caps) - val -= 'a'-'A'; - return val; - - case KT_SPEC: - if (brk) - break; - if (val == KVAL(K_CAPS)) - console_global_data.caps = !console_global_data.caps; - else if (val == KVAL(K_ENTER)) { -enter: /* Wait for key up */ - while (1) { - while((kbd_inb(KBD_STATUS_REG) & KBD_STAT_OBF) == 0) ; - dt = kbd_inb(KBD_DATA_REG); - if (dt & 0x80) /* key up */ break; - } - return 10; - } - break; - - case KT_PAD: - if (brk) - break; - if (val < 10) - return val; - if (val == KVAL(K_PENTER)) - goto enter; - break; - - case KT_SHIFT: - switch (val) { - case KG_SHIFT: - case KG_SHIFTL: - case KG_SHIFTR: - console_global_data.shfts = brk ? 0 : 1; - break; - case KG_ALT: - case KG_ALTGR: - console_global_data.alts = brk ? 0 : 1; - break; - case KG_CTRL: - case KG_CTRLL: - case KG_CTRLR: - console_global_data.ctls = brk ? 0 : 1; - break; - } - break; - - case KT_LOCK: - switch (val) { - case KG_SHIFT: - case KG_SHIFTL: - case KG_SHIFTR: - if (brk) - console_global_data.shfts = !console_global_data.shfts; - break; - case KG_ALT: - case KG_ALTGR: - if (brk) - console_global_data.alts = !console_global_data.alts; - break; - case KG_CTRL: - case KG_CTRLL: - case KG_CTRLR: - if (brk) - console_global_data.ctls = !console_global_data.ctls; - break; - } - break; - } - /* if (brk) return (0); */ /* Ignore initial 'key up' codes */ - goto loop; -} - -static int kbd_get(int ms) { - int status, data; - while(1) { - status = kbd_inb(KBD_STATUS_REG); - if (status & KBD_STAT_OBF) { - data = kbd_inb(KBD_DATA_REG); - if (status & (KBD_STAT_GTO | KBD_STAT_PERR)) - return -1; - else - return data; - } - if (--ms < 0) return -1; -#ifdef __BOOT__ - boot_udelay(1000); -#else - rtems_bsp_delay(1000); -#endif - } -} - -static void kbd_put(u_char c, int ms, int port) { - while (kbd_inb(KBD_STATUS_REG) & KBD_STAT_IBF) { - if (--ms < 0) return; -#ifdef __BOOT__ - boot_udelay(1000); -#else - rtems_bsp_delay(1000); -#endif - } - kbd_outb(port, c); -} - -int kbdreset(void) -{ - int c; - - /* Flush all pending data */ - while(kbd_get(10) != -1); - - /* Send self-test */ - kbd_put(KBD_CCMD_SELF_TEST, 10, KBD_CNTL_REG); - c = kbd_get(1000); - if (c != 0x55) return 1; - - /* Enable then reset the KB */ - kbd_put(KBD_CCMD_KBD_ENABLE, 10, KBD_CNTL_REG); - - while (1) { - kbd_put(KBD_CMD_RESET, 10, KBD_DATA_REG); - c = kbd_get(1000); - if (c == KBD_REPLY_ACK) break; - if (c != KBD_REPLY_RESEND) return 2; - } - - if (kbd_get(1000) != KBD_REPLY_POR) return 3; - - /* Disable the keyboard while setting up the controller */ - kbd_put(KBD_CMD_DISABLE, 10, KBD_DATA_REG); - if (kbd_get(10)!=KBD_REPLY_ACK) return 4; - - /* Enable interrupts and keyboard controller */ - kbd_put(KBD_CCMD_WRITE_MODE, 10, KBD_CNTL_REG); - kbd_put(KBD_MODE_KBD_INT | KBD_MODE_SYS | - KBD_MODE_DISABLE_MOUSE | KBD_MODE_KCC, - 10, KBD_DATA_REG); - - /* Reenable the keyboard */ - kbd_put(KBD_CMD_ENABLE, 10, KBD_DATA_REG); - if (kbd_get(10)!=KBD_REPLY_ACK) return 5; - - return 0; -} - -static int kbd_tstc(void) -{ - return ((kbd_inb(KBD_STATUS_REG) & KBD_STAT_OBF) != 0); -} -#endif /* USE_KBD_SUPPORT */ - -const struct console_io -vacuum_console_functions = { - vacuum_putc, - vacuum_getc, - vacuum_tstc -}; - -static const struct console_io -log_console_functions = { - log_putc, - vacuum_getc, - vacuum_tstc -} -, -serial_console_functions = { - serial_putc, - serial_getc, - serial_tstc -} -#if defined(USE_KBD_SUPPORT) && defined(USE_VGA_SUPPORT) -, -vga_console_functions = { - vga_putc, - kbd_getc, - kbd_tstc -} -#endif -; - -console_io* curIo = (console_io*) &vacuum_console_functions; - -int select_console(ioType t) { - static ioType curType = CONSOLE_VACUUM; - - switch (t) { - case CONSOLE_VACUUM : curIo = (console_io*)&vacuum_console_functions; break; - case CONSOLE_LOG : curIo = (console_io*)&log_console_functions; break; - case CONSOLE_SERIAL : curIo = (console_io*)&serial_console_functions; break; -#if defined(USE_KBD_SUPPORT) && defined(USE_VGA_SUPPORT) - case CONSOLE_VGA : curIo = (console_io*)&vga_console_functions; break; -#endif - default : curIo = (console_io*)&vacuum_console_functions;break; - } - if (curType == CONSOLE_LOG) flush_log(); - curType = t; - return 0; -} - -/* we use this so that we can do without the ctype library */ -#define is_digit(c) ((c) >= '0' && (c) <= '9') - -/* provide this for the bootloader only; otherwise - * use libcpu implementation - */ -#if defined(__BOOT__) -static int skip_atoi(const char **s) -{ - int i=0; - - while (is_digit(**s)) - i = i*10 + *((*s)++) - '0'; - return i; -} - -/* Based on linux/lib/vsprintf.c and modified to suit our needs, - * bloat has been limited since we basically only need %u, %x, %s and %c. - * But we need 64 bit values ! - */ -int k_vsprintf(char *buf, const char *fmt, va_list args); - -int printk(const char *fmt, ...) { - va_list args; - int i; - /* Should not be a problem with 8kB of stack */ - char buf[1024]; - - va_start(args, fmt); - i = k_vsprintf(buf, fmt, args); - va_end(args); - my_puts((u_char*)buf); - return i; -} - -#endif - -/* Necessary to avoid including a library, and GCC won't do this inline. */ -#define div10(num, rmd) \ -do { uint32_t t1, t2, t3; \ - __asm__ ("lis %4,0xcccd; " \ - "addi %4,%4,0xffffcccd; " /* Build 0xcccccccd */ \ - "mulhwu %3,%0+1,%4; " /* (num.l*cst.l).h */ \ - "mullw %2,%0,%4; " /* (num.h*cst.l).l */ \ - "addc %3,%3,%2; " \ - "mulhwu %2,%0,%4; " /* (num.h*cst.l).h */ \ - "addi %4,%4,-1; " /* Build 0xcccccccc */ \ - "mullw %1,%0,%4; " /* (num.h*cst.h).l */ \ - "adde %2,%2,%1; " \ - "mulhwu %1,%0,%4; " /* (num.h*cst.h).h */ \ - "addze %1,%1; " \ - "mullw %0,%0+1,%4; " /* (num.l*cst.h).l */ \ - "addc %3,%3,%0; " \ - "mulhwu %0,%0+1,%4; " /* (num.l*cst.h).h */ \ - "adde %2,%2,%0; " \ - "addze %1,%1; " \ - "srwi %2,%2,3; " \ - "srwi %0,%1,3; " \ - "rlwimi %2,%1,29,0,2; " \ - "mulli %4,%2,10; " \ - "sub %4,%0+1,%4; " \ - "mr %0+1,%2; " : \ - "=r" (num), "=&r" (t1), "=&r" (t2), "=&r"(t3), "=&b" (rmd) : \ - "0" (num)); \ - \ -} while(0); - -#define SIGN 1 /* unsigned/signed long */ -#define LARGE 2 /* use 'ABCDEF' instead of 'abcdef' */ -#define HEX 4 /* hexadecimal instead of decimal */ -#define ADDR 8 /* Value is an addres (p) */ -#define ZEROPAD 16 /* pad with zero */ -#define HALF 32 -#define LONG 64 /* long argument */ -#define LLONG 128 /* 64 bit argument */ - -#if defined(__BOOT__) -static char * number(char * str, int size, int type, uint64_t num) -{ - char fill,sign,tmp[24]; - const char *digits="0123456789abcdef"; - int i; - - if (type & LARGE) - digits = "0123456789ABCDEF"; - fill = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if ((int64_t)num <0) { - sign = '-'; - num = -num; - size--; - } - } - - i = 0; - do { - unsigned rem; - if (type&HEX) { - rem = num & 0x0f; - num >>=4; - } else { - div10(num, rem); - } - tmp[i++] = digits[rem]; - } while (num != 0); - - size -= i; - if (!(type&(ZEROPAD))) - while(size-->0) - *str++ = ' '; - if (sign) - *str++ = sign; - - while (size-- > 0) - *str++ = fill; - while (i-- > 0) - *str++ = tmp[i]; - while (size-- > 0) - *str++ = ' '; - return str; -} - -int k_vsprintf(char *buf, const char *fmt, va_list args) -{ - int len; - uint64_t num; - int i; - char * str; - const char *s; - - int flags; /* flags to number() and private */ - - int field_width; /* width of output field */ - - for (str=buf ; *fmt ; ++fmt) { - if (*fmt != '%') { - *str++ = *fmt; - continue; - } - - /* process flags, only 0 padding needed */ - flags = 0; - if (*++fmt == '0' ) { - flags |= ZEROPAD; - fmt++; - } - - /* get field width */ - field_width = -1; - if (is_digit(*fmt)) - field_width = skip_atoi(&fmt); - - /* get the conversion qualifier */ - if (*fmt == 'h') { - flags |= HALF; - fmt++; - } else if (*fmt == 'L') { - flags |= LLONG; - fmt++; - } else if (*fmt == 'l') { - flags |= LONG; - fmt++; - } - - switch (*fmt) { - case 'c': - *str++ = (unsigned char) va_arg(args, int); - while (--field_width > 0) - *str++ = ' '; - continue; - - case 's': - s = va_arg(args, char *); - len = strlen(s); - - for (i = 0; i < len; ++i) - *str++ = *s++; - while (len < field_width--) - *str++ = ' '; - continue; - - case 'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - } - flags |= ZEROPAD|HEX|ADDR; - break; - - case 'X': - flags |= LARGE; - case 'x': - flags |= HEX; - break; - - case 'd': - case 'i': - flags |= SIGN; - case 'u': - break; - - default: - if (*fmt != '%') - *str++ = '%'; - if (*fmt) - *str++ = *fmt; - else - --fmt; - continue; - } - /* This ugly code tries to minimize the number of va_arg() - * since they expand to a lot of code on PPC under the SYSV - * calling conventions (but not with -mcall-aix which has - * other problems). Arguments have at least the size of a - * long allocated, and we use this fact to minimize bloat. - * (and pointers are assimilated to unsigned long too). - */ - if (sizeof(long long) > sizeof(long) && flags & LLONG) - num = va_arg(args, unsigned long long); - else { - u_long n = va_arg(args, unsigned long); - if (flags & HALF) { - if (flags & SIGN) - n = (short) n; - else - n = (unsigned short) n; - } else if (!(flags & LONG)) { - /* Here the compiler correctly removes this - * do nothing code on 32 bit PPC. - */ - if (flags & SIGN) - n = (int) n; - else - n = (unsigned) n; - } - if (flags & SIGN) num = (long) n; else num = n; - } - str = number(str, field_width, flags, num); - } - *str = '\0'; - return str-buf; -} -#endif |