|
@@ -27,6 +27,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
27
|
27
|
#include <ipxe/list.h>
|
28
|
28
|
#include <ipxe/interface.h>
|
29
|
29
|
#include <ipxe/blockdev.h>
|
|
30
|
+#include <ipxe/edd.h>
|
30
|
31
|
#include <ipxe/ata.h>
|
31
|
32
|
|
32
|
33
|
/** @file
|
|
@@ -602,6 +603,23 @@ static void atadev_close ( struct ata_device *atadev, int rc ) {
|
602
|
603
|
}
|
603
|
604
|
}
|
604
|
605
|
|
|
606
|
+/**
|
|
607
|
+ * Describe ATA device using EDD
|
|
608
|
+ *
|
|
609
|
+ * @v atadev ATA device
|
|
610
|
+ * @v type EDD interface type
|
|
611
|
+ * @v path EDD device path
|
|
612
|
+ * @ret rc Return status code
|
|
613
|
+ */
|
|
614
|
+static int atadev_edd_describe ( struct ata_device *atadev,
|
|
615
|
+ struct edd_interface_type *type,
|
|
616
|
+ union edd_device_path *path ) {
|
|
617
|
+
|
|
618
|
+ type->type = cpu_to_le64 ( EDD_INTF_TYPE_ATA );
|
|
619
|
+ path->ata.slave = ( ( atadev->device == ATA_DEV_SLAVE ) ? 0x01 : 0x00 );
|
|
620
|
+ return 0;
|
|
621
|
+}
|
|
622
|
+
|
605
|
623
|
/** ATA device block interface operations */
|
606
|
624
|
static struct interface_operation atadev_block_op[] = {
|
607
|
625
|
INTF_OP ( block_read, struct ata_device *, atadev_read ),
|
|
@@ -609,6 +627,7 @@ static struct interface_operation atadev_block_op[] = {
|
609
|
627
|
INTF_OP ( block_read_capacity, struct ata_device *,
|
610
|
628
|
atadev_read_capacity ),
|
611
|
629
|
INTF_OP ( intf_close, struct ata_device *, atadev_close ),
|
|
630
|
+ INTF_OP ( edd_describe, struct ata_device *, atadev_edd_describe ),
|
612
|
631
|
};
|
613
|
632
|
|
614
|
633
|
/** ATA device block interface descriptor */
|