Changes in uspace/drv/nic/lo/lo.c [5cc9eba:00d7e1b] in mainline


Ignore:
File:
1 edited

Legend:

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

    r5cc9eba r00d7e1b  
    4242#include <async.h>
    4343#include <nic.h>
     44#include <packet_client.h>
    4445
    4546#define NAME  "lo"
     
    5859};
    5960
    60 static void lo_send_frame(nic_t *nic_data, void *data, size_t size)
     61static void lo_write_packet(nic_t *nic_data, packet_t *packet)
    6162{
    62         nic_report_send_ok(nic_data, 1, size);
    63         nic_received_noneth_frame(nic_data, data, size);
     63        nic_report_send_ok(nic_data, 1, packet_get_data_length(packet));
     64        nic_received_noneth_packet(nic_data, packet);
    6465}
    6566
     
    7879}
    7980
    80 static int lo_dev_add(ddf_dev_t *dev)
     81static int lo_add_device(ddf_dev_t *dev)
    8182{
    82         ddf_fun_t *fun = NULL;
    83         bool bound = false;
    84        
    85         nic_t *nic = nic_create_and_bind(dev);
    86         if (nic == NULL) {
     83        nic_t *nic_data = nic_create_and_bind(dev);
     84        if (nic_data == NULL) {
    8785                printf("%s: Failed to initialize\n", NAME);
    8886                return ENOMEM;
    8987        }
    9088       
    91         dev->driver_data = nic;
    92         nic_set_send_frame_handler(nic, lo_send_frame);
     89        dev->driver_data = nic_data;
     90        nic_set_write_packet_handler(nic_data, lo_write_packet);
    9391       
    94         int rc = nic_connect_to_services(nic);
     92        int rc = nic_connect_to_services(nic_data);
    9593        if (rc != EOK) {
    9694                printf("%s: Failed to connect to services\n", NAME);
    97                 goto error;
     95                nic_unbind_and_destroy(dev);
     96                return rc;
    9897        }
    9998       
    100         fun = ddf_fun_create(nic_get_ddf_dev(nic), fun_exposed, "port0");
    101         if (fun == NULL) {
    102                 printf("%s: Failed creating function\n", NAME);
    103                 rc = ENOMEM;
    104                 goto error;
     99        rc = nic_register_as_ddf_fun(nic_data, &lo_dev_ops);
     100        if (rc != EOK) {
     101                printf("%s: Failed to register as DDF function\n", NAME);
     102                nic_unbind_and_destroy(dev);
     103                return rc;
    105104        }
    106         nic_set_ddf_fun(nic, fun);
    107         fun->ops = &lo_dev_ops;
    108         fun->driver_data = nic;
    109105       
    110         rc = nic_report_address(nic, &lo_addr);
     106        rc = nic_report_address(nic_data, &lo_addr);
    111107        if (rc != EOK) {
    112108                printf("%s: Failed to setup loopback address\n", NAME);
    113                 goto error;
     109                nic_unbind_and_destroy(dev);
     110                return rc;
    114111        }
    115        
    116         rc = ddf_fun_bind(fun);
    117         if (rc != EOK) {
    118                 printf("%s: Failed binding function\n", NAME);
    119                 goto error;
    120         }
    121         bound = true;
    122        
    123         rc = ddf_fun_add_to_category(fun, DEVICE_CATEGORY_NIC);
    124         if (rc != EOK)
    125                 goto error;
    126112       
    127113        printf("%s: Adding loopback device '%s'\n", NAME, dev->name);
    128114        return EOK;
    129        
    130 error:
    131         if (bound)
    132                 ddf_fun_unbind(fun);
    133        
    134         if (fun != NULL)
    135                 ddf_fun_destroy(fun);
    136        
    137         nic_unbind_and_destroy(dev);
    138         return rc;
    139115}
    140116
     
    142118
    143119static driver_ops_t lo_driver_ops = {
    144         .dev_add = lo_dev_add,
     120        .add_device = lo_add_device,
    145121};
    146122
Note: See TracChangeset for help on using the changeset viewer.