1a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 2d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * Use of this source code is governed by a BSD-style license that can be 3d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * found in the LICENSE file. 4d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * 5d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * Data structure definitions for firmware screen block (BMPBLOCK). 6d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * 7d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * The BmpBlock structure looks like: 8d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 9d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | BmpBlock Header | 10d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 11d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ScreenLayout[0] | \ 12d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ | 13d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ScreenLayout[1] | | 14d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ Localization[0] 15d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ... | | 16d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ | 17d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ScreenLayout[number_of_screenlayouts-1] | / 18d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 19d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ScreenLayout[0] | \ 20d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ Localization[1] 21d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ... | / 22d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ ... 23d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ScreenLayout[0] | \ 24d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ Localization[ 25d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ... | / number_of_localizations-1] 26d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 27d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ImageInfo[0] | 28d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 29d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | Image Content | 30d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 31d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ImageInfo[2] | ImageInfo is 4-byte aligned. 32d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 33d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | Image Content | 34d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 35d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ... | 36d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 37d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | ImageInfo[number_fo_images-1] | 38d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 39d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * | Image Content | 40d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson * +-----------------------------------------+ 412e0226309d1407e0968a6b699e99126c98407319Bill Richardson * | List of locale names | 422e0226309d1407e0968a6b699e99126c98407319Bill Richardson * +-----------------------------------------+ 43d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson */ 44d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson#ifndef VBOOT_REFERENCE_BMPBLK_HEADER_H_ 45d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson#define VBOOT_REFERENCE_BMPBLK_HEADER_H_ 460c3ba249abb1dc60f5ebabccf84ff13206440b83Bill Richardson#include <stdint.h> 47d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 48d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson#define BMPBLOCK_SIGNATURE "$BMP" 49d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson#define BMPBLOCK_SIGNATURE_SIZE (4) 50d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 513985f94fae52aa1df853f7d47388c67c3022e069Dave Parker#define BMPBLOCK_MAJOR_VERSION (0x0002) 523985f94fae52aa1df853f7d47388c67c3022e069Dave Parker#define BMPBLOCK_MINOR_VERSION (0x0000) 53d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 543985f94fae52aa1df853f7d47388c67c3022e069Dave Parker#define MAX_IMAGE_IN_LAYOUT (16) 55d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 56d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson/* BMPBLOCK header, describing how many screen layouts and image infos */ 57d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardsontypedef struct BmpBlockHeader { 58a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* BMPBLOCK_SIGNATURE $BMP */ 59a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint8_t signature[BMPBLOCK_SIGNATURE_SIZE]; 60a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint16_t major_version; /* see BMPBLOCK_MAJOR_VER */ 61a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint16_t minor_version; /* see BMPBLOCK_MINOR_VER */ 62a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t number_of_localizations; /* Number of localizations */ 63a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* Number of screen layouts in each localization */ 64a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t number_of_screenlayouts; 65a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t number_of_imageinfos; /* Number of image infos */ 66a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* Offset of locale-translation string */ 67a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t locale_string_offset; 68a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t reserved[2]; 69d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson} __attribute__((packed)) BmpBlockHeader; 70d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 71d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson/* Screen layout, describing how to stack multiple images on screen */ 72d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardsontypedef struct ScreenLayout { 73a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* 74a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * Images contained in the screen. Will be rendered from 0 to 75a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * (number_of_images-1). 76a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler */ 77a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler struct { 78a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* (X,Y) offset of image to be rendered */ 79a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t x; 80a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t y; 81a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* Offset of image info from start of BMPBLOCK; 0=end it. */ 82a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t image_info_offset; 83a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler } images[MAX_IMAGE_IN_LAYOUT]; 84d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson} __attribute__((packed)) ScreenLayout; 85d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 86d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson/* Constants for screen index */ 87d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardsontypedef enum ScreenIndex { 88a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_DEVELOPER_WARNING = 0, 89a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_RECOVERY_REMOVE, 90a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_RECOVERY_NO_GOOD, 91a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_RECOVERY_INSERT, 92a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_RECOVERY_TO_DEV, 93a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_DEVELOPER_TO_NORM, 94a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_WAIT, 95a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_TO_NORM_CONFIRMED, 96a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler MAX_VALID_SCREEN_INDEX, 97a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler SCREEN_BLANK = ~0UL, 98d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson} ScreenIndex; 99d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 100d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson/* Image info, describing the information of the image block */ 101d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardsontypedef struct ImageInfo { 102a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t tag; /* Tag it as a special image, like HWID */ 103a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t width; /* Width of the image */ 104a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t height; /* Height of the image */ 105a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t format; /* File format of the image */ 106a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t compression; /* Compression method for the image file */ 107a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t original_size; /* Size of the original uncompressed image */ 108a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler /* 109a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * Size of the compressed image; if image is not compressed, this will 110a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * be the same as the original size. 111a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler */ 112a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t compressed_size; 113a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler uint32_t reserved; 1142e0226309d1407e0968a6b699e99126c98407319Bill Richardson /* NOTE: The actual image content (if any) follows immediately. */ 115d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson} __attribute__((packed)) ImageInfo; 116d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 117d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson/* Constants for ImageInfo.tag */ 118d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardsontypedef enum ImageTag { 119a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler TAG_NONE = 0, 120a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler TAG_HWID, 121a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler TAG_HWID_RTOL, /* "right-to-left", ie, right-justified HWID */ 122d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson} ImageTag; 123d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 124d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson/* Constants for ImageInfo.format */ 125d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardsontypedef enum ImageFormat { 126a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler FORMAT_INVALID = 0, 127a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler FORMAT_BMP, 128a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler FORMAT_FONT, 129d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson} ImageFormat; 130d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson 131a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler/* 132a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * These magic image names can be used in the .yaml file to indicate that the 133a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * ASCII HWID should be displayed. For RENDER_HWID, the image coordinates 134a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * specify upper-left corner of the HWID string. For RENDER_HWID_RTOL, they 135a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler * indicate the upper-right corner (handy for right-to-left languages). 136a2db67d204c0dd3d152ff54958bf42c5dbe394ffRandall Spangler */ 13754e95825b30d4f730cbd70c109fb6622dda6fbb8Bill Richardson#define RENDER_HWID "$HWID" 13854e95825b30d4f730cbd70c109fb6622dda6fbb8Bill Richardson#define RENDER_HWID_RTOL "$HWID.rtol" 13954e95825b30d4f730cbd70c109fb6622dda6fbb8Bill Richardson 140d55085da49da8b7981494ea53ad23a6038fbb5c9Bill Richardson#endif /* VBOOT_REFERENCE_BMPBLK_HEADER_H_ */ 141