diff options
author | Daniel Mrzyglod <daniel.t.mrzyglod@intel.com> | 2019-08-29 15:10:36 +0200 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-08-29 17:05:01 +0100 |
commit | 6e3af15a9e9dcd6159a74e5e66aec3e1c1347d51 (patch) | |
tree | fd3213f2b580ff428a5c124b439914911cc4d8af /lib/intel_io.h | |
parent | 6a3f886bfe62c9549faab76815e2826ae6687f3a (diff) |
lib/intel_mmio: add funtions for read/write register funtions
This patch is first move to extend functionality of intel_mmio library.
There was limitation for 1 device, adding pointer for IO functions to
mmaped area gives us possibility to use those IO functions for other mmaped
devices.
v12: change macros for generating inlines
v11: fix for previous comments
v10: add macros
v9: tried to fix castings
v8: remove unnecessary castings
v4: reword commitmsg, spelling errors
Cc: Antonio Argenziano <antonio.argenziano@intel.com>
Cc: Daniele Spurio Ceraolo <daniele.ceraolospurio@intel.com>
Cc: Katarzyna Dec <katarzyna.dec@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Zbigniew KempczyĆski <zbigniew.kempczynski@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Mrzyglod <daniel.t.mrzyglod@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'lib/intel_io.h')
-rw-r--r-- | lib/intel_io.h | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/lib/intel_io.h b/lib/intel_io.h index 6014c485..49ab08ac 100644 --- a/lib/intel_io.h +++ b/lib/intel_io.h @@ -42,12 +42,48 @@ uint32_t intel_register_read(uint32_t reg); void intel_register_write(uint32_t reg, uint32_t val); int intel_register_access_needs_fakewake(void); -uint32_t INREG(uint32_t reg); -uint16_t INREG16(uint32_t reg); -uint8_t INREG8(uint32_t reg); -void OUTREG(uint32_t reg, uint32_t val); -void OUTREG16(uint32_t reg, uint16_t val); -void OUTREG8(uint32_t reg, uint8_t val); +/* mmio register access functions that use igt_global_mmio */ + +#define __ioread(x__) \ +static inline uint##x__##_t ioread##x__(void *mmio, uint32_t reg) \ +{\ + return *(volatile uint##x__##_t *)(mmio + reg);\ +} +__ioread(32) +__ioread(16) +__ioread(8) +#undef __ioread + +#define __iowrite(x__) \ +static inline void iowrite##x__(void *mmio, uint32_t reg, uint##x__##_t val) \ +{\ + *(volatile uint##x__##_t *)(mmio + reg) = val; \ +} +__iowrite(32) +__iowrite(16) +__iowrite(8) +#undef __iowrite + +#define __INREG(x__,s__) \ +static inline uint##x__##_t INREG##s__(uint32_t reg) \ +{\ + return ioread##x__(igt_global_mmio, reg); \ +} + +#define __OUTREG(x__,s__) \ +static inline void OUTREG##s__(uint32_t reg, uint##x__##_t val) \ +{\ + iowrite##x__(igt_global_mmio, reg, val); \ +} +__INREG(32,) +__INREG(16,16) +__INREG(8,8) + +__OUTREG(32,) +__OUTREG(16,16) +__OUTREG(8,8) +#undef __INREG +#undef __OUTREG /* sideband access functions from intel_iosf.c */ uint32_t intel_dpio_reg_read(uint32_t reg, int phy); |