Lines Matching refs:dscr
726 static void get_adma_description(SDHCIState *s, ADMADescr *dscr) in get_adma_description() argument
740 dscr->addr = (hwaddr)extract64(adma2, 32, 32) & ~0x3ull; in get_adma_description()
741 dscr->length = (uint16_t)extract64(adma2, 16, 16); in get_adma_description()
742 dscr->attr = (uint8_t)extract64(adma2, 0, 7); in get_adma_description()
743 dscr->incr = 8; in get_adma_description()
749 dscr->addr = (hwaddr)(adma1 & 0xFFFFF000); in get_adma_description()
750 dscr->attr = (uint8_t)extract32(adma1, 0, 7); in get_adma_description()
751 dscr->incr = 4; in get_adma_description()
752 if ((dscr->attr & SDHC_ADMA_ATTR_ACT_MASK) == SDHC_ADMA_ATTR_SET_LEN) { in get_adma_description()
753 dscr->length = (uint16_t)extract32(adma1, 12, 16); in get_adma_description()
755 dscr->length = 4 * KiB; in get_adma_description()
759 dma_memory_read(s->dma_as, entry_addr, &dscr->attr, 1, in get_adma_description()
761 dma_memory_read(s->dma_as, entry_addr + 2, &dscr->length, 2, in get_adma_description()
763 dscr->length = le16_to_cpu(dscr->length); in get_adma_description()
764 dma_memory_read(s->dma_as, entry_addr + 4, &dscr->addr, 8, in get_adma_description()
766 dscr->addr = le64_to_cpu(dscr->addr); in get_adma_description()
767 dscr->attr &= (uint8_t) ~0xC0; in get_adma_description()
768 dscr->incr = 12; in get_adma_description()
780 ADMADescr dscr = {}; in sdhci_do_adma() local
793 get_adma_description(s, &dscr); in sdhci_do_adma()
794 trace_sdhci_adma_loop(dscr.addr, dscr.length, dscr.attr); in sdhci_do_adma()
796 if ((dscr.attr & SDHC_ADMA_ATTR_VALID) == 0) { in sdhci_do_adma()
811 length = dscr.length ? dscr.length : 64 * KiB; in sdhci_do_adma()
813 switch (dscr.attr & SDHC_ADMA_ATTR_ACT_MASK) { in sdhci_do_adma()
830 res = dma_memory_write(s->dma_as, dscr.addr, in sdhci_do_adma()
837 dscr.addr += s->data_count - begin; in sdhci_do_adma()
859 res = dma_memory_read(s->dma_as, dscr.addr, in sdhci_do_adma()
866 dscr.addr += s->data_count - begin; in sdhci_do_adma()
888 s->admasysaddr += dscr.incr; in sdhci_do_adma()
892 s->admasysaddr = dscr.addr; in sdhci_do_adma()
896 s->admasysaddr += dscr.incr; in sdhci_do_adma()
900 if (dscr.attr & SDHC_ADMA_ATTR_INT) { in sdhci_do_adma()
906 if (sdhci_update_irq(s) && !(dscr.attr & SDHC_ADMA_ATTR_END)) { in sdhci_do_adma()
914 (s->blkcnt == 0)) || (dscr.attr & SDHC_ADMA_ATTR_END)) { in sdhci_do_adma()
916 if (length || ((dscr.attr & SDHC_ADMA_ATTR_END) && in sdhci_do_adma()