[rtems-central commit] spec: Specify register block specification

Sebastian Huber sebh at rtems.org
Wed Sep 15 06:02:35 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    249cfa1eda4d00631da1c2aa00f875e5710398c0
Changeset: http://git.rtems.org/rtems-central/commit/?id=249cfa1eda4d00631da1c2aa00f875e5710398c0

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Sep 10 14:14:35 2021 +0200

spec: Specify register block specification

---

 .../interface-register-bits-directive-list.yml     | 16 +++++++
 spec/spec/interface-register-bits-directive.yml    | 26 ++++++++++
 spec/spec/interface-register-bits-list.yml         | 16 +++++++
 spec/spec/interface-register-bits-variant-list.yml | 16 +++++++
 spec/spec/interface-register-bits-variant.yml      | 27 +++++++++++
 spec/spec/interface-register-bits.yml              | 42 +++++++++++++++++
 .../spec/interface-register-block-include-role.yml | 28 +++++++++++
 .../interface-register-block-member-directive.yml  | 32 +++++++++++++
 spec/spec/interface-register-block-member-list.yml | 16 +++++++
 ...nterface-register-block-member-variant-list.yml | 16 +++++++
 .../interface-register-block-member-variant.yml    | 28 +++++++++++
 spec/spec/interface-register-block-member.yml      | 26 ++++++++++
 spec/spec/interface-register-block-type.yml        | 19 ++++++++
 spec/spec/interface-register-block.yml             | 55 ++++++++++++++++++++--
 spec/spec/interface-register-list.yml              | 16 +++++++
 spec/spec/interface-register-name.yml              | 27 +++++++++++
 spec/spec/interface-register.yml                   | 39 +++++++++++++++
 17 files changed, 441 insertions(+), 4 deletions(-)

