diff options
Diffstat (limited to 'qemu/roms/ipxe/src/include/ipxe/fip.h')
-rw-r--r-- | qemu/roms/ipxe/src/include/ipxe/fip.h | 451 |
1 files changed, 0 insertions, 451 deletions
diff --git a/qemu/roms/ipxe/src/include/ipxe/fip.h b/qemu/roms/ipxe/src/include/ipxe/fip.h deleted file mode 100644 index 872923375..000000000 --- a/qemu/roms/ipxe/src/include/ipxe/fip.h +++ /dev/null @@ -1,451 +0,0 @@ -#ifndef _IPXE_FIP_H -#define _IPXE_FIP_H - -/* - * Copyright (C) 2010 Michael Brown <mbrown@fensystems.co.uk>. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. - */ - -#include <stdint.h> -#include <ipxe/fc.h> -#include <ipxe/fcels.h> -#include <ipxe/fcoe.h> - -/** A FIP frame header */ -struct fip_header { - /** Frame version */ - uint8_t version; - /** Reserved */ - uint8_t reserved_a; - /** Protocol code */ - uint16_t code; - /** Reserved */ - uint8_t reserved_b; - /** Subcode */ - uint8_t subcode; - /** Descriptor list length in 32-bit words */ - uint16_t len; - /** Flags */ - uint16_t flags; -} __attribute__ (( packed )); - -/** FIP frame version */ -#define FIP_VERSION 0x10 - -/** FIP protocol code */ -enum fip_code { - FIP_CODE_DISCOVERY = 0x0001, /**< Discovery */ - FIP_CODE_ELS = 0x0002, /**< Extended link services */ - FIP_CODE_MAINTAIN = 0x0003, /**< Maintain virtual links */ - FIP_CODE_VLAN = 0x0004, /**< VLAN */ -}; - -/** FIP protocol subcode for discovery */ -enum fip_discovery_subcode { - FIP_DISCOVERY_SOLICIT = 0x01, /**< Discovery solicitation */ - FIP_DISCOVERY_ADVERTISE = 0x02, /**< Discovery advertisement */ -}; - -/** FIP protocol subcode for extended link services */ -enum fip_els_subcode { - FIP_ELS_REQUEST = 0x01, /**< ELS request */ - FIP_ELS_RESPONSE = 0x02, /**< ELS response */ -}; - -/** FIP protocol subcode for keep alive / clear links */ -enum fip_vitality_subcode { - FIP_MAINTAIN_KEEP_ALIVE = 0x01, /**< Keep alive */ - FIP_MAINTAIN_CLEAR_LINKS = 0x02,/**< Clear virtual links */ -}; - -/** FIP protocol subcode for VLAN */ -enum fip_vlan_subcode { - FIP_VLAN_REQUEST = 0x01, /**< VLAN request */ - FIP_VLAN_NOTIFY = 0x02, /**< VLAN notification */ -}; - -/** FIP flags */ -enum fip_flags { - FIP_FP = 0x8000, /**< Fabric-provided MAC address */ - FIP_SP = 0x4000, /**< Server-provided MAC address */ - FIP_A = 0x0004, /**< Available for login */ - FIP_S = 0x0002, /**< Solicited */ - FIP_F = 0x0001, /**< Forwarder */ -}; - -/** FIP descriptor common fields */ -struct fip_common { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; -} __attribute__ (( packed )); - -/** FIP descriptor types */ -enum fip_type { - FIP_RESERVED = 0x00, /**< Reserved */ - FIP_PRIORITY = 0x01, /**< Priority */ - FIP_MAC_ADDRESS = 0x02, /**< MAC address */ - FIP_FC_MAP = 0x03, /**< FC-MAP */ - FIP_NAME_ID = 0x04, /**< Name identifier */ - FIP_FABRIC = 0x05, /**< Fabric */ - FIP_MAX_FCOE_SIZE = 0x06, /**< Max FCoE size */ - FIP_FLOGI = 0x07, /**< FLOGI */ - FIP_NPIV_FDISC = 0x08, /**< NPIV FDISC */ - FIP_LOGO = 0x09, /**< LOGO */ - FIP_ELP = 0x0a, /**< ELP */ - FIP_VX_PORT_ID = 0x0b, /**< Vx port identification */ - FIP_FKA_ADV_P = 0x0c, /**< FKA ADV period */ - FIP_VENDOR_ID = 0x0d, /**< Vendor ID */ - FIP_VLAN = 0x0e, /**< VLAN */ - FIP_NUM_DESCRIPTOR_TYPES -}; - -/** FIP descriptor type is critical */ -#define FIP_IS_CRITICAL( type ) ( (type) <= 0x7f ) - -/** A FIP priority descriptor */ -struct fip_priority { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved; - /** Priority - * - * A higher value indicates a lower priority. - */ - uint8_t priority; -} __attribute__ (( packed )); - -/** Default FIP priority */ -#define FIP_DEFAULT_PRIORITY 128 - -/** Lowest FIP priority */ -#define FIP_LOWEST_PRIORITY 255 - -/** A FIP MAC address descriptor */ -struct fip_mac_address { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** MAC address */ - uint8_t mac[ETH_ALEN]; -} __attribute__ (( packed )); - -/** A FIP FC-MAP descriptor */ -struct fip_fc_map { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[3]; - /** FC-MAP */ - struct fcoe_map map; -} __attribute__ (( packed )); - -/** A FIP name identifier descriptor */ -struct fip_name_id { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Name identifier */ - struct fc_name name; -} __attribute__ (( packed )); - -/** A FIP fabric descriptor */ -struct fip_fabric { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Virtual Fabric ID, if any */ - uint16_t vf_id; - /** Reserved */ - uint8_t reserved; - /** FC-MAP */ - struct fcoe_map map; - /** Fabric name */ - struct fc_name name; -} __attribute__ (( packed )); - -/** A FIP max FCoE size descriptor */ -struct fip_max_fcoe_size { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Maximum FCoE size */ - uint16_t mtu; -} __attribute__ (( packed )); - -/** A FIP descriptor containing an encapsulated ELS frame */ -struct fip_els { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Fibre Channel frame header */ - struct fc_frame_header fc; - /** ELS frame */ - struct fc_els_frame_common els; -} __attribute__ (( packed )); - -/** A FIP descriptor containing an encapsulated login frame */ -struct fip_login { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Fibre Channel frame header */ - struct fc_frame_header fc; - /** ELS frame */ - struct fc_login_frame els; -} __attribute__ (( packed )); - -/** A FIP descriptor containing an encapsulated LOGO request frame */ -struct fip_logo_request { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Fibre Channel frame header */ - struct fc_frame_header fc; - /** ELS frame */ - struct fc_logout_request_frame els; -} __attribute__ (( packed )); - -/** A FIP descriptor containing an encapsulated LOGO response frame */ -struct fip_logo_response { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Fibre Channel frame header */ - struct fc_frame_header fc; - /** ELS frame */ - struct fc_logout_response_frame els; -} __attribute__ (( packed )); - -/** A FIP descriptor containing an encapsulated ELP frame */ -struct fip_elp { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Fibre Channel frame header */ - struct fc_frame_header fc; - /** ELS frame */ - struct fc_els_frame_common els; - /** Uninteresting content */ - uint32_t dull[25]; -} __attribute__ (( packed )); - -/** A FIP descriptor containing an encapsulated LS_RJT frame */ -struct fip_ls_rjt { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Fibre Channel frame header */ - struct fc_frame_header fc; - /** ELS frame */ - struct fc_ls_rjt_frame els; -} __attribute__ (( packed )); - -/** A FIP Vx port identification descriptor */ -struct fip_vx_port_id { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** MAC address */ - uint8_t mac[ETH_ALEN]; - /** Reserved */ - uint8_t reserved; - /** Address identifier */ - struct fc_port_id id; - /** Port name */ - struct fc_name name; -} __attribute__ (( packed )); - -/** A FIP FKA ADV period descriptor */ -struct fip_fka_adv_p { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved; - /** Flags */ - uint8_t flags; - /** Keep alive advertisement period in milliseconds */ - uint32_t period; -} __attribute__ (( packed )); - -/** FIP FKA ADV period flags */ -enum fip_fka_adv_p_flags { - FIP_NO_KEEPALIVE = 0x01, /**< Do not send keepalives */ -}; - -/** A FIP vendor ID descriptor */ -struct fip_vendor_id { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** Reserved */ - uint8_t reserved[2]; - /** Vendor ID */ - uint8_t vendor[8]; -} __attribute__ (( packed )); - -/** A FIP VLAN descriptor */ -struct fip_vlan { - /** Type */ - uint8_t type; - /** Length in 32-bit words */ - uint8_t len; - /** VLAN ID */ - uint16_t vlan; -} __attribute__ (( packed )); - -/** A FIP descriptor */ -union fip_descriptor { - /** Common fields */ - struct fip_common common; - /** Priority descriptor */ - struct fip_priority priority; - /** MAC address descriptor */ - struct fip_mac_address mac_address; - /** FC-MAP descriptor */ - struct fip_fc_map fc_map; - /** Name identifier descriptor */ - struct fip_name_id name_id; - /** Fabric descriptor */ - struct fip_fabric fabric; - /** Max FCoE size descriptor */ - struct fip_max_fcoe_size max_fcoe_size; - /** FLOGI descriptor */ - struct fip_els flogi; - /** FLOGI request descriptor */ - struct fip_login flogi_request; - /** FLOGI LS_ACC descriptor */ - struct fip_login flogi_ls_acc; - /** FLOGI LS_RJT descriptor */ - struct fip_ls_rjt flogi_ls_rjt; - /** NPIV FDISC descriptor */ - struct fip_els npiv_fdisc; - /** NPIV FDISC request descriptor */ - struct fip_login npiv_fdisc_request; - /** NPIV FDISC LS_ACC descriptor */ - struct fip_login npiv_fdisc_ls_acc; - /** NPIV FDISC LS_RJT descriptor */ - struct fip_ls_rjt npiv_fdisc_ls_rjt; - /** LOGO descriptor */ - struct fip_els logo; - /** LOGO request descriptor */ - struct fip_logo_request logo_request; - /** LOGO LS_ACC descriptor */ - struct fip_logo_response logo_ls_acc; - /** LOGO LS_RJT descriptor */ - struct fip_ls_rjt logo_ls_rjt; - /** ELS descriptor */ - struct fip_els elp; - /** ELP request descriptor */ - struct fip_elp elp_request; - /** ELP LS_ACC descriptor */ - struct fip_elp elp_ls_acc; - /** ELP LS_RJT descriptor */ - struct fip_ls_rjt elp_ls_rjt; - /** Vx port identification descriptor */ - struct fip_vx_port_id vx_port_id; - /** FKA ADV period descriptor */ - struct fip_fka_adv_p fka_adv_p; - /** Vendor ID descriptor */ - struct fip_vendor_id vendor_id; - /** VLAN descriptor */ - struct fip_vlan vlan; -} __attribute__ (( packed )); - -/** A FIP descriptor set */ -struct fip_descriptors { - /** Descriptors, indexed by type */ - union fip_descriptor *desc[FIP_NUM_DESCRIPTOR_TYPES]; -}; - -/** - * Define a function to extract a specific FIP descriptor type from a list - * - * @v type Descriptor type - * @v name Descriptor name - * @v finder Descriptor finder - */ -#define FIP_DESCRIPTOR( type, name ) \ - static inline __attribute__ (( always_inline )) \ - typeof ( ( ( union fip_descriptor * ) NULL )->name ) * \ - fip_ ## name ( struct fip_descriptors *descs ) { \ - return &(descs->desc[type]->name); \ - } -FIP_DESCRIPTOR ( FIP_PRIORITY, priority ); -FIP_DESCRIPTOR ( FIP_MAC_ADDRESS, mac_address ); -FIP_DESCRIPTOR ( FIP_FC_MAP, fc_map ); -FIP_DESCRIPTOR ( FIP_NAME_ID, name_id ); -FIP_DESCRIPTOR ( FIP_FABRIC, fabric ); -FIP_DESCRIPTOR ( FIP_MAX_FCOE_SIZE, max_fcoe_size ); -FIP_DESCRIPTOR ( FIP_FLOGI, flogi ); -FIP_DESCRIPTOR ( FIP_FLOGI, flogi_request ); -FIP_DESCRIPTOR ( FIP_FLOGI, flogi_ls_acc ); -FIP_DESCRIPTOR ( FIP_FLOGI, flogi_ls_rjt ); -FIP_DESCRIPTOR ( FIP_NPIV_FDISC, npiv_fdisc ); -FIP_DESCRIPTOR ( FIP_NPIV_FDISC, npiv_fdisc_request ); -FIP_DESCRIPTOR ( FIP_NPIV_FDISC, npiv_fdisc_ls_acc ); -FIP_DESCRIPTOR ( FIP_NPIV_FDISC, npiv_fdisc_ls_rjt ); -FIP_DESCRIPTOR ( FIP_LOGO, logo ); -FIP_DESCRIPTOR ( FIP_LOGO, logo_request ); -FIP_DESCRIPTOR ( FIP_LOGO, logo_ls_acc ); -FIP_DESCRIPTOR ( FIP_LOGO, logo_ls_rjt ); -FIP_DESCRIPTOR ( FIP_ELP, elp ); -FIP_DESCRIPTOR ( FIP_ELP, elp_request ); -FIP_DESCRIPTOR ( FIP_ELP, elp_ls_acc ); -FIP_DESCRIPTOR ( FIP_ELP, elp_ls_rjt ); -FIP_DESCRIPTOR ( FIP_VX_PORT_ID, vx_port_id ); -FIP_DESCRIPTOR ( FIP_FKA_ADV_P, fka_adv_p ); -FIP_DESCRIPTOR ( FIP_VENDOR_ID, vendor_id ); -FIP_DESCRIPTOR ( FIP_VLAN, vlan ); - -#endif /* _IPXE_FIP_H */ |