Changeset ba4a03a5 in mainline for uspace/drv/bus/usb/ohci
- Timestamp:
- 2013-12-31T23:11:00Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d1df381
- Parents:
- e3a07bba
- Location:
- uspace/drv/bus/usb/ohci
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ohci/hc.c
re3a07bba rba4a03a5 100 100 * @param[out] cmds Commands buffer. 101 101 * @param[in] cmds_size Size of the commands buffer (bytes). 102 * @param[in] regs Device's register range.102 * @param[in] hw_res Device's resources. 103 103 * 104 104 * @return Error code. 105 105 */ 106 int hc_gen_irq_code(irq_code_t *code, addr_range_t *regs)106 int hc_gen_irq_code(irq_code_t *code, const hw_res_list_parsed_t *hw_res) 107 107 { 108 108 assert(code); 109 if (RNGSZ(*regs) < sizeof(ohci_regs_t)) 109 assert(hw_res); 110 111 if (hw_res->irqs.count != 1 || hw_res->mem_ranges.count != 1) 112 return EINVAL; 113 114 const addr_range_t regs = hw_res->mem_ranges.ranges[0]; 115 116 if (RNGSZ(regs) < sizeof(ohci_regs_t)) 110 117 return EOVERFLOW; 111 118 … … 124 131 125 132 memcpy(code->ranges, ohci_pio_ranges, sizeof(ohci_pio_ranges)); 126 code->ranges[0].base = RNGABS( *regs);133 code->ranges[0].base = RNGABS(regs); 127 134 128 135 memcpy(code->cmds, ohci_irq_commands, sizeof(ohci_irq_commands)); 129 ohci_regs_t *registers = (ohci_regs_t *) RNGABSPTR( *regs);136 ohci_regs_t *registers = (ohci_regs_t *) RNGABSPTR(regs); 130 137 code->cmds[0].addr = (void *) ®isters->interrupt_status; 131 138 code->cmds[3].addr = (void *) ®isters->interrupt_status; 132 139 OHCI_WR(code->cmds[1].value, OHCI_USED_INTERRUPTS); 133 140 134 return EOK; 141 usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n", 142 RNGABSPTR(regs), RNGSZ(regs), hw_res->irqs.irqs[0]); 143 144 return hw_res->irqs.irqs[0]; 135 145 } 136 146 -
uspace/drv/bus/usb/ohci/hc.h
re3a07bba rba4a03a5 75 75 } hc_t; 76 76 77 int hc_gen_irq_code(irq_code_t *code, addr_range_t *regs);77 int hc_gen_irq_code(irq_code_t *code, const hw_res_list_parsed_t *hw_res); 78 78 int hc_register_hub(hc_t *instance, ddf_fun_t *hub_fun); 79 79 int hc_init(hc_t *instance, addr_range_t *regs, bool interrupts); -
uspace/drv/bus/usb/ohci/ohci.c
re3a07bba rba4a03a5 96 96 addr_range_t regs = hw_res.mem_ranges.ranges[0]; 97 97 const int irq = hw_res.irqs.irqs[0]; 98 hw_res_list_parsed_clean(&hw_res);99 100 usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n",101 RNGABSPTR(regs), RNGSZ(regs), irq);102 98 103 99 /* Initialize generic HCD driver */ … … 105 101 BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11); 106 102 if (ret != EOK) { 103 hw_res_list_parsed_clean(&hw_res); 107 104 usb_log_error("Failed to setup generic hcd structures: %s.", 108 105 str_error(ret)); … … 113 110 if (!hc) { 114 111 usb_log_error("Failed to allocate driver structure.\n"); 112 hw_res_list_parsed_clean(&hw_res); 115 113 ret = ENOMEM; 116 114 goto ddf_hc_clean; … … 119 117 /* Try to enable interrupts */ 120 118 bool interrupts = false; 121 ret = hcd_ddf_setup_interrupts(device, & regs, irq, irq_handler,119 ret = hcd_ddf_setup_interrupts(device, &hw_res, irq_handler, 122 120 hc_gen_irq_code); 123 121 if (ret != EOK) { … … 131 129 /* Initialize OHCI HC */ 132 130 ret = hc_init(hc, ®s, interrupts); 131 hw_res_list_parsed_clean(&hw_res); 133 132 if (ret != EOK) { 134 133 usb_log_error("Failed to init hc: %s.\n", str_error(ret));
Note:
See TracChangeset
for help on using the changeset viewer.
