1 /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 * 5 * High-level firmware API for loading and verifying rewritable firmware. 6 * (Firmware portion) 7 */ 8 9 #include "sysincludes.h" 10 11 #include "bmpblk_header.h" 12 #include "region.h" 13 #include "gbb_access.h" 14 #include "gbb_header.h" 15 #include "load_kernel_fw.h" 16 #include "utility.h" 17 #include "vboot_api.h" 18 #include "vboot_struct.h" 19 20 VbError_t VbRegionReadData(VbCommonParams *cparams, 21 enum vb_firmware_region region, uint32_t offset, 22 uint32_t size, void *buf) 23 { 24 /* This is the old API, for backwards compatibility */ 25 if (region == VB_REGION_GBB && cparams->gbb_data) { 26 if (offset + size > cparams->gbb_size) 27 return VBERROR_INVALID_GBB; 28 Memcpy(buf, cparams->gbb_data + offset, size); 29 } else 30 #ifdef REGION_READ 31 { 32 VbError_t ret; 33 34 ret = VbExRegionRead(cparams, region, offset, size, buf); 35 if (ret) 36 return ret; 37 } 38 #else 39 return VBERROR_INVALID_GBB; 40 #endif 41 42 return VBERROR_SUCCESS; 43 } 44 45 VbError_t VbGbbReadHeader_static(VbCommonParams *cparams, 46 GoogleBinaryBlockHeader *gbb) 47 { 48 return VbRegionReadData(cparams, VB_REGION_GBB, 0, 49 sizeof(GoogleBinaryBlockHeader), gbb); 50 } 51