/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Data structure definitions for firmware screen block (BMPBLOCK). * * The BmpBlock structure looks like: * +-----------------------------------------+ * | BmpBlock Header | * +-----------------------------------------+ * | ScreenLayout[0] | \ * +-----------------------------------------+ | * | ScreenLayout[1] | | * +-----------------------------------------+ Localization[0] * | ... | | * +-----------------------------------------+ | * | ScreenLayout[number_of_screenlayouts-1] | / * +-----------------------------------------+ * | ScreenLayout[0] | \ * +-----------------------------------------+ Localization[1] * | ... | / * +-----------------------------------------+ ... * | ScreenLayout[0] | \ * +-----------------------------------------+ Localization[ * | ... | / number_of_localizations-1] * +-----------------------------------------+ * | ImageInfo[0] | * +-----------------------------------------+ * | Image Content | * +-----------------------------------------+ * | ImageInfo[2] | ImageInfo is 4-byte aligned. * +-----------------------------------------+ * | Image Content | * +-----------------------------------------+ * | ... | * +-----------------------------------------+ * | ImageInfo[number_fo_images-1] | * +-----------------------------------------+ * | Image Content | * +-----------------------------------------+ * | List of locale names | * +-----------------------------------------+ */ #ifndef VBOOT_REFERENCE_BMPBLK_HEADER_H_ #define VBOOT_REFERENCE_BMPBLK_HEADER_H_ #include #define BMPBLOCK_SIGNATURE "$BMP" #define BMPBLOCK_SIGNATURE_SIZE (4) #define BMPBLOCK_MAJOR_VERSION (0x0002) #define BMPBLOCK_MINOR_VERSION (0x0000) #define MAX_IMAGE_IN_LAYOUT (16) /* BMPBLOCK header, describing how many screen layouts and image infos */ typedef struct BmpBlockHeader { /* BMPBLOCK_SIGNATURE $BMP */ uint8_t signature[BMPBLOCK_SIGNATURE_SIZE]; uint16_t major_version; /* see BMPBLOCK_MAJOR_VER */ uint16_t minor_version; /* see BMPBLOCK_MINOR_VER */ uint32_t number_of_localizations; /* Number of localizations */ /* Number of screen layouts in each localization */ uint32_t number_of_screenlayouts; uint32_t number_of_imageinfos; /* Number of image infos */ /* Offset of locale-translation string */ uint32_t locale_string_offset; uint32_t reserved[2]; } __attribute__((packed)) BmpBlockHeader; /* Screen layout, describing how to stack multiple images on screen */ typedef struct ScreenLayout { /* * Images contained in the screen. Will be rendered from 0 to * (number_of_images-1). */ struct { /* (X,Y) offset of image to be rendered */ uint32_t x; uint32_t y; /* Offset of image info from start of BMPBLOCK; 0=end it. */ uint32_t image_info_offset; } images[MAX_IMAGE_IN_LAYOUT]; } __attribute__((packed)) ScreenLayout; /* Constants for screen index */ typedef enum ScreenIndex { SCREEN_DEVELOPER_WARNING = 0, SCREEN_RECOVERY_REMOVE, SCREEN_RECOVERY_NO_GOOD, SCREEN_RECOVERY_INSERT, SCREEN_RECOVERY_TO_DEV, SCREEN_DEVELOPER_TO_NORM, SCREEN_WAIT, SCREEN_TO_NORM_CONFIRMED, SCREEN_OS_BROKEN, MAX_VALID_SCREEN_INDEX, SCREEN_BLANK = ~0UL, } ScreenIndex; /* Image info, describing the information of the image block */ typedef struct ImageInfo { uint32_t tag; /* Tag it as a special image, like HWID */ uint32_t width; /* Width of the image */ uint32_t height; /* Height of the image */ uint32_t format; /* File format of the image */ uint32_t compression; /* Compression method for the image file */ uint32_t original_size; /* Size of the original uncompressed image */ /* * Size of the compressed image; if image is not compressed, this will * be the same as the original size. */ uint32_t compressed_size; uint32_t reserved; /* NOTE: The actual image content (if any) follows immediately. */ } __attribute__((packed)) ImageInfo; /* Constants for ImageInfo.tag */ typedef enum ImageTag { TAG_NONE = 0, TAG_HWID, TAG_HWID_RTOL, /* "right-to-left", ie, right-justified HWID */ } ImageTag; /* Constants for ImageInfo.format */ typedef enum ImageFormat { FORMAT_INVALID = 0, FORMAT_BMP, FORMAT_FONT, } ImageFormat; /* * These magic image names can be used in the .yaml file to indicate that the * ASCII HWID should be displayed. For RENDER_HWID, the image coordinates * specify upper-left corner of the HWID string. For RENDER_HWID_RTOL, they * indicate the upper-right corner (handy for right-to-left languages). */ #define RENDER_HWID "$HWID" #define RENDER_HWID_RTOL "$HWID.rtol" #endif /* VBOOT_REFERENCE_BMPBLK_HEADER_H_ */