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 #include #include +#include #include #include @@ -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; }