Index: uspace/srv/bd/ata_bd/ata_bd.c
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.c	(revision 0e6dce8fa8d920149a3d88cbaafcdf1ec7d1aca6)
+++ uspace/srv/bd/ata_bd/ata_bd.c	(revision b94334fffc8e58adb969bac1f1a860eace3290af)
@@ -261,5 +261,5 @@
 static int disk_init(disk_t *d, int disk_id)
 {
-	uint16_t buf[256];
+	identify_data_t idata;
 	uint8_t model[40];
 	uint16_t w;
@@ -269,5 +269,5 @@
 	int i;
 
-	rc = drive_identify(disk_id, buf);
+	rc = drive_identify(disk_id, &idata);
 	if (rc != EOK) {
 		d->present = false;
@@ -275,7 +275,7 @@
 	}
 
-	d->cylinders = buf[1];
-	d->heads = buf[3];
-	d->sectors = buf[6];
+	d->cylinders = idata.cylinders;
+	d->heads = idata.heads;
+	d->sectors = idata.sectors;
 
 	d->blocks = d->cylinders * d->heads * d->sectors;
@@ -285,5 +285,5 @@
 	 */
 	for (i = 0; i < 20; i++) {
-		w = buf[27 + i];
+		w = idata.model_name[i];
 		model[2 * i] = w >> 8;
 		model[2 * i + 1] = w & 0x00ff;
Index: uspace/srv/bd/ata_bd/ata_bd.h
===================================================================
--- uspace/srv/bd/ata_bd/ata_bd.h	(revision 0e6dce8fa8d920149a3d88cbaafcdf1ec7d1aca6)
+++ uspace/srv/bd/ata_bd/ata_bd.h	(revision b94334fffc8e58adb969bac1f1a860eace3290af)
@@ -143,4 +143,51 @@
 };
 
+/** Data returned from @c identify command. */
+typedef struct {
+	uint16_t gen_conf;
+	uint16_t cylinders;
+	uint16_t _res2;
+	uint16_t heads;
+	uint16_t _vs4;
+	uint16_t _vs5;
+	uint16_t sectors;
+	uint16_t _vs7;
+	uint16_t _vs8;
+	uint16_t _vs9;
+	uint16_t serial_number[10];
+	uint16_t _vs20;
+	uint16_t _vs21;
+	uint16_t vs_bytes;
+	uint16_t firmware_rev[4];
+	uint16_t model_name[20];
+	uint16_t max_rw_multiple;
+	uint16_t _res48;
+	uint16_t caps;
+	uint16_t _res50;
+	uint16_t pio_timing;
+	uint16_t dma_timing;
+	uint16_t validity;
+	uint16_t cur_cyl;
+	uint16_t cur_heads;
+	uint16_t cur_sectors;
+	uint16_t cur_capacity0;
+	uint16_t cur_capacity1;
+	uint16_t mss;
+	uint16_t total_lba_sec0;
+	uint16_t total_lba_sec1;
+	uint16_t sw_dma;
+	uint16_t mw_dma;
+	uint16_t pio_modes;
+	uint16_t min_mw_dma_cycle;
+	uint16_t rec_mw_dma_cycle;
+	uint16_t min_raw_pio_cycle;
+	uint16_t min_iordy_pio_cycle;
+	uint16_t _res69;
+	uint16_t _res70;
+	uint16_t _res71[1 + 127 - 71];
+	uint16_t _vs128[1 + 159 - 128];
+	uint16_t _res160[1 + 255 - 160];
+} identify_data_t;
+
 typedef struct {
 	bool present;
