tccb
struct tccb *tcw_get_tccb(struct tcw *tcw);
void tcw_set_tccb(struct tcw *tcw, struct tccb *tccb);
void tccb_init(struct tccb *tccb, size_t tccb_size, u32 sac);
struct dcw *tccb_add_dcw(struct tccb *tccb, size_t tccb_size, u8 cmd, u8 flags,
dma64_t tccb;
struct tccb *tccb;
tccb = tcw_get_tccb(tcw);
dcw = (struct dcw *)&tccb->tca[0];
static u32 calc_dcw_count(struct tccb *tccb)
size = tca_size(tccb);
dcw = (struct dcw *) &tccb->tca[offset];
struct tccb *tccb;
tccb = tcw_get_tccb(tcw);
tcat = (struct tccb_tcat *) &tccb->tca[tca_size(tccb)];
count = calc_dcw_count(tccb);
tcw->tccbl = (sizeof(struct tccb) + tca_size(tccb) +
void tcw_set_tccb(struct tcw *tcw, struct tccb *tccb)
tcw->tccb = virt_to_dma64(tccb);
void tccb_init(struct tccb *tccb, size_t size, u32 sac)
memset(tccb, 0, size);
tccb->tcah.format = TCCB_FORMAT_DEFAULT;
tccb->tcah.sac = sac;
tccb->tcah.tcal = 12;
struct dcw *tccb_add_dcw(struct tccb *tccb, size_t tccb_size, u8 cmd, u8 flags,
tca_offset = tca_size(tccb);
dcw = (struct dcw *) &tccb->tca[tca_offset];
tccb->tcah.tcal += size;
struct tccb *tcw_get_tccb(struct tcw *tcw)
return dma64_to_virt(tcw->tccb);
static inline size_t tca_size(struct tccb *tccb)
return tccb->tcah.tcal - 12;