1#ifndef __NVKM_BUS_H__ 2#define __NVKM_BUS_H__ 3#include <core/subdev.h> 4 5struct nvkm_bus_intr { 6 u32 stat; 7 u32 unit; 8}; 9 10struct nvkm_bus { 11 struct nvkm_subdev base; 12 int (*hwsq_exec)(struct nvkm_bus *, u32 *, u32); 13 u32 hwsq_size; 14}; 15 16static inline struct nvkm_bus * 17nvkm_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 36extern struct nvkm_oclass *nv04_bus_oclass; 37extern struct nvkm_oclass *nv31_bus_oclass; 38extern struct nvkm_oclass *nv50_bus_oclass; 39extern struct nvkm_oclass *g94_bus_oclass; 40extern struct nvkm_oclass *gf100_bus_oclass; 41 42/* interface to sequencer */ 43struct nvkm_hwsq; 44int nvkm_hwsq_init(struct nvkm_bus *, struct nvkm_hwsq **); 45int nvkm_hwsq_fini(struct nvkm_hwsq **, bool exec); 46void nvkm_hwsq_wr32(struct nvkm_hwsq *, u32 addr, u32 data); 47void nvkm_hwsq_setf(struct nvkm_hwsq *, u8 flag, int data); 48void nvkm_hwsq_wait(struct nvkm_hwsq *, u8 flag, u8 data); 49void nvkm_hwsq_nsec(struct nvkm_hwsq *, u32 nsec); 50#endif 51