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

channv50.h (7610B)


      1/* SPDX-License-Identifier: MIT */
      2#ifndef __NV50_DISP_CHAN_H__
      3#define __NV50_DISP_CHAN_H__
      4#define nv50_disp_chan(p) container_of((p), struct nv50_disp_chan, object)
      5#include <core/object.h>
      6#include "nv50.h"
      7struct nv50_disp_root;
      8
      9struct nv50_disp_chan {
     10	const struct nv50_disp_chan_func *func;
     11	const struct nv50_disp_chan_mthd *mthd;
     12	struct nv50_disp *disp;
     13
     14	struct {
     15		int ctrl;
     16		int user;
     17	} chid;
     18	int head;
     19
     20	struct nvkm_object object;
     21
     22	struct nvkm_memory *memory;
     23	u64 push;
     24
     25	u32 suspend_put;
     26};
     27
     28struct nv50_disp_chan_func {
     29	int (*init)(struct nv50_disp_chan *);
     30	void (*fini)(struct nv50_disp_chan *);
     31	void (*intr)(struct nv50_disp_chan *, bool en);
     32	u64 (*user)(struct nv50_disp_chan *, u64 *size);
     33	int (*bind)(struct nv50_disp_chan *, struct nvkm_object *, u32 handle);
     34};
     35
     36int nv50_disp_chan_new_(const struct nv50_disp_chan_func *,
     37			const struct nv50_disp_chan_mthd *,
     38			struct nv50_disp *, int ctrl, int user, int head,
     39			const struct nvkm_oclass *, struct nvkm_object **);
     40int nv50_disp_dmac_new_(const struct nv50_disp_chan_func *,
     41			const struct nv50_disp_chan_mthd *,
     42			struct nv50_disp *, int chid, int head, u64 push,
     43			const struct nvkm_oclass *, struct nvkm_object **);
     44
     45void nv50_disp_chan_intr(struct nv50_disp_chan *, bool);
     46u64 nv50_disp_chan_user(struct nv50_disp_chan *, u64 *);
     47extern const struct nv50_disp_chan_func nv50_disp_pioc_func;
     48extern const struct nv50_disp_chan_func nv50_disp_dmac_func;
     49int nv50_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32);
     50extern const struct nv50_disp_chan_func nv50_disp_core_func;
     51
     52void gf119_disp_chan_intr(struct nv50_disp_chan *, bool);
     53extern const struct nv50_disp_chan_func gf119_disp_pioc_func;
     54extern const struct nv50_disp_chan_func gf119_disp_dmac_func;
     55void gf119_disp_dmac_fini(struct nv50_disp_chan *);
     56int gf119_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32);
     57extern const struct nv50_disp_chan_func gf119_disp_core_func;
     58void gf119_disp_core_fini(struct nv50_disp_chan *);
     59
     60extern const struct nv50_disp_chan_func gp102_disp_dmac_func;
     61
     62u64 gv100_disp_chan_user(struct nv50_disp_chan *, u64 *);
     63int gv100_disp_dmac_init(struct nv50_disp_chan *);
     64void gv100_disp_dmac_fini(struct nv50_disp_chan *);
     65int gv100_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32);
     66
     67int nv50_disp_curs_new_(const struct nv50_disp_chan_func *,
     68			struct nv50_disp *, int ctrl, int user,
     69			const struct nvkm_oclass *, void *argv, u32 argc,
     70			struct nvkm_object **);
     71int nv50_disp_oimm_new_(const struct nv50_disp_chan_func *,
     72			struct nv50_disp *, int ctrl, int user,
     73			const struct nvkm_oclass *, void *argv, u32 argc,
     74			struct nvkm_object **);
     75int nv50_disp_base_new_(const struct nv50_disp_chan_func *,
     76			const struct nv50_disp_chan_mthd *,
     77			struct nv50_disp *, int chid,
     78			const struct nvkm_oclass *, void *argv, u32 argc,
     79			struct nvkm_object **);
     80int nv50_disp_core_new_(const struct nv50_disp_chan_func *,
     81			const struct nv50_disp_chan_mthd *,
     82			struct nv50_disp *, int chid,
     83			const struct nvkm_oclass *oclass, void *argv, u32 argc,
     84			struct nvkm_object **);
     85int nv50_disp_ovly_new_(const struct nv50_disp_chan_func *,
     86			const struct nv50_disp_chan_mthd *,
     87			struct nv50_disp *, int chid,
     88			const struct nvkm_oclass *, void *argv, u32 argc,
     89			struct nvkm_object **);
     90
     91int nv50_disp_curs_new(const struct nvkm_oclass *, void *, u32,
     92		       struct nv50_disp *, struct nvkm_object **);
     93int nv50_disp_oimm_new(const struct nvkm_oclass *, void *, u32,
     94		       struct nv50_disp *, struct nvkm_object **);
     95int nv50_disp_base_new(const struct nvkm_oclass *, void *, u32,
     96		       struct nv50_disp *, struct nvkm_object **);
     97int nv50_disp_core_new(const struct nvkm_oclass *, void *, u32,
     98		       struct nv50_disp *, struct nvkm_object **);
     99int nv50_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
    100		       struct nv50_disp *, struct nvkm_object **);
    101
    102int g84_disp_base_new(const struct nvkm_oclass *, void *, u32,
    103		      struct nv50_disp *, struct nvkm_object **);
    104int g84_disp_core_new(const struct nvkm_oclass *, void *, u32,
    105		      struct nv50_disp *, struct nvkm_object **);
    106int g84_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
    107		      struct nv50_disp *, struct nvkm_object **);
    108
    109int g94_disp_core_new(const struct nvkm_oclass *, void *, u32,
    110		      struct nv50_disp *, struct nvkm_object **);
    111
    112int gt200_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
    113			struct nv50_disp *, struct nvkm_object **);
    114
    115int gf119_disp_curs_new(const struct nvkm_oclass *, void *, u32,
    116			struct nv50_disp *, struct nvkm_object **);
    117int gf119_disp_oimm_new(const struct nvkm_oclass *, void *, u32,
    118			struct nv50_disp *, struct nvkm_object **);
    119int gf119_disp_base_new(const struct nvkm_oclass *, void *, u32,
    120			struct nv50_disp *, struct nvkm_object **);
    121int gf119_disp_core_new(const struct nvkm_oclass *, void *, u32,
    122			struct nv50_disp *, struct nvkm_object **);
    123int gf119_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
    124			struct nv50_disp *, struct nvkm_object **);
    125
    126int gk104_disp_core_new(const struct nvkm_oclass *, void *, u32,
    127			struct nv50_disp *, struct nvkm_object **);
    128int gk104_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
    129			struct nv50_disp *, struct nvkm_object **);
    130
    131int gp102_disp_curs_new(const struct nvkm_oclass *, void *, u32,
    132			struct nv50_disp *, struct nvkm_object **);
    133int gp102_disp_oimm_new(const struct nvkm_oclass *, void *, u32,
    134			struct nv50_disp *, struct nvkm_object **);
    135int gp102_disp_base_new(const struct nvkm_oclass *, void *, u32,
    136			struct nv50_disp *, struct nvkm_object **);
    137int gp102_disp_core_new(const struct nvkm_oclass *, void *, u32,
    138			struct nv50_disp *, struct nvkm_object **);
    139int gp102_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
    140			struct nv50_disp *, struct nvkm_object **);
    141
    142int gv100_disp_curs_new(const struct nvkm_oclass *, void *, u32,
    143			struct nv50_disp *, struct nvkm_object **);
    144int gv100_disp_wimm_new(const struct nvkm_oclass *, void *, u32,
    145			struct nv50_disp *, struct nvkm_object **);
    146int gv100_disp_core_new(const struct nvkm_oclass *, void *, u32,
    147			struct nv50_disp *, struct nvkm_object **);
    148int gv100_disp_wndw_new(const struct nvkm_oclass *, void *, u32,
    149			struct nv50_disp *, struct nvkm_object **);
    150
    151struct nv50_disp_mthd_list {
    152	u32 mthd;
    153	u32 addr;
    154	struct {
    155		u32 mthd;
    156		u32 addr;
    157		const char *name;
    158	} data[];
    159};
    160
    161struct nv50_disp_chan_mthd {
    162	const char *name;
    163	u32 addr;
    164	s32 prev;
    165	struct {
    166		const char *name;
    167		int nr;
    168		const struct nv50_disp_mthd_list *mthd;
    169	} data[];
    170};
    171
    172void nv50_disp_chan_mthd(struct nv50_disp_chan *, int debug);
    173
    174extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_base;
    175extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_sor;
    176extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_pior;
    177extern const struct nv50_disp_mthd_list nv50_disp_base_mthd_image;
    178
    179extern const struct nv50_disp_chan_mthd g84_disp_core_mthd;
    180extern const struct nv50_disp_mthd_list g84_disp_core_mthd_dac;
    181extern const struct nv50_disp_mthd_list g84_disp_core_mthd_head;
    182
    183extern const struct nv50_disp_chan_mthd g94_disp_core_mthd;
    184
    185extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_base;
    186extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_dac;
    187extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_sor;
    188extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_pior;
    189extern const struct nv50_disp_chan_mthd gf119_disp_base_mthd;
    190
    191extern const struct nv50_disp_chan_mthd gk104_disp_core_mthd;
    192extern const struct nv50_disp_chan_mthd gk104_disp_ovly_mthd;
    193#endif