Ignore:
File:
1 edited

Legend:

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

    r8820544 r56fd7cf  
    3838 */
    3939
     40/* XXX Fix this */
     41#define _DDF_DATA_IMPLANT
     42
    4043#include <stdio.h>
    4144#include <errno.h>
    42 #include <irc.h>
    4345#include <stdlib.h>
    4446#include <str_error.h>
     
    122124};
    123125
    124 static void ne2k_interrupt_handler(ipc_callid_t, ipc_call_t *, ddf_dev_t *);
     126static void ne2k_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid,
     127        ipc_call_t *call);
    125128
    126129static int ne2k_register_interrupt(nic_t *nic_data)
     
    208211        ne2k->irq = hw_res_parsed.irqs.irqs[0];
    209212       
    210         addr_range_t regs = hw_res_parsed.io_ranges.ranges[0];
    211         ne2k->base_port = RNGABSPTR(regs);
     213        ne2k->base_port = (void *) (uintptr_t)
     214            hw_res_parsed.io_ranges.ranges[0].address;
    212215       
    213216        hw_res_list_parsed_clean(&hw_res_parsed);
    214217       
    215         /* Enable programmed I/O */
    216         if (pio_enable_range(&regs, &ne2k->port) != EOK)
     218        /* Enable port I/O */
     219        if (pio_enable(ne2k->base_port, NE2K_IO_SIZE, &ne2k->port) != EOK)
    217220                return EADDRNOTAVAIL;
     221       
    218222       
    219223        ne2k->data_port = ne2k->port + NE2K_DATA;
     
    239243}
    240244
    241 void ne2k_interrupt_handler(ipc_callid_t iid, ipc_call_t *call, ddf_dev_t *dev)
     245void ne2k_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid, ipc_call_t *call)
    242246{
    243247        nic_t *nic_data = DRIVER_DATA(dev);
    244248        ne2k_interrupt(nic_data, IRQ_GET_ISR(*call), IRQ_GET_TSR(*call));
    245        
     249
    246250        async_answer_0(iid, EOK);
    247251}
     
    253257        if (!ne2k->up) {
    254258                int rc = ne2k_up(ne2k);
    255                 if (rc != EOK)
    256                         return rc;
    257 
    258                 rc = irc_enable_interrupt(ne2k->irq);
    259259                if (rc != EOK) {
    260                         ne2k_down(ne2k);
    261260                        return rc;
    262261                }
     262
     263                nic_enable_interrupt(nic_data, ne2k->irq);
    263264        }
    264265        return EOK;
     
    269270        ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data);
    270271
    271         (void) irc_disable_interrupt(ne2k->irq);
     272        nic_disable_interrupt(nic_data, ne2k->irq);
    272273        ne2k->receive_configuration = RCR_AB | RCR_AM;
    273274        ne2k_down(ne2k);
     
    396397        }
    397398       
     399        rc = nic_connect_to_services(nic_data);
     400        if (rc != EOK) {
     401                ne2k_dev_cleanup(dev);
     402                return rc;
     403        }
     404       
    398405        fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0");
    399406        if (fun == NULL) {
     
    401408                return ENOMEM;
    402409        }
    403        
    404410        nic_set_ddf_fun(nic_data, fun);
    405411        ddf_fun_set_ops(fun, &ne2k_dev_ops);
     412        ddf_fun_data_implant(fun, nic_data);
    406413       
    407414        rc = ddf_fun_bind(fun);
     
    437444int main(int argc, char *argv[])
    438445{
    439         printf("%s: HelenOS NE 2000 network adapter driver\n", NAME);
    440        
    441446        nic_driver_init(NAME);
    442447        nic_driver_implement(&ne2k_driver_ops, &ne2k_dev_ops, &ne2k_nic_iface);
Note: See TracChangeset for help on using the changeset viewer.