Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3528 → Rev 4629

/branches/arm/kernel/genarch/include/kbd/pl050.h
0,0 → 1,94
/*
* Copyright (c) 2006 Jakub Jermar
* Copyright (c) 2009 Vineeth Pillai
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup arm32
* @{
*/
/** @file
*/
 
/**
* This file implements pl050 specific functions for keyboard and mouse
*/
 
#ifndef KERN_PL050_H
#define KERN_PL050_H
 
#include <arch/asm.h>
#include <arch/types.h>
#include <console/chardev.h>
 
/*
* pl050 register offsets from the base address
*/
#define PL050_CR 0x00
#define PL050_STAT 0x04
#define PL050_DATA 0x08
#define PL050_CLOCKDIV 0x0C
#define PL050_INTRSTAT 0x10
 
/*
* Control Register Bits
*/
#define PL050_CR_TYPE (1 << 5) /* Type 0: PS2/AT mode, 1: No Line control bit mode */
#define PL050_CR_RXINTR (1 << 4) /* Recieve Interrupt Enable */
#define PL050_CR_TXINTR (1 << 3) /* Transmit Interrupt Enable */
#define PL050_CR_INTR (1 << 2) /* Interrupt Enable */
#define PL050_CR_FKMID (1 << 1) /* Force KMI Data Low */
#define PL050_CR_FKMIC 1 /* Force KMI Clock Low */
 
/*
* Status register bits
*/
#define PL050_STAT_TXEMPTY (1 << 6) /* 1: Transmit register empty */
#define PL050_STAT_TXBUSY (1 << 5) /* 1: Busy, sending data */
#define PL050_STAT_RXFULL (1 << 4) /* 1: register Full */
#define PL050_STAT_RXBUSY (1 << 3) /* 1: Busy, recieving Data */
#define PL050_STAT_RXPARITY (1 << 2) /* odd parity of the last bit recieved */
#define PL050_STAT_KMIC (1 << 1) /* status of KMICLKIN */
#define PL050_STAT_KMID 1 /* status of KMIDATAIN */
 
/*
* Interrupt status register bits.
*/
#define PL050_TX_INTRSTAT (1 << 1) /* Transmit intr asserted */
#define PL050_RX_INTRSTAT 1 /* Recieve intr asserted */
 
void pl050_grab(void);
void pl050_release(void);
char pl050_key_read(chardev_t *);
uint8_t pl050_dataread(void);
uint8_t pl050_statusread(void);
void pl050_crwrite(uint8_t val);
void pl050_poll(void);
void pl050_init(devno_t, inr_t, uintptr_t, uintptr_t);
#endif
 
/** @}
*/
/branches/arm/kernel/genarch/Makefile.inc
72,6 → 72,13
genarch/src/kbd/scanc_pc.c
endif
 
## pl050 controller
ifeq ($(CONFIG_PL050),y)
GENARCH_SOURCES += \
genarch/src/kbd/key.c \
genarch/src/kbd/scanc_pl050.c
DEFS += -DCONFIG_PL050
endif
## Sun keyboard
ifeq ($(CONFIG_SUN_KBD),y)
GENARCH_SOURCES += \
/branches/arm/kernel/genarch/src/kbd/scanc_pl050.c
0,0 → 1,233
/*
* Copyright (c) 2006 Jakub Jermar
* Copyright (c) 2009 Vineeth Pillai
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
/** @addtogroup genarch
* @{
*/
/**
* @file
* @brief Scan codes for pl050 keyboards.
*/
 
#include <genarch/kbd/scanc.h>
 
