Changes in / [3d5e190:ae1f70e] in mainline


Ignore:
Files:
96 added
26 edited

Legend:

Unmodified
Added
Removed
  • HelenOS.config

    r3d5e190 rae1f70e  
    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

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

    r3d5e190 rae1f70e  
    9999        $(USPACE_PATH)/srv/taskmon/taskmon \
    100100        $(USPACE_PATH)/srv/hw/netif/dp8390/dp8390 \
     101        $(USPACE_PATH)/srv/hw/bus/usb/hcd/virtual/vhcd \
    101102        $(USPACE_PATH)/srv/net/netif/lo/lo \
    102103        $(USPACE_PATH)/srv/net/nil/eth/eth \
     
    141142        $(USPACE_PATH)/app/ping/ping \
    142143        $(USPACE_PATH)/app/stats/stats \
     144        $(USPACE_PATH)/app/sysinfo/sysinfo \
    143145        $(USPACE_PATH)/app/tasks/tasks \
    144146        $(USPACE_PATH)/app/top/top \
    145         $(USPACE_PATH)/app/sysinfo/sysinfo \
     147        $(USPACE_PATH)/app/usbinfo/usbinfo \
     148        $(USPACE_PATH)/app/virtusbkbd/vuk \
    146149        $(USPACE_PATH)/app/websrv/websrv
    147150
  • boot/arch/amd64/Makefile.inc

    r3d5e190 rae1f70e  
    4040        pciintel \
    4141        isa \
    42         ns8250
     42        ns8250 \
     43        uhci \
     44        usbhub \
     45        usbkbd \
     46        vhc
    4347       
    4448RD_DRV_CFG += \
  • uspace/Makefile

    r3d5e190 rae1f70e  
    5151        app/trace \
    5252        app/top \
     53        app/usbinfo \
     54        app/virtusbkbd \
    5355        app/netecho \
    5456        app/nettest1 \
     
    112114        DIRS += drv/isa
    113115        DIRS += drv/ns8250
     116        DIRS += drv/uhci
     117        DIRS += drv/usbhub
     118        DIRS += drv/usbkbd
     119        DIRS += drv/vhc
    114120endif
    115121
     
    119125        DIRS += drv/isa
    120126        DIRS += drv/ns8250
     127        DIRS += drv/uhci
     128        DIRS += drv/usbhub
     129        DIRS += drv/usbkbd
     130        DIRS += drv/vhc
    121131endif
    122132
     
    144154        lib/packet \
    145155        lib/net
     156
     157ifeq ($(UARCH),amd64)
     158        LIBS += lib/usb
     159        LIBS += lib/usbvirt
     160endif
     161
     162ifeq ($(UARCH),ia32)
     163        LIBS += lib/usb
     164        LIBS += lib/usbvirt
     165endif
    146166
    147167LIBC_BUILD = $(addsuffix .build,$(LIBC))
  • uspace/Makefile.common

    r3d5e190 rae1f70e  
    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/init/init.c

    r3d5e190 rae1f70e  
    312312        getterm("term/vc5", "/app/bdsh", false);
    313313        getterm("term/vc6", "/app/klog", false);
     314        getterm("term/vc7", "/srv/devman", false);
    314315       
    315316        return 0;
  • uspace/app/tester/Makefile

    r3d5e190 rae1f70e  
    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 \
  • uspace/app/tester/tester.c

    r3d5e190 rae1f70e  
    6363#include "mm/malloc1.def"
    6464#include "hw/serial/serial1.def"
     65#include "adt/usbaddrkeep.def"
    6566#include "hw/misc/virtchar1.def"
    6667        {NULL, NULL, NULL, false}
  • uspace/app/tester/tester.h

    r3d5e190 rae1f70e  
    8080extern const char *test_malloc1(void);
    8181extern const char *test_serial1(void);
     82extern const char *test_usbaddrkeep(void);
    8283extern const char *test_virtchar1(void);
    8384
  • uspace/doc/doxygroups.h

    r3d5e190 rae1f70e  
    155155         * @endcond
    156156         */
    157        
     157
    158158/**
    159159 * @defgroup emul Emulation Libraries
     
    170170         * @ingroup emul
    171171         */
     172
     173/**
     174 * @defgroup usb USB
     175 * @ingroup uspace
     176 * @brief USB support for HelenOS.
     177 */
     178        /**
     179         * @defgroup libusb USB library
     180         * @ingroup usb
     181         * @brief Library for creating USB devices drivers.
     182         */
  • uspace/drv/root/root.c

    r3d5e190 rae1f70e  
    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

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

    r3d5e190 rae1f70e  
    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

    r3d5e190 rae1f70e  
    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

    r3d5e190 rae1f70e  
    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/devman.c

    r3d5e190 rae1f70e  
    230230       
    231231        if (flags & IPC_FLAG_BLOCKING) {
    232                 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,
     232                phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,
    233233                    DEVMAN_CONNECT_TO_DEVICE, handle);
    234234        } else {
    235                 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,
     235                phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN,
    236236                    DEVMAN_CONNECT_TO_DEVICE, handle);
    237237        }
  • uspace/lib/c/include/ipc/dev_iface.h

    r3d5e190 rae1f70e  
    3838        HW_RES_DEV_IFACE = 0,   
    3939        CHAR_DEV_IFACE,
     40
     41        /** Interface provided by USB host controller. */
     42        USBHC_DEV_IFACE,
     43
    4044        // TODO add more interfaces
    4145        DEV_IFACE_MAX
     
    5054        DEV_IFACE_ID(DEV_FIRST_CUSTOM_METHOD_IDX)
    5155
     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
    5266
    5367#endif
  • uspace/lib/c/include/ipc/kbd.h

    r3d5e190 rae1f70e  
    3939
    4040#include <ipc/ipc.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

    r3d5e190 rae1f70e  
    2929
    3030USPACE_PREFIX = ../..
    31 EXTRA_CFLAGS = -Iinclude
     31EXTRA_CFLAGS = -Iinclude -I$(LIBUSB_PREFIX)/include
    3232LIBRARY = libdrv
    3333
     
    3636        generic/dev_iface.c \
    3737        generic/remote_res.c \
     38        generic/remote_usbhc.c \
    3839        generic/remote_char.c
    3940
  • uspace/lib/drv/generic/dev_iface.c

    r3d5e190 rae1f70e  
    3939#include "remote_res.h"
    4040#include "remote_char.h"
     41#include "remote_usbhc.h"
    4142
    4243static iface_dipatch_table_t remote_ifaces = {
    4344        .ifaces = {
    4445                &remote_res_iface,
    45                 &remote_char_iface
     46                &remote_char_iface,
     47                &remote_usbhc_iface
    4648        }
    4749};
  • uspace/lib/drv/generic/driver.c

    r3d5e190 rae1f70e  
    390390 */
    391391int child_device_register_wrapper(device_t *parent, const char *child_name,
    392     const char *child_match_id, int child_match_score)
     392    const char *child_match_id, int child_match_score,
     393    devman_handle_t *child_handle)
    393394{
    394395        device_t *child = NULL;
     
    418419                goto failure;
    419420
     421        if (child_handle != NULL) {
     422                *child_handle = child->handle;
     423        }
    420424        return EOK;
    421425
  • uspace/lib/drv/include/driver.h

    r3d5e190 rae1f70e  
    199199
    200200int child_device_register(device_t *, device_t *);
    201 int child_device_register_wrapper(device_t *, const char *, const char *, int);
     201int child_device_register_wrapper(device_t *, const char *, const char *, int,
     202    devman_handle_t *);
    202203
    203204
  • uspace/srv/devman/devman.c

    r3d5e190 rae1f70e  
    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/hid/console/console.c

    r3d5e190 rae1f70e  
    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
    712 static bool console_init(char *input)
    713 {
    714         /* 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);
    718                 return false;
    719         }
    720        
    721         kbd_phone = fd_phone(input_fd);
    722         if (kbd_phone < 0) {
     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) {
    723723                printf(NAME ": Failed to connect to input device\n");
    724                 return false;
     724                return phone;
    725725        }
    726726       
    727727        /* NB: The callback connection is slotted for removal */
    728728        sysarg_t phonehash;
    729         if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
     729        int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE,
     730            0, 0, NULL, NULL, NULL, NULL, &phonehash);
     731        if (rc != EOK) {
    730732                printf(NAME ": Failed to create callback from input device\n");
     733                return rc;
     734        }
     735       
     736        async_new_connection(phonehash, 0, NULL, keyboard_events);
     737
     738        printf(NAME ": we got a hit (new keyboard \"%s\").\n", path);
     739
     740        return phone;
     741}
     742
     743/** Try to connect to given keyboard, bypassing provided libc routines.
     744 *
     745 * @param devmap_path Path to keyboard without /dev prefix.
     746 * @return Phone or error code.
     747 */
     748static int connect_keyboard_bypass(char *devmap_path)
     749{
     750        int devmap_phone = async_connect_me_to_blocking(PHONE_NS,
     751            SERVICE_DEVMAP, DEVMAP_CLIENT, 0);
     752        if (devmap_phone < 0) {
     753                return devmap_phone;
     754        }
     755        ipc_call_t answer;
     756        aid_t req = async_send_2(devmap_phone, DEVMAP_DEVICE_GET_HANDLE,
     757            0, 0,  &answer);
     758
     759        sysarg_t retval = async_data_write_start(devmap_phone,
     760            devmap_path, str_size(devmap_path));
     761        if (retval != EOK) {
     762                async_wait_for(req, NULL);
     763                ipc_hangup(devmap_phone);
     764                return retval;
     765        }
     766
     767        async_wait_for(req, &retval);
     768
     769        if (retval != EOK) {
     770                ipc_hangup(devmap_phone);
     771                return retval;
     772        }
     773
     774        devmap_handle_t handle = (devmap_handle_t) IPC_GET_ARG1(answer);
     775
     776        ipc_hangup(devmap_phone);
     777
     778        int phone = async_connect_me_to(PHONE_NS,
     779            SERVICE_DEVMAP, DEVMAP_CONNECT_TO_DEVICE, handle);
     780        if (phone < 0) {
     781                return phone;
     782        }
     783
     784        /* NB: The callback connection is slotted for removal */
     785        sysarg_t phonehash;
     786        int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE,
     787            0, 0, NULL, NULL, NULL, NULL, &phonehash);
     788        if (rc != EOK) {
     789                printf(NAME ": Failed to create callback from input device\n");
     790                return rc;
     791        }
     792
     793        async_new_connection(phonehash, 0, NULL, keyboard_events);
     794
     795        printf(NAME ": we got a hit (new keyboard \"/dev/%s\").\n",
     796            devmap_path);
     797
     798        return phone;
     799}
     800
     801
     802static int check_new_keyboards(void *arg)
     803{
     804        char *class_name = (char *) arg;
     805
     806        int index = 1;
     807
     808        while (true) {
     809                async_usleep(1 * 500 * 1000);
     810                char *path;
     811                int rc = asprintf(&path, "class/%s\\%d", class_name, index);
     812                if (rc < 0) {
     813                        continue;
     814                }
     815                rc = 0;
     816                rc = connect_keyboard_bypass(path);
     817                if (rc > 0) {
     818                        /* We do not allow unplug. */
     819                        index++;
     820                }
     821
     822                free(path);
     823        }
     824
     825        return EOK;
     826}
     827
     828
     829/** Start a fibril monitoring hot-plugged keyboards.
     830 */
     831static void check_new_keyboards_in_background()
     832{
     833        fid_t fid = fibril_create(check_new_keyboards, (void *)"keyboard");
     834        if (!fid) {
     835                printf(NAME ": failed to create hot-plug-watch fibril.\n");
     836                return;
     837        }
     838        fibril_add_ready(fid);
     839}
     840
     841static bool console_init(char *input)
     842{
     843        /* Connect to input device */
     844        kbd_phone = connect_keyboard(input);
     845        if (kbd_phone < 0) {
    731846                return false;
    732847        }
    733        
    734         async_new_connection(phonehash, 0, NULL, keyboard_events);
    735        
     848
    736849        /* Connect to mouse device */
    737850        mouse_phone = -1;
     
    749862        }
    750863       
     864        sysarg_t phonehash;
    751865        if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
    752866                printf(NAME ": Failed to create callback from mouse device\n");
     
    841955        async_set_interrupt_received(interrupt_received);
    842956       
     957        /* Start fibril for checking on hot-plugged keyboards. */
     958        check_new_keyboards_in_background();
     959
    843960        return true;
    844961}
     
    860977        if (!console_init(argv[1]))
    861978                return -1;
    862        
     979
    863980        printf(NAME ": Accepting connections\n");
    864981        async_manager();
  • uspace/srv/net/tl/udp/udp.c

    r3d5e190 rae1f70e  
    711711        int socket_id;
    712712        size_t addrlen;
    713         size_t size;
     713        size_t size = 0;
    714714        ipc_call_t answer;
    715715        int answer_count;
Note: See TracChangeset for help on using the changeset viewer.