From 0c6b63479d83ada8782c751f779fef1271e2b874 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Wed, 14 Nov 2012 12:35:21 +0100 Subject: imxtools: add regtools to work with register descriptions These tools allow one to read a register description in a XML file and to produce something useful out of it. Three example programs are written: - tester which simply prints the register tree - headergen which produces a set of headers with the #define - hwemulgen which produces something for the hwemul tool (to come) Change-Id: I52573688b29d5faeaf64ce7c5ffe08ee8db3d33c --- utils/imxtools/regtools/desc_parser.hpp | 108 ++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 utils/imxtools/regtools/desc_parser.hpp (limited to 'utils/imxtools/regtools/desc_parser.hpp') diff --git a/utils/imxtools/regtools/desc_parser.hpp b/utils/imxtools/regtools/desc_parser.hpp new file mode 100644 index 0000000..908cff8 --- /dev/null +++ b/utils/imxtools/regtools/desc_parser.hpp @@ -0,0 +1,108 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Amaury Pouly + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#ifndef __DESC_PARSER__ +#define __DESC_PARSER__ + +#include +#include +#include + +typedef uint32_t soc_addr_t; +typedef uint32_t soc_word_t; +typedef uint32_t soc_reg_flags_t; + +const soc_addr_t SOC_NO_ADDR = 0xffffffff; +const soc_reg_flags_t REG_HAS_SCT = 1 << 0; + +struct soc_reg_field_value_t +{ + std::string name; + soc_word_t value; +}; + +struct soc_reg_field_t +{ + std::string name; + unsigned first_bit, last_bit; + + soc_word_t bitmask() const + { + return ((1 << (last_bit - first_bit + 1)) - 1) << first_bit; + } + + std::vector< soc_reg_field_value_t > values; +}; + +struct soc_reg_t +{ + std::string name; + soc_addr_t addr; + soc_reg_flags_t flags; + + std::vector< soc_reg_field_t > fields; +}; + +struct soc_multireg_t +{ + std::string name; + soc_addr_t base; + unsigned count; + soc_addr_t offset; + soc_reg_flags_t flags; + + std::vector< soc_reg_t > regs; + std::vector< soc_reg_field_t > fields; +}; + +struct soc_dev_t +{ + std::string name; + std::string long_name; + std::string desc; + soc_addr_t addr; + + std::vector< soc_multireg_t > multiregs; + std::vector< soc_reg_t > regs; +}; + +struct soc_multidev_t +{ + std::string name; + std::string long_name; + std::string desc; + + std::vector< soc_dev_t > devs; + std::vector< soc_multireg_t > multiregs; + std::vector< soc_reg_t > regs; +}; + +struct soc_t +{ + std::string name; + std::string desc; + + std::vector< soc_dev_t > devs; + std::vector< soc_multidev_t > multidevs; +}; + +bool parse_soc_desc(const std::string& filename, std::vector< soc_t >& soc); + +#endif /* __DESC_PARSER__ */ \ No newline at end of file -- cgit v1.1