cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

intel_memory_region.h (3563B)


      1/* SPDX-License-Identifier: MIT */
      2/*
      3 * Copyright © 2019 Intel Corporation
      4 */
      5
      6#ifndef __INTEL_MEMORY_REGION_H__
      7#define __INTEL_MEMORY_REGION_H__
      8
      9#include <linux/ioport.h>
     10#include <linux/mutex.h>
     11#include <linux/io-mapping.h>
     12#include <drm/drm_mm.h>
     13#include <uapi/drm/i915_drm.h>
     14
     15struct drm_i915_private;
     16struct drm_i915_gem_object;
     17struct drm_printer;
     18struct intel_memory_region;
     19struct sg_table;
     20struct ttm_resource;
     21
     22enum intel_memory_type {
     23	INTEL_MEMORY_SYSTEM = I915_MEMORY_CLASS_SYSTEM,
     24	INTEL_MEMORY_LOCAL = I915_MEMORY_CLASS_DEVICE,
     25	INTEL_MEMORY_STOLEN_SYSTEM,
     26	INTEL_MEMORY_STOLEN_LOCAL,
     27	INTEL_MEMORY_MOCK,
     28};
     29
     30enum intel_region_id {
     31	INTEL_REGION_SMEM = 0,
     32	INTEL_REGION_LMEM_0,
     33	INTEL_REGION_LMEM_1,
     34	INTEL_REGION_LMEM_2,
     35	INTEL_REGION_LMEM_3,
     36	INTEL_REGION_STOLEN_SMEM,
     37	INTEL_REGION_STOLEN_LMEM,
     38	INTEL_REGION_UNKNOWN, /* Should be last */
     39};
     40
     41#define REGION_SMEM     BIT(INTEL_REGION_SMEM)
     42#define REGION_LMEM     BIT(INTEL_REGION_LMEM_0)
     43#define REGION_STOLEN_SMEM   BIT(INTEL_REGION_STOLEN_SMEM)
     44#define REGION_STOLEN_LMEM   BIT(INTEL_REGION_STOLEN_LMEM)
     45
     46#define I915_ALLOC_CONTIGUOUS     BIT(0)
     47
     48#define for_each_memory_region(mr, i915, id) \
     49	for (id = 0; id < ARRAY_SIZE((i915)->mm.regions); id++) \
     50		for_each_if((mr) = (i915)->mm.regions[id])
     51
     52struct intel_memory_region_ops {
     53	unsigned int flags;
     54
     55	int (*init)(struct intel_memory_region *mem);
     56	int (*release)(struct intel_memory_region *mem);
     57
     58	int (*init_object)(struct intel_memory_region *mem,
     59			   struct drm_i915_gem_object *obj,
     60			   resource_size_t offset,
     61			   resource_size_t size,
     62			   resource_size_t page_size,
     63			   unsigned int flags);
     64};
     65
     66struct intel_memory_region {
     67	struct drm_i915_private *i915;
     68
     69	const struct intel_memory_region_ops *ops;
     70
     71	struct io_mapping iomap;
     72	struct resource region;
     73
     74	resource_size_t io_start;
     75	resource_size_t io_size;
     76	resource_size_t min_page_size;
     77	resource_size_t total;
     78	resource_size_t avail;
     79
     80	u16 type;
     81	u16 instance;
     82	enum intel_region_id id;
     83	char name[16];
     84	bool private; /* not for userspace */
     85
     86	struct {
     87		struct mutex lock; /* Protects access to objects */
     88		struct list_head list;
     89	} objects;
     90
     91	bool is_range_manager;
     92
     93	void *region_private;
     94};
     95
     96struct intel_memory_region *
     97intel_memory_region_lookup(struct drm_i915_private *i915,
     98			   u16 class, u16 instance);
     99
    100struct intel_memory_region *
    101intel_memory_region_create(struct drm_i915_private *i915,
    102			   resource_size_t start,
    103			   resource_size_t size,
    104			   resource_size_t min_page_size,
    105			   resource_size_t io_start,
    106			   resource_size_t io_size,
    107			   u16 type,
    108			   u16 instance,
    109			   const struct intel_memory_region_ops *ops);
    110
    111void intel_memory_region_destroy(struct intel_memory_region *mem);
    112
    113int intel_memory_regions_hw_probe(struct drm_i915_private *i915);
    114void intel_memory_regions_driver_release(struct drm_i915_private *i915);
    115struct intel_memory_region *
    116intel_memory_region_by_type(struct drm_i915_private *i915,
    117			    enum intel_memory_type mem_type);
    118
    119__printf(2, 3) void
    120intel_memory_region_set_name(struct intel_memory_region *mem,
    121			     const char *fmt, ...);
    122
    123int intel_memory_region_reserve(struct intel_memory_region *mem,
    124				resource_size_t offset,
    125				resource_size_t size);
    126
    127void intel_memory_region_debug(struct intel_memory_region *mr,
    128			       struct drm_printer *printer);
    129
    130struct intel_memory_region *
    131i915_gem_ttm_system_setup(struct drm_i915_private *i915,
    132			  u16 type, u16 instance);
    133struct intel_memory_region *
    134i915_gem_shmem_setup(struct drm_i915_private *i915,
    135		     u16 type, u16 instance);
    136
    137#endif