Home | History | Annotate | Download | only in sdmmc

Lines Matching defs:sf

145 	struct sdmmc_function *sf0, *sf;
175 sf = sdmmc_function_alloc(sc);
176 sf->number = i;
177 sf->rca = sf0->rca;
178 SIMPLEQ_INSERT_TAIL(&sc->sf_head, sf, sf_list);
189 sdmmc_io_init(struct sdmmc_softc *sc, struct sdmmc_function *sf)
197 sf->blklen = sdmmc_chip_host_maxblklen(sc->sc_sct, sc->sc_sch);
199 if (sf->number == 0) {
200 reg = sdmmc_io_read_1(sf, SD_IO_CCCR_CAPABILITY);
202 sdmmc_io_write_1(sf, SD_IO_CCCR_BUS_WIDTH,
204 sf->width = 4;
206 sf->width);
212 error = sdmmc_read_cis(sf, &sf->cis);
215 SET(sf->flags, SFF_ERROR);
219 sdmmc_check_cis_quirks(sf);
223 sdmmc_print_cis(sf);
226 reg = sdmmc_io_read_1(sf, SD_IO_CCCR_HIGH_SPEED);
229 sdmmc_io_write_1(sf, SD_IO_CCCR_HIGH_SPEED, reg);
230 sf->csd.tran_speed = 50000; /* 50MHz */
235 if (sc->sc_busclk > sf->csd.tran_speed)
236 sc->sc_busclk = sf->csd.tran_speed;
244 aprint_normal_dev(sc->sc_dev, "%u-bit width,", sf->width);
253 reg = sdmmc_io_read_1(sf0, SD_IO_FBR(sf->number) + 0x000);
254 sf->interface = FBR_STD_FUNC_IF_CODE(reg);
255 if (sf->interface == 0x0f)
256 sf->interface =
257 sdmmc_io_read_1(sf0, SD_IO_FBR(sf->number) + 0x001);
258 error = sdmmc_read_cis(sf, &sf->cis);
261 SET(sf->flags, SFF_ERROR);
265 sdmmc_check_cis_quirks(sf);
269 sdmmc_print_cis(sf);
283 sdmmc_io_function_ready(struct sdmmc_function *sf)
285 struct sdmmc_softc *sc = sf->sc;
289 if (sf->number == 0)
295 return (reg & (1 << sf->number)) != 0;
299 sdmmc_io_function_enable(struct sdmmc_function *sf)
301 struct sdmmc_softc *sc = sf->sc;
306 if (sf->number == 0)
311 SET(reg, (1U << sf->number));
316 while (!sdmmc_io_function_ready(sf) && retry-- > 0)
326 sdmmc_io_function_disable(struct sdmmc_function *sf)
328 struct sdmmc_softc *sc = sf->sc;
332 if (sf->number == 0)
337 CLR(reg, (1U << sf->number));
343 sdmmc_io_rw_direct(struct sdmmc_softc *sc, struct sdmmc_function *sf,
352 error = sdmmc_select_card(sc, sf);
356 arg |= ((sf == NULL ? 0 : sf->number) & SD_ARG_CMD52_FUNC_MASK) <<
391 sdmmc_io_rw_extended(struct sdmmc_softc *sc, struct sdmmc_function *sf,
401 error = sdmmc_select_card(sc, sf);
406 arg |= (((sf == NULL) ? 0 : sf->number) & SD_ARG_CMD53_FUNC_MASK) <<
419 cmd.c_blklen = MIN(datalen, sf->blklen);
437 sdmmc_io_read_1(struct sdmmc_function *sf, int reg)
443 (void)sdmmc_io_rw_direct(sf->sc, sf, reg, (u_char *)&data,
449 sdmmc_io_write_1(struct sdmmc_function *sf, int reg, uint8_t data)
454 (void)sdmmc_io_rw_direct(sf->sc, sf, reg, (u_char *)&data,
459 sdmmc_io_read_2(struct sdmmc_function *sf, int reg)
465 (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 2,
471 sdmmc_io_write_2(struct sdmmc_function *sf, int reg, uint16_t data)
476 (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 2,
481 sdmmc_io_read_4(struct sdmmc_function *sf, int reg)
487 (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 4,
493 sdmmc_io_write_4(struct sdmmc_function *sf, int reg, uint32_t data)
498 (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 4,
504 sdmmc_io_read_multi_1(struct sdmmc_function *sf, int reg, u_char *data,
511 while (datalen >= sf->blklen) {
512 //blocks = imin(datalen / sf->blklen,
515 bytes = blocks * sf->blklen;
516 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data,
525 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data, datalen,
532 sdmmc_io_write_multi_1(struct sdmmc_function *sf, int reg, u_char *data,
539 while (datalen >= sf->blklen) {
540 //blocks = imin(datalen / sf->blklen,
543 bytes = blocks * sf->blklen;
544 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data,
553 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data, datalen,
561 sdmmc_io_read_region_1(struct sdmmc_function *sf, int reg, u_char *data,
568 while (datalen >= sf->blklen) {
569 //blocks = imin(datalen / sf->blklen,
572 bytes = blocks * sf->blklen;
573 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data,
583 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data, datalen,
590 sdmmc_io_write_region_1(struct sdmmc_function *sf, int reg, u_char *data,
597 while (datalen >= sf->blklen) {
598 //blocks = imin(datalen / sf->blklen,
601 bytes = blocks * sf->blklen;
602 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data,
612 error = sdmmc_io_rw_extended(sf->sc, sf, reg, data, datalen,
620 sdmmc_io_xchg(struct sdmmc_softc *sc, struct sdmmc_function *sf,
626 return sdmmc_io_rw_direct(sc, sf, reg, datap,
635 sdmmc_io_function_abort(struct sdmmc_function *sf)
637 u_char data = CCCR_CTL_AS(sf->number);
639 return sdmmc_io_rw_direct(sf->sc, NULL, SD_IO_CCCR_CTL, &data,
703 sdmmc_intr_enable(struct sdmmc_function *sf)
705 struct sdmmc_softc *sc = sf->sc;
711 reg |= 1 << sf->number;
717 sdmmc_intr_disable(struct sdmmc_function *sf)
719 struct sdmmc_softc *sc = sf->sc;
725 reg &= ~(1 << sf->number);
827 sdmmc_io_set_blocklen(struct sdmmc_function *sf,
830 struct sdmmc_softc *sc = sf->sc;
840 sdmmc_io_write_1(sf0, SD_IO_FBR(sf->number) +
842 sdmmc_io_write_1(sf0, SD_IO_FBR(sf->number) +
845 sf->blklen = blklen;