Changeset c621f4aa in mainline for uspace/srv/hid/kbd


Ignore:
Timestamp:
2010-07-25T10:11:13Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
Children:
377cce8
Parents:
24a2517 (diff), a2da43c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge with mainline.

Location:
uspace/srv/hid/kbd
Files:
1 added
2 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/kbd/Makefile

    r24a2517 rc621f4aa  
    2828#
    2929
    30 include Makefile.common
     30USPACE_PREFIX = ../../..
     31ROOT_PATH = $(USPACE_PREFIX)/..
    3132
    32 .PHONY: all clean
     33COMMON_MAKEFILE = $(ROOT_PATH)/Makefile.common
     34CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
    3335
    34 all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
    35         -[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
    36         $(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
     36EXTRA_CFLAGS = -Iinclude
     37BINARY = kbd
    3738
    38 clean:
    39         rm -f $(DEPEND) $(DEPEND_PREV) $(JOB) $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm
    40         find . -name '*.o' -follow -exec rm \{\} \;
     39-include $(COMMON_MAKEFILE)
     40-include $(CONFIG_MAKEFILE)
     41
     42## Sources
     43#
     44
     45SOURCES = \
     46        generic/kbd.c \
     47        genarch/gsp.c \
     48        genarch/stroke.c \
     49        layout/cz.c \
     50        layout/us_qwerty.c \
     51        layout/us_dvorak.c
     52
     53ifeq ($(UARCH),amd64)
     54        SOURCES += \
     55                port/chardev.c \
     56                ctl/pc.c
     57endif
     58
     59ifeq ($(UARCH),arm32)
     60        ifeq ($(MACHINE),gta02)
     61                SOURCES += \
     62                        port/dummy.c \
     63                        ctl/pc.c
     64        endif
     65        ifeq ($(MACHINE),testarm)
     66                SOURCES += \
     67                        port/gxemul.c
     68               
     69                ifeq ($(CONFIG_FB),y)
     70                        SOURCES += \
     71                                ctl/gxe_fb.c
     72                else
     73                        SOURCES += \
     74                                ctl/stty.c
     75                endif
     76        endif
     77        ifeq ($(MACHINE),integratorcp)
     78                SOURCES += \
     79                        port/pl050.c \
     80                        ctl/pl050.c
     81        endif
     82endif
     83
     84ifeq ($(UARCH),ia32)
     85        SOURCES += \
     86                port/chardev.c \
     87                ctl/pc.c
     88endif
     89
     90ifeq ($(MACHINE),i460GX)
     91        SOURCES += \
     92                port/chardev.c \
     93                ctl/pc.c
     94endif
     95
     96ifeq ($(MACHINE),ski)
     97        SOURCES += \
     98                port/ski.c \
     99                ctl/stty.c
     100endif
     101
     102ifeq ($(MACHINE),msim)
     103        SOURCES += \
     104                port/msim.c \
     105                ctl/stty.c
     106endif
     107
     108ifeq ($(MACHINE),lgxemul)
     109        SOURCES += \
     110                port/gxemul.c
     111       
     112        ifeq ($(CONFIG_FB),y)
     113                SOURCES += \
     114                        ctl/gxe_fb.c
     115        else
     116                SOURCES += \
     117                        ctl/stty.c
     118        endif
     119endif
     120
     121ifeq ($(MACHINE),bgxemul)
     122        SOURCES += \
     123                port/gxemul.c
     124       
     125        ifeq ($(CONFIG_FB),y)
     126                SOURCES += \
     127                        ctl/gxe_fb.c
     128        else
     129                SOURCES += \
     130                        ctl/stty.c
     131        endif
     132endif
     133
     134ifeq ($(UARCH),ppc32)
     135        SOURCES += \
     136                port/adb.c \
     137                ctl/apple.c
     138endif
     139
     140ifeq ($(UARCH),sparc64)
     141        ifeq ($(PROCESSOR),sun4v)
     142                SOURCES += \
     143                        port/niagara.c \
     144                        ctl/stty.c
     145        else
     146                ifeq ($(MACHINE),serengeti)
     147                        SOURCES += \
     148                                port/sgcn.c \
     149                                ctl/stty.c
     150                endif
     151                ifeq ($(MACHINE),generic)
     152                        SOURCES += \
     153                        port/sun.c \
     154                        port/z8530.c \
     155                        port/ns16550.c \
     156                        ctl/sun.c
     157                endif
     158        endif
     159endif
     160
     161ifeq ($(UARCH),abs32le)
     162        SOURCES += \
     163                port/dummy.c \
     164                ctl/pc.c
     165endif
     166
     167include $(USPACE_PREFIX)/Makefile.common
  • uspace/srv/hid/kbd/generic/kbd.c

    r24a2517 rc621f4aa  
    212212int main(int argc, char **argv)
    213213{
    214         printf(NAME ": HelenOS Keyboard service\n");
    215        
    216         if (sysinfo_value("kbd.cir.fhc") == 1)
     214        printf("%s: HelenOS Keyboard service\n", NAME);
     215       
     216        sysarg_t fhc;
     217        sysarg_t obio;
     218       
     219        if ((sysinfo_get_value("kbd.cir.fhc", &fhc) == EOK) && (fhc))
    217220                cir_service = SERVICE_FHC;
    218         else if (sysinfo_value("kbd.cir.obio") == 1)
     221        else if ((sysinfo_get_value("kbd.cir.obio", &obio) == EOK) && (obio))
    219222                cir_service = SERVICE_OBIO;
    220223       
     
    240243        int rc = devmap_driver_register(NAME, client_connection);
    241244        if (rc < 0) {
    242                 printf(NAME ": Unable to register driver (%d)\n", rc);
     245                printf("%s: Unable to register driver (%d)\n", NAME, rc);
    243246                return -1;
    244247        }
     
    249252        dev_handle_t dev_handle;
    250253        if (devmap_device_register(kbd, &dev_handle) != EOK) {
    251                 printf(NAME ": Unable to register device %s\n", kbd);
     254                printf("%s: Unable to register device %s\n", NAME, kbd);
    252255                return -1;
    253256        }
  • uspace/srv/hid/kbd/port/adb.c

    r24a2517 rc621f4aa  
    5353int kbd_port_init(void)
    5454{
    55         char *input = "/dev/adb/kbd";
     55        const char *input = "/dev/adb/kbd";
    5656        int input_fd;
    5757
  • uspace/srv/hid/kbd/port/chardev.c

    r24a2517 rc621f4aa  
    5252int kbd_port_init(void)
    5353{
    54         char *input = "/dev/char/ps2a";
     54        const char *input = "/dev/char/ps2a";
    5555        int input_fd;
    5656
  • uspace/srv/hid/kbd/port/gxemul.c

    r24a2517 rc621f4aa  
    4141#include <kbd.h>
    4242#include <ddi.h>
     43#include <errno.h>
    4344
    4445static irq_cmd_t gxemul_cmds[] = {
     
    6364int kbd_port_init(void)
    6465{
     66        sysarg_t addr;
     67        if (sysinfo_get_value("kbd.address.virtual", &addr) != EOK)
     68                return -1;
     69       
     70        sysarg_t inr;
     71        if (sysinfo_get_value("kbd.inr", &inr) != EOK)
     72                return -1;
     73       
    6574        async_set_interrupt_received(gxemul_irq_handler);
    66         gxemul_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual");
    67         ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(),
    68             0, &gxemul_kbd);
     75        gxemul_cmds[0].addr = (void *) addr;
     76        ipc_register_irq(inr, device_assign_devno(), 0, &gxemul_kbd);
    6977        return 0;
    7078}
  • uspace/srv/hid/kbd/port/msim.c

    r24a2517 rc621f4aa  
    3030 * @ingroup  kbd
    3131 * @{
    32  */ 
     32 */
    3333/** @file
    34  * @brief       Msim keyboard port driver.
     34 * @brief Msim keyboard port driver.
    3535 */
    3636
     
    4141#include <kbd.h>
    4242#include <ddi.h>
     43#include <errno.h>
    4344
    4445irq_cmd_t msim_cmds[] = {
     
    6364int kbd_port_init(void)
    6465{
     66        sysarg_t vaddr;
     67        if (sysinfo_get_value("kbd.address.virtual", &vaddr) != EOK)
     68                return -1;
     69       
     70        sysarg_t inr;
     71        if (sysinfo_get_value("kbd.inr", &inr) != EOK)
     72                return -1;
     73       
     74        msim_cmds[0].addr = (void *) vaddr;
    6575        async_set_interrupt_received(msim_irq_handler);
    66         msim_cmds[0].addr = sysinfo_value("kbd.address.virtual");
    67         ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(),
    68             0, &msim_kbd);
     76        ipc_register_irq(inr, device_assign_devno(), 0, &msim_kbd);
     77       
    6978        return 0;
    7079}
  • uspace/srv/hid/kbd/port/ns16550.c

    r24a2517 rc621f4aa  
    3030 * @ingroup  kbd
    3131 * @{
    32  */ 
     32 */
    3333/** @file
    34  * @brief       NS16550 port driver.
     34 * @brief NS16550 port driver.
    3535 */
    3636
     
    4343#include <sun.h>
    4444#include <ddi.h>
     45#include <errno.h>
    4546
    4647/* NS16550 registers */
    47 #define RBR_REG         0       /** Receiver Buffer Register. */
    48 #define IER_REG         1       /** Interrupt Enable Register. */
    49 #define IIR_REG         2       /** Interrupt Ident Register (read). */
    50 #define FCR_REG         2       /** FIFO control register (write). */
    51 #define LCR_REG         3       /** Line Control register. */
    52 #define MCR_REG         4       /** Modem Control Register. */
    53 #define LSR_REG         5       /** Line Status Register. */
     48#define RBR_REG  0  /** Receiver Buffer Register. */
     49#define IER_REG  1  /** Interrupt Enable Register. */
     50#define IIR_REG  2  /** Interrupt Ident Register (read). */
     51#define FCR_REG  2  /** FIFO control register (write). */
     52#define LCR_REG  3  /** Line Control register. */
     53#define MCR_REG  4  /** Modem Control Register. */
     54#define LSR_REG  5  /** Line Status Register. */
    5455
    55 #define LSR_DATA_READY  0x01
     56#define LSR_DATA_READY  0x01
    5657
    5758static irq_cmd_t ns16550_cmds[] = {
    5859        {
    5960                .cmd = CMD_PIO_READ_8,
    60                 .addr = (void *) 0,     /* will be patched in run-time */
     61                .addr = (void *) 0,     /* Will be patched in run-time */
    6162                .dstarg = 1
    6263        },
     
    7475        {
    7576                .cmd = CMD_PIO_READ_8,
    76                 .addr = (void *) 0,     /* will be patched in run-time */
     77                .addr = (void *) 0,     /* Will be patched in run-time */
    7778                .dstarg = 2
    7879        },
     
    9697        void *vaddr;
    9798
    98         async_set_interrupt_received(ns16550_irq_handler);
    99 
    100         ns16550_physical = sysinfo_value("kbd.address.physical");
    101         ns16550_kernel = sysinfo_value("kbd.address.kernel");
     99        if (sysinfo_get_value("kbd.address.physical", &ns16550_physical) != EOK)
     100                return -1;
     101       
     102        if (sysinfo_get_value("kbd.address.kernel", &ns16550_kernel) != EOK)
     103                return -1;
     104       
     105        sysarg_t inr;
     106        if (sysinfo_get_value("kbd.inr", &inr) != EOK)
     107                return -1;
     108       
    102109        ns16550_kbd.cmds[0].addr = (void *) (ns16550_kernel + LSR_REG);
    103110        ns16550_kbd.cmds[3].addr = (void *) (ns16550_kernel + RBR_REG);
    104         ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(),
    105             sysinfo_value("kbd.inr"), &ns16550_kbd);
     111       
     112        async_set_interrupt_received(ns16550_irq_handler);
     113        ipc_register_irq(inr, device_assign_devno(), inr, &ns16550_kbd);
     114       
    106115        return pio_enable((void *) ns16550_physical, 8, &vaddr);
    107 }
    108 
    109 void ns16550_port_yield(void)
    110 {
    111 }
    112 
    113 void ns16550_port_reclaim(void)
    114 {
    115116}
    116117
  • uspace/srv/hid/kbd/port/pl050.c

    r24a2517 rc621f4aa  
    4545#include <ddi.h>
    4646#include <stdio.h>
     47#include <errno.h>
    4748
    48 #define PL050_STAT_RXFULL (1 << 4)
     49#define PL050_STAT_RXFULL  (1 << 4)
     50
    4951static irq_cmd_t pl050_cmds[] = {
    5052        {
     
    6668        {
    6769                .cmd = CMD_PIO_READ_8,
    68                 .addr = NULL,   /* will be patched in run-time */
     70                .addr = NULL,  /* Will be patched in run-time */
    6971                .dstarg = 2
    7072        },
     
    8385int kbd_port_init(void)
    8486{
    85 
    86         pl050_kbd.cmds[0].addr = (void *) sysinfo_value("kbd.address.status");
    87         pl050_kbd.cmds[3].addr = (void *) sysinfo_value("kbd.address.data");
    88 
     87        sysarg_t addr;
     88        if (sysinfo_get_value("kbd.address.status", &addr) != EOK)
     89                return -1;
     90       
     91        pl050_kbd.cmds[0].addr = (void *) addr;
     92       
     93        if (sysinfo_get_value("kbd.address.data", &addr) != EOK)
     94                return -1;
     95       
     96        pl050_kbd.cmds[3].addr = (void *) addr;
     97       
     98        sysarg_t inr;
     99        if (sysinfo_get_value("kbd.inr", &inr) != EOK)
     100                return -1;
     101       
    89102        async_set_interrupt_received(pl050_irq_handler);
    90 
    91         ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(), 0, &pl050_kbd);
    92 
     103        ipc_register_irq(inr, device_assign_devno(), 0, &pl050_kbd);
     104       
    93105        return 0;
    94106}
  • uspace/srv/hid/kbd/port/sgcn.c

    r24a2517 rc621f4aa  
    3030 * @ingroup  kbd
    3131 * @{
    32  */ 
     32 */
    3333/** @file
    34  * @brief       SGCN (Serengeti Console) keyboard port driver.
     34 * @brief SGCN (Serengeti Console) keyboard port driver.
    3535 */
    3636
     
    4444#include <thread.h>
    4545#include <bool.h>
     46#include <errno.h>
    4647
    47 #define POLL_INTERVAL           10000
     48#define POLL_INTERVAL  10000
    4849
    4950/**
    5051 * SGCN buffer header. It is placed at the very beginning of the SGCN
    51  * buffer. 
     52 * buffer.
    5253 */
    5354typedef struct {
     
    9293
    9394/* polling thread */
    94 static void *sgcn_thread_impl(void *arg);
     95static void sgcn_thread_impl(void *arg);
    9596
    9697static volatile bool polling_disabled = false;
     
    102103int kbd_port_init(void)
    103104{
    104         sram_virt_addr = (uintptr_t) as_get_mappable_page(sysinfo_value("sram.area.size"));
    105         if (physmem_map((void *) sysinfo_value("sram.address.physical"),
    106             (void *) sram_virt_addr, sysinfo_value("sram.area.size") / PAGE_SIZE,
    107             AS_AREA_READ | AS_AREA_WRITE) != 0) {
     105        sysarg_t sram_paddr;
     106        if (sysinfo_get_value("sram.address.physical", &sram_paddr) != EOK)
     107                return -1;
     108       
     109        sysarg_t sram_size;
     110        if (sysinfo_get_value("sram.area.size", &sram_size) != EOK)
     111                return -1;
     112       
     113        if (sysinfo_get_value("sram.buffer.offset", &sram_buffer_offset) != EOK)
     114                sram_buffer_offset = 0;
     115       
     116        sram_virt_addr = (uintptr_t) as_get_mappable_page(sram_size);
     117       
     118        if (physmem_map((void *) sram_paddr, (void *) sram_virt_addr,
     119            sram_size / PAGE_SIZE, AS_AREA_READ | AS_AREA_WRITE) != 0) {
    108120                printf("SGCN: uspace driver could not map physical memory.");
    109121                return -1;
    110122        }
    111123       
    112         sram_buffer_offset = sysinfo_value("sram.buffer.offset");
    113 
    114124        thread_id_t tid;
    115         int rc;
    116 
    117         rc = thread_create(sgcn_thread_impl, NULL, "kbd_poll", &tid);
    118         if (rc != 0) {
     125        int rc = thread_create(sgcn_thread_impl, NULL, "kbd_poll", &tid);
     126        if (rc != 0)
    119127                return rc;
    120         }
    121 
     128       
    122129        return 0;
    123130}
     
    167174 * Thread to poll SGCN for keypresses.
    168175 */
    169 static void *sgcn_thread_impl(void *arg)
     176static void sgcn_thread_impl(void *arg)
    170177{
    171178        (void) arg;
  • uspace/srv/hid/kbd/port/ski.c

    r24a2517 rc621f4aa  
    4949#define POLL_INTERVAL           10000
    5050
    51 static void *ski_thread_impl(void *arg);
     51static void ski_thread_impl(void *arg);
    5252static int32_t ski_getchar(void);
    5353
     
    8484
    8585/** Thread to poll Ski for keypresses. */
    86 static void *ski_thread_impl(void *arg)
     86static void ski_thread_impl(void *arg)
    8787{
    8888        int32_t c;
  • uspace/srv/hid/kbd/port/sun.c

    r24a2517 rc621f4aa  
    3939#include <sun.h>
    4040#include <sysinfo.h>
     41#include <errno.h>
     42#include <bool.h>
    4143
    4244/** Sun keyboard virtual port driver.
     
    5052int kbd_port_init(void)
    5153{
    52         if (sysinfo_value("kbd.type.z8530")) {
     54        sysarg_t z8530;
     55        if (sysinfo_get_value("kbd.type.z8530", &z8530) != EOK)
     56                z8530 = false;
     57       
     58        sysarg_t ns16550;
     59        if (sysinfo_get_value("kbd.type.ns16550", &ns16550) != EOK)
     60                ns16550 = false;
     61       
     62        if (z8530) {
    5363                if (z8530_port_init() == 0)
    5464                        return 0;
    5565        }
    5666       
    57         if (sysinfo_value("kbd.type.ns16550")) {
     67        if (ns16550) {
    5868                if (ns16550_port_init() == 0)
    5969                        return 0;
  • uspace/srv/hid/kbd/port/z8530.c

    r24a2517 rc621f4aa  
    3030 * @ingroup  kbd
    3131 * @{
    32  */ 
     32 */
    3333/** @file
    34  * @brief       Z8530 keyboard port driver.
     34 * @brief Z8530 keyboard port driver.
    3535 */
    3636
     
    4444#include <sys/types.h>
    4545#include <ddi.h>
     46#include <errno.h>
    4647
    47 #define CHAN_A_STATUS   4
    48 #define CHAN_A_DATA     6
     48#define CHAN_A_STATUS  4
     49#define CHAN_A_DATA    6
    4950
    50 #define RR0_RCA 1
     51#define RR0_RCA  1
    5152
    5253static irq_cmd_t z8530_cmds[] = {
    5354        {
    5455                .cmd = CMD_PIO_READ_8,
    55                 .addr = (void *) 0,     /* will be patched in run-time */
     56                .addr = (void *) 0,     /* Will be patched in run-time */
    5657                .dstarg = 1
    5758        },
     
    6970        {
    7071                .cmd = CMD_PIO_READ_8,
    71                 .addr = (void *) 0,     /* will be patched in run-time */
     72                .addr = (void *) 0,     /* Will be patched in run-time */
    7273                .dstarg = 2
    7374        },
     
    8687int z8530_port_init(void)
    8788{
     89        sysarg_t kaddr;
     90        if (sysinfo_get_value("kbd.address.kernel", &kaddr) != EOK)
     91                return -1;
     92       
     93        sysarg_t inr;
     94        if (sysinfo_get_value("kbd.inr", &inr) != EOK)
     95                return -1;
     96       
     97        z8530_cmds[0].addr = (void *) kaddr + CHAN_A_STATUS;
     98        z8530_cmds[3].addr = (void *) kaddr + CHAN_A_DATA;
     99       
    88100        async_set_interrupt_received(z8530_irq_handler);
    89         z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.kernel") +
    90             CHAN_A_STATUS;
    91         z8530_cmds[3].addr = (void *) sysinfo_value("kbd.address.kernel") +
    92             CHAN_A_DATA;
    93         ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(),
    94             sysinfo_value("kbd.inr"), &z8530_kbd);
     101        ipc_register_irq(inr, device_assign_devno(), inr, &z8530_kbd);
     102       
    95103        return 0;
    96 }
    97 
    98 void z8530_port_yield(void)
    99 {
    100 }
    101 
    102 void z8530_port_reclaim(void)
    103 {
    104104}
    105105
Note: See TracChangeset for help on using the changeset viewer.