/** Primary meaning of scancodes. */
char sc_primary_map[] = {
SPECIAL, /* 0x00 */
SPECIAL, /* 0x01 - F9 */
SPECIAL, /* 0x02 - F7 */
SPECIAL, /* 0x03 - F5 */
SPECIAL, /* 0x04 - F3 */
SPECIAL, /* 0x05 - F1 */
SPECIAL, /* 0x06 - F2 */
SPECIAL, /* 0x07 - F12 */
SPECIAL, /* 0x08 - */
SPECIAL, /* 0x09 - F10 */
SPECIAL, /* 0x0A - F8 */
SPECIAL, /* 0x0B - F10 */
SPECIAL, /* 0x0C - F4 */
'\t', /* 0x0D - Tab */
'~',
SPECIAL, /* 0x0F */
SPECIAL, /* 0x10 */
SPECIAL, /* 0x11 - LAlt */
SPECIAL, /* 0x12 - LShift */
SPECIAL, /* ox13 */
SPECIAL, /* 0x14 Ctrl */
'q', '1',
SPECIAL, /* 0x17 */
SPECIAL, /* 0x18 */
SPECIAL, /* 0x19 */
'z', 's', 'a', 'w', '2',
SPECIAL, /* 0x1F */
SPECIAL, /* 0x20 */
'c', 'x', 'd', 'e', '4', '3',
SPECIAL, /* 0x27 */
SPECIAL, /* 0x28 */
' ', 'v', 'f', 't', 'r', '5',
SPECIAL, /* 0x2F */
SPECIAL, /* 0x30 */
'n', 'b', 'h', 'g', 'y', '6',
SPECIAL, /* 0x37 */
SPECIAL, /* 0x38 */
SPECIAL, /* 0x39 */
'm', 'j', 'u', '7', '8',
SPECIAL, /* 0x3F */
SPECIAL, /* 0x40 */
',', 'k', 'i', 'o', '0', '9',
SPECIAL, /* 0x47 */
SPECIAL, /* 0x48 */
'.', '/', 'l', ';', 'p', '-',
SPECIAL, /* 0x4F */
SPECIAL, /* 0x50 */
'\'',
SPECIAL, /* 0x52 */
SPECIAL, /* 0x53 */
'{', '=',
SPECIAL, /* 0x56 */
SPECIAL, /* 0x57 */
SPECIAL, /* 0x58 - Caps Lock */
SPECIAL, /* 0x59 - RShift */
'\n', '}',
SPECIAL, /* 0x5C */
'\\',
SPECIAL, /* 0x5E */
SPECIAL, /* 0x5F */
SPECIAL, /* 0x60 */
SPECIAL, /* 0x61 */
SPECIAL, /* 0x62 */
SPECIAL, /* 0x63 */
SPECIAL, /* 0x64 */
SPECIAL, /* 0x65 */
'\b', /* 0x66 - backspace*/
SPECIAL, /* 0x67 */
SPECIAL, /* 0x68 */
SPECIAL, /* 0x69 */
SPECIAL, /* 0x6a */
SPECIAL, /* 0x6b - Left Arrow */
SPECIAL, /* 0x6c */
SPECIAL, /* 0x6d */
SPECIAL, /* 0x6e */
SPECIAL, /* 0x6f */
SPECIAL, /* 0x70 - Del */
SPECIAL, /* 0x71 */
SPECIAL, /* 0x72 Down Arrow */
SPECIAL, /* 0x73 */
SPECIAL, /* 0x74 - Right Arrow */
SPECIAL, /* 0x75 Up Arrow */
SPECIAL, /* 0x76 Esc */
SPECIAL, /* 0x77 - NumLock*/
SPECIAL, /* 0x78 F11*/
SPECIAL, /* 0x79 */
SPECIAL, /* 0x7a */
SPECIAL, /* 0x7b */
SPECIAL, /* 0x7c */
SPECIAL, /* 0x7d */
SPECIAL, /* 0x7e */
SPECIAL /* 0x7f */
};
 
