--- Gnu-Mach/i386/i386at/kd.c 2020/09/02 04:44:36 1.1.1.3 +++ Gnu-Mach/i386/i386at/kd.c 2020/09/02 04:46:53 1.1.1.4 @@ -76,46 +76,32 @@ WITH THE USE OR PERFORMANCE OF THIS SOFT /* $ Header: $ */ -#include - #include -#include +#include +#include +#include #include #include #include #include /* for struct uio (!) */ -#include #include -#include "vm_param.h" +#include +#include +#include #include +#include #include #include +#include +#include #include -#include - -#include -#if NBLIT > 0 -#include -#else -#define blit_present() FALSE -#define blit_init() /* nothing */ -#endif - -#include -#if NEVC > 0 -int evc1init(); -#else -#define evc1init() FALSE -#endif +#include +#include #define DEBUG 1 /* export feep() */ -#define DEFAULT -1 /* see kd_atoi */ - void kd_enqsc(); /* enqueues a scancode */ -void timeout(); - #if 0 #define BROKEN_KEYBOARD_RESET #endif @@ -127,10 +113,7 @@ static void charput(), charmvup(), charm static void kd_noopreset(); boolean_t kdcheckmagic(); -int kdcnprobe(struct consdev *cp); -int kdcninit(struct consdev *cp); -int kdcngetc(dev_t dev, int wait); -int kdcnputc(dev_t dev, int c); +int do_modifier (int, Scancode, boolean_t); /* * These routines define the interface to the device-specific layer. @@ -239,63 +222,63 @@ u_char *esc_spt = (u_char *)0; unsigned char key_map[NUMKEYS][WIDTH_KMAP] = { {NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC}, {K_ESC,NC,NC, K_ESC,NC,NC, K_ESC,NC,NC, 0x1b,K_ESC,NC, K_ESC,NC,NC}, -{K_ONE,NC,NC, K_BANG,NC,NC, K_ONE,NC,NC, 0x1b,0x31,NC, 0x1b,0x4e,0x21}, -{K_TWO,NC,NC, K_ATSN,NC,NC, K_NUL,NC,NC, 0x1b,0x32,NC, 0x1b,0x4e,0x40}, -{K_THREE,NC,NC, K_POUND,NC,NC, K_THREE,NC,NC, 0x1b,0x33,NC, 0x1b,0x4e,0x23}, -{K_FOUR,NC,NC, K_DOLLAR,NC,NC, K_FOUR,NC,NC, 0x1b,0x34,NC, 0x1b,0x4e,0x24}, -{K_FIVE,NC,NC, K_PERC,NC,NC, K_FIVE,NC,NC, 0x1b,0x35,NC, 0x1b,0x4e,0x25}, -{K_SIX,NC,NC, K_CARET,NC,NC, K_RS,NC,NC, 0x1b,0x36,NC, 0x1b,0x4e,0x5e}, -{K_SEVEN,NC,NC, K_AMPER,NC,NC, K_SEVEN,NC,NC, 0x1b,0x37,NC, 0x1b,0x4e,0x26}, -{K_EIGHT,NC,NC, K_ASTER,NC,NC, K_EIGHT,NC,NC, 0x1b,0x38,NC, 0x1b,0x4e,0x2a}, -{K_NINE,NC,NC, K_LPAREN,NC,NC, K_NINE,NC,NC, 0x1b,0x39,NC, 0x1b,0x4e,0x28}, -{K_ZERO,NC,NC, K_RPAREN,NC,NC, K_ZERO,NC,NC, 0x1b,0x30,NC, 0x1b,0x4e,0x29}, -{K_MINUS,NC,NC, K_UNDSC,NC,NC, K_US,NC,NC, 0x1b,0x2d,NC, 0x1b,0x4e,0x5f}, -{K_EQL,NC,NC, K_PLUS,NC,NC, K_EQL,NC,NC, 0x1b,0x3d,NC, 0x1b,0x4e,0x2b}, +{K_ONE,NC,NC, K_BANG,NC,NC, K_ONE,NC,NC, 0x1b,K_ONE,NC, 0x1b,0x4e,K_BANG}, +{K_TWO,NC,NC, K_ATSN,NC,NC, K_NUL,NC,NC, 0x1b,K_TWO,NC, 0x1b,0x4e,K_ATSN}, +{K_THREE,NC,NC, K_POUND,NC,NC, K_THREE,NC,NC, 0x1b,K_THREE,NC, 0x1b,0x4e,K_POUND}, +{K_FOUR,NC,NC, K_DOLLAR,NC,NC, K_FOUR,NC,NC, 0x1b,K_FOUR,NC, 0x1b,0x4e,K_DOLLAR}, +{K_FIVE,NC,NC, K_PERC,NC,NC, K_FIVE,NC,NC, 0x1b,K_FIVE,NC, 0x1b,0x4e,K_PERC}, +{K_SIX,NC,NC, K_CARET,NC,NC, K_RS,NC,NC, 0x1b,K_SIX,NC, 0x1b,0x4e,K_CARET}, +{K_SEVEN,NC,NC, K_AMPER,NC,NC, K_SEVEN,NC,NC, 0x1b,K_SEVEN,NC, 0x1b,0x4e,K_AMPER}, +{K_EIGHT,NC,NC, K_ASTER,NC,NC, K_EIGHT,NC,NC, 0x1b,K_EIGHT,NC, 0x1b,0x4e,K_ASTER}, +{K_NINE,NC,NC, K_LPAREN,NC,NC, K_NINE,NC,NC, 0x1b,K_NINE,NC, 0x1b,0x4e,K_LPAREN}, +{K_ZERO,NC,NC, K_RPAREN,NC,NC, K_ZERO,NC,NC, 0x1b,K_ZERO,NC, 0x1b,0x4e,K_RPAREN}, +{K_MINUS,NC,NC, K_UNDSC,NC,NC, K_US,NC,NC, 0x1b,K_MINUS,NC, 0x1b,0x4e,K_UNDSC}, +{K_EQL,NC,NC, K_PLUS,NC,NC, K_EQL,NC,NC, 0x1b,K_EQL,NC, 0x1b,0x4e,K_PLUS}, {K_DEL,NC,NC, K_DEL,NC,NC, K_DEL,NC,NC, 0x1b,K_DEL,NC, K_DEL,NC,NC}, {K_HT,NC,NC, K_GS,NC,NC, K_HT,NC,NC, 0x1b,K_HT,NC, K_GS,NC,NC}, -{K_q,NC,NC, K_Q,NC,NC, K_DC1,NC,NC, 0x1b,0x71,NC, 0x1b,0x4e,0x51}, -{K_w,NC,NC, K_W,NC,NC, K_ETB,NC,NC, 0x1b,0x77,NC, 0x1b,0x4e,0x57}, -{K_e,NC,NC, K_E,NC,NC, K_ENQ,NC,NC, 0x1b,0x65,NC, 0x1b,0x4e,0x45}, -{K_r,NC,NC, K_R,NC,NC, K_DC2,NC,NC, 0x1b,0x72,NC, 0x1b,0x4e,0x52}, -{K_t,NC,NC, K_T,NC,NC, K_DC4,NC,NC, 0x1b,0x74,NC, 0x1b,0x4e,0x54}, -{K_y,NC,NC, K_Y,NC,NC, K_EM,NC,NC, 0x1b,0x79,NC, 0x1b,0x4e,0x59}, -{K_u,NC,NC, K_U,NC,NC, K_NAK,NC,NC, 0x1b,0x75,NC, 0x1b,0x4e,0x55}, -{K_i,NC,NC, K_I,NC,NC, K_HT,NC,NC, 0x1b,0x69,NC, 0x1b,0x4e,0x49}, -{K_o,NC,NC, K_O,NC,NC, K_SI,NC,NC, 0x1b,0x6f,NC, 0x1b,0x4e,0x4f}, -{K_p,NC,NC, K_P,NC,NC, K_DLE,NC,NC, 0x1b,0x70,NC, 0x1b,0x4e,0x50}, -{K_LBRKT,NC,NC, K_LBRACE,NC,NC, K_ESC,NC,NC, 0x1b,0x5b,NC, 0x1b,0x4e,0x7b}, -{K_RBRKT,NC,NC, K_RBRACE,NC,NC, K_GS,NC,NC, 0x1b,0x5d,NC, 0x1b,0x4e,0x7d}, +{K_q,NC,NC, K_Q,NC,NC, K_DC1,NC,NC, 0x1b,K_q,NC, 0x1b,0x4e,K_Q}, +{K_w,NC,NC, K_W,NC,NC, K_ETB,NC,NC, 0x1b,K_w,NC, 0x1b,0x4e,K_W}, +{K_e,NC,NC, K_E,NC,NC, K_ENQ,NC,NC, 0x1b,K_e,NC, 0x1b,0x4e,K_E}, +{K_r,NC,NC, K_R,NC,NC, K_DC2,NC,NC, 0x1b,K_r,NC, 0x1b,0x4e,K_R}, +{K_t,NC,NC, K_T,NC,NC, K_DC4,NC,NC, 0x1b,K_t,NC, 0x1b,0x4e,K_T}, +{K_y,NC,NC, K_Y,NC,NC, K_EM,NC,NC, 0x1b,K_y,NC, 0x1b,0x4e,K_Y}, +{K_u,NC,NC, K_U,NC,NC, K_NAK,NC,NC, 0x1b,K_u,NC, 0x1b,0x4e,K_U}, +{K_i,NC,NC, K_I,NC,NC, K_HT,NC,NC, 0x1b,K_i,NC, 0x1b,0x4e,K_I}, +{K_o,NC,NC, K_O,NC,NC, K_SI,NC,NC, 0x1b,K_o,NC, 0x1b,0x4e,K_O}, +{K_p,NC,NC, K_P,NC,NC, K_DLE,NC,NC, 0x1b,K_p,NC, 0x1b,0x4e,K_P}, +{K_LBRKT,NC,NC, K_LBRACE,NC,NC, K_ESC,NC,NC, 0x1b,K_LBRKT,NC, 0x1b,0x4e,K_LBRACE}, +{K_RBRKT,NC,NC, K_RBRACE,NC,NC, K_GS,NC,NC, 0x1b,K_RBRKT,NC, 0x1b,0x4e,K_RBRACE}, {K_CR,NC,NC, K_CR,NC,NC, K_CR,NC,NC, 0x1b,K_CR,NC, K_CR,NC,NC}, {K_SCAN,K_CTLSC,NC, K_SCAN,K_CTLSC,NC, K_SCAN,K_CTLSC,NC, K_SCAN,K_CTLSC,NC, K_SCAN,K_CTLSC,NC}, -{K_a,NC,NC, K_A,NC,NC, K_SOH,NC,NC, 0x1b,0x61,NC, 0x1b,0x4e,0x41}, -{K_s,NC,NC, K_S,NC,NC, K_DC3,NC,NC, 0x1b,0x73,NC, 0x1b,0x4e,0x53}, -{K_d,NC,NC, K_D,NC,NC, K_EOT,NC,NC, 0x1b,0x64,NC, 0x1b,0x4e,0x45}, -{K_f,NC,NC, K_F,NC,NC, K_ACK,NC,NC, 0x1b,0x66,NC, 0x1b,0x4e,0x46}, -{K_g,NC,NC, K_G,NC,NC, K_BEL,NC,NC, 0x1b,0x67,NC, 0x1b,0x4e,0x47}, -{K_h,NC,NC, K_H,NC,NC, K_BS,NC,NC, 0x1b,0x68,NC, 0x1b,0x4e,0x48}, -{K_j,NC,NC, K_J,NC,NC, K_LF,NC,NC, 0x1b,0x6a,NC, 0x1b,0x4e,0x4a}, -{K_k,NC,NC, K_K,NC,NC, K_VT,NC,NC, 0x1b,0x6b,NC, 0x1b,0x4e,0x4b}, -{K_l,NC,NC, K_L,NC,NC, K_FF,NC,NC, 0x1b,0x6c,NC, 0x1b,0x4e,0x4c}, -{K_SEMI,NC,NC, K_COLON,NC,NC, K_SEMI,NC,NC, 0x1b,0x3b,NC, 0x1b,0x4e,0x3a}, -{K_SQUOTE,NC,NC,K_DQUOTE,NC,NC, K_SQUOTE,NC,NC,0x1b,0x27,NC, 0x1b,0x4e,0x22}, -{K_GRAV,NC,NC, K_TILDE,NC,NC, K_RS,NC,NC, 0x1b,0x60,NC, 0x1b,0x4e,0x7e}, +{K_a,NC,NC, K_A,NC,NC, K_SOH,NC,NC, 0x1b,K_a,NC, 0x1b,0x4e,K_A}, +{K_s,NC,NC, K_S,NC,NC, K_DC3,NC,NC, 0x1b,K_s,NC, 0x1b,0x4e,K_S}, +{K_d,NC,NC, K_D,NC,NC, K_EOT,NC,NC, 0x1b,K_d,NC, 0x1b,0x4e,K_D}, +{K_f,NC,NC, K_F,NC,NC, K_ACK,NC,NC, 0x1b,K_f,NC, 0x1b,0x4e,K_F}, +{K_g,NC,NC, K_G,NC,NC, K_BEL,NC,NC, 0x1b,K_g,NC, 0x1b,0x4e,K_G}, +{K_h,NC,NC, K_H,NC,NC, K_BS,NC,NC, 0x1b,K_h,NC, 0x1b,0x4e,K_H}, +{K_j,NC,NC, K_J,NC,NC, K_LF,NC,NC, 0x1b,K_j,NC, 0x1b,0x4e,K_J}, +{K_k,NC,NC, K_K,NC,NC, K_VT,NC,NC, 0x1b,K_k,NC, 0x1b,0x4e,K_K}, +{K_l,NC,NC, K_L,NC,NC, K_FF,NC,NC, 0x1b,K_l,NC, 0x1b,0x4e,K_L}, +{K_SEMI,NC,NC, K_COLON,NC,NC, K_SEMI,NC,NC, 0x1b,K_SEMI,NC, 0x1b,0x4e,K_COLON}, +{K_SQUOTE,NC,NC,K_DQUOTE,NC,NC, K_SQUOTE,NC,NC,0x1b,K_SQUOTE,NC, 0x1b,0x4e,K_DQUOTE}, +{K_GRAV,NC,NC, K_TILDE,NC,NC, K_RS,NC,NC, 0x1b,K_GRAV,NC, 0x1b,0x4e,K_TILDE}, {K_SCAN,K_LSHSC,NC, K_SCAN,K_LSHSC,NC, K_SCAN,K_LSHSC,NC, K_SCAN,K_LSHSC,NC, K_SCAN,K_LSHSC,NC}, -{K_BSLSH,NC,NC, K_PIPE,NC,NC, K_FS,NC,NC, 0x1b,0x5c,NC, 0x1b,0x4e,0x7c}, -{K_z,NC,NC, K_Z,NC,NC, K_SUB,NC,NC, 0x1b,0x7a,NC, 0x1b,0x4e,0x5a}, -{K_x,NC,NC, K_X,NC,NC, K_CAN,NC,NC, 0x1b,0x78,NC, 0x1b,0x4e,0x58}, -{K_c,NC,NC, K_C,NC,NC, K_ETX,NC,NC, 0x1b,0x63,NC, 0x1b,0x4e,0x43}, -{K_v,NC,NC, K_V,NC,NC, K_SYN,NC,NC, 0x1b,0x76,NC, 0x1b,0x4e,0x56}, -{K_b,NC,NC, K_B,NC,NC, K_STX,NC,NC, 0x1b,0x62,NC, 0x1b,0x4e,0x42}, -{K_n,NC,NC, K_N,NC,NC, K_SO,NC,NC, 0x1b,0x6e,NC, 0x1b,0x4e,0x4e}, -{K_m,NC,NC, K_M,NC,NC, K_CR,NC,NC, 0x1b,0x6d,NC, 0x1b,0x4e,0x4d}, -{K_COMMA,NC,NC, K_LTHN,NC,NC, K_COMMA,NC,NC, 0x1b,0x2c,NC, 0x1b,0x4e,0x3c}, -{K_PERIOD,NC,NC,K_GTHN,NC,NC, K_PERIOD,NC,NC,0x1b,0x2e,NC, 0x1b,0x4e,0x3e}, -{K_SLASH,NC,NC, K_QUES,NC,NC, K_SLASH,NC,NC, 0x1b,0x2f,NC, 0x1b,0x4e,0x3f}, +{K_BSLSH,NC,NC, K_PIPE,NC,NC, K_FS,NC,NC, 0x1b,K_BSLSH,NC, 0x1b,0x4e,K_PIPE}, +{K_z,NC,NC, K_Z,NC,NC, K_SUB,NC,NC, 0x1b,K_z,NC, 0x1b,0x4e,K_Z}, +{K_x,NC,NC, K_X,NC,NC, K_CAN,NC,NC, 0x1b,K_x,NC, 0x1b,0x4e,K_X}, +{K_c,NC,NC, K_C,NC,NC, K_ETX,NC,NC, 0x1b,K_c,NC, 0x1b,0x4e,K_C}, +{K_v,NC,NC, K_V,NC,NC, K_SYN,NC,NC, 0x1b,K_v,NC, 0x1b,0x4e,K_V}, +{K_b,NC,NC, K_B,NC,NC, K_STX,NC,NC, 0x1b,K_b,NC, 0x1b,0x4e,K_B}, +{K_n,NC,NC, K_N,NC,NC, K_SO,NC,NC, 0x1b,K_n,NC, 0x1b,0x4e,K_N}, +{K_m,NC,NC, K_M,NC,NC, K_CR,NC,NC, 0x1b,K_m,NC, 0x1b,0x4e,K_M}, +{K_COMMA,NC,NC, K_LTHN,NC,NC, K_COMMA,NC,NC, 0x1b,K_COMMA,NC, 0x1b,0x4e,K_LTHN}, +{K_PERIOD,NC,NC,K_GTHN,NC,NC, K_PERIOD,NC,NC,0x1b,K_PERIOD,NC, 0x1b,0x4e,K_GTHN}, +{K_SLASH,NC,NC, K_QUES,NC,NC, K_SLASH,NC,NC, 0x1b,K_SLASH,NC, 0x1b,0x4e,K_QUES}, {K_SCAN,K_RSHSC,NC, K_SCAN,K_RSHSC,NC, K_SCAN,K_RSHSC,NC, K_SCAN,K_RSHSC,NC, K_SCAN,K_RSHSC,NC}, -{K_ASTER,NC,NC, K_ASTER,NC,NC, K_ASTER,NC,NC, 0x1b,0x4e,0x2a,0x1b,0x4e,0x2a}, +{K_ASTER,NC,NC, K_ASTER,NC,NC, K_ASTER,NC,NC, 0x1b,K_ASTER,NC, 0x1b,0x4e,K_ASTER}, {K_SCAN,K_ALTSC,NC, K_SCAN,K_ALTSC,NC, K_SCAN,K_ALTSC,NC, K_SCAN,K_ALTSC,NC, K_SCAN,K_ALTSC,NC}, {K_SPACE,NC,NC, K_SPACE,NC,NC, K_NUL,NC,NC, 0x1b,K_SPACE,NC, K_SPACE,NC,NC}, @@ -314,22 +297,22 @@ unsigned char key_map[NUMKEYS][WIDTH_KMA {K_SCAN,K_NLCKSC,NC, K_SCAN,K_NLCKSC,NC, K_SCAN,K_NLCKSC,NC, K_SCAN,K_NLCKSC,NC, K_SCAN,K_NLCKSC,NC}, {K_SCRL, K_NUL,NC,NC, K_SCRL, K_SCRL, K_NUL,NC,NC}, -{K_HOME, K_SEVEN,NC,NC, K_HOME, K_HOME, 0x1b,0x4e,0x37}, -{K_UA, K_EIGHT,NC,NC, K_UA, K_UA, 0x1b,0x4e,0x38}, -{K_PUP, K_NINE,NC,NC, K_PUP, K_PUP, 0x1b,0x4e,0x39}, +{K_HOME, K_SEVEN,NC,NC, K_HOME, K_HOME, 0x1b,0x4e,K_SEVEN}, +{K_UA, K_EIGHT,NC,NC, K_UA, K_UA, 0x1b,0x4e,K_EIGHT}, +{K_PUP, K_NINE,NC,NC, K_PUP, K_PUP, 0x1b,0x4e,K_NINE}, {0x1b,0x5b,0x53, K_MINUS,NC,NC, 0x1b,0x5b,0x53, 0x1b,0x5b,0x53, 0x1b,0x4e,0x2d}, -{K_LA, K_FOUR,NC,NC, K_LA, K_LA, 0x1b,0x4e,0x34}, +{K_LA, K_FOUR,NC,NC, K_LA, K_LA, 0x1b,0x4e,K_FOUR}, {0x1b,0x5b,0x47, K_FIVE,NC,NC, 0x1b,0x5b,0x47, 0x1b,0x5b,0x47, 0x1b,0x4e,0x35}, -{K_RA, K_SIX,NC,NC, K_RA, K_RA, 0x1b,0x4e,0x36}, +{K_RA, K_SIX,NC,NC, K_RA, K_RA, 0x1b,0x4e,K_SIX}, {0x1b,0x5b,0x54, K_PLUS,NC,NC, 0x1b,0x5b,0x54, 0x1b,0x5b,0x54, 0x1b,0x4e,0x2b}, -{K_END, K_ONE,NC,NC, K_END, K_END, 0x1b,0x4e,0x31}, -{K_DA, K_TWO,NC,NC, K_DA, K_DA, 0x1b,0x4e,0x32}, -{K_PDN, K_THREE,NC,NC, K_PDN, K_PDN, 0x1b,0x4e,0x33}, -{K_INS, K_ZERO,NC,NC, K_INS, K_INS, 0x1b,0x4e,0x30}, -{0x1b,0x5b,0x39, K_PERIOD,NC,NC, K_DEL,NC,NC, K_DEL,NC,NC, 0x1b,0x4e,0x2e}, +{K_END, K_ONE,NC,NC, K_END, K_END, 0x1b,0x4e,K_ONE}, +{K_DA, K_TWO,NC,NC, K_DA, K_DA, 0x1b,0x4e,K_TWO}, +{K_PDN, K_THREE,NC,NC, K_PDN, K_PDN, 0x1b,0x4e,K_THREE}, +{K_INS, K_ZERO,NC,NC, K_INS, K_INS, 0x1b,0x4e,K_ZERO}, +{0x1b,0x5b,0x39, K_PERIOD,NC,NC, K_DEL,NC,NC, K_DEL,NC,NC, 0x1b,0x4e,K_PERIOD}, {NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC}, {NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC}, {NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC, NC,NC,NC}, @@ -345,31 +328,6 @@ unsigned char key_map[NUMKEYS][WIDTH_KMA short kd_index_reg = EGA_IDX_REG; short kd_io_reg = EGA_IO_REG; -/* - * IO port sets for different controllers. - */ -io_reg_t vga_port_list[] = { - 0x3b4, 0x3b5, 0x3b8, 0x3b9, 0x3ba, /* MDA/EGA */ - 0x3d4, 0x3d5, 0x3d8, 0x3d9, 0x3da, /* CGA/EGA */ - 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, - 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cc, 0x3cd, 0x3ce, 0x3cf, - IO_REG_NULL -}; - -mach_device_t kd_io_device = 0; - -kd_io_map_open(device) - mach_device_t device; -{ - kd_io_device = device; - io_port_create(device, vga_port_list); -} - -kd_io_map_close() -{ - io_port_destroy(kd_io_device); - kd_io_device = 0; -} /* * Globals used only for bitmap-based controllers. See kdsoft.h for @@ -408,6 +366,7 @@ int kd_pollc = 0; * Ring the bell for a short time. * Warning: uses outb(). You may prefer to use kd_debug_put. */ +void feep() { int i; @@ -415,9 +374,10 @@ feep() kd_bellon(); for (i = 0; i < 50000; ++i) ; - kd_belloff(); + kd_belloff(NULL); } +void pause() { int i; @@ -431,6 +391,7 @@ pause() * LOC=0 means put it in the bottom right corner, LOC=1 means put it * one column to the left, etc. */ +void kd_debug_put(loc, c) int loc; char c; @@ -445,6 +406,7 @@ char c; extern int mouse_in_use; int old_kb_mode; +void cnpollc(on) boolean_t on; { @@ -486,15 +448,16 @@ boolean_t on; * output: device is opened and setup * */ +int kdopen(dev, flag, ior) dev_t dev; int flag; io_req_t ior; { struct tty *tp; - int kdstart(); + void kdstart(); spl_t o_pri; - int kdstop(); + void kdstop(); tp = &kd_tty; o_pri = spltty(); @@ -513,11 +476,6 @@ kdopen(dev, flag, ior) tp->t_ospeed = tp->t_ispeed = B9600; tp->t_flags = ODDP|EVENP|ECHO|CRMOD|XTABS; kdinit(); - - /* XXX kd_io_map_open allocates memory */ - simple_unlock(&tp->t_lock); - kd_io_map_open(ior->io_device); - simple_lock(&tp->t_lock); } tp->t_state |= TS_CARR_ON; simple_unlock(&tp->t_lock); @@ -538,6 +496,7 @@ kdopen(dev, flag, ior) * */ /*ARGSUSED*/ +void kdclose(dev, flag) int dev; int flag; @@ -553,10 +512,7 @@ int flag; splx(s); } - kd_io_map_close(); - return; - } @@ -572,6 +528,7 @@ int flag; * */ /*ARGSUSED*/ +int kdread(dev, uio) int dev; struct uio *uio; @@ -596,6 +553,7 @@ struct uio *uio; * */ /*ARGSUSED*/ +int kdwrite(dev, uio) int dev; struct uio *uio; @@ -621,11 +579,12 @@ kdmmap(dev, off, prot) return(i386_btop(kd_bitmap_start+off)); } +int kdportdeath(dev, port) dev_t dev; mach_port_t port; { - return (tty_portdeath(&kd_tty, port)); + return (tty_portdeath(&kd_tty, (ipc_port_t)port)); } /*ARGSUSED*/ @@ -633,7 +592,7 @@ io_return_t kdgetstat(dev, flavor, data, dev_t dev; int flavor; int * data; /* pointer to OUT array */ - unsigned int *count; /* OUT */ + natural_t *count; /* OUT */ { io_return_t result; @@ -663,7 +622,7 @@ io_return_t kdsetstat(dev, flavor, data, dev_t dev; int flavor; int * data; - unsigned int count; + natural_t count; { io_return_t result; @@ -695,6 +654,7 @@ io_return_t kdsetstat(dev, flavor, data, * Turn the bell on or off. Returns error code, if given bogus * on/off value. */ +int kdsetbell(val, flags) int val; /* on or off */ int flags; /* flags set for console */ @@ -705,7 +665,7 @@ int flags; /* flags set for console * if (val == KD_BELLON) kd_bellon(); else if (val == KD_BELLOFF) - kd_belloff(); + kd_belloff(NULL); else err = D_INVALID_OPERATION; @@ -718,6 +678,7 @@ int flags; /* flags set for console * * * Get entry from key mapping table. Returns error code, if any. */ +int kdgetkbent(kbent) struct kbentry * kbent; { @@ -770,20 +731,22 @@ int flags; /* flags set for console * * */ /*ARGSUSED*/ -kdintr(vec, regs) +void +kdintr(vec) int vec; -int regs; { struct tty *tp; unsigned char c; unsigned char scancode; - int o_pri; int char_idx; boolean_t up = FALSE; /* key-up event */ extern int mouse_in_use; if (kd_pollc) return; /* kdb polling kbd */ + if (!kd_initialized) + return; + tp = &kd_tty; #ifdef old while ((inb(K_STATUS) & K_OBUF_FUL) == 0); /* this should never loop */ @@ -835,7 +798,7 @@ int regs; goto done; } else if (kd_kbd_mouse && kd_kbd_magic(scancode)) { goto done; - } else if (kdcheckmagic(scancode, ®s)) { + } else if (kdcheckmagic(scancode)) { goto done; } else if (kb_mode == KB_EVENT) { kd_enqsc(scancode); @@ -909,6 +872,7 @@ int regs; * For pending commands, complete the command. For data bytes, * drop the ack on the floor. */ +void kd_handle_ack() { switch (kd_ack) { @@ -933,6 +897,7 @@ kd_handle_ack() * * Resend a missed keyboard command or data byte. */ +void kd_resend() { if (kd_ack == NOT_WAITING) @@ -953,6 +918,7 @@ kd_resend() * * output: the new state */ +int do_modifier(state, c, up) int state; Scancode c; @@ -1018,9 +984,8 @@ boolean_t up; * are still held down. */ boolean_t -kdcheckmagic(scancode, regs) +kdcheckmagic(scancode) Scancode scancode; -int *regs; { static int magic_state = KS_NORMAL; /* like kd_state */ boolean_t up = FALSE; @@ -1075,6 +1040,7 @@ int *regs; * Return the value for the 2nd index into key_map that * corresponds to the given state. */ +int kdstate2idx(state, extended) int state; /* bit vector, not a state index */ boolean_t extended; @@ -1114,6 +1080,7 @@ boolean_t extended; * Entered and left at spltty. Drops priority to spl0 to display character. * ASSUMES that it is never called from interrupt-driven code. */ +void kdstart(tp) struct tty *tp; { @@ -1164,6 +1131,7 @@ struct tty *tp; } /*ARGSUSED*/ +void kdstop(tp, flags) register struct tty *tp; int flags; @@ -1190,6 +1158,7 @@ kdstop(tp, flags) * output : Driver is initialized * */ +void kdinit() { void kd_xga_init(); @@ -1207,11 +1176,7 @@ kdinit() * board specific initialization: set up globals and kd_dxxx * pointers, and synch displayed cursor with logical cursor. */ - if (!evc1init()) - if (blit_present()) - blit_init(); - else - kd_xga_init(); + kd_xga_init(); /* get rid of any garbage in output buffer */ if (inb(K_STATUS) & K_OBUF_FUL) @@ -1244,6 +1209,9 @@ kdinit() enable the keyboard controller. This keeps NUM-LOCK from being set on the NEC Versa. */ + + /* Allocate the input buffer. */ + ttychars(&kd_tty); } /* @@ -1257,7 +1225,9 @@ kdinit() * */ static unsigned int kd_bellstate = 0; -kd_belloff() + +void +kd_belloff(void * param) { unsigned char status; @@ -1277,6 +1247,7 @@ kd_belloff() * output : bell is turned on * */ +void kd_bellon() { unsigned char status; @@ -1306,6 +1277,7 @@ kd_bellon() */ int sit_for_0 = 1; +void kd_putc(ch) u_char ch; { @@ -1359,6 +1331,7 @@ u_char ch; * screen. * */ +void kd_setpos(newpos) csrpos_t newpos; { @@ -1385,6 +1358,7 @@ csrpos_t newpos; * output : lines on screen appear to be shifted up one line * */ +void kd_scrollup() { csrpos_t to; @@ -1414,6 +1388,7 @@ kd_scrollup() * output : Lines on screen appear to be moved down one line * */ +void kd_scrolldn() { csrpos_t to; @@ -1447,6 +1422,7 @@ kd_scrolldn() * defined by the ansi terminal specification * */ +void kd_parseesc() { u_char *escp; @@ -1518,6 +1494,7 @@ unsigned char color_table[] = { 0, 4, 2, * sequence acceptable to the ansi terminal specification * */ +void kd_parserest(cp) u_char *cp; { @@ -1525,17 +1502,17 @@ u_char *cp; csrpos_t newpos; for(i=0;i<=15;i++) - number[i] = DEFAULT; + number[i] = MACH_ATOI_DEFAULT; do { - cp += kd_atoi(cp, &number[npar]); + cp += mach_atoi(cp, &number[npar]); } while (*cp == ';' && ++npar <= 15 && cp++); switch(*cp) { case 'm': for (i=0;i<=npar;i++) switch(number[i]) { - case DEFAULT: + case MACH_ATOI_DEFAULT: case 0: kd_attrflags = 0; kd_color = KA_NORMAL; @@ -1595,14 +1572,14 @@ u_char *cp; esc_spt = esc_seq; break; case '@': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_insch(1); else kd_insch(number[0]); esc_spt = esc_seq; break; case 'A': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_up(); else while (number[0]--) @@ -1610,7 +1587,7 @@ u_char *cp; esc_spt = esc_seq; break; case 'B': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_down(); else while (number[0]--) @@ -1618,7 +1595,7 @@ u_char *cp; esc_spt = esc_seq; break; case 'C': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_right(); else while (number[0]--) @@ -1626,7 +1603,7 @@ u_char *cp; esc_spt = esc_seq; break; case 'D': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_left(); else while (number[0]--) @@ -1635,7 +1612,7 @@ u_char *cp; break; case 'E': kd_cr(); - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_down(); else while (number[0]--) @@ -1644,7 +1621,7 @@ u_char *cp; break; case 'F': kd_cr(); - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_up(); else while (number[0]--) @@ -1652,7 +1629,7 @@ u_char *cp; esc_spt = esc_seq; break; case 'G': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) number[0] = 0; else if (number[0] > 0) @@ -1662,18 +1639,18 @@ u_char *cp; break; case 'f': case 'H': - if (number[0] == DEFAULT && number[1] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT && number[1] == MACH_ATOI_DEFAULT) { kd_home(); esc_spt = esc_seq; break; } - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) number[0] = 0; else if (number[0] > 0) --number[0]; /* numbered from 1 */ newpos = (number[0] * ONE_LINE); /* setup row */ - if (number[1] == DEFAULT) + if (number[1] == MACH_ATOI_DEFAULT) number[1] = 0; else if (number[1] > 0) number[1]--; @@ -1687,7 +1664,7 @@ u_char *cp; break; /* done or not ready */ case 'J': switch(number[0]) { - case DEFAULT: + case MACH_ATOI_DEFAULT: case 0: kd_cltobcur(); /* clears from current pos to bottom. @@ -1708,7 +1685,7 @@ u_char *cp; break; case 'K': switch(number[0]) { - case DEFAULT: + case MACH_ATOI_DEFAULT: case 0: kd_cltoecur(); /* clears from current pos to eoln. @@ -1729,28 +1706,28 @@ u_char *cp; esc_spt = esc_seq; break; case 'L': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_insln(1); else kd_insln(number[0]); esc_spt = esc_seq; break; case 'M': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_delln(1); else kd_delln(number[0]); esc_spt = esc_seq; break; case 'P': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_delch(1); else kd_delch(number[0]); esc_spt = esc_seq; break; case 'S': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_scrollup(); else while (number[0]--) @@ -1758,7 +1735,7 @@ u_char *cp; esc_spt = esc_seq; break; case 'T': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_scrolldn(); else while (number[0]--) @@ -1766,7 +1743,7 @@ u_char *cp; esc_spt = esc_seq; break; case 'X': - if (number[0] == DEFAULT) + if (number[0] == MACH_ATOI_DEFAULT) kd_erase(1); else kd_erase(number[0]); @@ -1782,37 +1759,7 @@ u_char *cp; return; } -/* - * kd_atoi: - * - * This function converts an ascii string into an integer, and - * returns DEFAULT if no integer was found. Note that this is why - * we don't use the regular atio(), because ZERO is ZERO and not - * the DEFAULT in all cases. - * - * input : string - * output : a number or possibly DEFAULT, and the count of characters - * consumed by the conversion - * - */ -int -kd_atoi(cp, nump) -u_char *cp; -int *nump; -{ - int number; - u_char *original; - - original = cp; - for (number = 0; ('0' <= *cp) && (*cp <= '9'); cp++) - number = (number * 10) + (*cp - '0'); - if (original == cp) - *nump = DEFAULT; - else - *nump = number; - return(cp - original); -} - +void kd_tab() { int i; @@ -1833,6 +1780,7 @@ kd_tab() * output : Screen is cleared * */ +void kd_cls() { (*kd_dclear)(0, ONE_PAGE/ONE_SPACE, kd_attr); @@ -1850,6 +1798,7 @@ kd_cls() * output : Cursor position is moved * */ +void kd_home() { kd_setpos(0); @@ -1866,6 +1815,7 @@ kd_home() * output : Cursor moves up one line, or screen is scrolled * */ +void kd_up() { if (kd_curpos < ONE_LINE) @@ -1885,6 +1835,7 @@ kd_up() * output : Cursor moves down one line or the screen is scrolled * */ +void kd_down() { if (kd_curpos >= (ONE_PAGE - ONE_LINE)) @@ -1904,6 +1855,7 @@ kd_down() * output : Cursor moves one position to the right * */ +void kd_right() { if (kd_curpos < (ONE_PAGE - ONE_SPACE)) @@ -1925,6 +1877,7 @@ kd_right() * output : Cursor moves one position to the left * */ +void kd_left() { if (0 < kd_curpos) @@ -1943,6 +1896,7 @@ kd_left() * output : Cursor moves to the beginning of the current line * */ +void kd_cr() { kd_setpos(BEG_OF_LINE(kd_curpos)); @@ -1960,6 +1914,7 @@ kd_cr() * output : Screen is cleared from current cursor postion to bottom * */ +void kd_cltobcur() { csrpos_t start; @@ -1982,6 +1937,7 @@ kd_cltobcur() * output : Screen is cleared from current cursor postion to top * */ +void kd_cltopcur() { int count; @@ -2001,6 +1957,7 @@ kd_cltopcur() * output : Line is cleared from current cursor position to eoln * */ +void kd_cltoecur() { csrpos_t i; @@ -2023,6 +1980,7 @@ kd_cltoecur() * output : Line is cleared from beginning to current position * */ +void kd_clfrbcur() { csrpos_t i; @@ -2043,6 +2001,7 @@ kd_clfrbcur() * output : lines appear to be deleted * */ +void kd_delln(number) int number; { @@ -2081,6 +2040,7 @@ int number; * output : New lines appear to be inserted * */ +void kd_insln(number) int number; { @@ -2120,6 +2080,7 @@ int number; * output : characters appear to be deleted * */ +void kd_delch(number) int number; { @@ -2161,6 +2122,7 @@ int number; * output : characters appear to be blanked or erased * */ +void kd_erase(number) int number; { @@ -2186,6 +2148,7 @@ int number; * output : Current line is erased * */ +void kd_eraseln() { csrpos_t i; @@ -2209,6 +2172,7 @@ kd_eraseln() * output : Blanks are inserted at cursor position * */ +void kd_insch(number) int number; { @@ -2250,6 +2214,7 @@ int number; * returns TRUE if character is lowercase * */ +boolean_t kd_isupper(c) u_char c; { @@ -2258,6 +2223,7 @@ u_char c; return(FALSE); } +boolean_t kd_islower(c) u_char c; { @@ -2275,6 +2241,7 @@ u_char c; * keyboard command. * */ +void kd_senddata(ch) unsigned char ch; { @@ -2292,6 +2259,7 @@ unsigned char ch; * clear before sending the data. * */ +void kd_sendcmd(ch) unsigned char ch; { @@ -2315,6 +2283,7 @@ kd_getdata() return(inb(K_RDWR)); } +unsigned char kd_cmdreg_read() { int ch=KC_CMD_READ; @@ -2326,6 +2295,7 @@ int ch=KC_CMD_READ; return(inb(K_RDWR)); } +void kd_cmdreg_write(val) { int ch=KC_CMD_WRITE; @@ -2337,6 +2307,7 @@ int ch=KC_CMD_WRITE; outb(K_RDWR, val); } +void kd_mouse_drain() { int i; @@ -2350,7 +2321,7 @@ kd_mouse_drain() * * Set kd_state and update the keyboard status LEDs. */ - +void set_kd_state(newstate) int newstate; { @@ -2382,11 +2353,14 @@ int state; * * Set the keyboard LEDs according to the given byte. */ +void kd_setleds1(val) u_char val; { if (kd_ack != NOT_WAITING) { +#ifdef MACH_KBD printf("kd_setleds1: unexpected state (%d)\n", kd_ack); +#endif return; } @@ -2395,6 +2369,7 @@ u_char val; kd_senddata(K_CMD_LEDS); } +void kd_setleds2() { kd_senddata(kd_nextled); @@ -2408,6 +2383,7 @@ kd_setleds2() * Currently disabled because cngetc ignores caps lock and num * lock anyway. */ +void cnsetleds(val) u_char val; { @@ -2417,6 +2393,7 @@ u_char val; (void)kd_getdata(); /* XXX - assume is ACK */ } +void kdreboot() { (*kd_dreset)(); @@ -2435,6 +2412,7 @@ kdreboot() static int which_button[] = {0, MOUSE_LEFT, MOUSE_MIDDLE, MOUSE_RIGHT}; static struct mouse_motion moved; +int kd_kbd_magic(scancode) { int new_button = 0; @@ -2963,6 +2941,7 @@ kdcnprobe(struct consdev *cp) cp->cn_dev = makedev(maj, unit); cp->cn_pri = pri; + return 0; } int @@ -2988,15 +2967,15 @@ kdcngetc(dev_t dev, int wait) int kdcnputc(dev_t dev, int c) { - int i; - if (!kd_initialized) - return; + return -1; /* Note that tab is handled in kd_putc */ if (c == '\n') kd_putc('\r'); kd_putc(c); + + return 0; } /*