blob: b80385b438b3df8a44ab367bdebe9c71d04f015e [file] [log] [blame]
Ben Skeggs7d155da2014-06-12 22:15:21 +10001#ifndef __NVKM_MC_PRIV_H__
2#define __NVKM_MC_PRIV_H__
Ben Skeggs54dcadd2015-08-20 14:54:21 +10003#define nvkm_mc(p) container_of((p), struct nvkm_mc, subdev)
Ben Skeggs7d155da2014-06-12 22:15:21 +10004#include <subdev/mc.h>
5
Ben Skeggs54dcadd2015-08-20 14:54:21 +10006int nvkm_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *,
7 int index, struct nvkm_mc **);
Ben Skeggs7d155da2014-06-12 22:15:21 +10008
Ben Skeggs87f313e2016-04-08 17:24:40 +10009struct nvkm_mc_map {
Ben Skeggs7d155da2014-06-12 22:15:21 +100010 u32 stat;
11 u32 unit;
12};
13
Ben Skeggs54dcadd2015-08-20 14:54:21 +100014struct nvkm_mc_func {
15 void (*init)(struct nvkm_mc *);
Ben Skeggs87f313e2016-04-08 17:24:40 +100016 const struct nvkm_mc_map *intr;
Ben Skeggsd4c4cc82015-08-20 14:54:22 +100017 /* 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 Skeggs70b01f072016-04-08 17:24:40 +100023 const struct nvkm_mc_map *reset;
Ben Skeggsd7e5fcd2015-01-14 15:08:21 +100024 void (*unk260)(struct nvkm_mc *, u32);
Ben Skeggs7d155da2014-06-12 22:15:21 +100025};
26
Ben Skeggs54dcadd2015-08-20 14:54:21 +100027void nv04_mc_init(struct nvkm_mc *);
Ben Skeggs87f313e2016-04-08 17:24:40 +100028extern const struct nvkm_mc_map nv04_mc_intr[];
Ben Skeggsd4c4cc82015-08-20 14:54:22 +100029void nv04_mc_intr_unarm(struct nvkm_mc *);
30void nv04_mc_intr_rearm(struct nvkm_mc *);
31u32 nv04_mc_intr_mask(struct nvkm_mc *);
Ben Skeggs54dcadd2015-08-20 14:54:21 +100032
Ben Skeggs54dcadd2015-08-20 14:54:21 +100033void nv44_mc_init(struct nvkm_mc *);
34
35void nv50_mc_init(struct nvkm_mc *);
Ben Skeggs87f313e2016-04-08 17:24:40 +100036extern const struct nvkm_mc_map nv50_mc_intr[];
Ben Skeggs54dcadd2015-08-20 14:54:21 +100037
Ben Skeggs87f313e2016-04-08 17:24:40 +100038extern const struct nvkm_mc_map gf100_mc_intr[];
Ben Skeggsae0a5b22015-08-20 14:54:22 +100039void gf100_mc_intr_unarm(struct nvkm_mc *);
40void gf100_mc_intr_rearm(struct nvkm_mc *);
41u32 gf100_mc_intr_mask(struct nvkm_mc *);
Ben Skeggsd7e5fcd2015-01-14 15:08:21 +100042void gf100_mc_unk260(struct nvkm_mc *, u32);
Ben Skeggs7d155da2014-06-12 22:15:21 +100043#endif