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 
VbRegionReadData(VbCommonParams * cparams,enum vb_firmware_region region,uint32_t offset,uint32_t size,void * buf)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 
VbGbbReadHeader_static(VbCommonParams * cparams,GoogleBinaryBlockHeader * gbb)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