/** Secondary meaning of scancodes. */
char sc_secondary_map[] = {
SPECIAL, /* 0x00 */
SPECIAL, /* 0x01 - F9 */
SPECIAL, /* 0x02 - F7 */
SPECIAL, /* 0x03 - F5 */
SPECIAL, /* 0x04 - F3 */
SPECIAL, /* 0x05 - F1 */
SPECIAL, /* 0x06 - F2 */
SPECIAL, /* 0x07 - F12 */
SPECIAL, /* 0x08 - */
SPECIAL, /* 0x09 - F10 */
SPECIAL, /* 0x0A - F8 */
SPECIAL, /* 0x0B - F10 */
SPECIAL, /* 0x0C - F4 */
'\t', /* 0x0D - Tab */
'~',
SPECIAL, /* 0x0F */
SPECIAL, /* 0x10 */
SPECIAL, /* 0x11 - LAlt */
SPECIAL, /* 0x12 - LShift */
SPECIAL, /* ox13 */
SPECIAL, /* 0x14 Ctrl */
'Q', '!',
SPECIAL, /* 0x17 */
SPECIAL, /* 0x18 */
SPECIAL, /* 0x19 */
'Z', 'S', 'A', 'W', '@',
SPECIAL, /* 0x1F */
SPECIAL, /* 0x20 */
'C', 'X', 'D', 'E', '$', '#',
SPECIAL, /* 0x27 */
SPECIAL, /* 0x28 */
' ', 'V', 'F', 'T', 'R', '%',
SPECIAL, /* 0x2F */
SPECIAL, /* 0x30 */
'N', 'B', 'H', 'G', 'Y', '^',
SPECIAL, /* 0x37 */
SPECIAL, /* 0x38 */
SPECIAL, /* 0x39 */
'M', 'J', 'U', '&', '*',
SPECIAL, /* 0x3F */
SPECIAL, /* 0x40 */
'<', 'K', 'I', 'O', ')', '(',
SPECIAL, /* 0x47 */
SPECIAL, /* 0x48 */
'>', '?', 'L', ':', 'P', '_',
SPECIAL, /* 0x4F */
SPECIAL, /* 0x50 */
'"',
SPECIAL, /* 0x52 */
SPECIAL, /* 0x53 */
'{', '+',
SPECIAL, /* 0x56 */
SPECIAL, /* 0x57 */
SPECIAL, /* 0x58 - Caps Lock */
SPECIAL, /* 0x59 - RShift */
'\n', '}',
SPECIAL, /* 0x5C */
'|',
SPECIAL, /* 0x5E */
SPECIAL, /* 0x5F */
SPECIAL, /* 0x60 */
SPECIAL, /* 0x61 */
SPECIAL, /* 0x62 */
SPECIAL, /* 0x63 */
SPECIAL, /* 0x64 */
SPECIAL, /* 0x65 */
'\b', /* 0x66 - backspace*/
SPECIAL, /* 0x67 */
SPECIAL, /* 0x68 */
SPECIAL, /* 0x69 */
SPECIAL, /* 0x6a */
SPECIAL, /* 0x6b - Left Arrow */
SPECIAL, /* 0x6c */
SPECIAL, /* 0x6d */
SPECIAL, /* 0x6e */
SPECIAL, /* 0x6f */
SPECIAL, /* 0x70 - Del */
SPECIAL, /* 0x71 */
SPECIAL, /* 0x72 Down Arrow */
SPECIAL, /* 0x73 */
SPECIAL, /* 0x74 - Right Arrow */
SPECIAL, /* 0x75 Up Arrow */
SPECIAL, /* 0x76 Esc */
SPECIAL, /* 0x77 - NumLock*/
SPECIAL, /* 0x78 F11*/
SPECIAL, /* 0x79 */
SPECIAL, /* 0x7a */
SPECIAL, /* 0x7b */
SPECIAL, /* 0x7c */
SPECIAL, /* 0x7d */
SPECIAL, /* 0x7e */
SPECIAL /* 0x7f */
};
 
/** @}
*/
/branches/arm/kernel/genarch/src/kbd/key.c
39,6 → 39,9
#ifdef CONFIG_I8042
#include <genarch/kbd/scanc_pc.h>
#endif
#ifdef CONFIG_PL050
#include <genarch/kbd/scanc_pl050.h>
#endif
#if (defined(CONFIG_Z8530) || defined(CONFIG_NS16550))
#include <genarch/kbd/scanc_sun.h>
#endif