diff options
author | Suren A. Chilingaryan <csa@suren.me> | 2015-09-24 04:28:45 +0200 |
---|---|---|
committer | Suren A. Chilingaryan <csa@suren.me> | 2015-09-24 04:28:45 +0200 |
commit | 08a01723af9cd52c078d5ca6c38c34d375b39fa0 (patch) | |
tree | 6eadea9c67f4bb56a9e4ee09f4982efaf61deece /pcilib/pci.h | |
parent | 924adedb2928f5657c6668f606dbb3294b3c45da (diff) | |
parent | ae7f83a7948d8c3760f8019899a45e6ec90c2c6a (diff) | |
download | pcitool-08a01723af9cd52c078d5ca6c38c34d375b39fa0.tar.gz pcitool-08a01723af9cd52c078d5ca6c38c34d375b39fa0.tar.bz2 pcitool-08a01723af9cd52c078d5ca6c38c34d375b39fa0.tar.xz pcitool-08a01723af9cd52c078d5ca6c38c34d375b39fa0.zip |
Finalyze XML support and provide initial support for views (only descriptions so far)
Diffstat (limited to 'pcilib/pci.h')
-rw-r--r-- | pcilib/pci.h | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/pcilib/pci.h b/pcilib/pci.h index 00528e1..ab80101 100644 --- a/pcilib/pci.h +++ b/pcilib/pci.h @@ -8,11 +8,15 @@ #define PCILIB_DMA_SKIP_TIMEOUT 1000000 /**< us */ #define PCILIB_MAX_BARS 6 /**< this is defined by PCI specification */ #define PCILIB_DEFAULT_REGISTER_SPACE 1024 /**< number of registers to allocate on init */ +#define PCILIB_DEFAULT_VIEW_SPACE 128 /**< number of views to allocate on init */ +#define PCILIB_DEFAULT_UNIT_SPACE 128 /**< number of units to allocate on init */ #define PCILIB_MAX_REGISTER_BANKS 32 /**< maximum number of register banks to allocate space for */ #define PCILIB_MAX_REGISTER_RANGES 32 /**< maximum number of register ranges to allocate space for */ #define PCILIB_MAX_REGISTER_PROTOCOLS 32 /**< maximum number of register protocols to support */ #define PCILIB_MAX_DMA_ENGINES 32 /**< maximum number of supported DMA engines */ +#include <uthash.h> + #include "linux-3.10.h" #include "driver/pciDriver.h" @@ -26,6 +30,7 @@ #include "export.h" #include "locking.h" #include "xml.h" +#include "view.h" typedef struct { uint8_t max_link_speed, link_speed; @@ -33,6 +38,26 @@ typedef struct { uint8_t max_payload, payload; } pcilib_pcie_link_info_t; +struct pcilib_view_context_s { + UT_hash_handle hh; + pcilib_view_t view; + pcilib_view_api_description_t *api; + pcilib_view_description_t desc; /**< We will allocate more memory and store actual description instance here, so it should be the last member */ +}; + +struct pcilib_unit_context_s { + UT_hash_handle hh; + pcilib_unit_t unit; + pcilib_unit_description_t desc; +}; + +typedef struct { + pcilib_register_bank_t bank; /**< Reference to bank containing the register */ + pcilib_register_value_t min, max; /**< Minimum & maximum allowed values */ + pcilib_xml_node_t *xml; /**< Additional XML properties */ + pcilib_view_reference_t *views; /**< For non-static list of views, this vairables holds a copy of a NULL-terminated list from model (if present, memory should be de-allocated) */ +} pcilib_register_context_t; + struct pcilib_s { int handle; /**< file handle of device */ @@ -62,7 +87,6 @@ struct pcilib_s { size_t num_banks, num_protocols, num_ranges; /**< Number of registered banks, protocols, and register ranges */ size_t num_engines; /**< Number of configured DMA engines */ size_t dyn_banks; /**< Number of configured dynamic banks */ - pcilib_register_description_t *registers; /**< List of currently defined registers (from all sources) */ pcilib_register_bank_description_t banks[PCILIB_MAX_REGISTER_BANKS + 1]; /**< List of currently defined register banks (from all sources) */ pcilib_register_range_t ranges[PCILIB_MAX_REGISTER_RANGES + 1]; /**< List of currently defined register ranges (from all sources) */ @@ -75,6 +99,11 @@ struct pcilib_s { pcilib_dma_context_t *dma_ctx; /**< DMA context */ pcilib_context_t *event_ctx; /**< Implmentation context */ + size_t num_views, alloc_views; /**< Number of configured and allocated views*/ + size_t num_units, alloc_units; /**< Number of configured and allocated units*/ + pcilib_view_description_t **views; /**< list of currently defined views */ + pcilib_unit_description_t *units; /**< list of currently defined units */ + pcilib_lock_t *dma_rlock[PCILIB_MAX_DMA_ENGINES]; /**< Per-engine locks to serialize streaming and read operations */ pcilib_lock_t *dma_wlock[PCILIB_MAX_DMA_ENGINES]; /**< Per-engine locks to serialize write operations */ |