Linux Audio

Check our new training course

In-person Linux kernel drivers training

Jun 16-20, 2025
Register
Loading...
v6.2
  1/* SPDX-License-Identifier: MIT */
  2#ifndef __NVKM_FLCNEN_H__
  3#define __NVKM_FLCNEN_H__
  4#define nvkm_falcon(p) container_of((p), struct nvkm_falcon, engine)
  5#include <core/engine.h>
  6struct nvkm_fifo_chan;
  7
  8enum nvkm_falcon_dmaidx {
  9	FALCON_DMAIDX_UCODE		= 0,
 10	FALCON_DMAIDX_VIRT		= 1,
 11	FALCON_DMAIDX_PHYS_VID		= 2,
 12	FALCON_DMAIDX_PHYS_SYS_COH	= 3,
 13	FALCON_DMAIDX_PHYS_SYS_NCOH	= 4,
 14	FALCON_SEC2_DMAIDX_UCODE	= 6,
 15};
 16
 17struct nvkm_falcon {
 18	const struct nvkm_falcon_func *func;
 19	struct nvkm_subdev *owner;
 20	const char *name;
 21	u32 addr;
 22	u32 addr2;
 23
 24	struct mutex mutex;
 25	struct mutex dmem_mutex;
 26	bool oneinit;
 27
 28	struct nvkm_subdev *user;
 29
 30	u8 version;
 31	u8 secret;
 32	bool debug;
 33
 34	struct nvkm_memory *core;
 35	bool external;
 36
 37	struct {
 38		u32 limit;
 39		u32 *data;
 40		u32  size;
 41		u8 ports;
 42	} code;
 43
 44	struct {
 45		u32 limit;
 46		u32 *data;
 47		u32  size;
 48		u8 ports;
 49	} data;
 50
 51	struct nvkm_engine engine;
 52};
 53
 54int nvkm_falcon_get(struct nvkm_falcon *, struct nvkm_subdev *);
 55void nvkm_falcon_put(struct nvkm_falcon *, struct nvkm_subdev *);
 56
 57int nvkm_falcon_new_(const struct nvkm_falcon_func *, struct nvkm_device *,
 58		     enum nvkm_subdev_type, int inst, bool enable, u32 addr, struct nvkm_engine **);
 59
 60struct nvkm_falcon_func {
 61	int (*disable)(struct nvkm_falcon *);
 62	int (*enable)(struct nvkm_falcon *);
 63	int (*select)(struct nvkm_falcon *);
 64	u32 addr2;
 65	bool reset_pmc;
 66	int (*reset_eng)(struct nvkm_falcon *);
 67	int (*reset_prep)(struct nvkm_falcon *);
 68	int (*reset_wait_mem_scrubbing)(struct nvkm_falcon *);
 69
 70	u32 debug;
 71	void (*bind_inst)(struct nvkm_falcon *, int target, u64 addr);
 72	int (*bind_stat)(struct nvkm_falcon *, bool intr);
 73	bool bind_intr;
 74
 75	const struct nvkm_falcon_func_pio *imem_pio;
 76	const struct nvkm_falcon_func_dma *imem_dma;
 77
 78	const struct nvkm_falcon_func_pio *dmem_pio;
 79	const struct nvkm_falcon_func_dma *dmem_dma;
 80
 81	u32 emem_addr;
 82	const struct nvkm_falcon_func_pio *emem_pio;
 83
 84	struct {
 85		u32 head;
 86		u32 tail;
 87		u32 stride;
 88	} cmdq, msgq;
 89
 90	struct {
 91		u32 *data;
 92		u32  size;
 93	} code;
 94	struct {
 95		u32 *data;
 96		u32  size;
 97	} data;
 98	void (*init)(struct nvkm_falcon *);
 99	void (*intr)(struct nvkm_falcon *, struct nvkm_chan *);
100
101	void (*load_imem)(struct nvkm_falcon *, void *, u32, u32, u16, u8, bool);
102	void (*load_dmem)(struct nvkm_falcon *, void *, u32, u32, u8);
103	void (*start)(struct nvkm_falcon *);
104
105	struct nvkm_sclass sclass[];
106};
107
108static inline u32
109nvkm_falcon_rd32(struct nvkm_falcon *falcon, u32 addr)
110{
111	return nvkm_rd32(falcon->owner->device, falcon->addr + addr);
112}
113
114static inline void
115nvkm_falcon_wr32(struct nvkm_falcon *falcon, u32 addr, u32 data)
116{
117	nvkm_wr32(falcon->owner->device, falcon->addr + addr, data);
118}
119
120static inline u32
121nvkm_falcon_mask(struct nvkm_falcon *falcon, u32 addr, u32 mask, u32 val)
122{
123	struct nvkm_device *device = falcon->owner->device;
124
125	return nvkm_mask(device, falcon->addr + addr, mask, val);
126}
127
128void nvkm_falcon_load_imem(struct nvkm_falcon *, void *, u32, u32, u16, u8,
129			   bool);
130void nvkm_falcon_load_dmem(struct nvkm_falcon *, void *, u32, u32, u8);
131void nvkm_falcon_start(struct nvkm_falcon *);
132#endif
v4.10.11
 1#ifndef __NVKM_FALCON_H__
 2#define __NVKM_FALCON_H__
 
 3#define nvkm_falcon(p) container_of((p), struct nvkm_falcon, engine)
 4#include <core/engine.h>
 5struct nvkm_fifo_chan;
 6
 
 
 
 
 
 
 
 
 
 7struct nvkm_falcon {
 8	const struct nvkm_falcon_func *func;
 9	struct nvkm_engine engine;
 
 
 
 
 
 
 
 
 
10
11	u32 addr;
12	u8  version;
13	u8  secret;
14
15	struct nvkm_memory *core;
16	bool external;
17
18	struct {
19		u32 limit;
20		u32 *data;
21		u32  size;
 
22	} code;
23
24	struct {
25		u32 limit;
26		u32 *data;
27		u32  size;
 
28	} data;
 
 
29};
30
 
 
 
31int nvkm_falcon_new_(const struct nvkm_falcon_func *, struct nvkm_device *,
32		     int index, bool enable, u32 addr, struct nvkm_engine **);
33
34struct nvkm_falcon_func {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35	struct {
36		u32 *data;
37		u32  size;
38	} code;
39	struct {
40		u32 *data;
41		u32  size;
42	} data;
43	void (*init)(struct nvkm_falcon *);
44	void (*intr)(struct nvkm_falcon *, struct nvkm_fifo_chan *);
 
 
 
 
 
45	struct nvkm_sclass sclass[];
46};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47#endif