Changeset 56fd7cf in mainline for uspace/lib/nic/src


Ignore:
Timestamp:
2012-08-17T11:37:03Z (13 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1d5a540
Parents:
be2a38ad
Message:

Make ddf_dev_t and ddf_fun_t opaque. This further tighthens the DDF interface.

Location:
uspace/lib/nic/src
Files:
2 edited

Legend:

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

    rbe2a38ad r56fd7cf  
    4747#include <sysinfo.h>
    4848#include <as.h>
    49 #include <devman.h>
    5049#include <ddf/interrupt.h>
    5150#include <ops/nic.h>
     
    250249{
    251250        ddf_dev_t *dev = nic_data->dev;
     251        async_sess_t *parent_sess;
    252252       
    253253        /* Connect to the parent's driver. */
    254         dev->parent_sess = devman_parent_device_connect(EXCHANGE_SERIALIZE,
    255                 dev->handle, IPC_FLAG_BLOCKING);
    256         if (dev->parent_sess == NULL)
     254        parent_sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
     255        if (parent_sess == NULL)
    257256                return EPARTY;
    258257       
    259         return hw_res_get_list_parsed(nic_data->dev->parent_sess, resources, 0);
     258        return hw_res_get_list_parsed(parent_sess, resources, 0);
    260259}
    261260
     
    650649 *
    651650 */
    652 static nic_t *nic_create(void)
    653 {
    654         nic_t *nic_data = malloc(sizeof(nic_t));
     651static nic_t *nic_create(ddf_dev_t *dev)
     652{
     653        nic_t *nic_data = ddf_dev_data_alloc(dev, sizeof(nic_t));
    655654        if (nic_data == NULL)
    656655                return NULL;
    657656       
    658657        /* Force zero to all uninitialized fields (e.g. added in future) */
    659         bzero(nic_data, sizeof(nic_t));
    660658        if (nic_rxc_init(&nic_data->rx_control) != EOK) {
    661                 free(nic_data);
    662659                return NULL;
    663660        }
    664661       
    665662        if (nic_wol_virtues_init(&nic_data->wol_virtues) != EOK) {
    666                 free(nic_data);
    667663                return NULL;
    668664        }
     
    705701nic_t *nic_create_and_bind(ddf_dev_t *device)
    706702{
    707         assert(device);
    708         assert(!device->driver_data);
    709        
    710         nic_t *nic_data = nic_create();
     703        nic_t *nic_data = nic_create(device);
    711704        if (!nic_data)
    712705                return NULL;
    713706       
    714707        nic_data->dev = device;
    715         device->driver_data = nic_data;
    716708       
    717709        return nic_data;
     
    724716 * @param data
    725717 */
    726 static void nic_destroy(nic_t *nic_data) {
    727         if (nic_data->client_session != NULL) {
    728                 async_hangup(nic_data->client_session);
    729         }
    730 
     718static void nic_destroy(nic_t *nic_data)
     719{
    731720        free(nic_data->specific);
    732         free(nic_data);
    733721}
    734722
     
    740728 * @param device The NIC device structure
    741729 */
    742 void 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;
     730void nic_unbind_and_destroy(ddf_dev_t *device)
     731{
     732        nic_destroy(nic_get_from_ddf_dev(device));
    750733        return;
    751734}
     
    983966nic_t *nic_get_from_ddf_dev(ddf_dev_t *dev)
    984967{
    985         return (nic_t *) dev->driver_data;
    986 };
     968        return (nic_t *) ddf_dev_data_get(dev);
     969}
    987970
    988971/**
     
    992975nic_t *nic_get_from_ddf_fun(ddf_fun_t *fun)
    993976{
    994         return (nic_t *) fun->driver_data;
    995 };
     977        return (nic_t *) ddf_fun_data_get(fun);
     978}
    996979
    997980/**
  • uspace/lib/nic/src/nic_impl.c

    rbe2a38ad r56fd7cf  
    5454int nic_get_state_impl(ddf_fun_t *fun, nic_device_state_t *state)
    5555{
    56         nic_t *nic_data = (nic_t *) fun->driver_data;
     56        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    5757        fibril_rwlock_read_lock(&nic_data->main_lock);
    5858        *state = nic_data->state;
     
    7878        }
    7979
    80         nic_t *nic_data = (nic_t *) fun->driver_data;
     80        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    8181
    8282        fibril_rwlock_write_lock(&nic_data->main_lock);
     
    170170int nic_send_frame_impl(ddf_fun_t *fun, void *data, size_t size)
    171171{
    172         nic_t *nic_data = (nic_t *) fun->driver_data;
     172        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    173173
    174174        fibril_rwlock_read_lock(&nic_data->main_lock);
     
    192192int nic_callback_create_impl(ddf_fun_t *fun)
    193193{
    194         nic_t *nic = (nic_t *) fun->driver_data;
     194        nic_t *nic = nic_get_from_ddf_fun(fun);
    195195        fibril_rwlock_write_lock(&nic->main_lock);
    196196       
     
    218218{
    219219        assert(address);
    220         nic_t *nic_data = (nic_t *) fun->driver_data;
     220        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    221221        fibril_rwlock_read_lock(&nic_data->main_lock);
    222222        memcpy(address, &nic_data->mac, sizeof (nic_address_t));
     
    236236int nic_get_stats_impl(ddf_fun_t *fun, nic_device_stats_t *stats)
    237237{
    238         nic_t *nic_data = (nic_t *) fun->driver_data;
     238        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    239239        assert (stats != NULL);
    240240        fibril_rwlock_read_lock(&nic_data->stats_lock);
     
    259259        size_t max_count, nic_address_t *addr_list, size_t *addr_count)
    260260{
    261         nic_t *nic_data = (nic_t *) fun->driver_data;
     261        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    262262        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    263263        nic_rxc_unicast_get_mode(&nic_data->rx_control, mode, max_count,
     
    291291        }
    292292
    293         nic_t *nic_data = (nic_t *) fun->driver_data;
     293        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    294294        fibril_rwlock_write_lock(&nic_data->rxc_lock);
    295295        int rc = ENOTSUP;
     
    326326        size_t max_count, nic_address_t *addr_list, size_t *addr_count)
    327327{
    328         nic_t *nic_data = (nic_t *) fun->driver_data;
     328        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    329329        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    330330        nic_rxc_multicast_get_mode(&nic_data->rx_control, mode, max_count,
     
    358358        }
    359359
    360         nic_t *nic_data = (nic_t *) fun->dev->driver_data;
     360        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    361361        fibril_rwlock_write_lock(&nic_data->rxc_lock);
    362362        int rc = ENOTSUP;
     
    382382int nic_broadcast_get_mode_impl(ddf_fun_t *fun, nic_broadcast_mode_t *mode)
    383383{
    384         nic_t *nic_data = (nic_t *) fun->driver_data;
     384        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    385385        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    386386        nic_rxc_broadcast_get_mode(&nic_data->rx_control, mode);
     
    402402int nic_broadcast_set_mode_impl(ddf_fun_t *fun, nic_broadcast_mode_t mode)
    403403{
    404         nic_t *nic_data = (nic_t *) fun->driver_data;
     404        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    405405        fibril_rwlock_write_lock(&nic_data->rxc_lock);
    406406        int rc = ENOTSUP;
     
    429429        size_t max_count, nic_address_t *addr_list, size_t *addr_count)
    430430{
    431         nic_t *nic_data = (nic_t *) fun->driver_data;
     431        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    432432        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    433433        nic_rxc_blocked_sources_get(&nic_data->rx_control,
     
    452452        const nic_address_t *addr_list, size_t addr_count)
    453453{
    454         nic_t *nic_data = (nic_t *) fun->driver_data;
     454        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    455455        fibril_rwlock_write_lock(&nic_data->rxc_lock);
    456456        if (nic_data->on_blocked_sources_change) {
     
    474474int nic_vlan_get_mask_impl(ddf_fun_t *fun, nic_vlan_mask_t *mask)
    475475{
    476         nic_t *nic_data = (nic_t *) fun->driver_data;
     476        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    477477        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    478478        int rc = nic_rxc_vlan_get_mask(&nic_data->rx_control, mask);
     
    492492int nic_vlan_set_mask_impl(ddf_fun_t *fun, const nic_vlan_mask_t *mask)
    493493{
    494         nic_t *nic_data = (nic_t *) fun->driver_data;
     494        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    495495        fibril_rwlock_write_lock(&nic_data->rxc_lock);
    496496        int rc = nic_rxc_vlan_set_mask(&nic_data->rx_control, mask);
     
    520520        const void *data, size_t length, nic_wv_id_t *new_id)
    521521{
    522         nic_t *nic_data = (nic_t *) fun->driver_data;
     522        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    523523        if (nic_data->on_wol_virtue_add == NULL
    524524                || nic_data->on_wol_virtue_remove == NULL) {
     
    594594int nic_wol_virtue_remove_impl(ddf_fun_t *fun, nic_wv_id_t id)
    595595{
    596         nic_t *nic_data = (nic_t *) fun->driver_data;
     596        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    597597        if (nic_data->on_wol_virtue_add == NULL
    598598                || nic_data->on_wol_virtue_remove == NULL) {
     
    631631        nic_wv_type_t *type, size_t max_length, void *data, size_t *length)
    632632{
    633         nic_t *nic_data = (nic_t *) fun->driver_data;
     633        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    634634        fibril_rwlock_read_lock(&nic_data->wv_lock);
    635635        const nic_wol_virtue_t *virtue =
     
    669669        size_t max_count, nic_wv_id_t *id_list, size_t *id_count)
    670670{
    671         nic_t *nic_data = (nic_t *) fun->driver_data;
     671        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    672672        fibril_rwlock_read_lock(&nic_data->wv_lock);
    673673        int rc = nic_wol_virtues_list(&nic_data->wol_virtues, type,
     
    689689int nic_wol_virtue_get_caps_impl(ddf_fun_t *fun, nic_wv_type_t type, int *count)
    690690{
    691         nic_t *nic_data = (nic_t *) fun->driver_data;
     691        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    692692        fibril_rwlock_read_lock(&nic_data->wv_lock);
    693693        *count = nic_data->wol_virtues.caps_max[type]
     
    712712        nic_poll_mode_t *mode, struct timeval *period)
    713713{
    714         nic_t *nic_data = (nic_t *) fun->driver_data;
     714        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    715715        fibril_rwlock_read_lock(&nic_data->main_lock);
    716716        *mode = nic_data->poll_mode;
     
    735735        nic_poll_mode_t mode, const struct timeval *period)
    736736{
    737         nic_t *nic_data = (nic_t *) fun->driver_data;
     737        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    738738        /* If the driver does not implement the poll mode change handler it cannot
    739739         * switch off interrupts and this is not supported. */
     
    783783 */
    784784int nic_poll_now_impl(ddf_fun_t *fun) {
    785         nic_t *nic_data = (nic_t *) fun->driver_data;
     785        nic_t *nic_data = nic_get_from_ddf_fun(fun);
    786786        fibril_rwlock_read_lock(&nic_data->main_lock);
    787787        if (nic_data->poll_mode != NIC_POLL_ON_DEMAND) {
Note: See TracChangeset for help on using the changeset viewer.