source: grub-pc/trunk/fuentes/debian/grub-extras/disabled/gpxe/src/include/gpxe/aoe.h @ 22

Last change on this file since 22 was 22, checked in by mabarracus, 4 years ago

updated version and apply net.ifnames=0 into debian/rules

File size: 3.6 KB
Line 
1#ifndef _GPXE_AOE_H
2#define _GPXE_AOE_H
3
4/** @file
5 *
6 * AoE protocol
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER );
11
12#include <stdint.h>
13#include <gpxe/list.h>
14#include <gpxe/if_ether.h>
15#include <gpxe/retry.h>
16#include <gpxe/ata.h>
17
18/** An AoE config command */
19struct aoecfg {
20        /** AoE Queue depth */
21        uint16_t bufcnt;
22        /** ATA target firmware version */
23        uint16_t fwver;
24        /** ATA target sector count */
25        uint8_t scnt;
26        /** AoE config string subcommand */
27        uint8_t aoeccmd;
28        /** AoE config string length */
29        uint16_t cfglen;
30        /** AoE config string */
31        uint8_t data[0];
32} __attribute__ (( packed ));
33
34/** An AoE ATA command */
35struct aoeata {
36        /** AoE command flags */
37        uint8_t aflags;
38        /** ATA error/feature register */
39        uint8_t err_feat;
40        /** ATA sector count register */
41        uint8_t count;
42        /** ATA command/status register */
43        uint8_t cmd_stat;
44        /** Logical block address, in little-endian order */
45        union {
46                uint64_t u64;
47                uint8_t bytes[6];
48        } lba;
49        /** Data payload */
50        uint8_t data[0];
51} __attribute__ (( packed ));
52
53#define AOE_FL_EXTENDED 0x40    /**< LBA48 extended addressing */
54#define AOE_FL_DEV_HEAD 0x10    /**< Device/head flag */
55#define AOE_FL_ASYNC    0x02    /**< Asynchronous write */
56#define AOE_FL_WRITE    0x01    /**< Write command */
57
58/** An AoE command */
59union aoecmd {
60        /** Config command */
61        struct aoecfg cfg;
62        /** ATA command */
63        struct aoeata ata;
64};
65
66/** An AoE header */
67struct aoehdr {
68        /** Protocol version number and flags */
69        uint8_t ver_flags;
70        /** Error code */
71        uint8_t error;
72        /** Major device number, in network byte order */
73        uint16_t major;
74        /** Minor device number */
75        uint8_t minor;
76        /** Command number */
77        uint8_t command;
78        /** Tag, in network byte order */
79        uint32_t tag;
80        /** Payload */
81        union aoecmd cmd[0];
82} __attribute__ (( packed ));
83
84#define AOE_VERSION     0x10    /**< Version 1 */
85#define AOE_VERSION_MASK 0xf0   /**< Version part of ver_flags field */
86
87#define AOE_FL_RESPONSE 0x08    /**< Message is a response */
88#define AOE_FL_ERROR    0x04    /**< Command generated an error */
89
90#define AOE_MAJOR_BROADCAST 0xffff
91#define AOE_MINOR_BROADCAST 0xff
92
93#define AOE_CMD_ATA     0x00    /**< Issue ATA command */
94#define AOE_CMD_CONFIG  0x01    /**< Query Config Information */
95
96#define AOE_TAG_MAGIC   0xebeb0000
97
98#define AOE_ERR_BAD_COMMAND     1 /**< Unrecognised command code */
99#define AOE_ERR_BAD_PARAMETER   2 /**< Bad argument parameter */
100#define AOE_ERR_UNAVAILABLE     3 /**< Device unavailable */
101#define AOE_ERR_CONFIG_EXISTS   4 /**< Config string present */
102#define AOE_ERR_BAD_VERSION     5 /**< Unsupported version */
103
104/** An AoE session */
105struct aoe_session {
106        /** Reference counter */
107        struct refcnt refcnt;
108
109        /** List of all AoE sessions */
110        struct list_head list;
111
112        /** Network device */
113        struct net_device *netdev;
114
115        /** Major number */
116        uint16_t major;
117        /** Minor number */
118        uint8_t minor;
119        /** Target MAC address */
120        uint8_t target[ETH_ALEN];
121
122        /** Tag for current AoE command */
123        uint32_t tag;
124
125        /** Current AOE command */
126        uint8_t aoe_cmd_type;
127        /** Current ATA command */
128        struct ata_command *command;
129        /** Overall status of current ATA command */
130        unsigned int status;
131        /** Byte offset within command's data buffer */
132        unsigned int command_offset;
133        /** Return status code for command */
134        int rc;
135
136        /** Retransmission timer */
137        struct retry_timer timer;
138};
139
140#define AOE_STATUS_ERR_MASK     0x0f /**< Error portion of status code */ 
141#define AOE_STATUS_PENDING      0x80 /**< Command pending */
142
143/** Maximum number of sectors per packet */
144#define AOE_MAX_COUNT 2
145
146extern void aoe_detach ( struct ata_device *ata );
147extern int aoe_attach ( struct ata_device *ata, struct net_device *netdev,
148                        const char *root_path );
149
150#endif /* _GPXE_AOE_H */
Note: See TracBrowser for help on using the repository browser.