@@ -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]);