diff --git a/drivers/esp.c b/drivers/esp.c index 78478f6..2766e87 100644 --- a/drivers/esp.c +++ b/drivers/esp.c @@ -28,6 +28,7 @@ #define BUFSIZE 4096 +#define CONFIG_DEBUG_ESP #ifdef CONFIG_DEBUG_ESP #define DPRINTF(fmt, args...) \ do { printk(fmt , ##args); } while (0) @@ -176,12 +177,14 @@ read_capacity(esp_private_t *esp, sd_private_t *sd) if (do_command(esp, sd, 11, 8)) { sd->sectors = 0; sd->bs = 0; - + DPRINTF("read_capacity id %d failed\n", sd->id); return 0; } sd->bs = (esp->buffer[4] << 24) | (esp->buffer[5] << 16) | (esp->buffer[6] << 8) | esp->buffer[7]; sd->sectors = ((esp->buffer[0] << 24) | (esp->buffer[1] << 16) | (esp->buffer[2] << 8) | esp->buffer[3]) * (sd->bs / 512); + DPRINTF("read_capacity id %d bs %d sectors %d\n", sd->id, sd->bs, + sd->sectors); return 1; } @@ -224,6 +227,26 @@ inquiry(esp_private_t *esp, sd_private_t *sd) } +static unsigned int +request_sense(esp_private_t *esp, sd_private_t *sd) +{ + /* Setup command = Request Sense */ + memset(esp->buffer, 0, 6); + esp->buffer[0] = 0x80; + esp->buffer[1] = REQUEST_SENSE; + + esp->buffer[5] = 252; + + if (do_command(esp, sd, 7, 252)) { + DPRINTF("request_sense id %d failed\n", sd->id); + DPRINTF("request_sense id %d sense key %d\n", sd->id, esp->buffer[0]); + return 0; + } + + DPRINTF("request_sense id %d sense key %d\n", sd->id, esp->buffer[0]); + return 1; +} + static void ob_sd_read_blocks(sd_private_t **sd) { @@ -478,7 +501,9 @@ ob_esp_init(unsigned int slot, uint64_t base, unsigned long espoffset, esp->sd[id].id = id; if (!inquiry(esp, &esp->sd[id])) continue; + request_sense(esp, &esp->sd[id]); read_capacity(esp, &esp->sd[id]); + request_sense(esp, &esp->sd[id]); #ifdef CONFIG_DEBUG_ESP dump_drive(&esp->sd[id]);