Home | History | Annotate | Download | only in lib
      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