1 #ifndef __NVKM_BUS_HWSQ_H__
2 #define __NVKM_BUS_HWSQ_H__
3 #include <subdev/bus.h>
6 struct nvkm_subdev
*subdev
;
7 struct nvkm_hwsq
*hwsq
;
15 u32 stride
; /* in bytes */
20 static inline struct hwsq_reg
21 hwsq_stride(u32 addr
, u32 stride
, u32 mask
)
23 return (struct hwsq_reg
) {
33 static inline struct hwsq_reg
34 hwsq_reg2(u32 addr1
, u32 addr2
)
36 return (struct hwsq_reg
) {
40 .stride
= addr2
- addr1
,
46 static inline struct hwsq_reg
49 return (struct hwsq_reg
) {
60 hwsq_init(struct hwsq
*ram
, struct nvkm_subdev
*subdev
)
64 ret
= nvkm_hwsq_init(subdev
, &ram
->hwsq
);
74 hwsq_exec(struct hwsq
*ram
, bool exec
)
78 ret
= nvkm_hwsq_fini(&ram
->hwsq
, exec
);
85 hwsq_rd32(struct hwsq
*ram
, struct hwsq_reg
*reg
)
87 struct nvkm_device
*device
= ram
->subdev
->device
;
88 if (reg
->sequence
!= ram
->sequence
)
89 reg
->data
= nvkm_rd32(device
, reg
->addr
);
94 hwsq_wr32(struct hwsq
*ram
, struct hwsq_reg
*reg
, u32 data
)
98 reg
->sequence
= ram
->sequence
;
101 for (mask
= reg
->mask
; mask
> 0; mask
= (mask
& ~1) >> 1) {
103 nvkm_hwsq_wr32(ram
->hwsq
, reg
->addr
+off
, reg
->data
);
110 hwsq_nuke(struct hwsq
*ram
, struct hwsq_reg
*reg
)
116 hwsq_mask(struct hwsq
*ram
, struct hwsq_reg
*reg
, u32 mask
, u32 data
)
118 u32 temp
= hwsq_rd32(ram
, reg
);
119 if (temp
!= ((temp
& ~mask
) | data
) || reg
->force
)
120 hwsq_wr32(ram
, reg
, (temp
& ~mask
) | data
);
125 hwsq_setf(struct hwsq
*ram
, u8 flag
, int data
)
127 nvkm_hwsq_setf(ram
->hwsq
, flag
, data
);
131 hwsq_wait(struct hwsq
*ram
, u8 flag
, u8 data
)
133 nvkm_hwsq_wait(ram
->hwsq
, flag
, data
);
137 hwsq_wait_vblank(struct hwsq
*ram
)
139 nvkm_hwsq_wait_vblank(ram
->hwsq
);
143 hwsq_nsec(struct hwsq
*ram
, u32 nsec
)
145 nvkm_hwsq_nsec(ram
->hwsq
, nsec
);
This page took 0.0398 seconds and 5 git commands to generate.