<!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: hsla(0,0%,100%,.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: hsla(0,0%,100%,.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 class="details" style="font-style: italic; color: #626168;">
<a href="https://gitlab.rtems.org/TheSamPrice">Sam Price</a> created a merge request: <a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1499">!1499</a>
</p>
<div class="branch">
Project:Branches: TheSamPrice/rtems:gpio-api-ioctl to rtems/rtos/rtems:main
</div>
<div>
Author: Sam Price
</div>

<div class="md gl-mt-5" style="position: relative; z-index: 1; color: #3a383f; word-wrap: break-word; margin-top: 1rem;">
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">RTEMS has GPIO support in two BSPs and no general interface. This proposes
one. It is the API and its test only -- drivers and documentation follow as
separate MRs once the shape is agreed, so this is opened as a Draft for
review rather than for merge.</p>
<h2 id="user-content-said-up-front" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">Said up front<a href="#said-up-front" aria-label="Link to heading 'Said up front'" data-heading-content="Said up front" class="anchor" style="margin-top: 0px;"></a>
</h2>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial"><strong style="font-weight: 600; margin-top: 0px;">This was written with AI assistance, and it is the first API of that origin
the project will have to review.</strong> I would rather that be stated than
discovered. I have tried to make it reviewable on evidence rather than on
trust, and what is <em>not</em> verified is listed below rather than left for a
reviewer to find. Review it as hard as any other contribution.</p>
<h2 id="user-content-where-it-came-from" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">Where it came from<a href="#where-it-came-from" aria-label="Link to heading 'Where it came from'" data-heading-content="Where it came from" class="anchor" style="margin-top: 0px;"></a>
</h2>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The design brief is not mine. After surveying every GPIO implementation in
the tree, Chris Johns set out what the interface should be: the BSP
exclusively controls pin allocation and modes at the SoC level; the API
controls settings only for configured pins; a standard RTEMS driver with a
node in the IMFS and an ioctl handler; unsupported features return not
supported; continuous logical pin numbering that the BSP maps to hardware,
with pins possibly banked and sparse; physical and virtual pin
characteristics, so a BSP driver can implement virtual IO; and a call
returning a pin's configuration in terms of the published options.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">This implements that brief, virtual IO included.</p>
<h2 id="user-content-the-shape" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">The shape<a href="#the-shape" aria-label="Link to heading 'The shape'" data-heading-content="The shape" class="anchor" style="margin-top: 0px;"></a>
</h2>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">A controller is a BSP driver registered as a device node, publishing
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; 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;">pin_count</code> logical pins numbered 0..pin_count-1 with no holes. Banks and
sparse hardware are the driver's problem, not the caller's. Thirteen
directives, each one <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;">ioctl()</code>:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-canonical-lang="c" class="code highlight js-syntax-highlight language-c" 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: 0px 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: 0px; 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" data-lang="c" style="margin-top: 0px;"><span class="n" style="margin-top: 0px;">fd</span> <span class="o">=</span> <span class="n">open</span><span class="p">(</span><span class="s">"/dev/gpio0"</span><span class="p">,</span> <span class="n">O_RDWR</span><span class="p">);</span></span>
<span id="LC2" class="line" data-lang="c"></span>
<span id="LC3" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">rtems_gpio_pin_by_name</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="s">"LED0"</span><span class="p">,</span> <span class="o">&</span><span class="n">pin</span><span class="p">);</span>      <span class="cm">/* name the pad, not the number */</span></span>
<span id="LC4" class="line" data-lang="c"></span>
<span id="LC5" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">memset</span><span class="p">(</span><span class="o">&</span><span class="n">config</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">config</span><span class="p">));</span></span>
<span id="LC6" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">config</span><span class="p">.</span><span class="n">direction</span> <span class="o">=</span> <span class="n">RTEMS_GPIO_DIRECTION_OUTPUT</span><span class="p">;</span></span>
<span id="LC7" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">config</span><span class="p">.</span><span class="n">flags</span> <span class="o">=</span> <span class="n">RTEMS_GPIO_FLAG_ACTIVE_LOW</span><span class="p">;</span>     <span class="cm">/* no hardware inverter needed */</span></span>
<span id="LC8" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">config</span><span class="p">.</span><span class="n">drive_strength</span> <span class="o">=</span> <span class="mi">12000</span><span class="p">;</span>                 <span class="cm">/* microamps; reads back 20000 */</span></span>
<span id="LC9" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">rtems_gpio_pin_configure</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">pin</span><span class="p">,</span> <span class="o">&</span><span class="n">config</span><span class="p">);</span></span>
<span id="LC10" class="line" data-lang="c"></span>
<span id="LC11" class="line" data-lang="c"><span class="n" style="margin-top: 0px;">rtems_gpio_pin_set</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">pin</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>                <span class="cm">/* logical 1; the pad goes low */</span></span></code></pre>
<copy-code></copy-code><insert-code-snippet></insert-code-snippet>
</div>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The generic layer does the locking, the pin range checks and the capability
checks, so no driver writes them. A handler left NULL answers <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; 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;">ENOTSUP</code>, so a
controller that can only read and write pins is a legal driver.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The commit message records the decisions and why the alternatives were not
taken. In short: polarity is applied in the generic layer so a controller
with no inversion register still supports active-low pins; bulk operations
are caller-sized <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; 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_t</code> bitmaps with no maximum anywhere; <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;">can_block</code> is
a property rather than something inferred; drive strength and debounce are in
microamps and microseconds rather than hardware enum indexes; and capability,
board reservation and current owner are three separate questions.</p>
<h2 id="user-content-this-ground-has-been-covered-before" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">This ground has been covered before<a href="#this-ground-has-been-covered-before" aria-label="Link to heading 'This ground has been covered before'" data-heading-content="This ground has been covered before" class="anchor" style="margin-top: 0px;"></a>
</h2>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">None of the choices are new.</p>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0px 0px 1rem; padding: 0;">
<li style="margin-top: 0px; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<strong style="font-weight: 600; margin-top: 0px;">Linux, December 2012.</strong> Alexandre Courbot's RFC "gpiolib: introduce
descriptor-based GPIO interface" replaced integer pin IDs with opaque
descriptors, because the integer namespace was fixed at build time, needed
a statically allocated array, and required the <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">ARCH_NR_GPIOS</code> maximum.</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<strong style="font-weight: 600; margin-top: 0px;">RTEMS, 2014-2015.</strong> This is not the project's first generic GPIO API.
Andre Marques's <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">bsps/include/bsp/gpio.h</code> and
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">bsps/shared/dev/gpio/gpio-support.c</code> already answer "pins or ports?" with
both. The one thing it does that this does not is fix its size at compile
time: it <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">#error</code>s unless the BSP defines <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">BSP_GPIO_PIN_COUNT</code> and
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">BSP_GPIO_PINS_PER_BANK</code>, and rejects <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">BSP_GPIO_PINS_PER_BANK > 32</code>. That
is the same build-time-maximum problem Courbot's RFC set out to remove, and
it is why <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">pin_count</code> here is a runtime property of a controller instance.</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<strong style="font-weight: 600; margin-top: 0px;">Zephyr, April 2026.</strong> RFC: Fast GPIO API Extension -- one descriptor is
one port plus a pin mask, and cross-port atomicity is explicitly not
promised. Note Zephyr's <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">gpio_port_pins_t</code> is a <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">uint32_t</code>, so a port <em>is</em>
at most 32 pins and a wider controller becomes several port devices. That
is a fair answer, but it hands the bank sums back to the caller, which the
brief above rules out.</li>
</ul>
<h2 id="user-content-what-is-verified" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">What is verified<a href="#what-is-verified" aria-label="Link to heading 'What is verified'" data-heading-content="What is verified" class="anchor" style="margin-top: 0px;"></a>
</h2>
<ul dir="auto" style="text-align: initial; list-style-type: disc; margin: 0px 0px 1rem; padding: 0;">
<li style="margin-top: 0px; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">cpukit/dev/gpio/gpio.c</code> -- <strong style="font-weight: 600;">306/306 coverable lines</strong>, measured with
tcgcov (a QEMU TCG plugin) over an unmodified image on
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">qemu-system-arm -M xilinx-zynq-a9</code>.</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">gpio01</code> passes on this branch, rebased onto <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">62598e8db1</code> and rebuilt. The
test controller has 40 pins on purpose -- at 32 or fewer the suite could
not tell a bulk operation that spans bitmap words from one that does not.</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">No new compiler warnings in the GPIO sources.</li>
</ul>
<h2 id="user-content-what-is-not-verified" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">What is not verified<a href="#what-is-not-verified" aria-label="Link to heading 'What is not verified'" data-heading-content="What is not verified" class="anchor" style="margin-top: 0px;"></a>
</h2>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial"><strong style="font-weight: 600; margin-top: 0px;">No hardware.</strong> The three hardware drivers that use this API are not in this
MR, but none of them has run on silicon, so the API has only ever been
exercised against a software test controller and a virtual driver. QEMU does
not model the Zynq PS GPIO registers at all.</p>
<h2 id="user-content-open-questions" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">Open questions<a href="#open-questions" aria-label="Link to heading 'Open questions'" data-heading-content="Open questions" class="anchor" style="margin-top: 0px;"></a>
</h2>
<ol dir="auto" style="text-align: initial; margin: 0px 0px 1rem; padding: 0;">
<li style="margin-top: 0px; line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<strong style="font-weight: 600; margin-top: 0px;">The existing API.</strong> <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">bsps/include/bsp/gpio.h</code> and
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">bsps/shared/dev/gpio/gpio-support.c</code> are used by beagle and raspberrypi.
There is no symbol collision -- that one is <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">rtems_gpio_bsp_*</code> and this is
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">rtems_gpio_pin_*</code> / <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">rtems_gpio_drv_*</code> -- so they can coexist, but two
GPIO APIs is not a good end state. Deprecate, port the two BSPs, or leave
it?</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<strong style="font-weight: 600; margin-top: 0px;">Level-triggered re-entrancy.</strong> A handler that does not remove its cause
is re-entered. Linux masks the line and unmasks on ack. Worth settling
once in the API rather than per driver.</li>
<li style="line-height: 1.6em; margin-left: 25px; padding-left: 3px;">
<strong style="font-weight: 600; margin-top: 0px;">Documentation form.</strong> The <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">c-user</code> chapter is written by hand, following
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">regulator</code> and <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; 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; white-space: pre-wrap; overflow-wrap: break-word; word-break: keep-all; padding: 0.125rem 0.25rem;">iodev</code>. If rtems-central spec items are wanted instead, I
would rather know now.</li>
</ol>
<p dir="auto" style="color: #3a383f; margin: 0px;" align="initial">Happy to reshape any of it. The API is the part worth arguing about.</p>
</div>

</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #626168;">
—
<br>
<a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1499">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/-/namespace/49/sent_notifications/5-djhm02bl9m53tv84ilxjp87eo-1d/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/rtos/rtems/-/merge_requests/1499 at 1790045770
</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/rtos/rtems/-/merge_requests/1499"}}</script>


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