Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/isa/isa.c

    re882e3a r3e6a98c5  
    4242#include <stdio.h>
    4343#include <errno.h>
    44 #include <bool.h>
     44#include <stdbool.h>
    4545#include <fibril_synch.h>
    4646#include <stdlib.h>
     
    7373#define CHILD_FUN_CONF_PATH "/drv/isa/isa.dev"
    7474
    75 /** Obtain soft-state from device node */
    76 #define ISA_BUS(dev) ((isa_bus_t *) ((dev)->driver_data))
    77 
    78 /** Obtain soft-state from function node */
    79 #define ISA_FUN(fun) ((isa_fun_t *) ((fun)->driver_data))
    80 
    8175#define ISA_MAX_HW_RES 5
    8276
     
    9589} isa_fun_t;
    9690
     91/** Obtain soft-state from device node */
     92static isa_bus_t *isa_bus(ddf_dev_t *dev)
     93{
     94        return ddf_dev_data_get(dev);
     95}
     96
     97/** Obtain soft-state from function node */
     98static isa_fun_t *isa_fun(ddf_fun_t *fun)
     99{
     100        return ddf_fun_data_get(fun);
     101}
     102
    97103static hw_resource_list_t *isa_get_fun_resources(ddf_fun_t *fnode)
    98104{
    99         isa_fun_t *fun = ISA_FUN(fnode);
     105        isa_fun_t *fun = isa_fun(fnode);
    100106        assert(fun != NULL);
    101107
     
    107113        /* This is an old ugly way, copied from pci driver */
    108114        assert(fnode);
    109         isa_fun_t *isa_fun = fnode->driver_data;
     115        isa_fun_t *fun = isa_fun(fnode);
    110116
    111117        sysarg_t apic;
     
    123129                return false;
    124130
    125         assert(isa_fun);
    126         const hw_resource_list_t *res = &isa_fun->hw_resources;
     131        const hw_resource_list_t *res = &fun->hw_resources;
    127132        assert(res);
    128133        for (size_t i = 0; i < res->count; ++i) {
     
    150155{
    151156        assert(fnode);
    152         isa_fun_t *isa_fun = fnode->driver_data;
    153         const hw_resource_list_t *res = &isa_fun->hw_resources;
     157        isa_fun_t *fun = isa_fun(fnode);
     158        const hw_resource_list_t *res = &fun->hw_resources;
    154159        assert(res);
    155160       
     
    201206
    202207        isa_fun_t *fun = ddf_fun_data_alloc(fnode, sizeof(isa_fun_t));
    203         if (fun == NULL)
     208        if (fun == NULL) {
     209                ddf_fun_destroy(fnode);
    204210                return NULL;
     211        }
    205212
    206213        fibril_mutex_initialize(&fun->mutex);
     
    337344
    338345                ddf_msg(LVL_NOTE, "Added irq 0x%x to function %s", irq,
    339                     fun->fnode->name);
     346                    ddf_fun_get_name(fun->fnode));
    340347        }
    341348}
     
    353360                        fun->hw_resources.count++;
    354361                        ddf_msg(LVL_NOTE, "Added dma 0x%x to function %s", dma,
    355                             fun->fnode->name);
     362                            ddf_fun_get_name(fun->fnode));
    356363                       
    357364                        return;
     
    364371                        fun->hw_resources.count++;
    365372                        ddf_msg(LVL_NOTE, "Added dma 0x%x to function %s", dma,
    366                             fun->fnode->name);
     373                            ddf_fun_get_name(fun->fnode));
    367374                       
    368375                        return;
     
    370377               
    371378                ddf_msg(LVL_WARN, "Skipped dma 0x%x for function %s", dma,
    372                     fun->fnode->name);
     379                    ddf_fun_get_name(fun->fnode));
    373380        }
    374381}
     
    389396                ddf_msg(LVL_NOTE, "Added io range (addr=0x%x, size=0x%x) to "
    390397                    "function %s", (unsigned int) addr, (unsigned int) len,
    391                     fun->fnode->name);
     398                    ddf_fun_get_name(fun->fnode));
    392399        }
    393400}
     
    461468        if (val == end) {
    462469                ddf_msg(LVL_ERROR, "Cannot read match score for function "
    463                     "%s.", fun->fnode->name);
     470                    "%s.", ddf_fun_get_name(fun->fnode));
    464471                return;
    465472        }
     
    469476        if (id == NULL) {
    470477                ddf_msg(LVL_ERROR, "Cannot read match ID for function %s.",
    471                     fun->fnode->name);
     478                    ddf_fun_get_name(fun->fnode));
    472479                return;
    473480        }
    474481
    475482        ddf_msg(LVL_DEBUG, "Adding match id '%s' with score %d to "
    476             "function %s", id, score, fun->fnode->name);
     483            "function %s", id, score, ddf_fun_get_name(fun->fnode));
    477484
    478485        rc = ddf_fun_add_match_id(fun->fnode, id, score);
     
    552559
    553560        isa_fun_t *fun = isa_fun_create(isa, fun_name);
     561        free(fun_name);
    554562        if (fun == NULL) {
    555                 free(fun_name);
    556563                return NULL;
    557564        }
     
    577584
    578585        /* Set device operations to the device. */
    579         fun->fnode->ops = &isa_fun_ops;
    580 
    581         ddf_msg(LVL_DEBUG, "Binding function %s.", fun->fnode->name);
     586        ddf_fun_set_ops(fun->fnode, &isa_fun_ops);
     587
     588        ddf_msg(LVL_DEBUG, "Binding function %s.", ddf_fun_get_name(fun->fnode));
    582589
    583590        /* XXX Handle error */
     
    612619
    613620        ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d",
    614             (int) dev->handle);
     621            (int) ddf_dev_get_handle(dev));
    615622
    616623        isa = ddf_dev_data_alloc(dev, sizeof(isa_bus_t));
     
    650657static int isa_dev_remove(ddf_dev_t *dev)
    651658{
    652         isa_bus_t *isa = ISA_BUS(dev);
     659        isa_bus_t *isa = isa_bus(dev);
    653660        int rc;
    654661
     
    662669                if (rc != EOK) {
    663670                        fibril_mutex_unlock(&isa->mutex);
    664                         ddf_msg(LVL_ERROR, "Failed offlining %s", fun->fnode->name);
     671                        ddf_msg(LVL_ERROR, "Failed offlining %s", ddf_fun_get_name(fun->fnode));
    665672                        return rc;
    666673                }
     
    669676                if (rc != EOK) {
    670677                        fibril_mutex_unlock(&isa->mutex);
    671                         ddf_msg(LVL_ERROR, "Failed unbinding %s", fun->fnode->name);
     678                        ddf_msg(LVL_ERROR, "Failed unbinding %s", ddf_fun_get_name(fun->fnode));
    672679                        return rc;
    673680                }
     
    705712static void isa_init()
    706713{
    707         ddf_log_init(NAME, LVL_ERROR);
     714        ddf_log_init(NAME);
    708715        isa_fun_ops.interfaces[HW_RES_DEV_IFACE] = &isa_fun_hw_res_ops;
    709716}
Note: See TracChangeset for help on using the changeset viewer.