19#ifndef __PACKET2_VIF_H__
20#define __PACKET2_VIF_H__
23#include <packet2_types.h>
26#define MAKE_VIF_CODE(_immediate, _num, _cmd, _irq) ((u32)(_immediate) | ((u32)(_num) << 16) | ((u32)(_cmd) << 24) | ((u32)(_irq) << 31))
50 static inline void packet2_vif_open_unpack(
packet2_t *packet2,
enum UnpackMode mode, u32 vuAddr, u8 dblBuffered, u8 masked, u8 usigned, u8 irq)
54 packet2_add_u32(packet2,
55 MAKE_VIF_CODE(vuAddr | ((u32)usigned << 14) | ((u32)dblBuffered << 15),
57 mode | ((u32)masked << 4) | 0x60, irq));
68 static inline void packet2_vif_close_unpack_manual(
packet2_t *packet2, u32 unpack_num)
71 assert(((u32)packet2->
next & 0x3) == 0);
73 assert(unpack_num <= 256);
95 static inline void packet2_vif_open_direct(
packet2_t *packet2, u8 irq)
99 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_DIRECT, irq));
109 static inline void packet2_vif_close_direct_manual(
packet2_t *packet2, u32 qwords)
123 static inline void packet2_vif_close_direct_auto(
packet2_t *packet2)
125 return packet2_vif_close_direct_manual(packet2, ((u32)packet2->
next - ((u32)packet2->
vif_code_opened_at + 4)) >> 4);
135 static inline void packet2_vif_nop(
packet2_t *packet2, u8 irq)
137 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_NOP, irq));
144 static inline void packet2_vif_pad96(
packet2_t *packet2)
146 packet2_pad96(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_NOP, 0));
153 static inline void packet2_vif_pad128(
packet2_t *packet2)
155 packet2_pad128(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_NOP, 0));
167 static inline void packet2_vif_mpg(
packet2_t *packet2, u32 num, u32 addr, u8 irq)
169 packet2_add_u32(packet2, MAKE_VIF_CODE(addr, num,
P2_VIF_MPG, irq));
181 static inline void packet2_vif_stcycl(
packet2_t *packet2, u32 wl, u32 cl, u8 irq)
183 packet2_add_u32(packet2, MAKE_VIF_CODE(cl | (wl << 8), 0,
P2_VIF_STCYCL, irq));
194 static inline void packet2_vif_offset(
packet2_t *packet2, u32 offset, u8 irq)
196 packet2_add_u32(packet2, MAKE_VIF_CODE(offset, 0,
P2_VIF_OFFSET, irq));
207 static inline void packet2_vif_base(
packet2_t *packet2, u32 base, u8 irq)
209 packet2_add_u32(packet2, MAKE_VIF_CODE(base, 0,
P2_VIF_BASE, irq));
219 static inline void packet2_vif_flush(
packet2_t *packet2, u8 irq)
221 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_FLUSH, irq));
232 static inline void packet2_vif_mscal(
packet2_t *packet2, u32 addr, u8 irq)
234 packet2_add_u32(packet2, MAKE_VIF_CODE(addr, 0,
P2_VIF_MSCAL, irq));
244 static inline void packet2_vif_mscnt(
packet2_t *packet2, u8 irq)
246 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_MSCNT, irq));
257 static inline void packet2_vif_itop(
packet2_t *packet2, u32 itops, u8 irq)
259 packet2_add_u32(packet2, MAKE_VIF_CODE(itops, 0,
P2_VIF_ITOP, irq));
270 static inline void packet2_vif_stmod(
packet2_t *packet2, u32 mode, u8 irq)
272 packet2_add_u32(packet2, MAKE_VIF_CODE(mode, 0,
P2_VIF_STMOD, irq));
283 static inline void packet2_vif_mskpath3(
packet2_t *packet2, u32 mask, u8 irq)
285 packet2_add_u32(packet2, MAKE_VIF_CODE(mask, 0,
P2_VIF_MSKPATH3, irq));
296 static inline void packet2_vif_mark(
packet2_t *packet2, u32 value, u8 irq)
298 packet2_add_u32(packet2, MAKE_VIF_CODE(value, 0,
P2_VIF_MARK, irq));
308 static inline void packet2_vif_flushe(
packet2_t *packet2, u8 irq)
310 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_FLUSHE, irq));
320 static inline void packet2_vif_flusha(
packet2_t *packet2, u8 irq)
322 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_FLUSHA, irq));
333 static inline void packet2_vif_mscalf(
packet2_t *packet2, u32 addr, u8 irq)
335 packet2_add_u32(packet2, MAKE_VIF_CODE(addr, 0,
P2_VIF_MSCALF, irq));
346 static inline void packet2_vif_stmask(
packet2_t *packet2,
Mask mask, u8 irq)
348 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_STMASK, irq));
349 packet2_add_u32(packet2, mask.m);
360 static inline void packet2_vif_strow(
packet2_t *packet2,
const u32 *row_arr, u8 irq)
362 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_STROW, irq));
363 packet2_add_u32(packet2, row_arr[0]);
364 packet2_add_u32(packet2, row_arr[1]);
365 packet2_add_u32(packet2, row_arr[2]);
366 packet2_add_u32(packet2, row_arr[3]);
377 static inline void packet2_vif_stcol(
packet2_t *packet2,
const u32 *col_arr, u8 irq)
379 packet2_add_u32(packet2, MAKE_VIF_CODE(0, 0,
P2_VIF_STCOL, irq));
380 packet2_add_u32(packet2, col_arr[0]);
381 packet2_add_u32(packet2, col_arr[1]);
382 packet2_add_u32(packet2, col_arr[2]);
383 packet2_add_u32(packet2, col_arr[3]);
void packet2_vif_add_micro_program(packet2_t *packet2, u32 dest, u32 *start, u32 *end)
u32 packet2_vif_close_unpack_auto(packet2_t *packet2, u32 wl, u32 cl)
vif_code_t * vif_code_opened_at