1 #ifndef __NVKM_BUS_H__ 2 #define __NVKM_BUS_H__ 3 #include <core/subdev.h> 4 5 struct nvkm_bus_intr { 6 u32 stat; 7 u32 unit; 8 }; 9 10 struct nvkm_bus { 11 struct nvkm_subdev base; 12 int (*hwsq_exec)(struct nvkm_bus *, u32 *, u32); 13 u32 hwsq_size; 14 }; 15 16 static inline struct nvkm_bus * 17 nvkm_bus(void *obj) 18 { 19 return (void *)nvkm_subdev(obj, NVDEV_SUBDEV_BUS); 20 } 21 22 #define nvkm_bus_create(p, e, o, d) \ 23 nvkm_subdev_create_((p), (e), (o), 0, "PBUS", "master", \ 24 sizeof(**d), (void **)d) 25 #define nvkm_bus_destroy(p) \ 26 nvkm_subdev_destroy(&(p)->base) 27 #define nvkm_bus_init(p) \ 28 nvkm_subdev_init(&(p)->base) 29 #define nvkm_bus_fini(p, s) \ 30 nvkm_subdev_fini(&(p)->base, (s)) 31 32 #define _nvkm_bus_dtor _nvkm_subdev_dtor 33 #define _nvkm_bus_init _nvkm_subdev_init 34 #define _nvkm_bus_fini _nvkm_subdev_fini 35 36 extern struct nvkm_oclass *nv04_bus_oclass; 37 extern struct nvkm_oclass *nv31_bus_oclass; 38 extern struct nvkm_oclass *nv50_bus_oclass; 39 extern struct nvkm_oclass *g94_bus_oclass; 40 extern struct nvkm_oclass *gf100_bus_oclass; 41 42 /* interface to sequencer */ 43 struct nvkm_hwsq; 44 int nvkm_hwsq_init(struct nvkm_bus *, struct nvkm_hwsq **); 45 int nvkm_hwsq_fini(struct nvkm_hwsq **, bool exec); 46 void nvkm_hwsq_wr32(struct nvkm_hwsq *, u32 addr, u32 data); 47 void nvkm_hwsq_setf(struct nvkm_hwsq *, u8 flag, int data); 48 void nvkm_hwsq_wait(struct nvkm_hwsq *, u8 flag, u8 data); 49 void nvkm_hwsq_nsec(struct nvkm_hwsq *, u32 nsec); 50 #endif 51