Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 5759975a in mainline


Ignore:
Timestamp:
2013-09-11T17:55:18Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master
Children:
f18d01b6
Parents:
4c9b28a (diff), 26bc0fd1 (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 PIO_WINDOW_DEV_IFACE support.

Location:
uspace
Files:
5 added
9 edited

Legend:

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

    r4c9b28a r5759975a  
    6767
    6868#include <device/hw_res.h>
     69#include <device/pio_window.h>
    6970
    7071#include "i8237.h"
     
    7980        ddf_dev_t *dev;
    8081        ddf_fun_t *fctl;
     82        pio_window_t pio_win;
    8183        list_t functions;
    8284} isa_bus_t;
     
    405407        hw_resource_t *resources = fun->hw_resources.resources;
    406408
     409        isa_bus_t *isa = isa_bus(ddf_fun_get_dev(fun->fnode));
     410
    407411        if (count < ISA_MAX_HW_RES) {
    408412                resources[count].type = IO_RANGE;
    409413                resources[count].res.io_range.address = addr;
     414                resources[count].res.io_range.address += isa->pio_win.io.base;
    410415                resources[count].res.io_range.size = len;
    411416                resources[count].res.io_range.endianness = LITTLE_ENDIAN;
     
    604609static int isa_dev_add(ddf_dev_t *dev)
    605610{
     611        async_sess_t *sess;
     612        int rc;
     613
    606614        ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d",
    607615            (int) ddf_dev_get_handle(dev));
     
    614622        isa->dev = dev;
    615623        list_initialize(&isa->functions);
     624
     625        sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE);
     626        if (sess == NULL) {
     627                ddf_msg(LVL_ERROR, "isa_dev_add failed to connect to the "
     628                    "parent driver.");
     629                return ENOENT;
     630        }
     631
     632        rc = pio_window_get(sess, &isa->pio_win);
     633        if (rc != EOK) {
     634                ddf_msg(LVL_ERROR, "isa_dev_add failed to get PIO window "
     635                    "for the device.");
     636                return rc;
     637        }       
    616638
    617639        /* Make the bus device more visible. Does not do anything. */
  • uspace/drv/bus/pci/pciintel/pci.c

    r4c9b28a r5759975a  
    5757#include <ops/hw_res.h>
    5858#include <device/hw_res.h>
     59#include <ops/pio_window.h>
     60#include <device/pio_window.h>
    5961#include <ddi.h>
    6062#include <pci_dev_iface.h>
     
    141143}
    142144
     145static pio_window_t *pciintel_get_pio_window(ddf_fun_t *fnode)
     146{
     147        pci_fun_t *fun = pci_fun(fnode);
     148       
     149        if (fun == NULL)
     150                return NULL;
     151        return &fun->pio_window;
     152}
     153
     154
    143155static int pci_config_space_write_32(ddf_fun_t *fun, uint32_t address,
    144156    uint32_t data)
     
    198210        .get_resource_list = &pciintel_get_resources,
    199211        .enable_interrupt = &pciintel_enable_interrupt,
     212};
     213
     214static pio_window_ops_t pciintel_pio_window_ops = {
     215        .get_pio_window = &pciintel_get_pio_window
    200216};
    201217
     
    211227static ddf_dev_ops_t pci_fun_ops = {
    212228        .interfaces[HW_RES_DEV_IFACE] = &pciintel_hw_res_ops,
     229        .interfaces[PIO_WINDOW_DEV_IFACE] = &pciintel_pio_window_ops,
    213230        .interfaces[PCI_DEV_IFACE] = &pci_dev_ops
    214231};
     
    617634                        pci_read_bars(fun);
    618635                        pci_read_interrupt(fun);
     636
     637                        /* Propagate the PIO window to the function. */
     638                        fun->pio_window = bus->pio_win;
    619639                       
    620640                        ddf_fun_set_ops(fun->fnode, &pci_fun_ops);
     
    647667static int pci_dev_add(ddf_dev_t *dnode)
    648668{
     669        hw_resource_list_t hw_resources;
    649670        pci_bus_t *bus = NULL;
    650671        ddf_fun_t *ctl = NULL;
     
    672693                goto fail;
    673694        }
    674        
    675         hw_resource_list_t hw_resources;
     695
     696        rc = pio_window_get(sess, &bus->pio_win);
     697        if (rc != EOK) {
     698                ddf_msg(LVL_ERROR, "pci_dev_add failed to get PIO window "
     699                    "for the device.");
     700                goto fail;
     701        }
    676702       
    677703        rc = hw_res_get_resource_list(sess, &hw_resources);
     
    763789{
    764790        ddf_log_init(NAME);
    765         pci_fun_ops.interfaces[HW_RES_DEV_IFACE] = &pciintel_hw_res_ops;
    766         pci_fun_ops.interfaces[PCI_DEV_IFACE] = &pci_dev_ops;
    767791}
    768792
  • uspace/drv/bus/pci/pciintel/pci.h

    r4c9b28a r5759975a  
    4040#include "pci_regs.h"
    4141
    42 #define PCI_MAX_HW_RES 8
     42#define PCI_MAX_HW_RES 10
    4343
    4444typedef struct pciintel_bus {
     
    4949        void *conf_data_port;
    5050        void *conf_addr_port;
     51        pio_window_t pio_win;
    5152        fibril_mutex_t conf_mutex;
    5253} pci_bus_t;
     
    6869        hw_resource_list_t hw_resources;
    6970        hw_resource_t resources[PCI_MAX_HW_RES];
     71        pio_window_t pio_window;
    7072} pci_fun_t;
    7173
  • uspace/drv/infrastructure/rootmalta/rootmalta.c

    r4c9b28a r5759975a  
    5353#include <ops/hw_res.h>
    5454#include <device/hw_res.h>
     55#include <ops/pio_window.h>
     56#include <device/pio_window.h>
    5557#include <byteorder.h>
    5658
     
    6668#define GT_PCI_CMD_MBYTESWAP    0x1
    6769
     70#define GT_PCI_MEMBASE  UINT32_C(0x10000000)
     71#define GT_PCI_MEMSIZE  UINT32_C(0x08000000)
     72
     73#define GT_PCI_IOBASE   UINT32_C(0x18000000)
     74#define GT_PCI_IOSIZE   UINT32_C(0x00200000)
     75
    6876typedef struct rootmalta_fun {
    6977        hw_resource_list_t hw_resources;
     78        pio_window_t pio_window;
    7079} rootmalta_fun_t;
    7180
     
    107116                sizeof(pci_conf_regs) / sizeof(pci_conf_regs[0]),
    108117                pci_conf_regs
     118        },
     119        .pio_window = {
     120                .mem = {
     121                        .base = GT_PCI_MEMBASE,
     122                        .size = GT_PCI_MEMSIZE
     123                },
     124                .io = {
     125                        .base = GT_PCI_IOBASE,
     126                        .size = GT_PCI_IOSIZE
     127                }
    109128        }
    110129};
     
    129148       
    130149        return false;
     150}
     151
     152static pio_window_t *rootmalta_get_pio_window(ddf_fun_t *fnode)
     153{
     154        rootmalta_fun_t *fun = rootmalta_fun(fnode);
     155
     156        assert(fun != NULL);
     157        return &fun->pio_window;
    131158}
    132159
     
    134161        .get_resource_list = &rootmalta_get_resources,
    135162        .enable_interrupt = &rootmalta_enable_interrupt,
     163};
     164
     165static pio_window_ops_t fun_pio_window_ops = {
     166        .get_pio_window = &rootmalta_get_pio_window
    136167};
    137168
     
    228259        ddf_log_init(NAME);
    229260        rootmalta_fun_ops.interfaces[HW_RES_DEV_IFACE] = &fun_hw_res_ops;
     261        rootmalta_fun_ops.interfaces[PIO_WINDOW_DEV_IFACE] = &fun_pio_window_ops;
    230262}
    231263
  • uspace/drv/infrastructure/rootpc/rootpc.c

    r4c9b28a r5759975a  
    5151#include <ops/hw_res.h>
    5252#include <device/hw_res.h>
     53#include <ops/pio_window.h>
     54#include <device/pio_window.h>
    5355
    5456#define NAME "rootpc"
     
    5658typedef struct rootpc_fun {
    5759        hw_resource_list_t hw_resources;
     60        pio_window_t pio_window;
    5861} rootpc_fun_t;
    5962
     
    9396static rootpc_fun_t pci_data = {
    9497        .hw_resources = {
    95                 sizeof(pci_conf_regs)/sizeof(pci_conf_regs[0]),
     98                sizeof(pci_conf_regs) / sizeof(pci_conf_regs[0]),
    9699                pci_conf_regs
     100        },
     101        .pio_window = {
     102                .mem = {
     103                        .base = UINT32_C(0),
     104                        .size = UINT32_C(0xffffffff) /* practical maximum */
     105                },
     106                .io = {
     107                        .base = UINT32_C(0),
     108                        .size = UINT32_C(0x10000)
     109                }
    97110        }
    98111};
     
    117130       
    118131        return false;
     132}
     133
     134static pio_window_t *rootpc_get_pio_window(ddf_fun_t *fnode)
     135{
     136        rootpc_fun_t *fun = rootpc_fun(fnode);
     137       
     138        assert(fun != NULL);
     139        return &fun->pio_window;
    119140}
    120141
     
    122143        .get_resource_list = &rootpc_get_resources,
    123144        .enable_interrupt = &rootpc_enable_interrupt,
     145};
     146
     147static pio_window_ops_t fun_pio_window_ops = {
     148        .get_pio_window = &rootpc_get_pio_window
    124149};
    125150
     
    197222        ddf_log_init(NAME);
    198223        rootpc_fun_ops.interfaces[HW_RES_DEV_IFACE] = &fun_hw_res_ops;
     224        rootpc_fun_ops.interfaces[PIO_WINDOW_DEV_IFACE] = &fun_pio_window_ops;
    199225}
    200226
  • uspace/lib/c/Makefile

    r4c9b28a r5759975a  
    6969        generic/device/hw_res.c \
    7070        generic/device/hw_res_parsed.c \
     71        generic/device/pio_window.c \
    7172        generic/device/char_dev.c \
    7273        generic/device/clock_dev.c \
  • uspace/lib/c/include/ipc/dev_iface.h

    r4c9b28a r5759975a  
    3636typedef enum {
    3737        HW_RES_DEV_IFACE = 0,
     38        PIO_WINDOW_DEV_IFACE,
    3839
    3940        /** Character device interface */
  • uspace/lib/drv/Makefile

    r4c9b28a r5759975a  
    4141        generic/remote_audio_pcm.c \
    4242        generic/remote_hw_res.c \
     43        generic/remote_pio_window.c \
    4344        generic/remote_char_dev.c \
    4445        generic/remote_graph_dev.c \
  • uspace/lib/drv/generic/dev_iface.c

    r4c9b28a r5759975a  
    4040#include "dev_iface.h"
    4141#include "remote_hw_res.h"
     42#include "remote_pio_window.h"
    4243#include "remote_char_dev.h"
    4344#include "remote_clock_dev.h"
     
    5859                [AUDIO_PCM_BUFFER_IFACE] = &remote_audio_pcm_iface,
    5960                [HW_RES_DEV_IFACE] = &remote_hw_res_iface,
     61                [PIO_WINDOW_DEV_IFACE] = &remote_pio_window_iface,
    6062                [CHAR_DEV_IFACE] = &remote_char_dev_iface,
    6163                [GRAPH_DEV_IFACE] = &remote_graph_dev_iface,
Note: See TracChangeset for help on using the changeset viewer.