diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2016-09-06 15:05:08 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-09-06 15:57:15 +0200 |
commit | 14b459a6f9c9c02a0901a8a3de5e7c706305ffdd (patch) | |
tree | 0cdc0dc8eff9dcc73c8b1d40cbe635342b6738c3 /include | |
parent | 96dbb2c0a24fdc6bbe4d8d834f0b879e01fdcae3 (diff) | |
download | qboot-14b459a6f9c9c02a0901a8a3de5e7c706305ffdd.zip qboot-14b459a6f9c9c02a0901a8a3de5e7c706305ffdd.tar.gz qboot-14b459a6f9c9c02a0901a8a3de5e7c706305ffdd.tar.bz2 |
use fw_cfg DMA for fw_cfg_read_entry
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/bswap.h | 29 | ||||
-rw-r--r-- | include/fw_cfg.h | 31 |
2 files changed, 45 insertions, 15 deletions
diff --git a/include/bswap.h b/include/bswap.h new file mode 100644 index 0000000..2a72bd0 --- /dev/null +++ b/include/bswap.h @@ -0,0 +1,29 @@ +#ifndef BSWAP_H +#define BSWAP_H 1 + +static inline uint32_t bswap32(uint32_t x) +{ + return __builtin_bswap32(x); +} + +static inline uint64_t bswap64(uint64_t x) +{ + return __builtin_bswap64(x); +} + +static inline uint32_t ldl_le_p(const void *p) +{ + uint32_t val; + memcpy(&val, p, 4); + return val; +} + +static inline uint32_t ldl_be_p(const void *p) +{ + uint32_t val; + memcpy(&val, p, 4); + return bswap32(val); +} + + +#endif diff --git a/include/fw_cfg.h b/include/fw_cfg.h index 46fa869..52ed4e3 100644 --- a/include/fw_cfg.h +++ b/include/fw_cfg.h @@ -36,8 +36,18 @@ #define FW_CFG_IRQ0_OVERRIDE (FW_CFG_ARCH_LOCAL + 2) #define FW_CFG_E820_TABLE (FW_CFG_ARCH_LOCAL + 3) -#define FW_CFG_CTL 0x510 -#define FW_CFG_DATA 0x511 +#define FW_CFG_VERSION 0x01 +#define FW_CFG_VERSION_DMA 0x02 + +#define FW_CFG_DMA_CTL_ERROR 0x01 +#define FW_CFG_DMA_CTL_READ 0x02 +#define FW_CFG_DMA_CTL_SKIP 0x04 +#define FW_CFG_DMA_CTL_SELECT 0x08 + +#define FW_CFG_CTL 0x510 +#define FW_CFG_DATA 0x511 +#define FW_CFG_DMA_ADDR_HIGH 0x514 +#define FW_CFG_DMA_ADDR_LOW 0x518 #include "ioport.h" @@ -102,23 +112,14 @@ static inline void fw_cfg_skip(int len) inb(FW_CFG_DATA); } -static inline void -fw_cfg_read_entry(int e, void *buf, int len) -{ - fw_cfg_select(e); - fw_cfg_read(buf, len); -} - void fw_cfg_setup(void); int fw_cfg_file_id(char *name); uint32_t fw_cfg_file_size(int id); void fw_cfg_file_select(int id); -static inline void -fw_cfg_read_file(int id, void *buf, int len) -{ - fw_cfg_file_select(id); - fw_cfg_read(buf, len); -} +void fw_cfg_read(void *buf, int len); +void fw_cfg_read_entry(int e, void *buf, int len); +void fw_cfg_dma(int control, void *buf, int len); +void fw_cfg_read_file(int e, void *buf, int len); #endif |