Lines Matching refs:ivar

188 static void mmc_format_card_id_string(struct mmc_ivars *ivar);
196 static void mmc_log_card(device_t dev, struct mmc_ivars *ivar, int newcard);
214 static int mmc_set_card_bus_width(struct mmc_softc *sc, struct mmc_ivars *ivar,
216 static int mmc_set_power_class(struct mmc_softc *sc, struct mmc_ivars *ivar);
218 static int mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar,
220 static int mmc_set_vccq(struct mmc_softc *sc, struct mmc_ivars *ivar,
222 static int mmc_switch_to_hs200(struct mmc_softc *sc, struct mmc_ivars *ivar,
224 static int mmc_switch_to_hs400(struct mmc_softc *sc, struct mmc_ivars *ivar,
227 static uint32_t mmc_timing_to_dtr(struct mmc_ivars *ivar,
320 struct mmc_ivars *ivar;
342 ivar = device_get_ivars(dev);
343 rca = ivar->rca;
371 (ivar->bus_width == bus_width_4) ? 4 :
372 (ivar->bus_width == bus_width_8) ? 8 : 1,
375 if (mmc_set_card_bus_width(sc, ivar, timing) !=
382 mmcbr_set_bus_width(busdev, ivar->bus_width);
384 if (mmc_set_vccq(sc, ivar, timing) != MMC_ERR_NONE) {
494 struct mmc_ivars *ivar;
518 ivar = device_get_ivars(dev);
521 ivar = device_get_ivars(sc->child_list[i]);
522 if (ivar->rca == sc->last_rca)
525 if (ivar->rca != sc->last_rca)
749 mmc_set_card_bus_width(struct mmc_softc *sc, struct mmc_ivars *ivar,
761 err = mmc_wait_for_app_cmd(sc->dev, sc->dev, ivar->rca, &cmd,
768 switch (ivar->bus_width) {
778 err = mmc_wait_for_app_cmd(sc->dev, sc->dev, ivar->rca, &cmd,
781 switch (ivar->bus_width) {
819 err = mmc_switch(sc->dev, sc->dev, ivar->rca,
821 ivar->cmd6_time, true);
827 mmc_set_power_class(struct mmc_softc *sc, struct mmc_ivars *ivar)
838 bus_width = ivar->bus_width;
839 if (mmcbr_get_mode(dev) != mode_mmc || ivar->csd.spec_vers < 4 ||
844 ext_csd = ivar->raw_ext_csd;
899 return (mmc_switch(dev, dev, ivar->rca, EXT_CSD_CMD_SET_NORMAL,
900 EXT_CSD_POWER_CLASS, value, ivar->cmd6_time, true));
904 mmc_set_timing(struct mmc_softc *sc, struct mmc_ivars *ivar,
949 err = mmc_switch(sc->dev, sc->dev, ivar->rca,
951 ivar->cmd6_time, false);
956 err = mmc_switch_status(sc->dev, sc->dev, ivar->rca,
957 ivar->cmd6_time);
963 mmc_set_vccq(struct mmc_softc *sc, struct mmc_ivars *ivar,
967 if (isset(&ivar->vccq_120, timing))
969 else if (isset(&ivar->vccq_180, timing))
1132 mmc_format_card_id_string(struct mmc_ivars *ivar)
1154 c1 = (ivar->cid.oid >> 8) & 0x0ff;
1155 c2 = ivar->cid.oid & 0x0ff;
1159 snprintf(oidstr, sizeof(oidstr), "0x%04x", ivar->cid.oid);
1160 snprintf(ivar->card_sn_string, sizeof(ivar->card_sn_string),
1161 "%08X", ivar->cid.psn);
1162 snprintf(ivar->card_id_string, sizeof(ivar->card_id_string),
1164 ivar->mode == mode_sd ? "SD" : "MMC", ivar->high_cap ? "HC" : "",
1165 ivar->cid.pnm, ivar->cid.prv >> 4, ivar->cid.prv & 0x0f,
1166 ivar->cid.psn, ivar->cid.mdt_month, ivar->cid.mdt_year,
1167 ivar->cid.mid, oidstr);
1462 mmc_timing_to_dtr(struct mmc_ivars *ivar, enum mmc_bus_timing timing)
1467 return (ivar->tran_speed);
1469 return (ivar->hs_tran_speed);
1565 mmc_log_card(device_t dev, struct mmc_ivars *ivar, int newcard)
1570 ivar->rca, newcard ? " added" : "");
1571 device_printf(dev, " card: %s\n", ivar->card_id_string);
1573 if (isset(&ivar->timings, timing))
1576 device_printf(dev, " quirks: %b\n", ivar->quirks, MMC_QUIRKS_FMT);
1578 (ivar->bus_width == bus_width_1 ? 1 :
1579 (ivar->bus_width == bus_width_4 ? 4 : 8)),
1580 mmc_timing_to_dtr(ivar, timing) / 1000000,
1583 ivar->sec_count, ivar->erase_sector,
1584 ivar->read_only ? ", read-only" : "");
1592 struct mmc_ivars *ivar = NULL;
1618 ivar = device_get_ivars(sc->child_list[i]);
1619 if (memcmp(ivar->raw_cid, raw_cid, sizeof(raw_cid)) ==
1632 ivar = malloc(sizeof(struct mmc_ivars), M_DEVBUF,
1634 memcpy(ivar->raw_cid, raw_cid, sizeof(raw_cid));
1637 ivar->read_only = 1;
1638 ivar->bus_width = bus_width_1;
1639 setbit(&ivar->timings, bus_timing_normal);
1640 ivar->mode = mmcbr_get_mode(sc->dev);
1641 if (ivar->mode == mode_sd) {
1642 mmc_decode_cid_sd(ivar->raw_cid, &ivar->cid);
1649 ivar->rca = resp >> 16;
1651 err = mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
1660 newcard ? "New c" : "C", ivar->raw_csd[0],
1661 ivar->raw_csd[1], ivar->raw_csd[2],
1662 ivar->raw_csd[3]);
1663 err = mmc_decode_csd_sd(ivar->raw_csd, &ivar->csd);
1668 ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
1669 if (ivar->csd.csd_structure > 0)
1670 ivar->high_cap = 1;
1671 ivar->tran_speed = ivar->csd.tran_speed;
1672 ivar->erase_sector = ivar->csd.erase_sector *
1673 ivar->csd.write_bl_len / MMC_SECTOR_SIZE;
1675 err = mmc_send_status(sc->dev, sc->dev, ivar->rca,
1689 err = mmc_select_card(sc, ivar->rca);
1695 err = mmc_app_send_scr(sc, ivar->rca, ivar->raw_scr);
1701 mmc_app_decode_scr(ivar->raw_scr, &ivar->scr);
1703 if ((ivar->scr.sda_vsn >= 1) &&
1704 (ivar->csd.ccc & (1 << 10))) {
1710 setbit(&ivar->timings, bus_timing_hs);
1711 ivar->hs_tran_speed = SD_HS_MAX;
1728 (void)mmc_select_card(sc, ivar->rca);
1729 (void)mmc_app_sd_status(sc, ivar->rca,
1730 ivar->raw_sd_status);
1731 mmc_app_decode_sd_status(ivar->raw_sd_status,
1732 &ivar->sd_status);
1733 if (ivar->sd_status.au_size != 0) {
1734 ivar->erase_sector =
1735 16 << ivar->sd_status.au_size;
1739 (ivar->scr.bus_widths & SD_SCR_BUS_WIDTH_4))
1740 ivar->bus_width = bus_width_4;
1744 ivar->rca = rca++;
1745 err = mmc_set_relative_addr(sc, ivar->rca);
1751 err = mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
1759 newcard ? "New c" : "C", ivar->raw_csd[0],
1760 ivar->raw_csd[1], ivar->raw_csd[2],
1761 ivar->raw_csd[3]);
1763 mmc_decode_csd_mmc(ivar->raw_csd, &ivar->csd);
1764 ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
1765 ivar->tran_speed = ivar->csd.tran_speed;
1766 ivar->erase_sector = ivar->csd.erase_sector *
1767 ivar->csd.write_bl_len / MMC_SECTOR_SIZE;
1769 err = mmc_send_status(sc->dev, sc->dev, ivar->rca, &status);
1781 err = mmc_select_card(sc, ivar->rca);
1790 if (ivar->csd.spec_vers >= 4) {
1792 ivar->raw_ext_csd);
1798 ext_csd = ivar->raw_ext_csd;
1803 ivar->sec_count = sec_count;
1804 ivar->high_cap = 1;
1807 ivar->bus_width = mmc_test_bus_width(sc);
1811 setbit(&ivar->timings, bus_timing_hs);
1812 ivar->hs_tran_speed = MMC_TYPE_HS_52_MAX;
1814 setbit(&ivar->timings, bus_timing_hs);
1815 ivar->hs_tran_speed = MMC_TYPE_HS_26_MAX;
1819 setbit(&ivar->timings, bus_timing_mmc_ddr52);
1820 setbit(&ivar->vccq_120, bus_timing_mmc_ddr52);
1824 setbit(&ivar->timings, bus_timing_mmc_ddr52);
1825 setbit(&ivar->vccq_180, bus_timing_mmc_ddr52);
1829 setbit(&ivar->timings, bus_timing_mmc_hs200);
1830 setbit(&ivar->vccq_120, bus_timing_mmc_hs200);
1834 setbit(&ivar->timings, bus_timing_mmc_hs200);
1835 setbit(&ivar->vccq_180, bus_timing_mmc_hs200);
1839 ivar->bus_width == bus_width_8) {
1840 setbit(&ivar->timings, bus_timing_mmc_hs400);
1841 setbit(&ivar->vccq_120, bus_timing_mmc_hs400);
1845 ivar->bus_width == bus_width_8) {
1846 setbit(&ivar->timings, bus_timing_mmc_hs400);
1847 setbit(&ivar->vccq_180, bus_timing_mmc_hs400);
1853 ivar->bus_width == bus_width_8) {
1854 setbit(&ivar->timings, bus_timing_mmc_hs400es);
1855 setbit(&ivar->vccq_120, bus_timing_mmc_hs400es);
1861 ivar->bus_width == bus_width_8) {
1862 setbit(&ivar->timings, bus_timing_mmc_hs400es);
1863 setbit(&ivar->vccq_180, bus_timing_mmc_hs400es);
1869 ivar->cmd6_time = 500 * 1000;
1871 ivar->cmd6_time = 10 *
1875 ivar->erase_sector = 1024 *
1877 err = mmc_switch(sc->dev, sc->dev, ivar->rca,
1881 ivar->cmd6_time, true);
1891 mmc_decode_cid_mmc(ivar->raw_cid, &ivar->cid, rev >= 5);
1896 quirk->mid == ivar->cid.mid) &&
1898 quirk->oid == ivar->cid.oid) &&
1899 strncmp(quirk->pnm, ivar->cid.pnm,
1900 sizeof(ivar->cid.pnm)) == 0) {
1901 ivar->quirks = quirk->quirks;
1914 if (ivar->csd.read_bl_len != MMC_SECTOR_SIZE ||
1915 ivar->csd.write_bl_len != MMC_SECTOR_SIZE)
1918 mmc_format_card_id_string(ivar);
1921 mmc_log_card(sc->dev, ivar, newcard);
1926 device_set_ivars(child, ivar);
1937 free(ivar, M_DEVBUF);
1977 struct mmc_ivars *ivar;
1981 ivar = device_get_ivars(sc->child_list[i]);
1982 if (mmc_select_card(sc, ivar->rca) != MMC_ERR_NONE) {
1986 ivar->rca);
1992 free(ivar, M_DEVBUF);
2007 struct mmc_ivars *ivar;
2012 ivar = device_get_ivars(sc->child_list[i]);
2016 ivar->rca);
2025 free(ivar, M_DEVBUF);
2118 struct mmc_ivars *ivar;
2131 ivar = device_get_ivars(sc->child_list[i]);
2132 if (isclr(&ivar->timings, max_timing) ||
2136 if (isset(&ivar->timings, timing) &&
2144 dtr = mmc_timing_to_dtr(ivar, max_timing);
2170 ivar = device_get_ivars(sc->child_list[i]);
2171 if ((ivar->timings & ~(1 << bus_timing_normal)) == 0)
2174 rca = ivar->rca;
2183 if (mmc_set_vccq(sc, ivar, timing) != MMC_ERR_NONE) {
2192 if (mmc_set_card_bus_width(sc, ivar, timing) !=
2198 mmcbr_set_bus_width(dev, ivar->bus_width);
2201 if (mmc_switch_to_hs400(sc, ivar, max_dtr, timing) !=
2211 if (mmc_set_timing(sc, ivar, timing) != MMC_ERR_NONE) {
2223 if (mmc_set_card_bus_width(sc, ivar, timing) !=
2229 mmcbr_set_bus_width(dev, ivar->bus_width);
2231 if (mmc_set_vccq(sc, ivar, timing) != MMC_ERR_NONE) {
2249 if (hs400 == true && mmc_switch_to_hs400(sc, ivar, max_dtr,
2258 if (mmc_set_power_class(sc, ivar) != MMC_ERR_NONE) {
2273 mmc_switch_to_hs400(struct mmc_softc *sc, struct mmc_ivars *ivar,
2281 rca = ivar->rca;
2288 mmcbr_set_clock(dev, ivar->hs_tran_speed);
2289 err = mmc_set_timing(sc, ivar, bus_timing_hs);
2297 err = mmc_set_card_bus_width(sc, ivar, max_timing);
2300 mmcbr_set_bus_width(dev, ivar->bus_width);
2304 err = mmc_set_timing(sc, ivar, max_timing);
2316 mmc_switch_to_hs200(struct mmc_softc *sc, struct mmc_ivars *ivar,
2324 rca = ivar->rca;
2331 mmcbr_set_clock(dev, ivar->hs_tran_speed);
2332 err = mmc_set_timing(sc, ivar, bus_timing_mmc_ddr52);
2340 err = mmc_set_card_bus_width(sc, ivar, bus_timing_hs);
2343 mmcbr_set_bus_width(dev, ivar->bus_width);
2348 err = mmc_set_timing(sc, ivar, bus_timing_mmc_hs200);
2360 struct mmc_ivars *ivar;
2384 ivar = device_get_ivars(dev);
2386 if (mmc_switch_to_hs200(sc, ivar, clock) != MMC_ERR_NONE)
2401 if (mmc_switch_to_hs400(sc, ivar, clock, timing) !=
2467 struct mmc_ivars *ivar = device_get_ivars(child);
2473 *result = ivar->csd.spec_vers;
2476 *result = ivar->csd.dsr_imp;
2479 *result = ivar->sec_count;
2482 *result = ivar->rca;
2491 *result = ivar->read_only;
2494 *result = ivar->high_cap;
2497 *result = ivar->mode;
2500 *result = ivar->bus_width;
2503 *result = ivar->erase_sector;
2509 *result = ivar->cmd6_time;
2512 *result = ivar->quirks;
2515 *(char **)result = ivar->card_id_string;
2518 *(char **)result = ivar->card_sn_string;