Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-rhd/main.c

    r1a93bb0 r357a302  
    3232 * @brief UHCI driver
    3333 */
    34 #include <ddf/driver.h>
    35 #include <devman.h>
    36 #include <device/hw_res.h>
     34#include <driver.h>
    3735#include <usb_iface.h>
    3836#include <usb/ddfiface.h>
     
    4543
    4644#define NAME "uhci-rhd"
    47 static int hc_get_my_registers(ddf_dev_t *dev,
    48     uintptr_t *io_reg_address, size_t *io_reg_size);
    4945
    50 static int usb_iface_get_hc_handle(ddf_fun_t *fun, devman_handle_t *handle)
     46static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle)
    5147{
    52         assert(fun);
    53         assert(fun->driver_data);
     48        assert(dev);
     49        assert(dev->driver_data);
    5450        assert(handle);
    5551
    56         *handle = ((uhci_root_hub_t*)fun->driver_data)->hc_handle;
     52        *handle = ((uhci_root_hub_t*)dev->driver_data)->hc_handle;
     53        usb_log_debug("Answering HC handle: %d.\n", *handle);
    5754
    5855        return EOK;
     
    6461};
    6562
    66 static ddf_dev_ops_t uhci_rh_ops = {
     63static device_ops_t uhci_rh_ops = {
    6764        .interfaces[USB_DEV_IFACE] = &uhci_rh_usb_iface,
    6865};
    6966
    70 static int uhci_rh_add_device(ddf_dev_t *device)
     67static int uhci_rh_add_device(device_t *device)
    7168{
    7269        if (!device)
     
    7471
    7572        usb_log_debug2("%s called device %d\n", __FUNCTION__, device->handle);
    76 
    77         //device->ops = &uhci_rh_ops;
    78         (void) uhci_rh_ops;
     73        device->ops = &uhci_rh_ops;
    7974
    8075        uhci_root_hub_t *rh = malloc(sizeof(uhci_root_hub_t));
     
    8479        }
    8580
    86         uintptr_t io_regs = 0;
    87         size_t io_size = 0;
    88 
    89         int ret = hc_get_my_registers(device, &io_regs, &io_size);
    90         assert(ret == EOK);
    91 
    92         /* TODO: verify values from hc */
    93         usb_log_info("I/O regs at 0x%X (size %zu).\n", io_regs, io_size);
    94         ret = uhci_root_hub_init(rh, (void*)io_regs, io_size, device);
     81        /* TODO: get register values from hc */
     82        int ret = uhci_root_hub_init(rh, (void*)0xc030, 4, device);
    9583        if (ret != EOK) {
    9684                usb_log_error("Failed(%d) to initialize driver instance.\n", ret);
     
    113101        .driver_ops = &uhci_rh_driver_ops
    114102};
    115 /*----------------------------------------------------------------------------*/
     103
    116104int main(int argc, char *argv[])
    117105{
    118         usb_log_enable(USB_LOG_LEVEL_INFO, NAME);
    119         return ddf_driver_main(&uhci_rh_driver);
    120 }
    121 /*----------------------------------------------------------------------------*/
    122 int hc_get_my_registers(ddf_dev_t *dev,
    123     uintptr_t *io_reg_address, size_t *io_reg_size)
    124 {
    125         assert(dev != NULL);
    126 
    127         int parent_phone = devman_parent_device_connect(dev->handle,
    128             IPC_FLAG_BLOCKING);
    129         if (parent_phone < 0) {
    130                 return parent_phone;
    131         }
    132 
    133         int rc;
    134 
    135         hw_resource_list_t hw_resources;
    136         rc = hw_res_get_resource_list(parent_phone, &hw_resources);
    137         if (rc != EOK) {
    138                 goto leave;
    139         }
    140 
    141         uintptr_t io_address = 0;
    142         size_t io_size = 0;
    143         bool io_found = false;
    144 
    145         size_t i;
    146         for (i = 0; i < hw_resources.count; i++) {
    147                 hw_resource_t *res = &hw_resources.resources[i];
    148                 switch (res->type) {
    149                         case IO_RANGE:
    150                                 io_address = (uintptr_t)
    151                                     res->res.io_range.address;
    152                                 io_size = res->res.io_range.size;
    153                                 io_found = true;
    154                                 break;
    155                         default:
    156                                 break;
    157                 }
    158         }
    159 
    160         if (!io_found) {
    161                 rc = ENOENT;
    162                 goto leave;
    163         }
    164 
    165         if (io_reg_address != NULL) {
    166                 *io_reg_address = io_address;
    167         }
    168         if (io_reg_size != NULL) {
    169                 *io_reg_size = io_size;
    170         }
    171         rc = EOK;
    172 leave:
    173         async_hangup(parent_phone);
    174 
    175         return rc;
     106        usb_log_enable(USB_LOG_LEVEL_ERROR, NAME);
     107        return driver_main(&uhci_rh_driver);
    176108}
    177109/**
Note: See TracChangeset for help on using the changeset viewer.