Ignore:
File:
1 edited

Legend:

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

    rd51838f r582a0b8  
    4040#include <thread.h>
    4141#include <byteorder.h>
     42#include <irc.h>
    4243#include <as.h>
    4344#include <ddi.h>
    4445#include <ddf/log.h>
    4546#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;
    122118        /** Device configuration */
    123119        e1000_info_t info;
     
    369365        if (ctrl & CTRL_SLU) {
    370366                ctrl &= ~(CTRL_SLU);
    371                 E1000_REG_WRITE(e1000, E1000_CTRL, ctrl);
    372367                fibril_mutex_unlock(&e1000->ctrl_lock);
    373                
    374368                thread_usleep(10);
    375                
    376369                fibril_mutex_lock(&e1000->ctrl_lock);
    377                 ctrl = E1000_REG_READ(e1000, E1000_CTRL);
    378370                ctrl |= CTRL_SLU;
    379                 E1000_REG_WRITE(e1000, E1000_CTRL, ctrl);
    380371        }
    381372       
    382373        fibril_mutex_unlock(&e1000->ctrl_lock);
     374       
     375        e1000_link_restart(e1000);
    383376}
    384377
     
    12601253 * @param nic Driver data
    12611254 *
    1262  * @return IRQ capability handle if the handler was registered
     1255 * @return EOK if the handler was registered
    12631256 * @return Negative error code otherwise
    12641257 *
     
    12751268        e1000_irq_code.cmds[2].addr = e1000->reg_base_phys + E1000_IMC;
    12761269       
    1277         int cap = register_interrupt_handler(nic_get_ddf_dev(nic), e1000->irq,
    1278             e1000_interrupt_handler, &e1000_irq_code);
     1270        int rc = register_interrupt_handler(nic_get_ddf_dev(nic),
     1271            e1000->irq, e1000_interrupt_handler, &e1000_irq_code);
    12791272       
    12801273        fibril_mutex_unlock(&irq_reg_mutex);
    1281         return cap;
     1274        return rc;
    12821275}
    12831276
     
    17611754        e1000_enable_interrupts(e1000);
    17621755       
    1763         int rc = hw_res_enable_interrupt(e1000->parent_sess, e1000->irq);
     1756        int rc = irc_enable_interrupt(e1000->irq);
    17641757        if (rc != EOK) {
    17651758                e1000_disable_interrupts(e1000);
     
    18061799        e1000_disable_rx(e1000);
    18071800       
    1808         hw_res_disable_interrupt(e1000->parent_sess, e1000->irq);
     1801        irc_disable_interrupt(e1000->irq);
    18091802        e1000_disable_interrupts(e1000);
    18101803       
     
    18881881       
    18891882        memset(e1000, 0, sizeof(e1000_t));
    1890         e1000->dev = dev;
    18911883       
    18921884        nic_set_specific(nic, e1000);
     
    20031995                ddf_msg(LVL_ERROR, "Unable to allocate device softstate");
    20041996                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;
    20111997        }
    20121998       
     
    21302116{
    21312117        ddf_fun_t *fun;
     2118        assert(dev);
    21322119       
    21332120        /* Initialize device structure for E1000 */
     
    21652152        ddf_fun_set_ops(fun, &e1000_dev_ops);
    21662153       
    2167         int irq_cap = e1000_register_int_handler(nic);
    2168         if (irq_cap < 0) {
    2169                 rc = irq_cap;
     2154        rc = e1000_register_int_handler(nic);
     2155        if (rc != EOK)
    21702156                goto err_fun_create;
    2171         }
    21722157       
    21732158        rc = e1000_initialize_rx_structure(nic);
     
    22042189        e1000_uninitialize_rx_structure(nic);
    22052190err_irq:
    2206         unregister_interrupt_handler(dev, irq_cap);
     2191        unregister_interrupt_handler(dev, DRIVER_DATA_DEV(dev)->irq);
    22072192err_fun_create:
    22082193        ddf_fun_destroy(fun);
Note: See TracChangeset for help on using the changeset viewer.