Release v2.8.1

Lino Sanfilippo (4):
      man: Use macro name instead of raw number for process image size
      Provide macro names for consistent prefix
      man: adjust documentation to new macro names
      Release v2.8.1

Nicolai Buchwitz (83):
      piControl: release sniff pins before a module reset
      PiBridgeMaster: release right side select line in ethernet mode
      Do not hint at a firmware update when the master limits the baudrate
      revpi_core: register unconfigured ethernet gateways as inactive
      piControl: derive the bootloader address from the configuration
      piFirmwareUpdate: fix bootloader address for unscanned IO modules
      piFirmwareUpdate: enter update mode on gate address for old mGates
      piFirmwareUpdate: retry failed uploads and keep the module in update mode
      piFirmwareUpdate: repeat the gate protocol broadcast on retries
      piFirmwareUpdate: repeat the update mode request on retries
      RS485FwuCommand: add detection of devices in update mode
      piFirmwareUpdate: check for the bootloader before erasing
      PiBridgeMaster: recover gateways stuck in the bootloader
      piFirmwareUpdate: reduce chunk transmission attempts to 10
      RevPiDevice: retry GetDeviceInfo during the module scan
      piControlMain: clear config pointers after freeing them
      piControlMain: avoid leaking heap in the internal gate message ioctl
      piDIOComm: fix out-of-bounds access on the PWM output cache
      piConfig: validate entry field count before indexing
      piConfig: reject export offsets outside the process image
      revpi: clamp module output length when zeroing the process image
      piConfig: install parsed config under lockPI
      RevPiDevice: serialise updates to the shared status byte
      piFirmwareUpdate: validate firmware size before reading the header
      PiBridgeMaster: bound the config default offsets to the process image
      revpi_flat: check the parsed config before dereferencing it
      piControl: remove unused functions
      piControl: remove unused globals and enum value
      PiBridgeMaster: make eRunStatus_s static
      piControl: drop the stale ACPI debug build flag
      RevPiDevice: merge the left/right scan configuration helpers
      piControl: drop duplicate constant definitions
      piConfig: make process_file static
      IoProtocol: Fix number of returned DIO counters
      piDIOComm: send only the DIO configuration payload
      IoProtocol: match AIO RTD structs to the wire protocol
      piControl: return errno from the DIO and AIO cyclic telegrams
      revpi_common: add cyclic process-image helpers
      piAIOComm: use the shared cyclic exchange
      revpi_ro: use the shared cyclic exchange
      piDIOComm: use the shared cyclic helpers
      revpi_mio: use the shared cyclic request
      revpi_common: add a config-telegram send helper
      piAIOComm: send config via the helper and return errno
      piDIOComm: send config via the helper and return errno
      revpi_ro: send config via the helper
      revpi_mio: send config via the helper
      ci: add manual device tests
      piConfig: reject invalid module configurations
      piDIOComm: retry PWM values after communication errors
      piAIOComm: clear cached configuration on reset
      revpi_mio: propagate module initialization errors
      revpi_compact: clear cached configuration before parsing
      revpi_compact: drop the unused adjustment result
      piConfig: accept an empty configuration
      piControlMain: add printf attribute to printUserMsg
      piControl: fix kernel-doc warnings
      piControl: report the device base offset to user space
      pibridge-cycles: Remove intermediate statistics
      revpi_gate: wait for the connection teardown to complete
      revpi_gate: ignore gate packets while the bridge is not running
      revpi_gate: bind the packet handler to the driver lifetime
      revpi_gate: drop gateway connections on bridge reinitialization
      piControlMain: stop the bridge unconditionally on remove
      revpi_flat: stop process image updates on KB_STOP_IO
      piControl: make uapi header usable from userspace
      piControl: complete truncated comment on REV_PI_DEV_CNT_MAX
      piControl: expose process image size to userspace
      piControl: expose module address split to userspace
      piControlMain: pass a timeout with internal IO telegrams
      piControlMain: extend timeout for MIO calibration save
      piControlMain: extend timeout for AIO scaling save
      piConfig: reject config module address outside the bridge range
      piDIOComm: size the counter arrays by the module address space
      revpi_gate: reduce gateway log spam when stuck
      common_define: move module_is_software() next to module_is_gateway()
      piConfig: only check addresses of bridge modules
      RevPiDevice: stop the scan when a side runs out of addresses
      piConfig: restore the running config when a new one cannot be applied
      piDIOComm: drop the separate limit for digital modules
      piAIOComm: drop the separate limit for AIO modules
      revpi_mio: drop the separate limit for MIO modules
      revpi_ro: drop the separate limit for RO modules

