11ce46689SBen Skeggs #ifndef __NVKM_FAULT_H__ 21ce46689SBen Skeggs #define __NVKM_FAULT_H__ 31ce46689SBen Skeggs #include <core/subdev.h> 40196cc65SBen Skeggs #include <core/event.h> 51ce46689SBen Skeggs 61ce46689SBen Skeggs struct nvkm_fault { 736780d7eSBen Skeggs const struct nvkm_fault_func *func; 81ce46689SBen Skeggs struct nvkm_subdev subdev; 936780d7eSBen Skeggs 10*b59d810aSBen Skeggs struct nvkm_inth info_fault; 11*b59d810aSBen Skeggs 128b811951SBen Skeggs struct nvkm_fault_buffer *buffer[2]; 1336780d7eSBen Skeggs int buffer_nr; 1436780d7eSBen Skeggs 1555520832SBen Skeggs #define NVKM_FAULT_BUFFER_EVENT_PENDING BIT(0) 1636780d7eSBen Skeggs struct nvkm_event event; 178b811951SBen Skeggs 1855520832SBen Skeggs struct nvkm_event_ntfy nrpfb; 1955520832SBen Skeggs struct work_struct nrpfb_work; 2013e95729SBen Skeggs 2113e95729SBen Skeggs struct nvkm_device_oclass user; 221ce46689SBen Skeggs }; 23d0e9351eSBen Skeggs 24ddc669e2SBen Skeggs struct nvkm_fault_data { 25ddc669e2SBen Skeggs u64 addr; 26ddc669e2SBen Skeggs u64 inst; 27ddc669e2SBen Skeggs u64 time; 28ddc669e2SBen Skeggs u8 engine; 29ddc669e2SBen Skeggs u8 valid; 30ddc669e2SBen Skeggs u8 gpc; 31ddc669e2SBen Skeggs u8 hub; 32ddc669e2SBen Skeggs u8 access; 33ddc669e2SBen Skeggs u8 client; 34ddc669e2SBen Skeggs u8 reason; 35ddc669e2SBen Skeggs }; 36ddc669e2SBen Skeggs 3777689f1bSBen Skeggs int gp100_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); 3877689f1bSBen Skeggs int gp10b_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); 3977689f1bSBen Skeggs int gv100_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); 4077689f1bSBen Skeggs int tu102_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); 411ce46689SBen Skeggs #endif 42