<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en" style="--code-editor-font: var(--default-mono-font, "GitLab Mono"), JetBrains Mono, Menlo, DejaVu Sans Mono, Liberation Mono, Consolas, Ubuntu Mono, Courier New, andale mono, lucida console, monospace;">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>
GitLab
</title>

<style data-premailer="ignore" type="text/css">
a { color: #1068bf; }
</style>

<style>img {
max-width: 100%; height: auto;
}
body {
font-size: .875rem;
}
body {
-webkit-text-shadow: rgba(255,255,255,.01) 0 0 1px;
}
body {
font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; font-size: inherit;
}
</style>
</head>
<body style="font-size: inherit; -webkit-text-shadow: rgba(255,255,255,.01) 0 0 1px; font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";">
<div class="content">

<p style="color: #777777;">
<a href="https://gitlab.rtems.org/sebhub">Sebastian Huber</a>
<a href="https://gitlab.rtems.org/rtems/prequal/rtems-central/-/merge_requests/20#note_151752">commented</a>:
</p>
<div class="md" style="position: relative; z-index: 1; color: #3a383f; word-wrap: break-word;">
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">The interrupt controller is not specified by the RISC-V ISA. So, I think adding a special case at the architecture level is not the right approach. For example, the griscv BSP uses an interrupt controller with a maximum priority less than <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">UINT32_MAX</code>.</p>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">All the present interrupt validation tests have a structural issue. They contain the loop over all interrupt vectors directly in the action requirement. This is not the right approach. It is better to use an action requirement which produces a test run function by defining a test header through the <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">test-header</code> attribute. Then call the test run function for all interrupt vectors. This approach allows to using the <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">${.:skip}</code> feature.</p>
<p dir="auto" style="color: #3a383f; margin: 0 0 1rem;" align="initial">Please have a look at the following patch:</p>
<div class="gl-relative markdown-code-block js-markdown-code" style="margin-bottom: 0;">
<pre data-canonical-lang="diff" class="code highlight js-syntax-highlight language-diff" v-pre="true" style="display: block; font-size: 14px; color: #3a383f; line-height: 1.6em; overflow-x: auto; border-radius: .25rem; position: relative; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: break-all; word-wrap: break-word; background-color: #fbfafd; margin: 0 0 1rem; padding: 12px; border: 1px solid #dcdcde;"><code style="font-size: inherit; color: inherit; word-wrap: normal; word-break: keep-all; background-color: inherit; border-radius: .25rem; white-space: pre; margin-top: 0; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; overflow-wrap: normal; padding: unset;"><span id="LC1" class="line" lang="diff" style="margin-top: 0;"><span class="p" style="margin-top: 0;">commit ac43535e2e8dcbceeb44fba17375de9c4fd05abb</span></span>
<span id="LC2" class="line" lang="diff"><span class="p" style="margin-top: 0;">Author: Sebastian Huber <sebastian.huber@embedded-brains.de></span></span>
<span id="LC3" class="line" lang="diff"><span class="p" style="margin-top: 0;">Date:   Sun Jan 12 13:58:38 2025 +0100</span></span>
<span id="LC4" class="line" lang="diff"></span>
<span id="LC5" class="line" lang="diff">    spec: Rework get/set interrupt priority</span>
<span id="LC6" class="line" lang="diff">    </span>
<span id="LC7" class="line" lang="diff">    Add support for RISC-V PLIC.  This interrupt controller supports a</span>
<span id="LC8" class="line" lang="diff">    maximum priority of UINT32_MAX.</span>
<span id="LC9" class="line" lang="diff"></span>
<span id="LC10" class="line" lang="diff"><span class="gh" style="margin-top: 0;">diff --git a/spec/rtems/intr/req/get-priority.yml b/spec/rtems/intr/req/get-priority.yml</span></span>
<span id="LC11" class="line" lang="diff"><span class="gh" style="margin-top: 0;">index 332e656ebc..3a1f100627 100644</span></span>
<span id="LC12" class="line" lang="diff"><span class="gd" style="margin-top: 0;">--- a/spec/rtems/intr/req/get-priority.yml</span></span>
<span id="LC13" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+++ b/spec/rtems/intr/req/get-priority.yml</span></span>
<span id="LC14" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -11,25 +11,25 @@</span> post-conditions:</span>
<span id="LC15" class="line" lang="diff">   states:</span>
<span id="LC16" class="line" lang="diff">   - name: Ok</span>
<span id="LC17" class="line" lang="diff">     test-code: |</span>
<span id="LC18" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_SUCCESSFUL;</span></span>
<span id="LC19" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc_success( ctx->status );</span></span>
<span id="LC20" class="line" lang="diff">     text: |</span>
<span id="LC21" class="line" lang="diff">       The return status of ${../if/get-priority:/name} shall be</span>
<span id="LC22" class="line" lang="diff">       ${../../status/if/successful:/name}.</span>
<span id="LC23" class="line" lang="diff">   - name: InvAddr</span>
<span id="LC24" class="line" lang="diff">     test-code: |</span>
<span id="LC25" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_INVALID_ADDRESS;</span></span>
<span id="LC26" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );</span></span>
<span id="LC27" class="line" lang="diff">     text: |</span>
<span id="LC28" class="line" lang="diff">       The return status of ${../if/get-priority:/name} shall be</span>
<span id="LC29" class="line" lang="diff">       ${../../status/if/invalid-address:/name}.</span>
<span id="LC30" class="line" lang="diff">   - name: InvId</span>
<span id="LC31" class="line" lang="diff">     test-code: |</span>
<span id="LC32" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_INVALID_ID;</span></span>
<span id="LC33" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc( ctx->status, RTEMS_INVALID_ID );</span></span>
<span id="LC34" class="line" lang="diff">     text: |</span>
<span id="LC35" class="line" lang="diff">       The return status of ${../if/get-priority:/name} shall be</span>
<span id="LC36" class="line" lang="diff">       ${../../status/if/invalid-id:/name}.</span>
<span id="LC37" class="line" lang="diff">   - name: Unsat</span>
<span id="LC38" class="line" lang="diff">     test-code: |</span>
<span id="LC39" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_UNSATISFIED;</span></span>
<span id="LC40" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc( ctx->status, RTEMS_UNSATISFIED );</span></span>
<span id="LC41" class="line" lang="diff">     text: |</span>
<span id="LC42" class="line" lang="diff">       The return status of ${../if/get-priority:/name} shall be</span>
<span id="LC43" class="line" lang="diff">       ${../../status/if/unsatisfied:/name}.</span>
<span id="LC44" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -39,7 +39,7 @@</span> post-conditions:</span>
<span id="LC45" class="line" lang="diff">   states:</span>
<span id="LC46" class="line" lang="diff">   - name: Set</span>
<span id="LC47" class="line" lang="diff">     test-code: |</span>
<span id="LC48" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_priority = PriorityIsSet;</span></span>
<span id="LC49" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_ne_u32( ctx->priority_obj, PRIORITY_UNSET );</span></span>
<span id="LC50" class="line" lang="diff">     text: |</span>
<span id="LC51" class="line" lang="diff">       The value of the object referenced by the</span>
<span id="LC52" class="line" lang="diff">       ${../if/get-priority:/params[1]/name} parameter shall be set by the</span>
<span id="LC53" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -48,26 +48,25 @@</span> post-conditions:</span>
<span id="LC54" class="line" lang="diff">       during the directive call.</span>
<span id="LC55" class="line" lang="diff">   - name: Nop</span>
<span id="LC56" class="line" lang="diff">     test-code: |</span>
<span id="LC57" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_priority = PriorityIsNotSet;</span></span>
<span id="LC58" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_eq_u32( ctx->priority_obj, PRIORITY_UNSET );</span></span>
<span id="LC59" class="line" lang="diff">     text: |</span>
<span id="LC60" class="line" lang="diff">       The value of the object referenced by the</span>
<span id="LC61" class="line" lang="diff">       ${../if/get-priority:/params[1]/name} parameter shall not be changed by</span>
<span id="LC62" class="line" lang="diff">       the directive call.</span>
<span id="LC63" class="line" lang="diff">   test-epilogue: null</span>
<span id="LC64" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  test-prologue: |</span></span>
<span id="LC65" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    ctx->expected_priority = PriorityIsNotSet;</span></span>
<span id="LC66" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  test-prologue: null</span></span>
<span id="LC67" class="line" lang="diff"> pre-conditions:</span>
<span id="LC68" class="line" lang="diff"> - name: Vector</span>
<span id="LC69" class="line" lang="diff">   states:</span>
<span id="LC70" class="line" lang="diff">   - name: Valid</span>
<span id="LC71" class="line" lang="diff">     test-code: |</span>
<span id="LC72" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->valid_vector = true;</span></span>
<span id="LC73" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ctx->vector = ctx->valid_vector;</span></span>
<span id="LC74" class="line" lang="diff">     text: |</span>
<span id="LC75" class="line" lang="diff">       While the ${../if/get-priority:/params[0]/name} parameter is</span>
<span id="LC76" class="line" lang="diff">       associated with an interrupt vector.</span>
<span id="LC77" class="line" lang="diff">   - name: Invalid</span>
<span id="LC78" class="line" lang="diff">     test-code: |</span>
<span id="LC79" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->valid_vector = false;</span></span>
<span id="LC80" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ctx->vector = BSP_INTERRUPT_VECTOR_COUNT;</span></span>
<span id="LC81" class="line" lang="diff">     text: |</span>
<span id="LC82" class="line" lang="diff">       While the ${../if/get-priority:/params[0]/name} parameter is not</span>
<span id="LC83" class="line" lang="diff">       associated with an interrupt vector.</span>
<span id="LC84" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -93,13 +92,17 @@</span> pre-conditions:</span>
<span id="LC85" class="line" lang="diff">   states:</span>
<span id="LC86" class="line" lang="diff">   - name: 'Yes'</span>
<span id="LC87" class="line" lang="diff">     test-code: |</span>
<span id="LC88" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->can_get_priority = true;</span></span>
<span id="LC89" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( !ctx->can_get_priority ) {</span></span>
<span id="LC90" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        ${.:skip}</span></span>
<span id="LC91" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC92" class="line" lang="diff">     text: |</span>
<span id="LC93" class="line" lang="diff">       While getting the priority for the interrupt vector specified by</span>
<span id="LC94" class="line" lang="diff">       ${../if/get-priority:/params[0]/name} parameter is supported.</span>
<span id="LC95" class="line" lang="diff">   - name: 'No'</span>
<span id="LC96" class="line" lang="diff">     test-code: |</span>
<span id="LC97" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->can_get_priority = false;</span></span>
<span id="LC98" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( ctx->can_get_priority ) {</span></span>
<span id="LC99" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        ${.:skip}</span></span>
<span id="LC100" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC101" class="line" lang="diff">     text: |</span>
<span id="LC102" class="line" lang="diff">       While getting the priority for the interrupt vector specified by</span>
<span id="LC103" class="line" lang="diff">       ${../if/get-priority:/params[0]/name} parameter is not supported.</span>
<span id="LC104" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -110,56 +113,23 @@</span> references: []</span>
<span id="LC105" class="line" lang="diff"> requirement-type: functional</span>
<span id="LC106" class="line" lang="diff"> skip-reasons: {}</span>
<span id="LC107" class="line" lang="diff"> test-action: |</span>
<span id="LC108" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  /* Action carried out by CheckGetPriority() */</span></span>
<span id="LC109" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  ctx->priority_obj = PRIORITY_UNSET;</span></span>
<span id="LC110" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  ctx->status = rtems_interrupt_get_priority( ctx->vector, ctx->priority );</span></span>
<span id="LC111" class="line" lang="diff"> test-brief: null</span>
<span id="LC112" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-cleanup: |</span></span>
<span id="LC113" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  if ( ctx->valid_vector ) {</span></span>
<span id="LC114" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    rtems_vector_number vector;</span></span>
<span id="LC115" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC116" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    for (</span></span>
<span id="LC117" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      vector = 0;</span></span>
<span id="LC118" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      vector < BSP_INTERRUPT_VECTOR_COUNT;</span></span>
<span id="LC119" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ++vector</span></span>
<span id="LC120" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    ) {</span></span>
<span id="LC121" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      rtems_interrupt_attributes attr;</span></span>
<span id="LC122" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      rtems_status_code          sc;</span></span>
<span id="LC123" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC124" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      memset( &attr, 0, sizeof( attr ) );</span></span>
<span id="LC125" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      sc = rtems_interrupt_get_attributes( vector, &attr );</span></span>
<span id="LC126" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC127" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      if ( sc == RTEMS_INVALID_ID ) {</span></span>
<span id="LC128" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-        continue;</span></span>
<span id="LC129" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      }</span></span>
<span id="LC130" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC131" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      T_rsc_success( sc );</span></span>
<span id="LC132" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC133" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      if ( attr.can_get_priority != ctx->can_get_priority ) {</span></span>
<span id="LC134" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-        continue;</span></span>
<span id="LC135" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      }</span></span>
<span id="LC136" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC137" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      CheckGetPriority( ctx, vector );</span></span>
<span id="LC138" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    }</span></span>
<span id="LC139" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  } else {</span></span>
<span id="LC140" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    CheckGetPriority( ctx, BSP_INTERRUPT_VECTOR_COUNT );</span></span>
<span id="LC141" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  }</span></span>
<span id="LC142" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-cleanup: null</span></span>
<span id="LC143" class="line" lang="diff"> test-context:</span>
<span id="LC144" class="line" lang="diff"> - brief: |</span>
<span id="LC145" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    This member provides the object referenced by the</span></span>
<span id="LC146" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    ${../if/get-priority:/params[1]/name} parameter.</span></span>
<span id="LC147" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  description: null</span></span>
<span id="LC148" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  member: |</span></span>
<span id="LC149" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    uint32_t priority_obj</span></span>
<span id="LC150" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-- brief: |</span></span>
<span id="LC151" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    If this member is true, then the ${../if/get-priority:/params[0]/name}</span></span>
<span id="LC152" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    parameter shall be valid.</span></span>
<span id="LC153" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member specifies the ${../if/get-priority:/params[0]/name} parameter</span></span>
<span id="LC154" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    value.</span></span>
<span id="LC155" class="line" lang="diff">   description: null</span>
<span id="LC156" class="line" lang="diff">   member: |</span>
<span id="LC157" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    bool valid_vector</span></span>
<span id="LC158" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    rtems_vector_number vector</span></span>
<span id="LC159" class="line" lang="diff"> - brief: |</span>
<span id="LC160" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    If this member is true, then getting the priority shall be supported.</span></span>
<span id="LC161" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member provides the object referenced by the</span></span>
<span id="LC162" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    ${../if/get-priority:/params[1]/name} parameter.</span></span>
<span id="LC163" class="line" lang="diff">   description: null</span>
<span id="LC164" class="line" lang="diff">   member: |</span>
<span id="LC165" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    bool can_get_priority</span></span>
<span id="LC166" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    uint32_t priority_obj</span></span>
<span id="LC167" class="line" lang="diff"> - brief: |</span>
<span id="LC168" class="line" lang="diff">     This member specifies the ${../if/get-priority:/params[1]/name} parameter</span>
<span id="LC169" class="line" lang="diff">     value.</span>
<span id="LC170" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -167,51 +137,40 @@</span> test-context:</span>
<span id="LC171" class="line" lang="diff">   member: |</span>
<span id="LC172" class="line" lang="diff">     uint32_t *priority</span>
<span id="LC173" class="line" lang="diff"> - brief: |</span>
<span id="LC174" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    This member specifies the expected status.</span></span>
<span id="LC175" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  description: null</span></span>
<span id="LC176" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  member: |</span></span>
<span id="LC177" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    rtems_status_code expected_status</span></span>
<span id="LC178" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-- brief: |</span></span>
<span id="LC179" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    This member specifies the expected value of the priority object.</span></span>
<span id="LC180" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member contains the return status.</span></span>
<span id="LC181" class="line" lang="diff">   description: null</span>
<span id="LC182" class="line" lang="diff">   member: |</span>
<span id="LC183" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    void (*expected_priority)(uint32_t)</span></span>
<span id="LC184" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    rtems_status_code status</span></span>
<span id="LC185" class="line" lang="diff"> test-context-support: null</span>
<span id="LC186" class="line" lang="diff"> test-description: null</span>
<span id="LC187" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-header: null</span></span>
<span id="LC188" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-header:</span></span>
<span id="LC189" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  code: null</span></span>
<span id="LC190" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  freestanding: false</span></span>
<span id="LC191" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  includes: []</span></span>
<span id="LC192" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  local-includes: []</span></span>
<span id="LC193" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  run-params:</span></span>
<span id="LC194" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  - description: |</span></span>
<span id="LC195" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      is a valid interrupt vector number.</span></span>
<span id="LC196" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    dir: in</span></span>
<span id="LC197" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    name: valid_vector</span></span>
<span id="LC198" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    specifier: ${../if/vector-number:/name} ${.:name}</span></span>
<span id="LC199" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  - description: |</span></span>
<span id="LC200" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      is true, if getting the priority is supported.</span></span>
<span id="LC201" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    dir: in</span></span>
<span id="LC202" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    name: can_get_priority</span></span>
<span id="LC203" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    specifier: bool ${.:name}</span></span>
<span id="LC204" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  target: testsuites/validation/tr-intr-get-priority.h</span></span>
<span id="LC205" class="line" lang="diff"> test-includes:</span>
<span id="LC206" class="line" lang="diff"> - rtems.h</span>
<span id="LC207" class="line" lang="diff"> - bsp/irq-generic.h</span>
<span id="LC208" class="line" lang="diff"> test-local-includes:</span>
<span id="LC209" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-- tx-support.h</span></span>
<span id="LC210" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- tr-intr-get-priority.h</span></span>
<span id="LC211" class="line" lang="diff"> test-prepare: null</span>
<span id="LC212" class="line" lang="diff"> test-setup: null</span>
<span id="LC213" class="line" lang="diff"> test-stop: null</span>
<span id="LC214" class="line" lang="diff"> test-support: |</span>
<span id="LC215" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  typedef ${.:/test-context-type} Context;</span></span>
<span id="LC216" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC217" class="line" lang="diff">   #define PRIORITY_UNSET (UINT32_MAX - 1234)</span>
<span id="LC218" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC219" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  static void PriorityIsSet( uint32_t priority )</span></span>
<span id="LC220" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  {</span></span>
<span id="LC221" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    T_lt_u32( priority, PRIORITY_UNSET );</span></span>
<span id="LC222" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  }</span></span>
<span id="LC223" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC224" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  static void PriorityIsNotSet( uint32_t priority )</span></span>
<span id="LC225" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  {</span></span>
<span id="LC226" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    T_eq_u32( priority, PRIORITY_UNSET );</span></span>
<span id="LC227" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  }</span></span>
<span id="LC228" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC229" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  static void CheckGetPriority( Context *ctx, rtems_vector_number vector )</span></span>
<span id="LC230" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  {</span></span>
<span id="LC231" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    rtems_status_code sc;</span></span>
<span id="LC232" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC233" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    ctx->priority_obj = PRIORITY_UNSET;</span></span>
<span id="LC234" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    sc = rtems_interrupt_get_priority( vector, ctx->priority );</span></span>
<span id="LC235" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    T_rsc( sc, ctx->expected_status );</span></span>
<span id="LC236" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    (*ctx->expected_priority)( ctx->priority_obj );</span></span>
<span id="LC237" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  }</span></span>
<span id="LC238" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-target: testsuites/validation/tc-intr-get-priority.c</span></span>
<span id="LC239" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-target: testsuites/validation/tr-intr-get-priority.c</span></span>
<span id="LC240" class="line" lang="diff"> test-teardown: null</span>
<span id="LC241" class="line" lang="diff"> text: ${.:text-template}</span>
<span id="LC242" class="line" lang="diff"> transition-map:</span>
<span id="LC243" class="line" lang="diff"><span class="gh" style="margin-top: 0;">diff --git a/spec/rtems/intr/req/set-priority.yml b/spec/rtems/intr/req/set-priority.yml</span></span>
<span id="LC244" class="line" lang="diff"><span class="gh" style="margin-top: 0;">index 2a49d0f609..f62f563875 100644</span></span>
<span id="LC245" class="line" lang="diff"><span class="gd" style="margin-top: 0;">--- a/spec/rtems/intr/req/set-priority.yml</span></span>
<span id="LC246" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+++ b/spec/rtems/intr/req/set-priority.yml</span></span>
<span id="LC247" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -11,25 +11,25 @@</span> post-conditions:</span>
<span id="LC248" class="line" lang="diff">   states:</span>
<span id="LC249" class="line" lang="diff">   - name: Ok</span>
<span id="LC250" class="line" lang="diff">     test-code: |</span>
<span id="LC251" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_SUCCESSFUL;</span></span>
<span id="LC252" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc_success( ctx->status );</span></span>
<span id="LC253" class="line" lang="diff">     text: |</span>
<span id="LC254" class="line" lang="diff">       The return status of ${../if/set-priority:/name} shall be</span>
<span id="LC255" class="line" lang="diff">       ${../../status/if/successful:/name}.</span>
<span id="LC256" class="line" lang="diff">   - name: InvId</span>
<span id="LC257" class="line" lang="diff">     test-code: |</span>
<span id="LC258" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_INVALID_ID;</span></span>
<span id="LC259" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc( ctx->status, RTEMS_INVALID_ID );</span></span>
<span id="LC260" class="line" lang="diff">     text: |</span>
<span id="LC261" class="line" lang="diff">       The return status of ${../if/set-priority:/name} shall be</span>
<span id="LC262" class="line" lang="diff">       ${../../status/if/invalid-id:/name}.</span>
<span id="LC263" class="line" lang="diff">   - name: InvPrio</span>
<span id="LC264" class="line" lang="diff">     test-code: |</span>
<span id="LC265" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_INVALID_PRIORITY;</span></span>
<span id="LC266" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc( ctx->status, RTEMS_INVALID_PRIORITY );</span></span>
<span id="LC267" class="line" lang="diff">     text: |</span>
<span id="LC268" class="line" lang="diff">       The return status of ${../if/set-priority:/name} shall be</span>
<span id="LC269" class="line" lang="diff">       ${../../status/if/invalid-priority:/name}.</span>
<span id="LC270" class="line" lang="diff">   - name: Unsat</span>
<span id="LC271" class="line" lang="diff">     test-code: |</span>
<span id="LC272" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->expected_status = RTEMS_UNSATISFIED;</span></span>
<span id="LC273" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc( ctx->status, RTEMS_UNSATISFIED );</span></span>
<span id="LC274" class="line" lang="diff">     text: |</span>
<span id="LC275" class="line" lang="diff">       The return status of ${../if/set-priority:/name} shall be</span>
<span id="LC276" class="line" lang="diff">       ${../../status/if/unsatisfied:/name}.</span>
<span id="LC277" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -40,13 +40,13 @@</span> pre-conditions:</span>
<span id="LC278" class="line" lang="diff">   states:</span>
<span id="LC279" class="line" lang="diff">   - name: Valid</span>
<span id="LC280" class="line" lang="diff">     test-code: |</span>
<span id="LC281" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->valid_vector = true;</span></span>
<span id="LC282" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ctx->vector = ctx->valid_vector;</span></span>
<span id="LC283" class="line" lang="diff">     text: |</span>
<span id="LC284" class="line" lang="diff">       While the ${../if/set-priority:/params[0]/name} parameter is</span>
<span id="LC285" class="line" lang="diff">       associated with an interrupt vector.</span>
<span id="LC286" class="line" lang="diff">   - name: Invalid</span>
<span id="LC287" class="line" lang="diff">     test-code: |</span>
<span id="LC288" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->valid_vector = false;</span></span>
<span id="LC289" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ctx->vector = BSP_INTERRUPT_VECTOR_COUNT;</span></span>
<span id="LC290" class="line" lang="diff">     text: |</span>
<span id="LC291" class="line" lang="diff">       While the ${../if/set-priority:/params[0]/name} parameter is not</span>
<span id="LC292" class="line" lang="diff">       associated with an interrupt vector.</span>
<span id="LC293" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -56,13 +56,17 @@</span> pre-conditions:</span>
<span id="LC294" class="line" lang="diff">   states:</span>
<span id="LC295" class="line" lang="diff">   - name: Valid</span>
<span id="LC296" class="line" lang="diff">     test-code: |</span>
<span id="LC297" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->valid_priority = true;</span></span>
<span id="LC298" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ctx->priority = ctx->current_priority;</span></span>
<span id="LC299" class="line" lang="diff">     text: |</span>
<span id="LC300" class="line" lang="diff">       While the ${../if/set-priority:/params[1]/name} parameter is a valid</span>
<span id="LC301" class="line" lang="diff">       priority value.</span>
<span id="LC302" class="line" lang="diff">   - name: Invalid</span>
<span id="LC303" class="line" lang="diff">     test-code: |</span>
<span id="LC304" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->valid_priority = false;</span></span>
<span id="LC305" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( ctx->maximum_priority < UINT32_MAX ) {</span></span>
<span id="LC306" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        ctx->priority = UINT32_MAX;</span></span>
<span id="LC307" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      } else {</span></span>
<span id="LC308" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        ${.:skip}</span></span>
<span id="LC309" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC310" class="line" lang="diff">     text: |</span>
<span id="LC311" class="line" lang="diff">       While the ${../if/set-priority:/params[1]/name} parameter is an invalid</span>
<span id="LC312" class="line" lang="diff">       priority value.</span>
<span id="LC313" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -72,13 +76,17 @@</span> pre-conditions:</span>
<span id="LC314" class="line" lang="diff">   states:</span>
<span id="LC315" class="line" lang="diff">   - name: 'Yes'</span>
<span id="LC316" class="line" lang="diff">     test-code: |</span>
<span id="LC317" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->can_set_priority = true;</span></span>
<span id="LC318" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( !ctx->can_set_priority ) {</span></span>
<span id="LC319" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        ${.:skip}</span></span>
<span id="LC320" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC321" class="line" lang="diff">     text: |</span>
<span id="LC322" class="line" lang="diff">       While setting the priority for the interrupt vector specified by</span>
<span id="LC323" class="line" lang="diff">       ${../if/set-priority:/params[0]/name} parameter is supported.</span>
<span id="LC324" class="line" lang="diff">   - name: 'No'</span>
<span id="LC325" class="line" lang="diff">     test-code: |</span>
<span id="LC326" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ctx->can_set_priority = false;</span></span>
<span id="LC327" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( ctx->can_set_priority ) {</span></span>
<span id="LC328" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        ${.:skip}</span></span>
<span id="LC329" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC330" class="line" lang="diff">     text: |</span>
<span id="LC331" class="line" lang="diff">       While setting the priority for the interrupt vector specified by</span>
<span id="LC332" class="line" lang="diff">       ${../if/set-priority:/params[0]/name} parameter is not supported.</span>
<span id="LC333" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -89,90 +97,72 @@</span> references: []</span>
<span id="LC334" class="line" lang="diff"> requirement-type: functional</span>
<span id="LC335" class="line" lang="diff"> skip-reasons: {}</span>
<span id="LC336" class="line" lang="diff"> test-action: |</span>
<span id="LC337" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  /* Action carried out by CheckSetPriority() */</span></span>
<span id="LC338" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  ctx->status = rtems_interrupt_set_priority( ctx->vector, ctx->priority );</span></span>
<span id="LC339" class="line" lang="diff"> test-brief: null</span>
<span id="LC340" class="line" lang="diff"> test-cleanup: |</span>
<span id="LC341" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  if ( ctx->valid_vector ) {</span></span>
<span id="LC342" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    rtems_vector_number vector;</span></span>
<span id="LC343" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC344" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    for (</span></span>
<span id="LC345" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      vector = 0;</span></span>
<span id="LC346" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      vector < BSP_INTERRUPT_VECTOR_COUNT;</span></span>
<span id="LC347" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      ++vector</span></span>
<span id="LC348" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    ) {</span></span>
<span id="LC349" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      rtems_interrupt_attributes attr;</span></span>
<span id="LC350" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      rtems_status_code          sc;</span></span>
<span id="LC351" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC352" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      memset( &attr, 0, sizeof( attr ) );</span></span>
<span id="LC353" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      sc = rtems_interrupt_get_attributes( vector, &attr );</span></span>
<span id="LC354" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC355" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      if ( sc == RTEMS_INVALID_ID ) {</span></span>
<span id="LC356" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-        continue;</span></span>
<span id="LC357" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      }</span></span>
<span id="LC358" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC359" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      T_rsc_success( sc );</span></span>
<span id="LC360" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC361" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      if ( attr.can_set_priority != ctx->can_set_priority ) {</span></span>
<span id="LC362" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-        continue;</span></span>
<span id="LC363" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      }</span></span>
<span id="LC364" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC365" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      CheckSetPriority( ctx, vector );</span></span>
<span id="LC366" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    }</span></span>
<span id="LC367" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  } else {</span></span>
<span id="LC368" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    CheckSetPriority( ctx, BSP_INTERRUPT_VECTOR_COUNT );</span></span>
<span id="LC369" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  }</span></span>
<span id="LC370" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  (void) rtems_interrupt_set_priority( ctx->valid_vector, ctx->current_priority );</span></span>
<span id="LC371" class="line" lang="diff"> test-context:</span>
<span id="LC372" class="line" lang="diff"> - brief: |</span>
<span id="LC373" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    If this member is true, then the ${../if/set-priority:/params[0]/name}</span></span>
<span id="LC374" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    parameter shall be valid.</span></span>
<span id="LC375" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member contains the current priority value.</span></span>
<span id="LC376" class="line" lang="diff">   description: null</span>
<span id="LC377" class="line" lang="diff">   member: |</span>
<span id="LC378" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    bool valid_vector</span></span>
<span id="LC379" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    uint32_t current_priority</span></span>
<span id="LC380" class="line" lang="diff"> - brief: |</span>
<span id="LC381" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    If this member is true, then the ${../if/set-priority:/params[1]/name}</span></span>
<span id="LC382" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    parameter shall be valid.</span></span>
<span id="LC383" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member specifies the ${../if/set-priority:/params[0]/name} parameter</span></span>
<span id="LC384" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    value.</span></span>
<span id="LC385" class="line" lang="diff">   description: null</span>
<span id="LC386" class="line" lang="diff">   member: |</span>
<span id="LC387" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    bool valid_priority</span></span>
<span id="LC388" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    rtems_vector_number vector</span></span>
<span id="LC389" class="line" lang="diff"> - brief: |</span>
<span id="LC390" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    If this member is true, then setting the priority shall be supported.</span></span>
<span id="LC391" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member specifies the ${../if/set-priority:/params[1]/name} parameter</span></span>
<span id="LC392" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    value.</span></span>
<span id="LC393" class="line" lang="diff">   description: null</span>
<span id="LC394" class="line" lang="diff">   member: |</span>
<span id="LC395" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    bool can_set_priority</span></span>
<span id="LC396" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    uint32_t priority</span></span>
<span id="LC397" class="line" lang="diff"> - brief: |</span>
<span id="LC398" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    This member specifies the expected status.</span></span>
<span id="LC399" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    This member contains the return status.</span></span>
<span id="LC400" class="line" lang="diff">   description: null</span>
<span id="LC401" class="line" lang="diff">   member: |</span>
<span id="LC402" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    rtems_status_code expected_status</span></span>
<span id="LC403" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    rtems_status_code status</span></span>
<span id="LC404" class="line" lang="diff"> test-context-support: null</span>
<span id="LC405" class="line" lang="diff"> test-description: null</span>
<span id="LC406" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-header: null</span></span>
<span id="LC407" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-header:</span></span>
<span id="LC408" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  code: null</span></span>
<span id="LC409" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  freestanding: false</span></span>
<span id="LC410" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  includes: []</span></span>
<span id="LC411" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  local-includes: []</span></span>
<span id="LC412" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  run-params:</span></span>
<span id="LC413" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  - description: |</span></span>
<span id="LC414" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      is a valid interrupt vector number.</span></span>
<span id="LC415" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    dir: in</span></span>
<span id="LC416" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    name: valid_vector</span></span>
<span id="LC417" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    specifier: ${../if/vector-number:/name} ${.:name}</span></span>
<span id="LC418" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  - description: |</span></span>
<span id="LC419" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      is the maximum supported priority value.</span></span>
<span id="LC420" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    dir: in</span></span>
<span id="LC421" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    name: maximum_priority</span></span>
<span id="LC422" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    specifier: uint32_t ${.:name}</span></span>
<span id="LC423" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  - description: |</span></span>
<span id="LC424" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      is true, if setting the priority is supported.</span></span>
<span id="LC425" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    dir: in</span></span>
<span id="LC426" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    name: can_set_priority</span></span>
<span id="LC427" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    specifier: bool ${.:name}</span></span>
<span id="LC428" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  target: testsuites/validation/tr-intr-set-priority.h</span></span>
<span id="LC429" class="line" lang="diff"> test-includes:</span>
<span id="LC430" class="line" lang="diff"> - rtems.h</span>
<span id="LC431" class="line" lang="diff"> - bsp/irq-generic.h</span>
<span id="LC432" class="line" lang="diff"> test-local-includes:</span>
<span id="LC433" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-- tx-support.h</span></span>
<span id="LC434" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-prepare: null</span></span>
<span id="LC435" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- tr-intr-set-priority.h</span></span>
<span id="LC436" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-prepare: |</span></span>
<span id="LC437" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  ctx->current_priority = 0;</span></span>
<span id="LC438" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  (void) rtems_interrupt_get_priority(</span></span>
<span id="LC439" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    ctx->valid_vector,</span></span>
<span id="LC440" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    &ctx->current_priority</span></span>
<span id="LC441" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  );</span></span>
<span id="LC442" class="line" lang="diff"> test-setup: null</span>
<span id="LC443" class="line" lang="diff"> test-stop: null</span>
<span id="LC444" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-support: |</span></span>
<span id="LC445" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  typedef ${.:/test-context-type} Context;</span></span>
<span id="LC446" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC447" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  static void CheckSetPriority( Context *ctx, rtems_vector_number vector )</span></span>
<span id="LC448" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  {</span></span>
<span id="LC449" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    rtems_status_code sc;</span></span>
<span id="LC450" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    uint32_t          priority;</span></span>
<span id="LC451" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC452" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    if ( ctx->valid_priority ) {</span></span>
<span id="LC453" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      (void) rtems_interrupt_get_priority( vector, &priority );</span></span>
<span id="LC454" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    } else {</span></span>
<span id="LC455" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-      priority = UINT32_MAX;</span></span>
<span id="LC456" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    }</span></span>
<span id="LC457" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-</span></span>
<span id="LC458" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    sc = rtems_interrupt_set_priority( vector, priority );</span></span>
<span id="LC459" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-    T_rsc( sc, ctx->expected_status );</span></span>
<span id="LC460" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-  }</span></span>
<span id="LC461" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-test-target: testsuites/validation/tc-intr-set-priority.c</span></span>
<span id="LC462" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-support: null</span></span>
<span id="LC463" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+test-target: testsuites/validation/tr-intr-set-priority.c</span></span>
<span id="LC464" class="line" lang="diff"> test-teardown: null</span>
<span id="LC465" class="line" lang="diff"> text: ${.:text-template}</span>
<span id="LC466" class="line" lang="diff"> transition-map:</span>
<span id="LC467" class="line" lang="diff"><span class="gh" style="margin-top: 0;">diff --git a/spec/rtems/intr/val/intr.yml b/spec/rtems/intr/val/intr.yml</span></span>
<span id="LC468" class="line" lang="diff"><span class="gh" style="margin-top: 0;">index baabecb478..bf0120d28a 100644</span></span>
<span id="LC469" class="line" lang="diff"><span class="gd" style="margin-top: 0;">--- a/spec/rtems/intr/val/intr.yml</span></span>
<span id="LC470" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+++ b/spec/rtems/intr/val/intr.yml</span></span>
<span id="LC471" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -199,6 +199,60 @@</span> test-actions:</span>
<span id="LC472" class="line" lang="diff">     - role: validation</span>
<span id="LC473" class="line" lang="diff">       uid: ../req/entry-initialize-info</span>
<span id="LC474" class="line" lang="diff">   links: []</span>
<span id="LC475" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- action-brief: |</span></span>
<span id="LC476" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    Check ${../if/get-priority:/name} for each valid vector.</span></span>
<span id="LC477" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  action-code: |</span></span>
<span id="LC478" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    rtems_vector_number vector;</span></span>
<span id="LC479" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC480" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    for (</span></span>
<span id="LC481" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      vector = 0;</span></span>
<span id="LC482" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      vector < BSP_INTERRUPT_VECTOR_COUNT;</span></span>
<span id="LC483" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ++vector</span></span>
<span id="LC484" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    ) {</span></span>
<span id="LC485" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      rtems_interrupt_attributes attr;</span></span>
<span id="LC486" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      rtems_status_code          sc;</span></span>
<span id="LC487" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC488" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      memset( &attr, 0, sizeof( attr ) );</span></span>
<span id="LC489" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      sc = rtems_interrupt_get_attributes( vector, &attr );</span></span>
<span id="LC490" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC491" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( sc == RTEMS_INVALID_ID ) {</span></span>
<span id="LC492" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        continue;</span></span>
<span id="LC493" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC494" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC495" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc_success( sc );</span></span>
<span id="LC496" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ${../req/get-priority:/test-run}( vector, attr.can_get_priority );</span></span>
<span id="LC497" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    }</span></span>
<span id="LC498" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  checks: []</span></span>
<span id="LC499" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  links: []</span></span>
<span id="LC500" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- action-brief: |</span></span>
<span id="LC501" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    Check ${../if/set-priority:/name} for each valid vector.</span></span>
<span id="LC502" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  action-code: |</span></span>
<span id="LC503" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    rtems_vector_number vector;</span></span>
<span id="LC504" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC505" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    for (</span></span>
<span id="LC506" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      vector = 0;</span></span>
<span id="LC507" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      vector < BSP_INTERRUPT_VECTOR_COUNT;</span></span>
<span id="LC508" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ++vector</span></span>
<span id="LC509" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    ) {</span></span>
<span id="LC510" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      rtems_interrupt_attributes attr;</span></span>
<span id="LC511" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      rtems_status_code          sc;</span></span>
<span id="LC512" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC513" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      memset( &attr, 0, sizeof( attr ) );</span></span>
<span id="LC514" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      sc = rtems_interrupt_get_attributes( vector, &attr );</span></span>
<span id="LC515" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC516" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      if ( sc == RTEMS_INVALID_ID ) {</span></span>
<span id="LC517" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        continue;</span></span>
<span id="LC518" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      }</span></span>
<span id="LC519" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+</span></span>
<span id="LC520" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      T_rsc_success( sc );</span></span>
<span id="LC521" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      ${../req/set-priority:/test-run}(</span></span>
<span id="LC522" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        vector,</span></span>
<span id="LC523" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        attr.maximum_priority,</span></span>
<span id="LC524" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+        attr.can_set_priority</span></span>
<span id="LC525" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+      );</span></span>
<span id="LC526" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+    }</span></span>
<span id="LC527" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  checks: []</span></span>
<span id="LC528" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+  links: []</span></span>
<span id="LC529" class="line" lang="diff"> test-brief: |</span>
<span id="LC530" class="line" lang="diff">   Tests some ${../if/group:/name} directives.</span>
<span id="LC531" class="line" lang="diff"> test-context: []</span>
<span id="LC532" class="line" lang="diff"><span class="p" style="margin-top: 0;">@@ -206,9 +260,11 @@</span> test-context-support: null</span>
<span id="LC533" class="line" lang="diff"> test-description: null</span>
<span id="LC534" class="line" lang="diff"> test-header: null</span>
<span id="LC535" class="line" lang="diff"> test-includes:</span>
<span id="LC536" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- bsp/irq-generic.h</span></span>
<span id="LC537" class="line" lang="diff"> - rtems.h</span>
<span id="LC538" class="line" lang="diff"><span class="gd" style="margin-top: 0;">-- rtems/irq-extension.h</span></span>
<span id="LC539" class="line" lang="diff"> test-local-includes:</span>
<span id="LC540" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- tr-intr-get-priority.h</span></span>
<span id="LC541" class="line" lang="diff"><span class="gi" style="margin-top: 0;">+- tr-intr-set-priority.h</span></span>
<span id="LC542" class="line" lang="diff"> - tx-support.h</span>
<span id="LC543" class="line" lang="diff"> test-setup: null</span>
<span id="LC544" class="line" lang="diff"> test-stop: null</span></code></pre>
<copy-code></copy-code><insert-code-snippet></insert-code-snippet>
</div>
</div>


