aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/fcoe.h
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2010-09-15 03:10:27 +0100
committerMichael Brown <mcb30@ipxe.org>2010-09-15 03:20:54 +0100
commitdace106f8286ff5484296021c5c687dbba68fefc (patch)
tree2b08c90dc564739828796f2dd5dc8d291c17c728 /src/include/ipxe/fcoe.h
parentd2a2618d76b6ec82dd3cec6fe492d3a2fed87591 (diff)
downloadipxe-dace106f8286ff5484296021c5c687dbba68fefc.tar.gz
[fcoe] Add support for Fibre Channel over Ethernet
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/fcoe.h')
-rw-r--r--src/include/ipxe/fcoe.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/include/ipxe/fcoe.h b/src/include/ipxe/fcoe.h
new file mode 100644
index 000000000..25723ec7a
--- /dev/null
+++ b/src/include/ipxe/fcoe.h
@@ -0,0 +1,76 @@
+#ifndef _IPXE_FCOE_H
+#define _IPXE_FCOE_H
+
+/**
+ * @file
+ *
+ * Fibre Channel over Ethernet
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <stdint.h>
+#include <ipxe/fc.h>
+#include <ipxe/if_ether.h>
+
+/** An FCoE name */
+union fcoe_name {
+ /** Fibre Channel name */
+ struct fc_name fc;
+ /** FCoE name */
+ struct {
+ /** Naming authority */
+ uint16_t authority;
+ /** MAC address */
+ uint8_t mac[ETH_ALEN];
+ } __attribute__ (( packed )) fcoe;
+};
+
+/** IEEE 48-bit address */
+#define FCOE_AUTHORITY_IEEE 0x1000
+
+/** IEEE extended */
+#define FCOE_AUTHORITY_IEEE_EXTENDED 0x2000
+
+/** An FCoE header */
+struct fcoe_header {
+ /** FCoE frame version */
+ uint8_t version;
+ /** Reserved */
+ uint8_t reserved[12];
+ /** Start of Frame marker */
+ uint8_t sof;
+} __attribute__ (( packed ));
+
+/** FCoE frame version */
+#define FCOE_FRAME_VER 0x00
+
+/** Start of Frame marker values */
+enum fcoe_sof {
+ FCOE_SOF_F = 0x28, /**< Start of Frame Class F */
+ FCOE_SOF_I2 = 0x2d, /**< Start of Frame Initiate Class 2 */
+ FCOE_SOF_N2 = 0x35, /**< Start of Frame Normal Class 2 */
+ FCOE_SOF_I3 = 0x2e, /**< Start of Frame Initiate Class 3 */
+ FCOE_SOF_N3 = 0x36, /**< Start of Frame Normal Class 3 */
+};
+
+/** An FCoE footer */
+struct fcoe_footer {
+ /** CRC */
+ uint32_t crc;
+ /** End of frame marker */
+ uint8_t eof;
+ /** Reserved */
+ uint8_t reserved[3];
+} __attribute__ (( packed ));
+
+/** End of Frame marker value */
+enum fcoe_eof {
+ FCOE_EOF_N = 0x41, /**< End of Frame Normal */
+ FCOE_EOF_T = 0x42, /**< End of Frame Terminate */
+ FCOE_EOF_NI = 0x49, /**< End of Frame Invalid */
+ FCOE_EOF_A = 0x50, /**< End of Frame Abort */
+};
+
+#endif /* _IPXE_FCOE_H */