\r
#pragma pack(1)\r
typedef struct {\r
+ ///\r
+ /// DHCP option code.\r
+ ///\r
UINT8 OpCode;\r
+ ///\r
+ /// Length of the DHCP option data. Not present if OpCode is 0 or 255.\r
+ ///\r
UINT8 Length;\r
+ ///\r
+ /// Start of the DHCP option data. Not present if OpCode is 0 or 255 or if Length is zero.\r
+ ///\r
UINT8 Data[1];\r
} EFI_DHCP4_PACKET_OPTION;\r
#pragma pack()\r
\r
\r
#pragma pack(1)\r
+///\r
+/// EFI_DHCP4_PACKET defines the format of DHCPv4 packets. See RFC 2131 for more information.\r
+///\r
typedef struct {\r
- UINT8 OpCode;\r
- UINT8 HwType;\r
- UINT8 HwAddrLen;\r
- UINT8 Hops;\r
- UINT32 Xid;\r
- UINT16 Seconds;\r
- UINT16 Reserved;\r
- EFI_IPv4_ADDRESS ClientAddr; ///< Client IP address from client\r
- EFI_IPv4_ADDRESS YourAddr; ///< Client IP address from server\r
- EFI_IPv4_ADDRESS ServerAddr; ///< IP address of next server in bootstrap\r
- EFI_IPv4_ADDRESS GatewayAddr; ///< Relay agent IP address\r
- UINT8 ClientHwAddr[16]; ///< Client hardware address\r
- CHAR8 ServerName[64];\r
- CHAR8 BootFileName[128];\r
+ UINT8 OpCode;\r
+ UINT8 HwType;\r
+ UINT8 HwAddrLen;\r
+ UINT8 Hops;\r
+ UINT32 Xid;\r
+ UINT16 Seconds;\r
+ UINT16 Reserved;\r
+ EFI_IPv4_ADDRESS ClientAddr; ///< Client IP address from client\r
+ EFI_IPv4_ADDRESS YourAddr; ///< Client IP address from server\r
+ EFI_IPv4_ADDRESS ServerAddr; ///< IP address of next server in bootstrap\r
+ EFI_IPv4_ADDRESS GatewayAddr; ///< Relay agent IP address\r
+ UINT8 ClientHwAddr[16]; ///< Client hardware address\r
+ CHAR8 ServerName[64];\r
+ CHAR8 BootFileName[128];\r
}EFI_DHCP4_HEADER;\r
#pragma pack()\r
\r
\r
#pragma pack(1)\r
typedef struct {\r
+ ///\r
+ /// Size of the EFI_DHCP4_PACKET buffer.\r
+ ///\r
UINT32 Size;\r
+ ///\r
+ /// Length of the EFI_DHCP4_PACKET from the first byte of the Header field \r
+ /// to the last byte of the Option[] field.\r
+ ///\r
UINT32 Length;\r
\r
struct {\r
+ ///\r
+ /// DHCP packet header.\r
+ ///\r
EFI_DHCP4_HEADER Header;\r
+ ///\r
+ /// DHCP magik cookie in network byte order.\r
+ ///\r
UINT32 Magik;\r
+ ///\r
+ /// Start of the DHCP packed option data.\r
+ ///\r
UINT8 Option[1];\r
} Dhcp4;\r
} EFI_DHCP4_PACKET;\r
\r
\r
typedef enum {\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver is stopped\r
+ ///\r
Dhcp4Stopped = 0x0,\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver is inactive\r
+ ///\r
Dhcp4Init = 0x1,\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver is collecting DHCP offer packets from DHCP servers.\r
+ ///\r
Dhcp4Selecting = 0x2,\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver has sent the request to the DHCP server and is waiting for a response.\r
+ ///\r
Dhcp4Requesting = 0x3,\r
+ ///\r
+ /// The DHCP configuration has completed.\r
+ ///\r
Dhcp4Bound = 0x4,\r
+ ///\r
+ /// The DHCP configuration is being renewed and another request has\r
+ /// been sent out, but it has not received a response from the server yet.\r
+ ///\r
Dhcp4Renewing = 0x5,\r
+ ///\r
+ /// The DHCP configuration has timed out and the EFI DHCPv4\r
+ /// Protocol driver is trying to extend the lease time.\r
+ ///\r
Dhcp4Rebinding = 0x6,\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver is initialized with a previously\r
+ /// allocated or known IP address.\r
+ ///\r
Dhcp4InitReboot = 0x7,\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver is seeking to reuse the previously\r
+ /// allocated IP address by sending a request to the DHCP server.\r
+ ///\r
Dhcp4Rebooting = 0x8\r
} EFI_DHCP4_STATE;\r
\r
\r
typedef enum{\r
+ ///\r
+ /// A DHCPDISCOVER packet is about to be sent.\r
+ ///\r
Dhcp4SendDiscover = 0x01,\r
+ ///\r
+ /// A DHCPOFFER packet was just received.\r
+ ///\r
Dhcp4RcvdOffer = 0x02,\r
+ ///\r
+ /// It is time for Dhcp4Callback to select an offer.\r
+ ///\r
Dhcp4SelectOffer = 0x03,\r
+ ///\r
+ /// A request packet is about to be sent.\r
+ ///\r
Dhcp4SendRequest = 0x04,\r
+ ///\r
+ /// A DHCPACK packet was received and will be passed to Dhcp4Callback.\r
+ ///\r
Dhcp4RcvdAck = 0x05,\r
+ ///\r
+ /// A DHCPNAK packet was received and will be passed to Dhcp4Callback.\r
+ ///\r
Dhcp4RcvdNak = 0x06,\r
+ ///\r
+ /// A decline packet is about to be sent.\r
+ ///\r
Dhcp4SendDecline = 0x07,\r
+ ///\r
+ /// The DHCP configuration process has completed. No packet is associated with this event.\r
+ ///\r
Dhcp4BoundCompleted = 0x08,\r
+ ///\r
+ /// It is time to enter the Dhcp4Renewing state and to contact the server \r
+ /// that originally issued the network address. No packet is associated with this event.\r
+ ///\r
Dhcp4EnterRenewing = 0x09,\r
+ ///\r
+ /// It is time to enter the Dhcp4Rebinding state and to contact any server. \r
+ /// No packet is associated with this event.\r
+ ///\r
Dhcp4EnterRebinding = 0x0a,\r
+ ///\r
+ /// The configured IP address was lost either because the lease has expired, \r
+ /// the user released the configuration, or a DHCPNAK packet was received in \r
+ /// the Dhcp4Renewing or Dhcp4Rebinding state. No packet is associated with this event.\r
+ ///\r
Dhcp4AddressLost = 0x0b,\r
+ ///\r
+ /// The DHCP process failed because a DHCPNAK packet was received or the user \r
+ /// aborted the DHCP process at a time when the configuration was not available yet. \r
+ /// No packet is associated with this event.\r
+ ///\r
Dhcp4Fail = 0x0c\r
} EFI_DHCP4_EVENT;\r
\r
OUT EFI_DHCP4_PACKET **NewPacket OPTIONAL\r
);\r
\r
-\r
typedef struct {\r
+ ///\r
+ /// Number of times to try sending DHCPDISCOVER packets and \r
+ /// waiting for DHCPOFFER packets before accepting failure.\r
+ /// Set to zero to use the default try counts and timeout values.\r
+ ///\r
UINT32 DiscoverTryCount;\r
+ ///\r
+ /// Maximum amount of time (in seconds) to wait for DHCPOFFER packets in each \r
+ /// of the retries. Timeout values of zero will default to a timeout value \r
+ /// of one second. Set to NULL to use default timeout values.\r
+ ///\r
UINT32 *DiscoverTimeout;\r
+ ///\r
+ /// Number of times to try sending DHCPREQUEST packets and waiting for DHCPACK \r
+ /// packets before accepting failure. Set to zero to use the default try counts and timeout values.\r
+ ///\r
UINT32 RequestTryCount;\r
+ ///\r
+ /// Maximum amount of time (in seconds) to wait for DHCPACK packets in each of the retries. \r
+ /// Timeout values of zero will default to a timeout value of one second. \r
+ /// Set to NULL to use default timeout values.\r
+ ///\r
UINT32 *RequestTimeout;\r
+ ///\r
+ /// Setting this parameter to the previously allocated IP address will cause \r
+ /// the EFI DHCPv4 Protocol driver to enter the Dhcp4InitReboot state. \r
+ /// Set this field to 0.0.0.0 to enter the Dhcp4Init state.\r
+ ///\r
EFI_IPv4_ADDRESS ClientAddress;\r
+ ///\r
+ /// The callback function to intercept various events that occurred in \r
+ /// the DHCP configuration process. Set to NULL to ignore all those events.\r
+ ///\r
EFI_DHCP4_CALLBACK Dhcp4Callback;\r
- void *CallbackContext;\r
+ ///\r
+ /// Pointer to the context that will be passed to Dhcp4Callback when it is called.\r
+ ///\r
+ VOID *CallbackContext;\r
+ ///\r
+ /// Number of DHCP options in the OptionList.\r
+ ///\r
UINT32 OptionCount;\r
+ ///\r
+ /// List of DHCP options to be included in every DHCPDISCOVER packet and \r
+ /// subsequent DHCPREQUEST packet that is generated from DHCPOFFER packets.\r
+ ///\r
EFI_DHCP4_PACKET_OPTION **OptionList;\r
} EFI_DHCP4_CONFIG_DATA;\r
\r
\r
typedef struct {\r
+ ///\r
+ /// The EFI DHCPv4 Protocol driver operating state. \r
+ ///\r
EFI_DHCP4_STATE State;\r
+ ///\r
+ /// The configuration data of the current EFI DHCPv4 Protocol driver instance.\r
+ ///\r
EFI_DHCP4_CONFIG_DATA ConfigData;\r
+ ///\r
+ /// The client IP address that was acquired from the DHCP server. If it is zero,\r
+ /// the DHCP acquisition has not completed yet and the following fields in this structure are undefined.\r
+ ///\r
EFI_IPv4_ADDRESS ClientAddress;\r
+ ///\r
+ /// The local hardware address.\r
+ ///\r
EFI_MAC_ADDRESS ClientMacAddress;\r
+ ///\r
+ /// The server IP address that is providing the DHCP service to this client.\r
+ ///\r
EFI_IPv4_ADDRESS ServerAddress;\r
+ ///\r
+ /// The router IP address that was acquired from the DHCP server. \r
+ /// May be zero if the server does not offer this address.\r
+ ///\r
EFI_IPv4_ADDRESS RouterAddress;\r
+ ///\r
+ /// The subnet mask of the connected network that was acquired from the DHCP server.\r
+ ///\r
EFI_IPv4_ADDRESS SubnetMask;\r
+ ///\r
+ /// The lease time (in 1-second units) of the configured IP address. \r
+ /// The value 0xFFFFFFFF means that the lease time is infinite. \r
+ /// A default lease of 7 days is used if the DHCP server does not provide a value.\r
+ ///\r
UINT32 LeaseTime;\r
+ ///\r
+ /// The cached latest DHCPACK or DHCPNAK or BOOTP REPLY packet. May be NULL if no packet is cached.\r
+ ///\r
EFI_DHCP4_PACKET *ReplyPacket;\r
} EFI_DHCP4_MODE_DATA;\r
\r
\r
typedef struct {\r
+ ///\r
+ /// Alternate listening address. It can be a unicast, multicast, or broadcast address.\r
+ ///\r
EFI_IPv4_ADDRESS ListenAddress;\r
+ ///\r
+ /// The subnet mask of above listening unicast/broadcast IP address. \r
+ /// Ignored if ListenAddress is a multicast address.\r
+ ///\r
EFI_IPv4_ADDRESS SubnetMask;\r
+ ///\r
+ /// Alternate station source (or listening) port number. \r
+ /// If zero, then the default station port number (68) will be used.\r
+ ///\r
UINT16 ListenPort;\r
} EFI_DHCP4_LISTEN_POINT;\r
\r
\r
typedef struct {\r
+ ///\r
+ /// The completion status of transmitting and receiving.\r
+ ///\r
EFI_STATUS Status;\r
+ ///\r
+ /// If not NULL, the event that will be signaled when the collection process \r
+ /// completes. If NULL, this function will busy-wait until the collection process competes.\r
+ ///\r
EFI_EVENT CompletionEvent;\r
+ ///\r
+ /// Pointer to the server IP address. This address may be a unicast, multicast, or broadcast address.\r
+ ///\r
EFI_IPv4_ADDRESS RemoteAddress;\r
+ ///\r
+ /// Server listening port number. If zero, the default server listening port number (67) will be used.\r
+ ///\r
UINT16 RemotePort;\r
+ ///\r
+ /// Pointer to the gateway address to override the existing setting.\r
+ ///\r
EFI_IPv4_ADDRESS GatewayAddress;\r
+ ///\r
+ /// The number of entries in ListenPoints. If zero, the default station address and port number 68 are used.\r
+ ///\r
UINT32 ListenPointCount;\r
+ ///\r
+ /// An array of station address and port number pairs that are used as receiving filters. \r
+ /// The first entry is also used as the source address and source port of the outgoing packet.\r
+ ///\r
EFI_DHCP4_LISTEN_POINT *ListenPoints;\r
+ ///\r
+ /// Number of seconds to collect responses. Zero is invalid.\r
+ ///\r
UINT32 TimeoutValue;\r
+ ///\r
+ /// Pointer to the packet to be transmitted.\r
+ ///\r
EFI_DHCP4_PACKET *Packet;\r
+ ///\r
+ /// Number of received packets.\r
+ ///\r
UINT32 ResponseCount;\r
+ ///\r
+ /// Pointer to the allocated list of received packets.\r
+ ///\r
EFI_DHCP4_PACKET *ResponseList;\r
} EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN;\r
\r
Dhcp4Stopped, Dhcp4Init, Dhcp4InitReboot, or Dhcp4Bound state;\r
Or onother instance of this EFI DHCPv4 Protocol driver is already\r
in a valid configured state.\r
- @retval EFI_INVALID_PARAMETER Some parameter is NULL.\r
+ @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:\r
+ This is NULL.\r
+ DiscoverTryCount > 0 and DiscoverTimeout is NULL\r
+ RequestTryCount > 0 and RequestTimeout is NULL.\r
+ OptionCount >0 and OptionList is NULL.\r
+ ClientAddress is not a valid unicast address.\r
@retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.\r
@retval EFI_DEVICE_ERROR An unexpected system or network error occurred.\r
\r
\r
@retval EFI_SUCCESS The new packet was built.\r
@retval EFI_OUT_OF_RESOURCES Storage for the new packet could not be allocated.\r
- @retval EFI_INVALID_PARAMETER Some parameter is NULL.\r
+ @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
+ This is NULL.\r
+ SeedPacket is NULL.\r
+ SeedPacket is not a well-formed DHCP packet.\r
+ AppendCount is not zero and AppendList is NULL.\r
+ DeleteCount is not zero and DeleteList is NULL.\r
+ NewPacket is NULL\r
+ Both DeleteCount and AppendCount are zero and\r
+ NewPacket is not NULL.\r
\r
**/\r
typedef\r
@param Token Pointer to the EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN structure.\r
\r
@retval EFI_SUCCESS The packet was successfully queued for transmission.\r
- @retval EFI_INVALID_PARAMETER Some parameter is NULL.\r
+ @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
+ This is NULL.\r
+ Token.RemoteAddress is zero.\r
+ Token.Packet is NULL.\r
+ Token.Packet is not a well-formed DHCP packet.\r
+ The transaction ID in Token.Packet is in use by another DHCP process.\r
@retval EFI_NOT_READY The previous call to this function has not finished yet. Try to call\r
this function after collection process completes.\r
@retval EFI_NO_MAPPING The default station address is not available yet.\r
@retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.\r
+ @retval EFI_UNSUPPORTED The implementation doesn’t support this function\r
@retval Others Some other unexpected error occurred.\r
\r
**/\r
options are not included.\r
\r
@retval EFI_SUCCESS The packet was successfully parsed.\r
- @retval EFI_INVALID_PARAMETER Some parameter is NULL.\r
+ @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
+ This is NULL.\r
+ Packet is NULL.\r
+ Packet is not a well-formed DHCP packet.\r
+ OptionCount is NULL.\r
@retval EFI_BUFFER_TOO_SMALL One or more of the following conditions is TRUE:\r
1) *OptionCount is smaller than the number of options that\r
were found in the Packet.\r
2) PacketOptionList is NULL.\r
+ @retval EFI_OUT_OF_RESOURCE The packet is failed to parse because of resource shortage.\r
\r
**/\r
typedef\r
typedef struct _EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL;\r
\r
/**\r
- Test to see if this driver supports ControllerHandle. This service\r
- is called by the EFI boot service ConnectController(). In\r
- order to make drivers as small as possible, there are a few calling\r
- restrictions for this service. ConnectController() must\r
- follow these calling restrictions. If any other agent wishes to call\r
- Supported() it must also follow these calling restrictions.\r
-\r
- @param This Protocol instance pointer.\r
- @param ControllerHandle Handle of device to test\r
- @param RemainingDevicePath Optional parameter use to pick a specific child\r
- device to start.\r
-\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval EFI_ALREADY_STARTED This driver is already running on this device\r
- @retval other This driver does not support this device\r
-\r
+ Tests to see if this driver supports a given controller. If a child device is provided, \r
+ it further tests to see if this driver supports creating a handle for the specified child device.\r
+\r
+ @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+ @param ControllerHandle The handle of the controller to test. This handle \r
+ must support a protocol interface that supplies \r
+ an I/O abstraction to the driver.\r
+ @param RemainingDevicePath A pointer to the remaining portion of a device path. \r
+ This parameter is ignored by device drivers, and is optional for bus drivers.\r
+\r
+\r
+ @retval EFI_SUCCESS The device specified by ControllerHandle and\r
+ RemainingDevicePath is supported by the driver specified by This.\r
+ @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and\r
+ RemainingDevicePath is already being managed by the driver\r
+ specified by This.\r
+ @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and\r
+ RemainingDevicePath is already being managed by a different\r
+ driver or an application that requires exclusive acces.\r
+ @retval EFI_UNSUPPORTED The device specified by ControllerHandle and\r
+ RemainingDevicePath is not supported by the driver specified by This.\r
**/\r
typedef\r
EFI_STATUS\r
);\r
\r
/**\r
- Start this driver on ControllerHandle. This service is called by the\r
- EFI boot service ConnectController(). In order to make\r
- drivers as small as possible, there are a few calling restrictions for\r
- this service. ConnectController() must follow these\r
- calling restrictions. If any other agent wishes to call Start() it\r
- must also follow these calling restrictions.\r
-\r
- @param This Protocol instance pointer.\r
- @param ControllerHandle Handle of device to bind driver to\r
- @param RemainingDevicePath Optional parameter use to pick a specific child\r
- device to start.\r
-\r
- @retval EFI_SUCCESS This driver is added to ControllerHandle\r
- @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle\r
- @retval other This driver does not support this device\r
+ Start this driver on ControllerHandle. The Start() function is designed to be \r
+ invoked from the EFI boot service ConnectController(). As a result, much of \r
+ the error checking on the parameters to Start() has been moved into this \r
+ common boot service. It is legal to call Start() from other locations, \r
+ but the following calling restrictions must be followed or the system behavior will not be deterministic.\r
+ 1. ControllerHandle must be a valid EFI_HANDLE.\r
+ 2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned\r
+ EFI_DEVICE_PATH_PROTOCOL.\r
+ 3. Prior to calling Start(), the Supported() function for the driver specified by This must\r
+ have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS. \r
+\r
+ @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+ @param ControllerHandle The handle of the controller to start. This handle \r
+ must support a protocol interface that supplies \r
+ an I/O abstraction to the driver.\r
+ @param RemainingDevicePath A pointer to the remaining portion of a device path. \r
+ This parameter is ignored by device drivers, and is optional for bus drivers.\r
+\r
+ @retval EFI_SUCCESS The device was started.\r
+ @retval EFI_ALREADY_STARTED The device could not be started due to a device error.\r
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
\r
**/\r
typedef\r
);\r
\r
/**\r
- Stop this driver on ControllerHandle. This service is called by the\r
- EFI boot service DisconnectController(). In order to\r
- make drivers as small as possible, there are a few calling\r
- restrictions for this service. DisconnectController()\r
- must follow these calling restrictions. If any other agent wishes\r
- to call Stop() it must also follow these calling restrictions.\r
+ Stop this driver on ControllerHandle. \r
+ The Stop() function is designed to be invoked from the EFI boot service DisconnectController(). \r
+ As a result, much of the error checking on the parameters to Stop() has been moved \r
+ into this common boot service. It is legal to call Stop() from other locations, \r
+ but the following calling restrictions must be followed or the system behavior will not be deterministic.\r
+ 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this\r
+ same driver's Start() function.\r
+ 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid\r
+ EFI_HANDLE. In addition, all of these handles must have been created in this driver’s\r
+ Start() function, and the Start() function must have called OpenProtocol() on\r
+ ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.\r
\r
- @param This Protocol instance pointer.\r
- @param ControllerHandle Handle of device to stop driver on\r
- @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of\r
- children is zero stop the entire bus driver.\r
- @param ChildHandleBuffer List of Child Handles to Stop.\r
-\r
- @retval EFI_SUCCESS This driver is removed ControllerHandle\r
- @retval other This driver was not removed from this device\r
+ @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+ @param ControllerHandle A handle to the device being stopped. The handle must \r
+ support a bus specific I/O protocol for the driver \r
+ to use to stop the device.\r
+ @param NumberOfChildren The number of child device handles in ChildHandleBuffer.\r
+ @param ChildHandleBuffer An array of child handles to be freed. May be NULL if NumberOfChildren is 0.\r
+\r
+ @retval EFI_SUCCESS The device was stopped.\r
+ @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.\r
\r
**/\r
typedef\r
} EFI_PIXEL_BITMASK;\r
\r
typedef enum {\r
+ ///\r
+ /// A pixel is 32-bits and byte zero represents red, byte one represents green, \r
+ /// byte two represents blue, and byte three is reserved. This is the definition \r
+ /// for the physical frame buffer. The byte values for the red, green, and blue \r
+ /// components represent the color intensity. This color intensity value range \r
+ /// from a minimum intensity of 0 to maximum intensity of 255.\r
+ ///\r
PixelRedGreenBlueReserved8BitPerColor,\r
+ ///\r
+ /// A pixel is 32-bits and byte zero represents blue, byte one represents green, \r
+ /// byte two represents red, and byte three is reserved. This is the definition \r
+ /// for the physical frame buffer. The byte values for the red, green, and blue \r
+ /// components represent the color intensity. This color intensity value range \r
+ /// from a minimum intensity of 0 to maximum intensity of 255.\r
+ ///\r
PixelBlueGreenRedReserved8BitPerColor,\r
+ ///\r
+ /// The Pixel definition of the physical frame buffer.\r
+ ///\r
PixelBitMask,\r
+ ///\r
+ /// This mode does not support a physical frame buffer.\r
+ ///\r
PixelBltOnly,\r
+ ///\r
+ /// Valid EFI_GRAPHICS_PIXEL_FORMAT enum values are less than this value.\r
+ ///\r
PixelFormatMax\r
} EFI_GRAPHICS_PIXEL_FORMAT;\r
\r
typedef struct {\r
+ ///\r
+ /// The version of this data structure. A value of zero represents the \r
+ /// EFI_GRAPHICS_OUTPUT_MODE_INFORMATION structure as defined in this specification.\r
+ ///\r
UINT32 Version;\r
+ ///\r
+ /// The size of video screen in pixels in the X dimension.\r
+ ///\r
UINT32 HorizontalResolution;\r
+ ///\r
+ /// The size of video screen in pixels in the Y dimension.\r
+ ///\r
UINT32 VerticalResolution;\r
+ ///\r
+ /// Enumeration that defines the physical format of the pixel. A value of PixelBltOnly \r
+ /// implies that a linear frame buffer is not available for this mode.\r
+ ///\r
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;\r
+ ///\r
+ /// This bit-mask is only valid if PixelFormat is set to PixelPixelBitMask. \r
+ /// A bit being set defines what bits are used for what purpose such as Red, Green, Blue, or Reserved.\r
+ ///\r
EFI_PIXEL_BITMASK PixelInformation;\r
+ ///\r
+ /// Defines the number of pixel elements per video memory line.\r
+ /// \r
UINT32 PixelsPerScanLine;\r
} EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;\r
\r
);\r
\r
typedef struct {\r
+ ///\r
+ /// The number of modes supported by QueryMode() and SetMode().\r
+ ///\r
UINT32 MaxMode;\r
+ ///\r
+ /// Current Mode of the graphics device. Valid mode numbers are 0 to MaxMode -1.\r
+ ///\r
UINT32 Mode;\r
+ ///\r
+ /// Pointer to read-only EFI_GRAPHICS_OUTPUT_MODE_INFORMATION data.\r
+ ///\r
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
+ ///\r
+ /// Size of Info structure in bytes.\r
+ ///\r
UINTN SizeOfInfo;\r
+ ///\r
+ /// Base address of graphics linear frame buffer.\r
+ /// Offset zero in FrameBufferBase represents the upper left pixel of the display.\r
+ ///\r
EFI_PHYSICAL_ADDRESS FrameBufferBase;\r
+ ///\r
+ /// Size of the frame buffer represented by FrameBufferBase in bytes.\r
+ ///\r
UINTN FrameBufferSize;\r
} EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;\r
\r