MCPcopy Create free account
hub / github.com/F-Stack/f-stack / bcm_sdhost_command

Function bcm_sdhost_command

freebsd/arm/broadcom/bcm2835/bcm2835_sdhost.c:665–809  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

663}
664
665static void
666bcm_sdhost_command(device_t dev, struct sdhci_slot *slot, uint16_t val)
667{
668 struct bcm_sdhost_softc *sc = device_get_softc(dev);
669 struct mmc_data *data = slot->curcmd->data;
670 uint16_t val2;
671 uint8_t opcode;
672 uint8_t flags;
673
674 mtx_assert(&sc->mtx, MA_OWNED);
675
676 if (RD4(sc, HC_COMMAND) & HC_CMD_ENABLE) {
677 panic("%s: HC_CMD_ENABLE on entry\n", __func__);
678 }
679
680 if (sc->cmdbusy == 1)
681 panic("%s: cmdbusy\n", __func__);
682
683 sc->cmdbusy = 1;
684
685 val2 = ((val >> 8) & HC_CMD_COMMAND_MASK) | HC_CMD_ENABLE;
686
687 opcode = val >> 8;
688 flags = val & 0xff;
689
690 if (opcode == MMC_APP_CMD)
691 sc->mmc_app_cmd = 1;
692
693 if ((flags & SDHCI_CMD_RESP_MASK) == SDHCI_CMD_RESP_LONG)
694 val2 |= HC_CMD_RESPONSE_LONG;
695 else if ((flags & SDHCI_CMD_RESP_MASK) == SDHCI_CMD_RESP_SHORT_BUSY)
696 /* XXX XXX when enabled, cmd 7 (select card) blocks forever */
697 ;/*val2 |= HC_CMD_BUSY; */
698 else if ((flags & SDHCI_CMD_RESP_MASK) == SDHCI_CMD_RESP_SHORT)
699 ;
700 else
701 val2 |= HC_CMD_RESPONSE_NONE;
702
703 if (val2 & HC_CMD_BUSY)
704 sc->sdhci_present_state |=
705 SDHCI_CMD_INHIBIT | SDHCI_DAT_INHIBIT;
706
707 if (data != NULL && data->flags & MMC_DATA_READ)
708 val2 |= HC_CMD_READ;
709 else if (data != NULL && data->flags & MMC_DATA_WRITE)
710 val2 |= HC_CMD_WRITE;
711
712 dprintf("%s: SDHCI_COMMAND_FLAGS --> HC_COMMAND %04x --> %04x\n",
713 __func__, val, val2);
714
715 if (opcode == MMC_READ_MULTIPLE_BLOCK ||
716 opcode == MMC_WRITE_MULTIPLE_BLOCK) {
717 u_int32_t save_sdarg;
718
719 dprintf("%s: issuing MMC_SET_BLOCK_COUNT: CMD %08x ARG %08x\n",
720 __func__, MMC_SET_BLOCK_COUNT | HC_CMD_ENABLE,
721 sc->sdhci_blockcount);
722

Callers 1

bcm_sdhost_write_2Function · 0.85

Calls 11

device_get_softcFunction · 0.85
mtx_assertFunction · 0.85
bcm_sdhost_waitcommandFunction · 0.85
bcm_sdhost_print_regsFunction · 0.85
RD4Function · 0.70
WR4Function · 0.70
panicFunction · 0.50
printfFunction · 0.50
mtx_unlockFunction · 0.50
mtx_lockFunction · 0.50

Tested by

no test coverage detected