Loading drivers/gpu/drm/nouveau/include/nvkm/core/gpuobj.h +12 −21 Original line number Diff line number Diff line #ifndef __NVKM_GPUOBJ_H__ #define __NVKM_GPUOBJ_H__ #include <core/object.h> #include <core/memory.h> #include <core/mm.h> struct nvkm_vma; struct nvkm_vm; Loading @@ -11,13 +12,23 @@ struct nvkm_vm; struct nvkm_gpuobj { struct nvkm_object object; struct nvkm_object *parent; struct nvkm_memory *memory; struct nvkm_gpuobj *parent; struct nvkm_mm_node *node; struct nvkm_mm heap; u32 flags; u64 addr; u32 size; const struct nvkm_gpuobj_func *func; }; struct nvkm_gpuobj_func { void (*acquire)(struct nvkm_gpuobj *); void (*release)(struct nvkm_gpuobj *); u32 (*rd32)(struct nvkm_gpuobj *, u32 offset); void (*wr32)(struct nvkm_gpuobj *, u32 offset, u32 data); }; static inline struct nvkm_gpuobj * Loading Loading @@ -60,24 +71,4 @@ int _nvkm_gpuobj_init(struct nvkm_object *); int _nvkm_gpuobj_fini(struct nvkm_object *, bool); u32 _nvkm_gpuobj_rd32(struct nvkm_object *, u64); void _nvkm_gpuobj_wr32(struct nvkm_object *, u64, u32); /* accessor macros - kmap()/done() must bracket use of the other accessor * macros to guarantee correct behaviour across all chipsets */ #define nvkm_kmap(o) do { \ struct nvkm_gpuobj *_gpuobj = (o); \ (void)_gpuobj; \ } while(0) #define nvkm_ro32(o,a) ({ \ u32 _data; \ nvkm_object_rd32(&(o)->object, (a), &_data); \ _data; \ }) #define nvkm_wo32(o,a,d) nvkm_object_wr32(&(o)->object, (a), (d)) #define nvkm_mo32(o,a,m,d) ({ \ u32 _addr = (a), _data = nvkm_ro32((o), _addr); \ nvkm_wo32((o), _addr, (_data & ~(m)) | (d)); \ _data; \ }) #define nvkm_done(o) nvkm_kmap(o) #endif drivers/gpu/drm/nouveau/include/nvkm/core/memory.h 0 → 100644 +53 −0 Original line number Diff line number Diff line #ifndef __NVKM_MEMORY_H__ #define __NVKM_MEMORY_H__ #include <core/os.h> struct nvkm_device; struct nvkm_vma; struct nvkm_vm; enum nvkm_memory_target { NVKM_MEM_TARGET_INST, NVKM_MEM_TARGET_VRAM, NVKM_MEM_TARGET_HOST, }; struct nvkm_memory { const struct nvkm_memory_func *func; }; struct nvkm_memory_func { void *(*dtor)(struct nvkm_memory *); enum nvkm_memory_target (*target)(struct nvkm_memory *); u64 (*addr)(struct nvkm_memory *); u64 (*size)(struct nvkm_memory *); void (*boot)(struct nvkm_memory *, struct nvkm_vm *); void __iomem *(*acquire)(struct nvkm_memory *); void (*release)(struct nvkm_memory *); u32 (*rd32)(struct nvkm_memory *, u64 offset); void (*wr32)(struct nvkm_memory *, u64 offset, u32 data); void (*map)(struct nvkm_memory *, struct nvkm_vma *, u64 offset); }; void nvkm_memory_ctor(const struct nvkm_memory_func *, struct nvkm_memory *); int nvkm_memory_new(struct nvkm_device *, enum nvkm_memory_target, u64 size, u32 align, bool zero, struct nvkm_memory **); void nvkm_memory_del(struct nvkm_memory **); #define nvkm_memory_target(p) (p)->func->target(p) #define nvkm_memory_addr(p) (p)->func->addr(p) #define nvkm_memory_size(p) (p)->func->size(p) #define nvkm_memory_boot(p,v) (p)->func->boot((p),(v)) #define nvkm_memory_map(p,v,o) (p)->func->map((p),(v),(o)) /* accessor macros - kmap()/done() must bracket use of the other accessor * macros to guarantee correct behaviour across all chipsets */ #define nvkm_kmap(o) (o)->func->acquire(o) #define nvkm_ro32(o,a) (o)->func->rd32((o), (a)) #define nvkm_wo32(o,a,d) (o)->func->wr32((o), (a), (d)) #define nvkm_mo32(o,a,m,d) ({ \ u32 _addr = (a), _data = nvkm_ro32((o), _addr); \ nvkm_wo32((o), _addr, (_data & ~(m)) | (d)); \ _data; \ }) #define nvkm_done(o) (o)->func->release(o) #endif drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h +2 −7 Original line number Diff line number Diff line Loading @@ -7,13 +7,8 @@ struct nvkm_vma; struct nvkm_bar { struct nvkm_subdev subdev; int (*alloc)(struct nvkm_bar *, struct nvkm_object *, struct nvkm_mem *, struct nvkm_object **); int (*kmap)(struct nvkm_bar *, struct nvkm_mem *, u32 flags, struct nvkm_vma *); int (*umap)(struct nvkm_bar *, struct nvkm_mem *, u32 flags, struct nvkm_vma *); struct nvkm_vm *(*kmap)(struct nvkm_bar *); int (*umap)(struct nvkm_bar *, u64 size, int type, struct nvkm_vma *); void (*unmap)(struct nvkm_bar *, struct nvkm_vma *); void (*flush)(struct nvkm_bar *); Loading drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h +8 −19 Original line number Diff line number Diff line #ifndef __NVKM_INSTMEM_H__ #define __NVKM_INSTMEM_H__ #include <core/subdev.h> struct nvkm_instobj { struct nvkm_object object; 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 BUG_ON(!nv_iclass(obj, NV_MEMOBJ_CLASS)); #endif return obj; } struct nvkm_memory; struct nvkm_instmem { struct nvkm_subdev subdev; struct list_head list; u32 reserved; int (*alloc)(struct nvkm_instmem *, struct nvkm_object *, u32 size, u32 align, struct nvkm_object **); int (*alloc)(struct nvkm_instmem *, u32 size, u32 align, bool zero, struct nvkm_memory **); const struct nvkm_instmem_func *func; struct nvkm_gpuobj *vbios; struct nvkm_ramht *ramht; struct nvkm_gpuobj *ramro; struct nvkm_gpuobj *ramfc; }; struct nvkm_instmem_func { Loading drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h +1 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,7 @@ int nvkm_vm_create(struct nvkm_mmu *, u64 offset, u64 length, u64 mm_offset, int nvkm_vm_new(struct nvkm_device *, u64 offset, u64 length, u64 mm_offset, struct lock_class_key *, struct nvkm_vm **); int nvkm_vm_ref(struct nvkm_vm *, struct nvkm_vm **, struct nvkm_gpuobj *pgd); int nvkm_vm_boot(struct nvkm_vm *, u64 size); int nvkm_vm_get(struct nvkm_vm *, u64 size, u32 page_shift, u32 access, struct nvkm_vma *); void nvkm_vm_put(struct nvkm_vma *); Loading Loading
drivers/gpu/drm/nouveau/include/nvkm/core/gpuobj.h +12 −21 Original line number Diff line number Diff line #ifndef __NVKM_GPUOBJ_H__ #define __NVKM_GPUOBJ_H__ #include <core/object.h> #include <core/memory.h> #include <core/mm.h> struct nvkm_vma; struct nvkm_vm; Loading @@ -11,13 +12,23 @@ struct nvkm_vm; struct nvkm_gpuobj { struct nvkm_object object; struct nvkm_object *parent; struct nvkm_memory *memory; struct nvkm_gpuobj *parent; struct nvkm_mm_node *node; struct nvkm_mm heap; u32 flags; u64 addr; u32 size; const struct nvkm_gpuobj_func *func; }; struct nvkm_gpuobj_func { void (*acquire)(struct nvkm_gpuobj *); void (*release)(struct nvkm_gpuobj *); u32 (*rd32)(struct nvkm_gpuobj *, u32 offset); void (*wr32)(struct nvkm_gpuobj *, u32 offset, u32 data); }; static inline struct nvkm_gpuobj * Loading Loading @@ -60,24 +71,4 @@ int _nvkm_gpuobj_init(struct nvkm_object *); int _nvkm_gpuobj_fini(struct nvkm_object *, bool); u32 _nvkm_gpuobj_rd32(struct nvkm_object *, u64); void _nvkm_gpuobj_wr32(struct nvkm_object *, u64, u32); /* accessor macros - kmap()/done() must bracket use of the other accessor * macros to guarantee correct behaviour across all chipsets */ #define nvkm_kmap(o) do { \ struct nvkm_gpuobj *_gpuobj = (o); \ (void)_gpuobj; \ } while(0) #define nvkm_ro32(o,a) ({ \ u32 _data; \ nvkm_object_rd32(&(o)->object, (a), &_data); \ _data; \ }) #define nvkm_wo32(o,a,d) nvkm_object_wr32(&(o)->object, (a), (d)) #define nvkm_mo32(o,a,m,d) ({ \ u32 _addr = (a), _data = nvkm_ro32((o), _addr); \ nvkm_wo32((o), _addr, (_data & ~(m)) | (d)); \ _data; \ }) #define nvkm_done(o) nvkm_kmap(o) #endif
drivers/gpu/drm/nouveau/include/nvkm/core/memory.h 0 → 100644 +53 −0 Original line number Diff line number Diff line #ifndef __NVKM_MEMORY_H__ #define __NVKM_MEMORY_H__ #include <core/os.h> struct nvkm_device; struct nvkm_vma; struct nvkm_vm; enum nvkm_memory_target { NVKM_MEM_TARGET_INST, NVKM_MEM_TARGET_VRAM, NVKM_MEM_TARGET_HOST, }; struct nvkm_memory { const struct nvkm_memory_func *func; }; struct nvkm_memory_func { void *(*dtor)(struct nvkm_memory *); enum nvkm_memory_target (*target)(struct nvkm_memory *); u64 (*addr)(struct nvkm_memory *); u64 (*size)(struct nvkm_memory *); void (*boot)(struct nvkm_memory *, struct nvkm_vm *); void __iomem *(*acquire)(struct nvkm_memory *); void (*release)(struct nvkm_memory *); u32 (*rd32)(struct nvkm_memory *, u64 offset); void (*wr32)(struct nvkm_memory *, u64 offset, u32 data); void (*map)(struct nvkm_memory *, struct nvkm_vma *, u64 offset); }; void nvkm_memory_ctor(const struct nvkm_memory_func *, struct nvkm_memory *); int nvkm_memory_new(struct nvkm_device *, enum nvkm_memory_target, u64 size, u32 align, bool zero, struct nvkm_memory **); void nvkm_memory_del(struct nvkm_memory **); #define nvkm_memory_target(p) (p)->func->target(p) #define nvkm_memory_addr(p) (p)->func->addr(p) #define nvkm_memory_size(p) (p)->func->size(p) #define nvkm_memory_boot(p,v) (p)->func->boot((p),(v)) #define nvkm_memory_map(p,v,o) (p)->func->map((p),(v),(o)) /* accessor macros - kmap()/done() must bracket use of the other accessor * macros to guarantee correct behaviour across all chipsets */ #define nvkm_kmap(o) (o)->func->acquire(o) #define nvkm_ro32(o,a) (o)->func->rd32((o), (a)) #define nvkm_wo32(o,a,d) (o)->func->wr32((o), (a), (d)) #define nvkm_mo32(o,a,m,d) ({ \ u32 _addr = (a), _data = nvkm_ro32((o), _addr); \ nvkm_wo32((o), _addr, (_data & ~(m)) | (d)); \ _data; \ }) #define nvkm_done(o) (o)->func->release(o) #endif
drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h +2 −7 Original line number Diff line number Diff line Loading @@ -7,13 +7,8 @@ struct nvkm_vma; struct nvkm_bar { struct nvkm_subdev subdev; int (*alloc)(struct nvkm_bar *, struct nvkm_object *, struct nvkm_mem *, struct nvkm_object **); int (*kmap)(struct nvkm_bar *, struct nvkm_mem *, u32 flags, struct nvkm_vma *); int (*umap)(struct nvkm_bar *, struct nvkm_mem *, u32 flags, struct nvkm_vma *); struct nvkm_vm *(*kmap)(struct nvkm_bar *); int (*umap)(struct nvkm_bar *, u64 size, int type, struct nvkm_vma *); void (*unmap)(struct nvkm_bar *, struct nvkm_vma *); void (*flush)(struct nvkm_bar *); Loading
drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h +8 −19 Original line number Diff line number Diff line #ifndef __NVKM_INSTMEM_H__ #define __NVKM_INSTMEM_H__ #include <core/subdev.h> struct nvkm_instobj { struct nvkm_object object; 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 BUG_ON(!nv_iclass(obj, NV_MEMOBJ_CLASS)); #endif return obj; } struct nvkm_memory; struct nvkm_instmem { struct nvkm_subdev subdev; struct list_head list; u32 reserved; int (*alloc)(struct nvkm_instmem *, struct nvkm_object *, u32 size, u32 align, struct nvkm_object **); int (*alloc)(struct nvkm_instmem *, u32 size, u32 align, bool zero, struct nvkm_memory **); const struct nvkm_instmem_func *func; struct nvkm_gpuobj *vbios; struct nvkm_ramht *ramht; struct nvkm_gpuobj *ramro; struct nvkm_gpuobj *ramfc; }; struct nvkm_instmem_func { Loading
drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h +1 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,7 @@ int nvkm_vm_create(struct nvkm_mmu *, u64 offset, u64 length, u64 mm_offset, int nvkm_vm_new(struct nvkm_device *, u64 offset, u64 length, u64 mm_offset, struct lock_class_key *, struct nvkm_vm **); int nvkm_vm_ref(struct nvkm_vm *, struct nvkm_vm **, struct nvkm_gpuobj *pgd); int nvkm_vm_boot(struct nvkm_vm *, u64 size); int nvkm_vm_get(struct nvkm_vm *, u64 size, u32 page_shift, u32 access, struct nvkm_vma *); void nvkm_vm_put(struct nvkm_vma *); Loading