</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #626168;">

<br>
<a href="https://gitlab.rtems.org/rtems/prequal/rtems-central/-/merge_requests/20#note_151752">View it on GitLab</a>.
<br>
You're receiving this email because of your account on <a target="_blank" rel="noopener noreferrer" href="https://gitlab.rtems.org">gitlab.rtems.org</a>. <a href="https://gitlab.rtems.org/-/sent_notifications/3-3pmuzlei4yzlslnhs5xyrhtgk/unsubscribe" target="_blank" rel="noopener noreferrer">Unsubscribe</a> from this thread · <a href="https://gitlab.rtems.org/-/profile/notifications" target="_blank" rel="noopener noreferrer" class="mng-notif-link">Manage all notifications</a> · <a href="https://gitlab.rtems.org/help" target="_blank" rel="noopener noreferrer" class="help-link">Help</a>
<span style="color: transparent; font-size: 0; display: none; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0;">
Notification message regarding https://gitlab.rtems.org/rtems/prequal/rtems-central/-/merge_requests/20#note_151752 at 1780531673
</span>
<script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","action":{"@type":"ViewAction","name":"View Merge request","url":"https://gitlab.rtems.org/rtems/prequal/rtems-central/-/merge_requests/20#note_151752"}}</script>


</p>
</div>
</body>
</html>