Changeset 400575c5 in mainline


Ignore:
Timestamp:
2011-02-04T17:19:20Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e29e09cf, e778543
Parents:
458e40c (diff), 89acf204 (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:

Add UHCI Host Controller driver (uhci-hcd)
Add UHCI Root Hub driver (uhci-rhd)

hcd is able to communicate with usb dvices if request sent to hcd follow
USB specification (no isochronous transfers)
rhd does not support device removal

Files:
25 added
8 edited
6 moved

Legend:

Unmodified
Added
Removed
  • .bzrignore

    r458e40c r400575c5  
    8484./uspace/drv/test1/test1
    8585./uspace/drv/test2/test2
    86 ./uspace/drv/uhci/uhci
     86./uspace/drv/uhci-hcd/uhci-hcd
     87./uspace/drv/uhci-rhd/uhci-rhd
    8788./uspace/drv/usbhub/usbhub
    8889./uspace/drv/usbhid/usbhid
  • boot/arch/amd64/Makefile.inc

    r458e40c r400575c5  
    4343        isa \
    4444        ns8250 \
    45         uhci \
     45        uhci-hcd \
     46        uhci-rhd \
    4647        usbhub \
    4748        usbhid \
  • uspace/Makefile

    r458e40c r400575c5  
    117117                srv/hw/irc/apic \
    118118                srv/hw/irc/i8259 \
    119                 drv/uhci \
     119                drv/uhci-hcd \
     120                drv/uhci-rhd \
    120121                drv/usbhid \
    121122                drv/usbhub \
     
    131132                srv/hw/irc/apic \
    132133                srv/hw/irc/i8259 \
    133                 drv/uhci \
     134                drv/uhci-hcd \
     135                drv/uhci-rhd \
    134136                drv/usbhid \
    135137                drv/usbhub \
  • uspace/app/bdsh/cmds/modules/cat/cat.c

    r458e40c r400575c5  
    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

    r458e40c r400575c5  
    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/drv/rootvirt/devices.def

    r458e40c r400575c5  
    2323#endif
    2424/* Virtual USB host controller. */
     25/*
    2526{
    2627        .name = "usbhc",
    2728        .match_id = "usb&hc=vhc"
    2829},
     30*/
  • uspace/drv/uhci-hcd/main.c

    r458e40c r400575c5  
    11/*
    2  * Copyright (c) 2010 Vojtech Horky
     2 * Copyright (c) 2011 Vojtech Horky, Jan Vesely
    33 * All rights reserved.
    44 *
     
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
    28 #include <usb/hcdhubd.h>
     28/** @addtogroup usb
     29 * @{
     30 */
     31/** @file
     32 * @brief UHCI driver
     33 */
     34#include <driver.h>
    2935#include <usb_iface.h>
     36
     37#include <errno.h>
     38
    3039#include <usb/debug.h>
    31 #include <errno.h>
    32 #include <str_error.h>
    33 #include <driver.h>
     40
     41#include "iface.h"
     42#include "pci.h"
     43#include "root_hub.h"
    3444#include "uhci.h"
     45
     46#define NAME "uhci-hcd"
    3547
    3648static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle)
     
    5466static int uhci_add_device(device_t *device)
    5567{
    56         usb_dprintf(NAME, 1, "uhci_add_device() called\n");
     68        assert(device);
     69
     70        usb_log_info("uhci_add_device() called\n");
    5771        device->ops = &uhci_ops;
    5872
     
    6579
    6680        if (rc != EOK) {
    67                 fprintf(stderr,
    68                     NAME ": failed to get I/O registers addresses: %s.\n",
    69                     str_error(rc));
     81                usb_log_error("Failed(%d) to get I/O registers addresses for device:.\n",
     82                    rc, device->handle);
    7083                return rc;
    7184        }
    7285
    73         usb_dprintf(NAME, 2, "I/O regs at 0x%X (size %zu), IRQ %d.\n",
     86        usb_log_info("I/O regs at 0x%X (size %zu), IRQ %d.\n",
    7487            io_reg_base, io_reg_size, irq);
    7588
    76         /*
    77          * We need to announce the presence of our root hub.
    78          */
    79         usb_dprintf(NAME, 2, "adding root hub\n");
    80         usb_hcd_add_root_hub(device);
     89        uhci_t *uhci_hc = malloc(sizeof(uhci_t));
     90        if (!uhci_hc) {
     91                usb_log_error("Failed to allocaete memory for uhci hcd driver.\n");
     92                return ENOMEM;
     93        }
     94
     95        int ret = uhci_init(uhci_hc, (void*)io_reg_base, io_reg_size);
     96        if (ret != EOK) {
     97                usb_log_error("Failed to init uhci-hcd.\n");
     98                return ret;
     99        }
     100        device_t *rh;
     101        ret = setup_root_hub(&rh, device);
     102
     103        if (ret != EOK) {
     104                usb_log_error("Failed to setup uhci root hub.\n");
     105                /* TODO: destroy uhci here */
     106                return ret;
     107        }
     108
     109        ret = child_device_register(rh, device);
     110        if (ret != EOK) {
     111                usb_log_error("Failed to register root hub.\n");
     112                /* TODO: destroy uhci here */
     113                return ret;
     114        }
     115
     116        device->driver_data = uhci_hc;
    81117
    82118        return EOK;
     
    98134         */
    99135        sleep(5);
    100         usb_dprintf_enable(NAME, 5);
     136        usb_log_enable(USB_LOG_LEVEL_INFO, NAME);
    101137
    102138        return driver_main(&uhci_driver);
    103139}
     140/**
     141 * @}
     142 */
  • uspace/drv/uhci-hcd/pci.c

    r458e40c r400575c5  
    3434 * PCI related functions needed by the UHCI driver.
    3535 */
    36 #include "uhci.h"
    3736#include <errno.h>
    3837#include <assert.h>
    3938#include <devman.h>
    4039#include <device/hw_res.h>
     40
     41#include "pci.h"
    4142
    4243/** Get address of registers and IRQ for given device.
     
    125126 */
    126127
     128/**
     129 * @}
     130 */
  • uspace/drv/uhci-hcd/pci.h

    r458e40c r400575c5  
    3333 * @brief UHCI driver
    3434 */
    35 #ifndef DRV_UHCI_UHCI_H
    36 #define DRV_UHCI_UHCI_H
     35#ifndef DRV_UHCI_PCI_H
     36#define DRV_UHCI_PCI_H
    3737
    38 #include <usbhc_iface.h>
    39 
    40 #define NAME "uhci"
    41 
    42 usbhc_iface_t uhci_iface;
     38#include <driver.h>
    4339
    4440int pci_get_my_registers(device_t *, uintptr_t *, size_t *, int *);
     
    4844 * @}
    4945 */
     46
  • uspace/drv/uhci-rhd/Makefile

    r458e40c r400575c5  
    11#
    2 # Copyright (c) 2010 Vojtech Horky
     2# Copyright (c) 2010 Jan Vesely
    33# All rights reserved.
    44#
     
    2929USPACE_PREFIX = ../..
    3030LIBS = $(LIBDRV_PREFIX)/libdrv.a $(LIBUSB_PREFIX)/libusb.a
    31 EXTRA_CFLAGS += -I$(LIBDRV_PREFIX)/include -I$(LIBUSB_PREFIX)/include
    32 BINARY = uhci
     31EXTRA_CFLAGS += -I$(LIBDRV_PREFIX)/include -I$(LIBUSB_PREFIX)/include -I.
     32BINARY = uhci-rhd
    3333
    3434SOURCES = \
    3535        main.c \
    36         pci.c \
    37         transfers.c
     36        port.c \
     37        port_status.c \
     38        root_hub.c
    3839
    3940include $(USPACE_PREFIX)/Makefile.common
  • uspace/drv/usbhid/main.c

    r458e40c r400575c5  
    5656#include "layout.h"
    5757
    58 #define BUFFER_SIZE 32
     58#define BUFFER_SIZE 8
    5959#define NAME "usbhid"
    6060
     
    262262}
    263263
     264# if 0
    264265/*
    265266 * Kbd functions
     
    297298        return EOK;
    298299}
    299 
    300300static int usbkbd_process_descriptors(usb_hid_dev_kbd_t *kbd_dev)
    301301{
     
    363363        return EOK;
    364364}
    365 
     365#endif
    366366static usb_hid_dev_kbd_t *usbkbd_init_device(device_t *dev)
    367367{
     
    404404         */
    405405
     406
    406407        // TODO: get descriptors, parse descriptors and save endpoints
    407         usbkbd_process_descriptors(kbd_dev);
     408        //usbkbd_process_descriptors(kbd_dev);
     409        usb_drv_req_set_configuration(
     410          kbd_dev->device->parent_phone, kbd_dev->address, 1);
    408411
    409412
     
    467470
    468471        while (true) {
    469                 async_usleep(1000 * 1000 * 2);
     472                async_usleep(1000 * 10);
    470473
    471474                sess_rc = usb_endpoint_pipe_start_session(&kbd_dev->poll_pipe);
  • uspace/lib/usb/include/usb/devreq.h

    r458e40c r400575c5  
    7070        /** Main parameter to the request. */
    7171        union {
     72                uint16_t value;
    7273                /* FIXME: add #ifdefs according to host endianess */
    7374                struct {
     
    7576                        uint8_t value_high;
    7677                };
    77                 uint16_t value;
    7878        };
    7979        /** Auxiliary parameter to the request.
Note: See TracChangeset for help on using the changeset viewer.