| /* | 
 |  * Copyright (C) 2008 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #ifndef _RECOVERY_BOOTLOADER_H | 
 | #define _RECOVERY_BOOTLOADER_H | 
 |  | 
 | /* Bootloader Message | 
 |  * | 
 |  * This structure describes the content of a block in flash | 
 |  * that is used for recovery and the bootloader to talk to | 
 |  * each other. | 
 |  * | 
 |  * The command field is updated by linux when it wants to | 
 |  * reboot into recovery or to update radio or bootloader firmware. | 
 |  * It is also updated by the bootloader when firmware update | 
 |  * is complete (to boot into recovery for any final cleanup) | 
 |  * | 
 |  * The status field is written by the bootloader after the | 
 |  * completion of an "update-radio" or "update-hboot" command. | 
 |  * | 
 |  * The recovery field is only written by linux and used | 
 |  * for the system to send a message to recovery or the | 
 |  * other way around. | 
 |  * | 
 |  * The stage field is written by packages which restart themselves | 
 |  * multiple times, so that the UI can reflect which invocation of the | 
 |  * package it is.  If the value is of the format "#/#" (eg, "1/3"), | 
 |  * the UI will add a simple indicator of that status. | 
 |  * | 
 |  * The slot_suffix field is used for A/B implementations where the | 
 |  * bootloader does not set the androidboot.ro.boot.slot_suffix kernel | 
 |  * commandline parameter. This is used by fs_mgr to mount /system and | 
 |  * other partitions with the slotselect flag set in fstab. A/B | 
 |  * implementations are free to use all 32 bytes and may store private | 
 |  * data past the first NUL-byte in this field. | 
 |  */ | 
 | struct bootloader_message { | 
 |     char command[32]; | 
 |     char status[32]; | 
 |     char recovery[768]; | 
 |  | 
 |     // The 'recovery' field used to be 1024 bytes.  It has only ever | 
 |     // been used to store the recovery command line, so 768 bytes | 
 |     // should be plenty.  We carve off the last 256 bytes to store the | 
 |     // stage string (for multistage packages) and possible future | 
 |     // expansion. | 
 |     char stage[32]; | 
 |     char slot_suffix[32]; | 
 |     char reserved[192]; | 
 | }; | 
 |  | 
 | /* Read and write the bootloader command from the "misc" partition. | 
 |  * These return zero on success. | 
 |  */ | 
 | int get_bootloader_message(struct bootloader_message *out); | 
 | int set_bootloader_message(const struct bootloader_message *in); | 
 |  | 
 | #endif |