diff --git a/spec/spec/interface-register-bits-directive-list.yml b/spec/spec/interface-register-bits-directive-list.yml
new file mode 100644
index 0000000..1571e3f
--- /dev/null
+++ b/spec/spec/interface-register-bits-directive-list.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  list:
+    description: null
+    spec-type: interface-register-bits-directive
+spec-name: Register Bits Definition Directive List
+spec-type: interface-register-bits-directive-list
+type: spec
diff --git a/spec/spec/interface-register-bits-directive.yml b/spec/spec/interface-register-bits-directive.yml
new file mode 100644
index 0000000..62abe9f
--- /dev/null
+++ b/spec/spec/interface-register-bits-directive.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes:
+      default:
+        description: |
+          The default definition will be used if no variant-specific definition
+          is enabled.
+        spec-type: interface-register-bits-list
+      variants:
+        description: null
+        spec-type: interface-register-bits-variant-list
+    description: |
+      This set of attributes specifies a register bits directive.
+    mandatory-attributes: all
+spec-name: Register Bits Definition Directive
+spec-type: interface-register-bits-directive
+type: spec
diff --git a/spec/spec/interface-register-bits-list.yml b/spec/spec/interface-register-bits-list.yml
new file mode 100644
index 0000000..d057e4e
--- /dev/null
+++ b/spec/spec/interface-register-bits-list.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  list:
+    description: null
+    spec-type: interface-register-bits
+spec-name: Register Bits Definition List
+spec-type: interface-register-bits-list
+type: spec
diff --git a/spec/spec/interface-register-bits-variant-list.yml b/spec/spec/interface-register-bits-variant-list.yml
new file mode 100644
index 0000000..778d35b
--- /dev/null
+++ b/spec/spec/interface-register-bits-variant-list.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  list:
+    description: null
+    spec-type: interface-register-bits-variant
+spec-name: Register Bits Definition Variant List
+spec-type: interface-register-bits-variant-list
+type: spec
diff --git a/spec/spec/interface-register-bits-variant.yml b/spec/spec/interface-register-bits-variant.yml
new file mode 100644
index 0000000..0fa9d69
--- /dev/null
+++ b/spec/spec/interface-register-bits-variant.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes:
+      definition:
+        description: |
+          The definition will be used if the expression defined by the
+          ``enabled-by`` attribute evaluates to true.  In generated header
+          files, the expression is evaluated by the C preprocessor.
+        spec-type: interface-register-bits-list
+      enabled-by:
+        description: null
+        spec-type: interface-enabled-by
+    description: |
+      This set of attributes specifies a register bits variant.
+    mandatory-attributes: all
+spec-name: Register Bits Definition Variant
+spec-type: interface-register-bits-variant
+type: spec
diff --git a/spec/spec/interface-register-bits.yml b/spec/spec/interface-register-bits.yml
new file mode 100644
index 0000000..e428aa8
--- /dev/null
+++ b/spec/spec/interface-register-bits.yml
@@ -0,0 +1,42 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  none: null
+  dict:
+    attributes:
+      access:
+        description: |
+          It shall be the list of access attributes.
+        spec-type: list-str
+      brief:
+        description: null
+        spec-type: interface-brief
+      description:
+        description: null
+        spec-type: interface-description
+      name:
+        description: |
+          It shall be the name of the register bit field.
+        spec-type: str
+      start:
+        description: |
+          It shall be the start bit of the bit field.  Bit ``0`` is the
+          least-significant bit.
+        spec-type: int
+      width:
+        description: |
+          It shall be the width in bits of the bit field.
+        spec-type: int
+    description: |
+      This set of attributes specifies register bits.
+    mandatory-attributes: all
+spec-name: Register Bits Definition
+spec-type: interface-register-bits
+type: spec
diff --git a/spec/spec/interface-register-block-include-role.yml b/spec/spec/interface-register-block-include-role.yml
new file mode 100644
index 0000000..3a37f62
--- /dev/null
+++ b/spec/spec/interface-register-block-include-role.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+- role: spec-refinement
+  spec-key: role
+  spec-value: register-block-include
+  uid: link
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes:
+      name:
+        description: |
+          It shall be the unique name to identify the included register block
+          within the item.
+        spec-type: str
+    description: |
+      It defines the register block include role of links.  Links of this role
+      are used to build register blocks using other register blocks.
+    mandatory-attributes: all
+spec-name: Register Block Include Role
+spec-type: interface-register-block-include-role
+type: spec
diff --git a/spec/spec/interface-register-block-member-directive.yml b/spec/spec/interface-register-block-member-directive.yml
new file mode 100644
index 0000000..faa3072
--- /dev/null
+++ b/spec/spec/interface-register-block-member-directive.yml
@@ -0,0 +1,32 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes:
+      default:
+        description: |
+          The default definition will be used if no variant-specific definition
+          is enabled.
+        spec-type: interface-register-block-member
+      offset:
+        description: |
+          It shall be the offset in bytes from the register block begin to the
+          register member.
+        spec-type: int
+      variants:
+        description: null
+        spec-type: interface-register-block-member-variant-list
+    description: |
+      This set of attributes specifies a register block member definition
+      directive.
+    mandatory-attributes: all
+spec-name: Register Block Member Definition Directive
+spec-type: interface-register-block-member-directive
+type: spec
diff --git a/spec/spec/interface-register-block-member-list.yml b/spec/spec/interface-register-block-member-list.yml
new file mode 100644
index 0000000..5abda83
--- /dev/null
+++ b/spec/spec/interface-register-block-member-list.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  list:
+    description: null
+    spec-type: interface-register-block-member-directive
+spec-name: Register Block Member Definition Directive List
+spec-type: interface-register-block-member-directive-list
+type: spec
diff --git a/spec/spec/interface-register-block-member-variant-list.yml b/spec/spec/interface-register-block-member-variant-list.yml
new file mode 100644
index 0000000..71cc54b
--- /dev/null
+++ b/spec/spec/interface-register-block-member-variant-list.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  list:
+    description: null
+    spec-type: interface-register-block-member-variant
+spec-name: Register Block Member Definition Variant List
+spec-type: interface-register-block-member-variant-list
+type: spec
diff --git a/spec/spec/interface-register-block-member-variant.yml b/spec/spec/interface-register-block-member-variant.yml
new file mode 100644
index 0000000..ff03372
--- /dev/null
+++ b/spec/spec/interface-register-block-member-variant.yml
@@ -0,0 +1,28 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes:
+      definition:
+        description: |
+          The definition will be used if the expression defined by the
+          ``enabled-by`` attribute evaluates to true.  In generated header
+          files, the expression is evaluated by the C preprocessor.
+        spec-type: interface-register-block-member
+      enabled-by:
+        description: null
+        spec-type: interface-enabled-by
+    description: |
+      This set of attributes specifies a register block member definition
+      variant.
+    mandatory-attributes: all
+spec-name: Register Block Member Definition Variant
+spec-type: interface-register-block-member-variant
+type: spec
diff --git a/spec/spec/interface-register-block-member.yml b/spec/spec/interface-register-block-member.yml
new file mode 100644
index 0000000..d56730d
--- /dev/null
+++ b/spec/spec/interface-register-block-member.yml
@@ -0,0 +1,26 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  none: null
+  dict:
+    attributes:
+      count:
+        description: |
+          It shall be the count of registers of the register block member.
+        spec-type: int
+      name:
+        description: null
+        spec-type: interface-register-name
+    description: |
+      This set of attributes specifies a register block member definition.
+    mandatory-attributes: all
+spec-name: Register Block Member Definition
+spec-type: interface-register-block-member
+type: spec
diff --git a/spec/spec/interface-register-block-type.yml b/spec/spec/interface-register-block-type.yml
new file mode 100644
index 0000000..22185dd
--- /dev/null
+++ b/spec/spec/interface-register-block-type.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  str:
+    assert:
+      in:
+      - memory
+    description: |
+      It specifies the register block type.
+spec-name: Register Block Type
+spec-type: interface-register-block-type
+type: spec
diff --git a/spec/spec/interface-register-block.yml b/spec/spec/interface-register-block.yml
index 23f3ef4..c0f04a1 100644
--- a/spec/spec/interface-register-block.yml
+++ b/spec/spec/interface-register-block.yml
@@ -1,6 +1,6 @@
 SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
 copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
 enabled-by: true
 links:
 - role: spec-member
