Changeset 3f03199 in mainline for uspace/drv/bus/usb/ehci


Ignore:
Timestamp:
2013-09-15T06:33:53Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
Children:
9348862
Parents:
dd7078c (diff), 1c0cef0 (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 mainline changes.

Major conflicts in USB HC drivers.
Compiles and UHCI works (qemu).
OHCI has device remove problems.

Location:
uspace/drv/bus/usb/ehci
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/ehci/main.c

    rdd7078c r3f03199  
    6767{
    6868        assert(device);
    69 #define CHECK_RET_RETURN(ret, message...) \
    70 if (ret != EOK) { \
    71         usb_log_error(message); \
    72         return ret; \
    73 }
    7469
    75         uintptr_t reg_base = 0;
    76         size_t reg_size = 0;
     70        addr_range_t reg_range;
    7771        int irq = 0;
    7872
    79         int ret = get_my_registers(device, &reg_base, &reg_size, &irq);
    80         CHECK_RET_RETURN(ret,
    81             "Failed to get memory addresses for %" PRIun ": %s.\n",
    82             ddf_dev_get_handle(device), str_error(ret));
    83         usb_log_info("Memory mapped regs at 0x%" PRIxn " (size %zu), IRQ %d.\n",
    84             reg_base, reg_size, irq);
     73        int ret = get_my_registers(device, &reg_range, &irq);
     74        if (ret != EOK) {
     75                usb_log_error("Failed to get memory addresses for %" PRIun
     76                    ": %s.\n", ddf_dev_get_handle(device), str_error(ret));
     77                return ret;
     78        }
    8579
    86         ret = disable_legacy(device, reg_base, reg_size);
    87         CHECK_RET_RETURN(ret,
    88             "Failed to disable legacy USB: %s.\n", str_error(ret));
     80        usb_log_info("Memory mapped regs at %p (size %zu), IRQ %d.\n",
     81            RNGABSPTR(reg_range), RNGSZ(reg_range), irq);
     82
     83        ret = disable_legacy(device, &reg_range);
     84        if (ret != EOK) {
     85                usb_log_error("Failed to disable legacy USB: %s.\n",
     86                    str_error(ret));
     87                return ret;
     88        }
    8989
    9090        /* High Speed, no bandwidth */
    91         ret = hcd_ddf_setup_hc(device, USB_SPEED_HIGH, 0, NULL);       
    92         CHECK_RET_RETURN(ret,
    93             "Failed to init generci hcd driver: %s\n", str_error(ret));
     91        ret = hcd_ddf_setup_hc(device, USB_SPEED_HIGH, 0, NULL);
     92        if (ret != EOK) {
     93                usb_log_error("Failed to init generci hcd driver: %s\n",
     94                    str_error(ret));
     95                return ret;
     96        }
    9497
    9598        usb_log_info("Controlling new EHCI device `%s' (handle %" PRIun ").\n",
     
    97100
    98101        return EOK;
    99 #undef CHECK_RET_RETURN
    100102}
    101103
  • uspace/drv/bus/usb/ehci/res.c

    rdd7078c r3f03199  
    7171 *
    7272 * @param[in] dev Device asking for the addresses.
    73  * @param[out] mem_reg_address Base address of the memory range.
    74  * @param[out] mem_reg_size Size of the memory range.
     73 * @param[out] mem_regs_p Pointer to the register range.
    7574 * @param[out] irq_no IRQ assigned to the device.
    7675 * @return Error code.
    7776 */
    7877int get_my_registers(ddf_dev_t *dev,
    79     uintptr_t *mem_reg_address, size_t *mem_reg_size, int *irq_no)
     78    addr_range_t *mem_regs_p, int *irq_no)
    8079{
    8180        assert(dev);
     
    9998        }
    10099
    101         if (mem_reg_address)
    102                 *mem_reg_address = hw_res.mem_ranges.ranges[0].address;
    103         if (mem_reg_size)
    104                 *mem_reg_size = hw_res.mem_ranges.ranges[0].size;
     100        if (mem_regs_p)
     101                *mem_regs_p = hw_res.mem_ranges.ranges[0];
    105102        if (irq_no)
    106103                *irq_no = hw_res.irqs.irqs[0];
     
    234231}
    235232
    236 int disable_legacy(ddf_dev_t *device, uintptr_t reg_base, size_t reg_size)
     233int disable_legacy(ddf_dev_t *device, addr_range_t *reg_range)
    237234{
    238235        assert(device);
    239236        usb_log_debug("Disabling EHCI legacy support.\n");
    240237
    241 #define CHECK_RET_RETURN(ret, message...) \
    242         if (ret != EOK) { \
    243                 usb_log_error(message); \
    244                 return ret; \
    245         } else (void)0
    246 
    247238        /* Map EHCI registers */
    248239        void *regs = NULL;
    249         int ret = pio_enable((void*)reg_base, reg_size, &regs);
    250         CHECK_RET_RETURN(ret, "Failed to map registers %p: %s.\n",
    251             (void *) reg_base, str_error(ret));
     240        int ret = pio_enable_range(reg_range, &regs);
     241        if (ret != EOK) {
     242                usb_log_error("Failed to map registers %p: %s.\n",
     243                    RNGABSPTR(*reg_range), str_error(ret));
     244                return ret;
     245        }
    252246
    253247        usb_log_debug2("Registers mapped at: %p.\n", regs);
     
    264258
    265259        ret = disable_extended_caps(device, eecp);
    266         CHECK_RET_RETURN(ret, "Failed to disable extended capabilities: %s.\n",
    267             str_error(ret));
    268 
    269 #undef CHECK_RET_RETURN
     260        if (ret != EOK) {
     261                usb_log_error("Failed to disable extended capabilities: %s.\n",
     262                    str_error(ret));
     263                return ret;
     264        }
     265
    270266
    271267        /*
  • uspace/drv/bus/usb/ehci/res.h

    rdd7078c r3f03199  
    3737
    3838#include <ddf/driver.h>
     39#include <device/hw_res_parsed.h>
    3940
    40 int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *);
     41int get_my_registers(ddf_dev_t *, addr_range_t *, int *);
    4142int enable_interrupts(ddf_dev_t *);
    42 int disable_legacy(ddf_dev_t *, uintptr_t, size_t);
     43int disable_legacy(ddf_dev_t *, addr_range_t *);
    4344
    4445#endif
Note: See TracChangeset for help on using the changeset viewer.