object.h revision 1.6
1202375Srdivacky/* $NetBSD: object.h,v 1.6 2021/12/18 23:45:33 riastradh Exp $ */ 2202375Srdivacky 3202375Srdivacky/* SPDX-License-Identifier: MIT */ 4202375Srdivacky#ifndef __NVKM_OBJECT_H__ 5202375Srdivacky#define __NVKM_OBJECT_H__ 6202375Srdivacky#include <core/oclass.h> 7202375Srdivackystruct nvkm_event; 8202375Srdivackystruct nvkm_gpuobj; 9202375Srdivacky 10202375Srdivackystruct nvkm_object { 11202375Srdivacky const struct nvkm_object_func *func; 12202375Srdivacky struct nvkm_client *client; 13202375Srdivacky struct nvkm_engine *engine; 14202375Srdivacky s32 oclass; 15202375Srdivacky u32 handle; 16249423Sdim 17221345Sdim struct list_head head; 18202375Srdivacky struct list_head tree; 19249423Sdim u8 route; 20202375Srdivacky u64 token; 21202375Srdivacky u64 object; 22202375Srdivacky struct rb_node node; 23202375Srdivacky#ifdef __NetBSD__ 24202375Srdivacky bool on_tree; 25249423Sdim#endif 26249423Sdim}; 27202375Srdivacky 28202375Srdivackyenum nvkm_object_map { 29202375Srdivacky NVKM_OBJECT_MAP_IO, 30202375Srdivacky NVKM_OBJECT_MAP_VA 31202375Srdivacky}; 32202375Srdivacky 33202375Srdivackystruct nvkm_object_func { 34202375Srdivacky void *(*dtor)(struct nvkm_object *); 35202375Srdivacky int (*init)(struct nvkm_object *); 36202375Srdivacky int (*fini)(struct nvkm_object *, bool suspend); 37202375Srdivacky int (*mthd)(struct nvkm_object *, u32 mthd, void *data, u32 size); 38202375Srdivacky int (*ntfy)(struct nvkm_object *, u32 mthd, struct nvkm_event **); 39249423Sdim#ifdef __NetBSD__ 40202375Srdivacky int (*map)(struct nvkm_object *, bus_space_tag_t *tagp, 41202375Srdivacky void *argv, u32 argc, 42202375Srdivacky enum nvkm_object_map *, u64 *addr, u64 *size); 43249423Sdim#else 44202375Srdivacky int (*map)(struct nvkm_object *, void *argv, u32 argc, 45202375Srdivacky enum nvkm_object_map *, u64 *addr, u64 *size); 46202375Srdivacky#endif 47249423Sdim int (*unmap)(struct nvkm_object *); 48202375Srdivacky int (*rd08)(struct nvkm_object *, u64 addr, u8 *data); 49202375Srdivacky int (*rd16)(struct nvkm_object *, u64 addr, u16 *data); 50202375Srdivacky int (*rd32)(struct nvkm_object *, u64 addr, u32 *data); 51202375Srdivacky int (*wr08)(struct nvkm_object *, u64 addr, u8 data); 52202375Srdivacky int (*wr16)(struct nvkm_object *, u64 addr, u16 data); 53202375Srdivacky int (*wr32)(struct nvkm_object *, u64 addr, u32 data); 54202375Srdivacky int (*bind)(struct nvkm_object *, struct nvkm_gpuobj *, int align, 55202375Srdivacky struct nvkm_gpuobj **); 56202375Srdivacky int (*sclass)(struct nvkm_object *, int index, struct nvkm_oclass *); 57202375Srdivacky}; 58202375Srdivacky 59249423Sdimvoid nvkm_object_ctor(const struct nvkm_object_func *, 60202375Srdivacky const struct nvkm_oclass *, struct nvkm_object *); 61202375Srdivackyint nvkm_object_new_(const struct nvkm_object_func *, 62202375Srdivacky const struct nvkm_oclass *, void *data, u32 size, 63202375Srdivacky struct nvkm_object **); 64202375Srdivackyint nvkm_object_new(const struct nvkm_oclass *, void *data, u32 size, 65202375Srdivacky struct nvkm_object **); 66202375Srdivackyvoid nvkm_object_del(struct nvkm_object **); 67202375Srdivackyvoid *nvkm_object_dtor(struct nvkm_object *); 68202375Srdivackyint nvkm_object_init(struct nvkm_object *); 69202375Srdivackyint nvkm_object_fini(struct nvkm_object *, bool suspend); 70202375Srdivackyint nvkm_object_mthd(struct nvkm_object *, u32 mthd, void *data, u32 size); 71202375Srdivackyint nvkm_object_ntfy(struct nvkm_object *, u32 mthd, struct nvkm_event **); 72202375Srdivacky#ifdef __NetBSD__ 73202375Srdivackyint nvkm_object_map(struct nvkm_object *, bus_space_tag_t *, 74202375Srdivacky void *argv, u32 argc, 75202375Srdivacky enum nvkm_object_map *, u64 *addr, u64 *size); 76202375Srdivacky#else 77202375Srdivackyint nvkm_object_map(struct nvkm_object *, void *argv, u32 argc, 78202375Srdivacky enum nvkm_object_map *, u64 *addr, u64 *size); 79202375Srdivacky#endif 80202375Srdivackyint nvkm_object_unmap(struct nvkm_object *); 81202375Srdivackyint nvkm_object_rd08(struct nvkm_object *, u64 addr, u8 *data); 82202375Srdivackyint nvkm_object_rd16(struct nvkm_object *, u64 addr, u16 *data); 83202375Srdivackyint nvkm_object_rd32(struct nvkm_object *, u64 addr, u32 *data); 84202375Srdivackyint nvkm_object_wr08(struct nvkm_object *, u64 addr, u8 data); 85202375Srdivackyint nvkm_object_wr16(struct nvkm_object *, u64 addr, u16 data); 86202375Srdivackyint nvkm_object_wr32(struct nvkm_object *, u64 addr, u32 data); 87202375Srdivackyint nvkm_object_bind(struct nvkm_object *, struct nvkm_gpuobj *, int align, 88202375Srdivacky struct nvkm_gpuobj **); 89202375Srdivacky 90202375Srdivackybool nvkm_object_insert(struct nvkm_object *); 91202375Srdivackyvoid nvkm_object_remove(struct nvkm_object *); 92202375Srdivackystruct nvkm_object *nvkm_object_search(struct nvkm_client *, u64 object, 93234353Sdim const struct nvkm_object_func *); 94249423Sdim#endif 95202375Srdivacky