summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/include/nvkm
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/nouveau/include/nvkm')
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/client.h57
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/debug.h20
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/device.h147
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/engctx.h54
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/engine.h59
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/enum.h24
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/event.h35
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/gpuobj.h71
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/handle.h34
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/ioctl.h6
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/mm.h40
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/namedb.h56
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/notify.h37
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/object.h206
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/option.h20
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/os.h4
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/parent.h62
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/printk.h32
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/ramht.h23
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h120
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/bsp.h9
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/copy.h13
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/crypt.h7
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/device.h33
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h36
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/dmaobj.h31
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h83
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h126
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/graph.h86
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/mpeg.h63
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/perfmon.h38
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/ppp.h7
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/software.h51
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/vp.h9
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/engine/xtensa.h38
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h37
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios.h35
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/M0203.h31
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/M0205.h32
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/M0209.h30
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/P0260.h23
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/bit.h13
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/bmp.h39
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/boost.h29
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/conn.h46
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/cstep.h28
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/dcb.h69
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/disp.h48
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/dp.h35
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/extdev.h30
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/fan.h8
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/gpio.h48
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/i2c.h29
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/image.h13
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/init.h22
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/mxm.h9
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/npde.h12
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/pcir.h18
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h47
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/pll.h79
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/pmu.h37
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h145
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/rammap.h26
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/therm.h77
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/timing.h14
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/vmap.h25
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/volt.h27
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/xpio.h19
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/bus.h53
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/clock.h166
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h35
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h159
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/fuse.h30
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/gpio.h47
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h136
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h35
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h52
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h35
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h31
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/mxm.h37
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/pwr.h57
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/therm.h83
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h64
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/vga.h30
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/vm.h135
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h61
86 files changed, 4163 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/client.h b/drivers/gpu/drm/nouveau/include/nvkm/core/client.h
new file mode 100644
index 000000000000..827c4e972ed3
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/client.h
@@ -0,0 +1,57 @@
+#ifndef __NOUVEAU_CLIENT_H__
+#define __NOUVEAU_CLIENT_H__
+
+#include <core/namedb.h>
+
+struct nouveau_client {
+ struct nouveau_namedb namedb;
+ struct nouveau_handle *root;
+ struct nouveau_object *device;
+ char name[32];
+ u32 debug;
+ struct nouveau_vm *vm;
+ bool super;
+ void *data;
+
+ int (*ntfy)(const void *, u32, const void *, u32);
+ struct nvkm_client_notify *notify[16];
+};
+
+static inline struct nouveau_client *
+nv_client(void *obj)
+{
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+ if (unlikely(!nv_iclass(obj, NV_CLIENT_CLASS)))
+ nv_assert("BAD CAST -> NvClient, %08x", nv_hclass(obj));
+#endif
+ return obj;
+}
+
+static inline struct nouveau_client *
+nouveau_client(void *obj)
+{
+ struct nouveau_object *client = nv_object(obj);
+ while (client && !(nv_iclass(client, NV_CLIENT_CLASS)))
+ client = client->parent;
+ return (void *)client;
+}
+
+#define nouveau_client_create(n,c,oc,od,d) \
+ nouveau_client_create_((n), (c), (oc), (od), sizeof(**d), (void **)d)
+
+int nouveau_client_create_(const char *name, u64 device, const char *cfg,
+ const char *dbg, int, void **);
+#define nouveau_client_destroy(p) \
+ nouveau_namedb_destroy(&(p)->base)
+
+int nouveau_client_init(struct nouveau_client *);
+int nouveau_client_fini(struct nouveau_client *, bool suspend);
+const char *nouveau_client_name(void *obj);
+
+int nvkm_client_notify_new(struct nouveau_object *, struct nvkm_event *,
+ void *data, u32 size);
+int nvkm_client_notify_del(struct nouveau_client *, int index);
+int nvkm_client_notify_get(struct nouveau_client *, int index);
+int nvkm_client_notify_put(struct nouveau_client *, int index);
+
+#endif
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/debug.h b/drivers/gpu/drm/nouveau/include/nvkm/core/debug.h
new file mode 100644
index 000000000000..8092e2e90323
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/debug.h
@@ -0,0 +1,20 @@
+#ifndef __NOUVEAU_DEBUG_H__
+#define __NOUVEAU_DEBUG_H__
+
+extern int nv_info_debug_level;
+
+#define NV_DBG_FATAL 0
+#define NV_DBG_ERROR 1
+#define NV_DBG_WARN 2
+#define NV_DBG_INFO nv_info_debug_level
+#define NV_DBG_DEBUG 4
+#define NV_DBG_TRACE 5
+#define NV_DBG_PARANOIA 6
+#define NV_DBG_SPAM 7
+
+#define NV_DBG_INFO_NORMAL 3
+#define NV_DBG_INFO_SILENT NV_DBG_DEBUG
+
+#define nv_debug_level(a) nv_info_debug_level = NV_DBG_INFO_##a
+
+#endif
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h
new file mode 100644
index 000000000000..21a055aca513
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h
@@ -0,0 +1,147 @@
+#ifndef __NOUVEAU_DEVICE_H__
+#define __NOUVEAU_DEVICE_H__
+
+#include <core/object.h>
+#include <core/subdev.h>
+#include <core/engine.h>
+#include <core/event.h>
+
+enum nv_subdev_type {
+ NVDEV_ENGINE_DEVICE,
+ NVDEV_SUBDEV_VBIOS,
+
+ /* All subdevs from DEVINIT to DEVINIT_LAST will be created before
+ * *any* of them are initialised. This subdev category is used
+ * for any subdevs that the VBIOS init table parsing may call out
+ * to during POST.
+ */
+ NVDEV_SUBDEV_DEVINIT,
+ NVDEV_SUBDEV_IBUS,
+ NVDEV_SUBDEV_GPIO,
+ NVDEV_SUBDEV_I2C,
+ NVDEV_SUBDEV_DEVINIT_LAST = NVDEV_SUBDEV_I2C,
+
+ /* This grouping of subdevs are initialised right after they've
+ * been created, and are allowed to assume any subdevs in the
+ * list above them exist and have been initialised.
+ */
+ NVDEV_SUBDEV_FUSE,
+ NVDEV_SUBDEV_MXM,
+ NVDEV_SUBDEV_MC,
+ NVDEV_SUBDEV_BUS,
+ NVDEV_SUBDEV_TIMER,
+ NVDEV_SUBDEV_FB,
+ NVDEV_SUBDEV_LTC,
+ NVDEV_SUBDEV_INSTMEM,
+ NVDEV_SUBDEV_VM,
+ NVDEV_SUBDEV_BAR,
+ NVDEV_SUBDEV_PWR,
+ NVDEV_SUBDEV_VOLT,
+ NVDEV_SUBDEV_THERM,
+ NVDEV_SUBDEV_CLOCK,
+
+ NVDEV_ENGINE_FIRST,
+ NVDEV_ENGINE_DMAOBJ = NVDEV_ENGINE_FIRST,
+ NVDEV_ENGINE_IFB,
+ NVDEV_ENGINE_FIFO,
+ NVDEV_ENGINE_SW,
+ NVDEV_ENGINE_GR,
+ NVDEV_ENGINE_MPEG,
+ NVDEV_ENGINE_ME,
+ NVDEV_ENGINE_VP,
+ NVDEV_ENGINE_CRYPT,
+ NVDEV_ENGINE_BSP,
+ NVDEV_ENGINE_PPP,
+ NVDEV_ENGINE_COPY0,
+ NVDEV_ENGINE_COPY1,
+ NVDEV_ENGINE_COPY2,
+ NVDEV_ENGINE_VIC,
+ NVDEV_ENGINE_VENC,
+ NVDEV_ENGINE_DISP,
+ NVDEV_ENGINE_PERFMON,
+
+ NVDEV_SUBDEV_NR,
+};
+
+struct nouveau_device {
+ struct nouveau_engine engine;
+ struct list_head head;
+
+ struct pci_dev *pdev;
+ struct platform_device *platformdev;
+ u64 handle;
+
+ struct nvkm_event event;
+
+ const char *cfgopt;
+ const char *dbgopt;
+ const char *name;
+ const char *cname;
+ u64 disable_mask;
+
+ enum {
+ NV_04 = 0x04,
+ NV_10 = 0x10,
+ NV_11 = 0x11,
+ NV_20 = 0x20,
+ NV_30 = 0x30,
+ NV_40 = 0x40,
+ NV_50 = 0x50,
+ NV_C0 = 0xc0,
+ NV_E0 = 0xe0,
+ GM100 = 0x110,
+ } card_type;
+ u32 chipset;
+ u8 chiprev;
+ u32 crystal;
+
+ struct nouveau_oclass *oclass[NVDEV_SUBDEV_NR];
+ struct nouveau_object *subdev[NVDEV_SUBDEV_NR];
+
+ struct {
+ struct notifier_block nb;
+ } acpi;
+};
+
+int nouveau_device_list(u64 *name, int size);
+
+struct nouveau_device *nv_device(void *obj);
+
+static inline bool
+nv_device_match(struct nouveau_object *object, u16 dev, u16 ven, u16 sub)
+{
+ struct nouveau_device *device = nv_device(object);
+ return device->pdev->device == dev &&
+ device->pdev->subsystem_vendor == ven &&
+ device->pdev->subsystem_device == sub;
+}
+
+static inline bool
+nv_device_is_pci(struct nouveau_device *device)
+{
+ return device->pdev != NULL;
+}
+
+static inline bool
+nv_device_is_cpu_coherent(struct nouveau_device *device)
+{
+ return (!IS_ENABLED(CONFIG_ARM) && nv_device_is_pci(device));
+}
+
+static inline struct device *
+nv_device_base(struct nouveau_device *device)
+{
+ return nv_device_is_pci(device) ? &device->pdev->dev :
+ &device->platformdev->dev;
+}
+
+resource_size_t
+nv_device_resource_start(struct nouveau_device *device, unsigned int bar);
+
+resource_size_t
+nv_device_resource_len(struct nouveau_device *device, unsigned int bar);
+
+int
+nv_device_get_irq(struct nouveau_device *device, bool stall);
+
+#endif
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engctx.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engctx.h
new file mode 100644
index 000000000000..dbc6a3e6dd44
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engctx.h
@@ -0,0 +1,54 @@
+#ifndef __NOUVEAU_ENGCTX_H__
+#define __NOUVEAU_ENGCTX_H__
+
+#include <core/object.h>
+#include <core/gpuobj.h>
+
+#include <subdev/vm.h>
+
+#define NV_ENGCTX_(eng,var) (NV_ENGCTX_CLASS | ((var) << 8) | (eng))
+#define NV_ENGCTX(name,var) NV_ENGCTX_(NVDEV_ENGINE_##name, (var))
+
+struct nouveau_engctx {
+ struct nouveau_gpuobj gpuobj;
+ struct nouveau_vma vma;
+ struct list_head head;
+ unsigned long save;
+ u64 addr;
+};
+
+static inline struct nouveau_engctx *
+nv_engctx(void *obj)
+{
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+ if (unlikely(!nv_iclass(obj, NV_ENGCTX_CLASS)))
+ nv_assert("BAD CAST -> NvEngCtx, %08x", nv_hclass(obj));
+#endif
+ return obj;
+}
+
+#define nouveau_engctx_create(p,e,c,g,s,a,f,d) \
+ nouveau_engctx_create_((p), (e), (c), (g), (s), (a), (f), \
+ sizeof(**d), (void **)d)
+
+int nouveau_engctx_create_(struct nouveau_object *, struct nouveau_object *,
+ struct nouveau_oclass *, struct nouveau_object *,
+ u32 size, u32 align, u32 flags,
+ int length, void **data);
+void nouveau_engctx_destroy(struct nouveau_engctx *);
+int nouveau_engctx_init(struct nouveau_engctx *);
+int nouveau_engctx_fini(struct nouveau_engctx *, bool suspend);
+
+int _nouveau_engctx_ctor(struct nouveau_object *, struct nouveau_object *,
+ struct nouveau_oclass *, void *, u32,
+ struct nouveau_object **);
+void _nouveau_engctx_dtor(struct nouveau_object *);
+int _nouveau_engctx_init(struct nouveau_object *);
+int _nouveau_engctx_fini(struct nouveau_object *, bool suspend);
+#define _nouveau_engctx_rd32 _nouveau_gpuobj_rd32
+#define _nouveau_engctx_wr32 _nouveau_gpuobj_wr32
+
+struct nouveau_object *nouveau_engctx_get(struct nouveau_engine *, u64 addr);
+void nouveau_engctx_put(struct nouveau_object *);
+
+#endif
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
new file mode 100644
index 000000000000..d7ebd35ef1ad
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
@@ -0,0 +1,59 @@
+#ifndef __NOUVEAU_ENGINE_H__
+#define __NOUVEAU_ENGINE_H__
+
+#include <core/object.h>
+#include <core/subdev.h>
+
+#define NV_ENGINE_(eng,var) (NV_ENGINE_CLASS | ((var) << 8) | (eng))
+#define NV_ENGINE(name,var) NV_ENGINE_(NVDEV_ENGINE_##name, (var))
+
+struct nouveau_engine {
+ struct nouveau_subdev subdev;
+ struct nouveau_oclass *cclass;
+ struct nouveau_oclass *sclass;
+
+ struct list_head contexts;
+ spinlock_t lock;
+
+ void (*tile_prog)(struct nouveau_engine *, int region);
+ int (*tlb_flush)(struct nouveau_engine *);
+};
+
+static inline struct nouveau_engine *
+nv_engine(void *obj)
+{
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+ if (unlikely(!nv_iclass(obj, NV_ENGINE_CLASS)))
+ nv_assert("BAD CAST -> NvEngine, %08x", nv_hclass(obj));
+#endif
+ return obj;
+}
+
+static inline int
+nv_engidx(struct nouveau_engine *engine)
+{
+ return nv_subidx(&engine->subdev);
+}
+
+struct nouveau_engine *nouveau_engine(void *obj, int idx);
+
+#define nouveau_engine_create(p,e,c,d,i,f,r) \
+ nouveau_engine_create_((p), (e), (c), (d), (i), (f), \
+ sizeof(**r),(void **)r)
+
+#define nouveau_engine_destroy(p) \
+ nouveau_subdev_destroy(&(p)->subdev)
+#define nouveau_engine_init(p) \
+ nouveau_subdev_init(&(p)->subdev)
+#define nouveau_engine_fini(p,s) \
+ nouveau_subdev_fini(&(p)->subdev, (s))
+
+int nouveau_engine_create_(struct nouveau_object *, struct nouveau_object *,
+ struct nouveau_oclass *, bool, const char *,
+ const char *, int, void **);
+
+#define _nouveau_engine_dtor _nouveau_subdev_dtor
+#define