diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c index 4d0811cc5e..fe4ade5c9f 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c @@ -1,6 +1,7 @@ /** @file Copyright (c) 2014, ARM Ltd. All rights reserved.
+ Copyright (c) 2016, Linaro Ltd. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -135,11 +136,13 @@ ReadPartitionEntries ( /* - Initialise: Open the Android NVM device and find the partitions on it. Save them in - a list along with the "PartitionName" fields for their GPT entries. - We will use these partition names as the key in - ArmFastbootPlatformFlashPartition. + Do any initialisation that needs to be done in order to be able to respond to + commands. + + @retval EFI_SUCCESS Initialised successfully. + @retval !EFI_SUCCESS Error in initialisation. */ +STATIC EFI_STATUS ArmFastbootPlatformInit ( VOID @@ -164,6 +167,7 @@ ArmFastbootPlatformInit ( // // Get EFI_HANDLES for all the partitions on the block devices pointed to by // PcdFastbootFlashDevicePath, also saving their GPT partition labels. + // We will use these labels as the key in ArmFastbootPlatformFlashPartition. // There's no way to find all of a device's children, so we get every handle // in the system supporting EFI_BLOCK_IO_PROTOCOL and then filter out ones // that don't represent partitions on the flash device. @@ -296,6 +300,11 @@ Exit: } +/* + To be called when Fastboot is finished and we aren't rebooting or booting an + image. Undo initialisation, free resrouces. +*/ +STATIC VOID ArmFastbootPlatformUnInit ( VOID @@ -304,6 +313,18 @@ ArmFastbootPlatformUnInit ( FreePartitionList (); } +/* + Flash the partition named (according to a platform-specific scheme) + PartitionName, with the image pointed to by Buffer, whose size is BufferSize. + + @param[in] PartitionName Null-terminated name of partition to write. + @param[in] BufferSize Size of Buffer in byets. + @param[in] Buffer Data to write to partition. + + @retval EFI_NOT_FOUND No such partition. + @retval EFI_DEVICE_ERROR Flashing failed. +*/ +STATIC EFI_STATUS ArmFastbootPlatformFlashPartition ( IN CHAR8 *PartitionName, @@ -381,6 +402,15 @@ ArmFastbootPlatformFlashPartition ( return Status; } +/* + Erase the partition named PartitionName. + + @param[in] PartitionName Null-terminated name of partition to erase. + + @retval EFI_NOT_FOUND No such partition. + @retval EFI_DEVICE_ERROR Erasing failed. +*/ +STATIC EFI_STATUS ArmFastbootPlatformErasePartition ( IN CHAR8 *Partition @@ -389,6 +419,25 @@ ArmFastbootPlatformErasePartition ( return EFI_SUCCESS; } +/* + If the variable referred to by Name exists, copy it (as a null-terminated + string) into Value. If it doesn't exist, put the Empty string in Value. + + Variable names and values may not be larger than 60 bytes, excluding the + terminal null character. This is a limitation of the Fastboot protocol. + + The Fastboot application will handle platform-nonspecific variables + (Currently "version" is the only one of these.) + + @param[in] Name Null-terminated name of Fastboot variable to retrieve. + @param[out] Value Caller-allocated buffer for null-terminated value of + variable. + + @retval EFI_SUCCESS The variable was retrieved, or it doesn't exist. + @retval EFI_DEVICE_ERROR There was an error looking up the variable. This + does _not_ include the variable not existing. +*/ +STATIC EFI_STATUS ArmFastbootPlatformGetVar ( IN CHAR8 *Name, @@ -403,6 +452,26 @@ ArmFastbootPlatformGetVar ( return EFI_SUCCESS; } +/* + React to an OEM-specific command. + + Future versions of this function might want to allow the platform to do some + extra communication with the host. A way to do this would be to add a function + to the FASTBOOT_TRANSPORT_PROTOCOL that allows the implementation of + DoOemCommand to replace the ReceiveEvent with its own, and to restore the old + one when it's finished. + + However at the moment although the specification allows it, the AOSP fastboot + host application doesn't handle receiving any data from the client, and it + doesn't support a data phase for OEM commands. + + @param[in] Command Null-terminated command string. + + @retval EFI_SUCCESS The command executed successfully. + @retval EFI_NOT_FOUND The command wasn't recognised. + @retval EFI_DEVICE_ERROR There was an error executing the command. +*/ +STATIC EFI_STATUS ArmFastbootPlatformOemCommand ( IN CHAR8 *Command @@ -424,7 +493,7 @@ ArmFastbootPlatformOemCommand ( } } -FASTBOOT_PLATFORM_PROTOCOL mPlatformProtocol = { +STATIC FASTBOOT_PLATFORM_PROTOCOL mPlatformProtocol = { ArmFastbootPlatformInit, ArmFastbootPlatformUnInit, ArmFastbootPlatformFlashPartition,