|
8 | 8 | #ifndef SIMICS_DMLLIB_H
|
9 | 9 | #define SIMICS_DMLLIB_H
|
10 | 10 |
|
| 11 | +#ifndef DML_LEGACY_ATTRS |
| 12 | +#define DML_LEGACY_ATTRS 0 |
| 13 | +#endif |
| 14 | + |
11 | 15 | #include <stddef.h>
|
12 | 16 |
|
13 | 17 | #include <simics/base/event.h>
|
@@ -1819,6 +1823,53 @@ typedef attr_value_t (*_get_attr_t)(conf_object_t *, lang_void *);
|
1819 | 1823 | typedef set_error_t (*_set_attr_t)(conf_object_t *, attr_value_t *,
|
1820 | 1824 | lang_void *);
|
1821 | 1825 |
|
| 1826 | +#if DML_LEGACY_ATTRS |
| 1827 | +typedef struct { |
| 1828 | + _get_attr_t get_attr; |
| 1829 | + _set_attr_t set_attr; |
| 1830 | + lang_void *user_data_get; |
| 1831 | + lang_void *user_data_set; |
| 1832 | +} _dml_legacy_attr_info_t; |
| 1833 | + |
| 1834 | +UNUSED static attr_value_t |
| 1835 | +_DML_legacy_attr_get_trampoline(lang_void *_info, conf_object_t *obj, |
| 1836 | + attr_value_t *_idx) { |
| 1837 | + const _dml_legacy_attr_info_t *info = (_dml_legacy_attr_info_t *)_info; |
| 1838 | + return info->get_attr(obj, info->user_data_get); |
| 1839 | +} |
| 1840 | + |
| 1841 | +UNUSED static set_error_t |
| 1842 | +_DML_legacy_attr_set_trampoline(lang_void *_info, conf_object_t *obj, |
| 1843 | + attr_value_t *out, attr_value_t *_idx) { |
| 1844 | + const _dml_legacy_attr_info_t *info = (_dml_legacy_attr_info_t *)_info; |
| 1845 | + return info->set_attr(obj, out, info->user_data_set); |
| 1846 | +} |
| 1847 | + |
| 1848 | +UNUSED static void |
| 1849 | +_DML_register_attribute( |
| 1850 | + conf_class_t *NOTNULL cls, const char *NOTNULL name, |
| 1851 | + _get_attr_t get_attr, lang_void *user_data_get, |
| 1852 | + _set_attr_t set_attr, lang_void *user_data_set, |
| 1853 | + attr_attr_t attr, const char *type, const char *desc) { |
| 1854 | + _dml_legacy_attr_info_t *info = MM_MALLOC(1, _dml_legacy_attr_info_t); |
| 1855 | + info->get_attr = get_attr; |
| 1856 | + info->set_attr = set_attr; |
| 1857 | + info->user_data_get = user_data_get; |
| 1858 | + info->user_data_set = user_data_set; |
| 1859 | + |
| 1860 | + SIM_register_typed_attribute(cls, name, |
| 1861 | + get_attr ? _DML_legacy_attr_get_trampoline |
| 1862 | + : NULL, |
| 1863 | + get_attr ? (lang_void *)info : NULL, |
| 1864 | + set_attr ? _DML_legacy_attr_set_trampoline |
| 1865 | + : NULL, |
| 1866 | + set_attr ? (lang_void *)info : NULL, |
| 1867 | + attr, type, NULL, desc); |
| 1868 | +} |
| 1869 | +#else |
| 1870 | +#define _DML_register_attribute SIM_register_attribute_with_user_data |
| 1871 | +#endif |
| 1872 | + |
1822 | 1873 | UNUSED static void
|
1823 | 1874 | _DML_register_hook_attribute(conf_class_t *cls, const char *attrname,
|
1824 | 1875 | _get_attr_t getter, _set_attr_t setter,
|
@@ -1984,9 +2035,8 @@ _register_port_attr_no_aux(conf_class_t *portcls, const char *attrname,
|
1984 | 2035 | attr_attr_t attr, const char *type,
|
1985 | 2036 | const char *desc)
|
1986 | 2037 | {
|
1987 |
| - SIM_register_attribute_with_user_data( |
1988 |
| - portcls, attrname, getter, NULL, setter, NULL, |
1989 |
| - attr, type, desc); |
| 2038 | + _DML_register_attribute(portcls, attrname, getter, NULL, setter, NULL, |
| 2039 | + attr, type, desc); |
1990 | 2040 | }
|
1991 | 2041 |
|
1992 | 2042 | // port_obj_offset is the offset within the device struct of a pointer to the
|
@@ -2015,7 +2065,8 @@ _register_port_legacy_proxy_attr(conf_class_t *devcls, conf_class_t *portcls,
|
2015 | 2065 | strbuf_t proxy_desc = sb_newf(
|
2016 | 2066 | "Proxy attribute for %s.%s.%s",
|
2017 | 2067 | is_bank ? "bank" : "port", portname, attrname);
|
2018 |
| - SIM_register_attribute_with_user_data( |
| 2068 | + |
| 2069 | + _DML_register_attribute( |
2019 | 2070 | devcls, name,
|
2020 | 2071 | getter ? _get_legacy_proxy_attr : NULL, data,
|
2021 | 2072 | setter ? _set_legacy_proxy_attr : NULL, data,
|
@@ -2116,7 +2167,7 @@ _register_port_array_legacy_proxy_attr(
|
2116 | 2167 | is_bank ? "bank" : "port",
|
2117 | 2168 | portname, attrname);
|
2118 | 2169 | strbuf_t proxy_type = sb_newf("[%s{%d}]", type, array_size);
|
2119 |
| - SIM_register_attribute_with_user_data( |
| 2170 | + _DML_register_attribute( |
2120 | 2171 | devcls, name,
|
2121 | 2172 | getter ? _get_legacy_proxy_array_attr : NULL, data,
|
2122 | 2173 | setter ? _set_legacy_proxy_array_attr : NULL, data,
|
@@ -3414,7 +3465,7 @@ UNUSED static void _DML_register_attributes(
|
3414 | 3465 | MM_FREE(tmp_type);
|
3415 | 3466 | }
|
3416 | 3467 | conf_class_t *parent_obj_class = attr_info.parent_obj_class;
|
3417 |
| - SIM_register_attribute_with_user_data( |
| 3468 | + _DML_register_attribute( |
3418 | 3469 | parent_obj_class ? parent_obj_class : dev_class,
|
3419 | 3470 | attr_info.name,
|
3420 | 3471 | attr_info.readable ? parent_obj_class ? get_portobj_attr : get_attr
|
|
0 commit comments