drm/nouveau/core: add nvenc plumbing
authorBen Skeggs <bskeggs@redhat.com>
Fri, 11 Mar 2016 03:09:28 +0000 (13:09 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 14 Mar 2016 00:13:44 +0000 (10:13 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/core/device.h
drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h [new file with mode: 0644]
drivers/gpu/drm/nouveau/nvkm/core/subdev.c
drivers/gpu/drm/nouveau/nvkm/engine/Kbuild
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h
drivers/gpu/drm/nouveau/nvkm/engine/nvenc/Kbuild [new file with mode: 0644]

index 0e2a5be..f1eabb8 100644 (file)
@@ -46,6 +46,11 @@ enum nvkm_devidx {
        NVKM_ENGINE_MSPDEC,
        NVKM_ENGINE_MSPPP,
        NVKM_ENGINE_MSVLD,
+
+       NVKM_ENGINE_NVENC0,
+       NVKM_ENGINE_NVENC1,
+       NVKM_ENGINE_NVENC_LAST = NVKM_ENGINE_NVENC1,
+
        NVKM_ENGINE_PM,
        NVKM_ENGINE_SEC,
        NVKM_ENGINE_SW,
@@ -141,6 +146,7 @@ struct nvkm_device {
        struct nvkm_engine *mspdec;
        struct nvkm_engine *msppp;
        struct nvkm_engine *msvld;
+       struct nvkm_engine *nvenc[2];
        struct nvkm_pm *pm;
        struct nvkm_engine *sec;
        struct nvkm_sw *sw;
@@ -208,6 +214,7 @@ struct nvkm_device_chip {
        int (*mspdec  )(struct nvkm_device *, int idx, struct nvkm_engine **);
        int (*msppp   )(struct nvkm_device *, int idx, struct nvkm_engine **);
        int (*msvld   )(struct nvkm_device *, int idx, struct nvkm_engine **);
+       int (*nvenc[2])(struct nvkm_device *, int idx, struct nvkm_engine **);
        int (*pm      )(struct nvkm_device *, int idx, struct nvkm_pm **);
        int (*sec     )(struct nvkm_device *, int idx, struct nvkm_engine **);
        int (*sw      )(struct nvkm_device *, int idx, struct nvkm_sw **);
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h
new file mode 100644 (file)
index 0000000..8a81932
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __NVKM_NVENC_H__
+#define __NVKM_NVENC_H__
+#include <core/engine.h>
+#endif
index 0115d04..b66995b 100644 (file)
@@ -67,6 +67,8 @@ nvkm_subdev_name[NVKM_SUBDEV_NR] = {
        [NVKM_ENGINE_MSPDEC  ] = "mspdec",
        [NVKM_ENGINE_MSPPP   ] = "msppp",
        [NVKM_ENGINE_MSVLD   ] = "msvld",
+       [NVKM_ENGINE_NVENC0  ] = "nvenc0",
+       [NVKM_ENGINE_NVENC1  ] = "nvenc1",
        [NVKM_ENGINE_PM      ] = "pm",
        [NVKM_ENGINE_SEC     ] = "sec",
        [NVKM_ENGINE_SW      ] = "sw",
index 0650aed..9ea9e0b 100644 (file)
@@ -14,6 +14,7 @@ include $(src)/nvkm/engine/msenc/Kbuild
 include $(src)/nvkm/engine/mspdec/Kbuild
 include $(src)/nvkm/engine/msppp/Kbuild
 include $(src)/nvkm/engine/msvld/Kbuild
+include $(src)/nvkm/engine/nvenc/Kbuild
 include $(src)/nvkm/engine/pm/Kbuild
 include $(src)/nvkm/engine/sec/Kbuild
 include $(src)/nvkm/engine/sw/Kbuild
index dcb4cf4..e72a7bc 100644 (file)
@@ -2167,27 +2167,29 @@ nvkm_device_engine(struct nvkm_device *device, int index)
 
        switch (index) {
 #define _(n,p,m) case NVKM_ENGINE_##n: if (p) return (m); break
-       _(BSP    , device->bsp    ,  device->bsp);
-       _(CE0    , device->ce[0]  ,  device->ce[0]);
-       _(CE1    , device->ce[1]  ,  device->ce[1]);
-       _(CE2    , device->ce[2]  ,  device->ce[2]);
-       _(CIPHER , device->cipher ,  device->cipher);
-       _(DISP   , device->disp   , &device->disp->engine);
-       _(DMAOBJ , device->dma    , &device->dma->engine);
-       _(FIFO   , device->fifo   , &device->fifo->engine);
-       _(GR     , device->gr     , &device->gr->engine);
-       _(IFB    , device->ifb    ,  device->ifb);
-       _(ME     , device->me     ,  device->me);
-       _(MPEG   , device->mpeg   ,  device->mpeg);
-       _(MSENC  , device->msenc  ,  device->msenc);
-       _(MSPDEC , device->mspdec ,  device->mspdec);
-       _(MSPPP  , device->msppp  ,  device->msppp);
-       _(MSVLD  , device->msvld  ,  device->msvld);
-       _(PM     , device->pm     , &device->pm->engine);
-       _(SEC    , device->sec    ,  device->sec);
-       _(SW     , device->sw     , &device->sw->engine);
-       _(VIC    , device->vic    ,  device->vic);
-       _(VP     , device->vp     ,  device->vp);
+       _(BSP    , device->bsp     ,  device->bsp);
+       _(CE0    , device->ce[0]   ,  device->ce[0]);
+       _(CE1    , device->ce[1]   ,  device->ce[1]);
+       _(CE2    , device->ce[2]   ,  device->ce[2]);
+       _(CIPHER , device->cipher  ,  device->cipher);
+       _(DISP   , device->disp    , &device->disp->engine);
+       _(DMAOBJ , device->dma     , &device->dma->engine);
+       _(FIFO   , device->fifo    , &device->fifo->engine);
+       _(GR     , device->gr      , &device->gr->engine);
+       _(IFB    , device->ifb     ,  device->ifb);
+       _(ME     , device->me      ,  device->me);
+       _(MPEG   , device->mpeg    ,  device->mpeg);
+       _(MSENC  , device->msenc   ,  device->msenc);
+       _(MSPDEC , device->mspdec  ,  device->mspdec);
+       _(MSPPP  , device->msppp   ,  device->msppp);
+       _(MSVLD  , device->msvld   ,  device->msvld);
+       _(NVENC0 , device->nvenc[0],  device->nvenc[0]);
+       _(NVENC1 , device->nvenc[1],  device->nvenc[1]);
+       _(PM     , device->pm      , &device->pm->engine);
+       _(SEC    , device->sec     ,  device->sec);
+       _(SW     , device->sw      , &device->sw->engine);
+       _(VIC    , device->vic     ,  device->vic);
+       _(VP     , device->vp      ,  device->vp);
 #undef _
        default:
                WARN_ON(1);
@@ -2616,6 +2618,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
                _(NVKM_ENGINE_MSPDEC  ,   mspdec);
                _(NVKM_ENGINE_MSPPP   ,    msppp);
                _(NVKM_ENGINE_MSVLD   ,    msvld);
+               _(NVKM_ENGINE_NVENC0  , nvenc[0]);
+               _(NVKM_ENGINE_NVENC1  , nvenc[1]);
                _(NVKM_ENGINE_PM      ,       pm);
                _(NVKM_ENGINE_SEC     ,      sec);
                _(NVKM_ENGINE_SW      ,       sw);
index a939659..83a4dd2 100644 (file)
@@ -36,6 +36,7 @@
 #include <engine/mspdec.h>
 #include <engine/msppp.h>
 #include <engine/msvld.h>
+#include <engine/nvenc.h>
 #include <engine/pm.h>
 #include <engine/sec.h>
 #include <engine/sw.h>
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/Kbuild
new file mode 100644 (file)
index 0000000..ad8f182
--- /dev/null
@@ -0,0 +1 @@
+#nvkm-y += nvkm/engine/nvenc/base.o