Ignore:
File:
1 edited

Legend:

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

    r9571230 r56fd7cf  
    3838 */
    3939
     40/* XXX Fix this */
     41#define _DDF_DATA_IMPLANT
     42
    4043#include <stdio.h>
    4144#include <errno.h>
     
    6164#define IRQ_GET_TSR(call)  ((int) IPC_GET_ARG3(call))
    6265
    63 #define DRIVER_DATA(dev) ((nic_t *) ((dev)->driver_data))
     66#define DRIVER_DATA(dev) ((nic_t *) ddf_dev_data_get(dev))
    6467#define NE2K(device) ((ne2k_t *) nic_get_specific(DRIVER_DATA(device)))
    6568
     
    8386        {
    8487                /* Mask supported interrupt causes */
    85                 .cmd = CMD_BTEST,
     88                .cmd = CMD_AND,
    8689                .value = (ISR_PRX | ISR_PTX | ISR_RXE | ISR_TXE | ISR_OVW |
    8790                    ISR_CNT | ISR_RDC),
     
    169172static void ne2k_dev_cleanup(ddf_dev_t *dev)
    170173{
    171         if (dev->driver_data != NULL) {
     174        if (ddf_dev_data_get(dev) != NULL) {
    172175                ne2k_t *ne2k = NE2K(dev);
    173176                if (ne2k) {
     
    177180                nic_unbind_and_destroy(dev);
    178181        }
    179         if (dev->parent_sess != NULL) {
    180                 async_hangup(dev->parent_sess);
    181                 dev->parent_sess = NULL;
    182         }
    183182}
    184183
     
    279278static int ne2k_set_address(ddf_fun_t *fun, const nic_address_t *address)
    280279{
    281         nic_t *nic_data = DRIVER_DATA(fun);
     280        nic_t *nic_data = DRIVER_DATA(ddf_fun_get_dev(fun));
    282281        int rc = nic_report_address(nic_data, address);
    283282        if (rc != EOK) {
     
    286285        /* Note: some frame with previous physical address may slip to NIL here
    287286         * (for a moment the filtering is not exact), but ethernet should be OK with
    288          * that. Some packet may also be lost, but this is not a problem.
     287         * that. Some frames may also be lost, but this is not a problem.
    289288         */
    290289        ne2k_set_physical_address((ne2k_t *) nic_get_specific(nic_data), address);
     
    363362static int ne2k_dev_add(ddf_dev_t *dev)
    364363{
     364        ddf_fun_t *fun;
     365       
    365366        /* Allocate driver data for the device. */
    366367        nic_t *nic_data = nic_create_and_bind(dev);
     
    396397        }
    397398       
    398         rc = nic_register_as_ddf_fun(nic_data, &ne2k_dev_ops);
     399        rc = nic_connect_to_services(nic_data);
    399400        if (rc != EOK) {
    400401                ne2k_dev_cleanup(dev);
     
    402403        }
    403404       
    404         rc = nic_connect_to_services(nic_data);
    405         if (rc != EOK) {
     405        fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0");
     406        if (fun == NULL) {
    406407                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);
    407425                return rc;
    408426        }
Note: See TracChangeset for help on using the changeset viewer.