Changes in / [0b37882:17aca1c] in mainline


Ignore:
Files:
150 added
2 deleted
34 edited

Legend:

Unmodified
Added
Removed
  • HelenOS.config

    r0b37882 r17aca1c  
    547547
    548548% Launch (devman) test drivers
    549 ! [CONFIG_DEBUG=y] CONFIG_TEST_DRIVERS (y/n)
    550 
     549! [CONFIG_DEBUG=y] CONFIG_TEST_DRIVERS (n/y)
     550
  • Makefile

    r0b37882 r17aca1c  
    9292        $(MAKE) -C uspace clean
    9393        $(MAKE) -C boot clean
     94
     95-include Makefile.local
  • boot/Makefile.common

    r0b37882 r17aca1c  
    139139        $(USPACE_PATH)/app/ping/ping \
    140140        $(USPACE_PATH)/app/stats/stats \
     141        $(USPACE_PATH)/app/sysinfo/sysinfo \
     142        $(USPACE_PATH)/app/tasks/tasks \
    141143        $(USPACE_PATH)/app/top/top \
    142         $(USPACE_PATH)/app/sysinfo/sysinfo \
     144        $(USPACE_PATH)/app/usbinfo/usbinfo \
     145        $(USPACE_PATH)/app/virtusbkbd/vuk \
     146        $(USPACE_PATH)/app/virtusbhub/vuh \
    143147        $(USPACE_PATH)/app/websrv/websrv
    144148
  • boot/arch/amd64/Makefile.inc

    r0b37882 r17aca1c  
    4242        pciintel \
    4343        isa \
    44         ns8250
     44        ns8250 \
     45        uhci-hcd \
     46        uhci-rhd \
     47        usbhub \
     48        usbhid \
     49        vhc
    4550
    4651RD_DRV_CFG += \
  • kernel/generic/include/mm/page.h

    r0b37882 r17aca1c  
    3737
    3838#include <typedefs.h>
     39#include <proc/task.h>
    3940#include <mm/as.h>
    4041#include <memstr.h>
     
    6263extern uintptr_t hw_map(uintptr_t, size_t);
    6364
     65extern sysarg_t sys_page_find_mapping(uintptr_t, uintptr_t *);
     66
    6467#endif
    6568
  • kernel/generic/include/syscall/syscall.h

    r0b37882 r17aca1c  
    6161        SYS_AS_GET_UNMAPPED_AREA,
    6262       
     63        SYS_PAGE_FIND_MAPPING,
     64       
    6365        SYS_IPC_CALL_SYNC_FAST,
    6466        SYS_IPC_CALL_SYNC_SLOW,
  • kernel/generic/src/mm/page.c

    r0b37882 r17aca1c  
    6060
    6161#include <mm/page.h>
     62#include <genarch/mm/page_ht.h>
     63#include <genarch/mm/page_pt.h>
    6264#include <arch/mm/page.h>
    6365#include <arch/mm/asid.h>
     
    7072#include <debug.h>
    7173#include <arch.h>
     74#include <syscall/copy.h>
     75#include <errno.h>
    7276
    7377/** Virtual operations for page subsystem. */
     
    173177}
    174178
     179/** Syscall wrapper for getting mapping of a virtual page.
     180 *
     181 * @retval EOK Everything went find, @p uspace_frame and @p uspace_node
     182 *             contains correct values.
     183 * @retval ENOENT Virtual address has no mapping.
     184 */
     185sysarg_t sys_page_find_mapping(uintptr_t virt_address,
     186    uintptr_t *uspace_frame)
     187{
     188        mutex_lock(&AS->lock);
     189       
     190        pte_t *pte = page_mapping_find(AS, virt_address);
     191        if (!PTE_VALID(pte) || !PTE_PRESENT(pte)) {
     192                mutex_unlock(&AS->lock);
     193               
     194                return (sysarg_t) ENOENT;
     195        }
     196       
     197        uintptr_t phys_address = PTE_GET_FRAME(pte);
     198       
     199        mutex_unlock(&AS->lock);
     200       
     201        int rc = copy_to_uspace(uspace_frame,
     202            &phys_address, sizeof(phys_address));
     203        if (rc != EOK) {
     204                return (sysarg_t) rc;
     205        }
     206       
     207        return EOK;
     208}
     209
    175210/** @}
    176211 */
  • kernel/generic/src/syscall/syscall.c

    r0b37882 r17aca1c  
    4141#include <proc/program.h>
    4242#include <mm/as.h>
     43#include <mm/page.h>
    4344#include <print.h>
    4445#include <arch.h>
     
    145146        (syshandler_t) sys_as_get_unmapped_area,
    146147       
     148        /* Page mapping related syscalls. */
     149        (syshandler_t) sys_page_find_mapping,
     150       
    147151        /* IPC related syscalls. */
    148152        (syshandler_t) sys_ipc_call_sync_fast,
  • uspace/Makefile

    r0b37882 r17aca1c  
    5050        app/trace \
    5151        app/top \
     52        app/usbinfo \
     53        app/virtusbkbd \
     54        app/virtusbhub \
    5255        app/netecho \
    5356        app/nettest1 \
     
    113116                drv/ns8250 \
    114117                srv/hw/irc/apic \
    115                 srv/hw/irc/i8259
     118                srv/hw/irc/i8259 \
     119                drv/uhci-hcd \
     120                drv/uhci-rhd \
     121                drv/usbhid \
     122                drv/usbhub \
     123                drv/vhc
    116124endif
    117125
     
    123131                drv/ns8250 \
    124132                srv/hw/irc/apic \
    125                 srv/hw/irc/i8259
     133                srv/hw/irc/i8259 \
     134                drv/uhci-hcd \
     135                drv/uhci-rhd \
     136                drv/usbhid \
     137                drv/usbhub \
     138                drv/vhc
    126139endif
    127140
     
    150163        lib/net
    151164
     165ifeq ($(UARCH),amd64)
     166        LIBS += lib/usb
     167        LIBS += lib/usbvirt
     168endif
     169
     170ifeq ($(UARCH),ia32)
     171        LIBS += lib/usb
     172        LIBS += lib/usbvirt
     173endif
     174
    152175LIBC_BUILD = $(addsuffix .build,$(LIBC))
    153176LIBS_BUILD = $(addsuffix .build,$(LIBS))
  • uspace/Makefile.common

    r0b37882 r17aca1c  
    8686LIBCLUI_PREFIX = $(LIB_PREFIX)/clui
    8787
     88
     89LIBUSB_PREFIX = $(LIB_PREFIX)/usb
     90LIBUSBVIRT_PREFIX = $(LIB_PREFIX)/usbvirt
    8891LIBDRV_PREFIX = $(LIB_PREFIX)/drv
    8992LIBPACKET_PREFIX = $(LIB_PREFIX)/packet
  • uspace/app/bdsh/cmds/modules/cat/cat.c

    r0b37882 r17aca1c  
    144144                        return CMD_SUCCESS;
    145145                case 'H':
    146                         printf(cat_oops);
     146                        printf("%s", cat_oops);
    147147                        return CMD_FAILURE;
    148148                case 't':
    149                         printf(cat_oops);
     149                        printf("%s", cat_oops);
    150150                        return CMD_FAILURE;
    151151                case 'b':
    152                         printf(cat_oops);
     152                        printf("%s", cat_oops);
    153153                        break;
    154154                case 'm':
    155                         printf(cat_oops);
     155                        printf("%s", cat_oops);
    156156                        return CMD_FAILURE;
    157157                }
  • uspace/app/bdsh/cmds/modules/rm/rm.c

    r0b37882 r17aca1c  
    227227                }
    228228                memset(buff, 0, sizeof(buff));
    229                 snprintf(buff, len, argv[i]);
     229                snprintf(buff, len, "%s", argv[i]);
    230230
    231231                scope = rm_scope(buff);
  • uspace/app/init/init.c

    r0b37882 r17aca1c  
    313313        getterm("term/vc5", "/app/bdsh", false);
    314314        getterm("term/vc6", "/app/klog", false);
     315        getterm("term/vc7", "/srv/devman", false);
    315316       
    316317        return 0;
  • uspace/app/tester/Makefile

    r0b37882 r17aca1c  
    3131BINARY = tester
    3232
     33LIBS += $(LIBUSB_PREFIX)/libusb.a
     34EXTRA_CFLAGS += -I$(LIBUSB_PREFIX)/include
     35
    3336SOURCES = \
    3437        tester.c \
     38        adt/usbaddrkeep.c \
    3539        thread/thread1.c \
    3640        print/print1.c \
     
    4953        loop/loop1.c \
    5054        mm/malloc1.c \
     55        mm/mapping1.c \
    5156        hw/misc/virtchar1.c \
    5257        hw/serial/serial1.c
  • uspace/app/tester/tester.c

    r0b37882 r17aca1c  
    6262#include "loop/loop1.def"
    6363#include "mm/malloc1.def"
     64#include "mm/mapping1.def"
    6465#include "hw/serial/serial1.def"
     66#include "adt/usbaddrkeep.def"
    6567#include "hw/misc/virtchar1.def"
    6668        {NULL, NULL, NULL, false}
  • uspace/app/tester/tester.h

    r0b37882 r17aca1c  
    7878extern const char *test_loop1(void);
    7979extern const char *test_malloc1(void);
     80extern const char *test_mapping1(void);
    8081extern const char *test_serial1(void);
     82extern const char *test_usbaddrkeep(void);
    8183extern const char *test_virtchar1(void);
    8284
  • uspace/doc/doxygroups.h

    r0b37882 r17aca1c  
    150150         * @endcond
    151151         */
    152        
     152
    153153/**
    154154 * @defgroup emul Emulation Libraries
     
    165165         * @ingroup emul
    166166         */
     167
     168/**
     169 * @defgroup usb USB
     170 * @ingroup uspace
     171 * @brief USB support for HelenOS.
     172 */
     173        /**
     174         * @defgroup libusb USB library
     175         * @ingroup usb
     176         * @brief Library for creating USB devices drivers.
     177         */
     178
     179        /**
     180         * @defgroup usbvirt USB virtualization
     181         * @ingroup usb
     182         * @brief Support for virtual USB devices.
     183         */
     184
     185                /**
     186                 * @defgroup libusbvirt USB virtualization library
     187                 * @ingroup usbvirt
     188                 * @brief Library for creating virtual USB devices.
     189                 */
     190
     191                /**
     192                 * @defgroup drvusbvhc Virtual USB host controller
     193                 * @ingroup usbvirt
     194                 * @brief Driver simulating work of USB host controller.
     195                 */
     196
     197                /**
     198                 * @defgroup usbvirthub Virtual USB hub
     199                 * @ingroup usbvirt
     200                 * @brief Extra virtual USB hub for virtual host controller.
     201                 * @details
     202                 * Some of the sources are shared with virtual host controller,
     203                 * see @ref drvusbvhc for the rest of the files.
     204                 */
     205
     206                /**
     207                 * @defgroup usbvirtkbd Virtual USB keybaord
     208                 * @ingroup usbvirt
     209                 * @brief Virtual USB keyboard for virtual host controller.
     210                 */
     211
     212        /**
     213         * @defgroup usbinfo USB info application
     214         * @ingroup usb
     215         * @brief Application for querying USB devices.
     216         * @details
     217         * The intended usage of this application is to query new USB devices
     218         * for their descriptors etc. to simplify driver writing.
     219         */
     220
     221        /**
     222         * @defgroup drvusbhub USB hub driver
     223         * @ingroup usb
     224         * @brief USB hub driver.
     225         */
     226
     227        /**
     228         * @defgroup drvusbhid USB HID driver
     229         * @ingroup usb
     230         * @brief USB driver for HID devices.
     231         */
     232
     233        /**
     234         * @defgroup drvusbuhci UHCI driver
     235         * @ingroup usb
     236         * @brief Driver for USB host controller UHCI.
     237         */
     238
  • uspace/drv/root/root.c

    r0b37882 r17aca1c  
    8888
    8989        int res = child_device_register_wrapper(parent, VIRTUAL_DEVICE_NAME,
    90             VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE);
     90            VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE,
     91            NULL);
    9192
    9293        return res;
     
    136137
    137138        res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME,
    138             match_id, PLATFORM_DEVICE_MATCH_SCORE);
     139            match_id, PLATFORM_DEVICE_MATCH_SCORE, NULL);
    139140
    140141        return res;
  • uspace/drv/rootvirt/devices.def

    r0b37882 r17aca1c  
    2222},
    2323#endif
     24/* Virtual USB host controller. */
     25/*
     26{
     27        .name = "usbhc",
     28        .match_id = "usb&hc=vhc"
     29},
     30*/
  • uspace/drv/rootvirt/rootvirt.c

    r0b37882 r17aca1c  
    8484
    8585        int rc = child_device_register_wrapper(parent, virt_dev->name,
    86             virt_dev->match_id, 10);
     86            virt_dev->match_id, 10, NULL);
    8787
    8888        if (rc == EOK) {
  • uspace/drv/test1/test1.c

    r0b37882 r17aca1c  
    6262
    6363        int rc = child_device_register_wrapper(parent, name,
    64             match_id, match_score);
     64            match_id, match_score, NULL);
    6565
    6666        if (rc == EOK) {
  • uspace/drv/test2/test2.c

    r0b37882 r17aca1c  
    6464
    6565        int rc = child_device_register_wrapper(parent, name,
    66             match_id, match_score);
     66            match_id, match_score, NULL);
    6767
    6868        if (rc == EOK) {
  • uspace/lib/c/generic/as.c

    r0b37882 r17aca1c  
    3535#include <as.h>
    3636#include <libc.h>
     37#include <errno.h>
    3738#include <unistd.h>
    3839#include <align.h>
     
    114115}
    115116
     117/** Find mapping to physical address.
     118 *
     119 * @param address Virtual address in question (virtual).
     120 * @param[out] frame Frame address (physical).
     121 * @return Error code.
     122 * @retval EOK No error, @p frame holds the translation.
     123 * @retval ENOENT Mapping not found.
     124 */
     125int as_get_physical_mapping(void *address, uintptr_t *frame)
     126{
     127        uintptr_t tmp_frame;
     128        uintptr_t virt = (uintptr_t) address;
     129       
     130        int rc = (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING,
     131            (sysarg_t) virt, (sysarg_t) &tmp_frame);
     132        if (rc != EOK) {
     133                return rc;
     134        }
     135       
     136        if (frame != NULL) {
     137                *frame = tmp_frame;
     138        }
     139       
     140        return EOK;
     141}
     142
    116143/** @}
    117144 */
  • uspace/lib/c/include/as.h

    r0b37882 r17aca1c  
    6060extern void *set_maxheapsize(size_t mhs);
    6161extern void * as_get_mappable_page(size_t sz);
     62extern int as_get_physical_mapping(void *address, uintptr_t *frame);
    6263
    6364#endif
  • uspace/lib/c/include/ipc/dev_iface.h

    r0b37882 r17aca1c  
    3737        HW_RES_DEV_IFACE = 0,
    3838        CHAR_DEV_IFACE,
     39
     40        /** Interface provided by any USB device. */
     41        USB_DEV_IFACE,
     42        /** Interface provided by USB host controller. */
     43        USBHC_DEV_IFACE,
     44
    3945        DEV_IFACE_MAX
    4046} dev_inferface_idx_t;
     
    4854        DEV_IFACE_ID(DEV_FIRST_CUSTOM_METHOD_IDX)
    4955
     56/*
     57 * The first argument is actually method (as the "real" method is used
     58 * for indexing into interfaces.
     59 */
     60
     61#define DEV_IPC_GET_ARG1(call) IPC_GET_ARG2((call))
     62#define DEV_IPC_GET_ARG2(call) IPC_GET_ARG3((call))
     63#define DEV_IPC_GET_ARG3(call) IPC_GET_ARG4((call))
     64#define DEV_IPC_GET_ARG4(call) IPC_GET_ARG5((call))
     65
    5066
    5167#endif
  • uspace/lib/c/include/ipc/kbd.h

    r0b37882 r17aca1c  
    3939
    4040#include <ipc/common.h>
     41#include <ipc/dev_iface.h>
    4142
    4243typedef enum {
    43         KBD_YIELD = IPC_FIRST_USER_METHOD,
     44        KBD_YIELD = DEV_FIRST_CUSTOM_METHOD,
    4445        KBD_RECLAIM
    4546} kbd_request_t;
  • uspace/lib/drv/Makefile

    r0b37882 r17aca1c  
    2929
    3030USPACE_PREFIX = ../..
    31 EXTRA_CFLAGS = -Iinclude
     31EXTRA_CFLAGS = -Iinclude -I$(LIBUSB_PREFIX)/include
    3232LIBRARY = libdrv
    3333
     
    3535        generic/driver.c \
    3636        generic/dev_iface.c \
     37        generic/remote_char_dev.c \
    3738        generic/remote_hw_res.c \
    38         generic/remote_char_dev.c
     39        generic/remote_usb.c \
     40        generic/remote_usbhc.c
    3941
    4042include $(USPACE_PREFIX)/Makefile.common
  • uspace/lib/drv/generic/dev_iface.c

    r0b37882 r17aca1c  
    4141#include "remote_hw_res.h"
    4242#include "remote_char_dev.h"
     43#include "remote_usb.h"
     44#include "remote_usbhc.h"
    4345
    4446static iface_dipatch_table_t remote_ifaces = {
    4547        .ifaces = {
    4648                &remote_hw_res_iface,
    47                 &remote_char_dev_iface
     49                &remote_char_dev_iface,
     50                &remote_usb_iface,
     51                &remote_usbhc_iface
    4852        }
    4953};
  • uspace/lib/drv/generic/driver.c

    r0b37882 r17aca1c  
    512512 */
    513513int child_device_register_wrapper(device_t *parent, const char *child_name,
    514     const char *child_match_id, int child_match_score)
     514    const char *child_match_id, int child_match_score,
     515    devman_handle_t *child_handle)
    515516{
    516517        device_t *child = NULL;
     
    539540        if (rc != EOK)
    540541                goto failure;
    541        
     542
     543        if (child_handle != NULL) {
     544                *child_handle = child->handle;
     545        }
     546
    542547        return EOK;
    543548       
  • uspace/lib/drv/include/driver.h

    r0b37882 r17aca1c  
    3636#define LIBDRV_DRIVER_H_
    3737
     38#include <sys/types.h>
    3839#include <kernel/ddi/irq.h>
    3940#include <adt/list.h>
     
    146147extern int child_device_register(device_t *, device_t *);
    147148extern int child_device_register_wrapper(device_t *, const char *, const char *,
    148     int);
     149    int, devman_handle_t *);
    149150
    150151/*
  • uspace/srv/devman/devman.c

    r0b37882 r17aca1c  
    133133        printf(NAME": the '%s' driver was added to the list of available "
    134134            "drivers.\n", drv->name);
     135
     136        printf(NAME ": match ids:");
     137        link_t *cur;
     138        for (cur = drv->match_ids.ids.next; cur != &drv->match_ids.ids; cur = cur->next) {
     139                match_id_t *match_id = list_get_instance(cur, match_id_t, link);
     140                printf(" %d:%s", match_id->score, match_id->id);
     141        }
     142        printf("\n");
    135143}
    136144
  • uspace/srv/devman/main.c

    r0b37882 r17aca1c  
    458458       
    459459        if (driver == NULL) {
    460                 printf(NAME ": devman_forward error - the device is not in %" PRIun
    461                     " usable state.\n", handle);
     460                printf(NAME ": devman_forward error - the device %" PRIun \
     461                    " (%s) is not in usable state.\n",
     462                    handle, dev->pathname);
    462463                async_answer_0(iid, ENOENT);
    463464                return;
  • uspace/srv/hid/console/console.c

    r0b37882 r17aca1c  
    317317static void change_console(console_t *cons)
    318318{
    319         if (cons == active_console)
     319        if (cons == active_console) {
    320320                return;
     321        }
    321322       
    322323        fb_pending_flush();
     
    458459                        if (IPC_GET_ARG1(call) == 1) {
    459460                                int newcon = gcons_mouse_btn((bool) IPC_GET_ARG2(call));
    460                                 if (newcon != -1)
     461                                if (newcon != -1) {
    461462                                        change_console(&consoles[newcon]);
     463                                }
    462464                        }
    463465                        retval = 0;
     
    710712}
    711713
     714static int connect_keyboard(char *path)
     715{
     716        int fd = open(path, O_RDONLY);
     717        if (fd < 0) {
     718                return fd;
     719        }
     720       
     721        int phone = fd_phone(fd);
     722        if (phone < 0) {
     723                printf(NAME ": Failed to connect to input device\n");
     724                return phone;
     725        }
     726       
     727        /* NB: The callback connection is slotted for removal */
     728        sysarg_t phonehash;
     729        sysarg_t taskhash;
     730        int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE,
     731            0, 0, NULL, NULL, NULL, &taskhash, &phonehash);
     732        if (rc != EOK) {
     733                printf(NAME ": Failed to create callback from input device\n");
     734                return rc;
     735        }
     736       
     737        async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events);
     738
     739        printf(NAME ": we got a hit (new keyboard \"%s\").\n", path);
     740
     741        return phone;
     742}
     743
     744/** Try to connect to given keyboard, bypassing provided libc routines.
     745 *
     746 * @param devmap_path Path to keyboard without /dev prefix.
     747 * @return Phone or error code.
     748 */
     749static int connect_keyboard_bypass(char *devmap_path)
     750{
     751        int devmap_phone = async_connect_me_to_blocking(PHONE_NS,
     752            SERVICE_DEVMAP, DEVMAP_CLIENT, 0);
     753        if (devmap_phone < 0) {
     754                return devmap_phone;
     755        }
     756        ipc_call_t answer;
     757        aid_t req = async_send_2(devmap_phone, DEVMAP_DEVICE_GET_HANDLE,
     758            0, 0,  &answer);
     759
     760        sysarg_t retval = async_data_write_start(devmap_phone,
     761            devmap_path, str_size(devmap_path));
     762        if (retval != EOK) {
     763                async_wait_for(req, NULL);
     764                async_hangup(devmap_phone);
     765                return retval;
     766        }
     767
     768        async_wait_for(req, &retval);
     769
     770        if (retval != EOK) {
     771                async_hangup(devmap_phone);
     772                return retval;
     773        }
     774
     775        devmap_handle_t handle = (devmap_handle_t) IPC_GET_ARG1(answer);
     776
     777        async_hangup(devmap_phone);
     778
     779        int phone = async_connect_me_to(PHONE_NS,
     780            SERVICE_DEVMAP, DEVMAP_CONNECT_TO_DEVICE, handle);
     781        if (phone < 0) {
     782                return phone;
     783        }
     784
     785        /* NB: The callback connection is slotted for removal */
     786        sysarg_t phonehash;
     787        sysarg_t taskhash;
     788        int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE,
     789            0, 0, NULL, NULL, NULL, &taskhash, &phonehash);
     790        if (rc != EOK) {
     791                printf(NAME ": Failed to create callback from input device\n");
     792                return rc;
     793        }
     794
     795        async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events);
     796
     797        printf(NAME ": we got a hit (new keyboard \"/dev/%s\").\n",
     798            devmap_path);
     799
     800        return phone;
     801}
     802
     803
     804static int check_new_keyboards(void *arg)
     805{
     806        char *class_name = (char *) arg;
     807
     808        int index = 1;
     809
     810        while (true) {
     811                async_usleep(1 * 500 * 1000);
     812                char *path;
     813                int rc = asprintf(&path, "class/%s\\%d", class_name, index);
     814                if (rc < 0) {
     815                        continue;
     816                }
     817                rc = 0;
     818                rc = connect_keyboard_bypass(path);
     819                if (rc > 0) {
     820                        /* We do not allow unplug. */
     821                        index++;
     822                }
     823
     824                free(path);
     825        }
     826
     827        return EOK;
     828}
     829
     830
     831/** Start a fibril monitoring hot-plugged keyboards.
     832 */
     833static void check_new_keyboards_in_background()
     834{
     835        fid_t fid = fibril_create(check_new_keyboards, (void *)"keyboard");
     836        if (!fid) {
     837                printf(NAME ": failed to create hot-plug-watch fibril.\n");
     838                return;
     839        }
     840        fibril_add_ready(fid);
     841}
     842
    712843static bool console_init(char *input)
    713844{
    714845        /* Connect to input device */
    715         int input_fd = open(input, O_RDONLY);
    716         if (input_fd < 0) {
    717                 printf(NAME ": Failed opening %s\n", input);
     846        kbd_phone = connect_keyboard(input);
     847        if (kbd_phone < 0) {
    718848                return false;
    719849        }
    720        
    721         kbd_phone = fd_phone(input_fd);
    722         if (kbd_phone < 0) {
    723                 printf(NAME ": Failed to connect to input device\n");
    724                 return false;
    725         }
    726        
    727         /* NB: The callback connection is slotted for removal */
    728         if (async_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, keyboard_events)
    729             != 0) {
    730                 printf(NAME ": Failed to create callback from input device\n");
    731                 return false;
    732         }
    733        
     850
    734851        /* Connect to mouse device */
    735852        mouse_phone = -1;
     
    837954                printf(NAME ": Error registering kconsole notifications\n");
    838955       
     956        /* Start fibril for checking on hot-plugged keyboards. */
     957        check_new_keyboards_in_background();
     958
    839959        return true;
    840960}
     
    856976        if (!console_init(argv[1]))
    857977                return -1;
    858        
     978
    859979        printf(NAME ": Accepting connections\n");
    860980        async_manager();
  • uspace/srv/net/tl/udp/udp.c

    r0b37882 r17aca1c  
    740740        int socket_id;
    741741        size_t addrlen;
    742         size_t size;
     742        size_t size = 0;
    743743        ipc_call_t answer;
    744744        size_t answer_count;
Note: See TracChangeset for help on using the changeset viewer.