mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 22:52:34 +02:00

All programmer types (Parallel, SPI, Opaque) now register themselves into a generic programmer list and probing is now programmer-centric instead of chip-centric. Registering multiple SPI/... masters at the same time is now possible without any problems. Handling multiple flash chips is still unchanged, but now we have the infrastructure to deal with "dual BIOS" and "one flash behind southbridge and one flash behind EC" sanely. A nice side effect is that this patch kills quite a few global variables and improves the situation for libflashrom. Hint for developers: struct {spi,par,opaque}_programmer now have a void *data pointer to store any additional programmer-specific data, e.g. hardware configuration info. Note: flashrom -f -c FOO -r forced_read.bin does not work anymore. We have to find an architecturally clean way to solve this. Corresponding to flashrom svn r1475. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
67 lines
2.1 KiB
C
67 lines
2.1 KiB
C
/*
|
|
* This file is part of the flashrom project.
|
|
*
|
|
* Copyright (C) 2011 Carl-Daniel Hailfinger
|
|
*
|
|
* 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.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
/*
|
|
* Contains the opaque programmer framework.
|
|
* An opaque programmer is a programmer which does not provide direct access
|
|
* to the flash chip and which abstracts all flash chip properties into a
|
|
* programmer specific interface.
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include "flash.h"
|
|
#include "flashchips.h"
|
|
#include "chipdrivers.h"
|
|
#include "programmer.h"
|
|
|
|
int probe_opaque(struct flashctx *flash)
|
|
{
|
|
return flash->pgm->opaque.probe(flash);
|
|
}
|
|
|
|
int read_opaque(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len)
|
|
{
|
|
return flash->pgm->opaque.read(flash, buf, start, len);
|
|
}
|
|
|
|
int write_opaque(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len)
|
|
{
|
|
return flash->pgm->opaque.write(flash, buf, start, len);
|
|
}
|
|
|
|
int erase_opaque(struct flashctx *flash, unsigned int blockaddr, unsigned int blocklen)
|
|
{
|
|
return flash->pgm->opaque.erase(flash, blockaddr, blocklen);
|
|
}
|
|
|
|
int register_opaque_programmer(const struct opaque_programmer *pgm)
|
|
{
|
|
struct registered_programmer rpgm;
|
|
|
|
if (!pgm->probe || !pgm->read || !pgm->write || !pgm->erase) {
|
|
msg_perr("%s called with incomplete programmer definition. "
|
|
"Please report a bug at flashrom@flashrom.org\n",
|
|
__func__);
|
|
return ERROR_FLASHROM_BUG;
|
|
}
|
|
rpgm.buses_supported = BUS_PROG;
|
|
rpgm.opaque = *pgm;
|
|
return register_programmer(&rpgm);
|
|
}
|