19#ifndef __PACKET2_CHAIN_H__
20#define __PACKET2_CHAIN_H__
23#include <packet2_types.h>
26#define PACKET2_COUNT_QWC 1 << 16
48 static inline void packet2_chain_set_dma_tag(
dma_tag_t *tag, u32 qwc, u32 pce, u32
id, u8 irq,
const u128 *addr, u8 spr)
54 tag->
ADDR = (u64)((u32)addr);
74 static inline void packet2_chain_add_dma_tag(
packet2_t *packet2, u32 qwc, u32 pce,
enum DmaTagType id, u8 irq,
const u128 *addr, u8 spr)
76 assert(((u32)packet2->
next & 0xF) == 0);
79 if (qwc == PACKET2_COUNT_QWC)
81 packet2_chain_set_dma_tag((
dma_tag_t *)packet2->
next, 0, pce,
id, irq, addr, spr);
86 packet2_chain_set_dma_tag((
dma_tag_t *)packet2->
next, qwc, pce,
id, irq, addr, spr);
90 packet2_advance_next(packet2,
sizeof(
dma_tag_t));
92 packet2_advance_next(packet2,
sizeof(u64));
100 static inline void packet2_chain_close_tag(
packet2_t *packet2)
103 assert(((u32)packet2->
next & 0xF) == 0);
122 static inline void packet2_chain_open_cnt(
packet2_t *packet2, u8 irq, u32 pce, u8 spr)
124 packet2_chain_add_dma_tag(packet2, PACKET2_COUNT_QWC, pce,
P2_DMA_TAG_CNT, irq, 0, spr);
137 static inline void packet2_chain_open_end(
packet2_t *packet2, u8 irq, u32 pce)
139 packet2_chain_add_dma_tag(packet2, PACKET2_COUNT_QWC, pce,
P2_DMA_TAG_END, irq, 0, 0);
154 static inline void packet2_chain_ref(
packet2_t *packet2,
const void *ref_data, u32 qw_length, u8 irq, u8 spr, u32 pce)
156 assert(((u32)packet2->
next & 0xF) == 0);
157 packet2_chain_add_dma_tag(packet2, qw_length, pce,
P2_DMA_TAG_REF, irq, (
const u128 *)ref_data, spr);
170 static inline void packet2_chain_next(
packet2_t *packet2,
const dma_tag_t *next_tag, u8 irq, u8 spr, u32 pce)
172 assert(((u32)packet2->
next & 0xF) == 0);
173 packet2_chain_add_dma_tag(packet2, PACKET2_COUNT_QWC, pce,
P2_DMA_TAG_NEXT, irq, (u128 *)next_tag, spr);
188 static inline void packet2_chain_refs(
packet2_t *packet2,
const void *ref_data, u32 qw_length, u8 irq, u8 spr, u32 pce)
190 assert(((u32)packet2->
next & 0xF) == 0);
191 packet2_chain_add_dma_tag(packet2, qw_length, pce,
P2_DMA_TAG_REFS, irq, (
const u128 *)ref_data, spr);
206 static inline void packet2_chain_refe(
packet2_t *packet2,
const void *ref_data, u32 qw_length, u8 irq, u8 spr, u32 pce)
208 assert(((u32)packet2->
next & 0xF) == 0);
209 packet2_chain_add_dma_tag(packet2, qw_length, pce,
P2_DMA_TAG_REFE, irq, (
const u128 *)ref_data, spr);
223 static inline void packet2_chain_call(
packet2_t *packet2,
const void *next_tag, u8 irq, u8 spr, u32 pce)
225 assert(((u32)packet2->
next & 0xF) == 0);
226 packet2_chain_add_dma_tag(packet2, PACKET2_COUNT_QWC, pce,
P2_DMA_TAG_CALL, irq, (u128 *)next_tag, spr);
238 static inline void packet2_chain_ret(
packet2_t *packet2, u8 irq, u32 pce)
240 packet2_chain_add_dma_tag(packet2, PACKET2_COUNT_QWC, pce,
P2_DMA_TAG_RET, irq, 0, 0);
dma_tag_t * tag_opened_at