Changes in uspace/drv/bus/usb/ohci/hc.c [507c6f3:acdb5bac] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/ohci/hc.c
r507c6f3 racdb5bac 83 83 }; 84 84 85 enum {86 /** Number of PIO ranges used in IRQ code */87 hc_irq_pio_range_count =88 sizeof(ohci_pio_ranges) / sizeof(irq_pio_range_t),89 90 /** Number of commands used in IRQ code */91 hc_irq_cmd_count =92 sizeof(ohci_irq_commands) / sizeof(irq_cmd_t)93 };94 95 85 static void hc_gain_control(hc_t *instance); 96 86 static void hc_start(hc_t *instance); … … 99 89 static int interrupt_emulator(hc_t *instance); 100 90 static int hc_schedule(hcd_t *hcd, usb_transfer_batch_t *batch); 91 92 /** Get number of PIO ranges used in IRQ code. 93 * @return Number of ranges. 94 */ 95 size_t hc_irq_pio_range_count(void) 96 { 97 return sizeof(ohci_pio_ranges) / sizeof(irq_pio_range_t); 98 } 99 100 /** Get number of commands used in IRQ code. 101 * @return Number of commands. 102 */ 103 size_t hc_irq_cmd_count(void) 104 { 105 return sizeof(ohci_irq_commands) / sizeof(irq_cmd_t); 106 } 101 107 102 108 /** Generate IRQ code. … … 127 133 cmds[3].addr = (void *) ®isters->interrupt_status; 128 134 OHCI_WR(cmds[1].value, OHCI_USED_INTERRUPTS); 129 130 return EOK;131 }132 133 /** Register interrupt handler.134 *135 * @param[in] device Host controller DDF device136 * @param[in] reg_base Register range base137 * @param[in] reg_size Register range size138 * @param[in] irq Interrupt number139 * @paran[in] handler Interrupt handler140 *141 * @return EOK on success or negative error code142 */143 int hc_register_irq_handler(ddf_dev_t *device, uintptr_t reg_base, size_t reg_size,144 int irq, interrupt_handler_t handler)145 {146 int rc;147 148 irq_pio_range_t irq_ranges[hc_irq_pio_range_count];149 irq_cmd_t irq_cmds[hc_irq_cmd_count];150 151 irq_code_t irq_code = {152 .rangecount = hc_irq_pio_range_count,153 .ranges = irq_ranges,154 .cmdcount = hc_irq_cmd_count,155 .cmds = irq_cmds156 };157 158 rc = hc_get_irq_code(irq_ranges, sizeof(irq_ranges), irq_cmds,159 sizeof(irq_cmds), reg_base, reg_size);160 if (rc != EOK) {161 usb_log_error("Failed to generate IRQ code: %s.\n",162 str_error(rc));163 return rc;164 }165 166 /* Register handler to avoid interrupt lockup */167 rc = register_interrupt_handler(device, irq, handler, &irq_code);168 if (rc != EOK) {169 usb_log_error("Failed to register interrupt handler: %s.\n",170 str_error(rc));171 return rc;172 }173 135 174 136 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.