diff options
194 files changed, 13108 insertions, 1473 deletions
diff --git a/.gitlab-ci.d/opensbi.yml b/.gitlab-ci.d/opensbi.yml index 62088ec5ec..5b13047e2a 100644 --- a/.gitlab-ci.d/opensbi.yml +++ b/.gitlab-ci.d/opensbi.yml @@ -35,18 +35,14 @@ build-opensbi: when: always artifacts: paths: # 'artifacts.zip' will contains the following files: - - pc-bios/opensbi-riscv32-sifive_u-fw_jump.bin - - pc-bios/opensbi-riscv32-virt-fw_jump.bin - - pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin - - pc-bios/opensbi-riscv64-virt-fw_jump.bin - - opensbi32-virt-stdout.log - - opensbi32-virt-stderr.log - - opensbi64-virt-stdout.log - - opensbi64-virt-stderr.log - - opensbi32-sifive_u-stdout.log - - opensbi32-sifive_u-stderr.log - - opensbi64-sifive_u-stdout.log - - opensbi64-sifive_u-stderr.log + - pc-bios/opensbi-riscv32-generic-fw_dynamic.bin + - pc-bios/opensbi-riscv32-generic-fw_dynamic.elf + - pc-bios/opensbi-riscv64-generic-fw_dynamic.bin + - pc-bios/opensbi-riscv64-generic-fw_dynamic.elf + - opensbi32-generic-stdout.log + - opensbi32-generic-stderr.log + - opensbi64-generic-stdout.log + - opensbi64-generic-stderr.log image: $CI_REGISTRY_IMAGE:opensbi-cross-build variables: GIT_DEPTH: 3 @@ -55,10 +51,6 @@ build-opensbi: - export JOBS=$(($(getconf _NPROCESSORS_ONLN) + 1)) - echo "=== Using ${JOBS} simultaneous jobs ===" - make -j${JOBS} -C roms/opensbi clean - - make -j${JOBS} -C roms opensbi32-virt 2>&1 1>opensbi32-virt-stdout.log | tee -a opensbi32-virt-stderr.log >&2 + - make -j${JOBS} -C roms opensbi32-generic 2>&1 1>opensbi32-generic-stdout.log | tee -a opensbi32-generic-stderr.log >&2 - make -j${JOBS} -C roms/opensbi clean - - make -j${JOBS} -C roms opensbi64-virt 2>&1 1>opensbi64-virt-stdout.log | tee -a opensbi64-virt-stderr.log >&2 - - make -j${JOBS} -C roms/opensbi clean - - make -j${JOBS} -C roms opensbi32-sifive_u 2>&1 1>opensbi32-sifive_u-stdout.log | tee -a opensbi32-sifive_u-stderr.log >&2 - - make -j${JOBS} -C roms/opensbi clean - - make -j${JOBS} -C roms opensbi64-sifive_u 2>&1 1>opensbi64-sifive_u-stdout.log | tee -a opensbi64-sifive_u-stderr.log >&2 + - make -j${JOBS} -C roms opensbi64-generic 2>&1 1>opensbi64-generic-stdout.log | tee -a opensbi64-generic-stderr.log >&2 diff --git a/MAINTAINERS b/MAINTAINERS index 0886eb3d2b..5a22c8be42 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -894,7 +894,7 @@ F: hw/misc/zynq* F: include/hw/misc/zynq* X: hw/ssi/xilinx_* -Xilinx ZynqMP +Xilinx ZynqMP and Versal M: Alistair Francis <alistair@alistair23.me> M: Edgar E. Iglesias <edgar.iglesias@gmail.com> M: Peter Maydell <peter.maydell@linaro.org> @@ -905,6 +905,7 @@ F: include/hw/*/xlnx*.h F: include/hw/ssi/xilinx_spips.h F: hw/display/dpcd.c F: include/hw/display/dpcd.h +F: docs/system/arm/xlnx-versal-virt.rst ARM ACPI Subsystem M: Shannon Zhao <shannon.zhaosl@gmail.com> diff --git a/Makefile b/Makefile index 8373ddccc9..81794d5c34 100644 --- a/Makefile +++ b/Makefile @@ -229,11 +229,6 @@ distclean: clean ninja-distclean rm -f linux-headers/asm rm -Rf .sdk -KEYMAPS=da en-gb et fr fr-ch is lt no pt-br sv \ -ar de en-us fi fr-be hr it lv nl pl ru th \ -de-ch es fo fr-ca hu ja mk pt sl tr \ -bepo cz - ifdef INSTALL_BLOBS BLOBS=bios.bin bios-256k.bin bios-microvm.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \ vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \ @@ -254,8 +249,8 @@ u-boot.e500 u-boot-sam460-20100605.bin \ qemu_vga.ndrv \ edk2-licenses.txt \ hppa-firmware.img \ -opensbi-riscv32-sifive_u-fw_jump.bin opensbi-riscv32-virt-fw_jump.bin \ -opensbi-riscv64-sifive_u-fw_jump.bin opensbi-riscv64-virt-fw_jump.bin +opensbi-riscv32-generic-fw_dynamic.bin opensbi-riscv64-generic-fw_dynamic.bin \ +opensbi-riscv32-generic-fw_dynamic.elf opensbi-riscv64-generic-fw_dynamic.elf else BLOBS= endif @@ -298,9 +293,6 @@ endif $(INSTALL_DATA) $(SRC_PATH)/ui/qemu.desktop \ "$(DESTDIR)$(qemu_desktopdir)/qemu.desktop" $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps" - set -e; for x in $(KEYMAPS); do \ - $(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \ - done ifdef CONFIG_WIN32 diff --git a/configure b/configure index 4e5fe33211..b8f5b81a67 100755 --- a/configure +++ b/configure @@ -228,15 +228,15 @@ version_ge () { while true; do set x $local_ver1 local_first=${2-0} - # shift 2 does nothing if there are less than 2 arguments - shift; shift + # 'shift 2' if $2 is set, or 'shift' if $2 is not set + shift ${2:+2} local_ver1=$* set x $local_ver2 # the second argument finished, the first must be greater or equal test $# = 1 && return 0 test $local_first -lt $2 && return 1 test $local_first -gt $2 && return 0 - shift; shift + shift ${2:+2} local_ver2=$* done } @@ -7782,6 +7782,7 @@ case "$target_name" in microblaze|microblazeel) TARGET_ARCH=microblaze TARGET_SYSTBL_ABI=common + mttcg="yes" bflt="yes" echo "TARGET_ABI32=y" >> $config_target_mak ;; @@ -8129,6 +8130,7 @@ LINKS="$LINKS tests/qemu-iotests/check" LINKS="$LINKS python" for bios_file in \ $source_path/pc-bios/*.bin \ + $source_path/pc-bios/*.elf \ $source_path/pc-bios/*.lid \ $source_path/pc-bios/*.rom \ $source_path/pc-bios/*.dtb \ diff --git a/docs/specs/index.rst b/docs/specs/index.rst index 426632a475..1b0eb979d5 100644 --- a/docs/specs/index.rst +++ b/docs/specs/index.rst @@ -12,6 +12,7 @@ Contents: ppc-xive ppc-spapr-xive + ppc-spapr-numa acpi_hw_reduced_hotplug tpm acpi_hest_ghes diff --git a/docs/specs/ppc-spapr-numa.rst b/docs/specs/ppc-spapr-numa.rst new file mode 100644 index 0000000000..e762038022 --- /dev/null +++ b/docs/specs/ppc-spapr-numa.rst @@ -0,0 +1,191 @@ + +NUMA mechanics for sPAPR (pseries machines) +============================================ + +NUMA in sPAPR works different than the System Locality Distance +Information Table (SLIT) in ACPI. The logic is explained in the LOPAPR +1.1 chapter 15, "Non Uniform Memory Access (NUMA) Option". This +document aims to complement this specification, providing details +of the elements that impacts how QEMU views NUMA in pseries. + +Associativity and ibm,associativity property +-------------------------------------------- + +Associativity is defined as a group of platform resources that has +similar mean performance (or in our context here, distance) relative to +everyone else outside of the group. + +The format of the ibm,associativity property varies with the value of +bit 0 of byte 5 of the ibm,architecture-vec-5 property. The format with +bit 0 equal to zero is deprecated. The current format, with the bit 0 +with the value of one, makes ibm,associativity property represent the +physical hierarchy of the platform, as one or more lists that starts +with the highest level grouping up to the smallest. Considering the +following topology: + +:: + + Mem M1 ---- Proc P1 | + ----------------- | Socket S1 ---| + chip C1 | | + | HW module 1 (MOD1) + Mem M2 ---- Proc P2 | | + ----------------- | Socket S2 ---| + chip C2 | + +The ibm,associativity property for the processors would be: + +* P1: {MOD1, S1, C1, P1} +* P2: {MOD1, S2, C2, P2} + +Each allocable resource has an ibm,associativity property. The LOPAPR +specification allows multiple lists to be present in this property, +considering that the same resource can have multiple connections to the +platform. + +Relative Performance Distance and ibm,associativity-reference-points +-------------------------------------------------------------------- + +The ibm,associativity-reference-points property is an array that is used +to define the relevant performance/distance related boundaries, defining +the NUMA levels for the platform. + +The definition of its elements also varies with the value of bit 0 of byte 5 +of the ibm,architecture-vec-5 property. The format with bit 0 equal to zero +is also deprecated. With the current format, each integer of the +ibm,associativity-reference-points represents an 1 based ordinal index (i.e. +the first element is 1) of the ibm,associativity array. The first +boundary is the most significant to application performance, followed by +less significant boundaries. Allocated resources that belongs to the +same performance boundaries are expected to have relative NUMA distance +that matches the relevancy of the boundary itself. Resources that belongs +to the same first boundary will have the shortest distance from each +other. Subsequent boundaries represents greater distances and degraded +performance. + +Using the previous example, the following setting reference points defines +three NUMA levels: + +* ibm,associativity-reference-points = {0x3, 0x2, 0x1} + +The first NUMA level (0x3) is interpreted as the third element of each +ibm,associativity array, the second level is the second element and +the third level is the first element. Let's also consider that elements +belonging to the first NUMA level have distance equal to 10 from each +other, and each NUMA level doubles the distance from the previous. This +means that the second would be 20 and the third level 40. For the P1 and +P2 processors, we would have the following NUMA levels: + +:: + + * ibm,associativity-reference-points = {0x3, 0x2, 0x1} + + * P1: associativity{MOD1, S1, C1, P1} + + First NUMA level (0x3) => associativity[2] = C1 + Second NUMA level (0x2) => associativity[1] = S1 + Third NUMA level (0x1) => associativity[0] = MOD1 + + * P2: associativity{MOD1, S2, C2, P2} + + First NUMA level (0x3) => associativity[2] = C2 + Second NUMA level (0x2) => associativity[1] = S2 + Third NUMA level (0x1) => associativity[0] = MOD1 + + P1 and P2 have the same third NUMA level, MOD1: Distance between them = 40 + +Changing the ibm,associativity-reference-points array changes the performance +distance attributes for the same associativity arrays, as the following +example illustrates: + +:: + + * ibm,associativity-reference-points = {0x2} + + * P1: associativity{MOD1, S1, C1, P1} + + First NUMA level (0x2) => associativity[1] = S1 + + * P2: associativity{MOD1, S2, C2, P2} + + First NUMA level (0x2) => associativity[1] = S2 + + P1 and P2 does not have a common performance boundary. Since this is a one level + NUMA configuration, distance between them is one boundary above the first + level, 20. + + +In a hypothetical platform where all resources inside the same hardware module +is considered to be on the same performance boundary: + +:: + + * ibm,associativity-reference-points = {0x1} + + * P1: associativity{MOD1, S1, C1, P1} + + First NUMA level (0x1) => associativity[0] = MOD0 + + * P2: associativity{MOD1, S2, C2, P2} + + First NUMA level (0x1) => associativity[0] = MOD0 + + P1 and P2 belongs to the same first order boundary. The distance between then + is 10. + + +How the pseries Linux guest calculates NUMA distances +===================================================== + +Another key difference between ACPI SLIT and the LOPAPR regarding NUMA is +how the distances are expressed. The SLIT table provides the NUMA distance +value between the relevant resources. LOPAPR does not provide a standard +way to calculate it. We have the ibm,associativity for each resource, which +provides a common-performance hierarchy, and the ibm,associativity-reference-points +array that tells which level of associativity is considered to be relevant +or not. + +The result is that each OS is free to implement and to interpret the distance +as it sees fit. For the pseries Linux guest, each level of NUMA duplicates +the distance of the previous level, and the maximum amount of levels is +limited to MAX_DISTANCE_REF_POINTS = 4 (from arch/powerpc/mm/numa.c in the +kernel tree). This results in the following distances: + +* both resources in the first NUMA level: 10 +* resources one NUMA level apart: 20 +* resources two NUMA levels apart: 40 +* resources three NUMA levels apart: 80 +* resources four NUMA levels apart: 160 + + +Consequences for QEMU NUMA tuning +--------------------------------- + +The way the pseries Linux guest calculates NUMA distances has a direct effect +on what QEMU users can expect when doing NUMA tuning. As of QEMU 5.1, this is +the default ibm,associativity-reference-points being used in the pseries +machine: + +ibm,associativity-reference-points = {0x4, 0x4, 0x2} + +The first and second level are equal, 0x4, and a third one was added in +commit a6030d7e0b35 exclusively for NVLink GPUs support. This means that +regardless of how the ibm,associativity properties are being created in +the device tree, the pseries Linux guest will only recognize three scenarios +as far as NUMA distance goes: + +* if the resources belongs to the same first NUMA level = 10 +* second level is skipped since it's equal to the first +* all resources that aren't a NVLink GPU, it is guaranteed that they will belong + to the same third NUMA level, having distance = 40 +* for NVLink GPUs, distance = 80 from everything else + +In short, we can summarize the NUMA distances seem in pseries Linux guests, using +QEMU up to 5.1, as follows: + +* local distance, i.e. the distance of the resource to its own NUMA node: 10 +* if it's a NVLink GPU device, distance: 80 +* every other resource, distance: 40 + +This also means that user input in QEMU command line does not change the +NUMA distancing inside the guest for the pseries machine. diff --git a/docs/specs/ppc-spapr-xive.rst b/docs/specs/ppc-spapr-xive.rst index 6159bc6eed..7144347560 100644 --- a/docs/specs/ppc-spapr-xive.rst +++ b/docs/specs/ppc-spapr-xive.rst @@ -61,6 +61,11 @@ depend on the XIVE KVM capability of the host. On older kernels without XIVE KVM support, QEMU will use the emulated XIVE device as a fallback and on newer kernels (>=5.2), the KVM XIVE device. +XIVE native exploitation mode is not supported for KVM nested guests, +VMs running under a L1 hypervisor (KVM on pSeries). In that case, the +hypervisor will not advertise the KVM capability and QEMU will use the +emulated XIVE device, same as for older versions of KVM. + As a final refinement, the user can also switch the use of the KVM device with the machine option ``kernel_irqchip``. @@ -121,6 +126,9 @@ xics XICS KVM XICS emul. XICS KVM (1) QEMU warns with ``warning: kernel_irqchip requested but unavailable: IRQ_XIVE capability must be present for KVM`` + In some cases (old host kernels or KVM nested guests), one may hit a + QEMU/KVM incompatibility due to device destruction in reset. QEMU fails + with ``KVM is incompatible with ic-mode=dual,kernel-irqchip=on`` (2) QEMU fails with ``kernel_irqchip requested but unavailable: IRQ_XIVE capability must be present for KVM`` @@ -143,7 +151,7 @@ xics XICS KVM XICS emul. XICS KVM mode (XICS), either don't set the ic-mode machine property or try ic-mode=xics or ic-mode=dual`` (4) QEMU/KVM incompatibility due to device destruction in reset. QEMU fails - with ``KVM is too old to support ic-mode=dual,kernel-irqchip=on`` + with ``KVM is incompatible with ic-mode=dual,kernel-irqchip=on`` XIVE Device tree properties diff --git a/docs/system/arm/xlnx-versal-virt.rst b/docs/system/arm/xlnx-versal-virt.rst new file mode 100644 index 0000000000..2602d0f995 --- /dev/null +++ b/docs/system/arm/xlnx-versal-virt.rst @@ -0,0 +1,176 @@ +Xilinx Versal Virt (``xlnx-versal-virt``) +========================================= + +Xilinx Versal is a family of heterogeneous multi-core SoCs +(System on Chip) that combine traditional hardened CPUs and I/O +peripherals in a Processing System (PS) with runtime programmable +FPGA logic (PL) and an Artificial Intelligence Engine (AIE). + +More details here: +https://www.xilinx.com/products/silicon-devices/acap/versal.html + +The family of Versal SoCs share a single architecture but come in +different parts with different speed grades, amounts of PL and +other differences. + +The Xilinx Versal Virt board in QEMU is a model of a virtual board +(does not exist in reality) with a virtual Versal SoC without I/O +limitations. Currently, we support the following cores and devices: + +Implemented CPU cores: + +- 2 ACPUs (ARM Cortex-A72) + +Implemented devices: + +- Interrupt controller (ARM GICv3) +- 2 UARTs (ARM PL011) +- An RTC (Versal built-in) +- 2 GEMs (Cadence MACB Ethernet MACs) +- 8 ADMA (Xilinx zDMA) channels +- 2 SD Controllers +- OCM (256KB of On Chip Memory) +- DDR memory + +QEMU does not yet model any other devices, including the PL and the AI Engine. + +Other differences between the hardware and the QEMU model: + +- QEMU allows the amount of DDR memory provided to be specified with the + ``-m`` argument. If a DTB is provided on the command line then QEMU will + edit it to include suitable entries describing the Versal DDR memory ranges. + +- QEMU provides 8 virtio-mmio virtio transports; these start at + address ``0xa0000000`` and have IRQs from 111 and upwards. + +Running +""""""" +If the user provides an Operating System to be loaded, we expect users +to use the ``-kernel`` command line option. + +Users can load firmware or boot-loaders with the ``-device loader`` options. + +When loading an OS, QEMU generates a DTB and selects an appropriate address +where it gets loaded. This DTB will be passed to the kernel in register x0. + +If there's no ``-kernel`` option, we generate a DTB and place it at 0x1000 +for boot-loaders or firmware to pick it up. + +If users want to provide their own DTB, they can use the ``-dtb`` option. +These DTBs will have their memory nodes modified to match QEMU's +selected ram_size option before they get passed to the kernel or FW. + +When loading an OS, we turn on QEMU's PSCI implementation with SMC +as the PSCI conduit. When there's no ``-kernel`` option, we assume the user +provides EL3 firmware to handle PSCI. + +A few examples: + +Direct Linux boot of a generic ARM64 upstream Linux kernel: + +.. code-block:: bash + + $ qemu-system-aarch64 -M xlnx-versal-virt -m 2G \ + -serial mon:stdio -display none \ + -kernel arch/arm64/boot/Image \ + -nic user -nic user \ + -device virtio-rng-device,bus=virtio-mmio-bus.0 \ + -drive if=none,index=0,file=hd0.qcow2,id=hd0,snapshot \ + -drive file=qemu_sd.qcow2,if=sd,index=0,snapshot \ + -device virtio-blk-device,drive=hd0 -append root=/dev/vda + +Direct Linux boot of PetaLinux 2019.2: + +.. code-block:: bash + + $ qemu-system-aarch64 -M xlnx-versal-virt -m 2G \ + -serial mon:stdio -display none \ + -kernel petalinux-v2019.2/Image \ + -append "rdinit=/sbin/init console=ttyAMA0,115200n8 earlycon=pl011,mmio,0xFF000000,115200n8" \ + -net nic,model=cadence_gem,netdev=net0 -netdev user,id=net0 \ + -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \ + -object rng-random,filename=/dev/urandom,id=rng0 + +Boot PetaLinux 2019.2 via ARM Trusted Firmware (2018.3 because the 2019.2 +version of ATF tries to configure the CCI which we don't model) and U-boot: + +.. code-block:: bash + + $ qemu-system-aarch64 -M xlnx-versal-virt -m 2G \ + -serial stdio -display none \ + -device loader,file=petalinux-v2018.3/bl31.elf,cpu-num=0 \ + -device loader,file=petalinux-v2019.2/u-boot.elf \ + -device loader,addr=0x20000000,file=petalinux-v2019.2/Image \ + -nic user -nic user \ + -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \ + -object rng-random,filename=/dev/urandom,id=rng0 + +Run the following at the U-Boot prompt: + +.. code-block:: bash + + Versal> + fdt addr $fdtcontroladdr + fdt move $fdtcontroladdr 0x40000000 + fdt set /timer clock-frequency <0x3dfd240> + setenv bootargs "rdinit=/sbin/init maxcpus=1 console=ttyAMA0,115200n8 earlycon=pl011,mmio,0xFF000000,115200n8" + booti 20000000 - 40000000 + fdt addr $fdtcontroladdr + +Boot Linux as DOM0 on Xen via U-Boot: + +.. code-block:: bash + + $ qemu-system-aarch64 -M xlnx-versal-virt -m 4G \ + -serial stdio -display none \ + -device loader,file=petalinux-v2019.2/u-boot.elf,cpu-num=0 \ + -device loader,addr=0x30000000,file=linux/2018-04-24/xen \ + -device loader,addr=0x40000000,file=petalinux-v2019.2/Image \ + -nic user -nic user \ + -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \ + -object rng-random,filename=/dev/urandom,id=rng0 + +Run the following at the U-Boot prompt: + +.. code-block:: bash + + Versal> + fdt addr $fdtcontroladdr + fdt move $fdtcontroladdr 0x20000000 + fdt set /timer clock-frequency <0x3dfd240> + fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=/uart@ff000000 dom0_mem=640M bootscrub=0 maxcpus=1 timer_slop=0" + fdt set /chosen xen,dom0-bootargs "rdinit=/sbin/init clk_ignore_unused console=hvc0 maxcpus=1" + fdt mknode /chosen dom0 + fdt set /chosen/dom0 compatible "xen,multiboot-module" + fdt set /chosen/dom0 reg <0x00000000 0x40000000 0x0 0x03100000> + booti 30000000 - 20000000 + +Boot Linux as Dom0 on Xen via ARM Trusted Firmware and U-Boot: + +.. code-block:: bash + + $ qemu-system-aarch64 -M xlnx-versal-virt -m 4G \ + -serial stdio -display none \ + -device loader,file=petalinux-v2018.3/bl31.elf,cpu-num=0 \ + -device loader,file=petalinux-v2019.2/u-boot.elf \ + -device loader,addr=0x30000000,file=linux/2018-04-24/xen \ + -device loader,addr=0x40000000,file=petalinux-v2019.2/Image \ + -nic user -nic user \ + -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \ + -object rng-random,filename=/dev/urandom,id=rng0 + +Run the following at the U-Boot prompt: + +.. code-block:: bash + + Versal> + fdt addr $fdtcontroladdr + fdt move $fdtcontroladdr 0x20000000 + fdt set /timer clock-frequency <0x3dfd240> + fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=/uart@ff000000 dom0_mem=640M bootscrub=0 maxcpus=1 timer_slop=0" + fdt set /chosen xen,dom0-bootargs "rdinit=/sbin/init clk_ignore_unused console=hvc0 maxcpus=1" + fdt mknode /chosen dom0 + fdt set /chosen/dom0 compatible "xen,multiboot-module" + fdt set /chosen/dom0 reg <0x00000000 0x40000000 0x0 0x03100000> + booti 30000000 - 20000000 + diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst index 4c5b0e4aab..afdb37e738 100644 --- a/docs/system/target-arm.rst +++ b/docs/system/target-arm.rst @@ -93,6 +93,7 @@ undocumented; you can get a complete list by running arm/sx1 arm/stellaris arm/virt + arm/xlnx-versal-virt Arm CPU features ================ diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 2ffd96ade9..7bb994bbf2 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -314,8 +314,8 @@ static V9fsFidState *alloc_fid(V9fsState *s, int32_t fid) f->next = s->fid_list; s->fid_list = f; - v9fs_readdir_init(&f->fs.dir); - v9fs_readdir_init(&f->fs_reclaim.dir); + v9fs_readdir_init(s->proto_version, &f->fs.dir); + v9fs_readdir_init(s->proto_version, &f->fs_reclaim.dir); return f; } @@ -972,30 +972,6 @@ static int coroutine_fn fid_to_qid(V9fsPDU *pdu, V9fsFidState *fidp, return 0; } -static int coroutine_fn dirent_to_qid(V9fsPDU *pdu, V9fsFidState *fidp, - struct dirent *dent, V9fsQID *qidp) -{ - struct stat stbuf; - V9fsPath path; - int err; - - v9fs_path_init(&path); - - err = v9fs_co_name_to_path(pdu, &fidp->path, dent->d_name, &path); - if (err < 0) { - goto out; - } - err = v9fs_co_lstat(pdu, &path, &stbuf); - if (err < 0) { - goto out; - } - err = stat_to_qid(pdu, &stbuf, qidp); - -out: - v9fs_path_free(&path); - return err; -} - V9fsPDU *pdu_alloc(V9fsState *s) { V9fsPDU *pdu = NULL; @@ -2252,7 +2228,14 @@ static void coroutine_fn v9fs_read(void *opaque) goto out_nofid; } if (fidp->fid_type == P9_FID_DIR) { - + if (s->proto_version != V9FS_PROTO_2000U) { + warn_report_once( + "9p: bad client: T_read request on directory only expected " + "with 9P2000.u protocol version" + ); + err = -EOPNOTSUPP; + goto out; + } if (off == 0) { v9fs_co_rewinddir(pdu, fidp); } @@ -2313,7 +2296,13 @@ out_nofid: pdu_complete(pdu, err); } -static size_t v9fs_readdir_data_size(V9fsString *name) +/** + * Returns size required in Rreaddir response for the passed dirent @p name. + * + * @param name - directory entry's name (i.e. file name, directory name) + * @returns required size in bytes + */ +size_t v9fs_readdir_response_size(V9fsString *name) { /* * Size of each dirent on the wire: size of qid (13) + size of offset (8) @@ -2322,62 +2311,74 @@ static size_t v9fs_readdir_data_size(V9fsString *name) return 24 + v9fs_string_size(name); } +static void v9fs_free_dirents(struct V9fsDirEnt *e) +{ + struct V9fsDirEnt *next = NULL; + + for (; e; e = next) { + next = e->next; + g_free(e->dent); + g_free(e->st); + g_free(e); + } +} + static int coroutine_fn v9fs_do_readdir(V9fsPDU *pdu, V9fsFidState *fidp, - int32_t max_count) + off_t offset, int32_t max_count) { size_t size; V9fsQID qid; V9fsString name; int len, err = 0; int32_t count = 0; - off_t saved_dir_pos; struct dirent *dent; + struct stat *st; + struct V9fsDirEnt *entries = NULL; - /* save the directory position */ - saved_dir_pos = v9fs_co_telldir(pdu, fidp); - if (saved_dir_pos < 0) { - return saved_dir_pos; - } - - while (1) { - v9fs_readdir_lock(&fidp->fs.dir); + /* + * inode remapping requires the device id, which in turn might be + * different for different directory entries, so if inode remapping is + * enabled we have to make a full stat for each directory entry + */ + const bool dostat = pdu->s->ctx.export_flags & V9FS_REMAP_INODES; - err = v9fs_co_readdir(pdu, fidp, &dent); - if (err || !dent) { - break; - } - v9fs_string_init(&name); - v9fs_string_sprintf(&name, "%s", dent->d_name); - if ((count + v9fs_readdir_data_size(&name)) > max_count) { - v9fs_readdir_unlock(&fidp->fs.dir); + /* + * Fetch all required directory entries altogether on a background IO + * thread from fs driver. We don't want to do that for each entry + * individually, because hopping between threads (this main IO thread + * and background IO driver thread) would sum up to huge latencies. + */ + count = v9fs_co_readdir_many(pdu, fidp, &entries, offset, max_count, + dostat); + if (count < 0) { + err = count; + count = 0; + goto out; + } + count = 0; - /* Ran out of buffer. Set dir back to old position and return */ - v9fs_co_seekdir(pdu, fidp, saved_dir_pos); - v9fs_string_free(&name); - return count; - } + for (struct V9fsDirEnt *e = entries; e; e = e->next) { + dent = e->dent; if (pdu->s->ctx.export_flags & V9FS_REMAP_INODES) { - /* - * dirent_to_qid() implies expensive stat call for each entry, - * we must do that here though since inode remapping requires - * the device id, which in turn might be different for - * different entries; we cannot make any assumption to avoid - * that here. - */ - err = dirent_to_qid(pdu, fidp, dent, &qid); + st = e->st; + /* e->st should never be NULL, but just to be sure */ + if (!st) { + err = -1; + break; + } + + /* remap inode */ + err = stat_to_qid(pdu, st, &qid); if (err < 0) { - v9fs_readdir_unlock(&fidp->fs.dir); - v9fs_co_seekdir(pdu, fidp, saved_dir_pos); - v9fs_string_free(&name); - return err; + break; } } else { /* * Fill up just the path field of qid because the client uses * only that. To fill the entire qid structure we will have * to stat each dirent found, which is expensive. For the - * latter reason we don't call dirent_to_qid() here. Only drawback + * latter reason we don't call stat_to_qid() here. Only drawback * is that no multi-device export detection of stat_to_qid() * would be done and provided as error to the user here. But * user would get that error anyway when accessing those @@ -2390,25 +2391,26 @@ static int coroutine_fn v9fs_do_readdir(V9fsPDU *pdu, V9fsFidState *fidp, qid.version = 0; } + v9fs_string_init(&name); + v9fs_string_sprintf(&name, "%s", dent->d_name); + /* 11 = 7 + 4 (7 = start offset, 4 = space for storing count) */ len = pdu_marshal(pdu, 11 + count, "Qqbs", &qid, dent->d_off, dent->d_type, &name); - v9fs_readdir_unlock(&fidp->fs.dir); + v9fs_string_free(&name); if (len < 0) { - v9fs_co_seekdir(pdu, fidp, saved_dir_pos); - v9fs_string_free(&name); - return len; + err = len; + break; } + count += len; - v9fs_string_free(&name); - saved_dir_pos = dent->d_off; } - v9fs_readdir_unlock(&fidp->fs.dir); - +out: + v9fs_free_dirents(entries); if (err < 0) { return err; } @@ -2451,12 +2453,15 @@ static void coroutine_fn v9fs_readdir(void *opaque) retval = -EINVAL; goto out; } - if (initial_offset == 0) { - v9fs_co_rewinddir(pdu, fidp); - } else { - v9fs_co_seekdir(pdu, fidp, initial_offset); + if (s->proto_version != V9FS_PROTO_2000L) { + warn_report_once( + "9p: bad client: T_readdir request only expected with 9P2000.L " + "protocol version" + ); + retval = -EOPNOTSUPP; + goto out; } - count = v9fs_do_readdir(pdu, fidp, max_count); + count = v9fs_do_readdir(pdu, fidp, (off_t) initial_offset, max_count); if (count < 0) { retval = count; goto out; diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h index ee2271663c..3dd1b50b1a 100644 --- a/hw/9pfs/9p.h +++ b/hw/9pfs/9p.h @@ -197,24 +197,63 @@ typedef struct V9fsXattr typedef struct V9fsDir { DIR *stream; - CoMutex readdir_mutex; + P9ProtoVersion proto_version; + /* readdir mutex type used for 9P2000.u protocol variant */ + CoMutex readdir_mutex_u; + /* readdir mutex type used for 9P2000.L protocol variant */ + QemuMutex readdir_mutex_L; } V9fsDir; static inline void v9fs_readdir_lock(V9fsDir *dir) { - qemu_co_mutex_lock(&dir->readdir_mutex); + if (dir->proto_version == V9FS_PROTO_2000U) { + qemu_co_mutex_lock(&dir->readdir_mutex_u); + } else { + qemu_mutex_lock(&dir->readdir_mutex_L); + } } static inline void v9fs_readdir_unlock(V9fsDir *dir) { - qemu_co_mutex_unlock(&dir->readdir_mutex); + if (dir->proto_version == V9FS_PROTO_2000U) { + qemu_co_mutex_unlock(&dir->readdir_mutex_u); + } else { + qemu_mutex_unlock(&dir->readdir_mutex_L); + } } -static inline void v9fs_readdir_init(V9fsDir *dir) +static inline void v9fs_readdir_init(P9ProtoVersion proto_version, V9fsDir *dir) { - qemu_co_mutex_init(&dir->readdir_mutex); + dir->proto_version = proto_version; + if (proto_version == V9FS_PROTO_2000U) { + qemu_co_mutex_init(&dir->readdir_mutex_u); + } else { + qemu_mutex_init(&dir->readdir_mutex_L); + } } +/** + * Type for 9p fs drivers' (a.k.a. 9p backends) result of readdir requests, + * which is a chained list of directory entries. + */ +typedef struct V9fsDirEnt { + /* mandatory (must not be NULL) information for all readdir requests */ + struct dirent *dent; + /* + * optional (may be NULL): A full stat of each directory entry is just + * done if explicitly told to fs driver. + */ + struct stat *st; + /* + * instead of an array, directory entries are always returned as + * chained list, that's because the amount of entries retrieved by fs + * drivers is dependent on the individual entries' name (since response + * messages are size limited), so the final amount cannot be estimated + * before hand + */ + struct V9fsDirEnt *next; +} V9fsDirEnt; + /* * Filled by fs driver on open and other * calls. @@ -419,6 +458,7 @@ void v9fs_path_init(V9fsPath *path); void v9fs_path_free(V9fsPath *path); void v9fs_path_sprintf(V9fsPath *path, const char *fmt, ...); void v9fs_path_copy(V9fsPath *dst, const V9fsPath *src); +size_t v9fs_readdir_response_size(V9fsString *name); int v9fs_name_to_path(V9fsState *s, V9fsPath *dirpath, const char *name, V9fsPath *path); int v9fs_device_realize_common(V9fsState *s, const V9fsTransport *t, diff --git a/hw/9pfs/codir.c b/hw/9pfs/codir.c index 73f9a751e1..1f70a58df5 100644 --- a/hw/9pfs/codir.c +++ b/hw/9pfs/codir.c @@ -18,28 +18,209 @@ #include "qemu/main-loop.h" #include "coth.h" +/* + * Intended to be called from bottom-half (e.g. background I/O thread) + * context. + */ +static int do_readdir(V9fsPDU *pdu, V9fsFidState *fidp, struct dirent **dent) +{ + int err = 0; + V9fsState *s = pdu->s; + struct dirent *entry; + + errno = 0; + entry = s->ops->readdir(&s->ctx, &fidp->fs); + if (!entry && errno) { + *dent = NULL; + err = -errno; + } else { + *dent = entry; + } + return err; +} + +/* + * TODO: This will be removed for performance reasons. + * Use v9fs_co_readdir_many() instead. + */ int coroutine_fn v9fs_co_readdir(V9fsPDU *pdu, V9fsFidState *fidp, struct dirent **dent) { int err; - V9fsState *s = pdu->s; if (v9fs_request_cancelled(pdu)) { return -EINTR; } - v9fs_co_run_in_worker( - { - struct dirent *entry; + v9fs_co_run_in_worker({ + err = do_readdir(pdu, fidp, dent); + }); + return err; +} + +/* + * This is solely executed on a background IO thread. + * + * See v9fs_co_readdir_many() (as its only user) below for details. + */ +static int do_readdir_many(V9fsPDU *pdu, V9fsFidState *fidp, + struct V9fsDirEnt **entries, off_t offset, + int32_t maxsize, bool dostat) +{ + V9fsState *s = pdu->s; + V9fsString name; + int len, err = 0; + int32_t size = 0; + off_t saved_dir_pos; + struct dirent *dent; + struct V9fsDirEnt *e = NULL; + V9fsPath path; + struct stat stbuf; + + *entries = NULL; + v9fs_path_init(&path); + + /* + * TODO: Here should be a warn_report_once() if lock failed. + * + * With a good 9p client we should not get into concurrency here, + * because a good client would not use the same fid for concurrent + * requests. We do the lock here for safety reasons though. However + * the client would then suffer performance issues, so better log that + * issue here. + */ + v9fs_readdir_lock(&fidp->fs.dir); + + /* seek directory to requested initial position */ + if (offset == 0) { + s->ops->rewinddir(&s->ctx, &fidp->fs); + } else { + s->ops->seekdir(&s->ctx, &fidp->fs, offset); + } + + /* save the directory position */ + saved_dir_pos = s->ops->telldir(&s->ctx, &fidp->fs); + if (saved_dir_pos < 0) { + err = saved_dir_pos; + goto out; + } + + while (true) { + /* interrupt loop if request was cancelled by a Tflush request */ + if (v9fs_request_cancelled(pdu)) { + err = -EINTR; + break; + } + + /* get directory entry from fs driver */ + err = do_readdir(pdu, fidp, &dent); + if (err || !dent) { + break; + } + + /* + * stop this loop as soon as it would exceed the allowed maximum + * response message size for the directory entries collected so far, + * because anything beyond that size would need to be discarded by + * 9p controller (main thread / top half) anyway + */ + v9fs_string_init(&name); + v9fs_string_sprintf(&name, "%s", dent->d_name); + len = v9fs_readdir_response_size(&name); + v9fs_string_free(&name); + if (size + len > maxsize) { + /* this is not an error case actually */ + break; + } + + /* append next node to result chain */ + if (!e) { + *entries = e = g_malloc0(sizeof(V9fsDirEnt)); + } else { + e = e->next = g_malloc0(sizeof(V9fsDirEnt)); + } + e->dent = g_malloc0(sizeof(struct dirent)); + memcpy(e->dent, dent, sizeof(struct dirent)); - errno = 0; - entry = s->ops->readdir(&s->ctx, &fidp->fs); - if (!entry && errno) { + /* perform a full stat() for directory entry if requested by caller */ + if (dostat) { + err = s->ops->name_to_path( + &s->ctx, &fidp->path, dent->d_name, &path + ); + if (err < 0) { err = -errno; - } else { - *dent = entry; - err = 0; + break; } - }); + + err = s->ops->lstat(&s->ctx, &path, &stbuf); + if (err < 0) { + err = -errno; + break; + } + + e->st = g_malloc0(sizeof(struct stat)); + memcpy(e->st, &stbuf, sizeof(struct stat)); + } + + size += len; + saved_dir_pos = dent->d_off; + } + + /* restore (last) saved position */ + s->ops->seekdir(&s->ctx, &fidp->fs, saved_dir_pos); + +out: + v9fs_readdir_unlock(&fidp->fs.dir); + v9fs_path_free(&path); + if (err < 0) { + return err; + } + return size; +} + +/** + * @brief Reads multiple directory entries in one rush. + * + * Retrieves the requested (max. amount of) directory entries from the fs + * driver. This function must only be called by the main IO thread (top half). + * Internally this function call will be dispatched to a background IO thread + * (bottom half) where it is eventually executed by the fs driver. + * + * @discussion Acquiring multiple directory entries in one rush from the fs + * driver, instead of retrieving each directory entry individually, is very + * beneficial from performance point of view. Because for every fs driver + * request latency is added, which in practice could lead to overall + * latencies of several hundred ms for reading all entries (of just a single + * directory) if every directory entry was individually requested from fs + * driver. + * + * @note You must @b ALWAYS call @c v9fs_free_dirents(entries) after calling + * v9fs_co_readdir_many(), both on success and on error cases of this + * function, to avoid memory leaks once @p entries are no longer needed. + * + * @param pdu - the causing 9p (T_readdir) client request + * @param fidp - already opened directory where readdir shall be performed on + * @param entries - output for directory entries (must not be NULL) + * @param offset - initial position inside the directory the function shall + * seek to before retrieving the directory entries + * @param maxsize - maximum result message body size (in bytes) + * @param dostat - whether a stat() should be performed and returned for + * each directory entry + * @returns resulting response message body size (in bytes) on success, + * negative error code otherwise + */ +int coroutine_fn v9fs_co_readdir_many(V9fsPDU *pdu, V9fsFidState *fidp, + struct V9fsDirEnt **entries, + off_t offset, int32_t maxsize, + bool dostat) +{ + int err = 0; + + if (v9fs_request_cancelled(pdu)) { + return -EINTR; + } + v9fs_co_run_in_worker({ + err = do_readdir_many(pdu, fidp, entries, offset, maxsize, dostat); + }); return err; } diff --git a/hw/9pfs/coth.h b/hw/9pfs/coth.h index c2cdc7a9ea..c51289903d 100644 --- a/hw/9pfs/coth.h +++ b/hw/9pfs/coth.h @@ -19,7 +19,7 @@ #include "qemu/coroutine.h" #include "9p.h" -/* +/** * we want to use bottom half because we want to make sure the below * sequence of events. * @@ -28,6 +28,16 @@ * 3. Enter the coroutine in the worker thread. * we cannot swap step 1 and 2, because that would imply worker thread * can enter coroutine while step1 is still running + * + * @b PERFORMANCE @b CONSIDERATIONS: As a rule of thumb, keep in mind + * that hopping between threads adds @b latency! So when handling a + * 9pfs request, avoid calling v9fs_co_run_in_worker() too often, because + * this might otherwise sum up to a significant, huge overall latency for + * providing the response for just a single request. For that reason it + * is highly recommended to fetch all data from fs driver with a single + * fs driver request on a background I/O thread (bottom half) in one rush + * first and then eventually assembling the final response from that data + * on main I/O thread (top half). */ #define v9fs_co_run_in_worker(code_block) \ do { \ @@ -49,6 +59,9 @@ void co_run_in_worker_bh(void *); int coroutine_fn v9fs_co_readlink(V9fsPDU *, V9fsPath *, V9fsString *); int coroutine_fn v9fs_co_readdir(V9fsPDU *, V9fsFidState *, struct dirent **); +int coroutine_fn v9fs_co_readdir_many(V9fsPDU *, V9fsFidState *, + struct V9fsDirEnt **, off_t, int32_t, + bool); off_t coroutine_fn v9fs_co_telldir(V9fsPDU *, V9fsFidState *); void coroutine_fn v9fs_co_seekdir(V9fsPDU *, V9fsFidState *, off_t); void coroutine_fn v9fs_co_rewinddir(V9fsPDU *, V9fsFidState *); diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index f304c2b4f0..fe7c2b9d4b 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -25,6 +25,7 @@ #include "hw/char/pl011.h" #include "hw/hw.h" #include "hw/irq.h" +#include "hw/sd/sd.h" #define TYPE_INTEGRATOR_CM "integrator_core" #define INTEGRATOR_CM(obj) \ @@ -595,6 +596,7 @@ static void integratorcp_init(MachineState *machine) MemoryRegion *ram_alias = g_new(MemoryRegion, 1); qemu_irq pic[32]; DeviceState *dev, *sic, *icp; + DriveInfo *dinfo; int i; cpuobj = object_new(machine->cpu_type); @@ -645,10 +647,21 @@ static void integratorcp_init(MachineState *machine) sysbus_create_simple(TYPE_INTEGRATOR_DEBUG, 0x1a000000, 0); dev = sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL); - qdev_connect_gpio_out(dev, 0, + qdev_connect_gpio_out_named(dev, "card-read-only", 0, qdev_get_gpio_in_named(icp, ICP_GPIO_MMC_WPROT, 0)); - qdev_connect_gpio_out(dev, 1, + qdev_connect_gpio_out_named(dev, "card-inserted", 0, qdev_get_gpio_in_named(icp, ICP_GPIO_MMC_CARDIN, 0)); + dinfo = drive_get_next(IF_SD); + if (dinfo) { + DeviceState *card; + + card = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + } + sysbus_create_varargs("pl041", 0x1d000000, pic[25], NULL); if (nd_table[0].used) diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index 6203c4cfe0..20fa201dd5 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -22,6 +22,7 @@ #include "hw/irq.h" #include "hw/qdev-properties.h" #include "hw/ssi/ssi.h" +#include "hw/sd/sd.h" #include "chardev/char-fe.h" #include "sysemu/blockdev.h" #include "sysemu/qtest.h" @@ -2136,15 +2137,24 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space, s->gpio = pxa2xx_gpio_init(0x40e00000, s->cpu, s->pic, 121); - dinfo = drive_get(IF_SD, 0, 0); - if (!dinfo && !qtest_enabled()) { - warn_report("missing SecureDigital device"); - } s->mmc = pxa2xx_mmci_init(address_space, 0x41100000, - dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, qdev_get_gpio_in(s->pic, PXA2XX_PIC_MMC), qdev_get_gpio_in(s->dma, PXA2XX_RX_RQ_MMCI), qdev_get_gpio_in(s->dma, PXA2XX_TX_RQ_MMCI)); + dinfo = drive_get(IF_SD, 0, 0); + if (dinfo) { + DeviceState *carddev; + + /* Create and plug in the sd card */ + carddev = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(carddev, "drive", + blk_by_legacy_dinfo(dinfo), &error_fatal); + qdev_realize_and_unref(carddev, qdev_get_child_bus(DEVICE(s->mmc), + "sd-bus"), + &error_fatal); + } else if (!qtest_enabled()) { + warn_report("missing SecureDigital device"); + } for (i = 0; pxa270_serial[i].io_base; i++) { if (serial_hd(i)) { @@ -2260,15 +2270,24 @@ PXA2xxState *pxa255_init(MemoryRegion *address_space, unsigned int sdram_size) s->gpio = pxa2xx_gpio_init(0x40e00000, s->cpu, s->pic, 85); - dinfo = drive_get(IF_SD, 0, 0); - if (!dinfo && !qtest_enabled()) { - warn_report("missing SecureDigital device"); - } s->mmc = pxa2xx_mmci_init(address_space, 0x41100000, - dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, qdev_get_gpio_in(s->pic, PXA2XX_PIC_MMC), qdev_get_gpio_in(s->dma, PXA2XX_RX_RQ_MMCI), qdev_get_gpio_in(s->dma, PXA2XX_TX_RQ_MMCI)); + dinfo = drive_get(IF_SD, 0, 0); + if (dinfo) { + DeviceState *carddev; + + /* Create and plug in the sd card */ + carddev = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(carddev, "drive", + blk_by_legacy_dinfo(dinfo), &error_fatal); + qdev_realize_and_unref(carddev, qdev_get_child_bus(DEVICE(s->mmc), + "sd-bus"), + &error_fatal); + } else if (!qtest_enabled()) { + warn_report("missing SecureDigital device"); + } for (i = 0; pxa255_serial[i].io_base; i++) { if (serial_hd(i)) { diff --git a/hw/arm/realview.c b/hw/arm/realview.c index c1ff172b13..5f1f36b15c 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -27,6 +27,7 @@ #include "hw/intc/realview_gic.h" #include "hw/irq.h" #include "hw/i2c/arm_sbcon_i2c.h" +#include "hw/sd/sd.h" #define SMP_BOOT_ADDR 0xe0000000 #define SMP_BOOTREG_ADDR 0x10000030 @@ -69,6 +70,7 @@ static void realview_init(MachineState *machine, qemu_irq mmc_irq[2]; PCIBus *pci_bus = NULL; NICInfo *nd; + DriveInfo *dinfo; I2CBus *i2c; int n; unsigned int smp_cpus = machine->smp.cpus; @@ -234,8 +236,18 @@ static void realview_init(MachineState *machine, mmc_irq[1] = qemu_irq_split( qdev_get_gpio_in(sysctl, ARM_SYSCTL_GPIO_MMC_CARDIN), qemu_irq_invert(qdev_get_gpio_in(gpio2, 0))); - qdev_connect_gpio_out(dev, 0, mmc_irq[0]); - qdev_connect_gpio_out(dev, 1, mmc_irq[1]); + qdev_connect_gpio_out_named(dev, "card-read-only", 0, mmc_irq[0]); + qdev_connect_gpio_out_named(dev, "card-inserted", 0, mmc_irq[1]); + dinfo = drive_get_next(IF_SD); + if (dinfo) { + DeviceState *card; + + card = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + } sysbus_create_simple("pl031", 0x10017000, pic[10]); diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index e13a5f4a7c..3838db1395 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -32,6 +32,91 @@ /* IOTLB Management */ +static guint smmu_iotlb_key_hash(gconstpointer v) +{ + SMMUIOTLBKey *key = (SMMUIOTLBKey *)v; + uint32_t a, b, c; + + /* Jenkins hash */ + a = b = c = JHASH_INITVAL + sizeof(*key); + a += key->asid + key->level + key->tg; + b += extract64(key->iova, 0, 32); + c += extract64(key->iova, 32, 32); + + __jhash_mix(a, b, c); + __jhash_final(a, b, c); + + return c; +} + +static gboolean smmu_iotlb_key_equal(gconstpointer v1, gconstpointer v2) +{ + SMMUIOTLBKey *k1 = (SMMUIOTLBKey *)v1, *k2 = (SMMUIOTLBKey *)v2; + + return (k1->asid == k2->asid) && (k1->iova == k2->iova) && + (k1->level == k2->level) && (k1->tg == k2->tg); +} + +SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint64_t iova, + uint8_t tg, uint8_t level) +{ + SMMUIOTLBKey key = {.asid = asid, .iova = iova, .tg = tg, .level = level}; + + return key; +} + +SMMUTLBEntry *smmu_iotlb_lookup(SMMUState *bs, SMMUTransCfg *cfg, + SMMUTransTableInfo *tt, hwaddr iova) +{ + uint8_t tg = (tt->granule_sz - 10) / 2; + uint8_t inputsize = 64 - tt->tsz; + uint8_t stride = tt->granule_sz - 3; + uint8_t level = 4 - (inputsize - 4) / stride; + SMMUTLBEntry *entry = NULL; + + while (level <= 3) { + uint64_t subpage_size = 1ULL << level_shift(level, tt->granule_sz); + uint64_t mask = subpage_size - 1; + SMMUIOTLBKey key; + + key = smmu_get_iotlb_key(cfg->asid, iova & ~mask, tg, level); + entry = g_hash_table_lookup(bs->iotlb, &key); + if (entry) { + break; + } + level++; + } + + if (entry) { + cfg->iotlb_hits++; + trace_smmu_iotlb_lookup_hit(cfg->asid, iova, + cfg->iotlb_hits, cfg->iotlb_misses, + 100 * cfg->iotlb_hits / + (cfg->iotlb_hits + cfg->iotlb_misses)); + } else { + cfg->iotlb_misses++; + trace_smmu_iotlb_lookup_miss(cfg->asid, iova, + cfg->iotlb_hits, cfg->iotlb_misses, + 100 * cfg->iotlb_hits / + (cfg->iotlb_hits + cfg->iotlb_misses)); + } + return entry; +} + +void smmu_iotlb_insert(SMMUState *bs, SMMUTransCfg *cfg, SMMUTLBEntry *new) +{ + SMMUIOTLBKey *key = g_new0(SMMUIOTLBKey, 1); + uint8_t tg = (new->granule - 10) / 2; + + if (g_hash_table_size(bs->iotlb) >= SMMU_IOTLB_MAX_SIZE) { + smmu_iotlb_inv_all(bs); + } + + *key = smmu_get_iotlb_key(cfg->asid, new->entry.iova, tg, new->level); + trace_smmu_iotlb_insert(cfg->asid, new->entry.iova, tg, new->level); + g_hash_table_insert(bs->iotlb, key, new); +} + inline void smmu_iotlb_inv_all(SMMUState *s) { trace_smmu_iotlb_inv_all(); @@ -44,15 +129,44 @@ static gboolean smmu_hash_remove_by_asid(gpointer key, gpointer value, uint16_t asid = *(uint16_t *)user_data; SMMUIOTLBKey *iotlb_key = (SMMUIOTLBKey *)key; - return iotlb_key->asid == asid; + return SMMU_IOTLB_ASID(*iotlb_key) == asid; } -inline void smmu_iotlb_inv_iova(SMMUState *s, uint16_t asid, dma_addr_t iova) +static gboolean smmu_hash_remove_by_asid_iova(gpointer key, gpointer value, + gpointer user_data) { - SMMUIOTLBKey key = {.asid = asid, .iova = iova}; + SMMUTLBEntry *iter = (SMMUTLBEntry *)value; + IOMMUTLBEntry *entry = &iter->entry; + SMMUIOTLBPageInvInfo *info = (SMMUIOTLBPageInvInfo *)user_data; + SMMUIOTLBKey iotlb_key = *(SMMUIOTLBKey *)key; - trace_smmu_iotlb_inv_iova(asid, iova); - g_hash_table_remove(s->iotlb, &key); + if (info->asid >= 0 && info->asid != SMMU_IOTLB_ASID(iotlb_key)) { + return false; + } + return ((info->iova & ~entry->addr_mask) == entry->iova) || + ((entry->iova & ~info->mask) == info->iova); +} + +inline void +smmu_iotlb_inv_iova(SMMUState *s, int asid, dma_addr_t iova, + uint8_t tg, uint64_t num_pages, uint8_t ttl) +{ + if (ttl && (num_pages == 1)) { + SMMUIOTLBKey key = smmu_get_iotlb_key(asid, iova, tg, ttl); + + g_hash_table_remove(s->iotlb, &key); + } else { + /* if tg is not set we use 4KB range invalidation */ + uint8_t granule = tg ? tg * 2 + 10 : 12; + + SMMUIOTLBPageInvInfo info = { + .asid = asid, .iova = iova, + .mask = (num_pages * 1 << granule) - 1}; + + g_hash_table_foreach_remove(s->iotlb, + smmu_hash_remove_by_asid_iova, + &info); + } } inline void smmu_iotlb_inv_asid(SMMUState *s, uint16_t asid) @@ -149,7 +263,7 @@ SMMUTransTableInfo *select_tt(SMMUTransCfg *cfg, dma_addr_t iova) * @cfg: translation config * @iova: iova to translate * @perm: access type - * @tlbe: IOMMUTLBEntry (out) + * @tlbe: SMMUTLBEntry (out) * @info: handle to an error info * * Return 0 on success, < 0 on error. In case of error, @info is filled @@ -159,7 +273,7 @@ SMMUTransTableInfo *select_tt(SMMUTransCfg *cfg, dma_addr_t iova) */ static int smmu_ptw_64(SMMUTransCfg *cfg, dma_addr_t iova, IOMMUAccessFlags perm, - IOMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) + SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) { dma_addr_t baseaddr, indexmask; int stage = cfg->stage; @@ -179,14 +293,11 @@ static int smmu_ptw_64(SMMUTransCfg *cfg, baseaddr = extract64(tt->ttb, 0, 48); baseaddr &= ~indexmask; - tlbe->iova = iova; - tlbe->addr_mask = (1 << granule_sz) - 1; - while (level <= 3) { uint64_t subpage_size = 1ULL << level_shift(level, granule_sz); uint64_t mask = subpage_size - 1; uint32_t offset = iova_level_offset(iova, inputsize, level, granule_sz); - uint64_t pte; + uint64_t pte, gpa; dma_addr_t pte_addr = baseaddr + offset * sizeof(pte); uint8_t ap; @@ -199,60 +310,50 @@ static int smmu_ptw_64(SMMUTransCfg *cfg, if (is_invalid_pte(pte) || is_reserved_pte(pte, level)) { trace_smmu_ptw_invalid_pte(stage, level, baseaddr, pte_addr, offset, pte); - info->type = SMMU_PTW_ERR_TRANSLATION; - goto error; + break; } - if (is_page_pte(pte, level)) { - uint64_t gpa = get_page_pte_address(pte, granule_sz); + if (is_table_pte(pte, level)) { + ap = PTE_APTABLE(pte); - ap = PTE_AP(pte); - if (is_permission_fault(ap, perm)) { + if (is_permission_fault(ap, perm) && !tt->had) { info->type = SMMU_PTW_ERR_PERMISSION; goto error; } - - tlbe->translated_addr = gpa + (iova & mask); - tlbe->perm = PTE_AP_TO_PERM(ap); + baseaddr = get_table_pte_address(pte, granule_sz); + level++; + continue; + } else if (is_page_pte(pte, level)) { + gpa = get_page_pte_address(pte, granule_sz); trace_smmu_ptw_page_pte(stage, level, iova, baseaddr, pte_addr, pte, gpa); - return 0; - } - if (is_block_pte(pte, level)) { + } else { uint64_t block_size; - hwaddr gpa = get_block_pte_address(pte, level, granule_sz, - &block_size); - - ap = PTE_AP(pte); - if (is_permission_fault(ap, perm)) { - info->type = SMMU_PTW_ERR_PERMISSION; - goto error; - } + gpa = get_block_pte_address(pte, level, granule_sz, + &block_size); trace_smmu_ptw_block_pte(stage, level, baseaddr, pte_addr, pte, iova, gpa, block_size >> 20); - - tlbe->translated_addr = gpa + (iova & mask); - tlbe->perm = PTE_AP_TO_PERM(ap); - return 0; } - - /* table pte */ - ap = PTE_APTABLE(pte); - + ap = PTE_AP(pte); if (is_permission_fault(ap, perm)) { info->type = SMMU_PTW_ERR_PERMISSION; goto error; } - baseaddr = get_table_pte_address(pte, granule_sz); - level++; - } + tlbe->entry.translated_addr = gpa; + tlbe->entry.iova = iova & ~mask; + tlbe->entry.addr_mask = mask; + tlbe->entry.perm = PTE_AP_TO_PERM(ap); + tlbe->level = level; + tlbe->granule = granule_sz; + return 0; + } info->type = SMMU_PTW_ERR_TRANSLATION; error: - tlbe->perm = IOMMU_NONE; + tlbe->entry.perm = IOMMU_NONE; return -EINVAL; } @@ -268,7 +369,7 @@ error: * return 0 on success */ inline int smmu_ptw(SMMUTransCfg *cfg, dma_addr_t iova, IOMMUAccessFlags perm, - IOMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) + SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info) { if (!cfg->aa64) { /* @@ -361,31 +462,6 @@ IOMMUMemoryRegion *smmu_iommu_mr(SMMUState *s, uint32_t sid) return NULL; } -static guint smmu_iotlb_key_hash(gconstpointer v) -{ - SMMUIOTLBKey *key = (SMMUIOTLBKey *)v; - uint32_t a, b, c; - - /* Jenkins hash */ - a = b = c = JHASH_INITVAL + sizeof(*key); - a += key->asid; - b += extract64(key->iova, 0, 32); - c += extract64(key->iova, 32, 32); - - __jhash_mix(a, b, c); - __jhash_final(a, b, c); - - return c; -} - -static gboolean smmu_iotlb_key_equal(gconstpointer v1, gconstpointer v2) -{ - const SMMUIOTLBKey *k1 = v1; - const SMMUIOTLBKey *k2 = v2; - - return (k1->asid == k2->asid) && (k1->iova == k2->iova); -} - /* Unmap the whole notifier's range */ static void smmu_unmap_notifier_range(IOMMUNotifier *n) { diff --git a/hw/arm/smmu-internal.h b/hw/arm/smmu-internal.h index 7794d6d394..55147f29be 100644 --- a/hw/arm/smmu-internal.h +++ b/hw/arm/smmu-internal.h @@ -96,4 +96,12 @@ uint64_t iova_level_offset(uint64_t iova, int inputsize, MAKE_64BIT_MASK(0, gsz - 3); } +#define SMMU_IOTLB_ASID(key) ((key).asid) + +typedef struct SMMUIOTLBPageInvInfo { + int asid; + uint64_t iova; + uint64_t mask; +} SMMUIOTLBPageInvInfo; + #endif diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h index 4112394129..fa3c088972 100644 --- a/hw/arm/smmuv3-internal.h +++ b/hw/arm/smmuv3-internal.h @@ -54,6 +54,8 @@ REG32(IDR1, 0x4) REG32(IDR2, 0x8) REG32(IDR3, 0xc) + FIELD(IDR3, HAD, 2, 1); + FIELD(IDR3, RIL, 10, 1); REG32(IDR4, 0x10) REG32(IDR5, 0x14) FIELD(IDR5, OAS, 0, 3); @@ -63,7 +65,8 @@ REG32(IDR5, 0x14) #define SMMU_IDR5_OAS 4 -REG32(IIDR, 0x1c) +REG32(IIDR, 0x18) +REG32(AIDR, 0x1c) REG32(CR0, 0x20) FIELD(CR0, SMMU_ENABLE, 0, 1) FIELD(CR0, EVENTQEN, 2, 1) @@ -298,6 +301,8 @@ enum { /* Command completion notification */ }; #define CMD_TYPE(x) extract32((x)->word[0], 0 , 8) +#define CMD_NUM(x) extract32((x)->word[0], 12 , 5) +#define CMD_SCALE(x) extract32((x)->word[0], 20 , 5) #define CMD_SSEC(x) extract32((x)->word[0], 10, 1) #define CMD_SSV(x) extract32((x)->word[0], 11, 1) #define CMD_RESUME_AC(x) extract32((x)->word[0], 12, 1) @@ -310,6 +315,8 @@ enum { /* Command completion notification */ #define CMD_RESUME_STAG(x) extract32((x)->word[2], 0 , 16) #define CMD_RESP(x) extract32((x)->word[2], 11, 2) #define CMD_LEAF(x) extract32((x)->word[2], 0 , 1) +#define CMD_TTL(x) extract32((x)->word[2], 8 , 2) +#define CMD_TG(x) extract32((x)->word[2], 10, 2) #define CMD_STE_RANGE(x) extract32((x)->word[2], 0 , 5) #define CMD_ADDR(x) ({ \ uint64_t high = (uint64_t)(x)->word[3]; \ @@ -573,6 +580,7 @@ static inline int pa_range(STE *ste) lo = (x)->word[(sel) * 2 + 2] & ~0xfULL; \ hi | lo; \ }) +#define CD_HAD(x, sel) extract32((x)->word[(sel) * 2 + 2], 1, 1) #define CD_TSZ(x, sel) extract32((x)->word[0], (16 * (sel)) + 0, 6) #define CD_TG(x, sel) extract32((x)->word[0], (16 * (sel)) + 6, 2) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index 57a79df55b..0122700e72 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -254,6 +254,9 @@ static void smmuv3_init_regs(SMMUv3State *s) s->idr[1] = FIELD_DP32(s->idr[1], IDR1, EVENTQS, SMMU_EVENTQS); s->idr[1] = FIELD_DP32(s->idr[1], IDR1, CMDQS, SMMU_CMDQS); + s->idr[3] = FIELD_DP32(s->idr[3], IDR3, RIL, 1); + s->idr[3] = FIELD_DP32(s->idr[3], IDR3, HAD, 1); + /* 4K and 64K granule support */ s->idr[5] = FIELD_DP32(s->idr[5], IDR5, GRAN4K, 1); s->idr[5] = FIELD_DP32(s->idr[5], IDR5, GRAN64K, 1); @@ -270,6 +273,7 @@ static void smmuv3_init_regs(SMMUv3State *s) s->features = 0; s->sid_split = 0; + s->aidr = 0x1; } static int smmu_get_ste(SMMUv3State *s, dma_addr_t addr, STE *buf, @@ -506,7 +510,8 @@ static int decode_cd(SMMUTransCfg *cfg, CD *cd, SMMUEventInfo *event) if (tt->ttb & ~(MAKE_64BIT_MASK(0, cfg->oas))) { goto bad_cd; } - trace_smmuv3_decode_cd_tt(i, tt->tsz, tt->ttb, tt->granule_sz); + tt->had = CD_HAD(cd, i); + trace_smmuv3_decode_cd_tt(i, tt->tsz, tt->ttb, tt->granule_sz, tt->had); } event->record_trans_faults = CD_R(cd); @@ -626,7 +631,7 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion *mr, hwaddr addr, SMMUTranslationStatus status; SMMUState *bs = ARM_SMMU(s); uint64_t page_mask, aligned_addr; - IOMMUTLBEntry *cached_entry = NULL; + SMMUTLBEntry *cached_entry = NULL; SMMUTransTableInfo *tt; SMMUTransCfg *cfg = NULL; IOMMUTLBEntry entry = { @@ -636,7 +641,6 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion *mr, hwaddr addr, .addr_mask = ~(hwaddr)0, .perm = IOMMU_NONE, }; - SMMUIOTLBKey key, *new_key; qemu_mutex_lock(&s->mutex); @@ -675,17 +679,9 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion *mr, hwaddr addr, page_mask = (1ULL << (tt->granule_sz)) - 1; aligned_addr = addr & ~page_mask; - key.asid = cfg->asid; - key.iova = aligned_addr; - - cached_entry = g_hash_table_lookup(bs->iotlb, &key); + cached_entry = smmu_iotlb_lookup(bs, cfg, tt, aligned_addr); if (cached_entry) { - cfg->iotlb_hits++; - trace_smmu_iotlb_cache_hit(cfg->asid, aligned_addr, - cfg->iotlb_hits, cfg->iotlb_misses, - 100 * cfg->iotlb_hits / - (cfg->iotlb_hits + cfg->iotlb_misses)); - if ((flag & IOMMU_WO) && !(cached_entry->perm & IOMMU_WO)) { + if ((flag & IOMMU_WO) && !(cached_entry->entry.perm & IOMMU_WO)) { status = SMMU_TRANS_ERROR; if (event.record_trans_faults) { event.type = SMMU_EVT_F_PERMISSION; @@ -698,17 +694,7 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion *mr, hwaddr addr, goto epilogue; } - cfg->iotlb_misses++; - trace_smmu_iotlb_cache_miss(cfg->asid, addr & ~page_mask, - cfg->iotlb_hits, cfg->iotlb_misses, - 100 * cfg->iotlb_hits / - (cfg->iotlb_hits + cfg->iotlb_misses)); - - if (g_hash_table_size(bs->iotlb) >= SMMU_IOTLB_MAX_SIZE) { - smmu_iotlb_inv_all(bs); - } - - cached_entry = g_new0(IOMMUTLBEntry, 1); + cached_entry = g_new0(SMMUTLBEntry, 1); if (smmu_ptw(cfg, aligned_addr, flag, cached_entry, &ptw_info)) { g_free(cached_entry); @@ -753,10 +739,7 @@ static IOMMUTLBEntry smmuv3_translate(IOMMUMemoryRegion *mr, hwaddr addr, } status = SMMU_TRANS_ERROR; } else { - new_key = g_new0(SMMUIOTLBKey, 1); - new_key->asid = cfg->asid; - new_key->iova = aligned_addr; - g_hash_table_insert(bs->iotlb, new_key, cached_entry); + smmu_iotlb_insert(bs, cfg, cached_entry); status = SMMU_TRANS_SUCCESS; } @@ -765,9 +748,9 @@ epilogue: switch (status) { case SMMU_TRANS_SUCCESS: entry.perm = flag; - entry.translated_addr = cached_entry->translated_addr + - (addr & page_mask); - entry.addr_mask = cached_entry->addr_mask; + entry.translated_addr = cached_entry->entry.translated_addr + + (addr & cached_entry->entry.addr_mask); + entry.addr_mask = cached_entry->entry.addr_mask; trace_smmuv3_translate_success(mr->parent_obj.name, sid, addr, entry.translated_addr, entry.perm); break; @@ -807,42 +790,49 @@ epilogue: * @n: notifier to be called * @asid: address space ID or negative value if we don't care * @iova: iova + * @tg: translation granule (if communicated through range invalidation) + * @num_pages: number of @granule sized pages (if tg != 0), otherwise 1 */ static void smmuv3_notify_iova(IOMMUMemoryRegion *mr, IOMMUNotifier *n, - int asid, - dma_addr_t iova) + int asid, dma_addr_t iova, + uint8_t tg, uint64_t num_pages) { SMMUDevice *sdev = container_of(mr, SMMUDevice, iommu); - SMMUEventInfo event = {.inval_ste_allowed = true}; - SMMUTransTableInfo *tt; - SMMUTransCfg *cfg; IOMMUTLBEntry entry; + uint8_t granule = tg; - cfg = smmuv3_get_config(sdev, &event); - if (!cfg) { - return; - } + if (!tg) { + SMMUEventInfo event = {.inval_ste_allowed = true}; + SMMUTransCfg *cfg = smmuv3_get_config(sdev, &event); + SMMUTransTableInfo *tt; - if (asid >= 0 && cfg->asid != asid) { - return; - } + if (!cfg) { + return; + } - tt = select_tt(cfg, iova); - if (!tt) { - return; + if (asid >= 0 && cfg->asid != asid) { + return; + } + + tt = select_tt(cfg, iova); + if (!tt) { + return; + } + granule = tt->granule_sz; } entry.target_as = &address_space_memory; entry.iova = iova; - entry.addr_mask = (1 << tt->granule_sz) - 1; + entry.addr_mask = num_pages * (1 << granule) - 1; entry.perm = IOMMU_NONE; memory_region_notify_one(n, &entry); } -/* invalidate an asid/iova tuple in all mr's */ -static void smmuv3_inv_notifiers_iova(SMMUState *s, int asid, dma_addr_t iova) +/* invalidate an asid/iova range tuple in all mr's */ +static void smmuv3_inv_notifiers_iova(SMMUState *s, int asid, dma_addr_t iova, + uint8_t tg, uint64_t num_pages) { SMMUDevice *sdev; @@ -850,14 +840,41 @@ static void smmuv3_inv_notifiers_iova(SMMUState *s, int asid, dma_addr_t iova) IOMMUMemoryRegion *mr = &sdev->iommu; IOMMUNotifier *n; - trace_smmuv3_inv_notifiers_iova(mr->parent_obj.name, asid, iova); + trace_smmuv3_inv_notifiers_iova(mr->parent_obj.name, asid, iova, + tg, num_pages); IOMMU_NOTIFIER_FOREACH(n, mr) { - smmuv3_notify_iova(mr, n, asid, iova); + smmuv3_notify_iova(mr, n, asid, iova, tg, num_pages); } } } +static void smmuv3_s1_range_inval(SMMUState *s, Cmd *cmd) +{ + uint8_t scale = 0, num = 0, ttl = 0; + dma_addr_t addr = CMD_ADDR(cmd); + uint8_t type = CMD_TYPE(cmd); + uint16_t vmid = CMD_VMID(cmd); + bool leaf = CMD_LEAF(cmd); + uint8_t tg = CMD_TG(cmd); + hwaddr num_pages = 1; + int asid = -1; + + if (tg) { + scale = CMD_SCALE(cmd); + num = CMD_NUM(cmd); + ttl = CMD_TTL(cmd); + num_pages = (num + 1) * (1 << (scale)); + } + + if (type == SMMU_CMD_TLBI_NH_VA) { + asid = CMD_ASID(cmd); + } + trace_smmuv3_s1_range_inval(vmid, asid, addr, tg, num_pages, ttl, leaf); + smmuv3_inv_notifiers_iova(s, asid, addr, tg, num_pages); + smmu_iotlb_inv_iova(s, asid, addr, tg, num_pages, ttl); +} + static int smmuv3_cmdq_consume(SMMUv3State *s) { SMMUState *bs = ARM_SMMU(s); @@ -988,27 +1005,9 @@ static int smmuv3_cmdq_consume(SMMUv3State *s) smmu_iotlb_inv_all(bs); break; case SMMU_CMD_TLBI_NH_VAA: - { - dma_addr_t addr = CMD_ADDR(&cmd); - uint16_t vmid = CMD_VMID(&cmd); - - trace_smmuv3_cmdq_tlbi_nh_vaa(vmid, addr); - smmuv3_inv_notifiers_iova(bs, -1, addr); - smmu_iotlb_inv_all(bs); - break; - } case SMMU_CMD_TLBI_NH_VA: - { - uint16_t asid = CMD_ASID(&cmd); - uint16_t vmid = CMD_VMID(&cmd); - dma_addr_t addr = CMD_ADDR(&cmd); - bool leaf = CMD_LEAF(&cmd); - - trace_smmuv3_cmdq_tlbi_nh_va(vmid, asid, addr, leaf); - smmuv3_inv_notifiers_iova(bs, asid, addr); - smmu_iotlb_inv_iova(bs, asid, addr); + smmuv3_s1_range_inval(bs, &cmd); break; - } case SMMU_CMD_TLBI_EL3_ALL: case SMMU_CMD_TLBI_EL3_VA: case SMMU_CMD_TLBI_EL2_ALL: @@ -1257,6 +1256,9 @@ static MemTxResult smmu_readl(SMMUv3State *s, hwaddr offset, case A_IIDR: *data = s->iidr; return MEMTX_OK; + case A_AIDR: + *data = s->aidr; + return MEMTX_OK; case A_CR0: *data = s->cr[0]; return MEMTX_OK; diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 0acedcedc6..c8a4d80f6b 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -14,6 +14,9 @@ smmu_iotlb_inv_all(void) "IOTLB invalidate all" smmu_iotlb_inv_asid(uint16_t asid) "IOTLB invalidate asid=%d" smmu_iotlb_inv_iova(uint16_t asid, uint64_t addr) "IOTLB invalidate asid=%d addr=0x%"PRIx64 smmu_inv_notifiers_mr(const char *name) "iommu mr=%s" +smmu_iotlb_lookup_hit(uint16_t asid, uint64_t addr, uint32_t hit, uint32_t miss, uint32_t p) "IOTLB cache HIT asid=%d addr=0x%"PRIx64" hit=%d miss=%d hit rate=%d" +smmu_iotlb_lookup_miss(uint16_t asid, uint64_t addr, uint32_t hit, uint32_t miss, uint32_t p) "IOTLB cache MISS asid=%d addr=0x%"PRIx64" hit=%d miss=%d hit rate=%d" +smmu_iotlb_insert(uint16_t asid, uint64_t addr, uint8_t tg, uint8_t level) "IOTLB ++ asid=%d addr=0x%"PRIx64" tg=%d level=%d" # smmuv3.c smmuv3_read_mmio(uint64_t addr, uint64_t val, unsigned size, uint32_t r) "addr: 0x%"PRIx64" val:0x%"PRIx64" size: 0x%x(%d)" @@ -36,20 +39,17 @@ smmuv3_translate_abort(const char *n, uint16_t sid, uint64_t addr, bool is_write smmuv3_translate_success(const char *n, uint16_t sid, uint64_t iova, uint64_t translated, int perm) "%s sid=%d iova=0x%"PRIx64" translated=0x%"PRIx64" perm=0x%x" smmuv3_get_cd(uint64_t addr) "CD addr: 0x%"PRIx64 smmuv3_decode_cd(uint32_t oas) "oas=%d" -smmuv3_decode_cd_tt(int i, uint32_t tsz, uint64_t ttb, uint32_t granule_sz) "TT[%d]:tsz:%d ttb:0x%"PRIx64" granule_sz:%d" +smmuv3_decode_cd_tt(int i, uint32_t tsz, uint64_t ttb, uint32_t granule_sz, bool had) "TT[%d]:tsz:%d ttb:0x%"PRIx64" granule_sz:%d had:%d" smmuv3_cmdq_cfgi_ste(int streamid) "streamid =%d" smmuv3_cmdq_cfgi_ste_range(int start, int end) "start=0x%d - end=0x%d" smmuv3_cmdq_cfgi_cd(uint32_t sid) "streamid = %d" smmuv3_config_cache_hit(uint32_t sid, uint32_t hits, uint32_t misses, uint32_t perc) "Config cache HIT for sid %d (hits=%d, misses=%d, hit rate=%d)" smmuv3_config_cache_miss(uint32_t sid, uint32_t hits, uint32_t misses, uint32_t perc) "Config cache MISS for sid %d (hits=%d, misses=%d, hit rate=%d)" -smmuv3_cmdq_tlbi_nh_va(int vmid, int asid, uint64_t addr, bool leaf) "vmid =%d asid =%d addr=0x%"PRIx64" leaf=%d" -smmuv3_cmdq_tlbi_nh_vaa(int vmid, uint64_t addr) "vmid =%d addr=0x%"PRIx64 +smmuv3_s1_range_inval(int vmid, int asid, uint64_t addr, uint8_t tg, uint64_t num_pages, uint8_t ttl, bool leaf) "vmid =%d asid =%d addr=0x%"PRIx64" tg=%d num_pages=0x%"PRIx64" ttl=%d leaf=%d" smmuv3_cmdq_tlbi_nh(void) "" smmuv3_cmdq_tlbi_nh_asid(uint16_t asid) "asid=%d" -smmu_iotlb_cache_hit(uint16_t asid, uint64_t addr, uint32_t hit, uint32_t miss, uint32_t p) "IOTLB cache HIT asid=%d addr=0x%"PRIx64" hit=%d miss=%d hit rate=%d" -smmu_iotlb_cache_miss(uint16_t asid, uint64_t addr, uint32_t hit, uint32_t miss, uint32_t p) "IOTLB cache MISS asid=%d addr=0x%"PRIx64" hit=%d miss=%d hit rate=%d" smmuv3_config_cache_inv(uint32_t sid) "Config cache INV for sid %d" smmuv3_notify_flag_add(const char *iommu) "ADD SMMUNotifier node for iommu mr=%s" smmuv3_notify_flag_del(const char *iommu) "DEL SMMUNotifier node for iommu mr=%s" -smmuv3_inv_notifiers_iova(const char *name, uint16_t asid, uint64_t iova) "iommu mr=%s asid=%d iova=0x%"PRIx64 +smmuv3_inv_notifiers_iova(const char *name, uint16_t asid, uint64_t iova, uint8_t tg, uint64_t num_pages) "iommu mr=%s asid=%d iova=0x%"PRIx64" tg=%d num_pages=0x%"PRIx64 diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 9dc93182b6..9127579984 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -25,6 +25,7 @@ #include "hw/block/flash.h" #include "qemu/error-report.h" #include "hw/char/pl011.h" +#include "hw/sd/sd.h" #define VERSATILE_FLASH_ADDR 0x34000000 #define VERSATILE_FLASH_SIZE (64 * 1024 * 1024) @@ -309,8 +310,29 @@ static void versatile_init(MachineState *machine, int board_id) /* Wire up the mux control signals from the SYS_CLCD register */ qdev_connect_gpio_out(sysctl, 0, qdev_get_gpio_in(dev, 0)); - sysbus_create_varargs("pl181", 0x10005000, sic[22], sic[1], NULL); - sysbus_create_varargs("pl181", 0x1000b000, sic[23], sic[2], NULL); + dev = sysbus_create_varargs("pl181", 0x10005000, sic[22], sic[1], NULL); + dinfo = drive_get_next(IF_SD); + if (dinfo) { + DeviceState *card; + + card = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + } + + dev = sysbus_create_varargs("pl181", 0x1000b000, sic[23], sic[2], NULL); + dinfo = drive_get_next(IF_SD); + if (dinfo) { + DeviceState *card; + + card = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + } /* Add PL031 Real Time Clock. */ sysbus_create_simple("pl031", 0x101e8000, pic[10]); diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index 1dc971c34f..95405f5940 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -43,6 +43,7 @@ #include "hw/cpu/a9mpcore.h" #include "hw/cpu/a15mpcore.h" #include "hw/i2c/arm_sbcon_i2c.h" +#include "hw/sd/sd.h" #define VEXPRESS_BOARD_ID 0x8e0 #define VEXPRESS_FLASH_SIZE (64 * 1024 * 1024) @@ -624,10 +625,20 @@ static void vexpress_common_init(MachineState *machine) dev = sysbus_create_varargs("pl181", map[VE_MMCI], pic[9], pic[10], NULL); /* Wire up MMC card detect and read-only signals */ - qdev_connect_gpio_out(dev, 0, + qdev_connect_gpio_out_named(dev, "card-read-only", 0, qdev_get_gpio_in(sysctl, ARM_SYSCTL_GPIO_MMC_WPROT)); - qdev_connect_gpio_out(dev, 1, + qdev_connect_gpio_out_named(dev, "card-inserted", 0, qdev_get_gpio_in(sysctl, ARM_SYSCTL_GPIO_MMC_CARDIN)); + dinfo = drive_get_next(IF_SD); + if (dinfo) { + DeviceState *card; + + card = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + } sysbus_create_simple("pl050_keyboard", map[VE_KMI0], pic[12]); sysbus_create_simple("pl050_mouse", map[VE_KMI1], pic[13]); diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ecfee362a1..acf9bfbece 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2546,10 +2546,17 @@ static void machvirt_machine_init(void) } type_init(machvirt_machine_init); +static void virt_machine_5_2_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(5, 2) + static void virt_machine_5_1_options(MachineClass *mc) { + virt_machine_5_2_options(mc); + compat_props_add(mc->compat_props, hw_compat_5_1, hw_compat_5_1_len); } -DEFINE_VIRT_MACHINE_AS_LATEST(5, 1) +DEFINE_VIRT_MACHINE(5, 1) static void virt_machine_5_0_options(MachineClass *mc) { diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index 963088b798..21551221ad 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -238,6 +238,10 @@ MachineInfoList *qmp_query_machines(Error **errp) info->default_cpu_type = g_strdup(mc->default_cpu_type); info->has_default_cpu_type = true; } + if (mc->default_ram_id) { + info->default_ram_id = g_strdup(mc->default_ram_id); + info->has_default_ram_id = true; + } entry = g_malloc0(sizeof(*entry)); entry->value = info; diff --git a/hw/core/machine.c b/hw/core/machine.c index 8d1a90c6cf..cf5f2dfaeb 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -28,6 +28,9 @@ #include "hw/mem/nvdimm.h" #include "migration/vmstate.h" +GlobalProperty hw_compat_5_1[] = {}; +const size_t hw_compat_5_1_len = G_N_ELEMENTS(hw_compat_5_1); + GlobalProperty hw_compat_5_0[] = { { "pci-host-bridge", "x-config-reg-migration-enabled", "off" }, { "virtio-balloon-device", "page-poison", "false" }, diff --git a/hw/cpu/a9mpcore.c b/hw/cpu/a9mpcore.c index 351295e518..ec186d49ab 100644 --- a/hw/cpu/a9mpcore.c +++ b/hw/cpu/a9mpcore.c @@ -15,6 +15,7 @@ #include "hw/irq.h" #include "hw/qdev-properties.h" #include "hw/core/cpu.h" +#include "cpu.h" #define A9_GIC_NUM_PRIORITY_BITS 5 @@ -52,8 +53,18 @@ static void a9mp_priv_realize(DeviceState *dev, Error **errp) *wdtbusdev; int i; bool has_el3; + CPUState *cpu0; Object *cpuobj; + cpu0 = qemu_get_cpu(0); + cpuobj = OBJECT(cpu0); + if (strcmp(object_get_typename(cpuobj), ARM_CPU_TYPE_NAME("cortex-a9"))) { + /* We might allow Cortex-A5 once we model it */ + error_setg(errp, + "Cortex-A9MPCore peripheral can only use Cortex-A9 CPU"); + return; + } + scudev = DEVICE(&s->scu); qdev_prop_set_uint32(scudev, "num-cpu", s->num_cpu); if (!sysbus_realize(SYS_BUS_DEVICE(&s->scu), errp)) { @@ -70,7 +81,6 @@ static void a9mp_priv_realize(DeviceState *dev, Error **errp) /* Make the GIC's TZ support match the CPUs. We assume that * either all the CPUs have TZ, or none do. */ - cpuobj = OBJECT(qemu_get_cpu(0)); has_el3 = object_property_find(cpuobj, "has_el3", NULL) && object_property_get_bool(cpuobj, "has_el3", &error_abort); qdev_prop_set_bit(gicdev, "has-security-extensions", has_el3); diff --git a/hw/i386/pc.c b/hw/i386/pc.c index cc616e48f3..5d8d5ef8b3 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -97,6 +97,9 @@ #include "trace.h" #include CONFIG_DEVICES +GlobalProperty pc_compat_5_1[] = {}; +const size_t pc_compat_5_1_len = G_N_ELEMENTS(pc_compat_5_1); + GlobalProperty pc_compat_5_0[] = { }; const size_t pc_compat_5_0_len = G_N_ELEMENTS(pc_compat_5_0); diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 456e336934..32b1453e6a 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -426,7 +426,7 @@ static void pc_i440fx_machine_options(MachineClass *m) machine_class_allow_dynamic_sysbus_dev(m, TYPE_VMBUS_BRIDGE); } -static void pc_i440fx_5_1_machine_options(MachineClass *m) +static void pc_i440fx_5_2_machine_options(MachineClass *m) { PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_machine_options(m); @@ -435,6 +435,18 @@ static void pc_i440fx_5_1_machine_options(MachineClass *m) pcmc->default_cpu_version = 1; } +DEFINE_I440FX_MACHINE(v5_2, "pc-i440fx-5.2", NULL, + pc_i440fx_5_2_machine_options); + +static void pc_i440fx_5_1_machine_options(MachineClass *m) +{ + pc_i440fx_5_2_machine_options(m); + m->alias = NULL; + m->is_default = false; + compat_props_add(m->compat_props, hw_compat_5_1, hw_compat_5_1_len); + compat_props_add(m->compat_props, pc_compat_5_1, pc_compat_5_1_len); +} + DEFINE_I440FX_MACHINE(v5_1, "pc-i440fx-5.1", NULL, pc_i440fx_5_1_machine_options); diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index a3e607a544..0cb9c18cd4 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -353,7 +353,7 @@ static void pc_q35_machine_options(MachineClass *m) m->max_cpus = 288; } -static void pc_q35_5_1_machine_options(MachineClass *m) +static void pc_q35_5_2_machine_options(MachineClass *m) { PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_machine_options(m); @@ -361,6 +361,17 @@ static void pc_q35_5_1_machine_options(MachineClass *m) pcmc->default_cpu_version = 1; } +DEFINE_Q35_MACHINE(v5_2, "pc-q35-5.2", NULL, + pc_q35_5_2_machine_options); + +static void pc_q35_5_1_machine_options(MachineClass *m) +{ + pc_q35_5_2_machine_options(m); + m->alias = NULL; + compat_props_add(m->compat_props, hw_compat_5_1, hw_compat_5_1_len); + compat_props_add(m->compat_props, pc_compat_5_1, pc_compat_5_1_len); +} + DEFINE_Q35_MACHINE(v5_1, "pc-q35-5.1", NULL, pc_q35_5_1_machine_options); diff --git a/hw/intc/ibex_plic.c b/hw/intc/ibex_plic.c index 41079518c6..f49fa67c91 100644 --- a/hw/intc/ibex_plic.c +++ b/hw/intc/ibex_plic.c @@ -43,12 +43,22 @@ static void ibex_plic_irqs_set_pending(IbexPlicState *s, int irq, bool level) { int pending_num = irq / 32; + if (s->claimed[pending_num] & 1 << (irq % 32)) { + /* + * The interrupt has been claimed, but not compelted. + * The pending bit can't be set. + */ + return; + } + s->pending[pending_num] |= level << (irq % 32); } static bool ibex_plic_irqs_pending(IbexPlicState *s, uint32_t context) { int i; + uint32_t max_irq = 0; + uint32_t max_prio = s->threshold; for (i = 0; i < s->pending_num; i++) { uint32_t irq_num = ctz64(s->pending[i]) + (i * 32); @@ -58,14 +68,17 @@ static bool ibex_plic_irqs_pending(IbexPlicState *s, uint32_t context) continue; } - if (s->priority[irq_num] > s->threshold) { - if (!s->claim) { - s->claim = irq_num; - } - return true; + if (s->priority[irq_num] > max_prio) { + max_irq = irq_num; + max_prio = s->priority[irq_num]; } } + if (max_irq) { + s->claim = max_irq; + return true; + } + return false; } @@ -120,7 +133,14 @@ static uint64_t ibex_plic_read(void *opaque, hwaddr addr, int pending_num = s->claim / 32; s->pending[pending_num] &= ~(1 << (s->claim % 32)); + /* Set the interrupt as claimed, but not compelted */ + s->claimed[pending_num] |= 1 << (s->claim % 32); + + /* Return the current claimed interrupt */ ret = s->claim; + + /* Update the interrupt status after the claim */ + ibex_plic_update(s); } return ret; @@ -140,6 +160,7 @@ static void ibex_plic_write(void *opaque, hwaddr addr, } else if (addr_between(addr, s->priority_base, s->priority_num)) { uint32_t irq = ((addr - s->priority_base) >> 2) + 1; s->priority[irq] = value & 7; + ibex_plic_update(s); } else if (addr_between(addr, s->enable_base, s->enable_num)) { uint32_t enable_reg = (addr - s->enable_base) / 4; @@ -151,6 +172,10 @@ static void ibex_plic_write(void *opaque, hwaddr addr, /* Interrupt was completed */ s->claim = 0; } + if (s->claimed[value / 32] & 1 << (value % 32)) { + /* This value was already claimed, clear it. */ + s->claimed[value / 32] &= ~(1 << (value % 32)); + } } ibex_plic_update(s); @@ -211,6 +236,7 @@ static void ibex_plic_realize(DeviceState *dev, Error **errp) int i; s->pending = g_new0(uint32_t, s->pending_num); + s->claimed = g_new0(uint32_t, s->pending_num); s->source = g_new0(uint32_t, s->source_num); s->priority = g_new0(uint32_t, s->priority_num); s->enable = g_new0(uint32_t, s->enable_num); diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 89c8cd9667..4bd0d606ba 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -148,12 +148,19 @@ static void spapr_xive_end_pic_print_info(SpaprXive *xive, XiveEND *end, xive_end_queue_pic_print_info(end, 6, mon); } +/* + * kvm_irqchip_in_kernel() will cause the compiler to turn this + * info a nop if CONFIG_KVM isn't defined. + */ +#define spapr_xive_in_kernel(xive) \ + (kvm_irqchip_in_kernel() && (xive)->fd != -1) + void spapr_xive_pic_print_info(SpaprXive *xive, Monitor *mon) { XiveSource *xsrc = &xive->source; int i; - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { Error *local_err = NULL; kvmppc_xive_synchronize_state(xive, &local_err); @@ -329,7 +336,7 @@ static void spapr_xive_realize(DeviceState *dev, Error **errp) sysbus_init_mmio(SYS_BUS_DEVICE(xive), &end_xsrc->esb_mmio); /* Set the mapping address of the END ESB pages after the source ESBs */ - xive->end_base = xive->vc_base + (1ull << xsrc->esb_shift) * xsrc->nr_irqs; + xive->end_base = xive->vc_base + xive_source_esb_len(xsrc); /* * Allocate the routing tables @@ -507,8 +514,10 @@ static const VMStateDescription vmstate_spapr_xive_eas = { static int vmstate_spapr_xive_pre_save(void *opaque) { - if (kvm_irqchip_in_kernel()) { - return kvmppc_xive_pre_save(SPAPR_XIVE(opaque)); + SpaprXive *xive = SPAPR_XIVE(opaque); + + if (spapr_xive_in_kernel(xive)) { + return kvmppc_xive_pre_save(xive); } return 0; @@ -520,8 +529,10 @@ static int vmstate_spapr_xive_pre_save(void *opaque) */ static int spapr_xive_post_load(SpaprInterruptController *intc, int version_id) { - if (kvm_irqchip_in_kernel()) { - return kvmppc_xive_post_load(SPAPR_XIVE(intc), version_id); + SpaprXive *xive = SPAPR_XIVE(intc); + + if (spapr_xive_in_kernel(xive)) { + return kvmppc_xive_post_load(xive, version_id); } return 0; @@ -564,7 +575,7 @@ static int spapr_xive_claim_irq(SpaprInterruptController *intc, int lisn, xive_source_irq_set_lsi(xsrc, lisn); } - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { return kvmppc_xive_source_reset_one(xsrc, lisn, errp); } @@ -641,7 +652,7 @@ static void spapr_xive_set_irq(SpaprInterruptController *intc, int irq, int val) { SpaprXive *xive = SPAPR_XIVE(intc); - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { kvmppc_xive_source_set_irq(&xive->source, irq, val); } else { xive_source_set_irq(&xive->source, irq, val); @@ -749,11 +760,16 @@ static void spapr_xive_deactivate(SpaprInterruptController *intc) spapr_xive_mmio_set_enabled(xive, false); - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { kvmppc_xive_disconnect(intc); } } +static bool spapr_xive_in_kernel_xptr(const XivePresenter *xptr) +{ + return spapr_xive_in_kernel(SPAPR_XIVE(xptr)); +} + static void spapr_xive_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); @@ -788,6 +804,7 @@ static void spapr_xive_class_init(ObjectClass *klass, void *data) sicc->post_load = spapr_xive_post_load; xpc->match_nvt = spapr_xive_match_nvt; + xpc->in_kernel = spapr_xive_in_kernel_xptr; } static const TypeInfo spapr_xive_info = { @@ -1058,7 +1075,7 @@ static target_ulong h_int_set_source_config(PowerPCCPU *cpu, new_eas.w = xive_set_field64(EAS_END_DATA, new_eas.w, eisn); } - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { Error *local_err = NULL; kvmppc_xive_set_source_config(xive, lisn, &new_eas, &local_err); @@ -1379,7 +1396,7 @@ static target_ulong h_int_set_queue_config(PowerPCCPU *cpu, */ out: - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { Error *local_err = NULL; kvmppc_xive_set_queue_config(xive, end_blk, end_idx, &end, &local_err); @@ -1480,7 +1497,7 @@ static target_ulong h_int_get_queue_config(PowerPCCPU *cpu, args[2] = 0; } - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { Error *local_err = NULL; kvmppc_xive_get_queue_config(xive, end_blk, end_idx, end, &local_err); @@ -1642,7 +1659,7 @@ static target_ulong h_int_esb(PowerPCCPU *cpu, return H_P3; } - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { args[0] = kvmppc_xive_esb_rw(xsrc, lisn, offset, data, flags & SPAPR_XIVE_ESB_STORE); } else { @@ -1717,7 +1734,7 @@ static target_ulong h_int_sync(PowerPCCPU *cpu, * under KVM */ - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { Error *local_err = NULL; kvmppc_xive_sync_source(xive, lisn, &local_err); @@ -1761,7 +1778,7 @@ static target_ulong h_int_reset(PowerPCCPU *cpu, device_legacy_reset(DEVICE(xive)); - if (kvm_irqchip_in_kernel()) { + if (spapr_xive_in_kernel(xive)) { Error *local_err = NULL; kvmppc_xive_reset(xive, &local_err); diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c index edb7ee0e74..e8667ce5f6 100644 --- a/hw/intc/spapr_xive_kvm.c +++ b/hw/intc/spapr_xive_kvm.c @@ -73,54 +73,54 @@ static void kvm_cpu_disable_all(void) * XIVE Thread Interrupt Management context (KVM) */ -void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) +int kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp) { SpaprXive *xive = SPAPR_XIVE(tctx->xptr); uint64_t state[2]; int ret; - /* The KVM XIVE device is not in use yet */ - if (xive->fd == -1) { - return; - } + assert(xive->fd != -1); /* word0 and word1 of the OS ring. */ state[0] = *((uint64_t *) &tctx->regs[TM_QW1_OS]); ret = kvm_set_one_reg(tctx->cs, KVM_REG_PPC_VP_STATE, state); if (ret != 0) { - error_setg_errno(errp, errno, + error_setg_errno(errp, -ret, "XIVE: could not restore KVM state of CPU %ld", kvm_arch_vcpu_id(tctx->cs)); + return ret; } + + return 0; } -void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) +int kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp) { SpaprXive *xive = SPAPR_XIVE(tctx->xptr); uint64_t state[2] = { 0 }; int ret; - /* The KVM XIVE device is not in use */ - if (xive->fd == -1) { - return; - } + assert(xive->fd != -1); ret = kvm_get_one_reg(tctx->cs, KVM_REG_PPC_VP_STATE, state); if (ret != 0) { - error_setg_errno(errp, errno, + error_setg_errno(errp, -ret, "XIVE: could not capture KVM state of CPU %ld", kvm_arch_vcpu_id(tctx->cs)); - return; + return ret; } /* word0 and word1 of the OS ring. */ *((uint64_t *) &tctx->regs[TM_QW1_OS]) = state[0]; + + return 0; } typedef struct { XiveTCTX *tctx; - Error *err; + Error **errp; + int ret; } XiveCpuGetState; static void kvmppc_xive_cpu_do_synchronize_state(CPUState *cpu, @@ -128,14 +128,14 @@ static void kvmppc_xive_cpu_do_synchronize_state(CPUState *cpu, { XiveCpuGetState *s = arg.host_ptr; - kvmppc_xive_cpu_get_state(s->tctx, &s->err); + s->ret = kvmppc_xive_cpu_get_state(s->tctx, s->errp); } -void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp) +int kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp) { XiveCpuGetState s = { .tctx = tctx, - .err = NULL, + .errp = errp, }; /* @@ -144,26 +144,21 @@ void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp) run_on_cpu(tctx->cs, kvmppc_xive_cpu_do_synchronize_state, RUN_ON_CPU_HOST_PTR(&s)); - if (s.err) { - error_propagate(errp, s.err); - return; - } + return s.ret; } -void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp) +int kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp) { + ERRP_GUARD(); SpaprXive *xive = SPAPR_XIVE(tctx->xptr); unsigned long vcpu_id; int ret; - /* The KVM XIVE device is not in use */ - if (xive->fd == -1) { - return; - } + assert(xive->fd != -1); /* Check if CPU was hot unplugged and replugged. */ if (kvm_cpu_is_enabled(tctx->cs)) { - return; + return 0; } vcpu_id = kvm_arch_vcpu_id(tctx->cs); @@ -171,28 +166,26 @@ void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp) ret = kvm_vcpu_enable_cap(tctx->cs, KVM_CAP_PPC_IRQ_XIVE, 0, xive->fd, vcpu_id, 0); if (ret < 0) { - Error *local_err = NULL; - - error_setg(&local_err, - "XIVE: unable to connect CPU%ld to KVM device: %s", - vcpu_id, strerror(errno)); - if (errno == ENOSPC) { - error_append_hint(&local_err, "Try -smp maxcpus=N with N < %u\n", + error_setg_errno(errp, -ret, + "XIVE: unable to connect CPU%ld to KVM device", + vcpu_id); + if (ret == -ENOSPC) { + error_append_hint(errp, "Try -smp maxcpus=N with N < %u\n", MACHINE(qdev_get_machine())->smp.max_cpus); } - error_propagate(errp, local_err); - return; + return ret; } kvm_cpu_enable(tctx->cs); + return 0; } /* * XIVE Interrupt Source (KVM) */ -void kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS *eas, - Error **errp) +int kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS *eas, + Error **errp) { uint32_t end_idx; uint32_t end_blk; @@ -201,7 +194,6 @@ void kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS *eas, bool masked; uint32_t eisn; uint64_t kvm_src; - Error *local_err = NULL; assert(xive_eas_is_valid(eas)); @@ -221,12 +213,8 @@ void kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS *eas, kvm_src |= ((uint64_t)eisn << KVM_XIVE_SOURCE_EISN_SHIFT) & KVM_XIVE_SOURCE_EISN_MASK; - kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_SOURCE_CONFIG, lisn, - &kvm_src, true, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } + return kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_SOURCE_CONFIG, lisn, + &kvm_src, true, errp); } void kvmppc_xive_sync_source(SpaprXive *xive, uint32_t lisn, Error **errp) @@ -245,10 +233,7 @@ int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp) SpaprXive *xive = SPAPR_XIVE(xsrc->xive); uint64_t state = 0; - /* The KVM XIVE device is not in use */ - if (xive->fd == -1) { - return -ENODEV; - } + assert(xive->fd != -1); if (xive_source_irq_is_lsi(xsrc, srcno)) { state |= KVM_XIVE_LEVEL_SENSITIVE; @@ -261,24 +246,25 @@ int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp) true, errp); } -static void kvmppc_xive_source_reset(XiveSource *xsrc, Error **errp) +static int kvmppc_xive_source_reset(XiveSource *xsrc, Error **errp) { SpaprXive *xive = SPAPR_XIVE(xsrc->xive); int i; for (i = 0; i < xsrc->nr_irqs; i++) { - Error *local_err = NULL; + int ret; if (!xive_eas_is_valid(&xive->eat[i])) { continue; } - kvmppc_xive_source_reset_one(xsrc, i, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; + ret = kvmppc_xive_source_reset_one(xsrc, i, errp); + if (ret < 0) { + return ret; } } + + return 0; } /* @@ -381,15 +367,15 @@ void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val) /* * sPAPR XIVE interrupt controller (KVM) */ -void kvmppc_xive_get_queue_config(SpaprXive *xive, uint8_t end_blk, - uint32_t end_idx, XiveEND *end, - Error **errp) +int kvmppc_xive_get_queue_config(SpaprXive *xive, uint8_t end_blk, + uint32_t end_idx, XiveEND *end, + Error **errp) { struct kvm_ppc_xive_eq kvm_eq = { 0 }; uint64_t kvm_eq_idx; uint8_t priority; uint32_t server; - Error *local_err = NULL; + int ret; assert(xive_end_is_valid(end)); @@ -401,11 +387,10 @@ void kvmppc_xive_get_queue_config(SpaprXive *xive, uint8_t end_blk, kvm_eq_idx |= server << KVM_XIVE_EQ_SERVER_SHIFT & KVM_XIVE_EQ_SERVER_MASK; - kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_EQ_CONFIG, kvm_eq_idx, - &kvm_eq, false, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; + ret = kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_EQ_CONFIG, kvm_eq_idx, + &kvm_eq, false, errp); + if (ret < 0) { + return ret; } /* @@ -415,17 +400,18 @@ void kvmppc_xive_get_queue_config(SpaprXive *xive, uint8_t end_blk, */ end->w1 = xive_set_field32(END_W1_GENERATION, 0ul, kvm_eq.qtoggle) | xive_set_field32(END_W1_PAGE_OFF, 0ul, kvm_eq.qindex); + + return 0; } -void kvmppc_xive_set_queue_config(SpaprXive *xive, uint8_t end_blk, - uint32_t end_idx, XiveEND *end, - Error **errp) +int kvmppc_xive_set_queue_config(SpaprXive *xive, uint8_t end_blk, + uint32_t end_idx, XiveEND *end, + Error **errp) { struct kvm_ppc_xive_eq kvm_eq = { 0 }; uint64_t kvm_eq_idx; uint8_t priority; uint32_t server; - Error *local_err = NULL; /* * Build the KVM state from the local END structure. @@ -463,12 +449,9 @@ void kvmppc_xive_set_queue_config(SpaprXive *xive, uint8_t end_blk, kvm_eq_idx |= server << KVM_XIVE_EQ_SERVER_SHIFT & KVM_XIVE_EQ_SERVER_MASK; - kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_EQ_CONFIG, kvm_eq_idx, - &kvm_eq, true, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } + return + kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_EQ_CONFIG, kvm_eq_idx, + &kvm_eq, true, errp); } void kvmppc_xive_reset(SpaprXive *xive, Error **errp) @@ -477,23 +460,24 @@ void kvmppc_xive_reset(SpaprXive *xive, Error **errp) NULL, true, errp); } -static void kvmppc_xive_get_queues(SpaprXive *xive, Error **errp) +static int kvmppc_xive_get_queues(SpaprXive *xive, Error **errp) { - Error *local_err = NULL; int i; + int ret; for (i = 0; i < xive->nr_ends; i++) { if (!xive_end_is_valid(&xive->endt[i])) { continue; } - kvmppc_xive_get_queue_config(xive, SPAPR_XIVE_BLOCK_ID, i, - &xive->endt[i], &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; + ret = kvmppc_xive_get_queue_config(xive, SPAPR_XIVE_BLOCK_ID, i, + &xive->endt[i], errp); + if (ret < 0) { + return ret; } } + + return 0; } /* @@ -592,10 +576,7 @@ static void kvmppc_xive_change_state_handler(void *opaque, int running, void kvmppc_xive_synchronize_state(SpaprXive *xive, Error **errp) { - /* The KVM XIVE device is not in use */ - if (xive->fd == -1) { - return; - } + assert(xive->fd != -1); /* * When the VM is stopped, the sources are masked and the previous @@ -621,19 +602,17 @@ void kvmppc_xive_synchronize_state(SpaprXive *xive, Error **errp) int kvmppc_xive_pre_save(SpaprXive *xive) { Error *local_err = NULL; + int ret; - /* The KVM XIVE device is not in use */ - if (xive->fd == -1) { - return 0; - } + assert(xive->fd != -1); /* EAT: there is no extra state to query from KVM */ /* ENDT */ - kvmppc_xive_get_queues(xive, &local_err); - if (local_err) { + ret = kvmppc_xive_get_queues(xive, &local_err); + if (ret < 0) { error_report_err(local_err); - return -1; + return ret; } return 0; @@ -650,6 +629,7 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id) Error *local_err = NULL; CPUState *cs; int i; + int ret; /* The KVM XIVE device should be in use */ assert(xive->fd != -1); @@ -660,11 +640,10 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id) continue; } - kvmppc_xive_set_queue_config(xive, SPAPR_XIVE_BLOCK_ID, i, - &xive->endt[i], &local_err); - if (local_err) { - error_report_err(local_err); - return -1; + ret = kvmppc_xive_set_queue_config(xive, SPAPR_XIVE_BLOCK_ID, i, + &xive->endt[i], &local_err); + if (ret < 0) { + goto fail; } } @@ -679,16 +658,14 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id) * previously set in KVM. Since we don't do that for all interrupts * at reset time anymore, let's do it now. */ - kvmppc_xive_source_reset_one(&xive->source, i, &local_err); - if (local_err) { - error_report_err(local_err); - return -1; + ret = kvmppc_xive_source_reset_one(&xive->source, i, &local_err); + if (ret < 0) { + goto fail; } - kvmppc_xive_set_source_config(xive, i, &xive->eat[i], &local_err); - if (local_err) { - error_report_err(local_err); - return -1; + ret = kvmppc_xive_set_source_config(xive, i, &xive->eat[i], &local_err); + if (ret < 0) { + goto fail; } } @@ -705,17 +682,21 @@ int kvmppc_xive_post_load(SpaprXive *xive, int version_id) CPU_FOREACH(cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - kvmppc_xive_cpu_set_state(spapr_cpu_state(cpu)->tctx, &local_err); - if (local_err) { - error_report_err(local_err); - return -1; + ret = kvmppc_xive_cpu_set_state(spapr_cpu_state(cpu)->tctx, &local_err); + if (ret < 0) { + goto fail; } } /* The source states will be restored when the machine starts running */ return 0; + +fail: + error_report_err(local_err); + return ret; } +/* Returns MAP_FAILED on error and sets errno */ static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len, Error **errp) { @@ -726,7 +707,6 @@ static void *kvmppc_xive_mmap(SpaprXive *xive, int pgoff, size_t len, pgoff << page_shift); if (addr == MAP_FAILED) { error_setg_errno(errp, errno, "XIVE: unable to set memory mapping"); - return NULL; } return addr; @@ -741,10 +721,12 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, { SpaprXive *xive = SPAPR_XIVE(intc); XiveSource *xsrc = &xive->source; - Error *local_err = NULL; - size_t esb_len = (1ull << xsrc->esb_shift) * xsrc->nr_irqs; + size_t esb_len = xive_source_esb_len(xsrc); size_t tima_len = 4ull << TM_SHIFT; CPUState *cs; + int fd; + void *addr; + int ret; /* * The KVM XIVE device already in use. This is the case when @@ -760,18 +742,20 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, } /* First, create the KVM XIVE device */ - xive->fd = kvm_create_device(kvm_state, KVM_DEV_TYPE_XIVE, false); - if (xive->fd < 0) { - error_setg_errno(errp, -xive->fd, "XIVE: error creating KVM device"); + fd = kvm_create_device(kvm_state, KVM_DEV_TYPE_XIVE, false); + if (fd < 0) { + error_setg_errno(errp, -fd, "XIVE: error creating KVM device"); return -1; } + xive->fd = fd; /* Tell KVM about the # of VCPUs we may have */ if (kvm_device_check_attr(xive->fd, KVM_DEV_XIVE_GRP_CTRL, KVM_DEV_XIVE_NR_SERVERS)) { - if (kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_CTRL, - KVM_DEV_XIVE_NR_SERVERS, &nr_servers, true, - &local_err)) { + ret = kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_CTRL, + KVM_DEV_XIVE_NR_SERVERS, &nr_servers, true, + errp); + if (ret < 0) { goto fail; } } @@ -779,14 +763,14 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, /* * 1. Source ESB pages - KVM mapping */ - xsrc->esb_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len, - &local_err); - if (local_err) { + addr = kvmppc_xive_mmap(xive, KVM_XIVE_ESB_PAGE_OFFSET, esb_len, errp); + if (addr == MAP_FAILED) { goto fail; } + xsrc->esb_mmap = addr; memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc), - "xive.esb", esb_len, xsrc->esb_mmap); + "xive.esb-kvm", esb_len, xsrc->esb_mmap); memory_region_add_subregion_overlap(&xsrc->esb_mmio, 0, &xsrc->esb_mmio_kvm, 1); @@ -797,11 +781,12 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, /* * 3. TIMA pages - KVM mapping */ - xive->tm_mmap = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len, - &local_err); - if (local_err) { + addr = kvmppc_xive_mmap(xive, KVM_XIVE_TIMA_PAGE_OFFSET, tima_len, errp); + if (addr == MAP_FAILED) { goto fail; } + xive->tm_mmap = addr; + memory_region_init_ram_device_ptr(&xive->tm_mmio_kvm, OBJECT(xive), "xive.tima", tima_len, xive->tm_mmap); memory_region_add_subregion_overlap(&xive->tm_mmio, 0, @@ -814,15 +799,15 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, CPU_FOREACH(cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - kvmppc_xive_cpu_connect(spapr_cpu_state(cpu)->tctx, &local_err); - if (local_err) { + ret = kvmppc_xive_cpu_connect(spapr_cpu_state(cpu)->tctx, errp); + if (ret < 0) { goto fail; } } /* Update the KVM sources */ - kvmppc_xive_source_reset(xsrc, &local_err); - if (local_err) { + ret = kvmppc_xive_source_reset(xsrc, errp); + if (ret < 0) { goto fail; } @@ -832,7 +817,6 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, return 0; fail: - error_propagate(errp, local_err); kvmppc_xive_disconnect(intc); return -1; } @@ -843,14 +827,11 @@ void kvmppc_xive_disconnect(SpaprInterruptController *intc) XiveSource *xsrc; size_t esb_len; - /* The KVM XIVE device is not in use */ - if (!xive || xive->fd == -1) { - return; - } + assert(xive->fd != -1); /* Clear the KVM mapping */ xsrc = &xive->source; - esb_len = (1ull << xsrc->esb_shift) * xsrc->nr_irqs; + esb_len = xive_source_esb_len(xsrc); if (xsrc->esb_mmap) { memory_region_del_subregion(&xsrc->esb_mmio, &xsrc->esb_mmio_kvm); @@ -871,10 +852,8 @@ void kvmppc_xive_disconnect(SpaprInterruptController *intc) * and removed from the list of devices of the VM. The VCPU * presenters are also detached from the device. */ - if (xive->fd != -1) { - close(xive->fd); - xive->fd = -1; - } + close(xive->fd); + xive->fd = -1; kvm_kernel_irqchip = false; kvm_msi_via_irqfd_allowed = false; diff --git a/hw/intc/xive.c b/hw/intc/xive.c index 9a162431e0..489e6256ef 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -592,6 +592,17 @@ static const char * const xive_tctx_ring_names[] = { "USER", "OS", "POOL", "PHYS", }; +/* + * kvm_irqchip_in_kernel() will cause the compiler to turn this + * info a nop if CONFIG_KVM isn't defined. + */ +#define xive_in_kernel(xptr) \ + (kvm_irqchip_in_kernel() && \ + ({ \ + XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr); \ + xpc->in_kernel ? xpc->in_kernel(xptr) : false; \ + })) + void xive_tctx_pic_print_info(XiveTCTX *tctx, Monitor *mon) { int cpu_index; @@ -606,7 +617,7 @@ void xive_tctx_pic_print_info(XiveTCTX *tctx, Monitor *mon) cpu_index = tctx->cs ? tctx->cs->cpu_index : -1; - if (kvm_irqchip_in_kernel()) { + if (xive_in_kernel(tctx->xptr)) { Error *local_err = NULL; kvmppc_xive_cpu_synchronize_state(tctx, &local_err); @@ -651,7 +662,6 @@ static void xive_tctx_realize(DeviceState *dev, Error **errp) XiveTCTX *tctx = XIVE_TCTX(dev); PowerPCCPU *cpu; CPUPPCState *env; - Error *local_err = NULL; assert(tctx->cs); assert(tctx->xptr); @@ -671,10 +681,8 @@ static void xive_tctx_realize(DeviceState *dev, Error **errp) } /* Connect the presenter to the VCPU (required for CPU hotplug) */ - if (kvm_irqchip_in_kernel()) { - kvmppc_xive_cpu_connect(tctx, &local_err); - if (local_err) { - error_propagate(errp, local_err); + if (xive_in_kernel(tctx->xptr)) { + if (kvmppc_xive_cpu_connect(tctx, errp) < 0) { return; } } @@ -682,13 +690,15 @@ static void xive_tctx_realize(DeviceState *dev, Error **errp) static int vmstate_xive_tctx_pre_save(void *opaque) { + XiveTCTX *tctx = XIVE_TCTX(opaque); Error *local_err = NULL; + int ret; - if (kvm_irqchip_in_kernel()) { - kvmppc_xive_cpu_get_state(XIVE_TCTX(opaque), &local_err); - if (local_err) { + if (xive_in_kernel(tctx->xptr)) { + ret = kvmppc_xive_cpu_get_state(tctx, &local_err); + if (ret < 0) { error_report_err(local_err); - return -1; + return ret; } } @@ -697,17 +707,19 @@ static int vmstate_xive_tctx_pre_save(void *opaque) static int vmstate_xive_tctx_post_load(void *opaque, int version_id) { + XiveTCTX *tctx = XIVE_TCTX(opaque); Error *local_err = NULL; + int ret; - if (kvm_irqchip_in_kernel()) { + if (xive_in_kernel(tctx->xptr)) { /* * Required for hotplugged CPU, for which the state comes * after all states of the machine. */ - kvmppc_xive_cpu_set_state(XIVE_TCTX(opaque), &local_err); - if (local_err) { + ret = kvmppc_xive_cpu_set_state(tctx, &local_err); + if (ret < 0) { error_report_err(local_err); - return -1; + return ret; } } @@ -1128,6 +1140,7 @@ static void xive_source_reset(void *dev) static void xive_source_realize(DeviceState *dev, Error **errp) { XiveSource *xsrc = XIVE_SOURCE(dev); + size_t esb_len = xive_source_esb_len(xsrc); assert(xsrc->xive); @@ -1147,11 +1160,11 @@ static void xive_source_realize(DeviceState *dev, Error **errp) xsrc->status = g_malloc0(xsrc->nr_irqs); xsrc->lsi_map = bitmap_new(xsrc->nr_irqs); - if (!kvm_irqchip_in_kernel()) { - memory_region_init_io(&xsrc->esb_mmio, OBJECT(xsrc), - &xive_source_esb_ops, xsrc, "xive.esb", - (1ull << xsrc->esb_shift) * xsrc->nr_irqs); - } + memory_region_init(&xsrc->esb_mmio, OBJECT(xsrc), "xive.esb", esb_len); + memory_region_init_io(&xsrc->esb_mmio_emulated, OBJECT(xsrc), + &xive_source_esb_ops, xsrc, "xive.esb-emulated", + esb_len); + memory_region_add_subregion(&xsrc->esb_mmio, 0, &xsrc->esb_mmio_emulated); qemu_register_reset(xive_source_reset, dev); } @@ -1502,7 +1515,7 @@ static bool xive_presenter_notify(XiveFabric *xfb, uint8_t format, /* * Notification using the END ESe/ESn bit (Event State Buffer for - * escalation and notification). Profide futher coalescing in the + * escalation and notification). Provide further coalescing in the * Router. */ static bool xive_router_end_es_notify(XiveRouter *xrtr, uint8_t end_blk, @@ -1581,7 +1594,7 @@ static void xive_router_end_notify(XiveRouter *xrtr, uint8_t end_blk, /* * Check the END ESn (Event State Buffer for notification) for - * even futher coalescing in the Router + * even further coalescing in the Router */ if (!xive_end_is_notify(&end)) { /* ESn[Q]=1 : end of notification */ @@ -1660,7 +1673,7 @@ do_escalation: /* * Check the END ESe (Event State Buffer for escalation) for even - * futher coalescing in the Router + * further coalescing in the Router */ if (!xive_end_is_uncond_escalation(&end)) { /* ESe[Q]=1 : end of notification */ diff --git a/hw/lm32/milkymist-hw.h b/hw/lm32/milkymist-hw.h index 05e2c2a5a7..5dca5d52f5 100644 --- a/hw/lm32/milkymist-hw.h +++ b/hw/lm32/milkymist-hw.h @@ -31,17 +31,6 @@ static inline DeviceState *milkymist_hpdmc_create(hwaddr base) return dev; } -static inline DeviceState *milkymist_memcard_create(hwaddr base) -{ - DeviceState *dev; - - dev = qdev_new("milkymist-memcard"); - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); - - return dev; -} - static inline DeviceState *milkymist_vgafb_create(hwaddr base, uint32_t fb_offset, uint32_t fb_mask) { diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c index 85913bb68b..9f8fe9fef1 100644 --- a/hw/lm32/milkymist.c +++ b/hw/lm32/milkymist.c @@ -34,6 +34,7 @@ #include "elf.h" #include "milkymist-hw.h" #include "hw/display/milkymist_tmu2.h" +#include "hw/sd/sd.h" #include "lm32.h" #include "exec/address-spaces.h" #include "qemu/cutils.h" @@ -80,6 +81,29 @@ static void main_cpu_reset(void *opaque) env->deba = reset_info->flash_base; } +static DeviceState *milkymist_memcard_create(hwaddr base) +{ + DeviceState *dev; + DriveInfo *dinfo; + + dev = qdev_new("milkymist-memcard"); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); + + dinfo = drive_get_next(IF_SD); + if (dinfo) { + DeviceState *card; + + card = qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo), + &error_fatal); + qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + } + + return dev; +} + static void milkymist_init(MachineState *machine) { diff --git a/hw/nvram/chrp_nvram.c b/hw/nvram/chrp_nvram.c index d969f26704..d4d10a7c03 100644 --- a/hw/nvram/chrp_nvram.c +++ b/hw/nvram/chrp_nvram.c @@ -21,14 +21,21 @@ #include "qemu/osdep.h" #include "qemu/cutils.h" +#include "qemu/error-report.h" #include "hw/nvram/chrp_nvram.h" #include "sysemu/sysemu.h" -static int chrp_nvram_set_var(uint8_t *nvram, int addr, const char *str) +static int chrp_nvram_set_var(uint8_t *nvram, int addr, const char *str, + int max_len) { int len; len = strlen(str) + 1; + + if (max_len < len) { + return -1; + } + memcpy(&nvram[addr], str, len); return addr + len; @@ -38,19 +45,26 @@ static int chrp_nvram_set_var(uint8_t *nvram, int addr, const char *str) * Create a "system partition", used for the Open Firmware * environment variables. */ -int chrp_nvram_create_system_partition(uint8_t *data, int min_len) +int chrp_nvram_create_system_partition(uint8_t *data, int min_len, int max_len) { ChrpNvramPartHdr *part_header; unsigned int i; int end; + if (max_len < sizeof(*part_header)) { + goto fail; + } + part_header = (ChrpNvramPartHdr *)data; part_header->signature = CHRP_NVPART_SYSTEM; pstrcpy(part_header->name, sizeof(part_header->name), "system"); end = sizeof(ChrpNvramPartHdr); for (i = 0; i < nb_prom_envs; i++) { - end = chrp_nvram_set_var(data, end, prom_envs[i]); + end = chrp_nvram_set_var(data, end, prom_envs[i], max_len - end); + if (end == -1) { + goto fail; + } } /* End marker */ @@ -65,6 +79,10 @@ int chrp_nvram_create_system_partition(uint8_t *data, int min_len) chrp_nvram_finish_partition(part_header, end); return end; + +fail: + error_report("NVRAM is too small. Try to pass less data to -prom-env"); + exit(EXIT_FAILURE); } /** diff --git a/hw/nvram/mac_nvram.c b/hw/nvram/mac_nvram.c index beec1c4e4d..11f2d31cdb 100644 --- a/hw/nvram/mac_nvram.c +++ b/hw/nvram/mac_nvram.c @@ -141,7 +141,7 @@ static void pmac_format_nvram_partition_of(MacIONVRAMState *nvr, int off, /* OpenBIOS nvram variables partition */ sysp_end = chrp_nvram_create_system_partition(&nvr->data[off], - DEF_SYSTEM_SIZE) + off; + DEF_SYSTEM_SIZE, len) + off; /* Free space partition */ chrp_nvram_create_free_partition(&nvr->data[sysp_end], len - sysp_end); diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c index 15d08281d4..386513499f 100644 --- a/hw/nvram/spapr_nvram.c +++ b/hw/nvram/spapr_nvram.c @@ -188,7 +188,8 @@ static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp) } } else if (nb_prom_envs > 0) { /* Create a system partition to pass the -prom-env variables */ - chrp_nvram_create_system_partition(nvram->buf, MIN_NVRAM_SIZE / 4); + chrp_nvram_create_system_partition(nvram->buf, MIN_NVRAM_SIZE / 4, + nvram->size); chrp_nvram_create_free_partition(&nvram->buf[MIN_NVRAM_SIZE / 4], nvram->size - MIN_NVRAM_SIZE / 4); } diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 0ae293ec94..dd2fa4826b 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -558,7 +558,8 @@ static int spapr_dt_dynamic_reconfiguration_memory(SpaprMachineState *spapr, int nb_numa_nodes = machine->numa_state->num_nodes; int ret, i, offset; uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE; - uint32_t prop_lmb_size[] = {0, cpu_to_be32(lmb_size)}; + uint32_t prop_lmb_size[] = {cpu_to_be32(lmb_size >> 32), + cpu_to_be32(lmb_size & 0xffffffff)}; uint32_t *int_buf, *cur_index, buf_len; int nr_nodes = nb_numa_nodes ? nb_numa_nodes : 1; MemoryDeviceInfoList *dimms = NULL; @@ -905,7 +906,8 @@ static void spapr_dt_rtas(SpaprMachineState *spapr, void *fdt) uint32_t lrdr_capacity[] = { cpu_to_be32(max_device_addr >> 32), cpu_to_be32(max_device_addr & 0xffffffff), - 0, cpu_to_be32(SPAPR_MEMORY_BLOCK_SIZE), + cpu_to_be32(SPAPR_MEMORY_BLOCK_SIZE >> 32), + cpu_to_be32(SPAPR_MEMORY_BLOCK_SIZE & 0xffffffff), cpu_to_be32(ms->smp.max_cpus / ms->smp.threads), }; uint32_t maxdomain = cpu_to_be32(spapr->gpu_numa_id > 1 ? 1 : 0); @@ -4580,14 +4582,25 @@ static void spapr_machine_latest_class_options(MachineClass *mc) type_init(spapr_machine_register_##suffix) /* + * pseries-5.2 + */ +static void spapr_machine_5_2_class_options(MachineClass *mc) +{ + /* Defaults for the latest behaviour inherited from the base class */ +} + +DEFINE_SPAPR_MACHINE(5_2, "5.2", true); + +/* * pseries-5.1 */ static void spapr_machine_5_1_class_options(MachineClass *mc) { - /* Defaults for the latest behaviour inherited from the base class */ + spapr_machine_5_2_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_5_1, hw_compat_5_1_len); } -DEFINE_SPAPR_MACHINE(5_1, "5.1", true); +DEFINE_SPAPR_MACHINE(5_1, "5.1", false); /* * pseries-5.0 diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index 3225fc5a2e..10a80a8159 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -180,24 +180,24 @@ static void spapr_cap_set_pagesize(Object *obj, Visitor *v, const char *name, static void cap_htm_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); if (!val) { /* TODO: We don't support disabling htm yet */ return; } if (tcg_enabled()) { - error_setg(errp, - "No Transactional Memory support in TCG," - " try appending -machine cap-htm=off"); + error_setg(errp, "No Transactional Memory support in TCG"); + error_append_hint(errp, "Try appending -machine cap-htm=off\n"); } else if (kvm_enabled() && !kvmppc_has_cap_htm()) { error_setg(errp, -"KVM implementation does not support Transactional Memory," - " try appending -machine cap-htm=off" - ); + "KVM implementation does not support Transactional Memory"); + error_append_hint(errp, "Try appending -machine cap-htm=off\n"); } } static void cap_vsx_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); PowerPCCPU *cpu = POWERPC_CPU(first_cpu); CPUPPCState *env = &cpu->env; @@ -209,13 +209,14 @@ static void cap_vsx_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) * rid of anything that doesn't do VMX */ g_assert(env->insns_flags & PPC_ALTIVEC); if (!(env->insns_flags2 & PPC2_VSX)) { - error_setg(errp, "VSX support not available," - " try appending -machine cap-vsx=off"); + error_setg(errp, "VSX support not available"); + error_append_hint(errp, "Try appending -machine cap-vsx=off\n"); } } static void cap_dfp_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); PowerPCCPU *cpu = POWERPC_CPU(first_cpu); CPUPPCState *env = &cpu->env; @@ -224,8 +225,8 @@ static void cap_dfp_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) return; } if (!(env->insns_flags2 & PPC2_DFP)) { - error_setg(errp, "DFP support not available," - " try appending -machine cap-dfp=off"); + error_setg(errp, "DFP support not available"); + error_append_hint(errp, "Try appending -machine cap-dfp=off\n"); } } @@ -239,6 +240,7 @@ SpaprCapPossible cap_cfpc_possible = { static void cap_safe_cache_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); uint8_t kvm_val = kvmppc_get_cap_safe_cache(); if (tcg_enabled() && val) { @@ -247,9 +249,9 @@ static void cap_safe_cache_apply(SpaprMachineState *spapr, uint8_t val, cap_cfpc_possible.vals[val]); } else if (kvm_enabled() && (val > kvm_val)) { error_setg(errp, - "Requested safe cache capability level not supported by kvm," - " try appending -machine cap-cfpc=%s", - cap_cfpc_possible.vals[kvm_val]); + "Requested safe cache capability level not supported by KVM"); + error_append_hint(errp, "Try appending -machine cap-cfpc=%s\n", + cap_cfpc_possible.vals[kvm_val]); } } @@ -263,6 +265,7 @@ SpaprCapPossible cap_sbbc_possible = { static void cap_safe_bounds_check_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); uint8_t kvm_val = kvmppc_get_cap_safe_bounds_check(); if (tcg_enabled() && val) { @@ -271,9 +274,9 @@ static void cap_safe_bounds_check_apply(SpaprMachineState *spapr, uint8_t val, cap_sbbc_possible.vals[val]); } else if (kvm_enabled() && (val > kvm_val)) { error_setg(errp, -"Requested safe bounds check capability level not supported by kvm," - " try appending -machine cap-sbbc=%s", - cap_sbbc_possible.vals[kvm_val]); +"Requested safe bounds check capability level not supported by KVM"); + error_append_hint(errp, "Try appending -machine cap-sbbc=%s\n", + cap_sbbc_possible.vals[kvm_val]); } } @@ -290,6 +293,7 @@ SpaprCapPossible cap_ibs_possible = { static void cap_safe_indirect_branch_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); uint8_t kvm_val = kvmppc_get_cap_safe_indirect_branch(); if (tcg_enabled() && val) { @@ -298,9 +302,9 @@ static void cap_safe_indirect_branch_apply(SpaprMachineState *spapr, cap_ibs_possible.vals[val]); } else if (kvm_enabled() && (val > kvm_val)) { error_setg(errp, -"Requested safe indirect branch capability level not supported by kvm," - " try appending -machine cap-ibs=%s", - cap_ibs_possible.vals[kvm_val]); +"Requested safe indirect branch capability level not supported by KVM"); + error_append_hint(errp, "Try appending -machine cap-ibs=%s\n", + cap_ibs_possible.vals[kvm_val]); } } @@ -377,23 +381,35 @@ static void cap_hpt_maxpagesize_cpu_apply(SpaprMachineState *spapr, static void cap_nested_kvm_hv_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); + PowerPCCPU *cpu = POWERPC_CPU(first_cpu); + if (!val) { /* capability disabled by default */ return; } if (tcg_enabled()) { - error_setg(errp, - "No Nested KVM-HV support in tcg," - " try appending -machine cap-nested-hv=off"); + error_setg(errp, "No Nested KVM-HV support in TCG"); + error_append_hint(errp, "Try appending -machine cap-nested-hv=off\n"); } else if (kvm_enabled()) { + if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_00, 0, + spapr->max_compat_pvr)) { + error_setg(errp, "Nested KVM-HV only supported on POWER9"); + error_append_hint(errp, + "Try appending -machine max-cpu-compat=power9\n"); + return; + } + if (!kvmppc_has_cap_nested_kvm_hv()) { error_setg(errp, -"KVM implementation does not support Nested KVM-HV," - " try appending -machine cap-nested-hv=off"); + "KVM implementation does not support Nested KVM-HV"); + error_append_hint(errp, + "Try appending -machine cap-nested-hv=off\n"); } else if (kvmppc_set_cap_nested_kvm_hv(val) < 0) { - error_setg(errp, -"Error enabling cap-nested-hv with KVM, try cap-nested-hv=off"); + error_setg(errp, "Error enabling cap-nested-hv with KVM"); + error_append_hint(errp, + "Try appending -machine cap-nested-hv=off\n"); } } } @@ -401,6 +417,7 @@ static void cap_nested_kvm_hv_apply(SpaprMachineState *spapr, static void cap_large_decr_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); PowerPCCPU *cpu = POWERPC_CPU(first_cpu); PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); @@ -411,22 +428,23 @@ static void cap_large_decr_apply(SpaprMachineState *spapr, if (tcg_enabled()) { if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_00, 0, spapr->max_compat_pvr)) { - error_setg(errp, - "Large decrementer only supported on POWER9, try -cpu POWER9"); + error_setg(errp, "Large decrementer only supported on POWER9"); + error_append_hint(errp, "Try -cpu POWER9\n"); return; } } else if (kvm_enabled()) { int kvm_nr_bits = kvmppc_get_cap_large_decr(); if (!kvm_nr_bits) { - error_setg(errp, - "No large decrementer support," - " try appending -machine cap-large-decr=off"); + error_setg(errp, "No large decrementer support"); + error_append_hint(errp, + "Try appending -machine cap-large-decr=off\n"); } else if (pcc->lrg_decr_bits != kvm_nr_bits) { error_setg(errp, -"KVM large decrementer size (%d) differs to model (%d)," - " try appending -machine cap-large-decr=off", - kvm_nr_bits, pcc->lrg_decr_bits); + "KVM large decrementer size (%d) differs to model (%d)", + kvm_nr_bits, pcc->lrg_decr_bits); + error_append_hint(errp, + "Try appending -machine cap-large-decr=off\n"); } } } @@ -435,14 +453,15 @@ static void cap_large_decr_cpu_apply(SpaprMachineState *spapr, PowerPCCPU *cpu, uint8_t val, Error **errp) { + ERRP_GUARD(); CPUPPCState *env = &cpu->env; target_ulong lpcr = env->spr[SPR_LPCR]; if (kvm_enabled()) { if (kvmppc_enable_cap_large_decr(cpu, val)) { - error_setg(errp, - "No large decrementer support," - " try appending -machine cap-large-decr=off"); + error_setg(errp, "No large decrementer support"); + error_append_hint(errp, + "Try appending -machine cap-large-decr=off\n"); } } @@ -457,6 +476,7 @@ static void cap_large_decr_cpu_apply(SpaprMachineState *spapr, static void cap_ccf_assist_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); uint8_t kvm_val = kvmppc_get_cap_count_cache_flush_assist(); if (tcg_enabled() && val) { @@ -479,14 +499,15 @@ static void cap_ccf_assist_apply(SpaprMachineState *spapr, uint8_t val, return; } error_setg(errp, -"Requested count cache flush assist capability level not supported by kvm," - " try appending -machine cap-ccf-assist=off"); + "Requested count cache flush assist capability level not supported by KVM"); + error_append_hint(errp, "Try appending -machine cap-ccf-assist=off\n"); } } static void cap_fwnmi_apply(SpaprMachineState *spapr, uint8_t val, Error **errp) { + ERRP_GUARD(); if (!val) { return; /* Disabled by default */ } diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 2f8f7d62f8..72bb938375 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -139,6 +139,7 @@ SpaprIrq spapr_irq_dual = { static int spapr_irq_check(SpaprMachineState *spapr, Error **errp) { + ERRP_GUARD(); MachineState *machine = MACHINE(spapr); /* @@ -179,14 +180,19 @@ static int spapr_irq_check(SpaprMachineState *spapr, Error **errp) /* * On a POWER9 host, some older KVM XICS devices cannot be destroyed and - * re-created. Detect that early to avoid QEMU to exit later when the - * guest reboots. + * re-created. Same happens with KVM nested guests. Detect that early to + * avoid QEMU to exit later when the guest reboots. */ if (kvm_enabled() && spapr->irq == &spapr_irq_dual && kvm_kernel_irqchip_required() && xics_kvm_has_broken_disconnect(spapr)) { - error_setg(errp, "KVM is too old to support ic-mode=dual,kernel-irqchip=on"); + error_setg(errp, + "KVM is incompatible with ic-mode=dual,kernel-irqchip=on"); + error_append_hint(errp, + "This can happen with an old KVM or in a KVM nested guest.\n"); + error_append_hint(errp, + "Try without kernel-irqchip or with kernel-irqchip=off.\n"); return -1; } diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 363cdb3f7b..0a418f1e67 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -1796,6 +1796,7 @@ static void spapr_phb_destroy_msi(gpointer opaque) static void spapr_phb_realize(DeviceState *dev, Error **errp) { + ERRP_GUARD(); /* We don't use SPAPR_MACHINE() in order to exit gracefully if the user * tries to add a sPAPR PHB to a non-pseries machine. */ @@ -1813,7 +1814,6 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp) uint64_t msi_window_size = 4096; SpaprTceTable *tcet; const unsigned windows_supported = spapr_phb_windows_supported(sphb); - Error *local_err = NULL; if (!spapr) { error_setg(errp, TYPE_SPAPR_PCI_HOST_BRIDGE " needs a pseries machine"); @@ -1964,13 +1964,12 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp) /* Initialize the LSI table */ for (i = 0; i < PCI_NUM_PINS; i++) { - uint32_t irq = SPAPR_IRQ_PCI_LSI + sphb->index * PCI_NUM_PINS + i; + int irq = SPAPR_IRQ_PCI_LSI + sphb->index * PCI_NUM_PINS + i; if (smc->legacy_irq_allocation) { - irq = spapr_irq_findone(spapr, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, - "can't allocate LSIs: "); + irq = spapr_irq_findone(spapr, errp); + if (irq < 0) { + error_prepend(errp, "can't allocate LSIs: "); /* * Older machines will never support PHB hotplug, ie, this is an * init only path and QEMU will terminate. No need to rollback. @@ -1979,9 +1978,8 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp) } } - spapr_irq_claim(spapr, irq, true, &local_err); - if (local_err) { - error_propagate_prepend(errp, local_err, "can't allocate LSIs: "); + if (spapr_irq_claim(spapr, irq, true, errp) < 0) { + error_prepend(errp, "can't allocate LSIs: "); goto unrealize; } diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index e5682c38a9..18301e6fa5 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -60,9 +60,9 @@ #include <libfdt.h> #if defined(TARGET_RISCV32) -# define BIOS_FILENAME "opensbi-riscv32-sifive_u-fw_jump.bin" +# define BIOS_FILENAME "opensbi-riscv32-generic-fw_dynamic.bin" #else -# define BIOS_FILENAME "opensbi-riscv64-sifive_u-fw_jump.bin" +# define BIOS_FILENAME "opensbi-riscv64-generic-fw_dynamic.bin" #endif static const struct MemmapEntry { @@ -72,6 +72,7 @@ static const struct MemmapEntry { [SIFIVE_U_DEBUG] = { 0x0, 0x100 }, [SIFIVE_U_MROM] = { 0x1000, 0xf000 }, [SIFIVE_U_CLINT] = { 0x2000000, 0x10000 }, + [SIFIVE_U_L2CC] = { 0x2010000, 0x1000 }, [SIFIVE_U_L2LIM] = { 0x8000000, 0x2000000 }, [SIFIVE_U_PLIC] = { 0xc000000, 0x4000000 }, [SIFIVE_U_PRCI] = { 0x10000000, 0x1000 }, @@ -302,6 +303,24 @@ static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, qemu_fdt_setprop_string(fdt, nodename, "compatible", "gpio-restart"); g_free(nodename); + nodename = g_strdup_printf("/soc/cache-controller@%lx", + (long)memmap[SIFIVE_U_L2CC].base); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_cells(fdt, nodename, "reg", + 0x0, memmap[SIFIVE_U_L2CC].base, + 0x0, memmap[SIFIVE_U_L2CC].size); + qemu_fdt_setprop_cells(fdt, nodename, "interrupts", + SIFIVE_U_L2CC_IRQ0, SIFIVE_U_L2CC_IRQ1, SIFIVE_U_L2CC_IRQ2); + qemu_fdt_setprop_cell(fdt, nodename, "interrupt-parent", plic_phandle); + qemu_fdt_setprop(fdt, nodename, "cache-unified", NULL, 0); + qemu_fdt_setprop_cell(fdt, nodename, "cache-size", 2097152); + qemu_fdt_setprop_cell(fdt, nodename, "cache-sets", 1024); + qemu_fdt_setprop_cell(fdt, nodename, "cache-level", 2); + qemu_fdt_setprop_cell(fdt, nodename, "cache-block-size", 64); + qemu_fdt_setprop_string(fdt, nodename, "compatible", + "sifive,fu540-c000-ccache"); + g_free(nodename); + phy_phandle = phandle++; nodename = g_strdup_printf("/soc/ethernet@%lx", (long)memmap[SIFIVE_U_GEM].base); @@ -733,6 +752,9 @@ static void sifive_u_soc_realize(DeviceState *dev, Error **errp) create_unimplemented_device("riscv.sifive.u.dmc", memmap[SIFIVE_U_DMC].base, memmap[SIFIVE_U_DMC].size); + + create_unimplemented_device("riscv.sifive.u.l2cc", + memmap[SIFIVE_U_L2CC].base, memmap[SIFIVE_U_L2CC].size); } static Property sifive_u_soc_props[] = { diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index 7b23a297fc..13958bdbeb 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -42,10 +42,15 @@ #include "sysemu/qtest.h" #include "sysemu/sysemu.h" +/* + * Not like other RISC-V machines that use plain binary bios images, + * keeping ELF files here was intentional because BIN files don't work + * for the Spike machine as HTIF emulation depends on ELF parsing. + */ #if defined(TARGET_RISCV32) -# define BIOS_FILENAME "opensbi-riscv32-spike-fw_jump.elf" +# define BIOS_FILENAME "opensbi-riscv32-generic-fw_dynamic.elf" #else -# define BIOS_FILENAME "opensbi-riscv64-spike-fw_jump.elf" +# define BIOS_FILENAME "opensbi-riscv64-generic-fw_dynamic.elf" #endif static const struct MemmapEntry { diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 55a907bb35..6e91cf129e 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -43,9 +43,9 @@ #include "hw/pci-host/gpex.h" #if defined(TARGET_RISCV32) -# define BIOS_FILENAME "opensbi-riscv32-virt-fw_jump.bin" +# define BIOS_FILENAME "opensbi-riscv32-generic-fw_dynamic.bin" #else -# define BIOS_FILENAME "opensbi-riscv64-virt-fw_jump.bin" +# define BIOS_FILENAME "opensbi-riscv64-generic-fw_dynamic.bin" #endif static const struct MemmapEntry { diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index e72c61d2ea..f4ea6a9545 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -801,14 +801,26 @@ bool css_migration_enabled(void) } \ type_init(ccw_machine_register_##suffix) +static void ccw_machine_5_2_instance_options(MachineState *machine) +{ +} + +static void ccw_machine_5_2_class_options(MachineClass *mc) +{ +} +DEFINE_CCW_MACHINE(5_2, "5.2", true); + static void ccw_machine_5_1_instance_options(MachineState *machine) { + ccw_machine_5_2_instance_options(machine); } static void ccw_machine_5_1_class_options(MachineClass *mc) { + ccw_machine_5_2_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_5_1, hw_compat_5_1_len); } -DEFINE_CCW_MACHINE(5_1, "5.1", true); +DEFINE_CCW_MACHINE(5_1, "5.1", false); static void ccw_machine_5_0_instance_options(MachineState *machine) { diff --git a/hw/sd/allwinner-sdhost.c b/hw/sd/allwinner-sdhost.c index f404e1fdb4..f9eb92c09e 100644 --- a/hw/sd/allwinner-sdhost.c +++ b/hw/sd/allwinner-sdhost.c @@ -333,16 +333,11 @@ static uint32_t allwinner_sdhost_process_desc(AwSdHostState *s, if (is_write) { cpu_physical_memory_read((desc->addr & DESC_SIZE_MASK) + num_done, buf, buf_bytes); - - for (uint32_t i = 0; i < buf_bytes; i++) { - sdbus_write_data(&s->sdbus, buf[i]); - } + sdbus_write_data(&s->sdbus, buf, buf_bytes); /* Read from SD bus */ } else { - for (uint32_t i = 0; i < buf_bytes; i++) { - buf[i] = sdbus_read_data(&s->sdbus); - } + sdbus_read_data(&s->sdbus, buf, buf_bytes); cpu_physical_memory_write((desc->addr & DESC_SIZE_MASK) + num_done, buf, buf_bytes); } @@ -521,10 +516,8 @@ static uint64_t allwinner_sdhost_read(void *opaque, hwaddr offset, break; case REG_SD_FIFO: /* Read/Write FIFO */ if (sdbus_data_ready(&s->sdbus)) { - res = sdbus_read_data(&s->sdbus); - res |= sdbus_read_data(&s->sdbus) << 8; - res |= sdbus_read_data(&s->sdbus) << 16; - res |= sdbus_read_data(&s->sdbus) << 24; + sdbus_read_data(&s->sdbus, &res, sizeof(uint32_t)); + le32_to_cpus(&res); allwinner_sdhost_update_transfer_cnt(s, sizeof(uint32_t)); allwinner_sdhost_auto_stop(s); allwinner_sdhost_update_irq(s); @@ -548,6 +541,7 @@ static void allwinner_sdhost_write(void *opaque, hwaddr offset, uint64_t value, unsigned size) { AwSdHostState *s = AW_SDHOST(opaque); + uint32_t u32; trace_allwinner_sdhost_write(offset, value, size); @@ -654,11 +648,9 @@ static void allwinner_sdhost_write(void *opaque, hwaddr offset, s->startbit_detect = value; break; case REG_SD_FIFO: /* Read/Write FIFO */ - sdbus_write_data(&s->sdbus, value & 0xff); - sdbus_write_data(&s->sdbus, (value >> 8) & 0xff); - sdbus_write_data(&s->sdbus, (value >> 16) & 0xff); - sdbus_write_data(&s->sdbus, (value >> 24) & 0xff); - allwinner_sdhost_update_transfer_cnt(s, sizeof(uint32_t)); + u32 = cpu_to_le32(value); + sdbus_write_data(&s->sdbus, &u32, sizeof(u32)); + allwinner_sdhost_update_transfer_cnt(s, sizeof(u32)); allwinner_sdhost_auto_stop(s); allwinner_sdhost_update_irq(s); break; diff --git a/hw/sd/bcm2835_sdhost.c b/hw/sd/bcm2835_sdhost.c index 4a80fbcc86..2c7a675a2d 100644 --- a/hw/sd/bcm2835_sdhost.c +++ b/hw/sd/bcm2835_sdhost.c @@ -190,7 +190,7 @@ static void bcm2835_sdhost_fifo_run(BCM2835SDHostState *s) if (is_read) { n = 0; while (s->datacnt && s->fifo_len < BCM2835_SDHOST_FIFO_LEN) { - value |= (uint32_t)sdbus_read_data(&s->sdbus) << (n * 8); + value |= (uint32_t)sdbus_read_byte(&s->sdbus) << (n * 8); s->datacnt--; n++; if (n == 4) { @@ -223,7 +223,7 @@ static void bcm2835_sdhost_fifo_run(BCM2835SDHostState *s) } n--; s->datacnt--; - sdbus_write_data(&s->sdbus, value & 0xff); + sdbus_write_byte(&s->sdbus, value & 0xff); value >>= 8; } } diff --git a/hw/sd/core.c b/hw/sd/core.c index abec48bccb..957d116f1a 100644 --- a/hw/sd/core.c +++ b/hw/sd/core.c @@ -102,7 +102,7 @@ int sdbus_do_command(SDBus *sdbus, SDRequest *req, uint8_t *response) return 0; } -void sdbus_write_data(SDBus *sdbus, uint8_t value) +void sdbus_write_byte(SDBus *sdbus, uint8_t value) { SDState *card = get_card(sdbus); @@ -110,11 +110,26 @@ void sdbus_write_data(SDBus *sdbus, uint8_t value) if (card) { SDCardClass *sc = SD_CARD_GET_CLASS(card); - sc->write_data(card, value); + sc->write_byte(card, value); } } -uint8_t sdbus_read_data(SDBus *sdbus) +void sdbus_write_data(SDBus *sdbus, const void *buf, size_t length) +{ + SDState *card = get_card(sdbus); + const uint8_t *data = buf; + + if (card) { + SDCardClass *sc = SD_CARD_GET_CLASS(card); + + for (size_t i = 0; i < length; i++) { + trace_sdbus_write(sdbus_name(sdbus), data[i]); + sc->write_byte(card, data[i]); + } + } +} + +uint8_t sdbus_read_byte(SDBus *sdbus) { SDState *card = get_card(sdbus); uint8_t value = 0; @@ -122,13 +137,28 @@ uint8_t sdbus_read_data(SDBus *sdbus) if (card) { SDCardClass *sc = SD_CARD_GET_CLASS(card); - value = sc->read_data(card); + value = sc->read_byte(card); } trace_sdbus_read(sdbus_name(sdbus), value); return value; } +void sdbus_read_data(SDBus *sdbus, void *buf, size_t length) +{ + SDState *card = get_card(sdbus); + uint8_t *data = buf; + + if (card) { + SDCardClass *sc = SD_CARD_GET_CLASS(card); + + for (size_t i = 0; i < length; i++) { + data[i] = sc->read_byte(card); + trace_sdbus_read(sdbus_name(sdbus), data[i]); + } + } +} + bool sdbus_data_ready(SDBus *sdbus) { SDState *card = get_card(sdbus); diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c index 11f61294fc..be89a93876 100644 --- a/hw/sd/milkymist-memcard.c +++ b/hw/sd/milkymist-memcard.c @@ -66,6 +66,8 @@ enum { #define MILKYMIST_MEMCARD(obj) \ OBJECT_CHECK(MilkymistMemcardState, (obj), TYPE_MILKYMIST_MEMCARD) +#define TYPE_MILKYMIST_SDBUS "milkymist-sdbus" + struct MilkymistMemcardState { SysBusDevice parent_obj; @@ -149,11 +151,8 @@ static uint64_t memcard_read(void *opaque, hwaddr addr, if (!s->enabled) { r = 0xffffffff; } else { - r = 0; - r |= sdbus_read_data(&s->sdbus) << 24; - r |= sdbus_read_data(&s->sdbus) << 16; - r |= sdbus_read_data(&s->sdbus) << 8; - r |= sdbus_read_data(&s->sdbus); + sdbus_read_data(&s->sdbus, &r, sizeof(r)); + be32_to_cpus(&r); } break; case R_CLK2XDIV: @@ -179,6 +178,7 @@ static void memcard_write(void *opaque, hwaddr addr, uint64_t value, unsigned size) { MilkymistMemcardState *s = opaque; + uint32_t val32; trace_milkymist_memcard_memory_write(addr, value); @@ -207,10 +207,8 @@ static void memcard_write(void *opaque, hwaddr addr, uint64_t value, if (!s->enabled) { break; } - sdbus_write_data(&s->sdbus, (value >> 24) & 0xff); - sdbus_write_data(&s->sdbus, (value >> 16) & 0xff); - sdbus_write_data(&s->sdbus, (value >> 8) & 0xff); - sdbus_write_data(&s->sdbus, value & 0xff); + val32 = cpu_to_be32(value); + sdbus_write_data(&s->sdbus, &val32, sizeof(val32)); break; case R_ENABLE: s->regs[addr] = value; @@ -253,6 +251,19 @@ static void milkymist_memcard_reset(DeviceState *d) } } +static void milkymist_memcard_set_readonly(DeviceState *dev, bool level) +{ + qemu_log_mask(LOG_UNIMP, + "milkymist_memcard: read-only mode not supported\n"); +} + +static void milkymist_memcard_set_inserted(DeviceState *dev, bool level) +{ + MilkymistMemcardState *s = MILKYMIST_MEMCARD(dev); + + s->enabled = !!level; +} + static void milkymist_memcard_init(Object *obj) { MilkymistMemcardState *s = MILKYMIST_MEMCARD(obj); @@ -261,30 +272,9 @@ static void milkymist_memcard_init(Object *obj) memory_region_init_io(&s->regs_region, OBJECT(s), &memcard_mmio_ops, s, "milkymist-memcard", R_MAX * 4); sysbus_init_mmio(dev, &s->regs_region); -} - -static void milkymist_memcard_realize(DeviceState *dev, Error **errp) -{ - MilkymistMemcardState *s = MILKYMIST_MEMCARD(dev); - DeviceState *carddev; - BlockBackend *blk; - DriveInfo *dinfo; - Error *err = NULL; qbus_create_inplace(&s->sdbus, sizeof(s->sdbus), TYPE_SD_BUS, - dev, "sd-bus"); - - /* Create and plug in the sd card */ - /* FIXME use a qdev drive property instead of drive_get_next() */ - dinfo = drive_get_next(IF_SD); - blk = dinfo ? blk_by_legacy_dinfo(dinfo) : NULL; - carddev = qdev_new(TYPE_SD_CARD); - qdev_prop_set_drive(carddev, "drive", blk); - if (!qdev_realize_and_unref(carddev, BUS(&s->sdbus), &err)) { - error_propagate_prepend(errp, err, "failed to init SD card"); - return; - } - s->enabled = blk && blk_is_inserted(blk); + DEVICE(obj), "sd-bus"); } static const VMStateDescription vmstate_milkymist_memcard = { @@ -308,10 +298,9 @@ static void milkymist_memcard_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); - dc->realize = milkymist_memcard_realize; dc->reset = milkymist_memcard_reset; dc->vmsd = &vmstate_milkymist_memcard; - /* Reason: init() method uses drive_get_next() */ + /* Reason: output IRQs should be wired up */ dc->user_creatable = false; } @@ -323,9 +312,25 @@ static const TypeInfo milkymist_memcard_info = { .class_init = milkymist_memcard_class_init, }; +static void milkymist_sdbus_class_init(ObjectClass *klass, void *data) +{ + SDBusClass *sbc = SD_BUS_CLASS(klass); + + sbc->set_inserted = milkymist_memcard_set_inserted; + sbc->set_readonly = milkymist_memcard_set_readonly; +} + +static const TypeInfo milkymist_sdbus_info = { + .name = TYPE_MILKYMIST_SDBUS, + .parent = TYPE_SD_BUS, + .instance_size = sizeof(SDBus), + .class_init = milkymist_sdbus_class_init, +}; + static void milkymist_memcard_register_types(void) { type_register_static(&milkymist_memcard_info); + type_register_static(&milkymist_sdbus_info); } type_init(milkymist_memcard_register_types) diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c index 4088a8a80b..1f946908fe 100644 --- a/hw/sd/omap_mmc.c +++ b/hw/sd/omap_mmc.c @@ -23,7 +23,7 @@ #include "qemu/log.h" #include "hw/irq.h" #include "hw/arm/omap.h" -#include "hw/sd/sd.h" +#include "hw/sd/sdcard_legacy.h" struct omap_mmc_s { qemu_irq irq; @@ -232,10 +232,10 @@ static void omap_mmc_transfer(struct omap_mmc_s *host) if (host->fifo_len > host->af_level) break; - value = sd_read_data(host->card); + value = sd_read_byte(host->card); host->fifo[(host->fifo_start + host->fifo_len) & 31] = value; if (-- host->blen_counter) { - value = sd_read_data(host->card); + value = sd_read_byte(host->card); host->fifo[(host->fifo_start + host->fifo_len) & 31] |= value << 8; host->blen_counter --; @@ -247,10 +247,10 @@ static void omap_mmc_transfer(struct omap_mmc_s *host) break; value = host->fifo[host->fifo_start] & 0xff; - sd_write_data(host->card, value); + sd_write_byte(host->card, value); if (-- host->blen_counter) { value = host->fifo[host->fifo_start] >> 8; - sd_write_data(host->card, value); + sd_write_byte(host->card, value); host->blen_counter --; } diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index 2b3776a6a0..579d68ad83 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -15,27 +15,22 @@ #include "hw/sd/sd.h" #include "qemu/log.h" #include "qemu/module.h" +#include "qemu/error-report.h" #include "qapi/error.h" - -//#define DEBUG_PL181 1 - -#ifdef DEBUG_PL181 -#define DPRINTF(fmt, ...) \ -do { printf("pl181: " fmt , ## __VA_ARGS__); } while (0) -#else -#define DPRINTF(fmt, ...) do {} while(0) -#endif +#include "trace.h" #define PL181_FIFO_LEN 16 #define TYPE_PL181 "pl181" #define PL181(obj) OBJECT_CHECK(PL181State, (obj), TYPE_PL181) +#define TYPE_PL181_BUS "pl181-bus" + typedef struct PL181State { SysBusDevice parent_obj; MemoryRegion iomem; - SDState *card; + SDBus sdbus; uint32_t clock; uint32_t power; uint32_t cmdarg; @@ -56,10 +51,11 @@ typedef struct PL181State { http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=4446/1 */ int32_t linux_hack; - uint32_t fifo[PL181_FIFO_LEN]; + uint32_t fifo[PL181_FIFO_LEN]; /* TODO use Fifo32 */ qemu_irq irq[2]; /* GPIO outputs for 'card is readonly' and 'card inserted' */ - qemu_irq cardstatus[2]; + qemu_irq card_readonly; + qemu_irq card_inserted; } PL181State; static const VMStateDescription vmstate_pl181 = { @@ -148,13 +144,13 @@ static void pl181_fifo_push(PL181State *s, uint32_t value) int n; if (s->fifo_len == PL181_FIFO_LEN) { - fprintf(stderr, "pl181: FIFO overflow\n"); + error_report("%s: FIFO overflow", __func__); return; } n = (s->fifo_pos + s->fifo_len) & (PL181_FIFO_LEN - 1); s->fifo_len++; s->fifo[n] = value; - DPRINTF("FIFO push %08x\n", (int)value); + trace_pl181_fifo_push(value); } static uint32_t pl181_fifo_pop(PL181State *s) @@ -162,17 +158,17 @@ static uint32_t pl181_fifo_pop(PL181State *s) uint32_t value; if (s->fifo_len == 0) { - fprintf(stderr, "pl181: FIFO underflow\n"); + error_report("%s: FIFO underflow", __func__); return 0; } value = s->fifo[s->fifo_pos]; s->fifo_len--; s->fifo_pos = (s->fifo_pos + 1) & (PL181_FIFO_LEN - 1); - DPRINTF("FIFO pop %08x\n", (int)value); + trace_pl181_fifo_pop(value); return value; } -static void pl181_send_command(PL181State *s) +static void pl181_do_command(PL181State *s) { SDRequest request; uint8_t response[16]; @@ -180,8 +176,8 @@ static void pl181_send_command(PL181State *s) request.cmd = s->cmd & PL181_CMD_INDEX; request.arg = s->cmdarg; - DPRINTF("Command %d %08x\n", request.cmd, request.arg); - rlen = sd_do_command(s->card, &request, response); + trace_pl181_command_send(request.cmd, request.arg); + rlen = sdbus_do_command(&s->sdbus, &request, response); if (rlen < 0) goto error; if (s->cmd & PL181_CMD_RESPONSE) { @@ -197,16 +193,16 @@ static void pl181_send_command(PL181State *s) s->response[2] = ldl_be_p(&response[8]); s->response[3] = ldl_be_p(&response[12]) & ~1; } - DPRINTF("Response received\n"); + trace_pl181_command_response_pending(); s->status |= PL181_STATUS_CMDRESPEND; } else { - DPRINTF("Command sent\n"); + trace_pl181_command_sent(); s->status |= PL181_STATUS_CMDSENT; } return; error: - DPRINTF("Timeout\n"); + trace_pl181_command_timeout(); s->status |= PL181_STATUS_CMDTIMEOUT; } @@ -222,12 +218,12 @@ static void pl181_fifo_run(PL181State *s) int is_read; is_read = (s->datactrl & PL181_DATA_DIRECTION) != 0; - if (s->datacnt != 0 && (!is_read || sd_data_ready(s->card)) + if (s->datacnt != 0 && (!is_read || sdbus_data_ready(&s->sdbus)) && !s->linux_hack) { if (is_read) { n = 0; while (s->datacnt && s->fifo_len < PL181_FIFO_LEN) { - value |= (uint32_t)sd_read_data(s->card) << (n * 8); + value |= (uint32_t)sdbus_read_byte(&s->sdbus) << (n * 8); s->datacnt--; n++; if (n == 4) { @@ -248,7 +244,7 @@ static void pl181_fifo_run(PL181State *s) } n--; s->datacnt--; - sd_write_data(s->card, value & 0xff); + sdbus_write_byte(&s->sdbus, value & 0xff); value >>= 8; } } @@ -258,11 +254,11 @@ static void pl181_fifo_run(PL181State *s) s->status |= PL181_STATUS_DATAEND; /* HACK: */ s->status |= PL181_STATUS_DATABLOCKEND; - DPRINTF("Transfer Complete\n"); + trace_pl181_fifo_transfer_complete(); } if (s->datacnt == 0 && s->fifo_len == 0) { s->datactrl &= ~PL181_DATA_ENABLE; - DPRINTF("Data engine idle\n"); + trace_pl181_data_engine_idle(); } else { /* Update FIFO bits. */ bits = PL181_STATUS_TXACTIVE | PL181_STATUS_RXACTIVE; @@ -401,7 +397,7 @@ static void pl181_write(void *opaque, hwaddr offset, qemu_log_mask(LOG_UNIMP, "pl181: Pending commands not implemented\n"); } else { - pl181_send_command(s); + pl181_do_command(s); pl181_fifo_run(s); } /* The command has completed one way or the other. */ @@ -454,6 +450,20 @@ static const MemoryRegionOps pl181_ops = { .endianness = DEVICE_NATIVE_ENDIAN, }; +static void pl181_set_readonly(DeviceState *dev, bool level) +{ + PL181State *s = (PL181State *)dev; + + qemu_set_irq(s->card_readonly, level); +} + +static void pl181_set_inserted(DeviceState *dev, bool level) +{ + PL181State *s = (PL181State *)dev; + + qemu_set_irq(s->card_inserted, level); +} + static void pl181_reset(DeviceState *d) { PL181State *s = PL181(d); @@ -477,12 +487,9 @@ static void pl181_reset(DeviceState *d) s->mask[0] = 0; s->mask[1] = 0; - /* We can assume our GPIO outputs have been wired up now */ - sd_set_cb(s->card, s->cardstatus[0], s->cardstatus[1]); - /* Since we're still using the legacy SD API the card is not plugged - * into any bus, and we must reset it manually. - */ - device_legacy_reset(DEVICE(s->card)); + /* Reset other state based on current card insertion/readonly status */ + pl181_set_inserted(DEVICE(s), sdbus_get_inserted(&s->sdbus)); + pl181_set_readonly(DEVICE(s), sdbus_get_readonly(&s->sdbus)); } static void pl181_init(Object *obj) @@ -495,20 +502,11 @@ static void pl181_init(Object *obj) sysbus_init_mmio(sbd, &s->iomem); sysbus_init_irq(sbd, &s->irq[0]); sysbus_init_irq(sbd, &s->irq[1]); - qdev_init_gpio_out(dev, s->cardstatus, 2); -} + qdev_init_gpio_out_named(dev, &s->card_readonly, "card-read-only", 1); + qdev_init_gpio_out_named(dev, &s->card_inserted, "card-inserted", 1); -static void pl181_realize(DeviceState *dev, Error **errp) -{ - PL181State *s = PL181(dev); - DriveInfo *dinfo; - - /* FIXME use a qdev drive property instead of drive_get_next() */ - dinfo = drive_get_next(IF_SD); - s->card = sd_init(dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, false); - if (s->card == NULL) { - error_setg(errp, "sd_init failed"); - } + qbus_create_inplace(&s->sdbus, sizeof(s->sdbus), + TYPE_PL181_BUS, dev, "sd-bus"); } static void pl181_class_init(ObjectClass *klass, void *data) @@ -517,9 +515,8 @@ static void pl181_class_init(ObjectClass *klass, void *data) k->vmsd = &vmstate_pl181; k->reset = pl181_reset; - /* Reason: init() method uses drive_get_next() */ + /* Reason: output IRQs should be wired up */ k->user_creatable = false; - k->realize = pl181_realize; } static const TypeInfo pl181_info = { @@ -530,9 +527,25 @@ static const TypeInfo pl181_info = { .class_init = pl181_class_init, }; +static void pl181_bus_class_init(ObjectClass *klass, void *data) +{ + SDBusClass *sbc = SD_BUS_CLASS(klass); + + sbc->set_inserted = pl181_set_inserted; + sbc->set_readonly = pl181_set_readonly; +} + +static const TypeInfo pl181_bus_info = { + .name = TYPE_PL181_BUS, + .parent = TYPE_SD_BUS, + .instance_size = sizeof(SDBus), + .class_init = pl181_bus_class_init, +}; + static void pl181_register_types(void) { type_register_static(&pl181_info); + type_register_static(&pl181_bus_info); } type_init(pl181_register_types) diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c index 68bed24480..04f0a98f81 100644 --- a/hw/sd/pxa2xx_mmci.c +++ b/hw/sd/pxa2xx_mmci.c @@ -184,7 +184,7 @@ static void pxa2xx_mmci_fifo_update(PXA2xxMMCIState *s) if (s->cmdat & CMDAT_WR_RD) { while (s->bytesleft && s->tx_len) { - sdbus_write_data(&s->sdbus, s->tx_fifo[s->tx_start++]); + sdbus_write_byte(&s->sdbus, s->tx_fifo[s->tx_start++]); s->tx_start &= 0x1f; s->tx_len --; s->bytesleft --; @@ -194,7 +194,7 @@ static void pxa2xx_mmci_fifo_update(PXA2xxMMCIState *s) } else while (s->bytesleft && s->rx_len < 32) { s->rx_fifo[(s->rx_start + (s->rx_len ++)) & 0x1f] = - sdbus_read_data(&s->sdbus); + sdbus_read_byte(&s->sdbus); s->bytesleft --; s->intreq |= INT_RXFIFO_REQ; } @@ -476,15 +476,12 @@ static const MemoryRegionOps pxa2xx_mmci_ops = { PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem, hwaddr base, - BlockBackend *blk, qemu_irq irq, - qemu_irq rx_dma, qemu_irq tx_dma) + qemu_irq irq, qemu_irq rx_dma, qemu_irq tx_dma) { - DeviceState *dev, *carddev; + DeviceState *dev; SysBusDevice *sbd; - PXA2xxMMCIState *s; dev = qdev_new(TYPE_PXA2XX_MMCI); - s = PXA2XX_MMCI(dev); sbd = SYS_BUS_DEVICE(dev); sysbus_mmio_map(sbd, 0, base); sysbus_connect_irq(sbd, 0, irq); @@ -492,13 +489,7 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem, qdev_connect_gpio_out_named(dev, "tx-dma", 0, tx_dma); sysbus_realize_and_unref(sbd, &error_fatal); - /* Create and plug in the sd card */ - carddev = qdev_new(TYPE_SD_CARD); - qdev_prop_set_drive_err(carddev, "drive", blk, &error_fatal); - qdev_realize_and_unref(carddev, qdev_get_child_bus(dev, "sd-bus"), - &error_fatal); - - return s; + return PXA2XX_MMCI(dev); } static void pxa2xx_mmci_set_inserted(DeviceState *dev, bool inserted) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index fad9cf1ee7..483c4f1720 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -37,6 +37,7 @@ #include "hw/registerfields.h" #include "sysemu/block-backend.h" #include "hw/sd/sd.h" +#include "hw/sd/sdcard_legacy.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/bitmap.h" @@ -50,6 +51,8 @@ //#define DEBUG_SD 1 +#define SDSC_MAX_CAPACITY (2 * GiB) + typedef enum { sd_r0 = 0, /* no response */ sd_r1, /* normal response command */ @@ -313,7 +316,7 @@ static void sd_ocr_powerup(void *opaque) /* card power-up OK */ sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1); - if (sd->size > 1 * GiB) { + if (sd->size > SDSC_MAX_CAPACITY) { sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1); } } @@ -385,7 +388,7 @@ static void sd_set_csd(SDState *sd, uint64_t size) uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1; uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1; - if (size <= 1 * GiB) { /* Standard Capacity SD */ + if (size <= SDSC_MAX_CAPACITY) { /* Standard Capacity SD */ sd->csd[0] = 0x00; /* CSD structure */ sd->csd[1] = 0x26; /* Data read access-time-1 */ sd->csd[2] = 0x00; /* Data read access-time-2 */ @@ -806,11 +809,12 @@ static void sd_function_switch(SDState *sd, uint32_t arg) sd->data[11] = 0x43; sd->data[12] = 0x80; /* Supported group 1 functions */ sd->data[13] = 0x03; + for (i = 0; i < 6; i ++) { new_func = (arg >> (i * 4)) & 0x0f; if (mode && new_func != 0x0f) sd->function_group[i] = new_func; - sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4); + sd->data[16 - (i >> 1)] |= new_func << ((i % 2) * 4); } memset(&sd->data[17], 0, 47); stw_be_p(sd->data + 64, sd_crc16(sd->data, 64)); @@ -1808,7 +1812,7 @@ static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len) #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len) #define APP_WRITE_BLOCK(a, len) -void sd_write_data(SDState *sd, uint8_t value) +void sd_write_byte(SDState *sd, uint8_t value) { int i; @@ -1817,7 +1821,7 @@ void sd_write_data(SDState *sd, uint8_t value) if (sd->state != sd_receivingdata_state) { qemu_log_mask(LOG_GUEST_ERROR, - "sd_write_data: not in Receiving-Data state\n"); + "%s: not in Receiving-Data state\n", __func__); return; } @@ -1939,7 +1943,7 @@ void sd_write_data(SDState *sd, uint8_t value) break; default: - qemu_log_mask(LOG_GUEST_ERROR, "sd_write_data: unknown command\n"); + qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__); break; } } @@ -1958,7 +1962,7 @@ static const uint8_t sd_tuning_block_pattern[SD_TUNING_BLOCK_SIZE] = { 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde, }; -uint8_t sd_read_data(SDState *sd) +uint8_t sd_read_byte(SDState *sd) { /* TODO: Append CRCs */ uint8_t ret; @@ -1969,7 +1973,7 @@ uint8_t sd_read_data(SDState *sd) if (sd->state != sd_sendingdata_state) { qemu_log_mask(LOG_GUEST_ERROR, - "sd_read_data: not in Sending-Data state\n"); + "%s: not in Sending-Data state\n", __func__); return 0x00; } @@ -2075,14 +2079,14 @@ uint8_t sd_read_data(SDState *sd) break; default: - qemu_log_mask(LOG_GUEST_ERROR, "sd_read_data: unknown command\n"); + qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__); return 0x00; } return ret; } -bool sd_data_ready(SDState *sd) +static bool sd_data_ready(SDState *sd) { return sd->state == sd_sendingdata_state; } @@ -2191,8 +2195,8 @@ static void sd_class_init(ObjectClass *klass, void *data) sc->get_dat_lines = sd_get_dat_lines; sc->get_cmd_line = sd_get_cmd_line; sc->do_command = sd_do_command; - sc->write_data = sd_write_data; - sc->read_data = sd_read_data; + sc->write_byte = sd_write_byte; + sc->read_byte = sd_read_byte; sc->data_ready = sd_data_ready; sc->enable = sd_enable; sc->get_inserted = sd_get_inserted; diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index deac181865..1785d7e1f7 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -399,8 +399,6 @@ static void sdhci_end_transfer(SDHCIState *s) /* Fill host controller's read buffer with BLKSIZE bytes of data from card */ static void sdhci_read_block_from_card(SDHCIState *s) { - int index = 0; - uint8_t data; const uint16_t blk_size = s->blksize & BLOCK_SIZE_MASK; if ((s->trnmod & SDHC_TRNS_MULTI) && @@ -408,12 +406,9 @@ static void sdhci_read_block_from_card(SDHCIState *s) return; } - for (index = 0; index < blk_size; index++) { - data = sdbus_read_data(&s->sdbus); - if (!FIELD_EX32(s->hostctl2, SDHC_HOSTCTL2, EXECUTE_TUNING)) { - /* Device is not in tuning */ - s->fifo_buffer[index] = data; - } + if (!FIELD_EX32(s->hostctl2, SDHC_HOSTCTL2, EXECUTE_TUNING)) { + /* Device is not in tuning */ + sdbus_read_data(&s->sdbus, s->fifo_buffer, blk_size); } if (FIELD_EX32(s->hostctl2, SDHC_HOSTCTL2, EXECUTE_TUNING)) { @@ -496,8 +491,6 @@ static uint32_t sdhci_read_dataport(SDHCIState *s, unsigned size) /* Write data from host controller FIFO to card */ static void sdhci_write_block_to_card(SDHCIState *s) { - int index = 0; - if (s->prnsts & SDHC_SPACE_AVAILABLE) { if (s->norintstsen & SDHC_NISEN_WBUFRDY) { s->norintsts |= SDHC_NIS_WBUFRDY; @@ -514,9 +507,7 @@ static void sdhci_write_block_to_card(SDHCIState *s) } } - for (index = 0; index < (s->blksize & BLOCK_SIZE_MASK); index++) { - sdbus_write_data(&s->sdbus, s->fifo_buffer[index]); - } + sdbus_write_data(&s->sdbus, s->fifo_buffer, s->blksize & BLOCK_SIZE_MASK); /* Next data can be written through BUFFER DATORT register */ s->prnsts |= SDHC_SPACE_AVAILABLE; @@ -578,7 +569,7 @@ static void sdhci_write_dataport(SDHCIState *s, uint32_t value, unsigned size) static void sdhci_sdma_transfer_multi_blocks(SDHCIState *s) { bool page_aligned = false; - unsigned int n, begin; + unsigned int begin; const uint16_t block_size = s->blksize & BLOCK_SIZE_MASK; uint32_t boundary_chk = 1 << (((s->blksize & ~BLOCK_SIZE_MASK) >> 12) + 12); uint32_t boundary_count = boundary_chk - (s->sdmasysad % boundary_chk); @@ -600,9 +591,7 @@ static void sdhci_sdma_transfer_multi_blocks(SDHCIState *s) SDHC_DAT_LINE_ACTIVE; while (s->blkcnt) { if (s->data_count == 0) { - for (n = 0; n < block_size; n++) { - s->fifo_buffer[n] = sdbus_read_data(&s->sdbus); - } + sdbus_read_data(&s->sdbus, s->fifo_buffer, block_size); } begin = s->data_count; if (((boundary_count + begin) < block_size) && page_aligned) { @@ -641,9 +630,7 @@ static void sdhci_sdma_transfer_multi_blocks(SDHCIState *s) &s->fifo_buffer[begin], s->data_count - begin); s->sdmasysad += s->data_count - begin; if (s->data_count == block_size) { - for (n = 0; n < block_size; n++) { - sdbus_write_data(&s->sdbus, s->fifo_buffer[n]); - } + sdbus_write_data(&s->sdbus, s->fifo_buffer, block_size); s->data_count = 0; if (s->trnmod & SDHC_TRNS_BLK_CNT_EN) { s->blkcnt--; @@ -668,19 +655,14 @@ static void sdhci_sdma_transfer_multi_blocks(SDHCIState *s) /* single block SDMA transfer */ static void sdhci_sdma_transfer_single_block(SDHCIState *s) { - int n; uint32_t datacnt = s->blksize & BLOCK_SIZE_MASK; if (s->trnmod & SDHC_TRNS_READ) { - for (n = 0; n < datacnt; n++) { - s->fifo_buffer[n] = sdbus_read_data(&s->sdbus); - } + sdbus_read_data(&s->sdbus, s->fifo_buffer, datacnt); dma_memory_write(s->dma_as, s->sdmasysad, s->fifo_buffer, datacnt); } else { dma_memory_read(s->dma_as, s->sdmasysad, s->fifo_buffer, datacnt); - for (n = 0; n < datacnt; n++) { - sdbus_write_data(&s->sdbus, s->fifo_buffer[n]); - } + sdbus_write_data(&s->sdbus, s->fifo_buffer, datacnt); } s->blkcnt--; @@ -739,7 +721,7 @@ static void get_adma_description(SDHCIState *s, ADMADescr *dscr) static void sdhci_do_adma(SDHCIState *s) { - unsigned int n, begin, length; + unsigned int begin, length; const uint16_t block_size = s->blksize & BLOCK_SIZE_MASK; ADMADescr dscr = {}; int i; @@ -773,9 +755,7 @@ static void sdhci_do_adma(SDHCIState *s) if (s->trnmod & SDHC_TRNS_READ) { while (length) { if (s->data_count == 0) { - for (n = 0; n < block_size; n++) { - s->fifo_buffer[n] = sdbus_read_data(&s->sdbus); - } + sdbus_read_data(&s->sdbus, s->fifo_buffer, block_size); } begin = s->data_count; if ((length + begin) < block_size) { @@ -814,9 +794,7 @@ static void sdhci_do_adma(SDHCIState *s) s->data_count - begin); dscr.addr += s->data_count - begin; if (s->data_count == block_size) { - for (n = 0; n < block_size; n++) { - sdbus_write_data(&s->sdbus, s->fifo_buffer[n]); - } + sdbus_write_data(&s->sdbus, s->fifo_buffer, block_size); s->data_count = 0; if (s->trnmod & SDHC_TRNS_BLK_CNT_EN) { s->blkcnt--; diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 9210ef567f..a7ef9cb922 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -190,7 +190,7 @@ static uint32_t ssi_sd_transfer(SSISlave *dev, uint32_t val) s->mode = SSI_SD_DATA_READ; return 0xfe; case SSI_SD_DATA_READ: - val = sdbus_read_data(&s->sdbus); + val = sdbus_read_byte(&s->sdbus); if (!sdbus_data_ready(&s->sdbus)) { DPRINTF("Data read end\n"); s->mode = SSI_SD_CMD; diff --git a/hw/sd/trace-events b/hw/sd/trace-events index 5f09d32eb2..a87d7355fb 100644 --- a/hw/sd/trace-events +++ b/hw/sd/trace-events @@ -62,3 +62,13 @@ milkymist_memcard_memory_write(uint32_t addr, uint32_t value) "addr 0x%08x value # pxa2xx_mmci.c pxa2xx_mmci_read(uint8_t size, uint32_t addr, uint32_t value) "size %d addr 0x%02x value 0x%08x" pxa2xx_mmci_write(uint8_t size, uint32_t addr, uint32_t value) "size %d addr 0x%02x value 0x%08x" + +# pl181.c +pl181_command_send(uint8_t cmd, uint32_t arg) "sending CMD%02d arg 0x%08" PRIx32 +pl181_command_sent(void) "command sent" +pl181_command_response_pending(void) "response received" +pl181_command_timeout(void) "command timeouted" +pl181_fifo_push(uint32_t data) "FIFO push 0x%08" PRIx32 +pl181_fifo_pop(uint32_t data) "FIFO pop 0x%08" PRIx32 +pl181_fifo_transfer_complete(void) "FIFO transfer complete" +pl181_data_engine_idle(void) "data engine idle" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 9be930415f..cf7dfa4af5 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -143,7 +143,7 @@ static void nvram_init(Nvram *nvram, uint8_t *macaddr, memset(image, '\0', sizeof(image)); /* OpenBIOS nvram variables partition */ - sysp_end = chrp_nvram_create_system_partition(image, 0); + sysp_end = chrp_nvram_create_system_partition(image, 0, 0x1fd0); /* Free space partition */ chrp_nvram_create_free_partition(&image[sysp_end], 0x1fd0 - sysp_end); diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 9e30203dcc..37310b73e6 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -136,7 +136,7 @@ static int sun4u_NVRAM_set_params(Nvram *nvram, uint16_t NVRAM_size, memset(image, '\0', sizeof(image)); /* OpenBIOS nvram variables partition */ - sysp_end = chrp_nvram_create_system_partition(image, 0); + sysp_end = chrp_nvram_create_system_partition(image, 0, 0x1fd0); /* Free space partition */ chrp_nvram_create_free_partition(&image[sysp_end], 0x1fd0 - sysp_end); diff --git a/include/elf.h b/include/elf.h index 5b06b55f28..c117a4d1ab 100644 --- a/include/elf.h +++ b/include/elf.h @@ -558,6 +558,7 @@ typedef struct { #define PPC_FEATURE2_HTM_NOSC 0x01000000 #define PPC_FEATURE2_ARCH_3_00 0x00800000 #define PPC_FEATURE2_HAS_IEEE128 0x00400000 +#define PPC_FEATURE2_ARCH_3_10 0x00040000 /* Bits present in AT_HWCAP for Sparc. */ diff --git a/include/hw/arm/pxa.h b/include/hw/arm/pxa.h index 8843e5f910..d99b6192da 100644 --- a/include/hw/arm/pxa.h +++ b/include/hw/arm/pxa.h @@ -89,8 +89,7 @@ void pxa2xx_lcd_vsync_notifier(PXA2xxLCDState *s, qemu_irq handler); typedef struct PXA2xxMMCIState PXA2xxMMCIState; PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem, hwaddr base, - BlockBackend *blk, qemu_irq irq, - qemu_irq rx_dma, qemu_irq tx_dma); + qemu_irq irq, qemu_irq rx_dma, qemu_irq tx_dma); void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly, qemu_irq coverswitch); diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index ca4a4b1ad1..880dccd7c0 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -50,8 +50,15 @@ typedef struct SMMUTransTableInfo { uint64_t ttb; /* TT base address */ uint8_t tsz; /* input range, ie. 2^(64 -tsz)*/ uint8_t granule_sz; /* granule page shift */ + bool had; /* hierarchical attribute disable */ } SMMUTransTableInfo; +typedef struct SMMUTLBEntry { + IOMMUTLBEntry entry; + uint8_t level; + uint8_t granule; +} SMMUTLBEntry; + /* * Generic structure populated by derived SMMU devices * after decoding the configuration information and used as @@ -91,6 +98,8 @@ typedef struct SMMUPciBus { typedef struct SMMUIOTLBKey { uint64_t iova; uint16_t asid; + uint8_t tg; + uint8_t level; } SMMUIOTLBKey; typedef struct SMMUState { @@ -140,7 +149,7 @@ static inline uint16_t smmu_get_sid(SMMUDevice *sdev) * pair, according to @cfg translation config */ int smmu_ptw(SMMUTransCfg *cfg, dma_addr_t iova, IOMMUAccessFlags perm, - IOMMUTLBEntry *tlbe, SMMUPTWEventInfo *info); + SMMUTLBEntry *tlbe, SMMUPTWEventInfo *info); /** * select_tt - compute which translation table shall be used according to @@ -153,9 +162,15 @@ IOMMUMemoryRegion *smmu_iommu_mr(SMMUState *s, uint32_t sid); #define SMMU_IOTLB_MAX_SIZE 256 +SMMUTLBEntry *smmu_iotlb_lookup(SMMUState *bs, SMMUTransCfg *cfg, + SMMUTransTableInfo *tt, hwaddr iova); +void smmu_iotlb_insert(SMMUState *bs, SMMUTransCfg *cfg, SMMUTLBEntry *entry); +SMMUIOTLBKey smmu_get_iotlb_key(uint16_t asid, uint64_t iova, + uint8_t tg, uint8_t level); void smmu_iotlb_inv_all(SMMUState *s); void smmu_iotlb_inv_asid(SMMUState *s, uint16_t asid); -void smmu_iotlb_inv_iova(SMMUState *s, uint16_t asid, dma_addr_t iova); +void smmu_iotlb_inv_iova(SMMUState *s, int asid, dma_addr_t iova, + uint8_t tg, uint64_t num_pages, uint8_t ttl); /* Unmap the range of all the notifiers registered to any IOMMU mr */ void smmu_inv_notifiers_all(SMMUState *s); diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h index 36b2f45253..68d7a963e0 100644 --- a/include/hw/arm/smmuv3.h +++ b/include/hw/arm/smmuv3.h @@ -41,6 +41,7 @@ typedef struct SMMUv3State { uint32_t idr[6]; uint32_t iidr; + uint32_t aidr; uint32_t cr[3]; uint32_t cr0ack; uint32_t statusr; diff --git a/include/hw/boards.h b/include/hw/boards.h index 426ce5f625..bc5b82ad20 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -319,6 +319,9 @@ struct MachineState { } \ type_init(machine_initfn##_register_types) +extern GlobalProperty hw_compat_5_1[]; +extern const size_t hw_compat_5_1_len; + extern GlobalProperty hw_compat_5_0[]; extern const size_t hw_compat_5_0_len; diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 3d7ed3a55e..fe52e165b2 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -193,6 +193,9 @@ void pc_system_firmware_init(PCMachineState *pcms, MemoryRegion *rom_memory); void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, const CPUArchIdList *apic_ids, GArray *entry); +extern GlobalProperty pc_compat_5_1[]; +extern const size_t pc_compat_5_1_len; + extern GlobalProperty pc_compat_5_0[]; extern const size_t pc_compat_5_0_len; diff --git a/include/hw/intc/ibex_plic.h b/include/hw/intc/ibex_plic.h index ddc7909903..d8eb09b258 100644 --- a/include/hw/intc/ibex_plic.h +++ b/include/hw/intc/ibex_plic.h @@ -33,6 +33,7 @@ typedef struct IbexPlicState { MemoryRegion mmio; uint32_t *pending; + uint32_t *claimed; uint32_t *source; uint32_t *priority; uint32_t *enable; diff --git a/include/hw/nvram/chrp_nvram.h b/include/hw/nvram/chrp_nvram.h index 09941a9be4..4a0f5c21b8 100644 --- a/include/hw/nvram/chrp_nvram.h +++ b/include/hw/nvram/chrp_nvram.h @@ -50,7 +50,8 @@ chrp_nvram_finish_partition(ChrpNvramPartHdr *header, uint32_t size) header->checksum = sum & 0xff; } -int chrp_nvram_create_system_partition(uint8_t *data, int min_len); +/* chrp_nvram_create_system_partition() failure is fatal */ +int chrp_nvram_create_system_partition(uint8_t *data, int min_len, int max_len); int chrp_nvram_create_free_partition(uint8_t *data, int len); #endif diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index 93d09d68de..0ffbe0be02 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -80,15 +80,15 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, uint32_t nr_servers, Error **errp); void kvmppc_xive_disconnect(SpaprInterruptController *intc); void kvmppc_xive_reset(SpaprXive *xive, Error **errp); -void kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS *eas, - Error **errp); +int kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS *eas, + Error **errp); void kvmppc_xive_sync_source(SpaprXive *xive, uint32_t lisn, Error **errp); uint64_t kvmppc_xive_esb_rw(XiveSource *xsrc, int srcno, uint32_t offset, uint64_t data, bool write); -void kvmppc_xive_set_queue_config(SpaprXive *xive, uint8_t end_blk, +int kvmppc_xive_set_queue_config(SpaprXive *xive, uint8_t end_blk, uint32_t end_idx, XiveEND *end, Error **errp); -void kvmppc_xive_get_queue_config(SpaprXive *xive, uint8_t end_blk, +int kvmppc_xive_get_queue_config(SpaprXive *xive, uint8_t end_blk, uint32_t end_idx, XiveEND *end, Error **errp); void kvmppc_xive_synchronize_state(SpaprXive *xive, Error **errp); diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index 705cf48176..2c42ae92d2 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -191,6 +191,7 @@ typedef struct XiveSource { uint64_t esb_flags; uint32_t esb_shift; MemoryRegion esb_mmio; + MemoryRegion esb_mmio_emulated; /* KVM support */ void *esb_mmap; @@ -215,6 +216,11 @@ static inline bool xive_source_esb_has_2page(XiveSource *xsrc) xsrc->esb_shift == XIVE_ESB_4K_2PAGE; } +static inline size_t xive_source_esb_len(XiveSource *xsrc) +{ + return (1ull << xsrc->esb_shift) * xsrc->nr_irqs; +} + /* The trigger page is always the first/even page */ static inline hwaddr xive_source_esb_page(XiveSource *xsrc, uint32_t srcno) { @@ -396,6 +402,7 @@ typedef struct XivePresenterClass { uint8_t nvt_blk, uint32_t nvt_idx, bool cam_ignore, uint8_t priority, uint32_t logic_serv, XiveTCTXMatch *match); + bool (*in_kernel)(const XivePresenter *xptr); } XivePresenterClass; int xive_presenter_tctx_match(XivePresenter *xptr, XiveTCTX *tctx, @@ -480,9 +487,9 @@ void xive_tctx_ipb_update(XiveTCTX *tctx, uint8_t ring, uint8_t ipb); int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp); void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val); -void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp); -void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp); -void kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp); -void kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp); +int kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp); +int kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp); +int kvmppc_xive_cpu_get_state(XiveTCTX *tctx, Error **errp); +int kvmppc_xive_cpu_set_state(XiveTCTX *tctx, Error **errp); #endif /* PPC_XIVE_H */ diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 8f3a98cba6..528310bb22 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -238,6 +238,8 @@ extern const PropertyInfo qdev_prop_pcie_link_width; /* * Set properties between creation and realization. + * + * Returns: %true on success, %false on error. */ bool qdev_prop_set_drive_err(DeviceState *dev, const char *name, BlockBackend *value, Error **errp); diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h index aba4d0181f..d3c0c00d10 100644 --- a/include/hw/riscv/sifive_u.h +++ b/include/hw/riscv/sifive_u.h @@ -71,6 +71,7 @@ enum { SIFIVE_U_DEBUG, SIFIVE_U_MROM, SIFIVE_U_CLINT, + SIFIVE_U_L2CC, SIFIVE_U_L2LIM, SIFIVE_U_PLIC, SIFIVE_U_PRCI, @@ -86,6 +87,9 @@ enum { }; enum { + SIFIVE_U_L2CC_IRQ0 = 1, + SIFIVE_U_L2CC_IRQ1 = 2, + SIFIVE_U_L2CC_IRQ2 = 3, SIFIVE_U_UART0_IRQ = 4, SIFIVE_U_UART1_IRQ = 5, SIFIVE_U_GPIO_IRQ0 = 7, diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index a84b8e274a..ac02d61a7a 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -104,8 +104,23 @@ typedef struct { /*< public >*/ int (*do_command)(SDState *sd, SDRequest *req, uint8_t *response); - void (*write_data)(SDState *sd, uint8_t value); - uint8_t (*read_data)(SDState *sd); + /** + * Write a byte to a SD card. + * @sd: card + * @value: byte to write + * + * Write a byte on the data lines of a SD card. + */ + void (*write_byte)(SDState *sd, uint8_t value); + /** + * Read a byte from a SD card. + * @sd: card + * + * Read a byte from the data lines of a SD card. + * + * Return: byte value read + */ + uint8_t (*read_byte)(SDState *sd); bool (*data_ready)(SDState *sd); void (*set_voltage)(SDState *sd, uint16_t millivolts); uint8_t (*get_dat_lines)(SDState *sd); @@ -136,23 +151,6 @@ typedef struct { void (*set_readonly)(DeviceState *dev, bool readonly); } SDBusClass; -/* Legacy functions to be used only by non-qdevified callers */ -SDState *sd_init(BlockBackend *bs, bool is_spi); -int sd_do_command(SDState *sd, SDRequest *req, - uint8_t *response); -void sd_write_data(SDState *sd, uint8_t value); -uint8_t sd_read_data(SDState *sd); -void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert); -bool sd_data_ready(SDState *sd); -/* sd_enable should not be used -- it is only used on the nseries boards, - * where it is part of a broken implementation of the MMC card slot switch - * (there should be two card slots which are multiplexed to a single MMC - * controller, but instead we model it with one card and controller and - * disable the card when the second slot is selected, so it looks like the - * second slot is always empty). - */ -void sd_enable(SDState *sd, bool enable); - /* Functions to be used by qdevified callers (working via * an SDBus rather than directly with SDState) */ @@ -160,8 +158,41 @@ void sdbus_set_voltage(SDBus *sdbus, uint16_t millivolts); uint8_t sdbus_get_dat_lines(SDBus *sdbus); bool sdbus_get_cmd_line(SDBus *sdbus); int sdbus_do_command(SDBus *sd, SDRequest *req, uint8_t *response); -void sdbus_write_data(SDBus *sd, uint8_t value); -uint8_t sdbus_read_data(SDBus *sd); +/** + * Write a byte to a SD bus. + * @sd: bus + * @value: byte to write + * + * Write a byte on the data lines of a SD bus. + */ +void sdbus_write_byte(SDBus *sd, uint8_t value); +/** + * Read a byte from a SD bus. + * @sd: bus + * + * Read a byte from the data lines of a SD bus. + * + * Return: byte value read + */ +uint8_t sdbus_read_byte(SDBus *sd); +/** + * Write data to a SD bus. + * @sdbus: bus + * @buf: data to write + * @length: number of bytes to write + * + * Write multiple bytes of data on the data lines of a SD bus. + */ +void sdbus_write_data(SDBus *sdbus, const void *buf, size_t length); +/** + * Read data from a SD bus. + * @sdbus: bus + * @buf: buffer to read data into + * @length: number of bytes to read + * + * Read multiple bytes of data on the data lines of a SD bus. + */ +void sdbus_read_data(SDBus *sdbus, void *buf, size_t length); bool sdbus_data_ready(SDBus *sd); bool sdbus_get_inserted(SDBus *sd); bool sdbus_get_readonly(SDBus *sd); diff --git a/include/hw/sd/sdcard_legacy.h b/include/hw/sd/sdcard_legacy.h new file mode 100644 index 0000000000..0dc3889555 --- /dev/null +++ b/include/hw/sd/sdcard_legacy.h @@ -0,0 +1,50 @@ +/* + * SD Memory Card emulation (deprecated legacy API) + * + * Copyright (c) 2006 Andrzej Zaborowski <balrog@zabor.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef HW_SDCARD_LEGACY_H +#define HW_SDCARD_LEGACY_H + +#include "hw/sd/sd.h" + +/* Legacy functions to be used only by non-qdevified callers */ +SDState *sd_init(BlockBackend *blk, bool is_spi); +int sd_do_command(SDState *card, SDRequest *request, uint8_t *response); +void sd_write_byte(SDState *card, uint8_t value); +uint8_t sd_read_byte(SDState *card); +void sd_set_cb(SDState *card, qemu_irq readonly, qemu_irq insert); + +/* sd_enable should not be used -- it is only used on the nseries boards, + * where it is part of a broken implementation of the MMC card slot switch + * (there should be two card slots which are multiplexed to a single MMC + * controller, but instead we model it with one card and controller and + * disable the card when the second slot is selected, so it looks like the + * second slot is always empty). + */ +void sd_enable(SDState *card, bool enable); + +#endif /* HW_SDCARD_LEGACY_H */ diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 0019447892..f261563420 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -59,64 +59,100 @@ void mmap_fork_end(int child) pthread_mutex_unlock(&mmap_mutex); } +/* + * Validate target prot bitmask. + * Return the prot bitmask for the host in *HOST_PROT. + * Return 0 if the target prot bitmask is invalid, otherwise + * the internal qemu page_flags (which will include PAGE_VALID). + */ +static int validate_prot_to_pageflags(int *host_prot, int prot) +{ + int valid = PROT_READ | PROT_WRITE | PROT_EXEC | TARGET_PROT_SEM; + int page_flags = (prot & PAGE_BITS) | PAGE_VALID; + + /* + * For the host, we need not pass anything except read/write/exec. + * While PROT_SEM is allowed by all hosts, it is also ignored, so + * don't bother transforming guest bit to host bit. Any other + * target-specific prot bits will not be understood by the host + * and will need to be encoded into page_flags for qemu emulation. + * + * Pages that are executable by the guest will never be executed + * by the host, but the host will need to be able to read them. + */ + *host_prot = (prot & (PROT_READ | PROT_WRITE)) + | (prot & PROT_EXEC ? PROT_READ : 0); + + return prot & ~valid ? 0 : page_flags; +} + /* NOTE: all the constants are the HOST ones, but addresses are target. */ -int target_mprotect(abi_ulong start, abi_ulong len, int prot) +int target_mprotect(abi_ulong start, abi_ulong len, int target_prot) { abi_ulong end, host_start, host_end, addr; - int prot1, ret; + int prot1, ret, page_flags, host_prot; - trace_target_mprotect(start, len, prot); + trace_target_mprotect(start, len, target_prot); - if ((start & ~TARGET_PAGE_MASK) != 0) + if ((start & ~TARGET_PAGE_MASK) != 0) { return -TARGET_EINVAL; + } + page_flags = validate_prot_to_pageflags(&host_prot, target_prot); + if (!page_flags) { + return -TARGET_EINVAL; + } len = TARGET_PAGE_ALIGN(len); end = start + len; if (!guest_range_valid(start, len)) { return -TARGET_ENOMEM; } - prot &= PROT_READ | PROT_WRITE | PROT_EXEC; - if (len == 0) + if (len == 0) { return 0; + } mmap_lock(); host_start = start & qemu_host_page_mask; host_end = HOST_PAGE_ALIGN(end); if (start > host_start) { /* handle host page containing start */ - prot1 = prot; - for(addr = host_start; addr < start; addr += TARGET_PAGE_SIZE) { + prot1 = host_prot; + for (addr = host_start; addr < start; addr += TARGET_PAGE_SIZE) { prot1 |= page_get_flags(addr); } if (host_end == host_start + qemu_host_page_size) { - for(addr = end; addr < host_end; addr += TARGET_PAGE_SIZE) { + for (addr = end; addr < host_end; addr += TARGET_PAGE_SIZE) { prot1 |= page_get_flags(addr); } end = host_end; } - ret = mprotect(g2h(host_start), qemu_host_page_size, prot1 & PAGE_BITS); - if (ret != 0) + ret = mprotect(g2h(host_start), qemu_host_page_size, + prot1 & PAGE_BITS); + if (ret != 0) { goto error; + } host_start += qemu_host_page_size; } if (end < host_end) { - prot1 = prot; - for(addr = end; addr < host_end; addr += TARGET_PAGE_SIZE) { + prot1 = host_prot; + for (addr = end; addr < host_end; addr += TARGET_PAGE_SIZE) { prot1 |= page_get_flags(addr); } - ret = mprotect(g2h(host_end - qemu_host_page_size), qemu_host_page_size, - prot1 & PAGE_BITS); - if (ret != 0) + ret = mprotect(g2h(host_end - qemu_host_page_size), + qemu_host_page_size, prot1 & PAGE_BITS); + if (ret != 0) { goto error; + } host_end -= qemu_host_page_size; } /* handle the pages in the middle */ if (host_start < host_end) { - ret = mprotect(g2h(host_start), host_end - host_start, prot); - if (ret != 0) + ret = mprotect(g2h(host_start), host_end - host_start, host_prot); + if (ret != 0) { goto error; + } } - page_set_flags(start, start + len, prot | PAGE_VALID); + page_set_flags(start, start + len, page_flags); mmap_unlock(); return 0; error: @@ -360,19 +396,26 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size, abi_ulong align) } /* NOTE: all the constants are the HOST ones */ -abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, +abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot, int flags, int fd, abi_ulong offset) { abi_ulong ret, end, real_start, real_end, retaddr, host_offset, host_len; + int page_flags, host_prot; mmap_lock(); - trace_target_mmap(start, len, prot, flags, fd, offset); + trace_target_mmap(start, len, target_prot, flags, fd, offset); if (!len) { errno = EINVAL; goto fail; } + page_flags = validate_prot_to_pageflags(&host_prot, target_prot); + if (!page_flags) { + errno = EINVAL; + goto fail; + } + /* Also check for overflows... */ len = TARGET_PAGE_ALIGN(len); if (!len) { @@ -438,14 +481,15 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, /* Note: we prefer to control the mapping address. It is especially important if qemu_host_page_size > qemu_real_host_page_size */ - p = mmap(g2h(start), host_len, prot, + p = mmap(g2h(start), host_len, host_prot, flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0); - if (p == MAP_FAILED) + if (p == MAP_FAILED) { goto fail; + } /* update start so that it points to the file position at 'offset' */ host_start = (unsigned long)p; if (!(flags & MAP_ANONYMOUS)) { - p = mmap(g2h(start), len, prot, + p = mmap(g2h(start), len, host_prot, flags | MAP_FIXED, fd, host_offset); if (p == MAP_FAILED) { munmap(g2h(start), host_len); @@ -479,19 +523,19 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, /* msync() won't work here, so we return an error if write is possible while it is a shared mapping */ if ((flags & MAP_TYPE) == MAP_SHARED && - (prot & PROT_WRITE)) { + (host_prot & PROT_WRITE)) { errno = EINVAL; goto fail; } - retaddr = target_mmap(start, len, prot | PROT_WRITE, + retaddr = target_mmap(start, len, target_prot | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (retaddr == -1) goto fail; if (pread(fd, g2h(start), len, offset) == -1) goto fail; - if (!(prot & PROT_WRITE)) { - ret = target_mprotect(start, len, prot); + if (!(host_prot & PROT_WRITE)) { + ret = target_mprotect(start, len, target_prot); assert(ret == 0); } goto the_end; @@ -502,13 +546,13 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, if (real_end == real_start + qemu_host_page_size) { /* one single host page */ ret = mmap_frag(real_start, start, end, - prot, flags, fd, offset); + host_prot, flags, fd, offset); if (ret == -1) goto fail; goto the_end1; } ret = mmap_frag(real_start, start, real_start + qemu_host_page_size, - prot, flags, fd, offset); + host_prot, flags, fd, offset); if (ret == -1) goto fail; real_start += qemu_host_page_size; @@ -517,7 +561,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, if (end < real_end) { ret = mmap_frag(real_end - qemu_host_page_size, real_end - qemu_host_page_size, end, - prot, flags, fd, + host_prot, flags, fd, offset + real_end - qemu_host_page_size - start); if (ret == -1) goto fail; @@ -533,13 +577,13 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, else offset1 = offset + real_start - start; p = mmap(g2h(real_start), real_end - real_start, - prot, flags, fd, offset1); + host_prot, flags, fd, offset1); if (p == MAP_FAILED) goto fail; } } the_end1: - page_set_flags(start, start + len, prot | PAGE_VALID); + page_set_flags(start, start + len, page_flags); the_end: trace_target_mmap_complete(start); if (qemu_loglevel_mask(CPU_LOG_PAGE)) { diff --git a/linux-user/strace.c b/linux-user/strace.c index 13981341b3..5e38048643 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -541,6 +541,7 @@ static void print_fdset(int n, abi_ulong target_fds_addr) { int i; + int first = 1; qemu_log("["); if( target_fds_addr ) { @@ -555,9 +556,12 @@ print_fdset(int n, abi_ulong target_fds_addr) return; for (i=n; i>=0; i--) { - if ((tswapal(target_fds[i / TARGET_ABI_BITS]) >> (i & (TARGET_ABI_BITS - 1))) & 1) - qemu_log("%d,", i); + if ((tswapal(target_fds[i / TARGET_ABI_BITS]) >> + (i & (TARGET_ABI_BITS - 1))) & 1) { + qemu_log("%s%d", get_comma(first), i); + first = 0; } + } unlock_user(target_fds, target_fds_addr, 0); } qemu_log("]"); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 945fc25279..b4a7b605f3 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1229,7 +1229,9 @@ static inline abi_long copy_to_user_timeval64(abi_ulong target_tv_addr, defined(TARGET_NR_nanosleep) || defined(TARGET_NR_clock_settime) || \ defined(TARGET_NR_utimensat) || defined(TARGET_NR_mq_timedsend) || \ defined(TARGET_NR_mq_timedreceive) || defined(TARGET_NR_ipc) || \ - defined(TARGET_NR_semop) || defined(TARGET_NR_semtimedop) + defined(TARGET_NR_semop) || defined(TARGET_NR_semtimedop) || \ + defined(TARGET_NR_timer_settime) || \ + (defined(TARGET_NR_timerfd_settime) && defined(CONFIG_TIMERFD)) static inline abi_long target_to_host_timespec(struct timespec *host_ts, abi_ulong target_addr) { @@ -1245,7 +1247,9 @@ static inline abi_long target_to_host_timespec(struct timespec *host_ts, } #endif -#if defined(TARGET_NR_clock_settime64) || defined(TARGET_NR_futex_time64) +#if defined(TARGET_NR_clock_settime64) || defined(TARGET_NR_futex_time64) || \ + defined(TARGET_NR_timer_settime64) || \ + (defined(TARGET_NR_timerfd_settime64) && defined(CONFIG_TIMERFD)) static inline abi_long target_to_host_timespec64(struct timespec *host_ts, abi_ulong target_addr) { @@ -6783,46 +6787,74 @@ static inline abi_long target_ftruncate64(void *cpu_env, abi_long arg1, #if defined(TARGET_NR_timer_settime) || \ (defined(TARGET_NR_timerfd_settime) && defined(CONFIG_TIMERFD)) -static inline abi_long target_to_host_itimerspec(struct itimerspec *host_itspec, +static inline abi_long target_to_host_itimerspec(struct itimerspec *host_its, abi_ulong target_addr) { - struct target_itimerspec *target_itspec; - - if (!lock_user_struct(VERIFY_READ, target_itspec, target_addr, 1)) { + if (target_to_host_timespec(&host_its->it_interval, target_addr + + offsetof(struct target_itimerspec, + it_interval)) || + target_to_host_timespec(&host_its->it_value, target_addr + + offsetof(struct target_itimerspec, + it_value))) { return -TARGET_EFAULT; } - host_itspec->it_interval.tv_sec = - tswapal(target_itspec->it_interval.tv_sec); - host_itspec->it_interval.tv_nsec = - tswapal(target_itspec->it_interval.tv_nsec); - host_itspec->it_value.tv_sec = tswapal(target_itspec->it_value.tv_sec); - host_itspec->it_value.tv_nsec = tswapal(target_itspec->it_value.tv_nsec); + return 0; +} +#endif + +#if defined(TARGET_NR_timer_settime64) || \ + (defined(TARGET_NR_timerfd_settime64) && defined(CONFIG_TIMERFD)) +static inline abi_long target_to_host_itimerspec64(struct itimerspec *host_its, + abi_ulong target_addr) +{ + if (target_to_host_timespec64(&host_its->it_interval, target_addr + + offsetof(struct target__kernel_itimerspec, + it_interval)) || + target_to_host_timespec64(&host_its->it_value, target_addr + + offsetof(struct target__kernel_itimerspec, + it_value))) { + return -TARGET_EFAULT; + } - unlock_user_struct(target_itspec, target_addr, 1); return 0; } #endif #if ((defined(TARGET_NR_timerfd_gettime) || \ defined(TARGET_NR_timerfd_settime)) && defined(CONFIG_TIMERFD)) || \ - defined(TARGET_NR_timer_gettime) || defined(TARGET_NR_timer_settime) + defined(TARGET_NR_timer_gettime) || defined(TARGET_NR_timer_settime) static inline abi_long host_to_target_itimerspec(abi_ulong target_addr, - struct itimerspec *host_its) -{ - struct target_itimerspec *target_itspec; - - if (!lock_user_struct(VERIFY_WRITE, target_itspec, target_addr, 0)) { + struct itimerspec *host_its) +{ + if (host_to_target_timespec(target_addr + offsetof(struct target_itimerspec, + it_interval), + &host_its->it_interval) || + host_to_target_timespec(target_addr + offsetof(struct target_itimerspec, + it_value), + &host_its->it_value)) { return -TARGET_EFAULT; } + return 0; +} +#endif - target_itspec->it_interval.tv_sec = tswapal(host_its->it_interval.tv_sec); - target_itspec->it_interval.tv_nsec = tswapal(host_its->it_interval.tv_nsec); - - target_itspec->it_value.tv_sec = tswapal(host_its->it_value.tv_sec); - target_itspec->it_value.tv_nsec = tswapal(host_its->it_value.tv_nsec); - - unlock_user_struct(target_itspec, target_addr, 0); +#if ((defined(TARGET_NR_timerfd_gettime64) || \ + defined(TARGET_NR_timerfd_settime64)) && defined(CONFIG_TIMERFD)) || \ + defined(TARGET_NR_timer_gettime64) || defined(TARGET_NR_timer_settime64) +static inline abi_long host_to_target_itimerspec64(abi_ulong target_addr, + struct itimerspec *host_its) +{ + if (host_to_target_timespec64(target_addr + + offsetof(struct target__kernel_itimerspec, + it_interval), + &host_its->it_interval) || + host_to_target_timespec64(target_addr + + offsetof(struct target__kernel_itimerspec, + it_value), + &host_its->it_value)) { + return -TARGET_EFAULT; + } return 0; } #endif @@ -11819,6 +11851,17 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, return ret; } #endif +#ifdef TARGET_NR_clock_getres_time64 + case TARGET_NR_clock_getres_time64: + { + struct timespec ts; + ret = get_errno(clock_getres(arg1, &ts)); + if (!is_error(ret)) { + host_to_target_timespec64(arg2, &ts); + } + return ret; + } +#endif #ifdef TARGET_NR_clock_nanosleep case TARGET_NR_clock_nanosleep: { @@ -11876,8 +11919,13 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, if (!arg3) { tsp = NULL; } else { - target_to_host_timespec(ts, arg3); - target_to_host_timespec(ts+1, arg3+sizeof(struct target_timespec)); + if (target_to_host_timespec(ts, arg3)) { + return -TARGET_EFAULT; + } + if (target_to_host_timespec(ts + 1, arg3 + + sizeof(struct target_timespec))) { + return -TARGET_EFAULT; + } tsp = ts; } if (!arg2) @@ -12413,6 +12461,32 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, } #endif +#ifdef TARGET_NR_timer_settime64 + case TARGET_NR_timer_settime64: + { + target_timer_t timerid = get_timer_id(arg1); + + if (timerid < 0) { + ret = timerid; + } else if (arg3 == 0) { + ret = -TARGET_EINVAL; + } else { + timer_t htimer = g_posix_timers[timerid]; + struct itimerspec hspec_new = {{0},}, hspec_old = {{0},}; + + if (target_to_host_itimerspec64(&hspec_new, arg3)) { + return -TARGET_EFAULT; + } + ret = get_errno( + timer_settime(htimer, arg2, &hspec_new, &hspec_old)); + if (arg4 && host_to_target_itimerspec64(arg4, &hspec_old)) { + return -TARGET_EFAULT; + } + } + return ret; + } +#endif + #ifdef TARGET_NR_timer_gettime case TARGET_NR_timer_gettime: { @@ -12436,6 +12510,29 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, } #endif +#ifdef TARGET_NR_timer_gettime64 + case TARGET_NR_timer_gettime64: + { + /* args: timer_t timerid, struct itimerspec64 *curr_value */ + target_timer_t timerid = get_timer_id(arg1); + + if (timerid < 0) { + ret = timerid; + } else if (!arg2) { + ret = -TARGET_EFAULT; + } else { + timer_t htimer = g_posix_timers[timerid]; + struct itimerspec hspec; + ret = get_errno(timer_gettime(htimer, &hspec)); + + if (host_to_target_itimerspec64(arg2, &hspec)) { + ret = -TARGET_EFAULT; + } + } + return ret; + } +#endif + #ifdef TARGET_NR_timer_getoverrun case TARGET_NR_timer_getoverrun: { @@ -12489,6 +12586,20 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, return ret; #endif +#if defined(TARGET_NR_timerfd_gettime64) && defined(CONFIG_TIMERFD) + case TARGET_NR_timerfd_gettime64: + { + struct itimerspec its_curr; + + ret = get_errno(timerfd_gettime(arg1, &its_curr)); + + if (arg2 && host_to_target_itimerspec64(arg2, &its_curr)) { + return -TARGET_EFAULT; + } + } + return ret; +#endif + #if defined(TARGET_NR_timerfd_settime) && defined(CONFIG_TIMERFD) case TARGET_NR_timerfd_settime: { @@ -12512,6 +12623,29 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1, return ret; #endif +#if defined(TARGET_NR_timerfd_settime64) && defined(CONFIG_TIMERFD) + case TARGET_NR_timerfd_settime64: + { + struct itimerspec its_new, its_old, *p_new; + + if (arg3) { + if (target_to_host_itimerspec64(&its_new, arg3)) { + return -TARGET_EFAULT; + } + p_new = &its_new; + } else { + p_new = NULL; + } + + ret = get_errno(timerfd_settime(arg1, arg2, p_new, &its_old)); + + if (arg4 && host_to_target_itimerspec64(arg4, &its_old)) { + return -TARGET_EFAULT; + } + } + return ret; +#endif + #if defined(TARGET_NR_ioprio_get) && defined(__NR_ioprio_get) case TARGET_NR_ioprio_get: return get_errno(ioprio_get(arg1, arg2)); diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 3c261cff0e..427a25f5bc 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -259,6 +259,11 @@ struct target_itimerspec { struct target_timespec it_value; }; +struct target__kernel_itimerspec { + struct target__kernel_timespec it_interval; + struct target__kernel_timespec it_value; +}; + struct target_timex { abi_uint modes; /* Mode selector */ abi_long offset; /* Time offset */ diff --git a/meson.build b/meson.build index 808f50b07e..df5bf728b5 100644 --- a/meson.build +++ b/meson.build @@ -1062,12 +1062,19 @@ if 'CONFIG_GUEST_AGENT' in config_host subdir('qga') endif +if 'CONFIG_XKBCOMMON' in config_host + # used for the update-keymaps target, so include rules even if !have_tools + qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, + dependencies: [qemuutil, xkbcommon], install: have_tools) +endif + +qemu_block_tools = [] if have_tools qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) qemu_io = executable('qemu-io', files('qemu-io.c'), dependencies: [block, qemuutil], install: true) - qemu_block_tools = [qemu_img, qemu_io] + qemu_block_tools += [qemu_img, qemu_io] if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd') qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), dependencies: [block, qemuutil], install: true) @@ -1078,11 +1085,6 @@ if have_tools subdir('contrib/rdmacm-mux') subdir('contrib/elf2dmp') - if 'CONFIG_XKBCOMMON' in config_host - executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'), - dependencies: [qemuutil, xkbcommon], install: true) - endif - executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), dependencies: qemuutil, install: true) diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c index 784330ebe1..549e14daba 100644 --- a/migration/block-dirty-bitmap.c +++ b/migration/block-dirty-bitmap.c @@ -29,10 +29,10 @@ * * # Header (shared for different chunk types) * 1, 2 or 4 bytes: flags (see qemu_{put,put}_flags) - * [ 1 byte: node name size ] \ flags & DEVICE_NAME - * [ n bytes: node name ] / - * [ 1 byte: bitmap name size ] \ flags & BITMAP_NAME - * [ n bytes: bitmap name ] / + * [ 1 byte: node alias size ] \ flags & DEVICE_NAME + * [ n bytes: node alias ] / + * [ 1 byte: bitmap alias size ] \ flags & BITMAP_NAME + * [ n bytes: bitmap alias ] / * * # Start of bitmap migration (flags & START) * header @@ -72,7 +72,9 @@ #include "migration/register.h" #include "qemu/hbitmap.h" #include "qemu/cutils.h" +#include "qemu/id.h" #include "qapi/error.h" +#include "qapi/qapi-commands-migration.h" #include "trace.h" #define CHUNK_SIZE (1 << 10) @@ -104,7 +106,8 @@ typedef struct SaveBitmapState { /* Written during setup phase. */ BlockDriverState *bs; - const char *node_name; + char *node_alias; + char *bitmap_alias; BdrvDirtyBitmap *bitmap; uint64_t total_sectors; uint64_t sectors_per_chunk; @@ -138,8 +141,9 @@ typedef struct LoadBitmapState { /* State of the dirty bitmap migration (DBM) during load process */ typedef struct DBMLoadState { uint32_t flags; - char node_name[256]; - char bitmap_name[256]; + char node_alias[256]; + char bitmap_alias[256]; + char bitmap_name[BDRV_BITMAP_MAX_NAME_SIZE + 1]; BlockDriverState *bs; BdrvDirtyBitmap *bitmap; @@ -165,6 +169,188 @@ typedef struct DBMState { static DBMState dbm_state; +/* For hash tables that map node/bitmap names to aliases */ +typedef struct AliasMapInnerNode { + char *string; + GHashTable *subtree; +} AliasMapInnerNode; + +static void free_alias_map_inner_node(void *amin_ptr) +{ + AliasMapInnerNode *amin = amin_ptr; + + g_free(amin->string); + g_hash_table_unref(amin->subtree); + g_free(amin); +} + +/** + * Construct an alias map based on the given QMP structure. + * + * (Note that we cannot store such maps in the MigrationParameters + * object, because that struct is defined by the QAPI schema, which + * makes it basically impossible to have dicts with arbitrary keys. + * Therefore, we instead have to construct these maps when migration + * starts.) + * + * @bbm is the block_bitmap_mapping from the migration parameters. + * + * If @name_to_alias is true, the returned hash table will map node + * and bitmap names to their respective aliases (for outgoing + * migration). + * + * If @name_to_alias is false, the returned hash table will map node + * and bitmap aliases to their respective names (for incoming + * migration). + * + * The hash table maps node names/aliases to AliasMapInnerNode + * objects, whose .string is the respective node alias/name, and whose + * .subtree table maps bitmap names/aliases to the respective bitmap + * alias/name. + */ +static GHashTable *construct_alias_map(const BitmapMigrationNodeAliasList *bbm, + bool name_to_alias, + Error **errp) +{ + GHashTable *alias_map; + size_t max_node_name_len = sizeof_field(BlockDriverState, node_name) - 1; + + alias_map = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, free_alias_map_inner_node); + + for (; bbm; bbm = bbm->next) { + const BitmapMigrationNodeAlias *bmna = bbm->value; + const BitmapMigrationBitmapAliasList *bmbal; + AliasMapInnerNode *amin; + GHashTable *bitmaps_map; + const char *node_map_from, *node_map_to; + + if (!id_wellformed(bmna->alias)) { + error_setg(errp, "The node alias '%s' is not well-formed", + bmna->alias); + goto fail; + } + + if (strlen(bmna->alias) > UINT8_MAX) { + error_setg(errp, "The node alias '%s' is longer than %u bytes", + bmna->alias, UINT8_MAX); + goto fail; + } + + if (strlen(bmna->node_name) > max_node_name_len) { + error_setg(errp, "The node name '%s' is longer than %zu bytes", + bmna->node_name, max_node_name_len); + goto fail; + } + + if (name_to_alias) { + if (g_hash_table_contains(alias_map, bmna->node_name)) { + error_setg(errp, "The node name '%s' is mapped twice", + bmna->node_name); + goto fail; + } + + node_map_from = bmna->node_name; + node_map_to = bmna->alias; + } else { + if (g_hash_table_contains(alias_map, bmna->alias)) { + error_setg(errp, "The node alias '%s' is used twice", + bmna->alias); + goto fail; + } + + node_map_from = bmna->alias; + node_map_to = bmna->node_name; + } + + bitmaps_map = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, g_free); + + amin = g_new(AliasMapInnerNode, 1); + *amin = (AliasMapInnerNode){ + .string = g_strdup(node_map_to), + .subtree = bitmaps_map, + }; + + g_hash_table_insert(alias_map, g_strdup(node_map_from), amin); + + for (bmbal = bmna->bitmaps; bmbal; bmbal = bmbal->next) { + const BitmapMigrationBitmapAlias *bmba = bmbal->value; + const char *bmap_map_from, *bmap_map_to; + + if (strlen(bmba->alias) > UINT8_MAX) { + error_setg(errp, + "The bitmap alias '%s' is longer than %u bytes", + bmba->alias, UINT8_MAX); + goto fail; + } + + if (strlen(bmba->name) > BDRV_BITMAP_MAX_NAME_SIZE) { + error_setg(errp, "The bitmap name '%s' is longer than %d bytes", + bmba->name, BDRV_BITMAP_MAX_NAME_SIZE); + goto fail; + } + + if (name_to_alias) { + bmap_map_from = bmba->name; + bmap_map_to = bmba->alias; + + if (g_hash_table_contains(bitmaps_map, bmba->name)) { + error_setg(errp, "The bitmap '%s'/'%s' is mapped twice", + bmna->node_name, bmba->name); + goto fail; + } + } else { + bmap_map_from = bmba->alias; + bmap_map_to = bmba->name; + + if (g_hash_table_contains(bitmaps_map, bmba->alias)) { + error_setg(errp, "The bitmap alias '%s'/'%s' is used twice", + bmna->alias, bmba->alias); + goto fail; + } + } + + g_hash_table_insert(bitmaps_map, + g_strdup(bmap_map_from), g_strdup(bmap_map_to)); + } + } + + return alias_map; + +fail: + g_hash_table_destroy(alias_map); + return NULL; +} + +/** + * Run construct_alias_map() in both directions to check whether @bbm + * is valid. + * (This function is to be used by migration/migration.c to validate + * the user-specified block-bitmap-mapping migration parameter.) + * + * Returns true if and only if the mapping is valid. + */ +bool check_dirty_bitmap_mig_alias_map(const BitmapMigrationNodeAliasList *bbm, + Error **errp) +{ + GHashTable *alias_map; + + alias_map = construct_alias_map(bbm, true, errp); + if (!alias_map) { + return false; + } + g_hash_table_destroy(alias_map); + + alias_map = construct_alias_map(bbm, false, errp); + if (!alias_map) { + return false; + } + g_hash_table_destroy(alias_map); + + return true; +} + static uint32_t qemu_get_bitmap_flags(QEMUFile *f) { uint8_t flags = qemu_get_byte(f); @@ -207,11 +393,11 @@ static void send_bitmap_header(QEMUFile *f, DBMSaveState *s, qemu_put_bitmap_flags(f, flags); if (flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) { - qemu_put_counted_string(f, dbms->node_name); + qemu_put_counted_string(f, dbms->node_alias); } if (flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) { - qemu_put_counted_string(f, bdrv_dirty_bitmap_name(bitmap)); + qemu_put_counted_string(f, dbms->bitmap_alias); } } @@ -282,18 +468,25 @@ static void dirty_bitmap_do_save_cleanup(DBMSaveState *s) QSIMPLEQ_REMOVE_HEAD(&s->dbms_list, entry); bdrv_dirty_bitmap_set_busy(dbms->bitmap, false); bdrv_unref(dbms->bs); + g_free(dbms->node_alias); + g_free(dbms->bitmap_alias); g_free(dbms); } } /* Called with iothread lock taken. */ static int add_bitmaps_to_list(DBMSaveState *s, BlockDriverState *bs, - const char *bs_name) + const char *bs_name, GHashTable *alias_map) { BdrvDirtyBitmap *bitmap; SaveBitmapState *dbms; + GHashTable *bitmap_aliases; + const char *node_alias, *bitmap_name, *bitmap_alias; Error *local_err = NULL; + /* When an alias map is given, @bs_name must be @bs's node name */ + assert(!alias_map || !strcmp(bs_name, bdrv_get_node_name(bs))); + FOR_EACH_DIRTY_BITMAP(bs, bitmap) { if (bdrv_dirty_bitmap_name(bitmap)) { break; @@ -303,21 +496,39 @@ static int add_bitmaps_to_list(DBMSaveState *s, BlockDriverState *bs, return 0; } + bitmap_name = bdrv_dirty_bitmap_name(bitmap); + if (!bs_name || strcmp(bs_name, "") == 0) { error_report("Bitmap '%s' in unnamed node can't be migrated", - bdrv_dirty_bitmap_name(bitmap)); + bitmap_name); return -1; } - if (bs_name[0] == '#') { + if (alias_map) { + const AliasMapInnerNode *amin = g_hash_table_lookup(alias_map, bs_name); + + if (!amin) { + /* Skip bitmaps on nodes with no alias */ + return 0; + } + + node_alias = amin->string; + bitmap_aliases = amin->subtree; + } else { + node_alias = bs_name; + bitmap_aliases = NULL; + } + + if (node_alias[0] == '#') { error_report("Bitmap '%s' in a node with auto-generated " "name '%s' can't be migrated", - bdrv_dirty_bitmap_name(bitmap), bs_name); + bitmap_name, node_alias); return -1; } FOR_EACH_DIRTY_BITMAP(bs, bitmap) { - if (!bdrv_dirty_bitmap_name(bitmap)) { + bitmap_name = bdrv_dirty_bitmap_name(bitmap); + if (!bitmap_name) { continue; } @@ -326,12 +537,29 @@ static int add_bitmaps_to_list(DBMSaveState *s, BlockDriverState *bs, return -1; } + if (bitmap_aliases) { + bitmap_alias = g_hash_table_lookup(bitmap_aliases, bitmap_name); + if (!bitmap_alias) { + /* Skip bitmaps with no alias */ + continue; + } + } else { + if (strlen(bitmap_name) > UINT8_MAX) { + error_report("Cannot migrate bitmap '%s' on node '%s': " + "Name is longer than %u bytes", + bitmap_name, bs_name, UINT8_MAX); + return -1; + } + bitmap_alias = bitmap_name; + } + bdrv_ref(bs); bdrv_dirty_bitmap_set_busy(bitmap, true); dbms = g_new0(SaveBitmapState, 1); dbms->bs = bs; - dbms->node_name = bs_name; + dbms->node_alias = g_strdup(node_alias); + dbms->bitmap_alias = g_strdup(bitmap_alias); dbms->bitmap = bitmap; dbms->total_sectors = bdrv_nb_sectors(bs); dbms->sectors_per_chunk = CHUNK_SIZE * 8 * @@ -356,43 +584,52 @@ static int init_dirty_bitmap_migration(DBMSaveState *s) SaveBitmapState *dbms; GHashTable *handled_by_blk = g_hash_table_new(NULL, NULL); BlockBackend *blk; + const MigrationParameters *mig_params = &migrate_get_current()->parameters; + GHashTable *alias_map = NULL; + + if (mig_params->has_block_bitmap_mapping) { + alias_map = construct_alias_map(mig_params->block_bitmap_mapping, true, + &error_abort); + } s->bulk_completed = false; s->prev_bs = NULL; s->prev_bitmap = NULL; s->no_bitmaps = false; - /* - * Use blockdevice name for direct (or filtered) children of named block - * backends. - */ - for (blk = blk_next(NULL); blk; blk = blk_next(blk)) { - const char *name = blk_name(blk); - - if (!name || strcmp(name, "") == 0) { - continue; - } + if (!alias_map) { + /* + * Use blockdevice name for direct (or filtered) children of named block + * backends. + */ + for (blk = blk_next(NULL); blk; blk = blk_next(blk)) { + const char *name = blk_name(blk); - bs = blk_bs(blk); + if (!name || strcmp(name, "") == 0) { + continue; + } - /* Skip filters without bitmaps */ - while (bs && bs->drv && bs->drv->is_filter && - !bdrv_has_named_bitmaps(bs)) - { - if (bs->backing) { - bs = bs->backing->bs; - } else if (bs->file) { - bs = bs->file->bs; - } else { - bs = NULL; + bs = blk_bs(blk); + + /* Skip filters without bitmaps */ + while (bs && bs->drv && bs->drv->is_filter && + !bdrv_has_named_bitmaps(bs)) + { + if (bs->backing) { + bs = bs->backing->bs; + } else if (bs->file) { + bs = bs->file->bs; + } else { + bs = NULL; + } } - } - if (bs && bs->drv && !bs->drv->is_filter) { - if (add_bitmaps_to_list(s, bs, name)) { - goto fail; + if (bs && bs->drv && !bs->drv->is_filter) { + if (add_bitmaps_to_list(s, bs, name, NULL)) { + goto fail; + } + g_hash_table_add(handled_by_blk, bs); } - g_hash_table_add(handled_by_blk, bs); } } @@ -401,7 +638,7 @@ static int init_dirty_bitmap_migration(DBMSaveState *s) continue; } - if (add_bitmaps_to_list(s, bs, bdrv_get_node_name(bs))) { + if (add_bitmaps_to_list(s, bs, bdrv_get_node_name(bs), alias_map)) { goto fail; } } @@ -416,11 +653,17 @@ static int init_dirty_bitmap_migration(DBMSaveState *s) } g_hash_table_destroy(handled_by_blk); + if (alias_map) { + g_hash_table_destroy(alias_map); + } return 0; fail: g_hash_table_destroy(handled_by_blk); + if (alias_map) { + g_hash_table_destroy(alias_map); + } dirty_bitmap_do_save_cleanup(s); return -1; @@ -770,8 +1013,10 @@ static int dirty_bitmap_load_bits(QEMUFile *f, DBMLoadState *s) return 0; } -static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s) +static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s, + GHashTable *alias_map) { + GHashTable *bitmap_alias_map = NULL; Error *local_err = NULL; bool nothing; s->flags = qemu_get_bitmap_flags(f); @@ -780,28 +1025,75 @@ static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s) nothing = s->flags == (s->flags & DIRTY_BITMAP_MIG_FLAG_EOS); if (s->flags & DIRTY_BITMAP_MIG_FLAG_DEVICE_NAME) { - if (!qemu_get_counted_string(f, s->node_name)) { - error_report("Unable to read node name string"); + if (!qemu_get_counted_string(f, s->node_alias)) { + error_report("Unable to read node alias string"); return -EINVAL; } + if (!s->cancelled) { - s->bs = bdrv_lookup_bs(s->node_name, s->node_name, &local_err); + if (alias_map) { + const AliasMapInnerNode *amin; + + amin = g_hash_table_lookup(alias_map, s->node_alias); + if (!amin) { + error_setg(&local_err, "Error: Unknown node alias '%s'", + s->node_alias); + s->bs = NULL; + } else { + bitmap_alias_map = amin->subtree; + s->bs = bdrv_lookup_bs(NULL, amin->string, &local_err); + } + } else { + s->bs = bdrv_lookup_bs(s->node_alias, s->node_alias, + &local_err); + } if (!s->bs) { error_report_err(local_err); cancel_incoming_locked(s); } } - } else if (!s->bs && !nothing && !s->cancelled) { + } else if (s->bs) { + if (alias_map) { + const AliasMapInnerNode *amin; + + /* Must be present in the map, or s->bs would not be set */ + amin = g_hash_table_lookup(alias_map, s->node_alias); + assert(amin != NULL); + + bitmap_alias_map = amin->subtree; + } + } else if (!nothing && !s->cancelled) { error_report("Error: block device name is not set"); cancel_incoming_locked(s); } + assert(nothing || s->cancelled || !!alias_map == !!bitmap_alias_map); + if (s->flags & DIRTY_BITMAP_MIG_FLAG_BITMAP_NAME) { - if (!qemu_get_counted_string(f, s->bitmap_name)) { - error_report("Unable to read bitmap name string"); + const char *bitmap_name; + + if (!qemu_get_counted_string(f, s->bitmap_alias)) { + error_report("Unable to read bitmap alias string"); return -EINVAL; } + + if (!s->cancelled) { + if (bitmap_alias_map) { + bitmap_name = g_hash_table_lookup(bitmap_alias_map, + s->bitmap_alias); + if (!bitmap_name) { + error_report("Error: Unknown bitmap alias '%s' on node " + "'%s' (alias '%s')", s->bitmap_alias, + s->bs->node_name, s->node_alias); + cancel_incoming_locked(s); + } + } else { + bitmap_name = s->bitmap_alias; + } + } + if (!s->cancelled) { + g_strlcpy(s->bitmap_name, bitmap_name, sizeof(s->bitmap_name)); s->bitmap = bdrv_find_dirty_bitmap(s->bs, s->bitmap_name); /* @@ -811,7 +1103,7 @@ static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s) if (!s->bitmap && !(s->flags & DIRTY_BITMAP_MIG_FLAG_START)) { error_report("Error: unknown dirty bitmap " "'%s' for block device '%s'", - s->bitmap_name, s->node_name); + s->bitmap_name, s->bs->node_name); cancel_incoming_locked(s); } } @@ -835,6 +1127,8 @@ static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s) */ static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id) { + GHashTable *alias_map = NULL; + const MigrationParameters *mig_params = &migrate_get_current()->parameters; DBMLoadState *s = &((DBMState *)opaque)->load; int ret = 0; @@ -846,13 +1140,18 @@ static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id) return -EINVAL; } + if (mig_params->has_block_bitmap_mapping) { + alias_map = construct_alias_map(mig_params->block_bitmap_mapping, + false, &error_abort); + } + do { QEMU_LOCK_GUARD(&s->lock); - ret = dirty_bitmap_load_header(f, s); + ret = dirty_bitmap_load_header(f, s, alias_map); if (ret < 0) { cancel_incoming_locked(s); - return ret; + goto fail; } if (s->flags & DIRTY_BITMAP_MIG_FLAG_START) { @@ -869,12 +1168,17 @@ static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id) if (ret) { cancel_incoming_locked(s); - return ret; + goto fail; } } while (!(s->flags & DIRTY_BITMAP_MIG_FLAG_EOS)); trace_dirty_bitmap_load_success(); - return 0; + ret = 0; +fail: + if (alias_map) { + g_hash_table_destroy(alias_map); + } + return ret; } static int dirty_bitmap_save_setup(QEMUFile *f, void *opaque) diff --git a/migration/migration.c b/migration/migration.c index 8fe36339db..dbd4afa1e8 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -36,6 +36,7 @@ #include "block/block.h" #include "qapi/error.h" #include "qapi/clone-visitor.h" +#include "qapi/qapi-visit-migration.h" #include "qapi/qapi-visit-sockets.h" #include "qapi/qapi-commands-migration.h" #include "qapi/qapi-events-migration.h" @@ -843,6 +844,13 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp) params->has_announce_step = true; params->announce_step = s->parameters.announce_step; + if (s->parameters.has_block_bitmap_mapping) { + params->has_block_bitmap_mapping = true; + params->block_bitmap_mapping = + QAPI_CLONE(BitmapMigrationNodeAliasList, + s->parameters.block_bitmap_mapping); + } + return params; } @@ -1308,6 +1316,13 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp) "is invalid, it must be in the range of 1 to 10000 ms"); return false; } + + if (params->has_block_bitmap_mapping && + !check_dirty_bitmap_mig_alias_map(params->block_bitmap_mapping, errp)) { + error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: "); + return false; + } + return true; } @@ -1402,6 +1417,11 @@ static void migrate_params_test_apply(MigrateSetParameters *params, if (params->has_announce_step) { dest->announce_step = params->announce_step; } + + if (params->has_block_bitmap_mapping) { + dest->has_block_bitmap_mapping = true; + dest->block_bitmap_mapping = params->block_bitmap_mapping; + } } static void migrate_params_apply(MigrateSetParameters *params, Error **errp) @@ -1514,6 +1534,16 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp) if (params->has_announce_step) { s->parameters.announce_step = params->announce_step; } + + if (params->has_block_bitmap_mapping) { + qapi_free_BitmapMigrationNodeAliasList( + s->parameters.block_bitmap_mapping); + + s->parameters.has_block_bitmap_mapping = true; + s->parameters.block_bitmap_mapping = + QAPI_CLONE(BitmapMigrationNodeAliasList, + params->block_bitmap_mapping); + } } void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp) diff --git a/migration/migration.h b/migration/migration.h index 6c6a931d0d..2ed55c4aef 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -337,6 +337,9 @@ void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value); void dirty_bitmap_mig_before_vm_start(void); void dirty_bitmap_mig_cancel_outgoing(void); void dirty_bitmap_mig_cancel_incoming(void); +bool check_dirty_bitmap_mig_alias_map(const BitmapMigrationNodeAliasList *bbm, + Error **errp); + void migrate_add_address(SocketAddress *address); int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque); diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index ae4b6a4246..7711726fd2 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -469,6 +469,32 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict) monitor_printf(mon, "%s: '%s'\n", MigrationParameter_str(MIGRATION_PARAMETER_TLS_AUTHZ), params->tls_authz); + + if (params->has_block_bitmap_mapping) { + const BitmapMigrationNodeAliasList *bmnal; + + monitor_printf(mon, "%s:\n", + MigrationParameter_str( + MIGRATION_PARAMETER_BLOCK_BITMAP_MAPPING)); + + for (bmnal = params->block_bitmap_mapping; + bmnal; + bmnal = bmnal->next) + { + const BitmapMigrationNodeAlias *bmna = bmnal->value; + const BitmapMigrationBitmapAliasList *bmbal; + + monitor_printf(mon, " '%s' -> '%s'\n", + bmna->node_name, bmna->alias); + + for (bmbal = bmna->bitmaps; bmbal; bmbal = bmbal->next) { + const BitmapMigrationBitmapAlias *bmba = bmbal->value; + + monitor_printf(mon, " '%s' -> '%s'\n", + bmba->name, bmba->alias); + } + } + } } qapi_free_MigrationParameters(params); @@ -1384,6 +1410,10 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict) p->has_announce_step = true; visit_type_size(v, param, &p->announce_step, &err); break; + case MIGRATION_PARAMETER_BLOCK_BITMAP_MAPPING: + error_setg(&err, "The block-bitmap-mapping parameter can only be set " + "through QMP"); + break; default: assert(0); } diff --git a/pc-bios/bios-256k.bin b/pc-bios/bios-256k.bin index 8fd42903cd..96bdeaa487 100644 --- a/pc-bios/bios-256k.bin +++ b/pc-bios/bios-256k.bin Binary files differdiff --git a/pc-bios/bios.bin b/pc-bios/bios.bin index 528b8ab412..3ecaf4a709 100644 --- a/pc-bios/bios.bin +++ b/pc-bios/bios.bin Binary files differdiff --git a/pc-bios/keymaps/.gitignore b/pc-bios/keymaps/.gitignore new file mode 100644 index 0000000000..f90738f4dc --- /dev/null +++ b/pc-bios/keymaps/.gitignore @@ -0,0 +1 @@ +/*.stamp diff --git a/pc-bios/keymaps/Makefile b/pc-bios/keymaps/Makefile deleted file mode 100644 index 76217b0689..0000000000 --- a/pc-bios/keymaps/Makefile +++ /dev/null @@ -1,56 +0,0 @@ - -KEYMAP := $(shell which qemu-keymap 2>/dev/null) - -MAPS := ar bepo cz da de de-ch en-us en-gb es et fi fo \ - fr fr-be fr-ca fr-ch \ - hr hu is it ja lt lv mk nl no pl pt pt-br ru th tr - -ar : MAP_FLAGS := -l ar -bepo : MAP_FLAGS := -l fr -v dvorak -cz : MAP_FLAGS := -l cz -da : MAP_FLAGS := -l dk -de : MAP_FLAGS := -l de -v nodeadkeys -de-ch : MAP_FLAGS := -l ch -en-us : MAP_FLAGS := -l us -en-gb : MAP_FLAGS := -l gb -es : MAP_FLAGS := -l es -et : MAP_FLAGS := -l et -fi : MAP_FLAGS := -l fi -fo : MAP_FLAGS := -l fo -fr : MAP_FLAGS := -l fr -v nodeadkeys -fr-be : MAP_FLAGS := -l be -fr-ca : MAP_FLAGS := -l ca -v fr -fr-ch : MAP_FLAGS := -l ch -v fr -hr : MAP_FLAGS := -l hr -hu : MAP_FLAGS := -l hu -is : MAP_FLAGS := -l is -it : MAP_FLAGS := -l it -ja : MAP_FLAGS := -l jp -m jp106 -lt : MAP_FLAGS := -l lt -lv : MAP_FLAGS := -l lv -mk : MAP_FLAGS := -l mk -nl : MAP_FLAGS := -l nl -no : MAP_FLAGS := -l no -pl : MAP_FLAGS := -l pl -pt : MAP_FLAGS := -l pt -pt-br : MAP_FLAGS := -l br -ru : MAP_FLAGS := -l ru -th : MAP_FLAGS := -l th -tr : MAP_FLAGS := -l tr - -ifeq ($(KEYMAP),) - -all: - @echo "nothing to do (qemu-keymap not found)" - -else - -all: $(MAPS) - -clean: - rm -f $(MAPS) - -$(MAPS): $(KEYMAP) Makefile - $(KEYMAP) -f $@ $(MAP_FLAGS) - -endif diff --git a/pc-bios/keymaps/ar b/pc-bios/keymaps/ar index f62b297c54..32049d86e9 100644 --- a/pc-bios/keymaps/ar +++ b/pc-bios/keymaps/ar @@ -772,9 +772,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/bepo b/pc-bios/keymaps/bepo index 2292cbc499..99d280ca74 100644 --- a/pc-bios/keymaps/bepo +++ b/pc-bios/keymaps/bepo @@ -763,9 +763,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/cz b/pc-bios/keymaps/cz index 29cf2b05d8..60ac603489 100644 --- a/pc-bios/keymaps/cz +++ b/pc-bios/keymaps/cz @@ -819,9 +819,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/da b/pc-bios/keymaps/da index 547d8c716b..4e42d9ece2 100644 --- a/pc-bios/keymaps/da +++ b/pc-bios/keymaps/da @@ -818,9 +818,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym 0x0edd0160) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym 0x0edd0270) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/de b/pc-bios/keymaps/de index 261243edbc..7be0030dde 100644 --- a/pc-bios/keymaps/de +++ b/pc-bios/keymaps/de @@ -816,9 +816,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/de-ch b/pc-bios/keymaps/de-ch index ed3da058e4..4aad312922 100644 --- a/pc-bios/keymaps/de-ch +++ b/pc-bios/keymaps/de-ch @@ -818,9 +818,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/en-gb b/pc-bios/keymaps/en-gb index 18d8fce4d4..0fd8198b3e 100644 --- a/pc-bios/keymaps/en-gb +++ b/pc-bios/keymaps/en-gb @@ -817,9 +817,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/en-us b/pc-bios/keymaps/en-us index 06762cfc6c..70cc7a2e62 100644 --- a/pc-bios/keymaps/en-us +++ b/pc-bios/keymaps/en-us @@ -729,9 +729,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/es b/pc-bios/keymaps/es index fde441492d..b8fe3dc90f 100644 --- a/pc-bios/keymaps/es +++ b/pc-bios/keymaps/es @@ -817,9 +817,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/et b/pc-bios/keymaps/et index a5dcbd18ab..946e388836 100644 --- a/pc-bios/keymaps/et +++ b/pc-bios/keymaps/et @@ -727,9 +727,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/fi b/pc-bios/keymaps/fi index 816749421e..c8e943b8e7 100644 --- a/pc-bios/keymaps/fi +++ b/pc-bios/keymaps/fi @@ -792,9 +792,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/fo b/pc-bios/keymaps/fo index 8bb6f97bba..20791e1f1f 100644 --- a/pc-bios/keymaps/fo +++ b/pc-bios/keymaps/fo @@ -819,9 +819,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/fr b/pc-bios/keymaps/fr index 82ca812c7e..f865512758 100644 --- a/pc-bios/keymaps/fr +++ b/pc-bios/keymaps/fr @@ -819,9 +819,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/fr-be b/pc-bios/keymaps/fr-be index f225f179a2..e680abb319 100644 --- a/pc-bios/keymaps/fr-be +++ b/pc-bios/keymaps/fr-be @@ -818,9 +818,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/fr-ca b/pc-bios/keymaps/fr-ca index f264d0a9c3..e0b741adc3 100644 --- a/pc-bios/keymaps/fr-ca +++ b/pc-bios/keymaps/fr-ca @@ -750,9 +750,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/fr-ch b/pc-bios/keymaps/fr-ch index bdd944da1c..fe200ea39c 100644 --- a/pc-bios/keymaps/fr-ch +++ b/pc-bios/keymaps/fr-ch @@ -818,9 +818,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/hr b/pc-bios/keymaps/hr index 252936c3ae..f936a256e4 100644 --- a/pc-bios/keymaps/hr +++ b/pc-bios/keymaps/hr @@ -819,9 +819,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/hu b/pc-bios/keymaps/hu index 853147610a..bef6c19f90 100644 --- a/pc-bios/keymaps/hu +++ b/pc-bios/keymaps/hu @@ -818,9 +818,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym 0x0a865600) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym 0x0a865710) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/is b/pc-bios/keymaps/is index c88fa603aa..115c2d09bb 100644 --- a/pc-bios/keymaps/is +++ b/pc-bios/keymaps/is @@ -819,9 +819,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/it b/pc-bios/keymaps/it index df00156cf8..66f46e7ae3 100644 --- a/pc-bios/keymaps/it +++ b/pc-bios/keymaps/it @@ -822,9 +822,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/ja b/pc-bios/keymaps/ja index 6eb2e7bc20..4589dd29b7 100644 --- a/pc-bios/keymaps/ja +++ b/pc-bios/keymaps/ja @@ -733,9 +733,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/lt b/pc-bios/keymaps/lt index db9b24f611..141286f0af 100644 --- a/pc-bios/keymaps/lt +++ b/pc-bios/keymaps/lt @@ -817,9 +817,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/lv b/pc-bios/keymaps/lv index 54997ce092..240d8d3e85 100644 --- a/pc-bios/keymaps/lv +++ b/pc-bios/keymaps/lv @@ -792,9 +792,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/meson.build b/pc-bios/keymaps/meson.build new file mode 100644 index 0000000000..b737c82230 --- /dev/null +++ b/pc-bios/keymaps/meson.build @@ -0,0 +1,56 @@ +keymaps = { + 'ar': '-l ar', + 'bepo': '-l fr -v dvorak', + 'cz': '-l cz', + 'da': '-l dk', + 'de': '-l de -v nodeadkeys', + 'de-ch': '-l ch', + 'en-gb': '-l gb', + 'en-us': '-l us', + 'es': '-l es', + 'et': '-l et', + 'fi': '-l fi', + 'fo': '-l fo', + 'fr': '-l fr -v nodeadkeys', + 'fr-be': '-l be', + 'fr-ca': '-l ca -v fr', + 'fr-ch': '-l ch -v fr', + 'hr': '-l hr', + 'hu': '-l hu', + 'is': '-l is', + 'it': '-l it', + 'ja': '-l jp -m jp106', + 'lt': '-l lt', + 'lv': '-l lv', + 'mk': '-l mk', + 'nl': '-l nl', + 'no': '-l no', + 'pl': '-l pl', + 'pt': '-l pt', + 'pt-br': '-l br', + 'ru': '-l ru', + 'th': '-l th', + 'tr': '-l tr', +} + +if meson.is_cross_build() or 'CONFIG_XKBCOMMON' not in config_host + native_qemu_keymap = find_program('qemu-keymap', required: false, disabler: true) +else + native_qemu_keymap = qemu_keymap +endif +t = [] +foreach km, args: keymaps + t += custom_target(km, + build_by_default: true, + output: km, + command: [native_qemu_keymap, '-f', '@OUTPUT@', args.split()], + install_dir: config_host['qemu_datadir'] / 'keymaps') +endforeach +if t.length() > 0 + alias_target('update-keymaps', t) +else + # install from the source tree + install_data(keymaps.keys(), install_dir: config_host['qemu_datadir'] / 'keymaps') +endif + +install_data(['sl', 'sv'], install_dir: config_host['qemu_datadir'] / 'keymaps') diff --git a/pc-bios/keymaps/mk b/pc-bios/keymaps/mk index cb362b6d39..d331b23bba 100644 --- a/pc-bios/keymaps/mk +++ b/pc-bios/keymaps/mk @@ -729,9 +729,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/nl b/pc-bios/keymaps/nl index 1579829eef..d6522d117b 100644 --- a/pc-bios/keymaps/nl +++ b/pc-bios/keymaps/nl @@ -819,9 +819,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/no b/pc-bios/keymaps/no index cd634e7b90..631f4dc1a7 100644 --- a/pc-bios/keymaps/no +++ b/pc-bios/keymaps/no @@ -833,9 +833,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym 0x00408160) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym 0x00408270) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/pl b/pc-bios/keymaps/pl index 30d93ca727..6a966f5392 100644 --- a/pc-bios/keymaps/pl +++ b/pc-bios/keymaps/pl @@ -823,9 +823,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/pt b/pc-bios/keymaps/pt index c34d6e3761..31c1dccc2c 100644 --- a/pc-bios/keymaps/pt +++ b/pc-bios/keymaps/pt @@ -816,9 +816,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/pt-br b/pc-bios/keymaps/pt-br index 2d409c0bc0..0bac9e34a3 100644 --- a/pc-bios/keymaps/pt-br +++ b/pc-bios/keymaps/pt-br @@ -816,9 +816,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/ru b/pc-bios/keymaps/ru index 9502ba1269..9f3492ef5d 100644 --- a/pc-bios/keymaps/ru +++ b/pc-bios/keymaps/ru @@ -730,9 +730,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/th b/pc-bios/keymaps/th index b8298d902b..2c4a17f0e5 100644 --- a/pc-bios/keymaps/th +++ b/pc-bios/keymaps/th @@ -729,9 +729,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/keymaps/tr b/pc-bios/keymaps/tr index 8ef60a60c1..2f5bd621a3 100644 --- a/pc-bios/keymaps/tr +++ b/pc-bios/keymaps/tr @@ -812,9 +812,247 @@ XF86AudioMedia 0xed # evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) -# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 246 (0xf6): no evdev -> QKeyCode mapping (xkb keysym XF86WWAN) -# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym Invalid) +# evdev 247 (0xf7): no evdev -> QKeyCode mapping (xkb keysym XF86RFKill) + +# evdev 248 (0xf8): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 249 (0xf9): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 250 (0xfa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 251 (0xfb): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 252 (0xfc): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 253 (0xfd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 254 (0xfe): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 255 (0xff): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 256 (0x100): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 257 (0x101): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 258 (0x102): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 259 (0x103): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 260 (0x104): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 261 (0x105): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 262 (0x106): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 263 (0x107): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 264 (0x108): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 265 (0x109): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 266 (0x10a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 267 (0x10b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 268 (0x10c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 269 (0x10d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 270 (0x10e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 271 (0x10f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 272 (0x110): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 273 (0x111): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 274 (0x112): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 275 (0x113): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 276 (0x114): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 277 (0x115): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 278 (0x116): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 279 (0x117): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 280 (0x118): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 281 (0x119): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 282 (0x11a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 283 (0x11b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 284 (0x11c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 285 (0x11d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 286 (0x11e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 287 (0x11f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 288 (0x120): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 289 (0x121): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 290 (0x122): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 291 (0x123): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 292 (0x124): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 293 (0x125): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 294 (0x126): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 295 (0x127): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 296 (0x128): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 297 (0x129): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 298 (0x12a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 299 (0x12b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 300 (0x12c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 301 (0x12d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 302 (0x12e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 303 (0x12f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 304 (0x130): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 305 (0x131): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 306 (0x132): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 307 (0x133): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 308 (0x134): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 309 (0x135): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 310 (0x136): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 311 (0x137): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 312 (0x138): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 313 (0x139): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 314 (0x13a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 315 (0x13b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 316 (0x13c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 317 (0x13d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 318 (0x13e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 319 (0x13f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 320 (0x140): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 321 (0x141): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 322 (0x142): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 323 (0x143): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 324 (0x144): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 325 (0x145): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 326 (0x146): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 327 (0x147): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 328 (0x148): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 329 (0x149): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 330 (0x14a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 331 (0x14b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 332 (0x14c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 333 (0x14d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 334 (0x14e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 335 (0x14f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 336 (0x150): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 337 (0x151): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 338 (0x152): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 339 (0x153): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 340 (0x154): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 341 (0x155): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 342 (0x156): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 343 (0x157): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 344 (0x158): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 345 (0x159): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 346 (0x15a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 347 (0x15b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 348 (0x15c): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 349 (0x15d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 350 (0x15e): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 351 (0x15f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 352 (0x160): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 353 (0x161): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 354 (0x162): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 355 (0x163): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 356 (0x164): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 357 (0x165): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 358 (0x166): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 359 (0x167): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 360 (0x168): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 361 (0x169): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 362 (0x16a): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 363 (0x16b): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 364 (0x16c): no evdev -> QKeyCode mapping (xkb keysym XF86Favorites) + +# evdev 365 (0x16d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 366 (0x16e): no evdev -> QKeyCode mapping (xkb keysym XF86Keyboard) # # quirks section start diff --git a/pc-bios/meson.build b/pc-bios/meson.build index 6e3bfe3ca4..b6389f5148 100644 --- a/pc-bios/meson.build +++ b/pc-bios/meson.build @@ -25,3 +25,4 @@ if 'DECOMPRESS_EDK2_BLOBS' in config_host endif subdir('descriptors') +subdir('keymaps') diff --git a/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin b/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin new file mode 100644 index 0000000000..23b4dfb3b9 --- /dev/null +++ b/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin Binary files differdiff --git a/pc-bios/opensbi-riscv32-generic-fw_dynamic.elf b/pc-bios/opensbi-riscv32-generic-fw_dynamic.elf new file mode 100644 index 0000000000..eb9ebf5674 --- /dev/null +++ b/pc-bios/opensbi-riscv32-generic-fw_dynamic.elf Binary files differdiff --git a/pc-bios/opensbi-riscv32-sifive_u-fw_jump.bin b/pc-bios/opensbi-riscv32-sifive_u-fw_jump.bin deleted file mode 100644 index 3e0da54080..0000000000 --- a/pc-bios/opensbi-riscv32-sifive_u-fw_jump.bin +++ /dev/null Binary files differdiff --git a/pc-bios/opensbi-riscv32-virt-fw_jump.bin b/pc-bios/opensbi-riscv32-virt-fw_jump.bin deleted file mode 100644 index bc56ed61fd..0000000000 --- a/pc-bios/opensbi-riscv32-virt-fw_jump.bin +++ /dev/null Binary files differdiff --git a/pc-bios/opensbi-riscv64-generic-fw_dynamic.bin b/pc-bios/opensbi-riscv64-generic-fw_dynamic.bin new file mode 100644 index 0000000000..16c0cf4d0a --- /dev/null +++ b/pc-bios/opensbi-riscv64-generic-fw_dynamic.bin Binary files differdiff --git a/pc-bios/opensbi-riscv64-generic-fw_dynamic.elf b/pc-bios/opensbi-riscv64-generic-fw_dynamic.elf new file mode 100644 index 0000000000..642a64e240 --- /dev/null +++ b/pc-bios/opensbi-riscv64-generic-fw_dynamic.elf Binary files differdiff --git a/pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin b/pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin deleted file mode 100644 index 1acee86dc7..0000000000 --- a/pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin +++ /dev/null Binary files differdiff --git a/pc-bios/opensbi-riscv64-virt-fw_jump.bin b/pc-bios/opensbi-riscv64-virt-fw_jump.bin deleted file mode 100644 index c62f2b449b..0000000000 --- a/pc-bios/opensbi-riscv64-virt-fw_jump.bin +++ /dev/null Binary files differdiff --git a/pc-bios/petalogix-ml605.dtb b/pc-bios/petalogix-ml605.dtb index fbbd45fdad..9a05434db7 100644 --- a/pc-bios/petalogix-ml605.dtb +++ b/pc-bios/petalogix-ml605.dtb Binary files differdiff --git a/pc-bios/petalogix-ml605.dts b/pc-bios/petalogix-ml605.dts new file mode 100644 index 0000000000..b307a29279 --- /dev/null +++ b/pc-bios/petalogix-ml605.dts @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2020 Xilinx Inc. + * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; + +/ { + #address-cells = < 0x01 >; + #size-cells = < 0x01 >; + compatible = "xlnx,microblaze"; + model = "edk131"; + + memory@50000000 { + device_type = "memory"; + reg = < 0x50000000 0x10000000 >; + }; + + aliases { + ethernet0 = "/axi/axi-ethernet@82780000"; + serial0 = "/axi/serial@83e00000"; + }; + + chosen { + bootargs = " console=ttyS0,115200 "; + stdout-path = "/axi/serial@83e00000"; + }; + + cpus { + #address-cells = < 0x01 >; + #cpus = < 0x01 >; + #size-cells = < 0x00 >; + + cpu@0 { + clock-frequency = < 0xbebc200 >; + compatible = "xlnx,microblaze-8.10.a"; + d-cache-baseaddr = < 0x50000000 >; + d-cache-highaddr = < 0x5fffffff >; + d-cache-line-size = < 0x20 >; + d-cache-size = < 0x800 >; + device_type = "cpu"; + i-cache-baseaddr = < 0x50000000 >; + i-cache-highaddr = < 0x5fffffff >; + i-cache-line-size = < 0x20 >; + i-cache-size = < 0x800 >; + model = "microblaze,8.10.a"; + reg = < 0x00 >; + timebase-frequency = < 0xbebc200 >; + xlnx,addr-tag-bits = < 0x11 >; + xlnx,allow-dcache-wr = < 0x01 >; + xlnx,allow-icache-wr = < 0x01 >; + xlnx,area-optimized = < 0x00 >; + xlnx,branch-target-cache-size = < 0x00 >; + xlnx,cache-byte-size = < 0x800 >; + xlnx,d-axi = < 0x01 >; + xlnx,d-lmb = < 0x01 >; + xlnx,d-plb = < 0x00 >; + xlnx,data-size = < 0x20 >; + xlnx,dcache-addr-tag = < 0x11 >; + xlnx,dcache-always-used = < 0x01 >; + xlnx,dcache-byte-size = < 0x800 >; + xlnx,dcache-data-width = < 0x00 >; + xlnx,dcache-force-tag-lutram = < 0x00 >; + xlnx,dcache-interface = < 0x01 >; + xlnx,dcache-line-len = < 0x08 >; + xlnx,dcache-use-fsl = < 0x00 >; + xlnx,dcache-use-writeback = < 0x01 >; + xlnx,dcache-victims = < 0x00 >; + xlnx,debug-enabled = < 0x01 >; + xlnx,div-zero-exception = < 0x01 >; + xlnx,dynamic-bus-sizing = < 0x01 >; + xlnx,ecc-use-ce-exception = < 0x00 >; + xlnx,edge-is-positive = < 0x01 >; + xlnx,endianness = < 0x01 >; + xlnx,family = "virtex6"; + xlnx,fault-tolerant = < 0x00 >; + xlnx,fpu-exception = < 0x01 >; + xlnx,freq = < 0xbebc200 >; + xlnx,fsl-data-size = < 0x20 >; + xlnx,fsl-exception = < 0x00 >; + xlnx,fsl-links = < 0x00 >; + xlnx,i-axi = < 0x01 >; + xlnx,i-lmb = < 0x01 >; + xlnx,i-plb = < 0x00 >; + xlnx,icache-always-used = < 0x01 >; + xlnx,icache-data-width = < 0x00 >; + xlnx,icache-force-tag-lutram = < 0x00 >; + xlnx,icache-interface = < 0x00 >; + xlnx,icache-line-len = < 0x08 >; + xlnx,icache-streams = < 0x00 >; + xlnx,icache-use-fsl = < 0x00 >; + xlnx,icache-victims = < 0x00 >; + xlnx,ill-opcode-exception = < 0x01 >; + xlnx,instance = "microblaze_0"; + xlnx,interconnect = < 0x02 >; + xlnx,interrupt-is-edge = < 0x00 >; + xlnx,mmu-dtlb-size = < 0x04 >; + xlnx,mmu-itlb-size = < 0x02 >; + xlnx,mmu-privileged-instr = < 0x00 >; + xlnx,mmu-tlb-access = < 0x03 >; + xlnx,mmu-zones = < 0x02 >; + xlnx,number-of-pc-brk = < 0x01 >; + xlnx,number-of-rd-addr-brk = < 0x00 >; + xlnx,number-of-wr-addr-brk = < 0x00 >; + xlnx,opcode-0x0-illegal = < 0x01 >; + xlnx,optimization = < 0x00 >; + xlnx,pvr = < 0x02 >; + xlnx,pvr-user1 = < 0x00 >; + xlnx,pvr-user2 = < 0x00 >; + xlnx,reset-msr = < 0x00 >; + xlnx,sco = < 0x00 >; + xlnx,stream-interconnect = < 0x00 >; + xlnx,unaligned-exceptions = < 0x01 >; + xlnx,use-barrel = < 0x01 >; + xlnx,use-branch-target-cache = < 0x00 >; + xlnx,use-dcache = < 0x01 >; + xlnx,use-div = < 0x01 >; + xlnx,use-ext-brk = < 0x01 >; + xlnx,use-ext-nm-brk = < 0x01 >; + xlnx,use-extended-fsl-instr = < 0x00 >; + xlnx,use-fpu = < 0x01 >; + xlnx,use-hw-mul = < 0x02 >; + xlnx,use-icache = < 0x01 >; + xlnx,use-interrupt = < 0x01 >; + xlnx,use-mmu = < 0x03 >; + xlnx,use-msr-instr = < 0x01 >; + xlnx,use-pcmp-instr = < 0x01 >; + xlnx,use-stack-protection = < 0x00 >; + }; + }; + + axi { + #address-cells = < 0x01 >; + #size-cells = < 0x01 >; + compatible = "xlnx,axi-interconnect-1.02.a\0simple-bus"; + ranges; + + axi-ethernet@82780000 { + axistream-connected = < &axi_dma >; + compatible = "xlnx,axi-ethernet-2.01.a\0xlnx,axi-ethernet-1.00.a"; + device_type = "network"; + interrupt-parent = < &intc >; + interrupts = < 0x03 0x02 >; + local-mac-address = [ 00 0a 35 00 22 01 ]; + phy-handle = < &phy7 >; + reg = < 0x82780000 0x40000 >; + xlnx,avb = < 0x00 >; + xlnx,halfdup = < 0x00 >; + xlnx,include-io = < 0x01 >; + xlnx,mcast-extend = < 0x00 >; + xlnx,phy-type = < 0x01 >; + xlnx,phyaddr = "0B00001"; + xlnx,rxcsum = < 0x00 >; + xlnx,rxmem = < 0x1000 >; + xlnx,rxvlan-strp = < 0x00 >; + xlnx,rxvlan-tag = < 0x00 >; + xlnx,rxvlan-tran = < 0x00 >; + xlnx,stats = < 0x00 >; + xlnx,txcsum = < 0x00 >; + xlnx,txmem = < 0x1000 >; + xlnx,txvlan-strp = < 0x00 >; + xlnx,txvlan-tag = < 0x00 >; + xlnx,txvlan-tran = < 0x00 >; + xlnx,type = < 0x02 >; + + mdio { + #address-cells = < 0x01 >; + #size-cells = < 0x00 >; + + phy7: phy@7 { + compatible = "marvell,88e1111"; + device_type = "ethernet-phy"; + reg = < 0x07 >; + }; + }; + }; + + axi_dma: axi-dma@84600000 { + compatible = "xlnx,axi-dma-3.00.a"; + interrupt-parent = < &intc >; + interrupts = < 0x01 0x02 0x00 0x02 >; + reg = < 0x84600000 0x10000 >; + xlnx,dlytmr-resolution = < 0x4e2 >; + xlnx,family = "virtex6"; + xlnx,include-mm2s = < 0x01 >; + xlnx,include-mm2s-dre = < 0x01 >; + xlnx,include-s2mm = < 0x01 >; + xlnx,include-s2mm-dre = < 0x01 >; + xlnx,mm2s-burst-size = < 0x10 >; + xlnx,prmry-is-aclk-async = < 0x00 >; + xlnx,s2mm-burst-size = < 0x10 >; + xlnx,sg-include-desc-queue = < 0x01 >; + xlnx,sg-include-stscntrl-strm = < 0x01 >; + xlnx,sg-length-width = < 0x10 >; + xlnx,sg-use-stsapp-length = < 0x01 >; + }; + + serial@83e00000 { + clock-frequency = < 0x5f5e100 >; + compatible = "xlnx,axi-uart16550-1.01.a\0xlnx,xps-uart16550-2.00.a\0ns16550a"; + current-speed = < 0x2580 >; + device_type = "serial"; + interrupt-parent = < &intc >; + interrupts = < 0x05 0x02 >; + reg = < 0x83e00000 0x10000 >; + reg-offset = < 0x1000 >; + reg-shift = < 0x02 >; + xlnx,external-xin-clk-hz = < 0x17d7840 >; + xlnx,family = "virtex6"; + xlnx,has-external-rclk = < 0x00 >; + xlnx,has-external-xin = < 0x00 >; + xlnx,is-a-16550 = < 0x01 >; + xlnx,use-modem-ports = < 0x00 >; + xlnx,use-user-ports = < 0x00 >; + }; + + system-timer@83c00000 { + clock-frequency = < 0x5f5e100 >; + compatible = "xlnx,axi-timer-1.01.a\0xlnx,xps-timer-1.00.a"; + interrupt-parent = < &intc >; + interrupts = < 0x02 0x00 >; + reg = < 0x83c00000 0x10000 >; + xlnx,count-width = < 0x20 >; + xlnx,family = "virtex6"; + xlnx,gen0-assert = < 0x01 >; + xlnx,gen1-assert = < 0x01 >; + xlnx,one-timer-only = < 0x00 >; + xlnx,trig0-assert = < 0x01 >; + xlnx,trig1-assert = < 0x01 >; + }; + + intc: interrupt-controller@81800000 { + #interrupt-cells = < 0x02 >; + compatible = "xlnx,axi-intc-1.01.a\0xlnx,xps-intc-1.00.a"; + interrupt-controller; + reg = < 0x81800000 0x10000 >; + xlnx,kind-of-intr = < 0x04 >; + xlnx,num-intr-inputs = < 0x06 >; + }; + + flash@86000000 { + #address-cells = < 0x01 >; + #size-cells = < 0x01 >; + bank-width = < 0x02 >; + compatible = "xlnx,axi-emc-1.01.a\0cfi-flash"; + reg = < 0x86000000 0x2000000 >; + xlnx,axi-clk-period-ps = < 0x2710 >; + xlnx,family = "virtex6"; + xlnx,include-datawidth-matching-0 = < 0x01 >; + xlnx,include-datawidth-matching-1 = < 0x00 >; + xlnx,include-datawidth-matching-2 = < 0x00 >; + xlnx,include-datawidth-matching-3 = < 0x00 >; + xlnx,include-negedge-ioregs = < 0x00 >; + xlnx,max-mem-width = < 0x10 >; + xlnx,mem0-type = < 0x02 >; + xlnx,mem0-width = < 0x10 >; + xlnx,mem1-type = < 0x00 >; + xlnx,mem1-width = < 0x20 >; + xlnx,mem2-type = < 0x00 >; + xlnx,mem2-width = < 0x20 >; + xlnx,mem3-type = < 0x00 >; + xlnx,mem3-width = < 0x20 >; + xlnx,num-banks-mem = < 0x01 >; + xlnx,parity-type-mem-0 = < 0x00 >; + xlnx,parity-type-mem-1 = < 0x00 >; + xlnx,parity-type-mem-2 = < 0x00 >; + xlnx,parity-type-mem-3 = < 0x00 >; + xlnx,s-axi-en-reg = < 0x00 >; + xlnx,s-axi-mem-addr-width = < 0x20 >; + xlnx,s-axi-mem-data-width = < 0x20 >; + xlnx,s-axi-mem-id-width = < 0x01 >; + xlnx,s-axi-mem-protocol = "AXI4LITE"; + xlnx,s-axi-reg-addr-width = < 0x20 >; + xlnx,s-axi-reg-data-width = < 0x20 >; + xlnx,s-axi-reg-protocol = "axi4"; + xlnx,synch-pipedelay-0 = < 0x02 >; + xlnx,synch-pipedelay-1 = < 0x02 >; + xlnx,synch-pipedelay-2 = < 0x02 >; + xlnx,synch-pipedelay-3 = < 0x02 >; + xlnx,tavdv-ps-mem-0 = < 0x1fbd0 >; + xlnx,tavdv-ps-mem-1 = < 0x3a98 >; + xlnx,tavdv-ps-mem-2 = < 0x3a98 >; + xlnx,tavdv-ps-mem-3 = < 0x3a98 >; + xlnx,tcedv-ps-mem-0 = < 0x1fbd0 >; + xlnx,tcedv-ps-mem-1 = < 0x3a98 >; + xlnx,tcedv-ps-mem-2 = < 0x3a98 >; + xlnx,tcedv-ps-mem-3 = < 0x3a98 >; + xlnx,thzce-ps-mem-0 = < 0x88b8 >; + xlnx,thzce-ps-mem-1 = < 0x1b58 >; + xlnx,thzce-ps-mem-2 = < 0x1b58 >; + xlnx,thzce-ps-mem-3 = < 0x1b58 >; + xlnx,thzoe-ps-mem-0 = < 0x1b58 >; + xlnx,thzoe-ps-mem-1 = < 0x1b58 >; + xlnx,thzoe-ps-mem-2 = < 0x1b58 >; + xlnx,thzoe-ps-mem-3 = < 0x1b58 >; + xlnx,tlzwe-ps-mem-0 = < 0x88b8 >; + xlnx,tlzwe-ps-mem-1 = < 0x00 >; + xlnx,tlzwe-ps-mem-2 = < 0x00 >; + xlnx,tlzwe-ps-mem-3 = < 0x00 >; + xlnx,tpacc-ps-flash-0 = < 0x61a8 >; + xlnx,tpacc-ps-flash-1 = < 0x61a8 >; + xlnx,tpacc-ps-flash-2 = < 0x61a8 >; + xlnx,tpacc-ps-flash-3 = < 0x61a8 >; + xlnx,twc-ps-mem-0 = < 0x32c8 >; + xlnx,twc-ps-mem-1 = < 0x3a98 >; + xlnx,twc-ps-mem-2 = < 0x3a98 >; + xlnx,twc-ps-mem-3 = < 0x3a98 >; + xlnx,twp-ps-mem-0 = < 0x11170 >; + xlnx,twp-ps-mem-1 = < 0x2ee0 >; + xlnx,twp-ps-mem-2 = < 0x2ee0 >; + xlnx,twp-ps-mem-3 = < 0x2ee0 >; + xlnx,twph-ps-mem-0 = < 0x2ee0 >; + xlnx,twph-ps-mem-1 = < 0x2ee0 >; + xlnx,twph-ps-mem-2 = < 0x2ee0 >; + xlnx,twph-ps-mem-3 = < 0x2ee0 >; + + partition@0 { + label = "fpga"; + reg = < 0x00 0x100000 >; + }; + + partition@100000 { + label = "boot"; + reg = < 0x100000 0x40000 >; + }; + + partition@140000 { + label = "bootenv"; + reg = < 0x140000 0x20000 >; + }; + + partition@160000 { + label = "config"; + reg = < 0x160000 0x20000 >; + }; + + partition@180000 { + label = "image"; + reg = < 0x180000 0xa00000 >; + }; + + partition@b80000 { + label = "spare"; + reg = < 0xb80000 0x00 >; + }; + }; + }; +}; diff --git a/pc-bios/petalogix-s3adsp1800.dtb b/pc-bios/petalogix-s3adsp1800.dtb index 8ac80f2f2d..2513599438 100644 --- a/pc-bios/petalogix-s3adsp1800.dtb +++ b/pc-bios/petalogix-s3adsp1800.dtb Binary files differdiff --git a/pc-bios/petalogix-s3adsp1800.dts b/pc-bios/petalogix-s3adsp1800.dts new file mode 100644 index 0000000000..f53c36f870 --- /dev/null +++ b/pc-bios/petalogix-s3adsp1800.dts @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2020 Xilinx Inc. + * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; + +/ { + #address-cells = <0x01>; + #size-cells = <0x01>; + compatible = "xlnx,microblaze"; + model = "testing"; + + memory@90000000 { + device_type = "memory"; + reg = <0x90000000 0x8000000>; + }; + + chosen { + bootargs = "console=ttyUL0,115200"; + stdout-path = "/plb/serial@84000000"; + }; + + cpus { + #address-cells = <0x01>; + #size-cells = <0x00>; + #cpus = <0x01>; + + cpu@0 { + clock-frequency = <0x3b9aca0>; + compatible = "xlnx,microblaze-7.10.d"; + d-cache-baseaddr = <0x90000000>; + d-cache-highaddr = <0x97ffffff>; + d-cache-line-size = <0x10>; + d-cache-size = <0x800>; + device_type = "cpu"; + i-cache-baseaddr = <0x90000000>; + i-cache-highaddr = <0x97ffffff>; + i-cache-line-size = <0x10>; + i-cache-size = <0x800>; + model = "microblaze,7.10.d"; + reg = <0x00>; + timebase-frequency = <0x3b9aca0>; + xlnx,addr-tag-bits = <0x10>; + xlnx,allow-dcache-wr = <0x01>; + xlnx,allow-icache-wr = <0x01>; + xlnx,area-optimized = <0x00>; + xlnx,cache-byte-size = <0x800>; + xlnx,d-lmb = <0x01>; + xlnx,d-opb = <0x00>; + xlnx,d-plb = <0x01>; + xlnx,data-size = <0x20>; + xlnx,dcache-addr-tag = <0x10>; + xlnx,dcache-always-used = <0x00>; + xlnx,dcache-byte-size = <0x800>; + xlnx,dcache-line-len = <0x04>; + xlnx,dcache-use-fsl = <0x01>; + xlnx,debug-enabled = <0x01>; + xlnx,div-zero-exception = <0x00>; + xlnx,dopb-bus-exception = <0x00>; + xlnx,dynamic-bus-sizing = <0x01>; + xlnx,edge-is-positive = <0x01>; + xlnx,family = "spartan3adsp"; + xlnx,fpu-exception = <0x00>; + xlnx,fsl-data-size = <0x20>; + xlnx,fsl-exception = <0x00>; + xlnx,fsl-links = <0x00>; + xlnx,i-lmb = <0x01>; + xlnx,i-opb = <0x00>; + xlnx,i-plb = <0x01>; + xlnx,icache-always-used = <0x00>; + xlnx,icache-line-len = <0x04>; + xlnx,icache-use-fsl = <0x01>; + xlnx,ill-opcode-exception = <0x00>; + xlnx,instance = "microblaze_0"; + xlnx,interconnect = <0x01>; + xlnx,interrupt-is-edge = <0x00>; + xlnx,iopb-bus-exception = <0x00>; + xlnx,mmu-dtlb-size = <0x04>; + xlnx,mmu-itlb-size = <0x02>; + xlnx,mmu-tlb-access = <0x03>; + xlnx,mmu-zones = <0x10>; + xlnx,number-of-pc-brk = <0x03>; + xlnx,number-of-rd-addr-brk = <0x02>; + xlnx,number-of-wr-addr-brk = <0x02>; + xlnx,opcode-0x0-illegal = <0x00>; + xlnx,pvr = <0x01>; + xlnx,pvr-user1 = <0x00>; + xlnx,pvr-user2 = <0x00>; + xlnx,reset-msr = <0x00>; + xlnx,sco = <0x00>; + xlnx,unaligned-exceptions = <0x01>; + xlnx,use-barrel = <0x01>; + xlnx,use-dcache = <0x01>; + xlnx,use-div = <0x00>; + xlnx,use-ext-brk = <0x01>; + xlnx,use-ext-nm-brk = <0x01>; + xlnx,use-extended-fsl-instr = <0x00>; + xlnx,use-fpu = <0x00>; + xlnx,use-hw-mul = <0x01>; + xlnx,use-icache = <0x01>; + xlnx,use-interrupt = <0x01>; + xlnx,use-mmu = <0x03>; + xlnx,use-msr-instr = <0x01>; + xlnx,use-pcmp-instr = <0x01>; + }; + }; + + plb { + #address-cells = <0x01>; + #size-cells = <0x01>; + compatible = "xlnx,plb-v46-1.03.a\0simple-bus"; + ranges; + + ethernet@81000000 { + compatible = "xlnx,xps-ethernetlite-2.00.a"; + device_type = "network"; + interrupt-parent = <0x01>; + interrupts = <0x01 0x00>; + local-mac-address = [02 00 00 00 00 00]; + reg = <0x81000000 0x10000>; + xlnx,duplex = <0x01>; + xlnx,family = "spartan3adsp"; + xlnx,rx-ping-pong = <0x00>; + xlnx,tx-ping-pong = <0x00>; + }; + + flash@a0000000 { + bank-width = <0x01>; + compatible = "xlnx,xps-mch-emc-2.00.a\0cfi-flash"; + reg = <0xa0000000 0x1000000>; + xlnx,family = "spartan3adsp"; + xlnx,include-datawidth-matching-0 = <0x01>; + xlnx,include-datawidth-matching-1 = <0x00>; + xlnx,include-datawidth-matching-2 = <0x00>; + xlnx,include-datawidth-matching-3 = <0x00>; + xlnx,include-negedge-ioregs = <0x00>; + xlnx,include-plb-ipif = <0x01>; + xlnx,include-wrbuf = <0x01>; + xlnx,max-mem-width = <0x08>; + xlnx,mch-native-dwidth = <0x20>; + xlnx,mch-plb-clk-period-ps = <0x3e80>; + xlnx,mch-splb-awidth = <0x20>; + xlnx,mch0-accessbuf-depth = <0x10>; + xlnx,mch0-protocol = <0x00>; + xlnx,mch0-rddatabuf-depth = <0x10>; + xlnx,mch1-accessbuf-depth = <0x10>; + xlnx,mch1-protocol = <0x00>; + xlnx,mch1-rddatabuf-depth = <0x10>; + xlnx,mch2-accessbuf-depth = <0x10>; + xlnx,mch2-protocol = <0x00>; + xlnx,mch2-rddatabuf-depth = <0x10>; + xlnx,mch3-accessbuf-depth = <0x10>; + xlnx,mch3-protocol = <0x00>; + xlnx,mch3-rddatabuf-depth = <0x10>; + xlnx,mem0-width = <0x08>; + xlnx,mem1-width = <0x20>; + xlnx,mem2-width = <0x20>; + xlnx,mem3-width = <0x20>; + xlnx,num-banks-mem = <0x01>; + xlnx,num-channels = <0x00>; + xlnx,priority-mode = <0x00>; + xlnx,synch-mem-0 = <0x00>; + xlnx,synch-mem-1 = <0x00>; + xlnx,synch-mem-2 = <0x00>; + xlnx,synch-mem-3 = <0x00>; + xlnx,synch-pipedelay-0 = <0x02>; + xlnx,synch-pipedelay-1 = <0x02>; + xlnx,synch-pipedelay-2 = <0x02>; + xlnx,synch-pipedelay-3 = <0x02>; + xlnx,tavdv-ps-mem-0 = <0x11170>; + xlnx,tavdv-ps-mem-1 = <0x3a98>; + xlnx,tavdv-ps-mem-2 = <0x3a98>; + xlnx,tavdv-ps-mem-3 = <0x3a98>; + xlnx,tcedv-ps-mem-0 = <0x11170>; + xlnx,tcedv-ps-mem-1 = <0x3a98>; + xlnx,tcedv-ps-mem-2 = <0x3a98>; + xlnx,tcedv-ps-mem-3 = <0x3a98>; + xlnx,thzce-ps-mem-0 = <0x61a8>; + xlnx,thzce-ps-mem-1 = <0x1b58>; + xlnx,thzce-ps-mem-2 = <0x1b58>; + xlnx,thzce-ps-mem-3 = <0x1b58>; + xlnx,thzoe-ps-mem-0 = <0x61a8>; + xlnx,thzoe-ps-mem-1 = <0x1b58>; + xlnx,thzoe-ps-mem-2 = <0x1b58>; + xlnx,thzoe-ps-mem-3 = <0x1b58>; + xlnx,tlzwe-ps-mem-0 = <0x1388>; + xlnx,tlzwe-ps-mem-1 = <0x00>; + xlnx,tlzwe-ps-mem-2 = <0x00>; + xlnx,tlzwe-ps-mem-3 = <0x00>; + xlnx,twc-ps-mem-0 = <0x11170>; + xlnx,twc-ps-mem-1 = <0x3a98>; + xlnx,twc-ps-mem-2 = <0x3a98>; + xlnx,twc-ps-mem-3 = <0x3a98>; + xlnx,twp-ps-mem-0 = <0xafc8>; + xlnx,twp-ps-mem-1 = <0x2ee0>; + xlnx,twp-ps-mem-2 = <0x2ee0>; + xlnx,twp-ps-mem-3 = <0x2ee0>; + xlnx,xcl0-linesize = <0x04>; + xlnx,xcl0-writexfer = <0x01>; + xlnx,xcl1-linesize = <0x04>; + xlnx,xcl1-writexfer = <0x01>; + xlnx,xcl2-linesize = <0x04>; + xlnx,xcl2-writexfer = <0x01>; + xlnx,xcl3-linesize = <0x04>; + xlnx,xcl3-writexfer = <0x01>; + }; + + gpio@81400000 { + compatible = "xlnx,xps-gpio-1.00.a"; + interrupt-parent = <0x01>; + interrupts = <0x02 0x02>; + reg = <0x81400000 0x10000>; + xlnx,all-inputs = <0x00>; + xlnx,all-inputs-2 = <0x00>; + xlnx,dout-default = <0x00>; + xlnx,dout-default-2 = <0x00>; + xlnx,family = "spartan3adsp"; + xlnx,gpio-width = <0x08>; + xlnx,interrupt-present = <0x01>; + xlnx,is-bidir = <0x00>; + xlnx,is-bidir-2 = <0x01>; + xlnx,is-dual = <0x00>; + xlnx,tri-default = <0xffffffff>; + xlnx,tri-default-2 = <0xffffffff>; + }; + + serial@84000000 { + clock-frequency = <0x3b9aca0>; + compatible = "xlnx,xps-uartlite-1.00.a"; + current-speed = <0x1c200>; + device_type = "serial"; + interrupt-parent = <0x01>; + interrupts = <0x03 0x00>; + port-number = <0x00>; + reg = <0x84000000 0x10000>; + xlnx,baudrate = <0x1c200>; + xlnx,data-bits = <0x08>; + xlnx,family = "spartan3adsp"; + xlnx,odd-parity = <0x00>; + xlnx,use-parity = <0x00>; + }; + + debug@84400000 { + compatible = "xlnx,mdm-1.00.d"; + reg = <0x84400000 0x10000>; + xlnx,family = "spartan3adsp"; + xlnx,interconnect = <0x01>; + xlnx,jtag-chain = <0x02>; + xlnx,mb-dbg-ports = <0x01>; + xlnx,uart-width = <0x08>; + xlnx,use-uart = <0x01>; + xlnx,write-fsl-ports = <0x00>; + }; + + interrupt-controller@81800000 { + #interrupt-cells = <0x02>; + compatible = "xlnx,xps-intc-1.00.a"; + interrupt-controller; + reg = <0x81800000 0x10000>; + xlnx,kind-of-intr = <0x0a>; + xlnx,num-intr-inputs = <0x04>; + linux,phandle = <0x01>; + }; + + timer@83c00000 { + compatible = "xlnx,xps-timer-1.00.a"; + interrupt-parent = <0x01>; + interrupts = <0x00 0x02>; + reg = <0x83c00000 0x10000>; + xlnx,count-width = <0x20>; + xlnx,family = "spartan3adsp"; + xlnx,gen0-assert = <0x01>; + xlnx,gen1-assert = <0x01>; + xlnx,one-timer-only = <0x00>; + xlnx,trig0-assert = <0x01>; + xlnx,trig1-assert = <0x01>; + }; + }; +}; diff --git a/pc-bios/vgabios-ati.bin b/pc-bios/vgabios-ati.bin index 3dbfe53e5c..118caacde6 100644 --- a/pc-bios/vgabios-ati.bin +++ b/pc-bios/vgabios-ati.bin Binary files differdiff --git a/pc-bios/vgabios-bochs-display.bin b/pc-bios/vgabios-bochs-display.bin index ca4c3db2db..d79124b760 100644 --- a/pc-bios/vgabios-bochs-display.bin +++ b/pc-bios/vgabios-bochs-display.bin Binary files differdiff --git a/pc-bios/vgabios-cirrus.bin b/pc-bios/vgabios-cirrus.bin index b8ee1fe0ff..37bf5e7fe7 100644 --- a/pc-bios/vgabios-cirrus.bin +++ b/pc-bios/vgabios-cirrus.bin Binary files differdiff --git a/pc-bios/vgabios-qxl.bin b/pc-bios/vgabios-qxl.bin index 9829cd1dec..0ff8ff21f0 100644 --- a/pc-bios/vgabios-qxl.bin +++ b/pc-bios/vgabios-qxl.bin Binary files differdiff --git a/pc-bios/vgabios-ramfb.bin b/pc-bios/vgabios-ramfb.bin index 12dcb8e823..df5e9d615a 100644 --- a/pc-bios/vgabios-ramfb.bin +++ b/pc-bios/vgabios-ramfb.bin Binary files differdiff --git a/pc-bios/vgabios-stdvga.bin b/pc-bios/vgabios-stdvga.bin index 68fe2fe820..70f6094153 100644 --- a/pc-bios/vgabios-stdvga.bin +++ b/pc-bios/vgabios-stdvga.bin Binary files differdiff --git a/pc-bios/vgabios-virtio.bin b/pc-bios/vgabios-virtio.bin index 60ce81d37c..65af5be59d 100644 --- a/pc-bios/vgabios-virtio.bin +++ b/pc-bios/vgabios-virtio.bin Binary files differdiff --git a/pc-bios/vgabios-vmware.bin b/pc-bios/vgabios-vmware.bin index b75a3517d1..89d42b32c1 100644 --- a/pc-bios/vgabios-vmware.bin +++ b/pc-bios/vgabios-vmware.bin Binary files differdiff --git a/pc-bios/vgabios.bin b/pc-bios/vgabios.bin index 410436fbdf..320471e18d 100644 --- a/pc-bios/vgabios.bin +++ b/pc-bios/vgabios.bin Binary files differdiff --git a/qapi/machine.json b/qapi/machine.json index 481b1f07ec..abc6fd0477 100644 --- a/qapi/machine.json +++ b/qapi/machine.json @@ -357,13 +357,16 @@ # @default-cpu-type: default CPU model typename if none is requested via # the -cpu argument. (since 4.2) # +# @default-ram-id: the default ID of initial RAM memory backend (since 5.2) +# # Since: 1.2.0 ## { 'struct': 'MachineInfo', 'data': { 'name': 'str', '*alias': 'str', '*is-default': 'bool', 'cpu-max': 'int', 'hotpluggable-cpus': 'bool', 'numa-mem-supported': 'bool', - 'deprecated': 'bool', '*default-cpu-type': 'str' } } + 'deprecated': 'bool', '*default-cpu-type': 'str', + '*default-ram-id': 'str' } } ## # @query-machines: diff --git a/qapi/migration.json b/qapi/migration.json index ea53b23dca..5f6b06172c 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -509,6 +509,44 @@ { 'name': 'zstd', 'if': 'defined(CONFIG_ZSTD)' } ] } ## +# @BitmapMigrationBitmapAlias: +# +# @name: The name of the bitmap. +# +# @alias: An alias name for migration (for example the bitmap name on +# the opposite site). +# +# Since: 5.2 +## +{ 'struct': 'BitmapMigrationBitmapAlias', + 'data': { + 'name': 'str', + 'alias': 'str' + } } + +## +# @BitmapMigrationNodeAlias: +# +# Maps a block node name and the bitmaps it has to aliases for dirty +# bitmap migration. +# +# @node-name: A block node name. +# +# @alias: An alias block node name for migration (for example the +# node name on the opposite site). +# +# @bitmaps: Mappings for the bitmaps on this node. +# +# Since: 5.2 +## +{ 'struct': 'BitmapMigrationNodeAlias', + 'data': { + 'node-name': 'str', + 'alias': 'str', + 'bitmaps': [ 'BitmapMigrationBitmapAlias' ] + } } + +## # @MigrationParameter: # # Migration parameters enumeration @@ -642,6 +680,25 @@ # will consume more CPU. # Defaults to 1. (Since 5.0) # +# @block-bitmap-mapping: Maps block nodes and bitmaps on them to +# aliases for the purpose of dirty bitmap migration. Such +# aliases may for example be the corresponding names on the +# opposite site. +# The mapping must be one-to-one, but not necessarily +# complete: On the source, unmapped bitmaps and all bitmaps +# on unmapped nodes will be ignored. On the destination, +# encountering an unmapped alias in the incoming migration +# stream will result in a report, and all further bitmap +# migration data will then be discarded. +# Note that the destination does not know about bitmaps it +# does not receive, so there is no limitation or requirement +# regarding the number of bitmaps received, or how they are +# named, or on which nodes they are placed. +# By default (when this parameter has never been set), bitmap +# names are mapped to themselves. Nodes are mapped to their +# block device name if there is one, and to their node name +# otherwise. (Since 5.2) +# # Since: 2.4 ## { 'enum': 'MigrationParameter', @@ -656,7 +713,8 @@ 'multifd-channels', 'xbzrle-cache-size', 'max-postcopy-bandwidth', 'max-cpu-throttle', 'multifd-compression', - 'multifd-zlib-level' ,'multifd-zstd-level' ] } + 'multifd-zlib-level' ,'multifd-zstd-level', + 'block-bitmap-mapping' ] } ## # @MigrateSetParameters: @@ -782,6 +840,25 @@ # will consume more CPU. # Defaults to 1. (Since 5.0) # +# @block-bitmap-mapping: Maps block nodes and bitmaps on them to +# aliases for the purpose of dirty bitmap migration. Such +# aliases may for example be the corresponding names on the +# opposite site. +# The mapping must be one-to-one, but not necessarily +# complete: On the source, unmapped bitmaps and all bitmaps +# on unmapped nodes will be ignored. On the destination, +# encountering an unmapped alias in the incoming migration +# stream will result in a report, and all further bitmap +# migration data will then be discarded. +# Note that the destination does not know about bitmaps it +# does not receive, so there is no limitation or requirement +# regarding the number of bitmaps received, or how they are +# named, or on which nodes they are placed. +# By default (when this parameter has never been set), bitmap +# names are mapped to themselves. Nodes are mapped to their +# block device name if there is one, and to their node name +# otherwise. (Since 5.2) +# # Since: 2.4 ## # TODO either fuse back into MigrationParameters, or make @@ -812,7 +889,8 @@ '*max-cpu-throttle': 'int', '*multifd-compression': 'MultiFDCompression', '*multifd-zlib-level': 'int', - '*multifd-zstd-level': 'int' } } + '*multifd-zstd-level': 'int', + '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ] } } ## # @migrate-set-parameters: @@ -958,6 +1036,25 @@ # will consume more CPU. # Defaults to 1. (Since 5.0) # +# @block-bitmap-mapping: Maps block nodes and bitmaps on them to +# aliases for the purpose of dirty bitmap migration. Such +# aliases may for example be the corresponding names on the +# opposite site. +# The mapping must be one-to-one, but not necessarily +# complete: On the source, unmapped bitmaps and all bitmaps +# on unmapped nodes will be ignored. On the destination, +# encountering an unmapped alias in the incoming migration +# stream will result in a report, and all further bitmap +# migration data will then be discarded. +# Note that the destination does not know about bitmaps it +# does not receive, so there is no limitation or requirement +# regarding the number of bitmaps received, or how they are +# named, or on which nodes they are placed. +# By default (when this parameter has never been set), bitmap +# names are mapped to themselves. Nodes are mapped to their +# block device name if there is one, and to their node name +# otherwise. (Since 5.2) +# # Since: 2.4 ## { 'struct': 'MigrationParameters', @@ -986,7 +1083,8 @@ '*max-cpu-throttle': 'uint8', '*multifd-compression': 'MultiFDCompression', '*multifd-zlib-level': 'uint8', - '*multifd-zstd-level': 'uint8' } } + '*multifd-zstd-level': 'uint8', + '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ] } } ## # @query-migrate-parameters: diff --git a/roms/Makefile b/roms/Makefile index f9acf39954..5d9f15b677 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -64,10 +64,8 @@ default help: @echo " u-boot.e500 -- update u-boot.e500" @echo " u-boot.sam460 -- update u-boot.sam460" @echo " efi -- update UEFI (edk2) platform firmware" - @echo " opensbi32-virt -- update OpenSBI for 32-bit virt machine" - @echo " opensbi64-virt -- update OpenSBI for 64-bit virt machine" - @echo " opensbi32-sifive_u -- update OpenSBI for 32-bit sifive_u machine" - @echo " opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine" + @echo " opensbi32-generic -- update OpenSBI for 32-bit generic machine" + @echo " opensbi64-generic -- update OpenSBI for 64-bit generic machine" @echo " bios-microvm -- update bios-microvm.bin (qboot)" @echo " clean -- delete the files generated by the previous" \ "build targets" @@ -170,29 +168,19 @@ skiboot: efi: edk2-basetools $(MAKE) -f Makefile.edk2 -opensbi32-virt: +opensbi32-generic: $(MAKE) -C opensbi \ CROSS_COMPILE=$(riscv32_cross_prefix) \ - PLATFORM="qemu/virt" - cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv32-virt-fw_jump.bin + PLATFORM="generic" + cp opensbi/build/platform/generic/firmware/fw_dynamic.bin ../pc-bios/opensbi-riscv32-generic-fw_dynamic.bin + cp opensbi/build/platform/generic/firmware/fw_dynamic.elf ../pc-bios/opensbi-riscv32-generic-fw_dynamic.elf -opensbi64-virt: +opensbi64-generic: $(MAKE) -C opensbi \ CROSS_COMPILE=$(riscv64_cross_prefix) \ - PLATFORM="qemu/virt" - cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-virt-fw_jump.bin - -opensbi32-sifive_u: - $(MAKE) -C opensbi \ - CROSS_COMPILE=$(riscv32_cross_prefix) \ - PLATFORM="sifive/fu540" - cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv32-sifive_u-fw_jump.bin - -opensbi64-sifive_u: - $(MAKE) -C opensbi \ - CROSS_COMPILE=$(riscv64_cross_prefix) \ - PLATFORM="sifive/fu540" - cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin + PLATFORM="generic" + cp opensbi/build/platform/generic/firmware/fw_dynamic.bin ../pc-bios/opensbi-riscv64-generic-fw_dynamic.bin + cp opensbi/build/platform/generic/firmware/fw_dynamic.elf ../pc-bios/opensbi-riscv64-generic-fw_dynamic.elf bios-microvm: $(MAKE) -C qboot diff --git a/roms/opensbi b/roms/opensbi -Subproject 9f1b72ce66d659e91013b358939e832fb27223f +Subproject a98258d0b537a295f517bbc8d813007336731fa diff --git a/roms/seabios b/roms/seabios -Subproject d9c812dda519a1a73e8370e1b81ddf46eb22ed1 +Subproject 155821a1990b6de78dde5f98fa5ab90e802021e diff --git a/target/arm/a32.decode b/target/arm/a32.decode index 0bd952c069..4dfd9139bf 100644 --- a/target/arm/a32.decode +++ b/target/arm/a32.decode @@ -47,6 +47,8 @@ &bfi rd rn lsb msb &sat rd rn satimm imm sh &pkh rd rn rm imm tb +&mcr cp opc1 crn crm opc2 rt +&mcrr cp opc1 crm rt rt2 # Data-processing (register) @@ -529,6 +531,23 @@ LDM_a32 ---- 100 b:1 i:1 u:1 w:1 1 rn:4 list:16 &ldst_block B .... 1010 ........................ @branch BL .... 1011 ........................ @branch +# Coprocessor instructions + +# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the +# other coprocessor instructions always UNDEF. +# The trans_ functions for these will ignore cp values 8..13 for v7 or +# earlier, and 0..13 for v8 and later, because those areas of the +# encoding space may be used for other things, such as VFP or Neon. + +@mcr ---- .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4 &mcr +@mcrr ---- .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4 &mcrr + +MCRR .... 1100 0100 .... .... .... .... .... @mcrr +MRRC .... 1100 0101 .... .... .... .... .... @mcrr + +MCR .... 1110 ... 0 .... .... .... ... 1 .... @mcr +MRC .... 1110 ... 1 .... .... .... ... 1 .... @mcr + # Supervisor call SVC ---- 1111 imm:24 &i diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 111579554f..6b382fcd60 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -391,12 +391,15 @@ static void arm_cpu_reset(DeviceState *dev) set_flush_to_zero(1, &env->vfp.standard_fp_status); set_flush_inputs_to_zero(1, &env->vfp.standard_fp_status); set_default_nan_mode(1, &env->vfp.standard_fp_status); + set_default_nan_mode(1, &env->vfp.standard_fp_status_f16); set_float_detect_tininess(float_tininess_before_rounding, &env->vfp.fp_status); set_float_detect_tininess(float_tininess_before_rounding, &env->vfp.standard_fp_status); set_float_detect_tininess(float_tininess_before_rounding, &env->vfp.fp_status_f16); + set_float_detect_tininess(float_tininess_before_rounding, + &env->vfp.standard_fp_status_f16); #ifndef CONFIG_USER_ONLY if (kvm_enabled()) { kvm_arm_reset_vcpu(cpu); diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 9e8ed423ea..ac857bdc2c 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -609,6 +609,8 @@ typedef struct CPUARMState { * fp_status: is the "normal" fp status. * fp_status_fp16: used for half-precision calculations * standard_fp_status : the ARM "Standard FPSCR Value" + * standard_fp_status_fp16 : used for half-precision + * calculations with the ARM "Standard FPSCR Value" * * Half-precision operations are governed by a separate * flush-to-zero control bit in FPSCR:FZ16. We pass a separate @@ -619,15 +621,20 @@ typedef struct CPUARMState { * Neon) which the architecture defines as controlled by the * standard FPSCR value rather than the FPSCR. * + * The "standard FPSCR but for fp16 ops" is needed because + * the "standard FPSCR" tracks the FPSCR.FZ16 bit rather than + * using a fixed value for it. + * * To avoid having to transfer exception bits around, we simply * say that the FPSCR cumulative exception flags are the logical - * OR of the flags in the three fp statuses. This relies on the + * OR of the flags in the four fp statuses. This relies on the * only thing which needs to read the exception flags being * an explicit FPSCR read. */ float_status fp_status; float_status fp_status_f16; float_status standard_fp_status; + float_status standard_fp_status_f16; /* ZCR_EL[1-3] */ uint64_t zcr_el[4]; @@ -1950,7 +1957,6 @@ enum arm_features { ARM_FEATURE_V8, ARM_FEATURE_AARCH64, /* supports 64 bit mode */ ARM_FEATURE_CBAR, /* has cp15 CBAR */ - ARM_FEATURE_CRC, /* ARMv8 CRC instructions */ ARM_FEATURE_CBAR_RO, /* has cp15 CBAR and it is read-only */ ARM_FEATURE_EL2, /* has EL2 Virtualization support */ ARM_FEATURE_EL3, /* has EL3 Secure monitor support */ diff --git a/target/arm/helper.c b/target/arm/helper.c index 455c92b891..6b4f0eb533 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -8462,6 +8462,35 @@ void define_one_arm_cp_reg_with_opaque(ARMCPU *cpu, assert((r->state != ARM_CP_STATE_AA32) || (r->opc0 == 0)); /* AArch64 regs are all 64 bit so ARM_CP_64BIT is meaningless */ assert((r->state != ARM_CP_STATE_AA64) || !(r->type & ARM_CP_64BIT)); + /* + * This API is only for Arm's system coprocessors (14 and 15) or + * (M-profile or v7A-and-earlier only) for implementation defined + * coprocessors in the range 0..7. Our decode assumes this, since + * 8..13 can be used for other insns including VFP and Neon. See + * valid_cp() in translate.c. Assert here that we haven't tried + * to use an invalid coprocessor number. + */ + switch (r->state) { + case ARM_CP_STATE_BOTH: + /* 0 has a special meaning, but otherwise the same rules as AA32. */ + if (r->cp == 0) { + break; + } + /* fall through */ + case ARM_CP_STATE_AA32: + if (arm_feature(&cpu->env, ARM_FEATURE_V8) && + !arm_feature(&cpu->env, ARM_FEATURE_M)) { + assert(r->cp >= 14 && r->cp <= 15); + } else { + assert(r->cp < 8 || (r->cp >= 14 && r->cp <= 15)); + } + break; + case ARM_CP_STATE_AA64: + assert(r->cp == 0 || r->cp == CP_REG_ARM64_SYSREG_CP); + break; + default: + g_assert_not_reached(); + } /* The AArch64 pseudocode CheckSystemAccess() specifies that op1 * encodes a minimum access level for the register. We roll this * runtime check into our general permission check code, so check diff --git a/target/arm/m-nocp.decode b/target/arm/m-nocp.decode new file mode 100644 index 0000000000..7182d7d121 --- /dev/null +++ b/target/arm/m-nocp.decode @@ -0,0 +1,42 @@ +# M-profile UserFault.NOCP exception handling +# +# Copyright (c) 2020 Linaro, Ltd +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, see <http://www.gnu.org/licenses/>. + +# +# This file is processed by scripts/decodetree.py +# +# For M-profile, the architecture specifies that NOCP UsageFaults +# should take precedence over UNDEF faults over the whole wide +# range of coprocessor-space encodings, with the exception of +# VLLDM and VLSTM. (Compare v8.1M IsCPInstruction() pseudocode and +# v8M Arm ARM rule R_QLGM.) This isn't mandatory for v8.0M but we choose +# to behave the same as v8.1M. +# This decode is handled before any others (and in particular before +# decoding FP instructions which are in the coprocessor space). +# If the coprocessor is not present or disabled then we will generate +# the NOCP exception; otherwise we let the insn through to the main decode. + +{ + # Special cases which do not take an early NOCP: VLLDM and VLSTM + VLLDM_VLSTM 1110 1100 001 l:1 rn:4 0000 1010 0000 0000 + # TODO: VSCCLRM (new in v8.1M) is similar: + #VSCCLRM 1110 1100 1-01 1111 ---- 1011 ---- ---0 + + NOCP 111- 1110 ---- ---- ---- cp:4 ---- ---- + NOCP 111- 110- ---- ---- ---- cp:4 ---- ---- + # TODO: From v8.1M onwards we will also want this range to NOCP + #NOCP_8_1 111- 1111 ---- ---- ---- ---- ---- ---- cp=10 +} diff --git a/target/arm/meson.build b/target/arm/meson.build index bd46cdb523..8990090712 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -5,6 +5,7 @@ gen = [ decodetree.process('neon-ls.decode', extra_args: '--static-decode=disas_neon_ls'), decodetree.process('vfp.decode', extra_args: '--static-decode=disas_vfp'), decodetree.process('vfp-uncond.decode', extra_args: '--static-decode=disas_vfp_uncond'), + decodetree.process('m-nocp.decode', extra_args: '--static-decode=disas_m_nocp'), decodetree.process('a32.decode', extra_args: '--static-decode=disas_a32'), decodetree.process('a32-uncond.decode', extra_args: '--static-decode=disas_a32_uncond'), decodetree.process('t32.decode', extra_args: '--static-decode=disas_t32'), diff --git a/target/arm/t32.decode b/target/arm/t32.decode index c21a988f97..7069d821fd 100644 --- a/target/arm/t32.decode +++ b/target/arm/t32.decode @@ -45,6 +45,8 @@ &sat !extern rd rn satimm imm sh &pkh !extern rd rn rm imm tb &cps !extern mode imod M A I F +&mcr !extern cp opc1 crn crm opc2 rt +&mcrr !extern cp opc1 crm rt rt2 # Data-processing (register) @@ -621,6 +623,23 @@ RFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1 SRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2 SRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1 +# Coprocessor instructions + +# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the +# other coprocessor instructions always UNDEF. +# The trans_ functions for these will ignore cp values 8..13 for v7 or +# earlier, and 0..13 for v8 and later, because those areas of the +# encoding space may be used for other things, such as VFP or Neon. + +@mcr .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4 +@mcrr .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4 + +MCRR 1110 1100 0100 .... .... .... .... .... @mcrr +MRRC 1110 1100 0101 .... .... .... .... .... @mcrr + +MCR 1110 1110 ... 0 .... .... .... ... 1 .... @mcr +MRC 1110 1110 ... 1 .... .... .... ... 1 .... @mcr + # Branches %imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24 diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 534c3ff5f3..0fc5e12fab 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -609,25 +609,6 @@ static void write_fp_sreg(DisasContext *s, int reg, TCGv_i32 v) tcg_temp_free_i64(tmp); } -TCGv_ptr get_fpstatus_ptr(bool is_f16) -{ - TCGv_ptr statusptr = tcg_temp_new_ptr(); - int offset; - - /* In A64 all instructions (both FP and Neon) use the FPCR; there - * is no equivalent of the A32 Neon "standard FPSCR value". - * However half-precision operations operate under a different - * FZ16 flag and use vfp.fp_status_f16 instead of vfp.fp_status. - */ - if (is_f16) { - offset = offsetof(CPUARMState, vfp.fp_status_f16); - } else { - offset = offsetof(CPUARMState, vfp.fp_status); - } - tcg_gen_addi_ptr(statusptr, cpu_env, offset); - return statusptr; -} - /* Expand a 2-operand AdvSIMD vector operation using an expander function. */ static void gen_gvec_fn2(DisasContext *s, bool is_q, int rd, int rn, GVecGen2Fn *gvec_fn, int vece) @@ -689,7 +670,7 @@ static void gen_gvec_op3_fpst(DisasContext *s, bool is_q, int rd, int rn, int rm, bool is_fp16, int data, gen_helper_gvec_3_ptr *fn) { - TCGv_ptr fpst = get_fpstatus_ptr(is_fp16); + TCGv_ptr fpst = fpstatus_ptr(is_fp16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, rd), vec_full_reg_offset(s, rn), vec_full_reg_offset(s, rm), fpst, @@ -5898,7 +5879,7 @@ static void handle_fp_compare(DisasContext *s, int size, bool cmp_with_zero, bool signal_all_nans) { TCGv_i64 tcg_flags = tcg_temp_new_i64(); - TCGv_ptr fpst = get_fpstatus_ptr(size == MO_16); + TCGv_ptr fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); if (size == MO_64) { TCGv_i64 tcg_vn, tcg_vm; @@ -6157,7 +6138,7 @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn) tcg_gen_xori_i32(tcg_res, tcg_op, 0x8000); break; case 0x3: /* FSQRT */ - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); gen_helper_sqrt_f16(tcg_res, tcg_op, fpst); break; case 0x8: /* FRINTN */ @@ -6167,7 +6148,7 @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn) case 0xc: /* FRINTA */ { TCGv_i32 tcg_rmode = tcg_const_i32(arm_rmode_to_sf(opcode & 7)); - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); gen_helper_advsimd_rinth(tcg_res, tcg_op, fpst); @@ -6177,11 +6158,11 @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn) break; } case 0xe: /* FRINTX */ - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); gen_helper_advsimd_rinth_exact(tcg_res, tcg_op, fpst); break; case 0xf: /* FRINTI */ - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); gen_helper_advsimd_rinth(tcg_res, tcg_op, fpst); break; default: @@ -6253,7 +6234,7 @@ static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn) g_assert_not_reached(); } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); if (rmode >= 0) { TCGv_i32 tcg_rmode = tcg_const_i32(rmode); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); @@ -6330,7 +6311,7 @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn) g_assert_not_reached(); } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); if (rmode >= 0) { TCGv_i32 tcg_rmode = tcg_const_i32(rmode); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); @@ -6365,7 +6346,7 @@ static void handle_fp_fcvt(DisasContext *s, int opcode, /* Single to half */ TCGv_i32 tcg_rd = tcg_temp_new_i32(); TCGv_i32 ahp = get_ahp_flag(); - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); gen_helper_vfp_fcvt_f32_to_f16(tcg_rd, tcg_rn, fpst, ahp); /* write_fp_sreg is OK here because top half of tcg_rd is zero */ @@ -6385,7 +6366,7 @@ static void handle_fp_fcvt(DisasContext *s, int opcode, /* Double to single */ gen_helper_vfp_fcvtsd(tcg_rd, tcg_rn, cpu_env); } else { - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); TCGv_i32 ahp = get_ahp_flag(); /* Double to half */ gen_helper_vfp_fcvt_f64_to_f16(tcg_rd, tcg_rn, fpst, ahp); @@ -6401,7 +6382,7 @@ static void handle_fp_fcvt(DisasContext *s, int opcode, case 0x3: { TCGv_i32 tcg_rn = read_fp_sreg(s, rn); - TCGv_ptr tcg_fpst = get_fpstatus_ptr(false); + TCGv_ptr tcg_fpst = fpstatus_ptr(FPST_FPCR); TCGv_i32 tcg_ahp = get_ahp_flag(); tcg_gen_ext16u_i32(tcg_rn, tcg_rn); if (dtype == 0) { @@ -6518,7 +6499,7 @@ static void handle_fp_2src_single(DisasContext *s, int opcode, TCGv_ptr fpst; tcg_res = tcg_temp_new_i32(); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); tcg_op1 = read_fp_sreg(s, rn); tcg_op2 = read_fp_sreg(s, rm); @@ -6571,7 +6552,7 @@ static void handle_fp_2src_double(DisasContext *s, int opcode, TCGv_ptr fpst; tcg_res = tcg_temp_new_i64(); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); tcg_op1 = read_fp_dreg(s, rn); tcg_op2 = read_fp_dreg(s, rm); @@ -6624,7 +6605,7 @@ static void handle_fp_2src_half(DisasContext *s, int opcode, TCGv_ptr fpst; tcg_res = tcg_temp_new_i32(); - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); tcg_op1 = read_fp_hreg(s, rn); tcg_op2 = read_fp_hreg(s, rm); @@ -6723,7 +6704,7 @@ static void handle_fp_3src_single(DisasContext *s, bool o0, bool o1, { TCGv_i32 tcg_op1, tcg_op2, tcg_op3; TCGv_i32 tcg_res = tcg_temp_new_i32(); - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); tcg_op1 = read_fp_sreg(s, rn); tcg_op2 = read_fp_sreg(s, rm); @@ -6761,7 +6742,7 @@ static void handle_fp_3src_double(DisasContext *s, bool o0, bool o1, { TCGv_i64 tcg_op1, tcg_op2, tcg_op3; TCGv_i64 tcg_res = tcg_temp_new_i64(); - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); tcg_op1 = read_fp_dreg(s, rn); tcg_op2 = read_fp_dreg(s, rm); @@ -6799,7 +6780,7 @@ static void handle_fp_3src_half(DisasContext *s, bool o0, bool o1, { TCGv_i32 tcg_op1, tcg_op2, tcg_op3; TCGv_i32 tcg_res = tcg_temp_new_i32(); - TCGv_ptr fpst = get_fpstatus_ptr(true); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR_F16); tcg_op1 = read_fp_hreg(s, rn); tcg_op2 = read_fp_hreg(s, rm); @@ -6945,7 +6926,7 @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode, TCGv_i32 tcg_shift, tcg_single; TCGv_i64 tcg_double; - tcg_fpstatus = get_fpstatus_ptr(type == 3); + tcg_fpstatus = fpstatus_ptr(type == 3 ? FPST_FPCR_F16 : FPST_FPCR); tcg_shift = tcg_const_i32(64 - scale); @@ -7233,7 +7214,7 @@ static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof) static void handle_fjcvtzs(DisasContext *s, int rd, int rn) { TCGv_i64 t = read_fp_dreg(s, rn); - TCGv_ptr fpstatus = get_fpstatus_ptr(false); + TCGv_ptr fpstatus = fpstatus_ptr(FPST_FPCR); gen_helper_fjcvtzs(t, t, fpstatus); @@ -7847,7 +7828,7 @@ static void disas_simd_across_lanes(DisasContext *s, uint32_t insn) * Note that correct NaN propagation requires that we do these * operations in exactly the order specified by the pseudocode. */ - TCGv_ptr fpst = get_fpstatus_ptr(size == MO_16); + TCGv_ptr fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); int fpopcode = opcode | is_min << 4 | is_u << 5; int vmap = (1 << elements) - 1; TCGv_i32 tcg_res32 = do_reduction_op(s, fpopcode, rn, esize, @@ -8359,7 +8340,7 @@ static void disas_simd_scalar_pairwise(DisasContext *s, uint32_t insn) return; } - fpst = get_fpstatus_ptr(size == MO_16); + fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); break; default: unallocated_encoding(s); @@ -8872,7 +8853,7 @@ static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn, int elements, int is_signed, int fracbits, int size) { - TCGv_ptr tcg_fpst = get_fpstatus_ptr(size == MO_16); + TCGv_ptr tcg_fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); TCGv_i32 tcg_shift = NULL; MemOp mop = size | (is_signed ? MO_SIGN : 0); @@ -9053,7 +9034,7 @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar, assert(!(is_scalar && is_q)); tcg_rmode = tcg_const_i32(arm_rmode_to_sf(FPROUNDING_ZERO)); - tcg_fpstatus = get_fpstatus_ptr(size == MO_16); + tcg_fpstatus = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); fracbits = (16 << size) - immhb; tcg_shift = tcg_const_i32(fracbits); @@ -9392,7 +9373,7 @@ static void handle_3same_float(DisasContext *s, int size, int elements, int fpopcode, int rd, int rn, int rm) { int pass; - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); for (pass = 0; pass < elements; pass++) { if (size) { @@ -9785,7 +9766,7 @@ static void disas_simd_scalar_three_reg_same_fp16(DisasContext *s, return; } - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); tcg_op1 = read_fp_hreg(s, rn); tcg_op2 = read_fp_hreg(s, rm); @@ -10038,7 +10019,7 @@ static void handle_2misc_fcmp_zero(DisasContext *s, int opcode, return; } - fpst = get_fpstatus_ptr(size == MO_16); + fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); if (is_double) { TCGv_i64 tcg_op = tcg_temp_new_i64(); @@ -10168,7 +10149,7 @@ static void handle_2misc_reciprocal(DisasContext *s, int opcode, int size, int rn, int rd) { bool is_double = (size == 3); - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); if (is_double) { TCGv_i64 tcg_op = tcg_temp_new_i64(); @@ -10309,7 +10290,7 @@ static void handle_2misc_narrow(DisasContext *s, bool scalar, } else { TCGv_i32 tcg_lo = tcg_temp_new_i32(); TCGv_i32 tcg_hi = tcg_temp_new_i32(); - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); TCGv_i32 ahp = get_ahp_flag(); tcg_gen_extr_i64_i32(tcg_lo, tcg_hi, tcg_op); @@ -10571,7 +10552,7 @@ static void disas_simd_scalar_two_reg_misc(DisasContext *s, uint32_t insn) if (is_fcvt) { tcg_rmode = tcg_const_i32(arm_rmode_to_sf(rmode)); - tcg_fpstatus = get_fpstatus_ptr(false); + tcg_fpstatus = fpstatus_ptr(FPST_FPCR); gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); } else { tcg_rmode = NULL; @@ -11396,7 +11377,7 @@ static void handle_simd_3same_pair(DisasContext *s, int is_q, int u, int opcode, /* Floating point operations need fpst */ if (opcode >= 0x58) { - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); } else { fpst = NULL; } @@ -11994,7 +11975,7 @@ static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn) break; } - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_FPCR_F16); if (pairwise) { int maxpass = is_q ? 8 : 4; @@ -12287,7 +12268,7 @@ static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q, /* 16 -> 32 bit fp conversion */ int srcelt = is_q ? 4 : 0; TCGv_i32 tcg_res[4]; - TCGv_ptr fpst = get_fpstatus_ptr(false); + TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR); TCGv_i32 ahp = get_ahp_flag(); for (pass = 0; pass < 4; pass++) { @@ -12759,7 +12740,7 @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn) } if (need_fpstatus || need_rmode) { - tcg_fpstatus = get_fpstatus_ptr(false); + tcg_fpstatus = fpstatus_ptr(FPST_FPCR); } else { tcg_fpstatus = NULL; } @@ -13149,7 +13130,7 @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn) } if (need_rmode || need_fpst) { - tcg_fpstatus = get_fpstatus_ptr(true); + tcg_fpstatus = fpstatus_ptr(FPST_FPCR_F16); } if (need_rmode) { @@ -13458,7 +13439,7 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn) } if (is_fp) { - fpst = get_fpstatus_ptr(is_fp16); + fpst = fpstatus_ptr(is_fp16 ? FPST_FPCR_F16 : FPST_FPCR); } else { fpst = NULL; } diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h index 647f0c74f6..2e0d16da25 100644 --- a/target/arm/translate-a64.h +++ b/target/arm/translate-a64.h @@ -37,7 +37,6 @@ TCGv_i64 cpu_reg_sp(DisasContext *s, int reg); TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf); TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf); void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v); -TCGv_ptr get_fpstatus_ptr(bool); bool logic_imm_decode_wmask(uint64_t *result, unsigned int immn, unsigned int imms, unsigned int immr); bool sve_access_check(DisasContext *s); diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc index 8fbe8cef9f..9879731a52 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -181,7 +181,7 @@ static bool trans_VCMLA(DisasContext *s, arg_VCMLA *a) } opr_sz = (1 + a->q) * 8; - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(a->size == 0 ? FPST_STD_F16 : FPST_STD); fn_gvec_ptr = a->size ? gen_helper_gvec_fcmlas : gen_helper_gvec_fcmlah; tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), vfp_reg_offset(1, a->vn), @@ -218,7 +218,7 @@ static bool trans_VCADD(DisasContext *s, arg_VCADD *a) } opr_sz = (1 + a->q) * 8; - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(a->size == 0 ? FPST_STD_F16 : FPST_STD); fn_gvec_ptr = a->size ? gen_helper_gvec_fcadds : gen_helper_gvec_fcaddh; tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), vfp_reg_offset(1, a->vn), @@ -322,7 +322,7 @@ static bool trans_VCMLA_scalar(DisasContext *s, arg_VCMLA_scalar *a) fn_gvec_ptr = (a->size ? gen_helper_gvec_fcmlas_idx : gen_helper_gvec_fcmlah_idx); opr_sz = (1 + a->q) * 8; - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(a->size == 0 ? FPST_STD_F16 : FPST_STD); tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), vfp_reg_offset(1, a->vn), vfp_reg_offset(1, a->vm), @@ -358,7 +358,7 @@ static bool trans_VDOT_scalar(DisasContext *s, arg_VDOT_scalar *a) fn_gvec = a->u ? gen_helper_gvec_udot_idx_b : gen_helper_gvec_sdot_idx_b; opr_sz = (1 + a->q) * 8; - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(FPST_STD); tcg_gen_gvec_3_ool(vfp_reg_offset(1, a->vd), vfp_reg_offset(1, a->vn), vfp_reg_offset(1, a->rm), @@ -1063,7 +1063,7 @@ static bool do_3same_fp(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn, return true; } - TCGv_ptr fpstatus = get_fpstatus_ptr(1); + TCGv_ptr fpstatus = fpstatus_ptr(FPST_STD); for (pass = 0; pass < (a->q ? 4 : 2); pass++) { tmp = neon_load_reg(a->vn, pass); tmp2 = neon_load_reg(a->vm, pass); @@ -1091,7 +1091,7 @@ static bool do_3same_fp(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn, uint32_t rn_ofs, uint32_t rm_ofs, \ uint32_t oprsz, uint32_t maxsz) \ { \ - TCGv_ptr fpst = get_fpstatus_ptr(1); \ + TCGv_ptr fpst = fpstatus_ptr(FPST_STD); \ tcg_gen_gvec_3_ptr(rd_ofs, rn_ofs, rm_ofs, fpst, \ oprsz, maxsz, 0, FUNC); \ tcg_temp_free_ptr(fpst); \ @@ -1287,7 +1287,7 @@ static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn) * early. Since Q is 0 there are always just two passes, so instead * of a complicated loop over each pass we just unroll. */ - fpstatus = get_fpstatus_ptr(1); + fpstatus = fpstatus_ptr(FPST_STD); tmp = neon_load_reg(a->vn, 0); tmp2 = neon_load_reg(a->vn, 1); fn(tmp, tmp, tmp2, fpstatus); @@ -1790,7 +1790,7 @@ static bool do_fp_2sh(DisasContext *s, arg_2reg_shift *a, return true; } - fpstatus = get_fpstatus_ptr(1); + fpstatus = fpstatus_ptr(FPST_STD); shiftv = tcg_const_i32(a->shift); for (pass = 0; pass < (a->q ? 4 : 2); pass++) { tmp = neon_load_reg(a->vm, pass); @@ -2591,7 +2591,7 @@ static bool trans_VMLS_2sc(DisasContext *s, arg_2scalar *a) #define WRAP_FP_FN(WRAPNAME, FUNC) \ static void WRAPNAME(TCGv_i32 rd, TCGv_i32 rn, TCGv_i32 rm) \ { \ - TCGv_ptr fpstatus = get_fpstatus_ptr(1); \ + TCGv_ptr fpstatus = fpstatus_ptr(FPST_STD); \ FUNC(rd, rn, rm, fpstatus); \ tcg_temp_free_ptr(fpstatus); \ } @@ -3480,7 +3480,7 @@ static bool trans_VCVT_F16_F32(DisasContext *s, arg_2misc *a) return true; } - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_STD); ahp = get_ahp_flag(); tmp = neon_load_reg(a->vm, 0); gen_helper_vfp_fcvt_f32_to_f16(tmp, tmp, fpst, ahp); @@ -3528,7 +3528,7 @@ static bool trans_VCVT_F32_F16(DisasContext *s, arg_2misc *a) return true; } - fpst = get_fpstatus_ptr(true); + fpst = fpstatus_ptr(FPST_STD); ahp = get_ahp_flag(); tmp3 = tcg_temp_new_i32(); tmp = neon_load_reg(a->vm, 0); @@ -3838,7 +3838,7 @@ static bool do_2misc_fp(DisasContext *s, arg_2misc *a, return true; } - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(FPST_STD); for (pass = 0; pass < (a->q ? 4 : 2); pass++) { TCGv_i32 tmp = neon_load_reg(a->vm, pass); fn(tmp, tmp, fpst); @@ -3932,7 +3932,7 @@ static bool do_vrint(DisasContext *s, arg_2misc *a, int rmode) return true; } - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(FPST_STD); tcg_rmode = tcg_const_i32(arm_rmode_to_sf(rmode)); gen_helper_set_neon_rmode(tcg_rmode, tcg_rmode, cpu_env); for (pass = 0; pass < (a->q ? 4 : 2); pass++) { @@ -3993,7 +3993,7 @@ static bool do_vcvt(DisasContext *s, arg_2misc *a, int rmode, bool is_signed) return true; } - fpst = get_fpstatus_ptr(1); + fpst = fpstatus_ptr(FPST_STD); tcg_shift = tcg_const_i32(0); tcg_rmode = tcg_const_i32(arm_rmode_to_sf(rmode)); gen_helper_set_neon_rmode(tcg_rmode, tcg_rmode, cpu_env); diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c index 8c7fbbd503..d97cb37d83 100644 --- a/target/arm/translate-sve.c +++ b/target/arm/translate-sve.c @@ -3470,7 +3470,7 @@ static bool trans_FMLA_zzxz(DisasContext *s, arg_FMLA_zzxz *a) if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_4_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3496,7 +3496,7 @@ static bool trans_FMUL_zzx(DisasContext *s, arg_FMUL_zzx *a) if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3528,7 +3528,7 @@ static void do_reduce(DisasContext *s, arg_rpr_esz *a, tcg_gen_addi_ptr(t_zn, cpu_env, vec_full_reg_offset(s, a->rn)); tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, a->pg)); - status = get_fpstatus_ptr(a->esz == MO_16); + status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); fn(temp, t_zn, t_pg, status, t_desc); tcg_temp_free_ptr(t_zn); @@ -3570,7 +3570,7 @@ DO_VPZ(FMAXV, fmaxv) static void do_zz_fp(DisasContext *s, arg_rr_esz *a, gen_helper_gvec_2_ptr *fn) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), @@ -3618,7 +3618,7 @@ static void do_ppz_fp(DisasContext *s, arg_rpr_esz *a, gen_helper_gvec_3_ptr *fn) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(pred_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), @@ -3670,7 +3670,7 @@ static bool trans_FTMAD(DisasContext *s, arg_FTMAD *a) } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3710,7 +3710,7 @@ static bool trans_FADDA(DisasContext *s, arg_rprr_esz *a) t_pg = tcg_temp_new_ptr(); tcg_gen_addi_ptr(t_rm, cpu_env, vec_full_reg_offset(s, a->rm)); tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, a->pg)); - t_fpst = get_fpstatus_ptr(a->esz == MO_16); + t_fpst = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); t_desc = tcg_const_i32(simd_desc(vsz, vsz, 0)); fns[a->esz - 1](t_val, t_val, t_rm, t_pg, t_fpst, t_desc); @@ -3737,7 +3737,7 @@ static bool do_zzz_fp(DisasContext *s, arg_rrr_esz *a, } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3779,7 +3779,7 @@ static bool do_zpzz_fp(DisasContext *s, arg_rprr_esz *a, } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_4_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3831,7 +3831,7 @@ static void do_fp_scalar(DisasContext *s, int zd, int zn, int pg, bool is_fp16, tcg_gen_addi_ptr(t_zn, cpu_env, vec_full_reg_offset(s, zn)); tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, pg)); - status = get_fpstatus_ptr(is_fp16); + status = fpstatus_ptr(is_fp16 ? FPST_FPCR_F16 : FPST_FPCR); desc = tcg_const_i32(simd_desc(vsz, vsz, 0)); fn(t_zd, t_zn, t_pg, scalar, status, desc); @@ -3895,7 +3895,7 @@ static bool do_fp_cmp(DisasContext *s, arg_rprr_esz *a, } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_4_ptr(pred_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3939,7 +3939,7 @@ static bool trans_FCADD(DisasContext *s, arg_FCADD *a) } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_4_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -3958,7 +3958,7 @@ static bool do_fmla(DisasContext *s, arg_rprrr_esz *a, } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_5_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -4001,7 +4001,7 @@ static bool trans_FCMLA_zpzzz(DisasContext *s, arg_FCMLA_zpzzz *a) } if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_5_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -4024,7 +4024,7 @@ static bool trans_FCMLA_zzxz(DisasContext *s, arg_FCMLA_zzxz *a) tcg_debug_assert(a->rd == a->ra); if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->rd), vec_full_reg_offset(s, a->rn), vec_full_reg_offset(s, a->rm), @@ -4045,7 +4045,7 @@ static bool do_zpz_ptr(DisasContext *s, int rd, int rn, int pg, { if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); - TCGv_ptr status = get_fpstatus_ptr(is_fp16); + TCGv_ptr status = fpstatus_ptr(is_fp16 ? FPST_FPCR_F16 : FPST_FPCR); tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, rd), vec_full_reg_offset(s, rn), pred_full_reg_offset(s, pg), @@ -4191,7 +4191,7 @@ static bool do_frint_mode(DisasContext *s, arg_rpr_esz *a, int mode) if (sve_access_check(s)) { unsigned vsz = vec_full_reg_size(s); TCGv_i32 tmode = tcg_const_i32(mode); - TCGv_ptr status = get_fpstatus_ptr(a->esz == MO_16); + TCGv_ptr status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR); gen_helper_set_rmode(tmode, tmode, status); diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 2d63fa0d39..4eeafb494a 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -95,14 +95,11 @@ static inline long vfp_f16_offset(unsigned reg, bool top) static bool full_vfp_access_check(DisasContext *s, bool ignore_vfp_enabled) { if (s->fp_excp_el) { - if (arm_dc_feature(s, ARM_FEATURE_M)) { - gen_exception_insn(s, s->pc_curr, EXCP_NOCP, syn_uncategorized(), - s->fp_excp_el); - } else { - gen_exception_insn(s, s->pc_curr, EXCP_UDEF, - syn_fp_access_trap(1, 0xe, false), - s->fp_excp_el); - } + /* M-profile handled this earlier, in disas_m_nocp() */ + assert (!arm_dc_feature(s, ARM_FEATURE_M)); + gen_exception_insn(s, s->pc_curr, EXCP_UDEF, + syn_fp_access_trap(1, 0xe, false), + s->fp_excp_el); return false; } @@ -362,7 +359,7 @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a) return true; } - fpst = get_fpstatus_ptr(0); + fpst = fpstatus_ptr(FPST_FPCR); tcg_rmode = tcg_const_i32(arm_rmode_to_sf(rounding)); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); @@ -425,7 +422,7 @@ static bool trans_VCVT(DisasContext *s, arg_VCVT *a) return true; } - fpst = get_fpstatus_ptr(0); + fpst = fpstatus_ptr(FPST_FPCR); tcg_shift = tcg_const_i32(0); @@ -1234,7 +1231,7 @@ static bool do_vfp_3op_sp(DisasContext *s, VFPGen3OpSPFn *fn, f0 = tcg_temp_new_i32(); f1 = tcg_temp_new_i32(); fd = tcg_temp_new_i32(); - fpst = get_fpstatus_ptr(0); + fpst = fpstatus_ptr(FPST_FPCR); neon_load_reg32(f0, vn); neon_load_reg32(f1, vm); @@ -1317,7 +1314,7 @@ static bool do_vfp_3op_dp(DisasContext *s, VFPGen3OpDPFn *fn, f0 = tcg_temp_new_i64(); f1 = tcg_temp_new_i64(); fd = tcg_temp_new_i64(); - fpst = get_fpstatus_ptr(0); + fpst = fpstatus_ptr(FPST_FPCR); neon_load_reg64(f0, vn); neon_load_reg64(f1, vm); @@ -1799,7 +1796,7 @@ static bool do_vfm_sp(DisasContext *s, arg_VFMA_sp *a, bool neg_n, bool neg_d) /* VFNMA, VFNMS */ gen_helper_vfp_negs(vd, vd); } - fpst = get_fpstatus_ptr(0); + fpst = fpstatus_ptr(FPST_FPCR); gen_helper_vfp_muladds(vd, vn, vm, vd, fpst); neon_store_reg32(vd, a->vd); @@ -1890,7 +1887,7 @@ static bool do_vfm_dp(DisasContext *s, arg_VFMA_dp *a, bool neg_n, bool neg_d) /* VFNMA, VFNMS */ gen_helper_vfp_negd(vd, vd); } - fpst = get_fpstatus_ptr(0); + fpst = fpstatus_ptr(FPST_FPCR); gen_helper_vfp_muladdd(vd, vn, vm, vd, fpst); neon_store_reg64(vd, a->vd); @@ -2174,7 +2171,7 @@ static bool trans_VCVT_f32_f16(DisasContext *s, arg_VCVT_f32_f16 *a) return true; } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); ahp_mode = get_ahp_flag(); tmp = tcg_temp_new_i32(); /* The T bit tells us if we want the low or high 16 bits of Vm */ @@ -2211,7 +2208,7 @@ static bool trans_VCVT_f64_f16(DisasContext *s, arg_VCVT_f64_f16 *a) return true; } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); ahp_mode = get_ahp_flag(); tmp = tcg_temp_new_i32(); /* The T bit tells us if we want the low or high 16 bits of Vm */ @@ -2240,7 +2237,7 @@ static bool trans_VCVT_f16_f32(DisasContext *s, arg_VCVT_f16_f32 *a) return true; } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); ahp_mode = get_ahp_flag(); tmp = tcg_temp_new_i32(); @@ -2277,7 +2274,7 @@ static bool trans_VCVT_f16_f64(DisasContext *s, arg_VCVT_f16_f64 *a) return true; } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); ahp_mode = get_ahp_flag(); tmp = tcg_temp_new_i32(); vm = tcg_temp_new_i64(); @@ -2307,7 +2304,7 @@ static bool trans_VRINTR_sp(DisasContext *s, arg_VRINTR_sp *a) tmp = tcg_temp_new_i32(); neon_load_reg32(tmp, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); gen_helper_rints(tmp, tmp, fpst); neon_store_reg32(tmp, a->vd); tcg_temp_free_ptr(fpst); @@ -2339,7 +2336,7 @@ static bool trans_VRINTR_dp(DisasContext *s, arg_VRINTR_dp *a) tmp = tcg_temp_new_i64(); neon_load_reg64(tmp, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); gen_helper_rintd(tmp, tmp, fpst); neon_store_reg64(tmp, a->vd); tcg_temp_free_ptr(fpst); @@ -2363,7 +2360,7 @@ static bool trans_VRINTZ_sp(DisasContext *s, arg_VRINTZ_sp *a) tmp = tcg_temp_new_i32(); neon_load_reg32(tmp, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); tcg_rmode = tcg_const_i32(float_round_to_zero); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); gen_helper_rints(tmp, tmp, fpst); @@ -2400,7 +2397,7 @@ static bool trans_VRINTZ_dp(DisasContext *s, arg_VRINTZ_dp *a) tmp = tcg_temp_new_i64(); neon_load_reg64(tmp, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); tcg_rmode = tcg_const_i32(float_round_to_zero); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); gen_helper_rintd(tmp, tmp, fpst); @@ -2427,7 +2424,7 @@ static bool trans_VRINTX_sp(DisasContext *s, arg_VRINTX_sp *a) tmp = tcg_temp_new_i32(); neon_load_reg32(tmp, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); gen_helper_rints_exact(tmp, tmp, fpst); neon_store_reg32(tmp, a->vd); tcg_temp_free_ptr(fpst); @@ -2459,7 +2456,7 @@ static bool trans_VRINTX_dp(DisasContext *s, arg_VRINTX_dp *a) tmp = tcg_temp_new_i64(); neon_load_reg64(tmp, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); gen_helper_rintd_exact(tmp, tmp, fpst); neon_store_reg64(tmp, a->vd); tcg_temp_free_ptr(fpst); @@ -2538,7 +2535,7 @@ static bool trans_VCVT_int_sp(DisasContext *s, arg_VCVT_int_sp *a) vm = tcg_temp_new_i32(); neon_load_reg32(vm, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); if (a->s) { /* i32 -> f32 */ gen_helper_vfp_sitos(vm, vm, fpst); @@ -2574,7 +2571,7 @@ static bool trans_VCVT_int_dp(DisasContext *s, arg_VCVT_int_dp *a) vm = tcg_temp_new_i32(); vd = tcg_temp_new_i64(); neon_load_reg32(vm, a->vm); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); if (a->s) { /* i32 -> f64 */ gen_helper_vfp_sitod(vd, vm, fpst); @@ -2640,7 +2637,7 @@ static bool trans_VCVT_fix_sp(DisasContext *s, arg_VCVT_fix_sp *a) vd = tcg_temp_new_i32(); neon_load_reg32(vd, a->vd); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); shift = tcg_const_i32(frac_bits); /* Switch on op:U:sx bits */ @@ -2705,7 +2702,7 @@ static bool trans_VCVT_fix_dp(DisasContext *s, arg_VCVT_fix_dp *a) vd = tcg_temp_new_i64(); neon_load_reg64(vd, a->vd); - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); shift = tcg_const_i32(frac_bits); /* Switch on op:U:sx bits */ @@ -2758,7 +2755,7 @@ static bool trans_VCVT_sp_int(DisasContext *s, arg_VCVT_sp_int *a) return true; } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); vm = tcg_temp_new_i32(); neon_load_reg32(vm, a->vm); @@ -2800,7 +2797,7 @@ static bool trans_VCVT_dp_int(DisasContext *s, arg_VCVT_dp_int *a) return true; } - fpst = get_fpstatus_ptr(false); + fpst = fpstatus_ptr(FPST_FPCR); vm = tcg_temp_new_i64(); vd = tcg_temp_new_i32(); neon_load_reg64(vm, a->vm); @@ -2842,9 +2839,14 @@ static bool trans_VLLDM_VLSTM(DisasContext *s, arg_VLLDM_VLSTM *a) !arm_dc_feature(s, ARM_FEATURE_V8)) { return false; } - /* If not secure, UNDEF. */ + /* + * If not secure, UNDEF. We must emit code for this + * rather than returning false so that this takes + * precedence over the m-nocp.decode NOCP fallback. + */ if (!s->v8m_secure) { - return false; + unallocated_encoding(s); + return true; } /* If no fpu, NOP. */ if (!dc_isar_feature(aa32_vfp, s)) { @@ -2863,3 +2865,33 @@ static bool trans_VLLDM_VLSTM(DisasContext *s, arg_VLLDM_VLSTM *a) s->base.is_jmp = DISAS_UPDATE_EXIT; return true; } + +static bool trans_NOCP(DisasContext *s, arg_NOCP *a) +{ + /* + * Handle M-profile early check for disabled coprocessor: + * all we need to do here is emit the NOCP exception if + * the coprocessor is disabled. Otherwise we return false + * and the real VFP/etc decode will handle the insn. + */ + assert(arm_dc_feature(s, ARM_FEATURE_M)); + + if (a->cp == 11) { + a->cp = 10; + } + /* TODO: in v8.1M cp 8, 9, 14, 15 also are governed by the cp10 enable */ + + if (a->cp != 10) { + gen_exception_insn(s, s->pc_curr, EXCP_NOCP, + syn_uncategorized(), default_exception_el(s)); + return true; + } + + if (s->fp_excp_el != 0) { + gen_exception_insn(s, s->pc_curr, EXCP_NOCP, + syn_uncategorized(), s->fp_excp_el); + return true; + } + + return false; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 556588d92f..d34c1d351a 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -49,8 +49,6 @@ #define ENABLE_ARCH_7 arm_dc_feature(s, ARM_FEATURE_V7) #define ENABLE_ARCH_8 arm_dc_feature(s, ARM_FEATURE_V8) -#define ARCH(x) do { if (!ENABLE_ARCH_##x) goto illegal_op; } while(0) - #include "translate.h" #if defined(CONFIG_USER_ONLY) @@ -59,8 +57,9 @@ #define IS_USER(s) (s->user) #endif -/* We reuse the same 64-bit temporaries for efficiency. */ +/* These are TCG temporaries used only by the legacy iwMMXt decoder */ static TCGv_i64 cpu_V0, cpu_V1, cpu_M0; +/* These are TCG globals which alias CPUARMState fields */ static TCGv_i32 cpu_R[16]; TCGv_i32 cpu_CF, cpu_NF, cpu_VF, cpu_ZF; TCGv_i64 cpu_exclusive_addr; @@ -1095,19 +1094,6 @@ static inline void gen_hlt(DisasContext *s, int imm) unallocated_encoding(s); } -static TCGv_ptr get_fpstatus_ptr(int neon) -{ - TCGv_ptr statusptr = tcg_temp_new_ptr(); - int offset; - if (neon) { - offset = offsetof(CPUARMState, vfp.standard_fp_status); - } else { - offset = offsetof(CPUARMState, vfp.fp_status); - } - tcg_gen_addi_ptr(statusptr, cpu_env, offset); - return statusptr; -} - static inline long vfp_reg_offset(bool dp, unsigned reg) { if (dp) { @@ -1176,6 +1162,7 @@ static TCGv_ptr vfp_reg_ptr(bool dp, int reg) #define ARM_CP_RW_BIT (1 << 20) /* Include the VFP and Neon decoders */ +#include "decode-m-nocp.c.inc" #include "translate-vfp.c.inc" #include "translate-neon.c.inc" @@ -2471,21 +2458,6 @@ static int disas_dsp_insn(DisasContext *s, uint32_t insn) return 1; } -#define VFP_REG_SHR(x, n) (((n) > 0) ? (x) >> (n) : (x) << -(n)) -#define VFP_DREG(reg, insn, bigbit, smallbit) do { \ - if (dc_isar_feature(aa32_simd_r32, s)) { \ - reg = (((insn) >> (bigbit)) & 0x0f) \ - | (((insn) >> ((smallbit) - 4)) & 0x10); \ - } else { \ - if (insn & (1 << (smallbit))) \ - return 1; \ - reg = ((insn) >> (bigbit)) & 0x0f; \ - }} while (0) - -#define VFP_DREG_D(reg, insn) VFP_DREG(reg, insn, 12, 22) -#define VFP_DREG_N(reg, insn) VFP_DREG(reg, insn, 16, 7) -#define VFP_DREG_M(reg, insn) VFP_DREG(reg, insn, 0, 5) - static inline bool use_goto_tb(DisasContext *s, target_ulong dest) { #ifndef CONFIG_USER_ONLY @@ -4544,48 +4516,12 @@ void gen_gvec_uaba(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, opr_sz, max_sz, &ops[vece]); } -static int disas_coproc_insn(DisasContext *s, uint32_t insn) +static void do_coproc_insn(DisasContext *s, int cpnum, int is64, + int opc1, int crn, int crm, int opc2, + bool isread, int rt, int rt2) { - int cpnum, is64, crn, crm, opc1, opc2, isread, rt, rt2; const ARMCPRegInfo *ri; - cpnum = (insn >> 8) & 0xf; - - /* First check for coprocessor space used for XScale/iwMMXt insns */ - if (arm_dc_feature(s, ARM_FEATURE_XSCALE) && (cpnum < 2)) { - if (extract32(s->c15_cpar, cpnum, 1) == 0) { - return 1; - } - if (arm_dc_feature(s, ARM_FEATURE_IWMMXT)) { - return disas_iwmmxt_insn(s, insn); - } else if (arm_dc_feature(s, ARM_FEATURE_XSCALE)) { - return disas_dsp_insn(s, insn); - } - return 1; - } - - /* Otherwise treat as a generic register access */ - is64 = (insn & (1 << 25)) == 0; - if (!is64 && ((insn & (1 << 4)) == 0)) { - /* cdp */ - return 1; - } - - crm = insn & 0xf; - if (is64) { - crn = 0; - opc1 = (insn >> 4) & 0xf; - opc2 = 0; - rt2 = (insn >> 16) & 0xf; - } else { - crn = (insn >> 16) & 0xf; - opc1 = (insn >> 21) & 7; - opc2 = (insn >> 5) & 7; - rt2 = 0; - } - isread = (insn >> 20) & 1; - rt = (insn >> 12) & 0xf; - ri = get_arm_cp_reginfo(s->cp_regs, ENCODE_CP_REG(cpnum, is64, s->ns, crn, crm, opc1, opc2)); if (ri) { @@ -4593,7 +4529,8 @@ static int disas_coproc_insn(DisasContext *s, uint32_t insn) /* Check access permissions */ if (!cp_access_ok(s->current_el, ri, isread)) { - return 1; + unallocated_encoding(s); + return; } if (s->hstr_active || ri->accessfn || @@ -4667,14 +4604,15 @@ static int disas_coproc_insn(DisasContext *s, uint32_t insn) /* Handle special cases first */ switch (ri->type & ~(ARM_CP_FLAG_MASK & ~ARM_CP_SPECIAL)) { case ARM_CP_NOP: - return 0; + return; case ARM_CP_WFI: if (isread) { - return 1; + unallocated_encoding(s); + return; } gen_set_pc_im(s, s->base.pc_next); s->base.is_jmp = DISAS_WFI; - return 0; + return; default: break; } @@ -4734,7 +4672,7 @@ static int disas_coproc_insn(DisasContext *s, uint32_t insn) /* Write */ if (ri->type & ARM_CP_CONST) { /* If not forbidden by access permissions, treat as WI */ - return 0; + return; } if (is64) { @@ -4800,7 +4738,7 @@ static int disas_coproc_insn(DisasContext *s, uint32_t insn) gen_lookup_tb(s); } - return 0; + return; } /* Unknown register; this might be a guest error or a QEMU @@ -4820,9 +4758,27 @@ static int disas_coproc_insn(DisasContext *s, uint32_t insn) s->ns ? "non-secure" : "secure"); } - return 1; + unallocated_encoding(s); + return; } +/* Decode XScale DSP or iWMMXt insn (in the copro space, cp=0 or 1) */ +static void disas_xscale_insn(DisasContext *s, uint32_t insn) +{ + int cpnum = (insn >> 8) & 0xf; + + if (extract32(s->c15_cpar, cpnum, 1) == 0) { + unallocated_encoding(s); + } else if (arm_dc_feature(s, ARM_FEATURE_IWMMXT)) { + if (disas_iwmmxt_insn(s, insn)) { + unallocated_encoding(s); + } + } else if (arm_dc_feature(s, ARM_FEATURE_XSCALE)) { + if (disas_dsp_insn(s, insn)) { + unallocated_encoding(s); + } + } +} /* Store a 64-bit value to a register pair. Clobbers val. */ static void gen_storeq_reg(DisasContext *s, int rlow, int rhigh, TCGv_i64 val) @@ -5222,6 +5178,68 @@ static int t16_pop_list(DisasContext *s, int x) #include "decode-t32.c.inc" #include "decode-t16.c.inc" +static bool valid_cp(DisasContext *s, int cp) +{ + /* + * Return true if this coprocessor field indicates something + * that's really a possible coprocessor. + * For v7 and earlier, coprocessors 8..15 were reserved for Arm use, + * and of those only cp14 and cp15 were used for registers. + * cp10 and cp11 were used for VFP and Neon, whose decode is + * dealt with elsewhere. With the advent of fp16, cp9 is also + * now part of VFP. + * For v8A and later, the encoding has been tightened so that + * only cp14 and cp15 are valid, and other values aren't considered + * to be in the coprocessor-instruction space at all. v8M still + * permits coprocessors 0..7. + */ + if (arm_dc_feature(s, ARM_FEATURE_V8) && + !arm_dc_feature(s, ARM_FEATURE_M)) { + return cp >= 14; + } + return cp < 8 || cp >= 14; +} + +static bool trans_MCR(DisasContext *s, arg_MCR *a) +{ + if (!valid_cp(s, a->cp)) { + return false; + } + do_coproc_insn(s, a->cp, false, a->opc1, a->crn, a->crm, a->opc2, + false, a->rt, 0); + return true; +} + +static bool trans_MRC(DisasContext *s, arg_MRC *a) +{ + if (!valid_cp(s, a->cp)) { + return false; + } + do_coproc_insn(s, a->cp, false, a->opc1, a->crn, a->crm, a->opc2, + true, a->rt, 0); + return true; +} + +static bool trans_MCRR(DisasContext *s, arg_MCRR *a) +{ + if (!valid_cp(s, a->cp)) { + return false; + } + do_coproc_insn(s, a->cp, true, a->opc1, 0, a->crm, 0, + false, a->rt, a->rt2); + return true; +} + +static bool trans_MRRC(DisasContext *s, arg_MRRC *a) +{ + if (!valid_cp(s, a->cp)) { + return false; + } + do_coproc_insn(s, a->cp, true, a->opc1, 0, a->crm, 0, + true, a->rt, a->rt2); + return true; +} + /* Helpers to swap operands for reverse-subtract. */ static void gen_rsb(TCGv_i32 dst, TCGv_i32 a, TCGv_i32 b) { @@ -7862,7 +7880,7 @@ static bool trans_BLX_i(DisasContext *s, arg_BLX_i *a) { TCGv_i32 tmp; - /* For A32, ARCH(5) is checked near the start of the uncond block. */ + /* For A32, ARM_FEATURE_V5 is checked near the start of the uncond block. */ if (s->thumb && (a->imm & 2)) { return false; } @@ -8228,7 +8246,10 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn) * choose to UNDEF. In ARMv5 and above the space is used * for miscellaneous unconditional instructions. */ - ARCH(5); + if (!arm_dc_feature(s, ARM_FEATURE_V5)) { + unallocated_encoding(s); + return; + } /* Unconditional instructions. */ /* TODO: Perhaps merge these into one decodetree output file. */ @@ -8265,25 +8286,18 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn) return; } /* fall back to legacy decoder */ - - switch ((insn >> 24) & 0xf) { - case 0xc: - case 0xd: - case 0xe: - if (((insn >> 8) & 0xe) == 10) { - /* VFP, but failed disas_vfp. */ - goto illegal_op; - } - if (disas_coproc_insn(s, insn)) { - /* Coprocessor. */ - goto illegal_op; + /* TODO: convert xscale/iwmmxt decoder to decodetree ?? */ + if (arm_dc_feature(s, ARM_FEATURE_XSCALE)) { + if (((insn & 0x0c000e00) == 0x0c000000) + && ((insn & 0x03000000) != 0x03000000)) { + /* Coprocessor insn, coprocessor 0 or 1 */ + disas_xscale_insn(s, insn); + return; } - break; - default: - illegal_op: - unallocated_encoding(s); - break; } + +illegal_op: + unallocated_encoding(s); } static bool thumb_insn_is_16bit(DisasContext *s, uint32_t pc, uint32_t insn) @@ -8360,7 +8374,23 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t insn) goto illegal_op; } } else if ((insn & 0xf800e800) != 0xf000e800) { - ARCH(6T2); + if (!arm_dc_feature(s, ARM_FEATURE_THUMB2)) { + unallocated_encoding(s); + return; + } + } + + if (arm_dc_feature(s, ARM_FEATURE_M)) { + /* + * NOCP takes precedence over any UNDEF for (almost) the + * entire wide range of coprocessor-space encodings, so check + * for it first before proceeding to actually decode eg VFP + * insns. This decode also handles the few insns which are + * in copro space but do not have NOCP checks (eg VLLDM, VLSTM). + */ + if (disas_m_nocp(s, insn)) { + return; + } } if ((insn & 0xef000000) == 0xef000000) { @@ -8401,52 +8431,9 @@ static void disas_thumb2_insn(DisasContext *s, uint32_t insn) ((insn >> 28) == 0xe && disas_vfp(s, insn))) { return; } - /* fall back to legacy decoder */ - switch ((insn >> 25) & 0xf) { - case 0: case 1: case 2: case 3: - /* 16-bit instructions. Should never happen. */ - abort(); - case 6: case 7: case 14: case 15: - /* Coprocessor. */ - if (arm_dc_feature(s, ARM_FEATURE_M)) { - /* 0b111x_11xx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx */ - if (extract32(insn, 24, 2) == 3) { - goto illegal_op; /* op0 = 0b11 : unallocated */ - } - - if (((insn >> 8) & 0xe) == 10 && - dc_isar_feature(aa32_fpsp_v2, s)) { - /* FP, and the CPU supports it */ - goto illegal_op; - } else { - /* All other insns: NOCP */ - gen_exception_insn(s, s->pc_curr, EXCP_NOCP, - syn_uncategorized(), - default_exception_el(s)); - } - break; - } - if (((insn >> 24) & 3) == 3) { - /* Neon DP, but failed disas_neon_dp() */ - goto illegal_op; - } else if (((insn >> 8) & 0xe) == 10) { - /* VFP, but failed disas_vfp. */ - goto illegal_op; - } else { - if (insn & (1 << 28)) - goto illegal_op; - if (disas_coproc_insn(s, insn)) { - goto illegal_op; - } - } - break; - case 12: - goto illegal_op; - default: - illegal_op: - unallocated_encoding(s); - } +illegal_op: + unallocated_encoding(s); } static void disas_thumb_insn(DisasContext *s, uint32_t insn) @@ -8567,7 +8554,6 @@ static void arm_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) cpu_V0 = tcg_temp_new_i64(); cpu_V1 = tcg_temp_new_i64(); - /* FIXME: cpu_M0 can probably be the same as cpu_V0. */ cpu_M0 = tcg_temp_new_i64(); } diff --git a/target/arm/translate.h b/target/arm/translate.h index 16f2699ad7..6d6d4c0f42 100644 --- a/target/arm/translate.h +++ b/target/arm/translate.h @@ -393,4 +393,56 @@ typedef void CryptoThreeOpIntFn(TCGv_ptr, TCGv_ptr, TCGv_i32); typedef void CryptoThreeOpFn(TCGv_ptr, TCGv_ptr, TCGv_ptr); typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, MemOp); +/* + * Enum for argument to fpstatus_ptr(). + */ +typedef enum ARMFPStatusFlavour { + FPST_FPCR, + FPST_FPCR_F16, + FPST_STD, + FPST_STD_F16, +} ARMFPStatusFlavour; + +/** + * fpstatus_ptr: return TCGv_ptr to the specified fp_status field + * + * We have multiple softfloat float_status fields in the Arm CPU state struct + * (see the comment in cpu.h for details). Return a TCGv_ptr which has + * been set up to point to the requested field in the CPU state struct. + * The options are: + * + * FPST_FPCR + * for non-FP16 operations controlled by the FPCR + * FPST_FPCR_F16 + * for operations controlled by the FPCR where FPCR.FZ16 is to be used + * FPST_STD + * for A32/T32 Neon operations using the "standard FPSCR value" + * FPST_STD_F16 + * as FPST_STD, but where FPCR.FZ16 is to be used + */ +static inline TCGv_ptr fpstatus_ptr(ARMFPStatusFlavour flavour) +{ + TCGv_ptr statusptr = tcg_temp_new_ptr(); + int offset; + + switch (flavour) { + case FPST_FPCR: + offset = offsetof(CPUARMState, vfp.fp_status); + break; + case FPST_FPCR_F16: + offset = offsetof(CPUARMState, vfp.fp_status_f16); + break; + case FPST_STD: + offset = offsetof(CPUARMState, vfp.standard_fp_status); + break; + case FPST_STD_F16: + offset = offsetof(CPUARMState, vfp.standard_fp_status_f16); + break; + default: + g_assert_not_reached(); + } + tcg_gen_addi_ptr(statusptr, cpu_env, offset); + return statusptr; +} + #endif /* TARGET_ARM_TRANSLATE_H */ diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 5fd70f975a..2c793e3e87 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -213,5 +213,3 @@ VCVT_sp_int ---- 1110 1.11 110 s:1 .... 1010 rz:1 1.0 .... \ vd=%vd_sp vm=%vm_sp VCVT_dp_int ---- 1110 1.11 110 s:1 .... 1011 rz:1 1.0 .... \ vd=%vd_sp vm=%vm_dp - -VLLDM_VLSTM 1110 1100 001 l:1 rn:4 0000 1010 0000 0000 diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 60dcd4bf14..64266ece62 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -93,6 +93,8 @@ static uint32_t vfp_get_fpscr_from_host(CPUARMState *env) /* FZ16 does not generate an input denormal exception. */ i |= (get_float_exception_flags(&env->vfp.fp_status_f16) & ~float_flag_input_denormal); + i |= (get_float_exception_flags(&env->vfp.standard_fp_status_f16) + & ~float_flag_input_denormal); return vfp_exceptbits_from_host(i); } @@ -124,7 +126,9 @@ static void vfp_set_fpscr_to_host(CPUARMState *env, uint32_t val) if (changed & FPCR_FZ16) { bool ftz_enabled = val & FPCR_FZ16; set_flush_to_zero(ftz_enabled, &env->vfp.fp_status_f16); + set_flush_to_zero(ftz_enabled, &env->vfp.standard_fp_status_f16); set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status_f16); + set_flush_inputs_to_zero(ftz_enabled, &env->vfp.standard_fp_status_f16); } if (changed & FPCR_FZ) { bool ftz_enabled = val & FPCR_FZ; @@ -146,6 +150,7 @@ static void vfp_set_fpscr_to_host(CPUARMState *env, uint32_t val) set_float_exception_flags(i, &env->vfp.fp_status); set_float_exception_flags(0, &env->vfp.fp_status_f16); set_float_exception_flags(0, &env->vfp.standard_fp_status); + set_float_exception_flags(0, &env->vfp.standard_fp_status_f16); } #else diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c index f6ff2591c3..a96cb21d96 100644 --- a/target/microblaze/translate.c +++ b/target/microblaze/translate.c @@ -1075,14 +1075,16 @@ static void dec_store(DisasContext *dc) swx_skip = gen_new_label(); tcg_gen_brcond_tl(TCG_COND_NE, env_res_addr, addr, swx_skip); - /* Compare the value loaded at lwx with current contents of - the reserved location. - FIXME: This only works for system emulation where we can expect - this compare and the following write to be atomic. For user - emulation we need to add atomicity between threads. */ + /* + * Compare the value loaded at lwx with current contents of + * the reserved location. + */ tval = tcg_temp_new_i32(); - tcg_gen_qemu_ld_i32(tval, addr, cpu_mmu_index(&dc->cpu->env, false), - MO_TEUL); + + tcg_gen_atomic_cmpxchg_i32(tval, addr, env_res_val, + cpu_R[dc->rd], mem_index, + mop); + tcg_gen_brcond_i32(TCG_COND_NE, env_res_val, tval, swx_skip); write_carryi(dc, 0); tcg_temp_free_i32(tval); @@ -1108,7 +1110,10 @@ static void dec_store(DisasContext *dc) break; } } - tcg_gen_qemu_st_i32(cpu_R[dc->rd], addr, mem_index, mop); + + if (!ex) { + tcg_gen_qemu_st_i32(cpu_R[dc->rd], addr, mem_index, mop); + } /* Verify alignment if needed. */ if (dc->cpu->cfg.unaligned_exceptions && size > 1) { @@ -1229,13 +1234,27 @@ static void dec_br(DisasContext *dc) /* Memory barrier. */ mbar = (dc->ir >> 16) & 31; if (mbar == 2 && dc->imm == 4) { + uint16_t mbar_imm = dc->rd; + + LOG_DIS("mbar %d\n", mbar_imm); + + /* Data access memory barrier. */ + if ((mbar_imm & 2) == 0) { + tcg_gen_mb(TCG_BAR_SC | TCG_MO_ALL); + } + /* mbar IMM & 16 decodes to sleep. */ - if (dc->rd & 16) { + if (mbar_imm & 16) { TCGv_i32 tmp_hlt = tcg_const_i32(EXCP_HLT); TCGv_i32 tmp_1 = tcg_const_i32(1); LOG_DIS("sleep\n"); + if (trap_userspace(dc, true)) { + /* Sleep is a privileged instruction. */ + return; + } + t_sync_flags(dc); tcg_gen_st_i32(tmp_1, cpu_env, -offsetof(MicroBlazeCPU, env) @@ -1246,7 +1265,6 @@ static void dec_br(DisasContext *dc) tcg_temp_free_i32(tmp_1); return; } - LOG_DIS("mbar %d\n", dc->rd); /* Break the TB. */ dc->cpustate_changed = 1; return; diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index e7d382ac10..3c4e1b3475 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -2191,6 +2191,8 @@ enum { PPC2_PM_ISA206 = 0x0000000000040000ULL, /* POWER ISA 3.0 */ PPC2_ISA300 = 0x0000000000080000ULL, + /* POWER ISA 3.1 */ + PPC2_ISA310 = 0x0000000000100000ULL, #define PPC_TCG_INSNS2 (PPC2_BOOKE206 | PPC2_VSX | PPC2_PRCNTL | PPC2_DBRX | \ PPC2_ISA205 | PPC2_VSX207 | PPC2_PERM_ISA206 | \ @@ -2199,7 +2201,7 @@ enum { PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207 | \ PPC2_ALTIVEC_207 | PPC2_ISA207S | PPC2_DFP | \ PPC2_FP_CVT_S64 | PPC2_TM | PPC2_PM_ISA206 | \ - PPC2_ISA300) + PPC2_ISA300 | PPC2_ISA310) }; /*****************************************************************************/ diff --git a/target/ppc/helper.h b/target/ppc/helper.h index 90166cbabd..6a4dccf70c 100644 --- a/target/ppc/helper.h +++ b/target/ppc/helper.h @@ -184,7 +184,10 @@ DEF_HELPER_3(vmulosw, void, avr, avr, avr) DEF_HELPER_3(vmuloub, void, avr, avr, avr) DEF_HELPER_3(vmulouh, void, avr, avr, avr) DEF_HELPER_3(vmulouw, void, avr, avr, avr) -DEF_HELPER_3(vmuluwm, void, avr, avr, avr) +DEF_HELPER_3(vmulhsw, void, avr, avr, avr) +DEF_HELPER_3(vmulhuw, void, avr, avr, avr) +DEF_HELPER_3(vmulhsd, void, avr, avr, avr) +DEF_HELPER_3(vmulhud, void, avr, avr, avr) DEF_HELPER_3(vslo, void, avr, avr, avr) DEF_HELPER_3(vsro, void, avr, avr, avr) DEF_HELPER_3(vsrv, void, avr, avr, avr) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 43ebf1daad..b45626f44c 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -523,19 +523,6 @@ void helper_vprtybq(ppc_avr_t *r, ppc_avr_t *b) r->VsrD(0) = 0; } -#define VARITH_DO(name, op, element) \ - void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ - { \ - int i; \ - \ - for (i = 0; i < ARRAY_SIZE(r->element); i++) { \ - r->element[i] = a->element[i] op b->element[i]; \ - } \ - } -VARITH_DO(muluwm, *, u32) -#undef VARITH_DO -#undef VARITH - #define VARITHFP(suffix, func) \ void helper_v##suffix(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, \ ppc_avr_t *b) \ @@ -1099,6 +1086,41 @@ VMUL(uw, u32, VsrW, VsrD, uint64_t) #undef VMUL_DO_ODD #undef VMUL +void helper_vmulhsw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) +{ + int i; + + for (i = 0; i < 4; i++) { + r->s32[i] = (int32_t)(((int64_t)a->s32[i] * (int64_t)b->s32[i]) >> 32); + } +} + +void helper_vmulhuw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) +{ + int i; + + for (i = 0; i < 4; i++) { + r->u32[i] = (uint32_t)(((uint64_t)a->u32[i] * + (uint64_t)b->u32[i]) >> 32); + } +} + +void helper_vmulhsd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) +{ + uint64_t discard; + + muls64(&discard, &r->u64[0], a->s64[0], b->s64[0]); + muls64(&discard, &r->u64[1], a->s64[1], b->s64[1]); +} + +void helper_vmulhud(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) +{ + uint64_t discard; + + mulu64(&discard, &r->u64[0], a->u64[0], b->u64[0]); + mulu64(&discard, &r->u64[1], a->u64[1], b->u64[1]); +} + void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) { diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 04db0d865c..fedb9b2271 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -6971,7 +6971,47 @@ static void gen_dform3D(DisasContext *ctx) return gen_invalid(ctx); } +#if defined(TARGET_PPC64) +/* brd */ +static void gen_brd(DisasContext *ctx) +{ + tcg_gen_bswap64_i64(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); +} + +/* brw */ +static void gen_brw(DisasContext *ctx) +{ + tcg_gen_bswap64_i64(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); + tcg_gen_rotli_i64(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], 32); + +} + +/* brh */ +static void gen_brh(DisasContext *ctx) +{ + TCGv_i64 t0 = tcg_temp_new_i64(); + TCGv_i64 t1 = tcg_temp_new_i64(); + TCGv_i64 t2 = tcg_temp_new_i64(); + + tcg_gen_movi_i64(t0, 0x00ff00ff00ff00ffull); + tcg_gen_shri_i64(t1, cpu_gpr[rS(ctx->opcode)], 8); + tcg_gen_and_i64(t2, t1, t0); + tcg_gen_and_i64(t1, cpu_gpr[rS(ctx->opcode)], t0); + tcg_gen_shli_i64(t1, t1, 8); + tcg_gen_or_i64(cpu_gpr[rA(ctx->opcode)], t1, t2); + + tcg_temp_free_i64(t0); + tcg_temp_free_i64(t1); + tcg_temp_free_i64(t2); +} +#endif + static opcode_t opcodes[] = { +#if defined(TARGET_PPC64) +GEN_HANDLER_E(brd, 0x1F, 0x1B, 0x05, 0x0000F801, PPC_NONE, PPC2_ISA310), +GEN_HANDLER_E(brw, 0x1F, 0x1B, 0x04, 0x0000F801, PPC_NONE, PPC2_ISA310), +GEN_HANDLER_E(brh, 0x1F, 0x1B, 0x06, 0x0000F801, PPC_NONE, PPC2_ISA310), +#endif GEN_HANDLER(invalid, 0x00, 0x00, 0x00, 0xFFFFFFFF, PPC_NONE), GEN_HANDLER(cmp, 0x1F, 0x00, 0x00, 0x00400000, PPC_INTEGER), GEN_HANDLER(cmpi, 0x0B, 0xFF, 0xFF, 0x00400000, PPC_INTEGER), diff --git a/target/ppc/translate/spe-impl.c.inc b/target/ppc/translate/spe-impl.c.inc index 36b4d5654d..2e6e799a25 100644 --- a/target/ppc/translate/spe-impl.c.inc +++ b/target/ppc/translate/spe-impl.c.inc @@ -349,14 +349,24 @@ static inline void gen_evmergelohi(DisasContext *ctx) } static inline void gen_evsplati(DisasContext *ctx) { - uint64_t imm = ((int32_t)(rA(ctx->opcode) << 27)) >> 27; + uint64_t imm; + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } + imm = ((int32_t)(rA(ctx->opcode) << 27)) >> 27; tcg_gen_movi_tl(cpu_gpr[rD(ctx->opcode)], imm); tcg_gen_movi_tl(cpu_gprh[rD(ctx->opcode)], imm); } static inline void gen_evsplatfi(DisasContext *ctx) { - uint64_t imm = rA(ctx->opcode) << 27; + uint64_t imm; + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } + imm = rA(ctx->opcode) << 27; tcg_gen_movi_tl(cpu_gpr[rD(ctx->opcode)], imm); tcg_gen_movi_tl(cpu_gprh[rD(ctx->opcode)], imm); @@ -389,21 +399,37 @@ static inline void gen_evsel(DisasContext *ctx) static void gen_evsel0(DisasContext *ctx) { + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } gen_evsel(ctx); } static void gen_evsel1(DisasContext *ctx) { + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } gen_evsel(ctx); } static void gen_evsel2(DisasContext *ctx) { + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } gen_evsel(ctx); } static void gen_evsel3(DisasContext *ctx) { + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } gen_evsel(ctx); } @@ -518,6 +544,11 @@ static inline void gen_evmwsmia(DisasContext *ctx) { TCGv_i64 tmp; + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } + gen_evmwsmi(ctx); /* rD := rA * rB */ tmp = tcg_temp_new_i64(); @@ -531,8 +562,13 @@ static inline void gen_evmwsmia(DisasContext *ctx) static inline void gen_evmwsmiaa(DisasContext *ctx) { - TCGv_i64 acc = tcg_temp_new_i64(); - TCGv_i64 tmp = tcg_temp_new_i64(); + TCGv_i64 acc; + TCGv_i64 tmp; + + if (unlikely(!ctx->spe_enabled)) { + gen_exception(ctx, POWERPC_EXCP_SPEU); + return; + } gen_evmwsmi(ctx); /* rD := rA * rB */ @@ -892,8 +928,14 @@ static inline void gen_##name(DisasContext *ctx) \ #define GEN_SPEFPUOP_CONV_32_64(name) \ static inline void gen_##name(DisasContext *ctx) \ { \ - TCGv_i64 t0 = tcg_temp_new_i64(); \ - TCGv_i32 t1 = tcg_temp_new_i32(); \ + TCGv_i64 t0; \ + TCGv_i32 t1; \ + if (unlikely(!ctx->spe_enabled)) { \ + gen_exception(ctx, POWERPC_EXCP_SPEU); \ + return; \ + } \ + t0 = tcg_temp_new_i64(); \ + t1 = tcg_temp_new_i32(); \ gen_load_gpr64(t0, rB(ctx->opcode)); \ gen_helper_##name(t1, cpu_env, t0); \ tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t1); \ @@ -903,8 +945,14 @@ static inline void gen_##name(DisasContext *ctx) \ #define GEN_SPEFPUOP_CONV_64_32(name) \ static inline void gen_##name(DisasContext *ctx) \ { \ - TCGv_i64 t0 = tcg_temp_new_i64(); \ - TCGv_i32 t1 = tcg_temp_new_i32(); \ + TCGv_i64 t0; \ + TCGv_i32 t1; \ + if (unlikely(!ctx->spe_enabled)) { \ + gen_exception(ctx, POWERPC_EXCP_SPEU); \ + return; \ + } \ + t0 = tcg_temp_new_i64(); \ + t1 = tcg_temp_new_i32(); \ tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]); \ gen_helper_##name(t0, cpu_env, t1); \ gen_store_gpr64(rD(ctx->opcode), t0); \ @@ -914,7 +962,12 @@ static inline void gen_##name(DisasContext *ctx) \ #define GEN_SPEFPUOP_CONV_64_64(name) \ static inline void gen_##name(DisasContext *ctx) \ { \ - TCGv_i64 t0 = tcg_temp_new_i64(); \ + TCGv_i64 t0; \ + if (unlikely(!ctx->spe_enabled)) { \ + gen_exception(ctx, POWERPC_EXCP_SPEU); \ + return; \ + } \ + t0 = tcg_temp_new_i64(); \ gen_load_gpr64(t0, rB(ctx->opcode)); \ gen_helper_##name(t0, cpu_env, t0); \ gen_store_gpr64(rD(ctx->opcode), t0); \ @@ -923,13 +976,8 @@ static inline void gen_##name(DisasContext *ctx) \ #define GEN_SPEFPUOP_ARITH2_32_32(name) \ static inline void gen_##name(DisasContext *ctx) \ { \ - TCGv_i32 t0, t1; \ - if (unlikely(!ctx->spe_enabled)) { \ - gen_exception(ctx, POWERPC_EXCP_SPEU); \ - return; \ - } \ - t0 = tcg_temp_new_i32(); \ - t1 = tcg_temp_new_i32(); \ + TCGv_i32 t0 = tcg_temp_new_i32(); \ + TCGv_i32 t1 = tcg_temp_new_i32(); \ tcg_gen_trunc_tl_i32(t0, cpu_gpr[rA(ctx->opcode)]); \ tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]); \ gen_helper_##name(t0, cpu_env, t0, t1); \ @@ -958,13 +1006,8 @@ static inline void gen_##name(DisasContext *ctx) \ #define GEN_SPEFPUOP_COMP_32(name) \ static inline void gen_##name(DisasContext *ctx) \ { \ - TCGv_i32 t0, t1; \ - if (unlikely(!ctx->spe_enabled)) { \ - gen_exception(ctx, POWERPC_EXCP_SPEU); \ - return; \ - } \ - t0 = tcg_temp_new_i32(); \ - t1 = tcg_temp_new_i32(); \ + TCGv_i32 t0 = tcg_temp_new_i32(); \ + TCGv_i32 t1 = tcg_temp_new_i32(); \ \ tcg_gen_trunc_tl_i32(t0, cpu_gpr[rA(ctx->opcode)]); \ tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]); \ @@ -1074,28 +1117,16 @@ GEN_SPEFPUOP_ARITH2_32_32(efsmul); GEN_SPEFPUOP_ARITH2_32_32(efsdiv); static inline void gen_efsabs(DisasContext *ctx) { - if (unlikely(!ctx->spe_enabled)) { - gen_exception(ctx, POWERPC_EXCP_SPEU); - return; - } tcg_gen_andi_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], (target_long)~0x80000000LL); } static inline void gen_efsnabs(DisasContext *ctx) { - if (unlikely(!ctx->spe_enabled)) { - gen_exception(ctx, POWERPC_EXCP_SPEU); - return; - } tcg_gen_ori_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], 0x80000000); } static inline void gen_efsneg(DisasContext *ctx) { - if (unlikely(!ctx->spe_enabled)) { - gen_exception(ctx, POWERPC_EXCP_SPEU); - return; - } tcg_gen_xori_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], 0x80000000); } diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc index de2fd136ff..92b9527aff 100644 --- a/target/ppc/translate/vmx-impl.c.inc +++ b/target/ppc/translate/vmx-impl.c.inc @@ -801,18 +801,27 @@ static void trans_vclzd(DisasContext *ctx) GEN_VXFORM(vmuloub, 4, 0); GEN_VXFORM(vmulouh, 4, 1); GEN_VXFORM(vmulouw, 4, 2); -GEN_VXFORM(vmuluwm, 4, 2); +GEN_VXFORM_V(vmuluwm, MO_32, tcg_gen_gvec_mul, 4, 2); GEN_VXFORM_DUAL(vmulouw, PPC_ALTIVEC, PPC_NONE, vmuluwm, PPC_NONE, PPC2_ALTIVEC_207) GEN_VXFORM(vmulosb, 4, 4); GEN_VXFORM(vmulosh, 4, 5); GEN_VXFORM(vmulosw, 4, 6); +GEN_VXFORM_V(vmulld, MO_64, tcg_gen_gvec_mul, 4, 7); GEN_VXFORM(vmuleub, 4, 8); GEN_VXFORM(vmuleuh, 4, 9); GEN_VXFORM(vmuleuw, 4, 10); +GEN_VXFORM(vmulhuw, 4, 10); +GEN_VXFORM(vmulhud, 4, 11); +GEN_VXFORM_DUAL(vmuleuw, PPC_ALTIVEC, PPC_NONE, + vmulhuw, PPC_NONE, PPC2_ISA310); GEN_VXFORM(vmulesb, 4, 12); GEN_VXFORM(vmulesh, 4, 13); GEN_VXFORM(vmulesw, 4, 14); +GEN_VXFORM(vmulhsw, 4, 14); +GEN_VXFORM_DUAL(vmulesw, PPC_ALTIVEC, PPC_NONE, + vmulhsw, PPC_NONE, PPC2_ISA310); +GEN_VXFORM(vmulhsd, 4, 15); GEN_VXFORM_V(vslb, MO_8, tcg_gen_gvec_shlv, 2, 4); GEN_VXFORM_V(vslh, MO_16, tcg_gen_gvec_shlv, 2, 5); GEN_VXFORM_V(vslw, MO_32, tcg_gen_gvec_shlv, 2, 6); diff --git a/target/ppc/translate/vmx-ops.c.inc b/target/ppc/translate/vmx-ops.c.inc index 84e05fb827..f3f4855111 100644 --- a/target/ppc/translate/vmx-ops.c.inc +++ b/target/ppc/translate/vmx-ops.c.inc @@ -48,6 +48,9 @@ GEN_HANDLER_E(name, 0x04, opc2, opc3, inval, PPC_NONE, PPC2_ISA300) GEN_HANDLER_E_2(name, 0x04, opc2, opc3, opc4, 0x00000000, PPC_NONE, \ PPC2_ISA300) +#define GEN_VXFORM_310(name, opc2, opc3) \ +GEN_HANDLER_E(name, 0x04, opc2, opc3, 0x00000000, PPC_NONE, PPC2_ISA310) + #define GEN_VXFORM_DUAL(name0, name1, opc2, opc3, type0, type1) \ GEN_HANDLER_E(name0##_##name1, 0x4, opc2, opc3, 0x00000000, type0, type1) @@ -104,12 +107,15 @@ GEN_VXFORM_DUAL(vmulouw, vmuluwm, 4, 2, PPC_ALTIVEC, PPC_NONE), GEN_VXFORM(vmulosb, 4, 4), GEN_VXFORM(vmulosh, 4, 5), GEN_VXFORM_207(vmulosw, 4, 6), +GEN_VXFORM_310(vmulld, 4, 7), GEN_VXFORM(vmuleub, 4, 8), GEN_VXFORM(vmuleuh, 4, 9), -GEN_VXFORM_207(vmuleuw, 4, 10), +GEN_VXFORM_DUAL(vmuleuw, vmulhuw, 4, 10, PPC_ALTIVEC, PPC_NONE), +GEN_VXFORM_310(vmulhud, 4, 11), GEN_VXFORM(vmulesb, 4, 12), GEN_VXFORM(vmulesh, 4, 13), -GEN_VXFORM_207(vmulesw, 4, 14), +GEN_VXFORM_DUAL(vmulesw, vmulhsw, 4, 14, PPC_ALTIVEC, PPC_NONE), +GEN_VXFORM_310(vmulhsd, 4, 15), GEN_VXFORM(vslb, 2, 4), GEN_VXFORM(vslh, 2, 5), GEN_VXFORM_DUAL(vslw, vrlwnm, 2, 6, PPC_ALTIVEC, PPC_NONE), diff --git a/target/ppc/translate_init.c.inc b/target/ppc/translate_init.c.inc index 7e66822b5d..230a062d29 100644 --- a/target/ppc/translate_init.c.inc +++ b/target/ppc/translate_init.c.inc @@ -284,12 +284,24 @@ static void spr_write_atbu(DisasContext *ctx, int sprn, int gprn) ATTRIBUTE_UNUSED static void spr_read_purr(DisasContext *ctx, int gprn, int sprn) { + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_load_purr(cpu_gpr[gprn], cpu_env); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_stop_exception(ctx); + } } static void spr_write_purr(DisasContext *ctx, int sprn, int gprn) { + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_store_purr(cpu_env, cpu_gpr[gprn]); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_stop_exception(ctx); + } } /* HDECR */ @@ -319,17 +331,35 @@ static void spr_write_hdecr(DisasContext *ctx, int sprn, int gprn) static void spr_read_vtb(DisasContext *ctx, int gprn, int sprn) { + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_load_vtb(cpu_gpr[gprn], cpu_env); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_stop_exception(ctx); + } } static void spr_write_vtb(DisasContext *ctx, int sprn, int gprn) { + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_store_vtb(cpu_env, cpu_gpr[gprn]); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_stop_exception(ctx); + } } static void spr_write_tbu40(DisasContext *ctx, int sprn, int gprn) { + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_store_tbu40(cpu_env, cpu_gpr[gprn]); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_stop_exception(ctx); + } } #endif @@ -9201,7 +9231,7 @@ POWERPC_FAMILY(POWER10)(ObjectClass *oc, void *data) PPC2_FP_TST_ISA206 | PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207 | PPC2_ALTIVEC_207 | PPC2_ISA205 | PPC2_ISA207S | PPC2_FP_CVT_S64 | - PPC2_TM | PPC2_ISA300 | PPC2_PRCNTL; + PPC2_TM | PPC2_ISA300 | PPC2_PRCNTL | PPC2_ISA310; pcc->msr_mask = (1ull << MSR_SF) | (1ull << MSR_HV) | (1ull << MSR_TM) | diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 75d2ae3434..fd1d373b6f 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -543,7 +543,8 @@ restart: /* for superpage mappings, make a fake leaf PTE for the TLB's benefit. */ target_ulong vpn = addr >> PGSHIFT; - *physical = (ppn | (vpn & ((1L << ptshift) - 1))) << PGSHIFT; + *physical = ((ppn | (vpn & ((1L << ptshift) - 1))) << PGSHIFT) | + (addr & ~TARGET_PAGE_MASK); /* set permissions on the TLB entry */ if ((pte & PTE_R) || ((pte & PTE_X) && mxr)) { @@ -630,7 +631,7 @@ hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) } } - return phys_addr; + return phys_addr & TARGET_PAGE_MASK; } void riscv_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr, @@ -692,6 +693,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, bool first_stage_error = true; int ret = TRANSLATE_FAIL; int mode = mmu_idx; + target_ulong tlb_size = 0; env->guest_phys_fault_addr = 0; @@ -783,8 +785,13 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, } if (ret == TRANSLATE_SUCCESS) { - tlb_set_page(cs, address & TARGET_PAGE_MASK, pa & TARGET_PAGE_MASK, - prot, mmu_idx, TARGET_PAGE_SIZE); + if (pmp_is_range_in_tlb(env, pa & TARGET_PAGE_MASK, &tlb_size)) { + tlb_set_page(cs, address & ~(tlb_size - 1), pa & ~(tlb_size - 1), + prot, mmu_idx, tlb_size); + } else { + tlb_set_page(cs, address & TARGET_PAGE_MASK, pa & TARGET_PAGE_MASK, + prot, mmu_idx, TARGET_PAGE_SIZE); + } return true; } else if (probe) { return false; diff --git a/target/riscv/fpu_helper.c b/target/riscv/fpu_helper.c index 4379756dc4..bb346a8249 100644 --- a/target/riscv/fpu_helper.c +++ b/target/riscv/fpu_helper.c @@ -81,10 +81,19 @@ void helper_set_rounding_mode(CPURISCVState *env, uint32_t rm) set_float_rounding_mode(softrm, &env->fp_status); } +static uint64_t do_fmadd_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2, + uint64_t rs3, int flags) +{ + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + float32 frs3 = check_nanbox_s(rs3); + return nanbox_s(float32_muladd(frs1, frs2, frs3, flags, &env->fp_status)); +} + uint64_t helper_fmadd_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t frs3) { - return float32_muladd(frs1, frs2, frs3, 0, &env->fp_status); + return do_fmadd_s(env, frs1, frs2, frs3, 0); } uint64_t helper_fmadd_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, @@ -96,8 +105,7 @@ uint64_t helper_fmadd_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t helper_fmsub_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t frs3) { - return float32_muladd(frs1, frs2, frs3, float_muladd_negate_c, - &env->fp_status); + return do_fmadd_s(env, frs1, frs2, frs3, float_muladd_negate_c); } uint64_t helper_fmsub_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, @@ -110,8 +118,7 @@ uint64_t helper_fmsub_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t helper_fnmsub_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t frs3) { - return float32_muladd(frs1, frs2, frs3, float_muladd_negate_product, - &env->fp_status); + return do_fmadd_s(env, frs1, frs2, frs3, float_muladd_negate_product); } uint64_t helper_fnmsub_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, @@ -124,8 +131,8 @@ uint64_t helper_fnmsub_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t helper_fnmadd_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2, uint64_t frs3) { - return float32_muladd(frs1, frs2, frs3, float_muladd_negate_c | - float_muladd_negate_product, &env->fp_status); + return do_fmadd_s(env, frs1, frs2, frs3, + float_muladd_negate_c | float_muladd_negate_product); } uint64_t helper_fnmadd_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, @@ -135,102 +142,126 @@ uint64_t helper_fnmadd_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2, float_muladd_negate_product, &env->fp_status); } -uint64_t helper_fadd_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +uint64_t helper_fadd_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { - return float32_add(frs1, frs2, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + return nanbox_s(float32_add(frs1, frs2, &env->fp_status)); } -uint64_t helper_fsub_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +uint64_t helper_fsub_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { - return float32_sub(frs1, frs2, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + return nanbox_s(float32_sub(frs1, frs2, &env->fp_status)); } -uint64_t helper_fmul_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +uint64_t helper_fmul_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { - return float32_mul(frs1, frs2, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + return nanbox_s(float32_mul(frs1, frs2, &env->fp_status)); } -uint64_t helper_fdiv_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +uint64_t helper_fdiv_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { - return float32_div(frs1, frs2, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + return nanbox_s(float32_div(frs1, frs2, &env->fp_status)); } -uint64_t helper_fmin_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +uint64_t helper_fmin_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { - return float32_minnum(frs1, frs2, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + return nanbox_s(float32_minnum(frs1, frs2, &env->fp_status)); } -uint64_t helper_fmax_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +uint64_t helper_fmax_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { - return float32_maxnum(frs1, frs2, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); + return nanbox_s(float32_maxnum(frs1, frs2, &env->fp_status)); } -uint64_t helper_fsqrt_s(CPURISCVState *env, uint64_t frs1) +uint64_t helper_fsqrt_s(CPURISCVState *env, uint64_t rs1) { - return float32_sqrt(frs1, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + return nanbox_s(float32_sqrt(frs1, &env->fp_status)); } -target_ulong helper_fle_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +target_ulong helper_fle_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); return float32_le(frs1, frs2, &env->fp_status); } -target_ulong helper_flt_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +target_ulong helper_flt_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); return float32_lt(frs1, frs2, &env->fp_status); } -target_ulong helper_feq_s(CPURISCVState *env, uint64_t frs1, uint64_t frs2) +target_ulong helper_feq_s(CPURISCVState *env, uint64_t rs1, uint64_t rs2) { + float32 frs1 = check_nanbox_s(rs1); + float32 frs2 = check_nanbox_s(rs2); return float32_eq_quiet(frs1, frs2, &env->fp_status); } -target_ulong helper_fcvt_w_s(CPURISCVState *env, uint64_t frs1) +target_ulong helper_fcvt_w_s(CPURISCVState *env, uint64_t rs1) { + float32 frs1 = check_nanbox_s(rs1); return float32_to_int32(frs1, &env->fp_status); } -target_ulong helper_fcvt_wu_s(CPURISCVState *env, uint64_t frs1) +target_ulong helper_fcvt_wu_s(CPURISCVState *env, uint64_t rs1) { + float32 frs1 = check_nanbox_s(rs1); return (int32_t)float32_to_uint32(frs1, &env->fp_status); } #if defined(TARGET_RISCV64) -uint64_t helper_fcvt_l_s(CPURISCVState *env, uint64_t frs1) +uint64_t helper_fcvt_l_s(CPURISCVState *env, uint64_t rs1) { + float32 frs1 = check_nanbox_s(rs1); return float32_to_int64(frs1, &env->fp_status); } -uint64_t helper_fcvt_lu_s(CPURISCVState *env, uint64_t frs1) +uint64_t helper_fcvt_lu_s(CPURISCVState *env, uint64_t rs1) { + float32 frs1 = check_nanbox_s(rs1); return float32_to_uint64(frs1, &env->fp_status); } #endif uint64_t helper_fcvt_s_w(CPURISCVState *env, target_ulong rs1) { - return int32_to_float32((int32_t)rs1, &env->fp_status); + return nanbox_s(int32_to_float32((int32_t)rs1, &env->fp_status)); } uint64_t helper_fcvt_s_wu(CPURISCVState *env, target_ulong rs1) { - return uint32_to_float32((uint32_t)rs1, &env->fp_status); + return nanbox_s(uint32_to_float32((uint32_t)rs1, &env->fp_status)); } #if defined(TARGET_RISCV64) uint64_t helper_fcvt_s_l(CPURISCVState *env, uint64_t rs1) { - return int64_to_float32(rs1, &env->fp_status); + return nanbox_s(int64_to_float32(rs1, &env->fp_status)); } uint64_t helper_fcvt_s_lu(CPURISCVState *env, uint64_t rs1) { - return uint64_to_float32(rs1, &env->fp_status); + return nanbox_s(uint64_to_float32(rs1, &env->fp_status)); } #endif -target_ulong helper_fclass_s(uint64_t frs1) +target_ulong helper_fclass_s(uint64_t rs1) { + float32 frs1 = check_nanbox_s(rs1); return fclass_s(frs1); } @@ -266,12 +297,13 @@ uint64_t helper_fmax_d(CPURISCVState *env, uint64_t frs1, uint64_t frs2) uint64_t helper_fcvt_s_d(CPURISCVState *env, uint64_t rs1) { - return float64_to_float32(rs1, &env->fp_status); + return nanbox_s(float64_to_float32(rs1, &env->fp_status)); } uint64_t helper_fcvt_d_s(CPURISCVState *env, uint64_t rs1) { - return float32_to_float64(rs1, &env->fp_status); + float32 frs1 = check_nanbox_s(rs1); + return float32_to_float64(frs1, &env->fp_status); } uint64_t helper_fsqrt_d(CPURISCVState *env, uint64_t frs1) diff --git a/target/riscv/insn_trans/trans_rvd.c.inc b/target/riscv/insn_trans/trans_rvd.c.inc index ea1044f13b..4f832637fa 100644 --- a/target/riscv/insn_trans/trans_rvd.c.inc +++ b/target/riscv/insn_trans/trans_rvd.c.inc @@ -20,10 +20,10 @@ static bool trans_fld(DisasContext *ctx, arg_fld *a) { - TCGv t0 = tcg_temp_new(); - gen_get_gpr(t0, a->rs1); REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); + TCGv t0 = tcg_temp_new(); + gen_get_gpr(t0, a->rs1); tcg_gen_addi_tl(t0, t0, a->imm); tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], t0, ctx->mem_idx, MO_TEQ); @@ -35,10 +35,10 @@ static bool trans_fld(DisasContext *ctx, arg_fld *a) static bool trans_fsd(DisasContext *ctx, arg_fsd *a) { - TCGv t0 = tcg_temp_new(); - gen_get_gpr(t0, a->rs1); REQUIRE_FPU; REQUIRE_EXT(ctx, RVD); + TCGv t0 = tcg_temp_new(); + gen_get_gpr(t0, a->rs1); tcg_gen_addi_tl(t0, t0, a->imm); tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], t0, ctx->mem_idx, MO_TEQ); diff --git a/target/riscv/insn_trans/trans_rvf.c.inc b/target/riscv/insn_trans/trans_rvf.c.inc index 3bfd8881e7..3dfec8211d 100644 --- a/target/riscv/insn_trans/trans_rvf.c.inc +++ b/target/riscv/insn_trans/trans_rvf.c.inc @@ -23,30 +23,16 @@ return false; \ } while (0) -/* - * RISC-V requires NaN-boxing of narrower width floating - * point values. This applies when a 32-bit value is - * assigned to a 64-bit FP register. Thus this does not - * apply when the RVD extension is not present. - */ -static void gen_nanbox_fpr(DisasContext *ctx, int regno) -{ - if (has_ext(ctx, RVD)) { - tcg_gen_ori_i64(cpu_fpr[regno], cpu_fpr[regno], - MAKE_64BIT_MASK(32, 32)); - } -} - static bool trans_flw(DisasContext *ctx, arg_flw *a) { - TCGv t0 = tcg_temp_new(); - gen_get_gpr(t0, a->rs1); REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); + TCGv t0 = tcg_temp_new(); + gen_get_gpr(t0, a->rs1); tcg_gen_addi_tl(t0, t0, a->imm); tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], t0, ctx->mem_idx, MO_TEUL); - gen_nanbox_fpr(ctx, a->rd); + gen_nanbox_s(cpu_fpr[a->rd], cpu_fpr[a->rd]); tcg_temp_free(t0); mark_fs_dirty(ctx); @@ -55,11 +41,11 @@ static bool trans_flw(DisasContext *ctx, arg_flw *a) static bool trans_fsw(DisasContext *ctx, arg_fsw *a) { + REQUIRE_FPU; + REQUIRE_EXT(ctx, RVF); TCGv t0 = tcg_temp_new(); gen_get_gpr(t0, a->rs1); - REQUIRE_FPU; - REQUIRE_EXT(ctx, RVF); tcg_gen_addi_tl(t0, t0, a->imm); tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], t0, ctx->mem_idx, MO_TEUL); @@ -175,11 +161,20 @@ static bool trans_fsgnj_s(DisasContext *ctx, arg_fsgnj_s *a) { REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); + if (a->rs1 == a->rs2) { /* FMOV */ - tcg_gen_mov_i64(cpu_fpr[a->rd], cpu_fpr[a->rs1]); + gen_check_nanbox_s(cpu_fpr[a->rd], cpu_fpr[a->rs1]); } else { /* FSGNJ */ - tcg_gen_deposit_i64(cpu_fpr[a->rd], cpu_fpr[a->rs2], cpu_fpr[a->rs1], - 0, 31); + TCGv_i64 rs1 = tcg_temp_new_i64(); + TCGv_i64 rs2 = tcg_temp_new_i64(); + + gen_check_nanbox_s(rs1, cpu_fpr[a->rs1]); + gen_check_nanbox_s(rs2, cpu_fpr[a->rs2]); + + /* This formulation retains the nanboxing of rs2. */ + tcg_gen_deposit_i64(cpu_fpr[a->rd], rs2, rs1, 0, 31); + tcg_temp_free_i64(rs1); + tcg_temp_free_i64(rs2); } mark_fs_dirty(ctx); return true; @@ -187,32 +182,65 @@ static bool trans_fsgnj_s(DisasContext *ctx, arg_fsgnj_s *a) static bool trans_fsgnjn_s(DisasContext *ctx, arg_fsgnjn_s *a) { + TCGv_i64 rs1, rs2, mask; + REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); + + rs1 = tcg_temp_new_i64(); + gen_check_nanbox_s(rs1, cpu_fpr[a->rs1]); + if (a->rs1 == a->rs2) { /* FNEG */ - tcg_gen_xori_i64(cpu_fpr[a->rd], cpu_fpr[a->rs1], INT32_MIN); + tcg_gen_xori_i64(cpu_fpr[a->rd], rs1, MAKE_64BIT_MASK(31, 1)); } else { - TCGv_i64 t0 = tcg_temp_new_i64(); - tcg_gen_not_i64(t0, cpu_fpr[a->rs2]); - tcg_gen_deposit_i64(cpu_fpr[a->rd], t0, cpu_fpr[a->rs1], 0, 31); - tcg_temp_free_i64(t0); + rs2 = tcg_temp_new_i64(); + gen_check_nanbox_s(rs2, cpu_fpr[a->rs2]); + + /* + * Replace bit 31 in rs1 with inverse in rs2. + * This formulation retains the nanboxing of rs1. + */ + mask = tcg_const_i64(~MAKE_64BIT_MASK(31, 1)); + tcg_gen_nor_i64(rs2, rs2, mask); + tcg_gen_and_i64(rs1, mask, rs1); + tcg_gen_or_i64(cpu_fpr[a->rd], rs1, rs2); + + tcg_temp_free_i64(mask); + tcg_temp_free_i64(rs2); } + tcg_temp_free_i64(rs1); + mark_fs_dirty(ctx); return true; } static bool trans_fsgnjx_s(DisasContext *ctx, arg_fsgnjx_s *a) { + TCGv_i64 rs1, rs2; + REQUIRE_FPU; REQUIRE_EXT(ctx, RVF); + + rs1 = tcg_temp_new_i64(); + gen_check_nanbox_s(rs1, cpu_fpr[a->rs1]); + if (a->rs1 == a->rs2) { /* FABS */ - tcg_gen_andi_i64(cpu_fpr[a->rd], cpu_fpr[a->rs1], ~INT32_MIN); + tcg_gen_andi_i64(cpu_fpr[a->rd], rs1, ~MAKE_64BIT_MASK(31, 1)); } else { - TCGv_i64 t0 = tcg_temp_new_i64(); - tcg_gen_andi_i64(t0, cpu_fpr[a->rs2], INT32_MIN); - tcg_gen_xor_i64(cpu_fpr[a->rd], cpu_fpr[a->rs1], t0); - tcg_temp_free_i64(t0); + rs2 = tcg_temp_new_i64(); + gen_check_nanbox_s(rs2, cpu_fpr[a->rs2]); + + /* + * Xor bit 31 in rs1 with that in rs2. + * This formulation retains the nanboxing of rs1. + */ + tcg_gen_andi_i64(rs2, rs2, MAKE_64BIT_MASK(31, 1)); + tcg_gen_xor_i64(cpu_fpr[a->rd], rs1, rs2); + + tcg_temp_free_i64(rs2); } + tcg_temp_free_i64(rs1); + mark_fs_dirty(ctx); return true; } @@ -378,11 +406,8 @@ static bool trans_fmv_w_x(DisasContext *ctx, arg_fmv_w_x *a) TCGv t0 = tcg_temp_new(); gen_get_gpr(t0, a->rs1); -#if defined(TARGET_RISCV64) - tcg_gen_mov_i64(cpu_fpr[a->rd], t0); -#else - tcg_gen_extu_i32_i64(cpu_fpr[a->rd], t0); -#endif + tcg_gen_extu_tl_i64(cpu_fpr[a->rd], t0); + gen_nanbox_s(cpu_fpr[a->rd], cpu_fpr[a->rd]); mark_fs_dirty(ctx); tcg_temp_free(t0); diff --git a/target/riscv/internals.h b/target/riscv/internals.h index 37d33820ad..f1a546dba6 100644 --- a/target/riscv/internals.h +++ b/target/riscv/internals.h @@ -38,4 +38,20 @@ target_ulong fclass_d(uint64_t frs1); #define SEW32 2 #define SEW64 3 +static inline uint64_t nanbox_s(float32 f) +{ + return f | MAKE_64BIT_MASK(32, 32); +} + +static inline float32 check_nanbox_s(uint64_t f) +{ + uint64_t mask = MAKE_64BIT_MASK(32, 32); + + if (likely((f & mask) == mask)) { + return (uint32_t)f; + } else { + return 0x7fc00000u; /* default qnan */ + } +} + #endif diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c index 2a2b9f5363..c394e867f8 100644 --- a/target/riscv/pmp.c +++ b/target/riscv/pmp.c @@ -320,8 +320,7 @@ void pmpcfg_csr_write(CPURISCVState *env, uint32_t reg_index, for (i = 0; i < sizeof(target_ulong); i++) { cfg_val = (val >> 8 * i) & 0xff; - pmp_write_cfg(env, (reg_index * sizeof(target_ulong)) + i, - cfg_val); + pmp_write_cfg(env, (reg_index * 4) + i, cfg_val); } } @@ -336,7 +335,7 @@ target_ulong pmpcfg_csr_read(CPURISCVState *env, uint32_t reg_index) target_ulong val = 0; for (i = 0; i < sizeof(target_ulong); i++) { - val = pmp_read_cfg(env, (reg_index * sizeof(target_ulong)) + i); + val = pmp_read_cfg(env, (reg_index * 4) + i); cfg_val |= (val << (i * 8)); } trace_pmpcfg_csr_read(env->mhartid, reg_index, cfg_val); @@ -384,3 +383,55 @@ target_ulong pmpaddr_csr_read(CPURISCVState *env, uint32_t addr_index) return val; } + +/* + * Calculate the TLB size if the start address or the end address of + * PMP entry is presented in thie TLB page. + */ +static target_ulong pmp_get_tlb_size(CPURISCVState *env, int pmp_index, + target_ulong tlb_sa, target_ulong tlb_ea) +{ + target_ulong pmp_sa = env->pmp_state.addr[pmp_index].sa; + target_ulong pmp_ea = env->pmp_state.addr[pmp_index].ea; + + if (pmp_sa >= tlb_sa && pmp_ea <= tlb_ea) { + return pmp_ea - pmp_sa + 1; + } + + if (pmp_sa >= tlb_sa && pmp_sa <= tlb_ea && pmp_ea >= tlb_ea) { + return tlb_ea - pmp_sa + 1; + } + + if (pmp_ea <= tlb_ea && pmp_ea >= tlb_sa && pmp_sa <= tlb_sa) { + return pmp_ea - tlb_sa + 1; + } + + return 0; +} + +/* + * Check is there a PMP entry which range covers this page. If so, + * try to find the minimum granularity for the TLB size. + */ +bool pmp_is_range_in_tlb(CPURISCVState *env, hwaddr tlb_sa, + target_ulong *tlb_size) +{ + int i; + target_ulong val; + target_ulong tlb_ea = (tlb_sa + TARGET_PAGE_SIZE - 1); + + for (i = 0; i < MAX_RISCV_PMPS; i++) { + val = pmp_get_tlb_size(env, i, tlb_sa, tlb_ea); + if (val) { + if (*tlb_size == 0 || *tlb_size > val) { + *tlb_size = val; + } + } + } + + if (*tlb_size != 0) { + return true; + } + + return false; +} diff --git a/target/riscv/pmp.h b/target/riscv/pmp.h index 8e19793132..6a8f072871 100644 --- a/target/riscv/pmp.h +++ b/target/riscv/pmp.h @@ -60,5 +60,7 @@ void pmpaddr_csr_write(CPURISCVState *env, uint32_t addr_index, target_ulong pmpaddr_csr_read(CPURISCVState *env, uint32_t addr_index); bool pmp_hart_has_privs(CPURISCVState *env, target_ulong addr, target_ulong size, pmp_priv_t priv, target_ulong mode); +bool pmp_is_range_in_tlb(CPURISCVState *env, hwaddr tlb_sa, + target_ulong *tlb_size); #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index d0485c0750..3919f570f7 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -90,6 +90,35 @@ static inline bool has_ext(DisasContext *ctx, uint32_t ext) return ctx->misa & ext; } +/* + * RISC-V requires NaN-boxing of narrower width floating point values. + * This applies when a 32-bit value is assigned to a 64-bit FP register. + * For consistency and simplicity, we nanbox results even when the RVD + * extension is not present. + */ +static void gen_nanbox_s(TCGv_i64 out, TCGv_i64 in) +{ + tcg_gen_ori_i64(out, in, MAKE_64BIT_MASK(32, 32)); +} + +/* + * A narrow n-bit operation, where n < FLEN, checks that input operands + * are correctly Nan-boxed, i.e., all upper FLEN - n bits are 1. + * If so, the least-significant bits of the input are used, otherwise the + * input value is treated as an n-bit canonical NaN (v2.2 section 9.2). + * + * Here, the result is always nan-boxed, even the canonical nan. + */ +static void gen_check_nanbox_s(TCGv_i64 out, TCGv_i64 in) +{ + TCGv_i64 t_max = tcg_const_i64(0xffffffff00000000ull); + TCGv_i64 t_nan = tcg_const_i64(0xffffffff7fc00000ull); + + tcg_gen_movcond_i64(TCG_COND_GEU, out, in, t_max, in, t_nan); + tcg_temp_free_i64(t_max); + tcg_temp_free_i64(t_nan); +} + static void generate_exception(DisasContext *ctx, int excp) { tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next); diff --git a/target/s390x/meson.build b/target/s390x/meson.build index d2a3315903..c42eadb7d2 100644 --- a/target/s390x/meson.build +++ b/target/s390x/meson.build @@ -21,7 +21,7 @@ s390x_ss.add(when: 'CONFIG_TCG', if_true: files( 'vec_helper.c', 'vec_int_helper.c', 'vec_string_helper.c', -), if_false: 'tcg-stub.c') +), if_false: files('tcg-stub.c')) s390x_ss.add(when: 'CONFIG_KVM', if_true: files('kvm.c'), if_false: files('kvm-stub.c')) diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc index 3bef3789b3..393c4b30e0 100644 --- a/tcg/ppc/tcg-target.c.inc +++ b/tcg/ppc/tcg-target.c.inc @@ -564,6 +564,7 @@ static int tcg_target_const_match(tcg_target_long val, TCGType type, #define VMULOUH VX4(72) #define VMULOUW VX4(136) /* v2.07 */ #define VMULUWM VX4(137) /* v2.07 */ +#define VMULLD VX4(457) /* v3.10 */ #define VMSUMUHM VX4(38) #define VMRGHB VX4(12) @@ -3022,6 +3023,8 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, unsigned vece) return -1; case MO_32: return have_isa_2_07 ? 1 : -1; + case MO_64: + return have_isa_3_10; } return 0; case INDEX_op_bitsel_vec: @@ -3158,6 +3161,7 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, static const uint32_t add_op[4] = { VADDUBM, VADDUHM, VADDUWM, VADDUDM }, sub_op[4] = { VSUBUBM, VSUBUHM, VSUBUWM, VSUBUDM }, + mul_op[4] = { 0, 0, VMULUWM, VMULLD }, neg_op[4] = { 0, 0, VNEGW, VNEGD }, eq_op[4] = { VCMPEQUB, VCMPEQUH, VCMPEQUW, VCMPEQUD }, ne_op[4] = { VCMPNEB, VCMPNEH, VCMPNEW, 0 }, @@ -3208,8 +3212,7 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, a1 = 0; break; case INDEX_op_mul_vec: - tcg_debug_assert(vece == MO_32 && have_isa_2_07); - insn = VMULUWM; + insn = mul_op[vece]; break; case INDEX_op_ssadd_vec: insn = ssadd_op[vece]; @@ -3729,6 +3732,11 @@ static void tcg_target_init(TCGContext *s) have_isa = tcg_isa_3_00; } #endif +#ifdef PPC_FEATURE2_ARCH_3_10 + if (hwcap2 & PPC_FEATURE2_ARCH_3_10) { + have_isa = tcg_isa_3_10; + } +#endif #ifdef PPC_FEATURE2_HAS_ISEL /* Prefer explicit instruction from the kernel. */ diff --git a/tcg/ppc/tcg-target.h b/tcg/ppc/tcg-target.h index be5b2901c3..aee38157a2 100644 --- a/tcg/ppc/tcg-target.h +++ b/tcg/ppc/tcg-target.h @@ -63,6 +63,7 @@ typedef enum { tcg_isa_2_06, tcg_isa_2_07, tcg_isa_3_00, + tcg_isa_3_10, } TCGPowerISA; extern TCGPowerISA have_isa; @@ -72,6 +73,7 @@ extern bool have_vsx; #define have_isa_2_06 (have_isa >= tcg_isa_2_06) #define have_isa_2_07 (have_isa >= tcg_isa_2_07) #define have_isa_3_00 (have_isa >= tcg_isa_3_00) +#define have_isa_3_10 (have_isa >= tcg_isa_3_10) /* optional instructions automatically implemented */ #define TCG_TARGET_HAS_ext8u_i32 0 /* andi */ diff --git a/tests/qemu-iotests/300 b/tests/qemu-iotests/300 new file mode 100755 index 0000000000..5b75121b84 --- /dev/null +++ b/tests/qemu-iotests/300 @@ -0,0 +1,593 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2020 Red Hat, Inc. +# +# Tests for dirty bitmaps migration with node aliases +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +import os +import random +import re +from typing import Dict, List, Optional, Union +import iotests +import qemu + +BlockBitmapMapping = List[Dict[str, Union[str, List[Dict[str, str]]]]] + +assert iotests.sock_dir is not None +mig_sock = os.path.join(iotests.sock_dir, 'mig_sock') + + +class TestDirtyBitmapMigration(iotests.QMPTestCase): + src_node_name: str = '' + dst_node_name: str = '' + src_bmap_name: str = '' + dst_bmap_name: str = '' + + def setUp(self) -> None: + self.vm_a = iotests.VM(path_suffix='-a') + self.vm_a.add_blockdev(f'node-name={self.src_node_name},' + 'driver=null-co') + self.vm_a.launch() + + self.vm_b = iotests.VM(path_suffix='-b') + self.vm_b.add_blockdev(f'node-name={self.dst_node_name},' + 'driver=null-co') + self.vm_b.add_incoming(f'unix:{mig_sock}') + self.vm_b.launch() + + result = self.vm_a.qmp('block-dirty-bitmap-add', + node=self.src_node_name, + name=self.src_bmap_name) + self.assert_qmp(result, 'return', {}) + + # Dirty some random megabytes + for _ in range(9): + mb_ofs = random.randrange(1024) + self.vm_a.hmp_qemu_io(self.src_node_name, f'discard {mb_ofs}M 1M') + + result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256', + node=self.src_node_name, + name=self.src_bmap_name) + self.bitmap_hash_reference = result['return']['sha256'] + + caps = [{'capability': name, 'state': True} + for name in ('dirty-bitmaps', 'events')] + + for vm in (self.vm_a, self.vm_b): + result = vm.qmp('migrate-set-capabilities', capabilities=caps) + self.assert_qmp(result, 'return', {}) + + def tearDown(self) -> None: + self.vm_a.shutdown() + self.vm_b.shutdown() + try: + os.remove(mig_sock) + except OSError: + pass + + def check_bitmap(self, bitmap_name_valid: bool) -> None: + result = self.vm_b.qmp('x-debug-block-dirty-bitmap-sha256', + node=self.dst_node_name, + name=self.dst_bmap_name) + if bitmap_name_valid: + self.assert_qmp(result, 'return/sha256', + self.bitmap_hash_reference) + else: + self.assert_qmp(result, 'error/desc', + f"Dirty bitmap '{self.dst_bmap_name}' not found") + + def migrate(self, bitmap_name_valid: bool = True, + migration_success: bool = True) -> None: + result = self.vm_a.qmp('migrate', uri=f'unix:{mig_sock}') + self.assert_qmp(result, 'return', {}) + + with iotests.Timeout(5, 'Timeout waiting for migration to complete'): + self.assertEqual(self.vm_a.wait_migration('postmigrate'), + migration_success) + self.assertEqual(self.vm_b.wait_migration('running'), + migration_success) + + if migration_success: + self.check_bitmap(bitmap_name_valid) + + def verify_dest_error(self, msg: Optional[str]) -> None: + """ + Check whether the given error message is present in vm_b's log. + (vm_b is shut down to do so.) + If @msg is None, check that there has not been any error. + """ + self.vm_b.shutdown() + if msg is None: + self.assertNotIn('qemu-system-', self.vm_b.get_log()) + else: + self.assertIn(msg, self.vm_b.get_log()) + + @staticmethod + def mapping(node_name: str, node_alias: str, + bitmap_name: str, bitmap_alias: str) -> BlockBitmapMapping: + return [{ + 'node-name': node_name, + 'alias': node_alias, + 'bitmaps': [{ + 'name': bitmap_name, + 'alias': bitmap_alias + }] + }] + + def set_mapping(self, vm: iotests.VM, mapping: BlockBitmapMapping, + error: Optional[str] = None) -> None: + """ + Invoke migrate-set-parameters on @vm to set the given @mapping. + Check for success if @error is None, or verify the error message + if it is not. + On success, verify that "info migrate_parameters" on HMP returns + our mapping. (Just to check its formatting code.) + """ + result = vm.qmp('migrate-set-parameters', + block_bitmap_mapping=mapping) + + if error is None: + self.assert_qmp(result, 'return', {}) + + result = vm.qmp('human-monitor-command', + command_line='info migrate_parameters') + + m = re.search(r'^block-bitmap-mapping:\r?(\n .*)*\n', + result['return'], flags=re.MULTILINE) + hmp_mapping = m.group(0).replace('\r', '') if m else None + + self.assertEqual(hmp_mapping, self.to_hmp_mapping(mapping)) + else: + self.assert_qmp(result, 'error/desc', error) + + @staticmethod + def to_hmp_mapping(mapping: BlockBitmapMapping) -> str: + result = 'block-bitmap-mapping:\n' + + for node in mapping: + result += f" '{node['node-name']}' -> '{node['alias']}'\n" + + assert isinstance(node['bitmaps'], list) + for bitmap in node['bitmaps']: + result += f" '{bitmap['name']}' -> '{bitmap['alias']}'\n" + + return result + + +class TestAliasMigration(TestDirtyBitmapMigration): + src_node_name = 'node0' + dst_node_name = 'node0' + src_bmap_name = 'bmap0' + dst_bmap_name = 'bmap0' + + def test_migration_without_alias(self) -> None: + self.migrate(self.src_node_name == self.dst_node_name and + self.src_bmap_name == self.dst_bmap_name) + + # Check for error message on the destination + if self.src_node_name != self.dst_node_name: + self.verify_dest_error(f"Cannot find " + f"device={self.src_node_name} nor " + f"node_name={self.src_node_name}") + else: + self.verify_dest_error(None) + + def test_alias_on_src_migration(self) -> None: + mapping = self.mapping(self.src_node_name, self.dst_node_name, + self.src_bmap_name, self.dst_bmap_name) + + self.set_mapping(self.vm_a, mapping) + self.migrate() + self.verify_dest_error(None) + + def test_alias_on_dst_migration(self) -> None: + mapping = self.mapping(self.dst_node_name, self.src_node_name, + self.dst_bmap_name, self.src_bmap_name) + + self.set_mapping(self.vm_b, mapping) + self.migrate() + self.verify_dest_error(None) + + def test_alias_on_both_migration(self) -> None: + src_map = self.mapping(self.src_node_name, 'node-alias', + self.src_bmap_name, 'bmap-alias') + + dst_map = self.mapping(self.dst_node_name, 'node-alias', + self.dst_bmap_name, 'bmap-alias') + + self.set_mapping(self.vm_a, src_map) + self.set_mapping(self.vm_b, dst_map) + self.migrate() + self.verify_dest_error(None) + + +class TestNodeAliasMigration(TestAliasMigration): + src_node_name = 'node-src' + dst_node_name = 'node-dst' + + +class TestBitmapAliasMigration(TestAliasMigration): + src_bmap_name = 'bmap-src' + dst_bmap_name = 'bmap-dst' + + +class TestFullAliasMigration(TestAliasMigration): + src_node_name = 'node-src' + dst_node_name = 'node-dst' + src_bmap_name = 'bmap-src' + dst_bmap_name = 'bmap-dst' + + +class TestLongBitmapNames(TestAliasMigration): + # Giving long bitmap names is OK, as long as there is a short alias for + # migration + src_bmap_name = 'a' * 512 + dst_bmap_name = 'b' * 512 + + # Skip all tests that do not use the intermediate alias + def test_migration_without_alias(self) -> None: + pass + + def test_alias_on_src_migration(self) -> None: + pass + + def test_alias_on_dst_migration(self) -> None: + pass + + +class TestBlockBitmapMappingErrors(TestDirtyBitmapMigration): + src_node_name = 'node0' + dst_node_name = 'node0' + src_bmap_name = 'bmap0' + dst_bmap_name = 'bmap0' + + """ + Note that mapping nodes or bitmaps that do not exist is not an error. + """ + + def test_non_injective_node_mapping(self) -> None: + mapping: BlockBitmapMapping = [ + { + 'node-name': 'node0', + 'alias': 'common-alias', + 'bitmaps': [{ + 'name': 'bmap0', + 'alias': 'bmap-alias0' + }] + }, + { + 'node-name': 'node1', + 'alias': 'common-alias', + 'bitmaps': [{ + 'name': 'bmap1', + 'alias': 'bmap-alias1' + }] + } + ] + + self.set_mapping(self.vm_a, mapping, + "Invalid mapping given for block-bitmap-mapping: " + "The node alias 'common-alias' is used twice") + + def test_non_injective_bitmap_mapping(self) -> None: + mapping: BlockBitmapMapping = [{ + 'node-name': 'node0', + 'alias': 'node-alias0', + 'bitmaps': [ + { + 'name': 'bmap0', + 'alias': 'common-alias' + }, + { + 'name': 'bmap1', + 'alias': 'common-alias' + } + ] + }] + + self.set_mapping(self.vm_a, mapping, + "Invalid mapping given for block-bitmap-mapping: " + "The bitmap alias 'node-alias0'/'common-alias' is " + "used twice") + + def test_ambiguous_node_mapping(self) -> None: + mapping: BlockBitmapMapping = [ + { + 'node-name': 'node0', + 'alias': 'node-alias0', + 'bitmaps': [{ + 'name': 'bmap0', + 'alias': 'bmap-alias0' + }] + }, + { + 'node-name': 'node0', + 'alias': 'node-alias1', + 'bitmaps': [{ + 'name': 'bmap0', + 'alias': 'bmap-alias0' + }] + } + ] + + self.set_mapping(self.vm_a, mapping, + "Invalid mapping given for block-bitmap-mapping: " + "The node name 'node0' is mapped twice") + + def test_ambiguous_bitmap_mapping(self) -> None: + mapping: BlockBitmapMapping = [{ + 'node-name': 'node0', + 'alias': 'node-alias0', + 'bitmaps': [ + { + 'name': 'bmap0', + 'alias': 'bmap-alias0' + }, + { + 'name': 'bmap0', + 'alias': 'bmap-alias1' + } + ] + }] + + self.set_mapping(self.vm_a, mapping, + "Invalid mapping given for block-bitmap-mapping: " + "The bitmap 'node0'/'bmap0' is mapped twice") + + def test_migratee_node_is_not_mapped_on_src(self) -> None: + self.set_mapping(self.vm_a, []) + # Should just ignore all bitmaps on unmapped nodes + self.migrate(False) + self.verify_dest_error(None) + + def test_migratee_node_is_not_mapped_on_dst(self) -> None: + self.set_mapping(self.vm_b, []) + self.migrate(False) + self.verify_dest_error(f"Unknown node alias '{self.src_node_name}'") + + def test_migratee_bitmap_is_not_mapped_on_src(self) -> None: + mapping: BlockBitmapMapping = [{ + 'node-name': self.src_node_name, + 'alias': self.dst_node_name, + 'bitmaps': [] + }] + + self.set_mapping(self.vm_a, mapping) + # Should just ignore all unmapped bitmaps + self.migrate(False) + self.verify_dest_error(None) + + def test_migratee_bitmap_is_not_mapped_on_dst(self) -> None: + mapping: BlockBitmapMapping = [{ + 'node-name': self.dst_node_name, + 'alias': self.src_node_name, + 'bitmaps': [] + }] + + self.set_mapping(self.vm_b, mapping) + self.migrate(False) + self.verify_dest_error(f"Unknown bitmap alias " + f"'{self.src_bmap_name}' " + f"on node '{self.dst_node_name}' " + f"(alias '{self.src_node_name}')") + + def test_unused_mapping_on_dst(self) -> None: + # Let the source not send any bitmaps + self.set_mapping(self.vm_a, []) + + # Establish some mapping on the destination + self.set_mapping(self.vm_b, []) + + # The fact that there is a mapping on B without any bitmaps + # being received should be fine, not fatal + self.migrate(False) + self.verify_dest_error(None) + + def test_non_wellformed_node_alias(self) -> None: + alias = '123-foo' + + mapping: BlockBitmapMapping = [{ + 'node-name': self.src_node_name, + 'alias': alias, + 'bitmaps': [] + }] + + self.set_mapping(self.vm_a, mapping, + f"Invalid mapping given for block-bitmap-mapping: " + f"The node alias '{alias}' is not well-formed") + + def test_node_alias_too_long(self) -> None: + alias = 'a' * 256 + + mapping: BlockBitmapMapping = [{ + 'node-name': self.src_node_name, + 'alias': alias, + 'bitmaps': [] + }] + + self.set_mapping(self.vm_a, mapping, + f"Invalid mapping given for block-bitmap-mapping: " + f"The node alias '{alias}' is longer than 255 bytes") + + def test_bitmap_alias_too_long(self) -> None: + alias = 'a' * 256 + + mapping = self.mapping(self.src_node_name, self.dst_node_name, + self.src_bmap_name, alias) + + self.set_mapping(self.vm_a, mapping, + f"Invalid mapping given for block-bitmap-mapping: " + f"The bitmap alias '{alias}' is longer than 255 " + f"bytes") + + def test_bitmap_name_too_long(self) -> None: + name = 'a' * 256 + + result = self.vm_a.qmp('block-dirty-bitmap-add', + node=self.src_node_name, + name=name) + self.assert_qmp(result, 'return', {}) + + self.migrate(False, False) + + # Check for the error in the source's log + self.vm_a.shutdown() + self.assertIn(f"Cannot migrate bitmap '{name}' on node " + f"'{self.src_node_name}': Name is longer than 255 bytes", + self.vm_a.get_log()) + + # Expect abnormal shutdown of the destination VM because of + # the failed migration + try: + self.vm_b.shutdown() + except qemu.machine.AbnormalShutdown: + pass + + def test_aliased_bitmap_name_too_long(self) -> None: + # Longer than the maximum for bitmap names + self.dst_bmap_name = 'a' * 1024 + + mapping = self.mapping(self.dst_node_name, self.src_node_name, + self.dst_bmap_name, self.src_bmap_name) + + # We would have to create this bitmap during migration, and + # that would fail, because the name is too long. Better to + # catch it early. + self.set_mapping(self.vm_b, mapping, + f"Invalid mapping given for block-bitmap-mapping: " + f"The bitmap name '{self.dst_bmap_name}' is longer " + f"than 1023 bytes") + + def test_node_name_too_long(self) -> None: + # Longer than the maximum for node names + self.dst_node_name = 'a' * 32 + + mapping = self.mapping(self.dst_node_name, self.src_node_name, + self.dst_bmap_name, self.src_bmap_name) + + # During migration, this would appear simply as a node that + # cannot be found. Still better to catch impossible node + # names early (similar to test_non_wellformed_node_alias). + self.set_mapping(self.vm_b, mapping, + f"Invalid mapping given for block-bitmap-mapping: " + f"The node name '{self.dst_node_name}' is longer " + f"than 31 bytes") + + +class TestCrossAliasMigration(TestDirtyBitmapMigration): + """ + Swap aliases, both to see that qemu does not get confused, and + that we can migrate multiple things at once. + + So we migrate this: + node-a.bmap-a -> node-b.bmap-b + node-a.bmap-b -> node-b.bmap-a + node-b.bmap-a -> node-a.bmap-b + node-b.bmap-b -> node-a.bmap-a + """ + + src_node_name = 'node-a' + dst_node_name = 'node-b' + src_bmap_name = 'bmap-a' + dst_bmap_name = 'bmap-b' + + def setUp(self) -> None: + TestDirtyBitmapMigration.setUp(self) + + # Now create another block device and let both have two bitmaps each + result = self.vm_a.qmp('blockdev-add', + node_name='node-b', driver='null-co') + self.assert_qmp(result, 'return', {}) + + result = self.vm_b.qmp('blockdev-add', + node_name='node-a', driver='null-co') + self.assert_qmp(result, 'return', {}) + + bmaps_to_add = (('node-a', 'bmap-b'), + ('node-b', 'bmap-a'), + ('node-b', 'bmap-b')) + + for (node, bmap) in bmaps_to_add: + result = self.vm_a.qmp('block-dirty-bitmap-add', + node=node, name=bmap) + self.assert_qmp(result, 'return', {}) + + @staticmethod + def cross_mapping() -> BlockBitmapMapping: + return [ + { + 'node-name': 'node-a', + 'alias': 'node-b', + 'bitmaps': [ + { + 'name': 'bmap-a', + 'alias': 'bmap-b' + }, + { + 'name': 'bmap-b', + 'alias': 'bmap-a' + } + ] + }, + { + 'node-name': 'node-b', + 'alias': 'node-a', + 'bitmaps': [ + { + 'name': 'bmap-b', + 'alias': 'bmap-a' + }, + { + 'name': 'bmap-a', + 'alias': 'bmap-b' + } + ] + } + ] + + def verify_dest_has_all_bitmaps(self) -> None: + bitmaps = self.vm_b.query_bitmaps() + + # Extract and sort bitmap names + for node in bitmaps: + bitmaps[node] = sorted((bmap['name'] for bmap in bitmaps[node])) + + self.assertEqual(bitmaps, + {'node-a': ['bmap-a', 'bmap-b'], + 'node-b': ['bmap-a', 'bmap-b']}) + + def test_alias_on_src(self) -> None: + self.set_mapping(self.vm_a, self.cross_mapping()) + + # Checks that node-a.bmap-a was migrated to node-b.bmap-b, and + # that is enough + self.migrate() + self.verify_dest_has_all_bitmaps() + self.verify_dest_error(None) + + def test_alias_on_dst(self) -> None: + self.set_mapping(self.vm_b, self.cross_mapping()) + + # Checks that node-a.bmap-a was migrated to node-b.bmap-b, and + # that is enough + self.migrate() + self.verify_dest_has_all_bitmaps() + self.verify_dest_error(None) + + +if __name__ == '__main__': + iotests.main(supported_protocols=['file']) diff --git a/tests/qemu-iotests/300.out b/tests/qemu-iotests/300.out new file mode 100644 index 0000000000..cafb8161f7 --- /dev/null +++ b/tests/qemu-iotests/300.out @@ -0,0 +1,5 @@ +..................................... +---------------------------------------------------------------------- +Ran 37 tests + +OK diff --git a/tests/qemu-iotests/303 b/tests/qemu-iotests/303 new file mode 100755 index 0000000000..6c21774483 --- /dev/null +++ b/tests/qemu-iotests/303 @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# +# Test for dumping of qcow2 image metadata +# +# Copyright (c) 2020 Virtuozzo International GmbH +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +import iotests +import subprocess +from iotests import qemu_img_create, qemu_io, file_path, log, filter_qemu_io + +iotests.script_initialize(supported_fmts=['qcow2']) + +disk = file_path('disk') +chunk = 1024 * 1024 + + +def create_bitmap(bitmap_number, disabled): + granularity = 1 << (14 + bitmap_number) + bitmap_name = 'bitmap-' + str(bitmap_number) + args = ['bitmap', '--add', '-g', f'{granularity}', '-f', iotests.imgfmt, + disk, bitmap_name] + if disabled: + args.append('--disable') + + iotests.qemu_img_pipe(*args) + + +def write_to_disk(offset, size): + write = f'write {offset} {size}' + log(qemu_io('-c', write, disk), filters=[filter_qemu_io]) + + +def add_bitmap(num, begin, end, disabled): + log(f'Add bitmap {num}') + create_bitmap(num, disabled) + for i in range(begin, end): + write_to_disk((i) * chunk, chunk) + log('') + + +qemu_img_create('-f', iotests.imgfmt, disk, '10M') + +add_bitmap(1, 0, 6, False) +add_bitmap(2, 6, 8, True) +dump = ['qcow2.py', disk, 'dump-header'] +subprocess.run(dump) +# Dump the metadata in JSON format +dump.append('-j') +subprocess.run(dump) diff --git a/tests/qemu-iotests/303.out b/tests/qemu-iotests/303.out new file mode 100644 index 0000000000..7fa1edef0d --- /dev/null +++ b/tests/qemu-iotests/303.out @@ -0,0 +1,158 @@ +Add bitmap 1 +wrote 1048576/1048576 bytes at offset 0 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +wrote 1048576/1048576 bytes at offset 1048576 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +wrote 1048576/1048576 bytes at offset 2097152 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +wrote 1048576/1048576 bytes at offset 3145728 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +wrote 1048576/1048576 bytes at offset 4194304 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +wrote 1048576/1048576 bytes at offset 5242880 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + + +Add bitmap 2 +wrote 1048576/1048576 bytes at offset 6291456 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +wrote 1048576/1048576 bytes at offset 7340032 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + + +magic 0x514649fb +version 3 +backing_file_offset 0x0 +backing_file_size 0x0 +cluster_bits 16 +size 10485760 +crypt_method 0 +l1_size 1 +l1_table_offset 0x30000 +refcount_table_offset 0x10000 +refcount_table_clusters 1 +nb_snapshots 0 +snapshot_offset 0x0 +incompatible_features [] +compatible_features [] +autoclear_features [0] +refcount_order 4 +header_length 112 + +Header extension: +magic 0x6803f857 (Feature table) +length 336 +data <binary> + +Header extension: +magic 0x23852875 (Bitmaps) +length 24 +nb_bitmaps 2 +reserved32 0 +bitmap_directory_size 0x40 +bitmap_directory_offset 0x9d0000 + +Bitmap name bitmap-1 +bitmap_table_offset 0x9b0000 +bitmap_table_size 1 +flags 0x2 (['auto']) +type 1 +granularity_bits 15 +name_size 8 +extra_data_size 0 +Bitmap table type size offset +0 serialized 65536 10092544 + +Bitmap name bitmap-2 +bitmap_table_offset 0x9c0000 +bitmap_table_size 1 +flags 0x0 ([]) +type 1 +granularity_bits 16 +name_size 8 +extra_data_size 0 +Bitmap table type size offset +0 all-zeroes 0 0 + +{ + "magic": 1363560955, + "version": 3, + "backing_file_offset": 0, + "backing_file_size": 0, + "cluster_bits": 16, + "size": 10485760, + "crypt_method": 0, + "l1_size": 1, + "l1_table_offset": 196608, + "refcount_table_offset": 65536, + "refcount_table_clusters": 1, + "nb_snapshots": 0, + "snapshot_offset": 0, + "incompatible_features": 0, + "compatible_features": 0, + "autoclear_features": 1, + "refcount_order": 4, + "header_length": 112 +} + +[ + { + "name": "Feature table", + "magic": 1745090647, + "length": 336, + "data_str": "<binary>" + }, + { + "name": "Bitmaps", + "magic": 595929205, + "length": 24, + "data": { + "nb_bitmaps": 2, + "reserved32": 0, + "bitmap_directory_size": 64, + "bitmap_directory_offset": 10289152, + "bitmap_directory": [ + { + "name": "bitmap-1", + "bitmap_table_offset": 10158080, + "bitmap_table_size": 1, + "flags": 2, + "type": 1, + "granularity_bits": 15, + "name_size": 8, + "extra_data_size": 0, + "bitmap_table": [ + { + "type": "serialized", + "offset": 10092544, + "reserved": 0 + } + ] + }, + { + "name": "bitmap-2", + "bitmap_table_offset": 10223616, + "bitmap_table_size": 1, + "flags": 0, + "type": 1, + "granularity_bits": 16, + "name_size": 8, + "extra_data_size": 0, + "bitmap_table": [ + { + "type": "all-zeroes", + "offset": 0, + "reserved": 0 + } + ] + } + ] + } + } +] diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 7f76066640..a53ea7f78b 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -307,6 +307,8 @@ 296 rw 297 meta 299 auto quick +300 migration 301 backing quick 302 quick +303 rw quick 304 rw quick diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py index 717b5b652c..e197c73ca5 100644 --- a/tests/qemu-iotests/iotests.py +++ b/tests/qemu-iotests/iotests.py @@ -729,16 +729,22 @@ class VM(qtest.QEMUQtestMachine): } ])) - def wait_migration(self, expect_runstate): + def wait_migration(self, expect_runstate: Optional[str]) -> bool: while True: event = self.event_wait('MIGRATION') log(event, filters=[filter_qmp_event]) - if event['data']['status'] == 'completed': + if event['data']['status'] in ('completed', 'failed'): break - # The event may occur in finish-migrate, so wait for the expected - # post-migration runstate - while self.qmp('query-status')['return']['status'] != expect_runstate: - pass + + if event['data']['status'] == 'completed': + # The event may occur in finish-migrate, so wait for the expected + # post-migration runstate + runstate = None + while runstate != expect_runstate: + runstate = self.qmp('query-status')['return']['status'] + return True + else: + return False def node_info(self, node_name): nodes = self.qmp('query-named-block-nodes') diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py index 0910e6ac07..77ca59cc66 100755 --- a/tests/qemu-iotests/qcow2.py +++ b/tests/qemu-iotests/qcow2.py @@ -26,16 +26,19 @@ from qcow2_format import ( ) +is_json = False + + def cmd_dump_header(fd): h = QcowHeader(fd) - h.dump() + h.dump(is_json) print() - h.dump_extensions() + h.dump_extensions(is_json) def cmd_dump_header_exts(fd): h = QcowHeader(fd) - h.dump_extensions() + h.dump_extensions(is_json) def cmd_set_header(fd, name, value): @@ -151,11 +154,14 @@ def main(filename, cmd, args): def usage(): - print("Usage: %s <file> <cmd> [<arg>, ...]" % sys.argv[0]) + print("Usage: %s <file> <cmd> [<arg>, ...] [<key>, ...]" % sys.argv[0]) print("") print("Supported commands:") for name, handler, num_args, desc in cmds: print(" %-20s - %s" % (name, desc)) + print("") + print("Supported keys:") + print(" %-20s - %s" % ('-j', 'Dump in JSON format')) if __name__ == '__main__': @@ -163,4 +169,8 @@ if __name__ == '__main__': usage() sys.exit(1) + is_json = '-j' in sys.argv + if is_json: + sys.argv.remove('-j') + main(sys.argv[1], sys.argv[2], sys.argv[3:]) diff --git a/tests/qemu-iotests/qcow2_format.py b/tests/qemu-iotests/qcow2_format.py index cc432e7ae0..8adc9959e1 100644 --- a/tests/qemu-iotests/qcow2_format.py +++ b/tests/qemu-iotests/qcow2_format.py @@ -19,6 +19,15 @@ import struct import string +import json + + +class ComplexEncoder(json.JSONEncoder): + def default(self, obj): + if hasattr(obj, 'to_json'): + return obj.to_json() + else: + return json.JSONEncoder.default(self, obj) class Qcow2Field: @@ -40,6 +49,22 @@ class Flags64(Qcow2Field): return str(bits) +class BitmapFlags(Qcow2Field): + + flags = { + 0x1: 'in-use', + 0x2: 'auto' + } + + def __str__(self): + bits = [] + for bit in range(64): + flag = self.value & (1 << bit) + if flag: + bits.append(self.flags.get(flag, f'bit-{bit}')) + return f'{self.value:#x} ({bits})' + + class Enum(Qcow2Field): def __str__(self): @@ -93,7 +118,11 @@ class Qcow2Struct(metaclass=Qcow2StructMeta): self.__dict__ = dict((field[2], values[i]) for i, field in enumerate(self.fields)) - def dump(self): + def dump(self, is_json=False): + if is_json: + print(json.dumps(self.to_json(), indent=4, cls=ComplexEncoder)) + return + for f in self.fields: value = self.__dict__[f[2]] if isinstance(f[1], str): @@ -103,6 +132,9 @@ class Qcow2Struct(metaclass=Qcow2StructMeta): print('{:<25} {}'.format(f[2], value_str)) + def to_json(self): + return dict((f[2], self.__dict__[f[2]]) for f in self.fields) + class Qcow2BitmapExt(Qcow2Struct): @@ -113,6 +145,131 @@ class Qcow2BitmapExt(Qcow2Struct): ('u64', '{:#x}', 'bitmap_directory_offset') ) + def __init__(self, fd, cluster_size): + super().__init__(fd=fd) + tail = struct.calcsize(self.fmt) % 8 + if tail: + fd.seek(8 - tail, 1) + position = fd.tell() + self.cluster_size = cluster_size + self.read_bitmap_directory(fd) + fd.seek(position) + + def read_bitmap_directory(self, fd): + fd.seek(self.bitmap_directory_offset) + self.bitmap_directory = \ + [Qcow2BitmapDirEntry(fd, cluster_size=self.cluster_size) + for _ in range(self.nb_bitmaps)] + + def dump(self): + super().dump() + for entry in self.bitmap_directory: + print() + entry.dump() + + def to_json(self): + fields_dict = super().to_json() + fields_dict['bitmap_directory'] = self.bitmap_directory + return fields_dict + + +class Qcow2BitmapDirEntry(Qcow2Struct): + + fields = ( + ('u64', '{:#x}', 'bitmap_table_offset'), + ('u32', '{}', 'bitmap_table_size'), + ('u32', BitmapFlags, 'flags'), + ('u8', '{}', 'type'), + ('u8', '{}', 'granularity_bits'), + ('u16', '{}', 'name_size'), + ('u32', '{}', 'extra_data_size') + ) + + def __init__(self, fd, cluster_size): + super().__init__(fd=fd) + self.cluster_size = cluster_size + # Seek relative to the current position in the file + fd.seek(self.extra_data_size, 1) + bitmap_name = fd.read(self.name_size) + self.name = bitmap_name.decode('ascii') + # Move position to the end of the entry in the directory + entry_raw_size = self.bitmap_dir_entry_raw_size() + padding = ((entry_raw_size + 7) & ~7) - entry_raw_size + fd.seek(padding, 1) + self.bitmap_table = Qcow2BitmapTable(fd=fd, + offset=self.bitmap_table_offset, + nb_entries=self.bitmap_table_size, + cluster_size=self.cluster_size) + + def bitmap_dir_entry_raw_size(self): + return struct.calcsize(self.fmt) + self.name_size + \ + self.extra_data_size + + def dump(self): + print(f'{"Bitmap name":<25} {self.name}') + super(Qcow2BitmapDirEntry, self).dump() + self.bitmap_table.dump() + + def to_json(self): + # Put the name ahead of the dict + return { + 'name': self.name, + **super().to_json(), + 'bitmap_table': self.bitmap_table + } + + +class Qcow2BitmapTableEntry(Qcow2Struct): + + fields = ( + ('u64', '{}', 'entry'), + ) + + BME_TABLE_ENTRY_RESERVED_MASK = 0xff000000000001fe + BME_TABLE_ENTRY_OFFSET_MASK = 0x00fffffffffffe00 + BME_TABLE_ENTRY_FLAG_ALL_ONES = 1 + + def __init__(self, fd): + super().__init__(fd=fd) + self.reserved = self.entry & self.BME_TABLE_ENTRY_RESERVED_MASK + self.offset = self.entry & self.BME_TABLE_ENTRY_OFFSET_MASK + if self.offset: + if self.entry & self.BME_TABLE_ENTRY_FLAG_ALL_ONES: + self.type = 'invalid' + else: + self.type = 'serialized' + elif self.entry & self.BME_TABLE_ENTRY_FLAG_ALL_ONES: + self.type = 'all-ones' + else: + self.type = 'all-zeroes' + + def to_json(self): + return {'type': self.type, 'offset': self.offset, + 'reserved': self.reserved} + + +class Qcow2BitmapTable: + + def __init__(self, fd, offset, nb_entries, cluster_size): + self.cluster_size = cluster_size + position = fd.tell() + fd.seek(offset) + self.entries = [Qcow2BitmapTableEntry(fd) for _ in range(nb_entries)] + fd.seek(position) + + def dump(self): + bitmap_table = enumerate(self.entries) + print(f'{"Bitmap table":<14} {"type":<15} {"size":<12} {"offset"}') + for i, entry in bitmap_table: + if entry.type == 'serialized': + size = self.cluster_size + else: + size = 0 + print(f'{i:<14} {entry.type:<15} {size:<12} {entry.offset}') + + def to_json(self): + return self.entries + QCOW2_EXT_MAGIC_BITMAPS = 0x23852875 @@ -128,6 +285,9 @@ class QcowHeaderExtension(Qcow2Struct): 0x44415441: 'Data file' } + def to_json(self): + return self.mapping.get(self.value, "<unknown>") + fields = ( ('u32', Magic, 'magic'), ('u32', '{}', 'length') @@ -135,11 +295,13 @@ class QcowHeaderExtension(Qcow2Struct): # then padding to next multiply of 8 ) - def __init__(self, magic=None, length=None, data=None, fd=None): + def __init__(self, magic=None, length=None, data=None, fd=None, + cluster_size=None): """ Support both loading from fd and creation from user data. For fd-based creation current position in a file will be used to read the data. + The cluster_size value may be obtained by dependent structures. This should be somehow refactored and functionality should be moved to superclass (to allow creation of any qcow2 struct), but then, fields @@ -161,28 +323,43 @@ class QcowHeaderExtension(Qcow2Struct): else: assert all(v is None for v in (magic, length, data)) super().__init__(fd=fd) - padded = (self.length + 7) & ~7 - self.data = fd.read(padded) - assert self.data is not None + if self.magic == QCOW2_EXT_MAGIC_BITMAPS: + self.obj = Qcow2BitmapExt(fd=fd, cluster_size=cluster_size) + self.data = None + else: + padded = (self.length + 7) & ~7 + self.data = fd.read(padded) + assert self.data is not None + self.obj = None + + if self.data is not None: + data_str = self.data[:self.length] + if all(c in string.printable.encode( + 'ascii') for c in data_str): + data_str = f"'{ data_str.decode('ascii') }'" + else: + data_str = '<binary>' + self.data_str = data_str - if self.magic == QCOW2_EXT_MAGIC_BITMAPS: - self.obj = Qcow2BitmapExt(data=self.data) - else: - self.obj = None def dump(self): super().dump() if self.obj is None: - data = self.data[:self.length] - if all(c in string.printable.encode('ascii') for c in data): - data = f"'{ data.decode('ascii') }'" - else: - data = '<binary>' - print(f'{"data":<25} {data}') + print(f'{"data":<25} {self.data_str}') else: self.obj.dump() + def to_json(self): + # Put the name ahead of the dict + res = {'name': self.Magic(self.magic), **super().to_json()} + if self.obj is not None: + res['data'] = self.obj + else: + res['data_str'] = self.data_str + + return res + @classmethod def create(cls, magic, data): return QcowHeaderExtension(magic, len(data), data) @@ -246,7 +423,7 @@ class QcowHeader(Qcow2Struct): end = self.cluster_size while fd.tell() < end: - ext = QcowHeaderExtension(fd=fd) + ext = QcowHeaderExtension(fd=fd, cluster_size=self.cluster_size) if ext.magic == 0: break else: @@ -280,7 +457,11 @@ class QcowHeader(Qcow2Struct): buf = buf[0:header_bytes-1] fd.write(buf) - def dump_extensions(self): + def dump_extensions(self, is_json=False): + if is_json: + print(json.dumps(self.extensions, indent=4, cls=ComplexEncoder)) + return + for ex in self.extensions: print('Header extension:') ex.dump() diff --git a/tests/qtest/virtio-9p-test.c b/tests/qtest/virtio-9p-test.c index 2167322985..de30b717b6 100644 --- a/tests/qtest/virtio-9p-test.c +++ b/tests/qtest/virtio-9p-test.c @@ -578,6 +578,7 @@ static bool fs_dirents_contain_name(struct V9fsDirent *e, const char* name) return false; } +/* basic readdir test where reply fits into a single response message */ static void fs_readdir(void *obj, void *data, QGuestAllocator *t_alloc) { QVirtio9P *v9p = obj; @@ -631,6 +632,89 @@ static void fs_readdir(void *obj, void *data, QGuestAllocator *t_alloc) g_free(wnames[0]); } +/* readdir test where overall request is split over several messages */ +static void fs_readdir_split(void *obj, void *data, QGuestAllocator *t_alloc, + uint32_t count) +{ + QVirtio9P *v9p = obj; + alloc = t_alloc; + char *const wnames[] = { g_strdup(QTEST_V9FS_SYNTH_READDIR_DIR) }; + uint16_t nqid; + v9fs_qid qid; + uint32_t nentries, npartialentries; + struct V9fsDirent *entries, *tail, *partialentries; + P9Req *req; + int fid; + uint64_t offset; + + fs_attach(v9p, NULL, t_alloc); + + fid = 1; + offset = 0; + entries = NULL; + nentries = 0; + tail = NULL; + + req = v9fs_twalk(v9p, 0, fid, 1, wnames, 0); + v9fs_req_wait_for_reply(req, NULL); + v9fs_rwalk(req, &nqid, NULL); + g_assert_cmpint(nqid, ==, 1); + + req = v9fs_tlopen(v9p, fid, O_DIRECTORY, 0); + v9fs_req_wait_for_reply(req, NULL); + v9fs_rlopen(req, &qid, NULL); + + /* + * send as many Treaddir requests as required to get all directory + * entries + */ + while (true) { + npartialentries = 0; + partialentries = NULL; + + req = v9fs_treaddir(v9p, fid, offset, count, 0); + v9fs_req_wait_for_reply(req, NULL); + v9fs_rreaddir(req, &count, &npartialentries, &partialentries); + if (npartialentries > 0 && partialentries) { + if (!entries) { + entries = partialentries; + nentries = npartialentries; + tail = partialentries; + } else { + tail->next = partialentries; + nentries += npartialentries; + } + while (tail->next) { + tail = tail->next; + } + offset = tail->offset; + } else { + break; + } + } + + g_assert_cmpint( + nentries, ==, + QTEST_V9FS_SYNTH_READDIR_NFILES + 2 /* "." and ".." */ + ); + + /* + * Check all file names exist in returned entries, ignore their order + * though. + */ + g_assert_cmpint(fs_dirents_contain_name(entries, "."), ==, true); + g_assert_cmpint(fs_dirents_contain_name(entries, ".."), ==, true); + for (int i = 0; i < QTEST_V9FS_SYNTH_READDIR_NFILES; ++i) { + char *name = g_strdup_printf(QTEST_V9FS_SYNTH_READDIR_FILE, i); + g_assert_cmpint(fs_dirents_contain_name(entries, name), ==, true); + g_free(name); + } + + v9fs_free_dirents(entries); + + g_free(wnames[0]); +} + static void fs_walk_no_slash(void *obj, void *data, QGuestAllocator *t_alloc) { QVirtio9P *v9p = obj; @@ -793,6 +877,24 @@ static void fs_flush_ignored(void *obj, void *data, QGuestAllocator *t_alloc) g_free(wnames[0]); } +static void fs_readdir_split_128(void *obj, void *data, + QGuestAllocator *t_alloc) +{ + fs_readdir_split(obj, data, t_alloc, 128); +} + +static void fs_readdir_split_256(void *obj, void *data, + QGuestAllocator *t_alloc) +{ + fs_readdir_split(obj, data, t_alloc, 256); +} + +static void fs_readdir_split_512(void *obj, void *data, + QGuestAllocator *t_alloc) +{ + fs_readdir_split(obj, data, t_alloc, 512); +} + static void register_virtio_9p_test(void) { qos_add_test("config", "virtio-9p", pci_config, NULL); @@ -810,6 +912,12 @@ static void register_virtio_9p_test(void) qos_add_test("fs/flush/ignored", "virtio-9p", fs_flush_ignored, NULL); qos_add_test("fs/readdir/basic", "virtio-9p", fs_readdir, NULL); + qos_add_test("fs/readdir/split_512", "virtio-9p", + fs_readdir_split_512, NULL); + qos_add_test("fs/readdir/split_256", "virtio-9p", + fs_readdir_split_256, NULL); + qos_add_test("fs/readdir/split_128", "virtio-9p", + fs_readdir_split_128, NULL); } libqos_init(register_virtio_9p_test); diff --git a/ui/meson.build b/ui/meson.build index 6f74d30ea0..81fd393432 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -95,7 +95,7 @@ keymaps = [ ['osx', 'qcode'], ] -if have_system +if have_system or 'CONFIG_XKBCOMMON' in config_host foreach e : keymaps output = 'input-keymap-@0@-to-@1@.c.inc'.format(e[0], e[1]) genh += custom_target(output, diff --git a/util/meson.build b/util/meson.build index 23b8ad459b..e6b207a99e 100644 --- a/util/meson.build +++ b/util/meson.build @@ -4,7 +4,7 @@ util_ss.add(when: 'CONFIG_ATOMIC64', if_false: files('atomic64.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('aio-posix.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('fdmon-poll.c')) util_ss.add(when: 'CONFIG_EPOLL_CREATE1', if_true: files('fdmon-epoll.c')) -util_ss.add(when: 'CONFIG_LINUX_IO_URING', if_true: files('fdmon-io_uring.c')) +util_ss.add(when: ['CONFIG_LINUX_IO_URING', linux_io_uring], if_true: files('fdmon-io_uring.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('compatfd.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('event_notifier-posix.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('mmap-alloc.c')) |