Index: uspace/srv/bd/ata_bd/ata_bd.c
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.c	(revision 4f5caea517c6e811bbec69d5a590cb1b6e3ca5e3)
+++ uspace/srv/bd/ata_bd/ata_bd.c	(revision 5481d1bb07f8be0d6b0a9191427a04ab64226078)
@@ -69,5 +69,5 @@
 static atomic_t dev_futex = FUTEX_INITIALIZER;
 
-static disk_t disk[2];
+static disk_t disk[MAX_DISKS];
 
 static int ata_bd_init(void);
@@ -97,9 +97,5 @@
 	printf("Reset drives...\n");
 	pio_write_8(&ctl->device_control, DCR_SRST);
-/*	printf("wait for busy\n");
-	do {
-		status = pio_read_8(&cmd->status);
-	} while ((status & SR_BSY) == 0);
-*/
+	/* FIXME: Find out how to do this properly. */
 	async_usleep(100);
 	pio_write_8(&ctl->device_control, 0);
@@ -154,5 +150,5 @@
 	pio_write_8(&cmd->drive_head, ((disk_id != 0) ? DHR_DRV : 0));
 	async_usleep(100);
-	pio_write_8(&cmd->command, 0xEC);
+	pio_write_8(&cmd->command, CMD_IDENTIFY_DRIVE);
 
 	status = pio_read_8(&cmd->status);
@@ -170,5 +166,5 @@
 	}
 
-	for (i = 0; i < 256; i++) {
+	for (i = 0; i < block_size / 2; i++) {
 		do {
 			status = pio_read_8(&cmd->status);
@@ -367,9 +363,9 @@
 	pio_write_8(&cmd->cylinder_low, c & 0xff);
 	pio_write_8(&cmd->cylinder_high, c >> 16);
-	pio_write_8(&cmd->command, 0x20);
+	pio_write_8(&cmd->command, CMD_READ_SECTORS);
 
 	/* Read data from the disk buffer. */
 
-	for (i = 0; i < 256; i++) {
+	for (i = 0; i < block_size / 2; i++) {
 		do {
 			status = pio_read_8(&cmd->status);
Index: uspace/srv/bd/ata_bd/ata_bd.h
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.h	(revision 4f5caea517c6e811bbec69d5a590cb1b6e3ca5e3)
+++ uspace/srv/bd/ata_bd/ata_bd.h	(revision 5481d1bb07f8be0d6b0a9191427a04ab64226078)
@@ -118,4 +118,10 @@
 };
 
+enum ata_command {
+	CMD_IDENTIFY_DRIVE	= 0xEC,
+	CMD_READ_SECTORS	= 0x20,
+	CMD_WRITE_SECTORS	= 0x30
+};
+
 typedef struct {
 	bool present;
