Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/e1k/e1k.c

    r582a0b8 rd51838f  
    4040#include <thread.h>
    4141#include <byteorder.h>
    42 #include <irc.h>
    4342#include <as.h>
    4443#include <ddi.h>
    4544#include <ddf/log.h>
    4645#include <ddf/interrupt.h>
     46#include <device/hw_res.h>
    4747#include <device/hw_res_parsed.h>
    4848#include <pci_dev_iface.h>
     
    116116/** E1000 device data */
    117117typedef struct {
     118        /** DDF device */
     119        ddf_dev_t *dev;
     120        /** Parent session */
     121        async_sess_t *parent_sess;
    118122        /** Device configuration */
    119123        e1000_info_t info;
     
    365369        if (ctrl & CTRL_SLU) {
    366370                ctrl &= ~(CTRL_SLU);
     371                E1000_REG_WRITE(e1000, E1000_CTRL, ctrl);
    367372                fibril_mutex_unlock(&e1000->ctrl_lock);
     373               
    368374                thread_usleep(10);
     375               
    369376                fibril_mutex_lock(&e1000->ctrl_lock);
     377                ctrl = E1000_REG_READ(e1000, E1000_CTRL);
    370378                ctrl |= CTRL_SLU;
     379                E1000_REG_WRITE(e1000, E1000_CTRL, ctrl);
    371380        }
    372381       
    373382        fibril_mutex_unlock(&e1000->ctrl_lock);
    374        
    375         e1000_link_restart(e1000);
    376383}
    377384
     
    12531260 * @param nic Driver data
    12541261 *
    1255  * @return EOK if the handler was registered
     1262 * @return IRQ capability handle if the handler was registered
    12561263 * @return Negative error code otherwise
    12571264 *
     
    12681275        e1000_irq_code.cmds[2].addr = e1000->reg_base_phys + E1000_IMC;
    12691276       
    1270         int rc = register_interrupt_handler(nic_get_ddf_dev(nic),
    1271             e1000->irq, e1000_interrupt_handler, &e1000_irq_code);
     1277        int cap = register_interrupt_handler(nic_get_ddf_dev(nic), e1000->irq,
     1278            e1000_interrupt_handler, &e1000_irq_code);
    12721279       
    12731280        fibril_mutex_unlock(&irq_reg_mutex);
    1274         return rc;
     1281        return cap;
    12751282}
    12761283
     
    17541761        e1000_enable_interrupts(e1000);
    17551762       
    1756         int rc = irc_enable_interrupt(e1000->irq);
     1763        int rc = hw_res_enable_interrupt(e1000->parent_sess, e1000->irq);
    17571764        if (rc != EOK) {
    17581765                e1000_disable_interrupts(e1000);
     
    17991806        e1000_disable_rx(e1000);
    18001807       
    1801         irc_disable_interrupt(e1000->irq);
     1808        hw_res_disable_interrupt(e1000->parent_sess, e1000->irq);
    18021809        e1000_disable_interrupts(e1000);
    18031810       
     
    18811888       
    18821889        memset(e1000, 0, sizeof(e1000_t));
     1890        e1000->dev = dev;
    18831891       
    18841892        nic_set_specific(nic, e1000);
     
    19952003                ddf_msg(LVL_ERROR, "Unable to allocate device softstate");
    19962004                return ENOMEM;
     2005        }
     2006       
     2007        e1000->parent_sess = ddf_dev_parent_sess_get(dev);
     2008        if (e1000->parent_sess == NULL) {
     2009                ddf_msg(LVL_ERROR, "Failed connecting parent device.");
     2010                return EIO;
    19972011        }
    19982012       
     
    21162130{
    21172131        ddf_fun_t *fun;
    2118         assert(dev);
    21192132       
    21202133        /* Initialize device structure for E1000 */
     
    21522165        ddf_fun_set_ops(fun, &e1000_dev_ops);
    21532166       
    2154         rc = e1000_register_int_handler(nic);
    2155         if (rc != EOK)
     2167        int irq_cap = e1000_register_int_handler(nic);
     2168        if (irq_cap < 0) {
     2169                rc = irq_cap;
    21562170                goto err_fun_create;
     2171        }
    21572172       
    21582173        rc = e1000_initialize_rx_structure(nic);
     
    21892204        e1000_uninitialize_rx_structure(nic);
    21902205err_irq:
    2191         unregister_interrupt_handler(dev, DRIVER_DATA_DEV(dev)->irq);
     2206        unregister_interrupt_handler(dev, irq_cap);
    21922207err_fun_create:
    21932208        ddf_fun_destroy(fun);
Note: See TracChangeset for help on using the changeset viewer.