These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / include / nvkm / subdev / instmem.h
index 1bcb763..40f845e 100644 (file)
@@ -1,49 +1,30 @@
 #ifndef __NVKM_INSTMEM_H__
 #define __NVKM_INSTMEM_H__
 #include <core/subdev.h>
-
-struct nvkm_instobj {
-       struct nvkm_object base;
-       struct list_head head;
-       u32 *suspend;
-       u64 addr;
-       u32 size;
-};
-
-static inline struct nvkm_instobj *
-nv_memobj(void *obj)
-{
-#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
-       if (unlikely(!nv_iclass(obj, NV_MEMOBJ_CLASS)))
-               nv_assert("BAD CAST -> NvMemObj, %08x", nv_hclass(obj));
-#endif
-       return obj;
-}
+struct nvkm_memory;
 
 struct nvkm_instmem {
-       struct nvkm_subdev base;
-       struct list_head list;
+       const struct nvkm_instmem_func *func;
+       struct nvkm_subdev subdev;
 
+       spinlock_t lock;
+       struct list_head list;
        u32 reserved;
-       int (*alloc)(struct nvkm_instmem *, struct nvkm_object *,
-                    u32 size, u32 align, struct nvkm_object **);
+
+       struct nvkm_memory *vbios;
+       struct nvkm_ramht  *ramht;
+       struct nvkm_memory *ramro;
+       struct nvkm_memory *ramfc;
 };
 
-static inline struct nvkm_instmem *
-nvkm_instmem(void *obj)
-{
-       /* nv04/nv40 impls need to create objects in their constructor,
-        * which is before the subdev pointer is valid
-        */
-       if (nv_iclass(obj, NV_SUBDEV_CLASS) &&
-           nv_subidx(obj) == NVDEV_SUBDEV_INSTMEM)
-               return obj;
+u32 nvkm_instmem_rd32(struct nvkm_instmem *, u32 addr);
+void nvkm_instmem_wr32(struct nvkm_instmem *, u32 addr, u32 data);
+int nvkm_instobj_new(struct nvkm_instmem *, u32 size, u32 align, bool zero,
+                    struct nvkm_memory **);
 
-       return (void *)nvkm_subdev(obj, NVDEV_SUBDEV_INSTMEM);
-}
 
-extern struct nvkm_oclass *nv04_instmem_oclass;
-extern struct nvkm_oclass *nv40_instmem_oclass;
-extern struct nvkm_oclass *nv50_instmem_oclass;
-extern struct nvkm_oclass *gk20a_instmem_oclass;
+int nv04_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **);
+int nv40_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **);
+int nv50_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **);
+int gk20a_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **);
 #endif