mirror of
https://gitlab.com/qemu-project/openbios.git
synced 2024-02-13 08:34:06 +08:00
Aurelien Jarno) git-svn-id: svn://coreboot.org/openbios/openbios-devel@432 f158a5a8-5612-0410-a976-696ce0be7e32
77 lines
1.5 KiB
C
77 lines
1.5 KiB
C
#include "openbios/config.h"
|
|
#include "openbios/bindings.h"
|
|
#include "libc/byteorder.h"
|
|
#include "ofmem.h"
|
|
#define NO_QEMU_PROTOS
|
|
#include "openbios/fw_cfg.h"
|
|
|
|
#if !defined(CONFIG_SPARC64)
|
|
static volatile uint16_t *fw_cfg_cmd;
|
|
static volatile uint8_t *fw_cfg_data;
|
|
|
|
void
|
|
fw_cfg_read(uint16_t cmd, char *buf, unsigned int nbytes)
|
|
{
|
|
unsigned int i;
|
|
|
|
*fw_cfg_cmd = cmd;
|
|
for (i = 0; i < nbytes; i++)
|
|
buf[i] = *fw_cfg_data;
|
|
}
|
|
#else
|
|
// XXX depends on PCI bus location, should be removed
|
|
void
|
|
fw_cfg_read(uint16_t cmd, char *buf, unsigned int nbytes)
|
|
{
|
|
unsigned int i;
|
|
|
|
outw(cmd, CONFIG_FW_CFG_ADDR);
|
|
for (i = 0; i < nbytes; i++)
|
|
buf[i] = inb(CONFIG_FW_CFG_ADDR + 1);
|
|
}
|
|
#endif
|
|
|
|
uint64_t
|
|
fw_cfg_read_i64(uint16_t cmd)
|
|
{
|
|
char buf[sizeof(uint64_t)];
|
|
|
|
fw_cfg_read(cmd, buf, sizeof(uint64_t));
|
|
|
|
return __le64_to_cpu(*(uint64_t *)buf);
|
|
}
|
|
|
|
uint32_t
|
|
fw_cfg_read_i32(uint16_t cmd)
|
|
{
|
|
char buf[sizeof(uint32_t)];
|
|
|
|
fw_cfg_read(cmd, buf, sizeof(uint32_t));
|
|
|
|
return __le32_to_cpu(*(uint32_t *)buf);
|
|
}
|
|
|
|
uint16_t
|
|
fw_cfg_read_i16(uint16_t cmd)
|
|
{
|
|
char buf[sizeof(uint16_t)];
|
|
|
|
fw_cfg_read(cmd, buf, sizeof(uint16_t));
|
|
|
|
return __le16_to_cpu(*(uint16_t *)buf);
|
|
}
|
|
|
|
void
|
|
fw_cfg_init(void)
|
|
{
|
|
#if defined(CONFIG_SPARC32)
|
|
fw_cfg_cmd = (void *)map_io(CONFIG_FW_CFG_ADDR, 2);
|
|
fw_cfg_data = (uint8_t *)fw_cfg_cmd + 2;
|
|
#elif defined(CONFIG_SPARC64)
|
|
// Nothing for the port version
|
|
#elif defined(CONFIG_PPC)
|
|
fw_cfg_cmd = (void *)CONFIG_FW_CFG_ADDR;
|
|
fw_cfg_data = (void *)(CONFIG_FW_CFG_ADDR + 2);
|
|
#endif
|
|
}
|