Split out enter_conf_mode_*()/exit_conf_mode_() functions, we'll soon need

them. Reduce code duplication a bit by improved 'no dump available' handling.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2785 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Uwe Hermann
2007-09-19 00:48:42 +00:00
parent c73ea4d4fc
commit 25a6c0f18c
5 changed files with 60 additions and 39 deletions

View File

@ -40,6 +40,16 @@ const static struct superio_registers reg_table[] = {
{EOT}
};
void enter_conf_mode_smsc(uint16_t port)
{
outb(0x55, port);
}
void exit_conf_mode_smsc(uint16_t port)
{
outb(0xaa, port);
}
/* Note: The actual SMSC ID is 16 bits, but we must pass 32 bits here. */
void dump_smsc(uint16_t port, uint16_t id)
{
@ -57,7 +67,7 @@ void probe_idregs_smsc(uint16_t port)
{
uint16_t id, rev;
outb(0x55, port); /* Enter configuration mode. */
enter_conf_mode_smsc(port);
/* Read device ID. */
id = regval(port, DEVICE_ID_REG);
@ -75,15 +85,8 @@ void probe_idregs_smsc(uint16_t port)
printf("Super I/O found at 0x%04x: id=0x%02x, rev=0x%02x\n",
port, id, rev);
switch (id) {
case 0x28:
dump_smsc(port, id);
break;
default:
printf("No dump for ID 0x%04x\n", id);
break;
}
dump_smsc(port, id );
outb(0xaa, port); /* Exit configuration mode. */
exit_conf_mode_smsc(port);
}