Improve tcpdump legibility.
[gpxe.git] / src / include / gpxe / aoe.h
index 094feb5..60c7a82 100644 (file)
@@ -10,6 +10,8 @@
 #include <stdint.h>
 #include <gpxe/list.h>
 #include <gpxe/if_ether.h>
 #include <stdint.h>
 #include <gpxe/list.h>
 #include <gpxe/if_ether.h>
+#include <gpxe/retry.h>
+#include <gpxe/async.h>
 #include <gpxe/ata.h>
 
 /** An AoE ATA command */
 #include <gpxe/ata.h>
 
 /** An AoE ATA command */
@@ -69,6 +71,8 @@ struct aoehdr {
 #define AOE_CMD_ATA    0x00    /**< Issue ATA command */
 #define AOE_CMD_CONFIG 0x01    /**< Query Config Information */
 
 #define AOE_CMD_ATA    0x00    /**< Issue ATA command */
 #define AOE_CMD_CONFIG 0x01    /**< Query Config Information */
 
+#define AOE_TAG_MAGIC  0xebeb0000
+
 #define AOE_ERR_BAD_COMMAND    1 /**< Unrecognised command code */
 #define AOE_ERR_BAD_PARAMETER  2 /**< Bad argument parameter */
 #define AOE_ERR_UNAVAILABLE    3 /**< Device unavailable */
 #define AOE_ERR_BAD_COMMAND    1 /**< Unrecognised command code */
 #define AOE_ERR_BAD_PARAMETER  2 /**< Bad argument parameter */
 #define AOE_ERR_UNAVAILABLE    3 /**< Device unavailable */
@@ -89,27 +93,32 @@ struct aoe_session {
        /** Target MAC address */
        uint8_t target[ETH_ALEN];
 
        /** Target MAC address */
        uint8_t target[ETH_ALEN];
 
-       /** Tag for current command */
+       /** Tag for current AoE command */
        uint32_t tag;
        uint32_t tag;
+
        /** Current ATA command */
        struct ata_command *command;
        /** Current ATA command */
        struct ata_command *command;
-       /** Status of the command */
-       int status;
+       /** Overall status of current ATA command */
+       unsigned int status;
        /** Byte offset within command's data buffer */
        unsigned int command_offset;
        /** Byte offset within command's data buffer */
        unsigned int command_offset;
+       /** Asynchronous operation for this command */
+       struct async_operation aop;
+
+       /** Retransmission timer */
+       struct retry_timer timer;
 };
 
 #define AOE_STATUS_ERR_MASK    0x0f /**< Error portion of status code */ 
 #define AOE_STATUS_PENDING     0x80 /**< Command pending */
 };
 
 #define AOE_STATUS_ERR_MASK    0x0f /**< Error portion of status code */ 
 #define AOE_STATUS_PENDING     0x80 /**< Command pending */
-#define AOE_STATUS_UNDERRUN    0x40 /**< Buffer overrun */
-#define AOE_STATUS_OVERRUN     0x20 /**< Buffer underrun */
 
 /** Maximum number of sectors per packet */
 #define AOE_MAX_COUNT 2
 
 extern void aoe_open ( struct aoe_session *aoe );
 extern void aoe_close ( struct aoe_session *aoe );
 
 /** Maximum number of sectors per packet */
 #define AOE_MAX_COUNT 2
 
 extern void aoe_open ( struct aoe_session *aoe );
 extern void aoe_close ( struct aoe_session *aoe );
-extern int 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 {
 
 /** An AoE device */
 struct aoe_device {