Changeset 0c2d9bb in mainline for uspace/drv/bus/isa/isa.c


Ignore:
Timestamp:
2013-12-25T22:54:29Z (10 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b51cf2c
Parents:
f7a33de (diff), ac36aed (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

File:
1 edited

Legend:

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

    rf7a33de r0c2d9bb  
    6565#include <ddf/log.h>
    6666#include <ops/hw_res.h>
     67#include <ops/pio_window.h>
    6768
    6869#include <device/hw_res.h>
     70#include <device/pio_window.h>
    6971
    7072#include "i8237.h"
     
    7981        ddf_dev_t *dev;
    8082        ddf_fun_t *fctl;
     83        pio_window_t pio_win;
    8184        list_t functions;
    8285} isa_bus_t;
     
    102105}
    103106
    104 static hw_resource_list_t *isa_get_fun_resources(ddf_fun_t *fnode)
    105 {
    106         isa_fun_t *isa = isa_fun(fnode);
    107         assert(isa);
    108 
    109         return &isa->hw_resources;
     107static hw_resource_list_t *isa_fun_get_resources(ddf_fun_t *fnode)
     108{
     109        isa_fun_t *fun = isa_fun(fnode);
     110        assert(fun);
     111
     112        return &fun->hw_resources;
    110113}
    111114
     
    114117        /* This is an old ugly way, copied from pci driver */
    115118        assert(fnode);
    116         isa_fun_t *isa = isa_fun(fnode);
    117         assert(isa);
     119        isa_fun_t *fun = isa_fun(fnode);
     120        assert(fun);
    118121
    119122        sysarg_t apic;
     
    131134                return false;
    132135
    133         const hw_resource_list_t *res = &isa->hw_resources;
     136        const hw_resource_list_t *res = &fun->hw_resources;
    134137        assert(res);
    135138        for (size_t i = 0; i < res->count; ++i) {
     
    157160{
    158161        assert(fnode);
    159         isa_fun_t *isa = isa_fun(fnode);
    160         assert(isa);
    161         const hw_resource_list_t *res = &isa->hw_resources;
     162        isa_fun_t *fun = isa_fun(fnode);
     163        assert(fun);
     164        const hw_resource_list_t *res = &fun->hw_resources;
    162165        assert(res);
    163166
     
    180183        assert(size);
    181184        assert(fnode);
    182         isa_fun_t *isa = isa_fun(fnode);
    183         assert(isa);
    184         const hw_resource_list_t *res = &isa->hw_resources;
     185        isa_fun_t *fun = isa_fun(fnode);
     186        assert(fun);
     187        const hw_resource_list_t *res = &fun->hw_resources;
    185188        assert(res);
    186189
     
    199202
    200203static hw_res_ops_t isa_fun_hw_res_ops = {
    201         .get_resource_list = isa_get_fun_resources,
     204        .get_resource_list = isa_fun_get_resources,
    202205        .enable_interrupt = isa_fun_enable_interrupt,
    203206        .dma_channel_setup = isa_fun_setup_dma,
     
    205208};
    206209
     210static pio_window_t *isa_fun_get_pio_window(ddf_fun_t *fnode)
     211{
     212        ddf_dev_t *dev = ddf_fun_get_dev(fnode);
     213        isa_bus_t *isa = isa_bus(dev);
     214        assert(isa);
     215
     216        return &isa->pio_win;
     217}
     218
     219static pio_window_ops_t isa_fun_pio_window_ops = {
     220        .get_pio_window = isa_fun_get_pio_window
     221};
     222
    207223static ddf_dev_ops_t isa_fun_ops= {
    208224        .interfaces[HW_RES_DEV_IFACE] = &isa_fun_hw_res_ops,
     225        .interfaces[PIO_WINDOW_DEV_IFACE] = &isa_fun_pio_window_ops,
    209226};
    210227
     
    405422        hw_resource_t *resources = fun->hw_resources.resources;
    406423
     424        isa_bus_t *isa = isa_bus(ddf_fun_get_dev(fun->fnode));
     425
    407426        if (count < ISA_MAX_HW_RES) {
    408427                resources[count].type = IO_RANGE;
    409428                resources[count].res.io_range.address = addr;
     429                resources[count].res.io_range.address += isa->pio_win.io.base;
    410430                resources[count].res.io_range.size = len;
     431                resources[count].res.io_range.relative = false;
    411432                resources[count].res.io_range.endianness = LITTLE_ENDIAN;
    412433
     
    604625static int isa_dev_add(ddf_dev_t *dev)
    605626{
     627        async_sess_t *sess;
     628        int rc;
     629
    606630        ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d",
    607631            (int) ddf_dev_get_handle(dev));
     
    614638        isa->dev = dev;
    615639        list_initialize(&isa->functions);
     640
     641        sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
     642        if (sess == NULL) {
     643                ddf_msg(LVL_ERROR, "isa_dev_add failed to connect to the "
     644                    "parent driver.");
     645                return ENOENT;
     646        }
     647
     648        rc = pio_window_get(sess, &isa->pio_win);
     649        if (rc != EOK) {
     650                ddf_msg(LVL_ERROR, "isa_dev_add failed to get PIO window "
     651                    "for the device.");
     652                return rc;
     653        }       
    616654
    617655        /* Make the bus device more visible. Does not do anything. */
Note: See TracChangeset for help on using the changeset viewer.