123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- #ifndef _IPXE_EDD_H
- #define _IPXE_EDD_H
-
- /** @file
- *
- * Enhanced Disk Drive specification
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include <stdint.h>
- #include <ipxe/interface.h>
-
- /** An EDD host bus type */
- struct edd_host_bus_type {
- /** Type */
- uint32_t type;
- } __attribute__ (( packed ));
-
- /** EDD bus type */
- #define EDD_BUS_TYPE_FIXED( a, b, c, d, ... ) \
- ( ( (a) << 0 ) | ( (b) << 8 ) | ( (c) << 16 ) | ( (d) << 24 ) )
- #define EDD_BUS_TYPE( ... ) \
- EDD_BUS_TYPE_FIXED ( __VA_ARGS__, ' ', ' ', ' ', ' ' )
- /** EDD PCI bus type */
- #define EDD_BUS_TYPE_PCI EDD_BUS_TYPE ( 'P', 'C', 'I' )
- /** EDD ISA bus type */
- #define EDD_BUS_TYPE_ISA EDD_BUS_TYPE ( 'I', 'S', 'A' )
- /** EDD PCI-X bus type */
- #define EDD_BUS_TYPE_PCIX EDD_BUS_TYPE ( 'P', 'C', 'I', 'X' )
- /** EDD Infiniband bus type */
- #define EDD_BUS_TYPE_IBND EDD_BUS_TYPE ( 'I', 'B', 'N', 'D' )
- /** EDD PCI Express bus type */
- #define EDD_BUS_TYPE_XPRS EDD_BUS_TYPE ( 'X', 'P', 'R', 'S' )
- /** EDD HyperTransport bus type */
- #define EDD_BUS_TYPE_HTPT EDD_BUS_TYPE ( 'H', 'T', 'P', 'T' )
-
- /** An EDD interface type */
- struct edd_interface_type {
- /** Type */
- uint64_t type;
- } __attribute__ (( packed ));
-
- /** EDD interface type */
- #define EDD_INTF_TYPE_FIXED( a, b, c, d, e, f, g, h, ... ) \
- ( ( ( ( uint64_t ) (a) ) << 0 ) | ( ( ( uint64_t ) (b) ) << 8 ) | \
- ( ( ( uint64_t ) (c) ) << 16 ) | ( ( ( uint64_t ) (d) ) << 24 ) | \
- ( ( ( uint64_t ) (e) ) << 32 ) | ( ( ( uint64_t ) (f) ) << 40 ) | \
- ( ( ( uint64_t ) (g) ) << 48 ) | ( ( ( uint64_t ) (h) ) << 56 ) )
- #define EDD_INTF_TYPE( ... ) \
- EDD_INTF_TYPE_FIXED ( __VA_ARGS__, \
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' )
- /** EDD ATA interface type */
- #define EDD_INTF_TYPE_ATA EDD_INTF_TYPE ( 'A', 'T', 'A' )
- /** EDD ATAPI interface type */
- #define EDD_INTF_TYPE_ATAPI EDD_INTF_TYPE ( 'A', 'T', 'A', 'P', 'I' )
- /** EDD SCSI interface type */
- #define EDD_INTF_TYPE_SCSI EDD_INTF_TYPE ( 'S', 'C', 'S', 'I' )
- /** EDD USB interface type */
- #define EDD_INTF_TYPE_USB EDD_INTF_TYPE ( 'U', 'S', 'B' )
- /** EDD 1394 interface type */
- #define EDD_INTF_TYPE_1394 EDD_INTF_TYPE ( '1', '3', '9', '4' )
- /** EDD Fibre Channel interface type */
- #define EDD_INTF_TYPE_FIBRE EDD_INTF_TYPE ( 'F', 'I', 'B', 'R', 'E' )
- /** EDD I2O interface type */
- #define EDD_INTF_TYPE_I2O EDD_INTF_TYPE ( 'I', '2', 'O' )
- /** EDD RAID interface type */
- #define EDD_INTF_TYPE_RAID EDD_INTF_TYPE ( 'R', 'A', 'I', 'D' )
- /** EDD SATA interface type */
- #define EDD_INTF_TYPE_SATA EDD_INTF_TYPE ( 'S', 'A', 'T', 'A' )
- /** EDD SAS interface type */
- #define EDD_INTF_TYPE_SAS EDD_INTF_TYPE ( 'S', 'A', 'S' )
-
- /** An EDD interface path */
- union edd_interface_path {
- /** Legacy bus type */
- struct {
- /** Base address */
- uint16_t base;
- } __attribute__ (( packed )) legacy;
- /** PCI, PCI-X, PCI Express, or HyperTransport bus type */
- struct {
- /** Bus */
- uint8_t bus;
- /** Slot */
- uint8_t slot;
- /** Function */
- uint8_t function;
- /** Channel number */
- uint8_t channel;
- } __attribute__ (( packed )) pci;
- /** Padding */
- uint8_t pad[8];
- } __attribute__ (( packed ));
-
- /** An EDD device path */
- union edd_device_path {
- /** ATA interface type */
- struct {
- /** Slave */
- uint8_t slave;
- } __attribute__ (( packed )) ata;
- /** ATAPI interface type */
- struct {
- /** Slave */
- uint8_t slave;
- /** Logical Unit Number */
- uint8_t lun;
- } __attribute__ (( packed )) atapi;
- /** SCSI interface type */
- struct {
- /** SCSI ID */
- uint16_t id;
- /** Logical Unit Number */
- uint64_t lun;
- } __attribute__ (( packed )) scsi;
- /** USB interface type */
- struct {
- /** Serial number */
- uint64_t serial;
- } __attribute__ (( packed )) usb;
- /** IEEE1394 interface type */
- struct {
- /** GUID */
- uint64_t guid;
- } __attribute__ (( packed )) ieee1394;
- /** Fibre Channel interface type */
- struct {
- /** WWN */
- uint64_t wwn;
- /** Logical Unit Number */
- uint64_t lun;
- } __attribute__ (( packed )) fibre;
- /** I2O interface type */
- struct {
- /** Identity tag */
- uint64_t tag;
- } __attribute__ (( packed )) i2o;
- /** RAID interface type */
- struct {
- /** Array number */
- uint32_t array;
- } __attribute__ (( packed )) raid;
- /** SATA interface type */
- struct {
- /** Port number */
- uint8_t port;
- /** Port multiplier number */
- uint8_t multiplier;
- } __attribute__ (( packed )) sata;
- /** SAS interface type */
- struct {
- /** Address */
- uint64_t address;
- } __attribute__ (( packed )) sas;
- /** Padding */
- uint8_t pad[16];
- } __attribute__ (( packed ));
-
- /** EDD device path information */
- struct edd_device_path_information {
- /** Key */
- uint16_t key;
- /** Length of this structure */
- uint8_t len;
- /** Reserved */
- uint8_t reserved_a[3];
- /** Host bus type */
- struct edd_host_bus_type host_bus_type;
- /** Interface type */
- struct edd_interface_type interface_type;
- /** Interface path */
- union edd_interface_path interface_path;
- /** Device path */
- union edd_device_path device_path;
- /** Reserved */
- uint8_t reserved_b;
- /** Checksum */
- uint8_t checksum;
- } __attribute__ (( packed ));
-
- /** EDD device path information key */
- #define EDD_DEVICE_PATH_INFO_KEY 0xbedd
-
- extern int edd_describe ( struct interface *intf,
- struct edd_interface_type *type,
- union edd_device_path *path );
- #define edd_describe_TYPE( object_type ) \
- typeof ( int ( object_type, struct edd_interface_type *type, \
- union edd_device_path *path ) )
-
- #endif /* _IPXE_EDD_H */
|