Lines Matching defs:ivar
185 static void mmc_format_card_id_string(struct mmc_ivars *ivar);
193 static void mmc_log_card(device_t dev, struct mmc_ivars *ivar, int newcard);
211 static int mmc_set_card_bus_width(struct mmc_softc *sc, struct mmc_ivars *ivar,
213 static int mmc_set_power_class(struct mmc_softc *sc, struct mmc_ivars *ivar);
215 static int mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar,
217 static int mmc_set_vccq(struct mmc_softc *sc, struct mmc_ivars *ivar,
219 static int mmc_switch_to_hs200(struct mmc_softc *sc, struct mmc_ivars *ivar,
221 static int mmc_switch_to_hs400(struct mmc_softc *sc, struct mmc_ivars *ivar,
224 static uint32_t mmc_timing_to_dtr(struct mmc_ivars *ivar,
318 struct mmc_ivars *ivar;
340 ivar = device_get_ivars(dev);
341 rca = ivar->rca;
369 (ivar->bus_width == bus_width_4) ? 4 :
370 (ivar->bus_width == bus_width_8) ? 8 : 1,
373 if (mmc_set_card_bus_width(sc, ivar, timing) !=
380 mmcbr_set_bus_width(busdev, ivar->bus_width);
382 if (mmc_set_vccq(sc, ivar, timing) != MMC_ERR_NONE) {
486 struct mmc_ivars *ivar;
510 ivar = device_get_ivars(dev);
513 ivar = device_get_ivars(sc->child_list[i]);
514 if (ivar->rca == sc->last_rca)
517 if (ivar->rca != sc->last_rca)
741 mmc_set_card_bus_width(struct mmc_softc *sc, struct mmc_ivars *ivar,
753 err = mmc_wait_for_app_cmd(sc->dev, sc->dev, ivar->rca, &cmd,
760 switch (ivar->bus_width) {
770 err = mmc_wait_for_app_cmd(sc->dev, sc->dev, ivar->rca, &cmd,
773 switch (ivar->bus_width) {
811 err = mmc_switch(sc->dev, sc->dev, ivar->rca,
813 ivar->cmd6_time, true);
819 mmc_set_power_class(struct mmc_softc *sc, struct mmc_ivars *ivar)
830 bus_width = ivar->bus_width;
831 if (mmcbr_get_mode(dev) != mode_mmc || ivar->csd.spec_vers < 4 ||
836 ext_csd = ivar->raw_ext_csd;
891 return (mmc_switch(dev, dev, ivar->rca, EXT_CSD_CMD_SET_NORMAL,
892 EXT_CSD_POWER_CLASS, value, ivar->cmd6_time, true));
896 mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar,
941 err = mmc_switch(sc->dev, sc->dev, ivar->rca,
943 ivar->cmd6_time, false);
948 err = mmc_switch_status(sc->dev, sc->dev, ivar->rca,
949 ivar->cmd6_time);
955 mmc_set_vccq(struct mmc_softc *sc, struct mmc_ivars *ivar,
959 if (isset(&ivar->vccq_120, timing))
961 else if (isset(&ivar->vccq_180, timing))
1124 mmc_format_card_id_string(struct mmc_ivars *ivar)
1146 c1 = (ivar->cid.oid >> 8) & 0x0ff;
1147 c2 = ivar->cid.oid & 0x0ff;
1151 snprintf(oidstr, sizeof(oidstr), "0x%04x", ivar->cid.oid);
1152 snprintf(ivar->card_sn_string, sizeof(ivar->card_sn_string),
1153 "%08X", ivar->cid.psn);
1154 snprintf(ivar->card_id_string, sizeof(ivar->card_id_string),
1156 ivar->mode == mode_sd ? "SD" : "MMC", ivar->high_cap ? "HC" : "",
1157 ivar->cid.pnm, ivar->cid.prv >> 4, ivar->cid.prv & 0x0f,
1158 ivar->cid.psn, ivar->cid.mdt_month, ivar->cid.mdt_year,
1159 ivar->cid.mid, oidstr);
1454 mmc_timing_to_dtr(struct mmc_ivars *ivar, enum mmc_bus_timing timing)
1459 return (ivar->tran_speed);
1461 return (ivar->hs_tran_speed);
1559 mmc_log_card(device_t dev, struct mmc_ivars *ivar, int newcard)
1564 ivar->rca, newcard ? " added" : "");
1565 device_printf(dev, " card: %s\n", ivar->card_id_string);
1567 if (isset(&ivar->timings, timing))
1570 device_printf(dev, " quirks: %b\n", ivar->quirks, MMC_QUIRKS_FMT);
1572 (ivar->bus_width == bus_width_1 ? 1 :
1573 (ivar->bus_width == bus_width_4 ? 4 : 8)),
1574 mmc_timing_to_dtr(ivar, timing) / 1000000,
1577 ivar->sec_count, ivar->erase_sector,
1578 ivar->read_only ? ", read-only" : "");
1586 struct mmc_ivars *ivar = NULL;
1612 ivar = device_get_ivars(sc->child_list[i]);
1613 if (memcmp(ivar->raw_cid, raw_cid, sizeof(raw_cid)) ==
1626 ivar = malloc(sizeof(struct mmc_ivars), M_DEVBUF,
1628 memcpy(ivar->raw_cid, raw_cid, sizeof(raw_cid));
1631 ivar->read_only = 1;
1632 ivar->bus_width = bus_width_1;
1633 setbit(&ivar->timings, bus_timing_normal);
1634 ivar->mode = mmcbr_get_mode(sc->dev);
1635 if (ivar->mode == mode_sd) {
1636 mmc_decode_cid_sd(ivar->raw_cid, &ivar->cid);
1643 ivar->rca = resp >> 16;
1645 err = mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
1654 newcard ? "New c" : "C", ivar->raw_csd[0],
1655 ivar->raw_csd[1], ivar->raw_csd[2],
1656 ivar->raw_csd[3]);
1657 err = mmc_decode_csd_sd(ivar->raw_csd, &ivar->csd);
1662 ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
1663 if (ivar->csd.csd_structure > 0)
1664 ivar->high_cap = 1;
1665 ivar->tran_speed = ivar->csd.tran_speed;
1666 ivar->erase_sector = ivar->csd.erase_sector *
1667 ivar->csd.write_bl_len / MMC_SECTOR_SIZE;
1669 err = mmc_send_status(sc->dev, sc->dev, ivar->rca,
1683 err = mmc_select_card(sc, ivar->rca);
1689 err = mmc_app_send_scr(sc, ivar->rca, ivar->raw_scr);
1695 mmc_app_decode_scr(ivar->raw_scr, &ivar->scr);
1697 if ((ivar->scr.sda_vsn >= 1) &&
1698 (ivar->csd.ccc & (1 << 10))) {
1704 setbit(&ivar->timings, bus_timing_hs);
1705 ivar->hs_tran_speed = SD_HS_MAX;
1722 (void)mmc_select_card(sc, ivar->rca);
1723 (void)mmc_app_sd_status(sc, ivar->rca,
1724 ivar->raw_sd_status);
1725 mmc_app_decode_sd_status(ivar->raw_sd_status,
1726 &ivar->sd_status);
1727 if (ivar->sd_status.au_size != 0) {
1728 ivar->erase_sector =
1729 16 << ivar->sd_status.au_size;
1733 (ivar->scr.bus_widths & SD_SCR_BUS_WIDTH_4))
1734 ivar->bus_width = bus_width_4;
1738 ivar->rca = rca++;
1739 err = mmc_set_relative_addr(sc, ivar->rca);
1745 err = mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
1753 newcard ? "New c" : "C", ivar->raw_csd[0],
1754 ivar->raw_csd[1], ivar->raw_csd[2],
1755 ivar->raw_csd[3]);
1757 mmc_decode_csd_mmc(ivar->raw_csd, &ivar->csd);
1758 ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
1759 ivar->tran_speed = ivar->csd.tran_speed;
1760 ivar->erase_sector = ivar->csd.erase_sector *
1761 ivar->csd.write_bl_len / MMC_SECTOR_SIZE;
1763 err = mmc_send_status(sc->dev, sc->dev, ivar->rca, &status);
1775 err = mmc_select_card(sc, ivar->rca);
1784 if (ivar->csd.spec_vers >= 4) {
1786 ivar->raw_ext_csd);
1792 ext_csd = ivar->raw_ext_csd;
1797 ivar->sec_count = sec_count;
1798 ivar->high_cap = 1;
1801 ivar->bus_width = mmc_test_bus_width(sc);
1805 setbit(&ivar->timings, bus_timing_hs);
1806 ivar->hs_tran_speed = MMC_TYPE_HS_52_MAX;
1808 setbit(&ivar->timings, bus_timing_hs);
1809 ivar->hs_tran_speed = MMC_TYPE_HS_26_MAX;
1813 setbit(&ivar->timings, bus_timing_mmc_ddr52);
1814 setbit(&ivar->vccq_120, bus_timing_mmc_ddr52);
1818 setbit(&ivar->timings, bus_timing_mmc_ddr52);
1819 setbit(&ivar->vccq_180, bus_timing_mmc_ddr52);
1823 setbit(&ivar->timings, bus_timing_mmc_hs200);
1824 setbit(&ivar->vccq_120, bus_timing_mmc_hs200);
1828 setbit(&ivar->timings, bus_timing_mmc_hs200);
1829 setbit(&ivar->vccq_180, bus_timing_mmc_hs200);
1833 ivar->bus_width == bus_width_8) {
1834 setbit(&ivar->timings, bus_timing_mmc_hs400);
1835 setbit(&ivar->vccq_120, bus_timing_mmc_hs400);
1839 ivar->bus_width == bus_width_8) {
1840 setbit(&ivar->timings, bus_timing_mmc_hs400);
1841 setbit(&ivar->vccq_180, bus_timing_mmc_hs400);
1847 ivar->bus_width == bus_width_8) {
1848 setbit(&ivar->timings, bus_timing_mmc_hs400es);
1849 setbit(&ivar->vccq_120, bus_timing_mmc_hs400es);
1855 ivar->bus_width == bus_width_8) {
1856 setbit(&ivar->timings, bus_timing_mmc_hs400es);
1857 setbit(&ivar->vccq_180, bus_timing_mmc_hs400es);
1863 ivar->cmd6_time = 500 * 1000;
1865 ivar->cmd6_time = 10 *
1869 ivar->erase_sector = 1024 *
1871 err = mmc_switch(sc->dev, sc->dev, ivar->rca,
1875 ivar->cmd6_time, true);
1885 mmc_decode_cid_mmc(ivar->raw_cid, &ivar->cid, rev >= 5);
1890 quirk->mid == ivar->cid.mid) &&
1892 quirk->oid == ivar->cid.oid) &&
1893 strncmp(quirk->pnm, ivar->cid.pnm,
1894 sizeof(ivar->cid.pnm)) == 0) {
1895 ivar->quirks = quirk->quirks;
1908 if (ivar->csd.read_bl_len != MMC_SECTOR_SIZE ||
1909 ivar->csd.write_bl_len != MMC_SECTOR_SIZE)
1912 mmc_format_card_id_string(ivar);
1915 mmc_log_card(sc->dev, ivar, newcard);
1920 device_set_ivars(child, ivar);
1931 free(ivar, M_DEVBUF);
1971 struct mmc_ivars *ivar;
1975 ivar = device_get_ivars(sc->child_list[i]);
1976 if (mmc_select_card(sc, ivar->rca) != MMC_ERR_NONE) {
1980 ivar->rca);
1986 free(ivar, M_DEVBUF);
2001 struct mmc_ivars *ivar;
2006 ivar = device_get_ivars(sc->child_list[i]);
2010 ivar->rca);
2019 free(ivar, M_DEVBUF);
2112 struct mmc_ivars *ivar;
2125 ivar = device_get_ivars(sc->child_list[i]);
2126 if (isclr(&ivar->timings, max_timing) ||
2130 if (isset(&ivar->timings, timing) &&
2138 dtr = mmc_timing_to_dtr(ivar, max_timing);
2164 ivar = device_get_ivars(sc->child_list[i]);
2165 if ((ivar->timings & ~(1 << bus_timing_normal)) == 0)
2168 rca = ivar->rca;
2177 if (mmc_set_vccq(sc, ivar, timing) != MMC_ERR_NONE) {
2186 if (mmc_set_card_bus_width(sc, ivar, timing) !=
2192 mmcbr_set_bus_width(dev, ivar->bus_width);
2195 if (mmc_switch_to_hs400(sc, ivar, max_dtr, timing) !=
2205 if (mmc_set_timing(sc, ivar, timing) != MMC_ERR_NONE) {
2217 if (mmc_set_card_bus_width(sc, ivar, timing) !=
2223 mmcbr_set_bus_width(dev, ivar->bus_width);
2225 if (mmc_set_vccq(sc, ivar, timing) != MMC_ERR_NONE) {
2252 if (hs400 == true && mmc_switch_to_hs400(sc, ivar, max_dtr,
2261 if (mmc_set_power_class(sc, ivar) != MMC_ERR_NONE) {
2276 mmc_switch_to_hs400(struct mmc_softc *sc, struct mmc_ivars *ivar,
2289 mmcbr_set_clock(dev, ivar->hs_tran_speed);
2290 err = mmc_set_timing(sc, ivar, bus_timing_hs);
2298 err = mmc_set_card_bus_width(sc, ivar, max_timing);
2301 mmcbr_set_bus_width(dev, ivar->bus_width);
2305 err = mmc_set_timing(sc, ivar, max_timing);
2317 mmc_switch_to_hs200(struct mmc_softc *sc, struct mmc_ivars *ivar,
2330 mmcbr_set_clock(dev, ivar->hs_tran_speed);
2331 err = mmc_set_timing(sc, ivar, bus_timing_mmc_ddr52);
2339 err = mmc_set_card_bus_width(sc, ivar, bus_timing_hs);
2342 mmcbr_set_bus_width(dev, ivar->bus_width);
2347 err = mmc_set_timing(sc, ivar, bus_timing_mmc_hs200);
2359 struct mmc_ivars *ivar;
2383 ivar = device_get_ivars(dev);
2385 if (mmc_switch_to_hs200(sc, ivar, clock) != MMC_ERR_NONE)
2400 if (mmc_switch_to_hs400(sc, ivar, clock, timing) !=
2466 struct mmc_ivars *ivar = device_get_ivars(child);
2472 *result = ivar->csd.spec_vers;
2475 *result = ivar->csd.dsr_imp;
2478 *result = ivar->sec_count;
2481 *result = ivar->rca;
2490 *result = ivar->read_only;
2493 *result = ivar->high_cap;
2496 *result = ivar->mode;
2499 *result = ivar->bus_width;
2502 *result = ivar->erase_sector;
2508 *result = ivar->cmd6_time;
2511 *result = ivar->quirks;
2514 *(char **)result = ivar->card_id_string;
2517 *(char **)result = ivar->card_sn_string;