|
|
1.1 ! root 1: #include "config.h" ! 2: #include "libopenbios/bindings.h" ! 3: #include "libc/byteorder.h" ! 4: #include "libopenbios/ofmem.h" ! 5: #define NO_QEMU_PROTOS ! 6: #include "arch/common/fw_cfg.h" ! 7: ! 8: #if !defined(CONFIG_SPARC64) ! 9: static volatile uint16_t *fw_cfg_cmd; ! 10: static volatile uint8_t *fw_cfg_data; ! 11: ! 12: void ! 13: fw_cfg_read(uint16_t cmd, char *buf, unsigned int nbytes) ! 14: { ! 15: unsigned int i; ! 16: ! 17: *fw_cfg_cmd = cmd; ! 18: for (i = 0; i < nbytes; i++) ! 19: buf[i] = *fw_cfg_data; ! 20: } ! 21: #else ! 22: // XXX depends on PCI bus location, should be removed ! 23: void ! 24: fw_cfg_read(uint16_t cmd, char *buf, unsigned int nbytes) ! 25: { ! 26: unsigned int i; ! 27: ! 28: outw(cmd, CONFIG_FW_CFG_ADDR); ! 29: for (i = 0; i < nbytes; i++) ! 30: buf[i] = inb(CONFIG_FW_CFG_ADDR + 1); ! 31: } ! 32: #endif ! 33: ! 34: uint64_t ! 35: fw_cfg_read_i64(uint16_t cmd) ! 36: { ! 37: uint64_t buf; ! 38: ! 39: fw_cfg_read(cmd, (char *)&buf, sizeof(uint64_t)); ! 40: ! 41: return __le64_to_cpu(buf); ! 42: } ! 43: ! 44: uint32_t ! 45: fw_cfg_read_i32(uint16_t cmd) ! 46: { ! 47: uint32_t buf; ! 48: ! 49: fw_cfg_read(cmd, (char *)&buf, sizeof(uint32_t)); ! 50: ! 51: return __le32_to_cpu(buf); ! 52: } ! 53: ! 54: uint16_t ! 55: fw_cfg_read_i16(uint16_t cmd) ! 56: { ! 57: uint16_t buf; ! 58: ! 59: fw_cfg_read(cmd, (char *)&buf, sizeof(uint16_t)); ! 60: ! 61: return __le16_to_cpu(buf); ! 62: } ! 63: ! 64: void ! 65: fw_cfg_init(void) ! 66: { ! 67: #if defined(CONFIG_SPARC32) ! 68: fw_cfg_cmd = (void *)ofmem_map_io(CONFIG_FW_CFG_ADDR, 2); ! 69: fw_cfg_data = (uint8_t *)fw_cfg_cmd + 2; ! 70: #elif defined(CONFIG_SPARC64) ! 71: // Nothing for the port version ! 72: #elif defined(CONFIG_PPC) ! 73: fw_cfg_cmd = (void *)CONFIG_FW_CFG_ADDR; ! 74: fw_cfg_data = (void *)(CONFIG_FW_CFG_ADDR + 2); ! 75: #endif ! 76: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.