Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/nic/src/nic_driver.c

    r56fd7cf r77ad86c  
    4747#include <sysinfo.h>
    4848#include <as.h>
     49#include <devman.h>
    4950#include <ddf/interrupt.h>
    5051#include <ops/nic.h>
     
    249250{
    250251        ddf_dev_t *dev = nic_data->dev;
    251         async_sess_t *parent_sess;
    252252       
    253253        /* Connect to the parent's driver. */
    254         parent_sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
    255         if (parent_sess == NULL)
     254        dev->parent_sess = devman_parent_device_connect(EXCHANGE_SERIALIZE,
     255                dev->handle, IPC_FLAG_BLOCKING);
     256        if (dev->parent_sess == NULL)
    256257                return EPARTY;
    257258       
    258         return hw_res_get_list_parsed(parent_sess, resources, 0);
     259        return hw_res_get_list_parsed(nic_data->dev->parent_sess, resources, 0);
    259260}
    260261
     
    649650 *
    650651 */
    651 static nic_t *nic_create(ddf_dev_t *dev)
    652 {
    653         nic_t *nic_data = ddf_dev_data_alloc(dev, sizeof(nic_t));
     652static nic_t *nic_create(void)
     653{
     654        nic_t *nic_data = malloc(sizeof(nic_t));
    654655        if (nic_data == NULL)
    655656                return NULL;
    656657       
    657658        /* Force zero to all uninitialized fields (e.g. added in future) */
     659        bzero(nic_data, sizeof(nic_t));
    658660        if (nic_rxc_init(&nic_data->rx_control) != EOK) {
     661                free(nic_data);
    659662                return NULL;
    660663        }
    661664       
    662665        if (nic_wol_virtues_init(&nic_data->wol_virtues) != EOK) {
     666                free(nic_data);
    663667                return NULL;
    664668        }
     
    701705nic_t *nic_create_and_bind(ddf_dev_t *device)
    702706{
    703         nic_t *nic_data = nic_create(device);
     707        assert(device);
     708        assert(!device->driver_data);
     709       
     710        nic_t *nic_data = nic_create();
    704711        if (!nic_data)
    705712                return NULL;
    706713       
    707714        nic_data->dev = device;
     715        device->driver_data = nic_data;
    708716       
    709717        return nic_data;
     
    716724 * @param data
    717725 */
    718 static void nic_destroy(nic_t *nic_data)
    719 {
     726static void nic_destroy(nic_t *nic_data) {
     727        if (nic_data->client_session != NULL) {
     728                async_hangup(nic_data->client_session);
     729        }
     730
    720731        free(nic_data->specific);
     732        free(nic_data);
    721733}
    722734
     
    728740 * @param device The NIC device structure
    729741 */
    730 void nic_unbind_and_destroy(ddf_dev_t *device)
    731 {
    732         nic_destroy(nic_get_from_ddf_dev(device));
     742void nic_unbind_and_destroy(ddf_dev_t *device){
     743        if (!device)
     744                return;
     745        if (!device->driver_data)
     746                return;
     747
     748        nic_destroy((nic_t *) device->driver_data);
     749        device->driver_data = NULL;
    733750        return;
    734751}
     
    966983nic_t *nic_get_from_ddf_dev(ddf_dev_t *dev)
    967984{
    968         return (nic_t *) ddf_dev_data_get(dev);
    969 }
     985        return (nic_t *) dev->driver_data;
     986};
    970987
    971988/**
     
    975992nic_t *nic_get_from_ddf_fun(ddf_fun_t *fun)
    976993{
    977         return (nic_t *) ddf_fun_data_get(fun);
    978 }
     994        return (nic_t *) fun->driver_data;
     995};
    979996
    980997/**
Note: See TracChangeset for help on using the changeset viewer.