Ignore:
File:
1 edited

Legend:

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

    r56fd7cf r8820544  
    3838 */
    3939
    40 /* XXX Fix this */
    41 #define _DDF_DATA_IMPLANT
    42 
    4340#include <stdio.h>
    4441#include <errno.h>
     42#include <irc.h>
    4543#include <stdlib.h>
    4644#include <str_error.h>
     
    124122};
    125123
    126 static void ne2k_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid,
    127         ipc_call_t *call);
     124static void ne2k_interrupt_handler(ipc_callid_t, ipc_call_t *, ddf_dev_t *);
    128125
    129126static int ne2k_register_interrupt(nic_t *nic_data)
     
    211208        ne2k->irq = hw_res_parsed.irqs.irqs[0];
    212209       
    213         ne2k->base_port = (void *) (uintptr_t)
    214             hw_res_parsed.io_ranges.ranges[0].address;
     210        addr_range_t regs = hw_res_parsed.io_ranges.ranges[0];
     211        ne2k->base_port = RNGABSPTR(regs);
    215212       
    216213        hw_res_list_parsed_clean(&hw_res_parsed);
    217214       
    218         /* Enable port I/O */
    219         if (pio_enable(ne2k->base_port, NE2K_IO_SIZE, &ne2k->port) != EOK)
     215        /* Enable programmed I/O */
     216        if (pio_enable_range(&regs, &ne2k->port) != EOK)
    220217                return EADDRNOTAVAIL;
    221        
    222218       
    223219        ne2k->data_port = ne2k->port + NE2K_DATA;
     
    243239}
    244240
    245 void ne2k_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid, ipc_call_t *call)
     241void ne2k_interrupt_handler(ipc_callid_t iid, ipc_call_t *call, ddf_dev_t *dev)
    246242{
    247243        nic_t *nic_data = DRIVER_DATA(dev);
    248244        ne2k_interrupt(nic_data, IRQ_GET_ISR(*call), IRQ_GET_TSR(*call));
    249 
     245       
    250246        async_answer_0(iid, EOK);
    251247}
     
    257253        if (!ne2k->up) {
    258254                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);
    260261                        return rc;
    261262                }
    262 
    263                 nic_enable_interrupt(nic_data, ne2k->irq);
    264263        }
    265264        return EOK;
     
    270269        ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data);
    271270
    272         nic_disable_interrupt(nic_data, ne2k->irq);
     271        (void) irc_disable_interrupt(ne2k->irq);
    273272        ne2k->receive_configuration = RCR_AB | RCR_AM;
    274273        ne2k_down(ne2k);
     
    397396        }
    398397       
    399         rc = nic_connect_to_services(nic_data);
    400         if (rc != EOK) {
    401                 ne2k_dev_cleanup(dev);
    402                 return rc;
    403         }
    404        
    405398        fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0");
    406399        if (fun == NULL) {
     
    408401                return ENOMEM;
    409402        }
     403       
    410404        nic_set_ddf_fun(nic_data, fun);
    411405        ddf_fun_set_ops(fun, &ne2k_dev_ops);
    412         ddf_fun_data_implant(fun, nic_data);
    413406       
    414407        rc = ddf_fun_bind(fun);
     
    444437int main(int argc, char *argv[])
    445438{
     439        printf("%s: HelenOS NE 2000 network adapter driver\n", NAME);
     440       
    446441        nic_driver_init(NAME);
    447442        nic_driver_implement(&ne2k_driver_ops, &ne2k_dev_ops, &ne2k_nic_iface);
Note: See TracChangeset for help on using the changeset viewer.