Changeset e9d15d9 in mainline for uspace/drv/block


Ignore:
Timestamp:
2017-08-18T21:15:26Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
24abb85d
Parents:
1c85bae
Message:

Turn IRQ structures into kernel objects

ipc_irq_subscribe() now returns a capability for the underlying IRQ kernel
object. ipc_irq_unsubscribe() can now be done only with a valid IRQ capability.

Location:
uspace/drv/block
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/block/ahci/ahci.c

    r1c85bae re9d15d9  
    11851185        ct.ranges = ahci_ranges;
    11861186       
    1187         int rc = register_interrupt_handler(dev, hw_res_parsed.irqs.irqs[0],
    1188             ahci_interrupt, &ct);
    1189         if (rc != EOK) {
     1187        int irq_cap = register_interrupt_handler(dev,
     1188            hw_res_parsed.irqs.irqs[0], ahci_interrupt, &ct);
     1189        if (irq_cap < 0) {
    11901190                ddf_msg(LVL_ERROR, "Failed registering interrupt handler.");
    11911191                goto error_register_interrupt_handler;
    11921192        }
    11931193       
    1194         rc = irc_enable_interrupt(hw_res_parsed.irqs.irqs[0]);
     1194        int rc = irc_enable_interrupt(hw_res_parsed.irqs.irqs[0]);
    11951195        if (rc != EOK) {
    11961196                ddf_msg(LVL_ERROR, "Failed enable interupt.");
     
    12021202       
    12031203error_enable_interrupt:
    1204         unregister_interrupt_handler(dev, hw_res_parsed.irqs.irqs[0]);
     1204        unregister_interrupt_handler(dev, irq_cap);
    12051205       
    12061206error_register_interrupt_handler:
  • uspace/drv/block/ddisk/ddisk.c

    r1c85bae re9d15d9  
    112112        ddisk_regs_t *ddisk_regs;
    113113
     114        int irq_cap;
     115
    114116        bd_srvs_t bds;
    115117} ddisk_t;
     
    447449        ddisk->bds.sarg = ddisk;
    448450
     451        ddisk->irq_cap = -1;
     452
    449453        /*
    450454         * Enable access to ddisk's PIO registers.
     
    499503        ddisk_irq_commands[0].addr = (void *) &res_phys->status;
    500504        ddisk_irq_commands[3].addr = (void *) &res_phys->command;
    501         rc = register_interrupt_handler(dev, ddisk->ddisk_res.irq,
     505        ddisk->irq_cap = register_interrupt_handler(dev, ddisk->ddisk_res.irq,
    502506            ddisk_irq_handler, &ddisk_irq_code);
    503         if (rc != EOK) {
     507        if (ddisk->irq_cap < 0) {
     508                rc = ddisk->irq_cap;
    504509                ddf_msg(LVL_ERROR, "Failed to register interrupt handler.");
    505510                goto error;
     
    541546        }
    542547
    543         unregister_interrupt_handler(ddisk->dev, ddisk->ddisk_res.irq);
     548        unregister_interrupt_handler(ddisk->dev, ddisk->irq_cap);
    544549       
    545550        rc = pio_disable(ddisk->ddisk_regs, sizeof(ddisk_regs_t));
Note: See TracChangeset for help on using the changeset viewer.