| /* |
| * This file is part of the coreboot project. |
| * |
| * Copyright (C) 2013 Google, Inc. |
| * |
| * This software is licensed under the terms of the GNU General Public |
| * License version 2, as published by the Free Software Foundation, and |
| * may be copied, distributed, and modified under those terms. |
| * |
| * 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 <cbfs.h> |
| #include <string.h> |
| #include <console/console.h> |
| |
| /* Simple memory-mapped ROM emulation. */ |
| |
| static int emu_rom_open(struct cbfs_media *media) |
| { |
| return 0; |
| } |
| |
| static void *emu_rom_map(struct cbfs_media *media, size_t offset, size_t count) |
| { |
| return (void*)(offset + CONFIG_BOOTBLOCK_BASE); |
| } |
| |
| static void *emu_rom_unmap(struct cbfs_media *media, const void *address) |
| { |
| return NULL; |
| } |
| |
| static size_t emu_rom_read(struct cbfs_media *media, void *dest, size_t offset, |
| size_t count) |
| { |
| void *ptr = emu_rom_map(media, offset, count); |
| memcpy(dest, ptr, count); |
| emu_rom_unmap(media, ptr); |
| return count; |
| } |
| |
| static int emu_rom_close(struct cbfs_media *media) |
| { |
| return 0; |
| } |
| |
| int init_emu_rom_cbfs_media(struct cbfs_media *media); |
| |
| int init_emu_rom_cbfs_media(struct cbfs_media *media) |
| { |
| media->open = emu_rom_open; |
| media->close = emu_rom_close; |
| media->map = emu_rom_map; |
| media->unmap = emu_rom_unmap; |
| media->read = emu_rom_read; |
| return 0; |
| } |
| |
| int init_default_cbfs_media(struct cbfs_media *media) |
| { |
| return init_emu_rom_cbfs_media(media); |
| } |