
On 03/25/2018 10:23 PM, Patrick Wildt wrote:
On Sun, Mar 25, 2018 at 10:04:55PM +0200, Heinrich Schuchardt wrote:
Thank you for the explanation. I think the right way go ahead is to add all missing fields and to do away with unused[].
Please, carefully observe the alignment. The spec defines BOOLEAN as 8bit value. ToS is the 19th byte followed by an EFI_IP_ADDRESS which is a 16-byte buffer aligned on a 4-byte boundary. So after ToS we need one byte to ensure alignment. We could define a struct efi_ip_address as u8 a[16] __attribute__((aligned(4))).
Best regards
Heinrich
I have noticed that, yes. I think explicitly padding the struct gives better visibility of the issue, instead of relying on an implicit alignment. Two other structures in u-boot EFI headers contain explicit "pad" members. I'd feel safer to go that route. What do you think about the following?
Best regards, Patrick
I think it is fine to use a padding byte. But still the alignment should be specified for efi_ip_address. Otherwise we might pass data with wrong alignment.
Best regards
Heinrich
diff --git a/include/efi_api.h b/include/efi_api.h index 3ba650e57e..489ff476a4 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -756,7 +756,28 @@ struct efi_pxe_packet {
struct efi_pxe_mode {
- u8 unused[52];
- u8 started;
- u8 ipv6_available;
- u8 ipv6_supported;
- u8 using_ipv6;
- u8 bis_supported;
- u8 bis_detected;
- u8 auto_arp;
- u8 send_guid;
- u8 dhcp_discover_valid;
- u8 dhcp_ack_received;
- u8 proxy_offer_received;
- u8 pxe_discovervalid;
- u8 pxe_reply_received;
- u8 pxe_bis_reply_received;
- u8 icmp_error_received;
- u8 tftp_error_received;
- u8 make_callbacks;
- u8 ttl;
- u8 tos;
- u8 pad;
- struct efi_ip_address station_ip;
- struct efi_ip_address subnet_mask; struct efi_pxe_packet dhcp_discover; struct efi_pxe_packet dhcp_ack; struct efi_pxe_packet proxy_offer;