xref: /linux/drivers/gpu/drm/nouveau/nvkm/subdev/fault/priv.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
136780d7eSBen Skeggs #ifndef __NVKM_FAULT_PRIV_H__
236780d7eSBen Skeggs #define __NVKM_FAULT_PRIV_H__
336780d7eSBen Skeggs #define nvkm_fault_buffer(p) container_of((p), struct nvkm_fault_buffer, object)
436780d7eSBen Skeggs #define nvkm_fault(p) container_of((p), struct nvkm_fault, subdev)
536780d7eSBen Skeggs #include <subdev/fault.h>
636780d7eSBen Skeggs 
736780d7eSBen Skeggs #include <core/event.h>
836780d7eSBen Skeggs #include <core/object.h>
936780d7eSBen Skeggs 
1036780d7eSBen Skeggs struct nvkm_fault_buffer {
1136780d7eSBen Skeggs 	struct nvkm_object object;
1236780d7eSBen Skeggs 	struct nvkm_fault *fault;
1336780d7eSBen Skeggs 	int id;
1436780d7eSBen Skeggs 	int entries;
1580972456SBen Skeggs 	u32 get;
1680972456SBen Skeggs 	u32 put;
1736780d7eSBen Skeggs 	struct nvkm_memory *mem;
184d326469SBen Skeggs 	u64 addr;
19*b59d810aSBen Skeggs 
20*b59d810aSBen Skeggs 	struct nvkm_inth inth;
2136780d7eSBen Skeggs };
2236780d7eSBen Skeggs 
2377689f1bSBen Skeggs int nvkm_fault_new_(const struct nvkm_fault_func *, struct nvkm_device *, enum nvkm_subdev_type,
2477689f1bSBen Skeggs 		    int inst, struct nvkm_fault **);
2536780d7eSBen Skeggs 
2636780d7eSBen Skeggs struct nvkm_fault_func {
2760cda665SBen Skeggs 	int (*oneinit)(struct nvkm_fault *);
2836780d7eSBen Skeggs 	void (*init)(struct nvkm_fault *);
2936780d7eSBen Skeggs 	void (*fini)(struct nvkm_fault *);
3036780d7eSBen Skeggs 	void (*intr)(struct nvkm_fault *);
3136780d7eSBen Skeggs 	struct {
3236780d7eSBen Skeggs 		int nr;
3336780d7eSBen Skeggs 		u32 entry_size;
3480972456SBen Skeggs 		void (*info)(struct nvkm_fault_buffer *);
350ac7facbSThierry Reding 		u64 (*pin)(struct nvkm_fault_buffer *);
3636780d7eSBen Skeggs 		void (*init)(struct nvkm_fault_buffer *);
3736780d7eSBen Skeggs 		void (*fini)(struct nvkm_fault_buffer *);
383968d692SBen Skeggs 		void (*intr)(struct nvkm_fault_buffer *, bool enable);
3936780d7eSBen Skeggs 	} buffer;
4013e95729SBen Skeggs 	struct {
4113e95729SBen Skeggs 		struct nvkm_sclass base;
4213e95729SBen Skeggs 		int rp;
4313e95729SBen Skeggs 	} user;
4436780d7eSBen Skeggs };
4517fb2807SBen Skeggs 
460ac7facbSThierry Reding void gp100_fault_buffer_intr(struct nvkm_fault_buffer *, bool enable);
470ac7facbSThierry Reding void gp100_fault_buffer_fini(struct nvkm_fault_buffer *);
480ac7facbSThierry Reding void gp100_fault_buffer_init(struct nvkm_fault_buffer *);
490ac7facbSThierry Reding u64 gp100_fault_buffer_pin(struct nvkm_fault_buffer *);
500ac7facbSThierry Reding void gp100_fault_buffer_info(struct nvkm_fault_buffer *);
5155520832SBen Skeggs void gv100_fault_buffer_process(struct work_struct *);
520ac7facbSThierry Reding void gp100_fault_intr(struct nvkm_fault *);
530ac7facbSThierry Reding 
540ac7facbSThierry Reding u64 gp10b_fault_buffer_pin(struct nvkm_fault_buffer *);
550ac7facbSThierry Reding 
5617fb2807SBen Skeggs int gv100_fault_oneinit(struct nvkm_fault *);
5713e95729SBen Skeggs 
5813e95729SBen Skeggs int nvkm_ufault_new(struct nvkm_device *, const struct nvkm_oclass *,
5913e95729SBen Skeggs 		    void *, u32, struct nvkm_object **);
6036780d7eSBen Skeggs #endif
61