| # Copyright lowRISC contributors. | |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| """TileLink-Uncached Lightweight Xbar self document | |
| """ | |
| import logging as log | |
| from reggen.validate import val_types | |
| from .validate import root | |
| doc_intro = """ | |
| The tables describe each key and the type of the value. The following | |
| types are used: | |
| Type | Description | |
| ---- | ----------- | |
| """ | |
| def print_control(control, heading): | |
| """Print a control group and its subgroup recursively | |
| """ | |
| subgroup = [] # added if the field hit sub control group | |
| outstr = '#' * heading + ' ' + control['name'] + '\n' | |
| outstr += '\n' | |
| outstr += control['description'] | |
| outstr += '\n\n' | |
| items = {**control['required'], **control['optional'], **control['added']} | |
| if len(items) > 0: | |
| outstr += """ | |
| Field | Kind | Type | Description | |
| ----- | ---- | ---- | ------------ | |
| """ | |
| for k, v in items.items(): | |
| if k in control['required']: | |
| kind = "required" | |
| elif k in control['optional']: | |
| kind = "optional" | |
| else: | |
| kind = "added by tool" | |
| v_type = val_types[v[0]][0] | |
| if v[0] == 'lg': | |
| subgroup.append(v[1]) | |
| log.error(val_types[v[0]]) | |
| outstr += '{} | {} | {} | List of {} group\n'.format( | |
| k, kind, v_type, k) | |
| continue | |
| elif v[0] == 'g': | |
| if not isinstance(v[1], str): | |
| subgroup.append(v[1]) | |
| outstr += '{} | {} | {} | {} group\n'.format( | |
| k, kind, v_type, k) | |
| continue | |
| # Generic string print | |
| outstr += '{} | {} | {} | {}\n'.format(k, kind, v_type, v[1]) | |
| outstr += "\n\n" | |
| # recursive subgroup | |
| for e in subgroup: | |
| outstr += print_control(e, heading) | |
| return outstr | |
| def selfdoc(heading, cmd=""): | |
| # heading : Markdown header depth | |
| # value type | |
| outstr = doc_intro | |
| for k, v in val_types.items(): | |
| outstr += v[0] + " | " + v[1] + "\n" | |
| # root + subgroup | |
| outstr += print_control(root, heading) | |
| # connections: Needs custom as the key are hosts (can vary) | |
| return outstr |