Ben Skeggs | 7d155da | 2014-06-12 22:15:21 +1000 | [diff] [blame] | 1 | #ifndef __NVKM_MC_PRIV_H__ |
| 2 | #define __NVKM_MC_PRIV_H__ |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 3 | #define nvkm_mc(p) container_of((p), struct nvkm_mc, subdev) |
Ben Skeggs | 7d155da | 2014-06-12 22:15:21 +1000 | [diff] [blame] | 4 | #include <subdev/mc.h> |
| 5 | |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 6 | int nvkm_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *, |
| 7 | int index, struct nvkm_mc **); |
Ben Skeggs | 7d155da | 2014-06-12 22:15:21 +1000 | [diff] [blame] | 8 | |
Ben Skeggs | 87f313e | 2016-04-08 17:24:40 +1000 | [diff] [blame] | 9 | struct nvkm_mc_map { |
Ben Skeggs | 7d155da | 2014-06-12 22:15:21 +1000 | [diff] [blame] | 10 | u32 stat; |
| 11 | u32 unit; |
| 12 | }; |
| 13 | |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 14 | struct nvkm_mc_func { |
| 15 | void (*init)(struct nvkm_mc *); |
Ben Skeggs | 87f313e | 2016-04-08 17:24:40 +1000 | [diff] [blame] | 16 | const struct nvkm_mc_map *intr; |
Ben Skeggs | d4c4cc8 | 2015-08-20 14:54:22 +1000 | [diff] [blame] | 17 | /* disable reporting of interrupts to host */ |
| 18 | void (*intr_unarm)(struct nvkm_mc *); |
| 19 | /* enable reporting of interrupts to host */ |
| 20 | void (*intr_rearm)(struct nvkm_mc *); |
| 21 | /* retrieve pending interrupt mask (NV_PMC_INTR) */ |
| 22 | u32 (*intr_mask)(struct nvkm_mc *); |
Ben Skeggs | 70b01f07 | 2016-04-08 17:24:40 +1000 | [diff] [blame^] | 23 | const struct nvkm_mc_map *reset; |
Ben Skeggs | d7e5fcd | 2015-01-14 15:08:21 +1000 | [diff] [blame] | 24 | void (*unk260)(struct nvkm_mc *, u32); |
Ben Skeggs | 7d155da | 2014-06-12 22:15:21 +1000 | [diff] [blame] | 25 | }; |
| 26 | |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 27 | void nv04_mc_init(struct nvkm_mc *); |
Ben Skeggs | 87f313e | 2016-04-08 17:24:40 +1000 | [diff] [blame] | 28 | extern const struct nvkm_mc_map nv04_mc_intr[]; |
Ben Skeggs | d4c4cc8 | 2015-08-20 14:54:22 +1000 | [diff] [blame] | 29 | void nv04_mc_intr_unarm(struct nvkm_mc *); |
| 30 | void nv04_mc_intr_rearm(struct nvkm_mc *); |
| 31 | u32 nv04_mc_intr_mask(struct nvkm_mc *); |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 32 | |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 33 | void nv44_mc_init(struct nvkm_mc *); |
| 34 | |
| 35 | void nv50_mc_init(struct nvkm_mc *); |
Ben Skeggs | 87f313e | 2016-04-08 17:24:40 +1000 | [diff] [blame] | 36 | extern const struct nvkm_mc_map nv50_mc_intr[]; |
Ben Skeggs | 54dcadd | 2015-08-20 14:54:21 +1000 | [diff] [blame] | 37 | |
Ben Skeggs | 87f313e | 2016-04-08 17:24:40 +1000 | [diff] [blame] | 38 | extern const struct nvkm_mc_map gf100_mc_intr[]; |
Ben Skeggs | ae0a5b2 | 2015-08-20 14:54:22 +1000 | [diff] [blame] | 39 | void gf100_mc_intr_unarm(struct nvkm_mc *); |
| 40 | void gf100_mc_intr_rearm(struct nvkm_mc *); |
| 41 | u32 gf100_mc_intr_mask(struct nvkm_mc *); |
Ben Skeggs | d7e5fcd | 2015-01-14 15:08:21 +1000 | [diff] [blame] | 42 | void gf100_mc_unk260(struct nvkm_mc *, u32); |
Ben Skeggs | 7d155da | 2014-06-12 22:15:21 +1000 | [diff] [blame] | 43 | #endif |