| /* 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 <stdint.h> |
| |
| #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_ */ |