summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/ata/aoedev.c9
-rw-r--r--src/drivers/block/ata.c3
-rw-r--r--src/include/gpxe/aoe.h3
-rw-r--r--src/include/gpxe/ata.h8
-rw-r--r--src/net/aoe.c5
5 files changed, 17 insertions, 11 deletions
diff --git a/src/drivers/ata/aoedev.c b/src/drivers/ata/aoedev.c
index 9679fc1b..4b4541f6 100644
--- a/src/drivers/ata/aoedev.c
+++ b/src/drivers/ata/aoedev.c
@@ -30,15 +30,14 @@
*
* @v ata ATA device
* @v command ATA command
- * @ret rc Return status code
+ * @ret aop Asynchronous operation
*/
-static int aoe_command ( struct ata_device *ata,
- struct ata_command *command ) {
+static struct async_operation * aoe_command ( struct ata_device *ata,
+ struct ata_command *command ) {
struct aoe_device *aoedev
= container_of ( ata, struct aoe_device, ata );
- aoe_issue ( &aoedev->aoe, command );
- return async_wait ( &aoedev->aoe.aop );
+ return aoe_issue ( &aoedev->aoe, command );
}
/**
diff --git a/src/drivers/block/ata.c b/src/drivers/block/ata.c
index e0df3673..d2d77aea 100644
--- a/src/drivers/block/ata.c
+++ b/src/drivers/block/ata.c
@@ -20,6 +20,7 @@
#include <string.h>
#include <assert.h>
#include <byteswap.h>
+#include <gpxe/async.h>
#include <gpxe/blockdev.h>
#include <gpxe/ata.h>
@@ -48,7 +49,7 @@ ata_command ( struct ata_device *ata, struct ata_command *command ) {
( unsigned long long ) command->cb.lba.native,
command->cb.count.native );
- return ata->command ( ata, command );
+ return async_wait ( ata->command ( ata, command ) );
}
/**
diff --git a/src/include/gpxe/aoe.h b/src/include/gpxe/aoe.h
index fb692224..07aec037 100644
--- a/src/include/gpxe/aoe.h
+++ b/src/include/gpxe/aoe.h
@@ -115,7 +115,8 @@ struct aoe_session {
extern void aoe_open ( struct aoe_session *aoe );
extern void aoe_close ( struct aoe_session *aoe );
-extern void aoe_issue ( struct aoe_session *aoe, struct ata_command *command );
+extern struct async_operation * aoe_issue ( struct aoe_session *aoe,
+ struct ata_command *command );
/** An AoE device */
struct aoe_device {
diff --git a/src/include/gpxe/ata.h b/src/include/gpxe/ata.h
index e0fca7af..7b348d82 100644
--- a/src/include/gpxe/ata.h
+++ b/src/include/gpxe/ata.h
@@ -11,6 +11,8 @@
*
*/
+struct async_operation;
+
/**
* An ATA Logical Block Address
*
@@ -191,10 +193,10 @@ struct ata_device {
*
* @v ata ATA device
* @v command ATA command
- * @ret rc Return status code
+ * @ret aop Asynchronous operation
*/
- int ( * command ) ( struct ata_device *ata,
- struct ata_command *command );
+ struct async_operation * ( * command ) ( struct ata_device *ata,
+ struct ata_command *command );
};
extern int init_atadev ( struct ata_device *ata );
diff --git a/src/net/aoe.c b/src/net/aoe.c
index a91e0097..0d59a977 100644
--- a/src/net/aoe.c
+++ b/src/net/aoe.c
@@ -274,14 +274,17 @@ void aoe_close ( struct aoe_session *aoe ) {
*
* @v aoe AoE session
* @v command ATA command
+ * @ret aop Asynchronous operation
*
* Only one command may be issued concurrently per session. This call
* is non-blocking; use async_wait() to wait for the command to
* complete.
*/
-void aoe_issue ( struct aoe_session *aoe, struct ata_command *command ) {
+struct async_operation * aoe_issue ( struct aoe_session *aoe,
+ struct ata_command *command ) {
aoe->command = command;
aoe->status = 0;
aoe->command_offset = 0;
aoe_send_command ( aoe );
+ return &aoe->aop;
}