@@ -13,14 +13,61 @@ spec-description: null
 spec-example: null
 spec-info:
   dict:
-    attributes: {}
+    attributes:
+      brief:
+        description: null
+        spec-type: interface-brief
+      definition:
+        description: null
+        spec-type: interface-register-block-member-directive-list
+      description:
+        description: null
+        spec-type: interface-description
+      identifier:
+        description: null
+        spec-type: interface-group-identifier
+      name:
+        description: |
+          It shall be the name of the register block.
+        spec-type: str
+      notes:
+        description: null
+        spec-type: interface-notes
+      registers:
+        description: null
+        spec-type: interface-register-list
+      register-block-group:
+        description: |
+          It shall be the name of the interface group defined for the register
+          block.  For the group identifier see the ``identifier`` attribute.
+        spec-type: str
+      register-block-size:
+        description: |
+          It shall be the size in bytes of the register block.
+        spec-type: int
+      register-block-type:
+        description: null
+        spec-type: interface-register-block-type
+      register-prefix:
+        description: |
+          If the value is present, then it will be used to prefix register bit
+          field names, otherwise the value of the ``name`` attribute will be
+          used.
+        spec-type: optional-str
     description: |
-      This set of attributes defines a register block.
+      This set of attributes specifies a register block.  A register block may
+      be used to specify the memory-mapped interface to the hardware.  Register
+      blocks consist of register block members specified by the ``definition``
+      attribute.  Register block members are either instances of registers
+      specified by the ``registers`` attribute or instances of other register
+      blocks specified by links with the
+      ${interface-register-block-include-role:/spec-name}.  Registers consists
+      of bit fields (see ${interface-register-bits:/spec-name}.
     generic-attributes:
       description: null
       key-spec-type: name
       value-spec-type: any
     mandatory-attributes: all
-spec-name: Interface Register Block Item Type
+spec-name: Register Block Item Type
 spec-type: interface-register-block
 type: spec
diff --git a/spec/spec/interface-register-list.yml b/spec/spec/interface-register-list.yml
new file mode 100644
index 0000000..aa3ae8d
--- /dev/null
+++ b/spec/spec/interface-register-list.yml
@@ -0,0 +1,16 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  list:
+    description: null
+    spec-type: interface-register
+spec-name: Register List
+spec-type: interface-register-list
+type: spec
diff --git a/spec/spec/interface-register-name.yml b/spec/spec/interface-register-name.yml
new file mode 100644
index 0000000..cf38f2f
--- /dev/null
+++ b/spec/spec/interface-register-name.yml
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  str:
+    assert:
+      re: ^[a-zA-Z_][a-zA-Z0-9_]*(:[a-zA-Z_][a-zA-Z0-9_]*)?$
+    description: |
+      The name consists either of an identifier, or an identifier and an alias.
+      The identifier and alias are separated by a colon (``:``).  The
+      identifier shall match with the name of a register definition of the item
+      (see ${interface-register:/spec-name}) or the name of a register block
+      include of the item
+      (see ${interface-register-block-include-role:/spec-name}).  If no alias
+      is specified, then the identifier is used for the register block member
+      name, otherwise the alias is used.  If the register block member names
+      are not unique within the item, then a postfix number is appended to the
+      names.  The number starts with zero for each set of names.
+spec-name: Register Name
+spec-type: interface-register-name
+type: spec
diff --git a/spec/spec/interface-register.yml b/spec/spec/interface-register.yml
new file mode 100644
index 0000000..c02ba16
--- /dev/null
+++ b/spec/spec/interface-register.yml
@@ -0,0 +1,39 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes:
+      bits:
+        description: null
+        spec-type: interface-register-bits-directive-list
+      brief:
+        description: null
+        spec-type: interface-brief
+      description:
+        description: null
+        spec-type: interface-description
+      name:
+        description: |
+          It shall be the unique name to identify the register definition.
+        spec-type: str
+      width:
+        description: |
+          It shall be the width of the register in bits.
+        spec-type: int
+    description: |
+      This set of attributes specifies a register.
+    generic-attributes:
+      description: null
+      key-spec-type: name
+      value-spec-type: any
+    mandatory-attributes: all
+spec-name: Register Definition
+spec-type: interface-register
+type: spec



More information about the vc mailing list