Changes in uspace/drv/nic/lo/lo.c [5cc9eba:6d8455d] in mainline


Ignore:
File:
1 edited

Legend:

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

    r5cc9eba r6d8455d  
    4242#include <async.h>
    4343#include <nic.h>
     44#include <packet_client.h>
    4445
    4546#define NAME  "lo"
     
    6061static void lo_send_frame(nic_t *nic_data, void *data, size_t size)
    6162{
     63        packet_t *packet;
     64        int rc;
     65
     66        packet = nic_alloc_packet(nic_data, size);
     67        if (packet == NULL)
     68                return;
     69
     70        rc = packet_copy_data(packet, data, size);
     71        if (rc != EOK)
     72                return;
     73
    6274        nic_report_send_ok(nic_data, 1, size);
    63         nic_received_noneth_frame(nic_data, data, size);
     75        nic_received_noneth_packet(nic_data, packet);
    6476}
    6577
     
    8092static int lo_dev_add(ddf_dev_t *dev)
    8193{
    82         ddf_fun_t *fun = NULL;
    83         bool bound = false;
    84        
    85         nic_t *nic = nic_create_and_bind(dev);
    86         if (nic == NULL) {
     94        nic_t *nic_data = nic_create_and_bind(dev);
     95        if (nic_data == NULL) {
    8796                printf("%s: Failed to initialize\n", NAME);
    8897                return ENOMEM;
    8998        }
    9099       
    91         dev->driver_data = nic;
    92         nic_set_send_frame_handler(nic, lo_send_frame);
     100        dev->driver_data = nic_data;
     101        nic_set_send_frame_handler(nic_data, lo_send_frame);
    93102       
    94         int rc = nic_connect_to_services(nic);
     103        int rc = nic_connect_to_services(nic_data);
    95104        if (rc != EOK) {
    96105                printf("%s: Failed to connect to services\n", NAME);
    97                 goto error;
     106                nic_unbind_and_destroy(dev);
     107                return rc;
    98108        }
    99109       
    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;
     110        rc = nic_register_as_ddf_fun(nic_data, &lo_dev_ops);
     111        if (rc != EOK) {
     112                printf("%s: Failed to register as DDF function\n", NAME);
     113                nic_unbind_and_destroy(dev);
     114                return rc;
    105115        }
    106         nic_set_ddf_fun(nic, fun);
    107         fun->ops = &lo_dev_ops;
    108         fun->driver_data = nic;
    109116       
    110         rc = nic_report_address(nic, &lo_addr);
     117        rc = nic_report_address(nic_data, &lo_addr);
    111118        if (rc != EOK) {
    112119                printf("%s: Failed to setup loopback address\n", NAME);
    113                 goto error;
     120                nic_unbind_and_destroy(dev);
     121                return rc;
    114122        }
    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;
    126123       
    127124        printf("%s: Adding loopback device '%s'\n", NAME, dev->name);
    128125        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;
    139126}
    140127
Note: See TracChangeset for help on using the changeset viewer.