dmb
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
dmb ish ;\
#define DMB dmb ish
#define DMBST dmb ishst
dmb(sy);
dmb(ish); /* store-release matches cpu_hatched_p */
dmb(ish); /* store-release */
dmb(ish);
dmb(ish); /* store-release matches locore.S/armv6_start.S */
ARMREG_WRITE_INLINE(dmb, "p15,0,%0,c7,c10,5") /* Data Memory Barrier */
#define dma_r_r() dmb(oshld) // actually r_rw
#define dma_w_w() dmb(oshst)
#define dma_rw_w() dmb(osh) // actually rw_rw
#define dma_r_r() dmb(osh) // actually rw_rw
#define dma_w_w() dmb(oshst)
#define dma_rw_w() dmb(osh) // actually rw_rw
struct dmover_backend *dmb = &sc->sc_dmb;
dreq = TAILQ_FIRST(&dmb->dmb_pendreqs);
dmover_backend_remque(dmb, dreq);
iopaau_process(struct dmover_backend *dmb)
struct iopaau_softc *sc = dmb->dmb_cookie;
dmac_dmover_process(struct dmover_backend *dmb)
struct pxadmac_softc *sc = dmb->dmb_cookie;
dmac_dmover_run(struct dmover_backend *dmb)
sc = dmb->dmb_cookie;
while ((dreq = TAILQ_FIRST(&dmb->dmb_pendreqs)) != NULL &&
dmover_backend_remque(dmb, dreq);
dmb(ishld);
dmb(ishst);
dmb(ish);
dmover_backend_unregister(struct dmover_backend *dmb)
if (dmb->dmb_nsessions)
TAILQ_REMOVE(&dmover_backend_list, dmb, dmb_list);
struct dmover_backend *dmb, *best_dmb = NULL;
for (dmb = TAILQ_FIRST(&dmover_backend_list); dmb != NULL;
dmb = TAILQ_NEXT(dmb, dmb_list)) {
algdesc = dmover_algdesc_lookup(dmb->dmb_algdescs,
dmb->dmb_nalgdescs, type);
best_dmb = dmb;
if (dmb->dmb_speed >= best_dmb->dmb_speed) {
if (dmb->dmb_speed > best_dmb->dmb_speed) {
best_dmb = dmb;
if (best_dmb->dmb_nsessions > dmb->dmb_nsessions) {
best_dmb = dmb;
struct dmover_backend *dmb;
dmb = dses->__dses_assignment.das_backend;
dmb->dmb_nsessions--;
dmover_backend_register(struct dmover_backend *dmb)
LIST_INIT(&dmb->dmb_sessions);
dmb->dmb_nsessions = 0;
TAILQ_INIT(&dmb->dmb_pendreqs);
dmb->dmb_npendreqs = 0;
TAILQ_INSERT_TAIL(&dmover_backend_list, dmb, dmb_list);
dmb = das->das_backend;
dmover_backend_insque(dmb, dreq);
(*dmb->dmb_process)(das->das_backend);
struct dmover_backend *dmb;
#define dmover_backend_insque(dmb, dreq) \
TAILQ_INSERT_TAIL(&(dmb)->dmb_pendreqs, (dreq), dreq_dmbq); \
(dmb)->dmb_npendreqs++; \
#define dmover_backend_remque(dmb, dreq) \
TAILQ_REMOVE(&(dmb)->dmb_pendreqs, (dreq), dreq_dmbq); \
(dmb)->dmb_npendreqs--; \
struct dmover_backend *dmb = arg;
dreq = TAILQ_FIRST(&dmb->dmb_pendreqs);
dmover_backend_remque(dmb, dreq);
swdmover_process(struct dmover_backend *dmb)
if (TAILQ_EMPTY(&dmb->dmb_pendreqs) == 0)
gtidmac_process(struct dmover_backend *dmb)
struct gtidmac_softc *sc = dmb->dmb_cookie;
gtidmac_dmover_run(dmb);
gtidmac_dmover_run(struct dmover_backend *dmb)
struct gtidmac_softc *sc = dmb->dmb_cookie;
dreq = TAILQ_FIRST(&dmb->dmb_pendreqs);
dmover_backend_remque(dmb, dreq);
struct dmover_backend *dmb;
dmb = dreq->dreq_assignment->das_backend;
sc = dmb->dmb_cookie;
gtidmac_dmover_run(dmb);