File Index
Files and directories
Sign in
FILE

rm.h

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h C
  1/* SPDX-License-Identifier: MIT
  2 *
  3 * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
  4 */
  5#include <subdev/gsp.h>
  6#ifndef __NVKM_RM_H__
  7#define __NVKM_RM_H__
  8#include "handles.h"
  9struct nvkm_outp;
 10struct r535_gr;
 11
 12struct nvkm_rm_impl {
 13	const struct nvkm_rm_wpr *wpr;
 14	const struct nvkm_rm_api *api;
 15};
 16
 17struct nvkm_rm {
 18	struct nvkm_device *device;
 19	const struct nvkm_rm_gpu *gpu;
 20	const struct nvkm_rm_wpr *wpr;
 21	const struct nvkm_rm_api *api;
 22};
 23
 24struct nvkm_rm_wpr {
 25	u32 os_carveout_size;
 26	u32 base_size;
 27	u64 heap_size_min;
 28	u32 heap_size_non_wpr;
 29	u32 rsvd_size_pmu;
 30	bool offset_set_by_acr;
 31};
 32
 33struct nvkm_rm_api {
 34	const struct nvkm_rm_api_gsp {
 35		void (*set_rmargs)(struct nvkm_gsp *, bool resume);
 36		int (*set_system_info)(struct nvkm_gsp *);
 37		int (*get_static_info)(struct nvkm_gsp *);
 38		bool (*xlat_mc_engine_idx)(u32 mc_engine_idx, enum nvkm_subdev_type *, int *inst);
 39		void (*drop_send_user_shared_data)(struct nvkm_gsp *);
 40		void (*drop_post_nocat_record)(struct nvkm_gsp *);
 41		u32 (*sr_data_size)(struct nvkm_gsp *);
 42	} *gsp;
 43
 44	const struct nvkm_rm_api_rpc {
 45		void *(*get)(struct nvkm_gsp *, u32 fn, u32 argc);
 46		void *(*push)(struct nvkm_gsp *gsp, void *argv,
 47			      enum nvkm_gsp_rpc_reply_policy policy, u32 repc);
 48		void (*done)(struct nvkm_gsp *gsp, void *repv);
 49	} *rpc;
 50
 51	const struct nvkm_rm_api_ctrl {
 52		void *(*get)(struct nvkm_gsp_object *, u32 cmd, u32 params_size);
 53		int (*push)(struct nvkm_gsp_object *, void **params, u32 repc);
 54		void (*done)(struct nvkm_gsp_object *, void *params);
 55	} *ctrl;
 56
 57	const struct nvkm_rm_api_alloc {
 58		void *(*get)(struct nvkm_gsp_object *, u32 oclass, u32 params_size);
 59		void *(*push)(struct nvkm_gsp_object *, void *params);
 60		void (*done)(struct nvkm_gsp_object *, void *params);
 61
 62		int (*free)(struct nvkm_gsp_object *);
 63	} *alloc;
 64
 65	const struct nvkm_rm_api_client {
 66		int (*ctor)(struct nvkm_gsp_client *, u32 handle);
 67	} *client;
 68
 69	const struct nvkm_rm_api_device {
 70		int (*ctor)(struct nvkm_gsp_client *, struct nvkm_gsp_device *);
 71		void (*dtor)(struct nvkm_gsp_device *);
 72
 73		struct {
 74			int (*ctor)(struct nvkm_gsp_device *, u32 handle, u32 id,
 75				    nvkm_gsp_event_func, struct nvkm_gsp_event *);
 76			void (*dtor)(struct nvkm_gsp_event *);
 77		} event;
 78	} *device;
 79
 80	const struct nvkm_rm_api_fbsr {
 81		int (*suspend)(struct nvkm_gsp *, bool runtime);
 82		void (*resume)(struct nvkm_gsp *);
 83	} *fbsr;
 84
 85	const struct nvkm_rm_api_disp {
 86		int (*get_static_info)(struct nvkm_disp *);
 87		int (*get_supported)(struct nvkm_disp *, unsigned long *display_mask);
 88		int (*get_connect_state)(struct nvkm_disp *, unsigned display_id);
 89		int (*get_active)(struct nvkm_disp *, unsigned head, u32 *display_id);
 90
 91		int (*bl_ctrl)(struct nvkm_disp *, unsigned display_id, bool set, int *val);
 92
 93		struct {
 94			int (*get_caps)(struct nvkm_disp *, int *link_bw, bool *mst, bool *wm);
 95			int (*set_indexed_link_rates)(struct nvkm_outp *);
 96		} dp;
 97
 98		struct {
 99			int (*set_pushbuf)(struct nvkm_disp *, s32 oclass, int inst,
100					   struct nvkm_memory *);
101			int (*dmac_alloc)(struct nvkm_disp *, u32 oclass, int inst, u32 put_offset,
102					  struct nvkm_gsp_object *);
103		} chan;
104	} *disp;
105
106	const struct nvkm_rm_api_fifo {
107		int (*xlat_rm_engine_type)(u32 rm_engine_type,
108					   enum nvkm_subdev_type *, int *nv2080_type);
109		int (*ectx_size)(struct nvkm_fifo *);
110		unsigned rsvd_chids;
111		int (*rc_triggered)(void *priv, u32 fn, void *repv, u32 repc);
112		struct {
113			int (*alloc)(struct nvkm_gsp_device *, u32 handle,
114				     u32 nv2080_engine_type, u8 runq, bool priv, int chid,
115				     u64 inst_addr, u64 userd_addr, u64 mthdbuf_addr,
116				     struct nvkm_vmm *, u64 gpfifo_offset, u32 gpfifo_length,
117				     struct nvkm_gsp_object *);
118		} chan;
119	} *fifo;
120
121	const struct nvkm_rm_api_engine {
122		int (*alloc)(struct nvkm_gsp_object *chan, u32 handle, u32 class, int inst,
123			     struct nvkm_gsp_object *);
124	} *ce, *nvdec, *nvenc, *nvjpg, *ofa;
125
126	const struct nvkm_rm_api_gr {
127		int (*get_ctxbufs_info)(struct r535_gr *);
128		struct {
129			int (*init)(struct r535_gr *);
130			void (*fini)(struct r535_gr *);
131		} scrubber;
132	} *gr;
133};
134
135extern const struct nvkm_rm_impl r535_rm_tu102;
136extern const struct nvkm_rm_impl r535_rm_ga102;
137extern const struct nvkm_rm_api_gsp r535_gsp;
138typedef struct DOD_METHOD_DATA DOD_METHOD_DATA;
139typedef struct JT_METHOD_DATA JT_METHOD_DATA;
140typedef struct CAPS_METHOD_DATA CAPS_METHOD_DATA;
141void r535_gsp_acpi_dod(acpi_handle, DOD_METHOD_DATA *);
142void r535_gsp_acpi_jt(acpi_handle, JT_METHOD_DATA *);
143void r535_gsp_acpi_caps(acpi_handle, CAPS_METHOD_DATA *);
144struct NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS;
145void r535_gsp_get_static_info_fb(struct nvkm_gsp *,
146				 const struct NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS *);
147extern const struct nvkm_rm_api_rpc r535_rpc;
148extern const struct nvkm_rm_api_ctrl r535_ctrl;
149extern const struct nvkm_rm_api_alloc r535_alloc;
150extern const struct nvkm_rm_api_client r535_client;
151void r535_gsp_client_dtor(struct nvkm_gsp_client *);
152extern const struct nvkm_rm_api_device r535_device;
153int r535_mmu_vaspace_new(struct nvkm_vmm *, u32 handle, bool external);
154void r535_mmu_vaspace_del(struct nvkm_vmm *);
155extern const struct nvkm_rm_api_fbsr r535_fbsr;
156void r535_fbsr_resume(struct nvkm_gsp *);
157int r535_fbsr_memlist(struct nvkm_gsp_device *, u32 handle, enum nvkm_memory_target,
158		      u64 phys, u64 size, struct sg_table *, struct nvkm_gsp_object *);
159extern const struct nvkm_rm_api_disp r535_disp;
160extern const struct nvkm_rm_api_fifo r535_fifo;
161void r535_fifo_rc_chid(struct nvkm_fifo *, int chid);
162extern const struct nvkm_rm_api_engine r535_ce;
163extern const struct nvkm_rm_api_gr r535_gr;
164void *r535_gr_dtor(struct nvkm_gr *);
165int r535_gr_oneinit(struct nvkm_gr *);
166u64 r535_gr_units(struct nvkm_gr *);
167int r535_gr_chan_new(struct nvkm_gr *, struct nvkm_chan *, const struct nvkm_oclass *,
168		     struct nvkm_object **);
169int r535_gr_promote_ctx(struct r535_gr *, bool golden, struct nvkm_vmm *,
170			struct nvkm_memory **pctxbuf_mem, struct nvkm_vma **pctxbuf_vma,
171			struct nvkm_gsp_object *chan);
172extern const struct nvkm_rm_api_engine r535_nvdec;
173extern const struct nvkm_rm_api_engine r535_nvenc;
174extern const struct nvkm_rm_api_engine r535_nvjpg;
175extern const struct nvkm_rm_api_engine r535_ofa;
176
177extern const struct nvkm_rm_impl r570_rm_tu102;
178extern const struct nvkm_rm_impl r570_rm_ga102;
179extern const struct nvkm_rm_impl r570_rm_gh100;
180extern const struct nvkm_rm_impl r570_rm_gb10x;
181extern const struct nvkm_rm_impl r570_rm_gb20x;
182extern const struct nvkm_rm_api_gsp r570_gsp;
183extern const struct nvkm_rm_api_client r570_client;
184extern const struct nvkm_rm_api_fbsr r570_fbsr;
185extern const struct nvkm_rm_api_disp r570_disp;
186extern const struct nvkm_rm_api_fifo r570_fifo;
187extern const struct nvkm_rm_api_gr r570_gr;
188int r570_gr_gpc_mask(struct nvkm_gsp *, u32 *mask);
189int r570_gr_tpc_mask(struct nvkm_gsp *, int gpc, u32 *mask);
190extern const struct nvkm_rm_api_engine r570_ofa;
191#endif
~/ Read-only file preview.