13833 Commits

Author SHA1 Message Date
Norman Feske
9795f264aa ARM vmm: resolve uint64_t ambiguity
Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
e3607a2d67 framebuffer/virtio: resolve uint64_t ambiguity
This ambiguity is caused by the inclusion of arm_neon.h by the blit
library header.

Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
30b3fa45f1 window_layouter: free-arrange mode
This patch adds the feature of moving and resizing windows by clicking
anywhere within a window while the global window-management key is held.
Depending on the position within the window, the click is interpreted as
click on the title (when clicking at inner 50% of the window, or as a
click on the border (when clicking at an area nearby the window
boundary).

This mode of interaction requires more flexibility of the handling of
key sequences. The formerly hard-wired handling of the drag and drop as
response to BTN_LEFT events does not suffice. Therefore, this patch
moves the driving of the drag-and-drop state to the config level by
introducing the actions "drag" and "drop"

Fixes #5403
2025-02-24 16:39:19 +01:00
Norman Feske
7fc060438a window_layouter: handle drag/drop as actions
This patch moves the formerly hard-wired drag-and-drop handling
to the configuration level by introducing the actions "drag" and "drop".

To aid the robust handling of release events matching their
corresponding press events, the patch refines the policy-matching of the
current combination of keys against the hierarchy of <press> and
<release> nodes. If no policy for a concrete combination exists, a
release event also considers the policy of its matching <press> node.
This way, the regular drag-and-drop rules can be expressed as

  <press key="BTN_LEFT" action="drag">
     <release key="BTN_LEFT" action="drop"/>
  </press>

This also works when releasing BTN_LEFT while pressing additional keys,
for which no policy exists.

With this change, the layouter supports the matching of multiple key
sequences instead of only one, thereby supporting multiple actions at
once and allowing for decoupling different user interactions in the
configuration.

Issue #5403
2025-02-24 16:39:19 +01:00
Norman Feske
6c7cbb2c5e pkg/window_layouter: rules format change -> 24.12
To accommodate multi-monitor window management, the window-layouter
rules must be extended. By renaming the rules file to a version number
reflecting the date of change (24.12), we prevent the loss of
window-layout state when switching back and forth between different
versions of the window-layouter.

The default rules contain now the definition of three displays
("primary", "secondary", and "ternary") and map 3 screens to each
display.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
248c37784b window_layouter: "pick_up" and "place_down" action
The new 'action' attribute values can be used to realize the
keyboard-based assignement of windows to screens. The "pick_up" action
(on a key press) selects the focused window to be held at the current
position until the "place_down" action is issued (by a key release).
While the focused window is held, "screen" actions can be executed
taking the picked up window to the selected screen.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
d9e49a5c03 window_layouter: restrict focus to visible windows
This patch restricts the focus switching via the keyboard (Super-Tab) to
windows located at visible screens.

Should the currently focused window become invible, switch the focus to the
most recently focused visible window.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
dbcc21c109 window_layouter: modernized coding style
Replace the use of pointers and the copying of XML nodes by the 'with_'
pattern. Use plain struct where appropriate, replace constructors by { }
initialization. Use C++20 function template syntax. Replace accessors by
public constants where possible. Follow 'from_xml' convention. Follow
usual 'Action' interface naming.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
ca1b22b0aa window_layouter: allow screen-change during drag
This patch enables the user to interactively change the assignment of
windows to screens. For screens visible side by side in a multi-monitor
setup, one can now move a window from one screen to another by dragging
the window title. When using screens as virtual desktops on one display,
a window can be moved to another screen by switching the screen (by
pressing a key matching a desired screen) while the window is dragged
with the mouse. So the user can drag the window between virtual desktops.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
8496d5b02a window_layouter: drag windows between displays
This patch allows the user to drag windows from one target area (i.e.,
display) to another whereas the resizing of windows is restricted to
the window's original target area. The latter point is important to
ensure that the window's resize handles remain reachable at all times.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
1638ee00c3 wm/decorator/layouter: window clipping
This patch changes the window-layout format to support the rectangular
clipping of windows at screen boundaries. The new <boundary> node defines
the clipping boundary for the windows listed within the node. Boundaries
are expected to be disjoint. In the example below, the "vbox" window is
placed partially outside the screen area of "screen_2".

<window_layout>
  <boundary name="screen_1" xpos="0" ypos="0" width="640" height="480">
    <window id="1" title="launchpad" xpos="10" ypos="140" width="400" height=">
  </boundary>
  <boundary name="screen_2" xpos="640" ypos="0" width="800" height="600">
    <window id="2" title="vbox"     xpos="520" ypos="52" width="800" height="600">
    <window id="3" title="terminal" xpos="650" ypos="72" width="500" height="400">
  </boundary>
</window_layout>

The layouter uses boundaries to restrict the visiblilty of windows to
their respective target areas.

Until now, Sculpt relied on the fact that the window-layout ROM had the
same structure as the resize-request ROM. With the addition of the
<boundary> nodes, this is no longer the case. Therefore, the Sculpt
manager generates a dedicated resize-request ROM now.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
b3d99960e7 window_layouter: assignment of screens to displays
This patch enhances the window layouter with the notion of displays
and the assignment of screens to displays.

Issue #5390
2025-02-24 16:39:19 +01:00
Norman Feske
21acbed65b blit: Blit::blend_xrgb_a
This commit adds support for SIMD-based alpha blending, which speeds up
the alpha-compositing of the nitpicker GUI server by circa 300% on ARM
Neon and x86_64 using SSE4.1

Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
19717ab74e fb_sdl: support rotate and flip
Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
a5ae1e12bd Capture::Connection::Screen: use Blit::back2front
Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
ea811a3217 nitpicker: alloc padded capture buffer
This is a precondition for using Blit::back2front at the driver side.

Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
dc9ff4b3e3 blit: SIMD-based back2front copy
Issue #5428
2025-02-24 16:39:19 +01:00
Norman Feske
10a45b78d0 fb_sdl: side-step warnings due to arm_neon.h include 2025-01-30 16:35:49 +01:00
Norman Feske
d90db178a2 nitpicker: resolve uint64_t ambiguity 2025-01-30 16:35:49 +01:00
Norman Feske
526ea05821 os/pixel_rgba: inherit alignment of storage type
This avoids the compiler warning "address-of-packed-member" when
casting a Pixel_rgb888 pointer to an uint32_t pointer on 64-bit ARM.
2025-01-30 16:35:49 +01:00
Christian Helmuth
5076554f20 depot: update recipe hashes 2025-01-30 16:32:35 +01:00
Norman Feske
146f161383 gui_fader: precompute dithered 16x16 tile
This improves the performance of the Alpha_dither_painter in
the run/gui_fader scenario by about 3x.
2025-01-30 16:30:15 +01:00
Norman Feske
a5d3613f50 build: set -march=x86-64-v2 for x86_64
This allows for the use of SSE4.1 intrinsics.

Fixes #5440
2025-01-30 16:30:15 +01:00
Alexander Boettcher
279a02e449 sel4: increase resources for fb_bench
Issue #5423
2025-01-30 16:30:15 +01:00
Christian Helmuth
e90a4a905a libdrm: explicitly convert values to __u64
Prevent errors like follows.

  error: invalid cast from type ‘size_t’ {aka ‘long unsigned int’} to type ‘__u64’ {aka ‘long long unsigned int’}

Issue #5431
2025-01-30 16:30:15 +01:00
Alexander Boettcher
b5a074dba1 libc: add missing header for qemu port 2025-01-30 16:30:15 +01:00
Josef Söntgen
acf1488e65 libnl: use fixed_stint.h for typedefs
Issue #5431.
2025-01-30 16:30:15 +01:00
Stefan Kalkowski
e113d37958 libusb: don't freeze when device vanishs
Instead of freezing, return corresponding libusb error code if the
USB device got disconnected. Therefore, components using the library
can continue to work otherwise.

Fix genodelabs/genode#5434
2025-01-30 16:30:15 +01:00
Stefan Kalkowski
76aba79e0b base: add missing wakeup signal in child framework
In Child::deliver_session_cap a signal to wakeup a service after
altering its session ROM was missing when the requesting client
that does not longer exist.

Fix genodelabs/genode#5435
2025-01-30 16:30:14 +01:00
Alexander Boettcher
2ad1c450ee sel4: add MSI support for x86
Fixes #5423
2025-01-30 16:30:14 +01:00
Alexander Boettcher
ea3ed25431 base: support specifying PCI bdf on irq creation
Required by the seL4 kernel interface for MSI creation and by another upstream
kernel.

Issue #5423
2025-01-30 16:30:14 +01:00
Alexander Boettcher
935681a7f4 foc: support more caps
by increasing the base-foc internal cap indices implementation from 16bit
size to 28 bit.

Issue #5406
2025-01-30 16:30:14 +01:00
Benjamin Lamowski
02b7878229 hw: always serialize rdtsc reads
While implementing TSC calibration in #5215, the issue of properly serializing
TSC reads came up. Some learnings of the discussion were noted in #5430.

Using `cpuid` for serialization as in Trace::timestamp() is portable,
but will cause VM exits on VMX and SVM and is therefore unsuitable to
retain a roughly working calibration loop while running virtualized.
On the other hand on most AMD systems, dispatch serializing `lfence`
needs to be explicitly enabled via a non-architectural MSR.

Enable setting up dispatch serializing lfence on AMD systems and always
serialize rdtsc accesses in Hw::Tsc::rdtsc() for maximum reliability.

Issues #5215, #5430
2025-01-30 16:30:14 +01:00
Benjamin Lamowski
ec5e1a6b4b hw: calibrate Local APIC via ACPI timer
Upto now, bootstrap used the Programmable Interval Timer to set a
suitable divider and determine the frequency of the Local APIC.
The PIT is not available on recent x86_64 hardware anymore.

Move Local APIC calibration to bootstrap and use the ACPI timer as a
reference. Clean up hw's timer implementation a little and disable the
PIT in bootstrap.

Fixes #5215
2025-01-30 16:30:14 +01:00
Benjamin Lamowski
89f7834b17 hw: calibrate TSC via ACPI timer
To get the Time Stamp Counter's frequency, hw relied on a complex and
incomplete algorithm.

Since this is a one-time initialization issue, move TSC calibration to
bootstrap and implement it using the ACPI timer.

Issue #5215
2025-01-30 16:30:14 +01:00
Norman Feske
ddeebbe513 libc: unify base types for arm_64 and riscv
Fixes #5431
2025-01-30 16:30:14 +01:00
Norman Feske
63b49fcdb3 Enable -ffreestanding by default
Fixes #5429
2025-01-30 16:30:14 +01:00
Christian Prochaska
9dee2fbaf3 qt6: install the SVG image format plugin
Fixes #5427
2025-01-30 16:30:14 +01:00
Christian Prochaska
b8cab63a15 qt6: fix dangling pointer in QGenodeWindowSurface
Fixes #5426
2025-01-30 16:30:14 +01:00
Christian Prochaska
bf7509312f qt6: use window title as label for GUI session
Fixes #5424
2025-01-30 16:30:14 +01:00
Alexander Boettcher
a8b3193d73 tool: use bender hwp options also for foc and seL4
Issue #5406
2025-01-30 16:30:14 +01:00
Alexander Boettcher
f28f97773d sculpt: use rom_fs for fiasco and foc
Issue #5406
2025-01-30 16:30:14 +01:00
Norman Feske
d1c4bc5115 vm_session: use Callable for with_state
Issue #5420
2025-01-30 16:30:14 +01:00
Norman Feske
2407968242 sandbox: don't use Xml_node as return value
Issue #5411
2025-01-30 16:30:14 +01:00
Norman Feske
33446be8ac monitor/sandbox: use Callable
Issue #5420
2025-01-30 16:30:14 +01:00
Norman Feske
414afba682 cpu_sampler: propagate Create_thread_error
The accounting of caps for the UTCB allocation on base-hw puts pressure
on the out-of-ram/caps handling of Create_thread_result in the CPU
sampler. This patch implements the formerly missing error handling.

Issue #5408
2025-01-30 16:30:14 +01:00
Stefan Kalkowski
b0052a71be hw: remove unused object pool of pager ojects
Fix genodelabs/genode#5417
2025-01-30 16:30:14 +01:00
Stefan Kalkowski
0d648eae62 hw: sanitize kernel's signal datastructures
* Move all Kernel::Signal_* structures to kernel/signal.*
* Remove return value of kill_signal_context, which wasn't evaluated
* Remove Kernel::Signal_context::can_kill
* Remove Kernel::Signal_context::can_submit
* Remove Kernel::Signal_receiver::can_add_handler
* Turn nullptr into cxx nullptr instead of just zero
* Turn boolean values into true/false instead of one/zero
* Always add to signal FIFO also if submit counter
  cannot get increased enough

Fix genodelabs/genode#5416
2025-01-30 16:30:14 +01:00
Stefan Kalkowski
2728853005 hw: implement helping of pager threads
Instead of blocking in case of exceptions and MMU faults, delegate
the faulter's scheduling context to the assigned pager thread.

Fix genodelabs/genode#5318
2025-01-30 16:30:14 +01:00
Stefan Kalkowski
1194652d20 hw: move remaining pager code to pager.cc
Consolidate core's ha-specific pager code in one and the same compilation unit.

Ref genodelabs/genode#5318
2025-01-30 16:30:14 +01:00