1234c69c5SAnthony Liguori /* 2234c69c5SAnthony Liguori * libqos fw_cfg support 3234c69c5SAnthony Liguori * 4234c69c5SAnthony Liguori * Copyright IBM, Corp. 2012-2013 5234c69c5SAnthony Liguori * 6234c69c5SAnthony Liguori * Authors: 7234c69c5SAnthony Liguori * Anthony Liguori <aliguori@us.ibm.com> 8234c69c5SAnthony Liguori * 9234c69c5SAnthony Liguori * This work is licensed under the terms of the GNU GPL, version 2 or later. 10234c69c5SAnthony Liguori * See the COPYING file in the top-level directory. 11234c69c5SAnthony Liguori */ 12234c69c5SAnthony Liguori 13234c69c5SAnthony Liguori #ifndef LIBQOS_FW_CFG_H 14234c69c5SAnthony Liguori #define LIBQOS_FW_CFG_H 15234c69c5SAnthony Liguori 1605e520f1SEric Blake #include "libqtest.h" 17234c69c5SAnthony Liguori 18234c69c5SAnthony Liguori typedef struct QFWCFG QFWCFG; 19234c69c5SAnthony Liguori 20234c69c5SAnthony Liguori struct QFWCFG 21234c69c5SAnthony Liguori { 227a100165SMarkus Armbruster uint64_t base; 2305e520f1SEric Blake QTestState *qts; 24234c69c5SAnthony Liguori void (*select)(QFWCFG *fw_cfg, uint16_t key); 25234c69c5SAnthony Liguori void (*read)(QFWCFG *fw_cfg, void *data, size_t len); 26234c69c5SAnthony Liguori }; 27234c69c5SAnthony Liguori 28234c69c5SAnthony Liguori void qfw_cfg_select(QFWCFG *fw_cfg, uint16_t key); 29234c69c5SAnthony Liguori void qfw_cfg_read_data(QFWCFG *fw_cfg, void *data, size_t len); 30234c69c5SAnthony Liguori void qfw_cfg_get(QFWCFG *fw_cfg, uint16_t key, void *data, size_t len); 31234c69c5SAnthony Liguori uint16_t qfw_cfg_get_u16(QFWCFG *fw_cfg, uint16_t key); 32234c69c5SAnthony Liguori uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key); 33234c69c5SAnthony Liguori uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key); 34*c99f5f1dSLi Qiang size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename, 35*c99f5f1dSLi Qiang void *data, size_t buflen); 36234c69c5SAnthony Liguori 3705e520f1SEric Blake QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base); 380729d833SPhilippe Mathieu-Daudé void mm_fw_cfg_uninit(QFWCFG *fw_cfg); 3905e520f1SEric Blake QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base); 400729d833SPhilippe Mathieu-Daudé void io_fw_cfg_uninit(QFWCFG *fw_cfg); 4126491a38SMarkus Armbruster 4205e520f1SEric Blake static inline QFWCFG *pc_fw_cfg_init(QTestState *qts) 4326491a38SMarkus Armbruster { 4405e520f1SEric Blake return io_fw_cfg_init(qts, 0x510); 4526491a38SMarkus Armbruster } 467a100165SMarkus Armbruster 4765461d12SPhilippe Mathieu-Daudé static inline void pc_fw_cfg_uninit(QFWCFG *fw_cfg) 4865461d12SPhilippe Mathieu-Daudé { 4965461d12SPhilippe Mathieu-Daudé io_fw_cfg_uninit(fw_cfg); 5065461d12SPhilippe Mathieu-Daudé } 5165461d12SPhilippe Mathieu-Daudé 52234c69c5SAnthony Liguori #endif 53