brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · f62e0c8 Raw
94 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2022 Intel Corporation4 */5 6#ifndef _XE_MAP_H_7#define _XE_MAP_H_8 9#include <linux/iosys-map.h>10 11#include <xe_device.h>12 13/**14 * DOC: Map layer15 *16 * All access to any memory shared with a device (both sysmem and vram) in the17 * XE driver should go through this layer (xe_map). This layer is built on top18 * of :ref:`driver-api/device-io:Generalizing Access to System and I/O Memory`19 * and with extra hooks into the XE driver that allows adding asserts to memory20 * accesses (e.g. for blocking runtime_pm D3Cold on Discrete Graphics).21 */22 23static inline void xe_map_memcpy_to(struct xe_device *xe, struct iosys_map *dst,24				    size_t dst_offset, const void *src,25				    size_t len)26{27	xe_device_assert_mem_access(xe);28	iosys_map_memcpy_to(dst, dst_offset, src, len);29}30 31static inline void xe_map_memcpy_from(struct xe_device *xe, void *dst,32				      const struct iosys_map *src,33				      size_t src_offset, size_t len)34{35	xe_device_assert_mem_access(xe);36	iosys_map_memcpy_from(dst, src, src_offset, len);37}38 39static inline void xe_map_memset(struct xe_device *xe,40				 struct iosys_map *dst, size_t offset,41				 int value, size_t len)42{43	xe_device_assert_mem_access(xe);44	iosys_map_memset(dst, offset, value, len);45}46 47/* FIXME: We likely should kill these two functions sooner or later */48static inline u32 xe_map_read32(struct xe_device *xe, struct iosys_map *map)49{50	xe_device_assert_mem_access(xe);51 52	if (map->is_iomem)53		return readl(map->vaddr_iomem);54	else55		return READ_ONCE(*(u32 *)map->vaddr);56}57 58static inline void xe_map_write32(struct xe_device *xe, struct iosys_map *map,59				  u32 val)60{61	xe_device_assert_mem_access(xe);62 63	if (map->is_iomem)64		writel(val, map->vaddr_iomem);65	else66		*(u32 *)map->vaddr = val;67}68 69#define xe_map_rd(xe__, map__, offset__, type__) ({			\70	struct xe_device *__xe = xe__;					\71	xe_device_assert_mem_access(__xe);				\72	iosys_map_rd(map__, offset__, type__);				\73})74 75#define xe_map_wr(xe__, map__, offset__, type__, val__) ({		\76	struct xe_device *__xe = xe__;					\77	xe_device_assert_mem_access(__xe);				\78	iosys_map_wr(map__, offset__, type__, val__);			\79})80 81#define xe_map_rd_field(xe__, map__, struct_offset__, struct_type__, field__) ({	\82	struct xe_device *__xe = xe__;					\83	xe_device_assert_mem_access(__xe);				\84	iosys_map_rd_field(map__, struct_offset__, struct_type__, field__);		\85})86 87#define xe_map_wr_field(xe__, map__, struct_offset__, struct_type__, field__, val__) ({	\88	struct xe_device *__xe = xe__;					\89	xe_device_assert_mem_access(__xe);				\90	iosys_map_wr_field(map__, struct_offset__, struct_type__, field__, val__);	\91})92 93#endif94