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