1#ifndef __NVKM_FAULT_H__
2#define __NVKM_FAULT_H__
3#include <core/subdev.h>
4#include <core/event.h>
5
6struct nvkm_fault {
7	const struct nvkm_fault_func *func;
8	struct nvkm_subdev subdev;
9
10	struct nvkm_inth info_fault;
11
12	struct nvkm_fault_buffer *buffer[2];
13	int buffer_nr;
14
15#define NVKM_FAULT_BUFFER_EVENT_PENDING BIT(0)
16	struct nvkm_event event;
17
18	struct nvkm_event_ntfy nrpfb;
19	struct work_struct nrpfb_work;
20
21	struct nvkm_device_oclass user;
22};
23
24struct nvkm_fault_data {
25	u64  addr;
26	u64  inst;
27	u64  time;
28	u8 engine;
29	u8  valid;
30	u8    gpc;
31	u8    hub;
32	u8 access;
33	u8 client;
34	u8 reason;
35};
36
37int gp100_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **);
38int gp10b_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **);
39int gv100_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **);
40int tu102_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **);
41#endif
42