/* * This file is part of the coreboot project. * * Copyright (C) 2016 Marvell, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include #include #include #include #include void set_bdb_pointers(u8 *start_addr, struct bdb_pointer *bdb_in) { bdb_in->bdb_h = (struct bdb_header *)start_addr; bdb_in->bdb_k = (struct bdb_key *)(start_addr + (bdb_in->bdb_h->struct_size)); bdb_in->bdb_oem_0 = (u8 *)((u32)(bdb_in->bdb_k) + (bdb_in->bdb_k->struct_size)); bdb_in->sub_k = (struct bdb_key *)((u32)(bdb_in->bdb_oem_0) + (bdb_in->bdb_h->oem_area_0_size)); bdb_in->bdb_h_s = (struct bdb_sig *)((u32)(bdb_in->bdb_oem_0) + (bdb_in->bdb_h->signed_size)); bdb_in->bdb_d = (struct bdb_data *)((u32)(bdb_in->bdb_h_s) + (bdb_in->bdb_h_s->struct_size)); bdb_in->oem_1 = (u8 *)((u32)(bdb_in->bdb_d) + (bdb_in->bdb_d->struct_size)); bdb_in->bdb_hash = (struct bdb_hash *)((u32)(bdb_in->oem_1) + (bdb_in->bdb_d->oem_area_1_size)); bdb_in->bdb_s = (struct bdb_sig *)((u32)(bdb_in->bdb_d) + (bdb_in->bdb_d->signed_size)); } struct bdb_hash *find_bdb_image(struct bdb_pointer *bdb_info, u32 image_type) { int i; if (!bdb_info) { printk(BIOS_DEBUG, "can't find BDB\n"); return NULL; } for (i = 0; i < bdb_info->bdb_d->num_hashes; i++) { if (bdb_info->bdb_hash[i].type == image_type) return &bdb_info->bdb_hash[i]; } printk(BIOS_DEBUG, "can't find image with type %d in the BDB\n", image_type); return NULL; }