Ignore:
File:
1 edited

Legend:

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

    r56fd7cf r9571230  
    3838 */
    3939
    40 /* XXX Fix this */
    41 #define _DDF_DATA_IMPLANT
    42 
    4340#include <stdio.h>
    4441#include <errno.h>
     
    6461#define IRQ_GET_TSR(call)  ((int) IPC_GET_ARG3(call))
    6562
    66 #define DRIVER_DATA(dev) ((nic_t *) ddf_dev_data_get(dev))
     63#define DRIVER_DATA(dev) ((nic_t *) ((dev)->driver_data))
    6764#define NE2K(device) ((ne2k_t *) nic_get_specific(DRIVER_DATA(device)))
    6865
     
    8683        {
    8784                /* Mask supported interrupt causes */
    88                 .cmd = CMD_AND,
     85                .cmd = CMD_BTEST,
    8986                .value = (ISR_PRX | ISR_PTX | ISR_RXE | ISR_TXE | ISR_OVW |
    9087                    ISR_CNT | ISR_RDC),
     
    172169static void ne2k_dev_cleanup(ddf_dev_t *dev)
    173170{
    174         if (ddf_dev_data_get(dev) != NULL) {
     171        if (dev->driver_data != NULL) {
    175172                ne2k_t *ne2k = NE2K(dev);
    176173                if (ne2k) {
     
    180177                nic_unbind_and_destroy(dev);
    181178        }
     179        if (dev->parent_sess != NULL) {
     180                async_hangup(dev->parent_sess);
     181                dev->parent_sess = NULL;
     182        }
    182183}
    183184
     
    278279static int ne2k_set_address(ddf_fun_t *fun, const nic_address_t *address)
    279280{
    280         nic_t *nic_data = DRIVER_DATA(ddf_fun_get_dev(fun));
     281        nic_t *nic_data = DRIVER_DATA(fun);
    281282        int rc = nic_report_address(nic_data, address);
    282283        if (rc != EOK) {
     
    285286        /* Note: some frame with previous physical address may slip to NIL here
    286287         * (for a moment the filtering is not exact), but ethernet should be OK with
    287          * that. Some frames may also be lost, but this is not a problem.
     288         * that. Some packet may also be lost, but this is not a problem.
    288289         */
    289290        ne2k_set_physical_address((ne2k_t *) nic_get_specific(nic_data), address);
     
    362363static int ne2k_dev_add(ddf_dev_t *dev)
    363364{
    364         ddf_fun_t *fun;
    365        
    366365        /* Allocate driver data for the device. */
    367366        nic_t *nic_data = nic_create_and_bind(dev);
     
    397396        }
    398397       
     398        rc = nic_register_as_ddf_fun(nic_data, &ne2k_dev_ops);
     399        if (rc != EOK) {
     400                ne2k_dev_cleanup(dev);
     401                return rc;
     402        }
     403       
    399404        rc = nic_connect_to_services(nic_data);
    400405        if (rc != EOK) {
     
    403408        }
    404409       
    405         fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0");
    406         if (fun == NULL) {
    407                 ne2k_dev_cleanup(dev);
    408                 return ENOMEM;
    409         }
    410         nic_set_ddf_fun(nic_data, fun);
    411         ddf_fun_set_ops(fun, &ne2k_dev_ops);
    412         ddf_fun_data_implant(fun, nic_data);
    413        
    414         rc = ddf_fun_bind(fun);
    415         if (rc != EOK) {
    416                 ddf_fun_destroy(fun);
    417                 ne2k_dev_cleanup(dev);
    418                 return rc;
    419         }
    420        
    421         rc = ddf_fun_add_to_category(fun, DEVICE_CATEGORY_NIC);
    422         if (rc != EOK) {
    423                 ddf_fun_unbind(fun);
    424                 ddf_fun_destroy(fun);
    425                 return rc;
    426         }
    427        
    428410        return EOK;
    429411}
Note: See TracChangeset for help on using the changeset viewer.