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
16907b5105SMarc-André Lureau #include "../libqtest.h"
17*9c38fea8SAni Sinha #include "libqos.h"
18234c69c5SAnthony Liguori
19234c69c5SAnthony Liguori typedef struct QFWCFG QFWCFG;
20234c69c5SAnthony Liguori
21234c69c5SAnthony Liguori struct QFWCFG
22234c69c5SAnthony Liguori {
237a100165SMarkus Armbruster uint64_t base;
2405e520f1SEric Blake QTestState *qts;
25234c69c5SAnthony Liguori void (*select)(QFWCFG *fw_cfg, uint16_t key);
26234c69c5SAnthony Liguori void (*read)(QFWCFG *fw_cfg, void *data, size_t len);
27234c69c5SAnthony Liguori };
28234c69c5SAnthony Liguori
29234c69c5SAnthony Liguori void qfw_cfg_select(QFWCFG *fw_cfg, uint16_t key);
30234c69c5SAnthony Liguori void qfw_cfg_read_data(QFWCFG *fw_cfg, void *data, size_t len);
31234c69c5SAnthony Liguori void qfw_cfg_get(QFWCFG *fw_cfg, uint16_t key, void *data, size_t len);
32234c69c5SAnthony Liguori uint16_t qfw_cfg_get_u16(QFWCFG *fw_cfg, uint16_t key);
33234c69c5SAnthony Liguori uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key);
34234c69c5SAnthony Liguori uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key);
35c99f5f1dSLi Qiang size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
36c99f5f1dSLi Qiang void *data, size_t buflen);
37*9c38fea8SAni Sinha size_t qfw_cfg_write_file(QFWCFG *fw_cfg, QOSState *qs, const char *filename,
38*9c38fea8SAni Sinha void *data, size_t buflen);
39*9c38fea8SAni Sinha size_t qfw_cfg_read_file(QFWCFG *fw_cfg, QOSState *qs, const char *filename,
40*9c38fea8SAni Sinha void *data, size_t buflen);
4105e520f1SEric Blake QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base);
420729d833SPhilippe Mathieu-Daudé void mm_fw_cfg_uninit(QFWCFG *fw_cfg);
4305e520f1SEric Blake QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base);
440729d833SPhilippe Mathieu-Daudé void io_fw_cfg_uninit(QFWCFG *fw_cfg);
4526491a38SMarkus Armbruster
pc_fw_cfg_init(QTestState * qts)4605e520f1SEric Blake static inline QFWCFG *pc_fw_cfg_init(QTestState *qts)
4726491a38SMarkus Armbruster {
4805e520f1SEric Blake return io_fw_cfg_init(qts, 0x510);
4926491a38SMarkus Armbruster }
507a100165SMarkus Armbruster
pc_fw_cfg_uninit(QFWCFG * fw_cfg)5165461d12SPhilippe Mathieu-Daudé static inline void pc_fw_cfg_uninit(QFWCFG *fw_cfg)
5265461d12SPhilippe Mathieu-Daudé {
5365461d12SPhilippe Mathieu-Daudé io_fw_cfg_uninit(fw_cfg);
5465461d12SPhilippe Mathieu-Daudé }
5565461d12SPhilippe Mathieu-Daudé
5677c24259SPan Nengyuan G_DEFINE_AUTOPTR_CLEANUP_FUNC(QFWCFG, mm_fw_cfg_uninit)
5777c24259SPan Nengyuan
58234c69c5SAnthony Liguori #endif
59