Changeset View
Changeset View
Standalone View
Standalone View
sys/cam/mmc/mmc_xpt.c
Context not available. | |||||
typedef enum { | typedef enum { | ||||
PROBE_RESET, | PROBE_RESET, | ||||
PROBE_IDENTIFY, | PROBE_IDENTIFY_POWER_OFF, | ||||
PROBE_IDENTIFY_POWER_UP, | |||||
PROBE_SDIO_RESET, | PROBE_SDIO_RESET, | ||||
PROBE_SEND_IF_COND, | PROBE_SEND_IF_COND, | ||||
PROBE_SDIO_INIT, | PROBE_SDIO_INIT, | ||||
Context not available. | |||||
static char *probe_action_text[] = { | static char *probe_action_text[] = { | ||||
"PROBE_RESET", | "PROBE_RESET", | ||||
"PROBE_IDENTIFY", | "PROBE_IDENTIFY_POWER_OFF", | ||||
"PROBE_IDENTIFY_POWER_UP", | |||||
"PROBE_SDIO_RESET", | "PROBE_SDIO_RESET", | ||||
"PROBE_SEND_IF_COND", | "PROBE_SEND_IF_COND", | ||||
"PROBE_SDIO_INIT", | "PROBE_SDIO_INIT", | ||||
Context not available. | |||||
if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) | if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) | ||||
PROBE_SET_ACTION(softc, PROBE_RESET); | PROBE_SET_ACTION(softc, PROBE_RESET); | ||||
else | else | ||||
PROBE_SET_ACTION(softc, PROBE_IDENTIFY); | PROBE_SET_ACTION(softc, PROBE_IDENTIFY_POWER_OFF); | ||||
/* This will kick the ball */ | /* This will kick the ball */ | ||||
xpt_schedule(periph, CAM_PRIORITY_XPT); | xpt_schedule(periph, CAM_PRIORITY_XPT); | ||||
Context not available. | |||||
if (path->device->flags & CAM_DEV_UNCONFIGURED) | if (path->device->flags & CAM_DEV_UNCONFIGURED) | ||||
softc->action = PROBE_RESET; | softc->action = PROBE_RESET; | ||||
else | else | ||||
softc->action = PROBE_IDENTIFY; | softc->action = PROBE_IDENTIFY_POWER_OFF; | ||||
} | } | ||||
Context not available. | |||||
switch (softc->action) { | switch (softc->action) { | ||||
case PROBE_RESET: | case PROBE_RESET: | ||||
/* FALLTHROUGH */ | /* FALLTHROUGH */ | ||||
case PROBE_IDENTIFY: | case PROBE_IDENTIFY_POWER_OFF: | ||||
init_standard_ccb(start_ccb, XPT_PATH_INQ); | init_standard_ccb(start_ccb, XPT_PATH_INQ); | ||||
xpt_action(start_ccb); | xpt_action(start_ccb); | ||||
Context not available. | |||||
cts->ios.power_mode = power_off; | cts->ios.power_mode = power_off; | ||||
cts->ios_valid = MMC_PM; | cts->ios_valid = MMC_PM; | ||||
xpt_action(start_ccb); | xpt_action(start_ccb); | ||||
mtx_sleep(periph, p_mtx, 0, "mmcios", 100); | // mtx_sleep(periph, p_mtx, 0, "mmcios", 100); | ||||
start_ccb->ccb_h.func_code = XPT_TIMEOUT; | |||||
start_ccb->ccb_h.timeout = 5000; | |||||
start_ccb->ccb_h.cbfcnp = mmcprobe_done; | |||||
CAM_DEBUG(start_ccb->ccb_h.path, CAM_DEBUG_PROBE, ("SCHEDULE TIMEOUT\n")); | |||||
xpt_action(start_ccb); | |||||
break; | |||||
case PROBE_IDENTIFY_POWER_UP: | |||||
/* mmc_power_up */ | /* mmc_power_up */ | ||||
/* Get the host OCR */ | /* Get the host OCR */ | ||||
init_standard_ccb(start_ccb, XPT_GET_TRAN_SETTINGS); | init_standard_ccb(start_ccb, XPT_GET_TRAN_SETTINGS); | ||||
Context not available. | |||||
switch (softc->action) { | switch (softc->action) { | ||||
case PROBE_RESET: | case PROBE_RESET: | ||||
/* FALLTHROUGH */ | /* FALLTHROUGH */ | ||||
case PROBE_IDENTIFY: | case PROBE_IDENTIFY_POWER_OFF: | ||||
printf("Transition POWER_OFF -> POWER_UP after timeout\n"); | |||||
PROBE_SET_ACTION(softc, PROBE_IDENTIFY_POWER_UP); | |||||
break; | |||||
case PROBE_IDENTIFY_POWER_UP: | |||||
{ | { | ||||
printf("Starting completion of PROBE_RESET\n"); | printf("Starting completion of PROBE_RESET\n"); | ||||
CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_PROBE, ("done with PROBE_RESET\n")); | CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_PROBE, ("done with PROBE_RESET\n")); | ||||
Context not available. |