Thomas Böhler (67):
      ci: support coverity-submit job for schedules
      ci: update coverity-submit build-container to trixie
      ci: always update linux headers in coverity-submit
      introduce __cleanup() based infrastructure for rt_mutex
      piControlMain: use guard for rt_mutex
      PiBridgeMaster: use guard for rt_mutex
      revpi_common: use guard for rt_mutex
      RevPiDevice: use guard for rt_mutex
      revpi_core: use guard for rt_mutex
      revpi_flat: use guard for rt_mutex
      revpi_compact: remove goto logic in revpi_compact_poll_ain()
      revpi_compact: handle lock separately in revpi_compact_poll_ain()
      revpi_compact: use guard for rt_mutex
      revpi_gate: use guard for rt_mutex
      piAIOComm: use guard for rt_mutex
      piDIOComm: use guard for rt_mutex
      revpi_mio: use guard for rt_mutex
      revpi_ro: use guard for rt_mutex
      process_image.h: use guard for rt_mutex
      revpi_core: multiply by 2 instead of shifting
      revpi_core: extract revpi_core_logirts_timeout_reset from piIoThread
      piControlMain: avoid unnecessary nesting in piControlReset
      piControlMain: further reduce nesting in piControlReset()
      piControlMain: remove unused var priv in piControlSeek
      piConfig: use NULL instead of 0 when a pointer arg is expected
      piControlMain: use C99 syntax for initializing piControlFops struct
      piControlMain: use __func__ instead of repeating the function name
      piControlMain: make piControlFops const
      piControlMain: print error on failing allocation in piControlReset
      ci: don't use CI_COMMIT_BRANCH var
      prefer __packed over __attribute__((__packed__))
      revpi_mio: ensure consistent spacing around "-"
      revpi_mio: consistent comment style
      piIoComm: remove unused crc8 function
      IoProtocol: add missing space after closing brace of SAioRtdScaling
      revpi_mio: fix spelling of debugging
      revpi_mio: fix doc comment for revpi_chnl_compress
      piControlMain: don't cast away __user attribute for pointers
      piConfig: declare string_of_errors as static
      PiBridgeMaster: annotate pibridge_reinit with __must_hold
      RevPiDevice: declare RevPi*_ID_g variables as static
      pass NULL as last argument of piIoComm_sendRS485Tel
      piFirmwareUpdate: use NULL when assigning to pointer
      process_image: compare pointer to NULL instead of integer
      remove DEBUG_MASTER_STATE macro
      remove custom pr_info_* macros
      consistently print device info with debug level
      piControlMain: remove firmware update check from KB_GET_DEVICE_INFO_LIST
      piControlMain: change wrong wording of "spi value"
      revpi_common: add warn message for watchdog timeout
      picontrol_ioctl: move man page to doc/
      picontrol_ioctl: track SPDX info in file directly
      picontrol_ioctl: wrap examples in .EX/.EE
      picontrol_ioctl: use up-to-date forum link
      split picontrol_ioctl(4) into separate man pages
      piControlMain: restore previous API of KB_SET_OUTPUT_WATCHDOG
      revpi_flat: fix multiline comments
      revpi_flat: ensure space after comma
      revpi_flat: don't put spaces before tabs
      revpi_flat: use __packed for packed structs
      revpi_flat: don't split strings over multiple lines
      revpi_flat, revpi_compact: spell out "software modules"
      revpi_flat: don't sleep twice on failure to read analog input
      piControl: remove trailing whitespace
      remove unused KB_CONFIG_* ioctls
      deprecate the KB_GET_LAST_MESSAGE ioctl
      deprecate the KB_SET_POS ioctl