Compare commits
50 Commits
v8.0.0-rc1
...
base-bisec
Author | SHA1 | Date | |
---|---|---|---|
|
e3debd5e7d | ||
|
d82e2e7635 | ||
|
a219645ce3 | ||
|
670d8c6ebf | ||
|
8635a3a153 | ||
|
da80f11efe | ||
|
8f03c08506 | ||
|
7b1bde9560 | ||
|
07e4804fcd | ||
|
f79283fdb8 | ||
|
d091b5b442 | ||
|
0030b244a7 | ||
|
f75e4f2234 | ||
|
0fcd574b02 | ||
|
60ca584b8a | ||
|
e35b9a2e81 | ||
|
6205a70b92 | ||
|
3556c1034d | ||
|
bfa2e7aacb | ||
|
111fc86241 | ||
|
8bc9e104b7 | ||
|
b89b72de16 | ||
|
e00c621bba | ||
|
0d01a2f8a4 | ||
|
51ab5f8bd7 | ||
|
5ba7db0938 | ||
|
cb845eaa88 | ||
|
6e5792a1f6 | ||
|
663755b022 | ||
|
a9e21786da | ||
|
0c8076b024 | ||
|
85b983485b | ||
|
3b67f43cf3 | ||
|
507271d468 | ||
|
aa4cf6eb82 | ||
|
720ace24ae | ||
|
cc37d98bfb | ||
|
e8956e0c6c | ||
|
10588491c1 | ||
|
e04660afef | ||
|
fb3af2d182 | ||
|
6f6ca067d2 | ||
|
32ba75adc0 | ||
|
dbe9a9cdbb | ||
|
82790dfefc | ||
|
6df250e181 | ||
|
55154c5785 | ||
|
9f95111474 | ||
|
80232dba16 | ||
|
136b6085f1 |
111
.cirrus.yml
111
.cirrus.yml
@@ -1,111 +0,0 @@
|
||||
env:
|
||||
CIRRUS_CLONE_DEPTH: 1
|
||||
|
||||
windows_msys2_task:
|
||||
timeout_in: 90m
|
||||
windows_container:
|
||||
image: cirrusci/windowsservercore:2019
|
||||
os_version: 2019
|
||||
cpu: 8
|
||||
memory: 8G
|
||||
env:
|
||||
CIRRUS_SHELL: powershell
|
||||
MSYS: winsymlinks:native
|
||||
MSYSTEM: MINGW64
|
||||
MSYS2_URL: https://github.com/msys2/msys2-installer/releases/download/2022-06-03/msys2-base-x86_64-20220603.sfx.exe
|
||||
MSYS2_FINGERPRINT: 0
|
||||
MSYS2_PACKAGES: "
|
||||
diffutils git grep make pkg-config sed
|
||||
mingw-w64-x86_64-python
|
||||
mingw-w64-x86_64-python-sphinx
|
||||
mingw-w64-x86_64-toolchain
|
||||
mingw-w64-x86_64-SDL2
|
||||
mingw-w64-x86_64-SDL2_image
|
||||
mingw-w64-x86_64-gtk3
|
||||
mingw-w64-x86_64-glib2
|
||||
mingw-w64-x86_64-ninja
|
||||
mingw-w64-x86_64-jemalloc
|
||||
mingw-w64-x86_64-lzo2
|
||||
mingw-w64-x86_64-zstd
|
||||
mingw-w64-x86_64-libjpeg-turbo
|
||||
mingw-w64-x86_64-pixman
|
||||
mingw-w64-x86_64-libgcrypt
|
||||
mingw-w64-x86_64-libpng
|
||||
mingw-w64-x86_64-libssh
|
||||
mingw-w64-x86_64-snappy
|
||||
mingw-w64-x86_64-libusb
|
||||
mingw-w64-x86_64-usbredir
|
||||
mingw-w64-x86_64-libtasn1
|
||||
mingw-w64-x86_64-nettle
|
||||
mingw-w64-x86_64-cyrus-sasl
|
||||
mingw-w64-x86_64-curl
|
||||
mingw-w64-x86_64-gnutls
|
||||
mingw-w64-x86_64-libnfs
|
||||
"
|
||||
CHERE_INVOKING: 1
|
||||
msys2_cache:
|
||||
folder: C:\tools\archive
|
||||
reupload_on_changes: false
|
||||
# These env variables are used to generate fingerprint to trigger the cache procedure
|
||||
# If wanna to force re-populate msys2, increase MSYS2_FINGERPRINT
|
||||
fingerprint_script:
|
||||
- |
|
||||
echo $env:CIRRUS_TASK_NAME
|
||||
echo $env:MSYS2_URL
|
||||
echo $env:MSYS2_FINGERPRINT
|
||||
echo $env:MSYS2_PACKAGES
|
||||
populate_script:
|
||||
- |
|
||||
md -Force C:\tools\archive\pkg
|
||||
$start_time = Get-Date
|
||||
bitsadmin /transfer msys_download /dynamic /download /priority FOREGROUND $env:MSYS2_URL C:\tools\archive\base.exe
|
||||
Write-Output "Download time taken: $((Get-Date).Subtract($start_time))"
|
||||
cd C:\tools
|
||||
C:\tools\archive\base.exe -y
|
||||
del -Force C:\tools\archive\base.exe
|
||||
Write-Output "Base install time taken: $((Get-Date).Subtract($start_time))"
|
||||
$start_time = Get-Date
|
||||
|
||||
((Get-Content -path C:\tools\msys64\etc\\post-install\\07-pacman-key.post -Raw) -replace '--refresh-keys', '--version') | Set-Content -Path C:\tools\msys64\etc\\post-install\\07-pacman-key.post
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf"
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "export"
|
||||
C:\tools\msys64\usr\bin\pacman.exe --noconfirm -Sy
|
||||
echo Y | C:\tools\msys64\usr\bin\pacman.exe --noconfirm -Suu --overwrite=*
|
||||
taskkill /F /FI "MODULES eq msys-2.0.dll"
|
||||
tasklist
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "mv -f /etc/pacman.conf.pacnew /etc/pacman.conf || true"
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Syuu --overwrite=*"
|
||||
Write-Output "Core install time taken: $((Get-Date).Subtract($start_time))"
|
||||
$start_time = Get-Date
|
||||
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed $env:MSYS2_PACKAGES"
|
||||
Write-Output "Package install time taken: $((Get-Date).Subtract($start_time))"
|
||||
$start_time = Get-Date
|
||||
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\etc\mtab
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\fd
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\stderr
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\stdin
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\stdout
|
||||
del -Force -Recurse -ErrorAction SilentlyContinue C:\tools\msys64\var\cache\pacman\pkg
|
||||
tar cf C:\tools\archive\msys64.tar -C C:\tools\ msys64
|
||||
|
||||
Write-Output "Package archive time taken: $((Get-Date).Subtract($start_time))"
|
||||
del -Force -Recurse -ErrorAction SilentlyContinue c:\tools\msys64
|
||||
install_script:
|
||||
- |
|
||||
$start_time = Get-Date
|
||||
cd C:\tools
|
||||
ls C:\tools\archive\msys64.tar
|
||||
tar xf C:\tools\archive\msys64.tar
|
||||
Write-Output "Extract msys2 time taken: $((Get-Date).Subtract($start_time))"
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "../configure --python=python3
|
||||
--target-list-exclude=i386-softmmu,ppc64-softmmu,aarch64-softmmu,mips64-softmmu,mipsel-softmmu,sh4-softmmu"
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "make -j8"
|
||||
- exit $LastExitCode
|
||||
test_script:
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make V=1 check"
|
||||
- exit $LastExitCode
|
@@ -1,4 +1,9 @@
|
||||
# All centos-stream-8 jobs should run successfully in an environment
|
||||
# setup by the scripts/ci/setup/stream/8/build-environment.yml task
|
||||
# "Installation of extra packages to build QEMU"
|
||||
|
||||
centos-stream-8-x86_64:
|
||||
extends: .custom_runner_template
|
||||
allow_failure: true
|
||||
needs: []
|
||||
stage: build
|
||||
@@ -8,15 +13,6 @@ centos-stream-8-x86_64:
|
||||
rules:
|
||||
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
|
||||
- if: "$CENTOS_STREAM_8_x86_64_RUNNER_AVAILABLE"
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
|
||||
when: on_failure
|
||||
expire_in: 7 days
|
||||
paths:
|
||||
- build/tests/results/latest/results.xml
|
||||
- build/tests/results/latest/test-results
|
||||
reports:
|
||||
junit: build/tests/results/latest/results.xml
|
||||
before_script:
|
||||
- JOBS=$(expr $(nproc) + 1)
|
||||
script:
|
||||
@@ -25,6 +21,4 @@ centos-stream-8-x86_64:
|
||||
- ../scripts/ci/org.centos/stream/8/x86_64/configure
|
||||
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
|
||||
- make -j"$JOBS"
|
||||
- make NINJA=":" check
|
||||
|| { cat meson-logs/testlog.txt; exit 1; } ;
|
||||
- ../scripts/ci/org.centos/stream/8/x86_64/test-avocado
|
||||
- make NINJA=":" check check-avocado
|
||||
|
@@ -59,6 +59,7 @@ msys2-64bit:
|
||||
mingw-w64-x86_64-SDL2
|
||||
mingw-w64-x86_64-SDL2_image
|
||||
mingw-w64-x86_64-snappy
|
||||
mingw-w64-x86_64-spice
|
||||
mingw-w64-x86_64-usbredir
|
||||
mingw-w64-x86_64-zstd "
|
||||
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
||||
@@ -108,6 +109,7 @@ msys2-32bit:
|
||||
mingw-w64-i686-SDL2
|
||||
mingw-w64-i686-SDL2_image
|
||||
mingw-w64-i686-snappy
|
||||
mingw-w64-i686-spice
|
||||
mingw-w64-i686-usbredir
|
||||
mingw-w64-i686-zstd "
|
||||
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
||||
|
@@ -3818,8 +3818,7 @@ W: https://cirrus-ci.com/github/qemu/qemu
|
||||
Windows Hosted Continuous Integration
|
||||
M: Yonggang Luo <luoyonggang@gmail.com>
|
||||
S: Maintained
|
||||
F: .cirrus.yml
|
||||
W: https://cirrus-ci.com/github/qemu/qemu
|
||||
F: .gitlab-ci.d/windows.yml
|
||||
|
||||
Guest Test Compilation Support
|
||||
M: Alex Bennée <alex.bennee@linaro.org>
|
||||
|
@@ -27,7 +27,7 @@
|
||||
#include "qemu/accel.h"
|
||||
#include "hw/boards.h"
|
||||
#include "sysemu/cpus.h"
|
||||
|
||||
#include "qemu/error-report.h"
|
||||
#include "accel-softmmu.h"
|
||||
|
||||
int accel_init_machine(AccelState *accel, MachineState *ms)
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "sysemu/cpus.h"
|
||||
#include "sysemu/tcg.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "qemu/plugin.h"
|
||||
|
||||
bool tcg_allowed;
|
||||
|
||||
@@ -65,6 +66,8 @@ void cpu_loop_exit(CPUState *cpu)
|
||||
{
|
||||
/* Undo the setting in cpu_tb_exec. */
|
||||
cpu->can_do_io = 1;
|
||||
/* Undo any setting in generated code. */
|
||||
qemu_plugin_disable_mem_helpers(cpu);
|
||||
siglongjmp(cpu->jmp_env, 1);
|
||||
}
|
||||
|
||||
|
@@ -459,6 +459,7 @@ cpu_tb_exec(CPUState *cpu, TranslationBlock *itb, int *tb_exit)
|
||||
qemu_thread_jit_execute();
|
||||
ret = tcg_qemu_tb_exec(env, tb_ptr);
|
||||
cpu->can_do_io = 1;
|
||||
qemu_plugin_disable_mem_helpers(cpu);
|
||||
/*
|
||||
* TODO: Delay swapping back to the read-write region of the TB
|
||||
* until we actually need to modify the TB. The read-only copy,
|
||||
@@ -526,7 +527,6 @@ static void cpu_exec_exit(CPUState *cpu)
|
||||
if (cc->tcg_ops->cpu_exec_exit) {
|
||||
cc->tcg_ops->cpu_exec_exit(cpu);
|
||||
}
|
||||
QEMU_PLUGIN_ASSERT(cpu->plugin_mem_cbs == NULL);
|
||||
}
|
||||
|
||||
void cpu_exec_step_atomic(CPUState *cpu)
|
||||
@@ -580,7 +580,6 @@ void cpu_exec_step_atomic(CPUState *cpu)
|
||||
qemu_mutex_unlock_iothread();
|
||||
}
|
||||
assert_no_pages_locked();
|
||||
qemu_plugin_disable_mem_helpers(cpu);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1004,7 +1003,6 @@ cpu_exec_loop(CPUState *cpu, SyncClocks *sc)
|
||||
|
||||
cpu_loop_exec_tb(cpu, tb, pc, &last_tb, &tb_exit);
|
||||
|
||||
QEMU_PLUGIN_ASSERT(cpu->plugin_mem_cbs == NULL);
|
||||
/* Try to align the host and virtual clocks
|
||||
if the guest is in advance */
|
||||
align_clocks(sc, cpu);
|
||||
@@ -1029,7 +1027,6 @@ static int cpu_exec_setjmp(CPUState *cpu, SyncClocks *sc)
|
||||
if (qemu_mutex_iothread_locked()) {
|
||||
qemu_mutex_unlock_iothread();
|
||||
}
|
||||
qemu_plugin_disable_mem_helpers(cpu);
|
||||
|
||||
assert_no_pages_locked();
|
||||
}
|
||||
|
@@ -32,28 +32,13 @@ xendevicemodel_handle *xen_dmod;
|
||||
|
||||
static void xenstore_record_dm_state(const char *state)
|
||||
{
|
||||
struct xs_handle *xs;
|
||||
char path[50];
|
||||
|
||||
/* We now have everything we need to set the xenstore entry. */
|
||||
xs = xs_open(0);
|
||||
if (xs == NULL) {
|
||||
fprintf(stderr, "Could not contact XenStore\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
snprintf(path, sizeof (path), "device-model/%u/state", xen_domid);
|
||||
/*
|
||||
* This call may fail when running restricted so don't make it fatal in
|
||||
* that case. Toolstacks should instead use QMP to listen for state changes.
|
||||
*/
|
||||
if (!xs_write(xs, XBT_NULL, path, state, strlen(state)) &&
|
||||
!xen_domid_restrict) {
|
||||
if (!qemu_xen_xs_write(xenstore, XBT_NULL, path, state, strlen(state))) {
|
||||
error_report("error recording dm state");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
xs_close(xs);
|
||||
}
|
||||
|
||||
|
||||
@@ -111,7 +96,15 @@ static int xen_init(MachineState *ms)
|
||||
xc_interface_close(xen_xc);
|
||||
return -1;
|
||||
}
|
||||
qemu_add_vm_change_state_handler(xen_change_state_handler, NULL);
|
||||
|
||||
/*
|
||||
* The XenStore write would fail when running restricted so don't attempt
|
||||
* it in that case. Toolstacks should instead use QMP to listen for state
|
||||
* changes.
|
||||
*/
|
||||
if (!xen_domid_restrict) {
|
||||
qemu_add_vm_change_state_handler(xen_change_state_handler, NULL);
|
||||
}
|
||||
/*
|
||||
* opt out of system RAM being allocated by generic code
|
||||
*/
|
||||
|
@@ -48,6 +48,7 @@
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/sockets.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "monitor/hmp.h"
|
||||
|
@@ -4,7 +4,12 @@
|
||||
# This maps email domains to nice easy to read company names
|
||||
#
|
||||
|
||||
linux.alibaba.com Alibaba
|
||||
amazon.com Amazon
|
||||
amazon.co.uk Amazon
|
||||
amazon.de Amazon
|
||||
amd.com AMD
|
||||
aspeedtech.com ASPEED Technology Inc.
|
||||
baidu.com Baidu
|
||||
bytedance.com ByteDance
|
||||
cmss.chinamobile.com China Mobile
|
||||
@@ -32,17 +37,18 @@ oracle.com Oracle
|
||||
proxmox.com Proxmox
|
||||
quicinc.com Qualcomm Innovation Center
|
||||
redhat.com Red Hat
|
||||
rev.ng rev.ng Labs
|
||||
rt-rk.com RT-RK
|
||||
samsung.com Samsung
|
||||
siemens.com Siemens
|
||||
sifive.com SiFive
|
||||
suse.com SUSE
|
||||
suse.de SUSE
|
||||
syrmia.com SYRMIA
|
||||
ventanamicro.com Ventana Micro Systems
|
||||
virtuozzo.com Virtuozzo
|
||||
vrull.eu VRULL
|
||||
wdc.com Western Digital
|
||||
windriver.com Wind River
|
||||
xilinx.com Xilinx
|
||||
yadro.com YADRO
|
||||
yandex-team.ru Yandex
|
||||
|
7
contrib/gitdm/group-map-alibaba
Normal file
7
contrib/gitdm/group-map-alibaba
Normal file
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Alibaba contributors including its subsidiaries
|
||||
#
|
||||
|
||||
# c-sky.com, now part of T-Head, wholly-owned entity of Alibaba Group
|
||||
ren_guo@c-sky.com
|
||||
zhiwei_liu@c-sky.com
|
8
contrib/gitdm/group-map-amd
Normal file
8
contrib/gitdm/group-map-amd
Normal file
@@ -0,0 +1,8 @@
|
||||
# AMD acquired Xilinx and contributors have been slowly updating emails
|
||||
|
||||
edgar.iglesias@xilinx.com
|
||||
fnu.vikram@xilinx.com
|
||||
francisco.iglesias@xilinx.com
|
||||
sai.pavan.boddu@xilinx.com
|
||||
stefano.stabellini@xilinx.com
|
||||
tong.ho@xilinx.com
|
@@ -38,3 +38,7 @@ paul@nowt.org
|
||||
git@xen0n.name
|
||||
simon@simonsafar.com
|
||||
research_trasio@irq.a4lg.com
|
||||
shentey@gmail.com
|
||||
bmeng@tinylab.org
|
||||
strahinja.p.jankovic@gmail.com
|
||||
Jason@zx2c4.com
|
||||
|
1
cpu.c
1
cpu.c
@@ -42,6 +42,7 @@
|
||||
#include "hw/core/accel-cpu.h"
|
||||
#include "trace/trace-root.h"
|
||||
#include "qemu/accel.h"
|
||||
#include "qemu/plugin.h"
|
||||
|
||||
uintptr_t qemu_host_page_size;
|
||||
intptr_t qemu_host_page_mask;
|
||||
|
@@ -206,15 +206,6 @@ be an effective use of its limited resources, and thus intends to discontinue
|
||||
it. Since all recent x86 hardware from the past >10 years is capable of the
|
||||
64-bit x86 extensions, a corresponding 64-bit OS should be used instead.
|
||||
|
||||
System emulation on 32-bit arm hosts (since 8.0)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Since QEMU needs a strong host machine for running full system emulation, and
|
||||
all recent powerful arm hosts support 64-bit, the QEMU project deprecates the
|
||||
support for running any system emulation on 32-bit arm hosts in general. Use
|
||||
64-bit arm hosts for system emulation instead. (Note: "user" mode emulation
|
||||
continues to be supported on 32-bit arm hosts, too)
|
||||
|
||||
|
||||
QEMU API (QAPI) events
|
||||
----------------------
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "qapi/qapi-commands-dump.h"
|
||||
#include "qapi/qapi-events-dump.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "hw/misc/vmcoreinfo.h"
|
||||
#include "migration/blocker.h"
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "sysemu/dump.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "exec/cpu-defs.h"
|
||||
#include "hw/core/cpu.h"
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include "qemu/ctype.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "trace.h"
|
||||
#include "exec/gdbstub.h"
|
||||
#include "gdbstub/syscalls.h"
|
||||
|
@@ -31,6 +31,8 @@ EmailMap contrib/gitdm/domain-map
|
||||
# identifiable corporate emails. Please keep this list sorted.
|
||||
#
|
||||
|
||||
GroupMap contrib/gitdm/group-map-alibaba Alibaba
|
||||
GroupMap contrib/gitdm/group-map-amd AMD
|
||||
GroupMap contrib/gitdm/group-map-cadence Cadence Design Systems
|
||||
GroupMap contrib/gitdm/group-map-codeweavers CodeWeavers
|
||||
GroupMap contrib/gitdm/group-map-facebook Facebook
|
||||
|
@@ -19,6 +19,8 @@
|
||||
#include "exec/address-spaces.h"
|
||||
#include "cpu.h"
|
||||
#include "qom/object.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
#define RAM_SIZE (512 * MiB)
|
||||
#define FLASH_SIZE (32 * MiB)
|
||||
|
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/arm/allwinner-a10.h"
|
||||
|
@@ -37,6 +37,8 @@
|
||||
#include "qemu/cutils.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/net/mv88w8618_eth.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
#define MP_MISC_BASE 0x80002000
|
||||
#define MP_MISC_SIZE 0x00001000
|
||||
|
@@ -30,6 +30,8 @@
|
||||
#include "sysemu/blockdev.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
#define NPCM7XX_POWER_ON_STRAPS_DEFAULT ( \
|
||||
NPCM7XX_PWRON_STRAP_SPI0F18 | \
|
||||
|
@@ -45,6 +45,8 @@
|
||||
#include "hw/loader.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
/* Nokia N8x0 support */
|
||||
struct n800_s {
|
||||
|
@@ -37,6 +37,8 @@
|
||||
#include "exec/address-spaces.h"
|
||||
#include "cpu.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Siemens SX1 Cellphone V1 */
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "qemu/units.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/arm/allwinner-h3.h"
|
||||
|
@@ -32,6 +32,8 @@
|
||||
#include "cpu.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qom/object.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
static uint64_t static_read(void *opaque, hwaddr offset, unsigned size)
|
||||
{
|
||||
|
@@ -601,8 +601,8 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
FD_STATE_MULTI = 0x01, /* multi track flag */
|
||||
FD_STATE_FORMAT = 0x02, /* format flag */
|
||||
FD_STATE_MULTI = 0x01, /* multi track flag */
|
||||
FD_STATE_FORMAT = 0x02, /* format flag */
|
||||
};
|
||||
|
||||
enum {
|
||||
|
208
hw/block/nand.c
208
hw/block/nand.c
@@ -30,33 +30,33 @@
|
||||
#include "qemu/module.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
# define NAND_CMD_READ0 0x00
|
||||
# define NAND_CMD_READ1 0x01
|
||||
# define NAND_CMD_READ2 0x50
|
||||
# define NAND_CMD_LPREAD2 0x30
|
||||
# define NAND_CMD_NOSERIALREAD2 0x35
|
||||
# define NAND_CMD_RANDOMREAD1 0x05
|
||||
# define NAND_CMD_RANDOMREAD2 0xe0
|
||||
# define NAND_CMD_READID 0x90
|
||||
# define NAND_CMD_RESET 0xff
|
||||
# define NAND_CMD_PAGEPROGRAM1 0x80
|
||||
# define NAND_CMD_PAGEPROGRAM2 0x10
|
||||
# define NAND_CMD_CACHEPROGRAM2 0x15
|
||||
# define NAND_CMD_BLOCKERASE1 0x60
|
||||
# define NAND_CMD_BLOCKERASE2 0xd0
|
||||
# define NAND_CMD_READSTATUS 0x70
|
||||
# define NAND_CMD_COPYBACKPRG1 0x85
|
||||
# define NAND_CMD_READ0 0x00
|
||||
# define NAND_CMD_READ1 0x01
|
||||
# define NAND_CMD_READ2 0x50
|
||||
# define NAND_CMD_LPREAD2 0x30
|
||||
# define NAND_CMD_NOSERIALREAD2 0x35
|
||||
# define NAND_CMD_RANDOMREAD1 0x05
|
||||
# define NAND_CMD_RANDOMREAD2 0xe0
|
||||
# define NAND_CMD_READID 0x90
|
||||
# define NAND_CMD_RESET 0xff
|
||||
# define NAND_CMD_PAGEPROGRAM1 0x80
|
||||
# define NAND_CMD_PAGEPROGRAM2 0x10
|
||||
# define NAND_CMD_CACHEPROGRAM2 0x15
|
||||
# define NAND_CMD_BLOCKERASE1 0x60
|
||||
# define NAND_CMD_BLOCKERASE2 0xd0
|
||||
# define NAND_CMD_READSTATUS 0x70
|
||||
# define NAND_CMD_COPYBACKPRG1 0x85
|
||||
|
||||
# define NAND_IOSTATUS_ERROR (1 << 0)
|
||||
# define NAND_IOSTATUS_PLANE0 (1 << 1)
|
||||
# define NAND_IOSTATUS_PLANE1 (1 << 2)
|
||||
# define NAND_IOSTATUS_PLANE2 (1 << 3)
|
||||
# define NAND_IOSTATUS_PLANE3 (1 << 4)
|
||||
# define NAND_IOSTATUS_ERROR (1 << 0)
|
||||
# define NAND_IOSTATUS_PLANE0 (1 << 1)
|
||||
# define NAND_IOSTATUS_PLANE1 (1 << 2)
|
||||
# define NAND_IOSTATUS_PLANE2 (1 << 3)
|
||||
# define NAND_IOSTATUS_PLANE3 (1 << 4)
|
||||
# define NAND_IOSTATUS_READY (1 << 6)
|
||||
# define NAND_IOSTATUS_UNPROTCT (1 << 7)
|
||||
# define NAND_IOSTATUS_UNPROTCT (1 << 7)
|
||||
|
||||
# define MAX_PAGE 0x800
|
||||
# define MAX_OOB 0x40
|
||||
# define MAX_PAGE 0x800
|
||||
# define MAX_OOB 0x40
|
||||
|
||||
typedef struct NANDFlashState NANDFlashState;
|
||||
struct NANDFlashState {
|
||||
@@ -102,40 +102,40 @@ static void mem_and(uint8_t *dest, const uint8_t *src, size_t n)
|
||||
}
|
||||
}
|
||||
|
||||
# define NAND_NO_AUTOINCR 0x00000001
|
||||
# define NAND_BUSWIDTH_16 0x00000002
|
||||
# define NAND_NO_PADDING 0x00000004
|
||||
# define NAND_CACHEPRG 0x00000008
|
||||
# define NAND_COPYBACK 0x00000010
|
||||
# define NAND_IS_AND 0x00000020
|
||||
# define NAND_4PAGE_ARRAY 0x00000040
|
||||
# define NAND_NO_READRDY 0x00000100
|
||||
# define NAND_SAMSUNG_LP (NAND_NO_PADDING | NAND_COPYBACK)
|
||||
# define NAND_NO_AUTOINCR 0x00000001
|
||||
# define NAND_BUSWIDTH_16 0x00000002
|
||||
# define NAND_NO_PADDING 0x00000004
|
||||
# define NAND_CACHEPRG 0x00000008
|
||||
# define NAND_COPYBACK 0x00000010
|
||||
# define NAND_IS_AND 0x00000020
|
||||
# define NAND_4PAGE_ARRAY 0x00000040
|
||||
# define NAND_NO_READRDY 0x00000100
|
||||
# define NAND_SAMSUNG_LP (NAND_NO_PADDING | NAND_COPYBACK)
|
||||
|
||||
# define NAND_IO
|
||||
|
||||
# define PAGE(addr) ((addr) >> ADDR_SHIFT)
|
||||
# define PAGE_START(page) (PAGE(page) * (NAND_PAGE_SIZE + OOB_SIZE))
|
||||
# define PAGE_MASK ((1 << ADDR_SHIFT) - 1)
|
||||
# define OOB_SHIFT (PAGE_SHIFT - 5)
|
||||
# define OOB_SIZE (1 << OOB_SHIFT)
|
||||
# define SECTOR(addr) ((addr) >> (9 + ADDR_SHIFT - PAGE_SHIFT))
|
||||
# define SECTOR_OFFSET(addr) ((addr) & ((511 >> PAGE_SHIFT) << 8))
|
||||
# define PAGE(addr) ((addr) >> ADDR_SHIFT)
|
||||
# define PAGE_START(page) (PAGE(page) * (NAND_PAGE_SIZE + OOB_SIZE))
|
||||
# define PAGE_MASK ((1 << ADDR_SHIFT) - 1)
|
||||
# define OOB_SHIFT (PAGE_SHIFT - 5)
|
||||
# define OOB_SIZE (1 << OOB_SHIFT)
|
||||
# define SECTOR(addr) ((addr) >> (9 + ADDR_SHIFT - PAGE_SHIFT))
|
||||
# define SECTOR_OFFSET(addr) ((addr) & ((511 >> PAGE_SHIFT) << 8))
|
||||
|
||||
# define NAND_PAGE_SIZE 256
|
||||
# define PAGE_SHIFT 8
|
||||
# define PAGE_SECTORS 1
|
||||
# define ADDR_SHIFT 8
|
||||
# define NAND_PAGE_SIZE 256
|
||||
# define PAGE_SHIFT 8
|
||||
# define PAGE_SECTORS 1
|
||||
# define ADDR_SHIFT 8
|
||||
# include "nand.c"
|
||||
# define NAND_PAGE_SIZE 512
|
||||
# define PAGE_SHIFT 9
|
||||
# define PAGE_SECTORS 1
|
||||
# define ADDR_SHIFT 8
|
||||
# define NAND_PAGE_SIZE 512
|
||||
# define PAGE_SHIFT 9
|
||||
# define PAGE_SECTORS 1
|
||||
# define ADDR_SHIFT 8
|
||||
# include "nand.c"
|
||||
# define NAND_PAGE_SIZE 2048
|
||||
# define PAGE_SHIFT 11
|
||||
# define PAGE_SECTORS 4
|
||||
# define ADDR_SHIFT 16
|
||||
# define NAND_PAGE_SIZE 2048
|
||||
# define PAGE_SHIFT 11
|
||||
# define PAGE_SECTORS 4
|
||||
# define ADDR_SHIFT 16
|
||||
# include "nand.c"
|
||||
|
||||
/* Information based on Linux drivers/mtd/nand/raw/nand_ids.c */
|
||||
@@ -148,79 +148,79 @@ static const struct {
|
||||
} nand_flash_ids[0x100] = {
|
||||
[0 ... 0xff] = { 0 },
|
||||
|
||||
[0x6b] = { 4, 8, 9, 4, 0 },
|
||||
[0xe3] = { 4, 8, 9, 4, 0 },
|
||||
[0xe5] = { 4, 8, 9, 4, 0 },
|
||||
[0xd6] = { 8, 8, 9, 4, 0 },
|
||||
[0xe6] = { 8, 8, 9, 4, 0 },
|
||||
[0x6b] = { 4, 8, 9, 4, 0 },
|
||||
[0xe3] = { 4, 8, 9, 4, 0 },
|
||||
[0xe5] = { 4, 8, 9, 4, 0 },
|
||||
[0xd6] = { 8, 8, 9, 4, 0 },
|
||||
[0xe6] = { 8, 8, 9, 4, 0 },
|
||||
|
||||
[0x33] = { 16, 8, 9, 5, 0 },
|
||||
[0x73] = { 16, 8, 9, 5, 0 },
|
||||
[0x43] = { 16, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x53] = { 16, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x33] = { 16, 8, 9, 5, 0 },
|
||||
[0x73] = { 16, 8, 9, 5, 0 },
|
||||
[0x43] = { 16, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x53] = { 16, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
|
||||
[0x35] = { 32, 8, 9, 5, 0 },
|
||||
[0x75] = { 32, 8, 9, 5, 0 },
|
||||
[0x45] = { 32, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x55] = { 32, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x35] = { 32, 8, 9, 5, 0 },
|
||||
[0x75] = { 32, 8, 9, 5, 0 },
|
||||
[0x45] = { 32, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x55] = { 32, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
|
||||
[0x36] = { 64, 8, 9, 5, 0 },
|
||||
[0x76] = { 64, 8, 9, 5, 0 },
|
||||
[0x46] = { 64, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x56] = { 64, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x36] = { 64, 8, 9, 5, 0 },
|
||||
[0x76] = { 64, 8, 9, 5, 0 },
|
||||
[0x46] = { 64, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x56] = { 64, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
|
||||
[0x78] = { 128, 8, 9, 5, 0 },
|
||||
[0x39] = { 128, 8, 9, 5, 0 },
|
||||
[0x79] = { 128, 8, 9, 5, 0 },
|
||||
[0x72] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x49] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x74] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x59] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x78] = { 128, 8, 9, 5, 0 },
|
||||
[0x39] = { 128, 8, 9, 5, 0 },
|
||||
[0x79] = { 128, 8, 9, 5, 0 },
|
||||
[0x72] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x49] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x74] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
[0x59] = { 128, 16, 9, 5, NAND_BUSWIDTH_16 },
|
||||
|
||||
[0x71] = { 256, 8, 9, 5, 0 },
|
||||
[0x71] = { 256, 8, 9, 5, 0 },
|
||||
|
||||
/*
|
||||
* These are the new chips with large page size. The pagesize and the
|
||||
* erasesize is determined from the extended id bytes
|
||||
*/
|
||||
# define LP_OPTIONS (NAND_SAMSUNG_LP | NAND_NO_READRDY | NAND_NO_AUTOINCR)
|
||||
# define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)
|
||||
# define LP_OPTIONS (NAND_SAMSUNG_LP | NAND_NO_READRDY | NAND_NO_AUTOINCR)
|
||||
# define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)
|
||||
|
||||
/* 512 Megabit */
|
||||
[0xa2] = { 64, 8, 0, 0, LP_OPTIONS },
|
||||
[0xf2] = { 64, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb2] = { 64, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc2] = { 64, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xa2] = { 64, 8, 0, 0, LP_OPTIONS },
|
||||
[0xf2] = { 64, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb2] = { 64, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc2] = { 64, 16, 0, 0, LP_OPTIONS16 },
|
||||
|
||||
/* 1 Gigabit */
|
||||
[0xa1] = { 128, 8, 0, 0, LP_OPTIONS },
|
||||
[0xf1] = { 128, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb1] = { 128, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc1] = { 128, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xa1] = { 128, 8, 0, 0, LP_OPTIONS },
|
||||
[0xf1] = { 128, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb1] = { 128, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc1] = { 128, 16, 0, 0, LP_OPTIONS16 },
|
||||
|
||||
/* 2 Gigabit */
|
||||
[0xaa] = { 256, 8, 0, 0, LP_OPTIONS },
|
||||
[0xda] = { 256, 8, 0, 0, LP_OPTIONS },
|
||||
[0xba] = { 256, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xca] = { 256, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xaa] = { 256, 8, 0, 0, LP_OPTIONS },
|
||||
[0xda] = { 256, 8, 0, 0, LP_OPTIONS },
|
||||
[0xba] = { 256, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xca] = { 256, 16, 0, 0, LP_OPTIONS16 },
|
||||
|
||||
/* 4 Gigabit */
|
||||
[0xac] = { 512, 8, 0, 0, LP_OPTIONS },
|
||||
[0xdc] = { 512, 8, 0, 0, LP_OPTIONS },
|
||||
[0xbc] = { 512, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xcc] = { 512, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xac] = { 512, 8, 0, 0, LP_OPTIONS },
|
||||
[0xdc] = { 512, 8, 0, 0, LP_OPTIONS },
|
||||
[0xbc] = { 512, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xcc] = { 512, 16, 0, 0, LP_OPTIONS16 },
|
||||
|
||||
/* 8 Gigabit */
|
||||
[0xa3] = { 1024, 8, 0, 0, LP_OPTIONS },
|
||||
[0xd3] = { 1024, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb3] = { 1024, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc3] = { 1024, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xa3] = { 1024, 8, 0, 0, LP_OPTIONS },
|
||||
[0xd3] = { 1024, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb3] = { 1024, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc3] = { 1024, 16, 0, 0, LP_OPTIONS16 },
|
||||
|
||||
/* 16 Gigabit */
|
||||
[0xa5] = { 2048, 8, 0, 0, LP_OPTIONS },
|
||||
[0xd5] = { 2048, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb5] = { 2048, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc5] = { 2048, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xa5] = { 2048, 8, 0, 0, LP_OPTIONS },
|
||||
[0xd5] = { 2048, 8, 0, 0, LP_OPTIONS },
|
||||
[0xb5] = { 2048, 16, 0, 0, LP_OPTIONS16 },
|
||||
[0xc5] = { 2048, 16, 0, 0, LP_OPTIONS16 },
|
||||
};
|
||||
|
||||
static void nand_reset(DeviceState *dev)
|
||||
@@ -812,4 +812,4 @@ static void glue(nand_init_, NAND_PAGE_SIZE)(NANDFlashState *s)
|
||||
# undef PAGE_SHIFT
|
||||
# undef PAGE_SECTORS
|
||||
# undef ADDR_SHIFT
|
||||
#endif /* NAND_IO */
|
||||
#endif /* NAND_IO */
|
||||
|
@@ -35,10 +35,10 @@
|
||||
#include "qom/object.h"
|
||||
|
||||
/* 11 for 2kB-page OneNAND ("2nd generation") and 10 for 1kB-page chips */
|
||||
#define PAGE_SHIFT 11
|
||||
#define PAGE_SHIFT 11
|
||||
|
||||
/* Fixed */
|
||||
#define BLOCK_SHIFT (PAGE_SHIFT + 6)
|
||||
#define BLOCK_SHIFT (PAGE_SHIFT + 6)
|
||||
|
||||
#define TYPE_ONE_NAND "onenand"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(OneNANDState, ONE_NAND)
|
||||
@@ -408,23 +408,23 @@ static void onenand_command(OneNANDState *s)
|
||||
int b;
|
||||
int sec;
|
||||
void *buf;
|
||||
#define SETADDR(block, page) \
|
||||
sec = (s->addr[page] & 3) + \
|
||||
((((s->addr[page] >> 2) & 0x3f) + \
|
||||
(((s->addr[block] & 0xfff) | \
|
||||
(s->addr[block] >> 15 ? \
|
||||
s->density_mask : 0)) << 6)) << (PAGE_SHIFT - 9));
|
||||
#define SETBUF_M() \
|
||||
buf = (s->bufaddr & 8) ? \
|
||||
s->data[(s->bufaddr >> 2) & 1][0] : s->boot[0]; \
|
||||
#define SETADDR(block, page) \
|
||||
sec = (s->addr[page] & 3) + \
|
||||
((((s->addr[page] >> 2) & 0x3f) + \
|
||||
(((s->addr[block] & 0xfff) | \
|
||||
(s->addr[block] >> 15 ? s->density_mask : 0)) \
|
||||
<< 6)) \
|
||||
<< (PAGE_SHIFT - 9));
|
||||
#define SETBUF_M() \
|
||||
buf = (s->bufaddr & 8) ? s->data[(s->bufaddr >> 2) & 1][0] : s->boot[0]; \
|
||||
buf += (s->bufaddr & 3) << 9;
|
||||
#define SETBUF_S() \
|
||||
buf = (s->bufaddr & 8) ? \
|
||||
s->data[(s->bufaddr >> 2) & 1][1] : s->boot[1]; \
|
||||
#define SETBUF_S() \
|
||||
buf = (s->bufaddr & 8) ? \
|
||||
s->data[(s->bufaddr >> 2) & 1][1] : s->boot[1]; \
|
||||
buf += (s->bufaddr & 3) << 4;
|
||||
|
||||
switch (s->command) {
|
||||
case 0x00: /* Load single/multiple sector data unit into buffer */
|
||||
case 0x00: /* Load single/multiple sector data unit into buffer */
|
||||
SETADDR(ONEN_BUF_BLOCK, ONEN_BUF_PAGE)
|
||||
|
||||
SETBUF_M()
|
||||
@@ -443,7 +443,7 @@ static void onenand_command(OneNANDState *s)
|
||||
*/
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_LOAD;
|
||||
break;
|
||||
case 0x13: /* Load single/multiple spare sector into buffer */
|
||||
case 0x13: /* Load single/multiple spare sector into buffer */
|
||||
SETADDR(ONEN_BUF_BLOCK, ONEN_BUF_PAGE)
|
||||
|
||||
SETBUF_S()
|
||||
@@ -456,7 +456,7 @@ static void onenand_command(OneNANDState *s)
|
||||
*/
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_LOAD;
|
||||
break;
|
||||
case 0x80: /* Program single/multiple sector data unit from buffer */
|
||||
case 0x80: /* Program single/multiple sector data unit from buffer */
|
||||
SETADDR(ONEN_BUF_BLOCK, ONEN_BUF_PAGE)
|
||||
|
||||
SETBUF_M()
|
||||
@@ -475,7 +475,7 @@ static void onenand_command(OneNANDState *s)
|
||||
*/
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_PROG;
|
||||
break;
|
||||
case 0x1a: /* Program single/multiple spare area sector from buffer */
|
||||
case 0x1a: /* Program single/multiple spare area sector from buffer */
|
||||
SETADDR(ONEN_BUF_BLOCK, ONEN_BUF_PAGE)
|
||||
|
||||
SETBUF_S()
|
||||
@@ -488,7 +488,7 @@ static void onenand_command(OneNANDState *s)
|
||||
*/
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_PROG;
|
||||
break;
|
||||
case 0x1b: /* Copy-back program */
|
||||
case 0x1b: /* Copy-back program */
|
||||
SETBUF_S()
|
||||
|
||||
SETADDR(ONEN_BUF_BLOCK, ONEN_BUF_PAGE)
|
||||
@@ -504,7 +504,7 @@ static void onenand_command(OneNANDState *s)
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_PROG;
|
||||
break;
|
||||
|
||||
case 0x23: /* Unlock NAND array block(s) */
|
||||
case 0x23: /* Unlock NAND array block(s) */
|
||||
s->intstatus |= ONEN_INT;
|
||||
|
||||
/* XXX the previous (?) area should be locked automatically */
|
||||
@@ -519,7 +519,7 @@ static void onenand_command(OneNANDState *s)
|
||||
s->wpstatus = s->blockwp[b] = ONEN_LOCK_UNLOCKED;
|
||||
}
|
||||
break;
|
||||
case 0x27: /* Unlock All NAND array blocks */
|
||||
case 0x27: /* Unlock All NAND array blocks */
|
||||
s->intstatus |= ONEN_INT;
|
||||
|
||||
for (b = 0; b < s->blocks; b ++) {
|
||||
@@ -530,7 +530,7 @@ static void onenand_command(OneNANDState *s)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x2a: /* Lock NAND array block(s) */
|
||||
case 0x2a: /* Lock NAND array block(s) */
|
||||
s->intstatus |= ONEN_INT;
|
||||
|
||||
for (b = s->unladdr[0]; b <= s->unladdr[1]; b ++) {
|
||||
@@ -544,7 +544,7 @@ static void onenand_command(OneNANDState *s)
|
||||
s->wpstatus = s->blockwp[b] = ONEN_LOCK_LOCKED;
|
||||
}
|
||||
break;
|
||||
case 0x2c: /* Lock-tight NAND array block(s) */
|
||||
case 0x2c: /* Lock-tight NAND array block(s) */
|
||||
s->intstatus |= ONEN_INT;
|
||||
|
||||
for (b = s->unladdr[0]; b <= s->unladdr[1]; b ++) {
|
||||
@@ -559,13 +559,13 @@ static void onenand_command(OneNANDState *s)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x71: /* Erase-Verify-Read */
|
||||
case 0x71: /* Erase-Verify-Read */
|
||||
s->intstatus |= ONEN_INT;
|
||||
break;
|
||||
case 0x95: /* Multi-block erase */
|
||||
case 0x95: /* Multi-block erase */
|
||||
qemu_irq_pulse(s->intr);
|
||||
/* Fall through. */
|
||||
case 0x94: /* Block erase */
|
||||
case 0x94: /* Block erase */
|
||||
sec = ((s->addr[ONEN_BUF_BLOCK] & 0xfff) |
|
||||
(s->addr[ONEN_BUF_BLOCK] >> 15 ? s->density_mask : 0))
|
||||
<< (BLOCK_SHIFT - 9);
|
||||
@@ -574,20 +574,20 @@ static void onenand_command(OneNANDState *s)
|
||||
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_ERASE;
|
||||
break;
|
||||
case 0xb0: /* Erase suspend */
|
||||
case 0xb0: /* Erase suspend */
|
||||
break;
|
||||
case 0x30: /* Erase resume */
|
||||
case 0x30: /* Erase resume */
|
||||
s->intstatus |= ONEN_INT | ONEN_INT_ERASE;
|
||||
break;
|
||||
|
||||
case 0xf0: /* Reset NAND Flash core */
|
||||
case 0xf0: /* Reset NAND Flash core */
|
||||
onenand_reset(s, 0);
|
||||
break;
|
||||
case 0xf3: /* Reset OneNAND */
|
||||
case 0xf3: /* Reset OneNAND */
|
||||
onenand_reset(s, 0);
|
||||
break;
|
||||
|
||||
case 0x65: /* OTP Access */
|
||||
case 0x65: /* OTP Access */
|
||||
s->intstatus |= ONEN_INT;
|
||||
s->blk_cur = NULL;
|
||||
s->current = s->otp;
|
||||
@@ -616,52 +616,52 @@ static uint64_t onenand_read(void *opaque, hwaddr addr,
|
||||
case 0x0000 ... 0xbffe:
|
||||
return lduw_le_p(s->boot[0] + addr);
|
||||
|
||||
case 0xf000: /* Manufacturer ID */
|
||||
case 0xf000: /* Manufacturer ID */
|
||||
return s->id.man;
|
||||
case 0xf001: /* Device ID */
|
||||
case 0xf001: /* Device ID */
|
||||
return s->id.dev;
|
||||
case 0xf002: /* Version ID */
|
||||
case 0xf002: /* Version ID */
|
||||
return s->id.ver;
|
||||
/* TODO: get the following values from a real chip! */
|
||||
case 0xf003: /* Data Buffer size */
|
||||
case 0xf003: /* Data Buffer size */
|
||||
return 1 << PAGE_SHIFT;
|
||||
case 0xf004: /* Boot Buffer size */
|
||||
case 0xf004: /* Boot Buffer size */
|
||||
return 0x200;
|
||||
case 0xf005: /* Amount of buffers */
|
||||
case 0xf005: /* Amount of buffers */
|
||||
return 1 | (2 << 8);
|
||||
case 0xf006: /* Technology */
|
||||
case 0xf006: /* Technology */
|
||||
return 0;
|
||||
|
||||
case 0xf100 ... 0xf107: /* Start addresses */
|
||||
case 0xf100 ... 0xf107: /* Start addresses */
|
||||
return s->addr[offset - 0xf100];
|
||||
|
||||
case 0xf200: /* Start buffer */
|
||||
case 0xf200: /* Start buffer */
|
||||
return (s->bufaddr << 8) | ((s->count - 1) & (1 << (PAGE_SHIFT - 10)));
|
||||
|
||||
case 0xf220: /* Command */
|
||||
case 0xf220: /* Command */
|
||||
return s->command;
|
||||
case 0xf221: /* System Configuration 1 */
|
||||
case 0xf221: /* System Configuration 1 */
|
||||
return s->config[0] & 0xffe0;
|
||||
case 0xf222: /* System Configuration 2 */
|
||||
case 0xf222: /* System Configuration 2 */
|
||||
return s->config[1];
|
||||
|
||||
case 0xf240: /* Controller Status */
|
||||
case 0xf240: /* Controller Status */
|
||||
return s->status;
|
||||
case 0xf241: /* Interrupt */
|
||||
case 0xf241: /* Interrupt */
|
||||
return s->intstatus;
|
||||
case 0xf24c: /* Unlock Start Block Address */
|
||||
case 0xf24c: /* Unlock Start Block Address */
|
||||
return s->unladdr[0];
|
||||
case 0xf24d: /* Unlock End Block Address */
|
||||
case 0xf24d: /* Unlock End Block Address */
|
||||
return s->unladdr[1];
|
||||
case 0xf24e: /* Write Protection Status */
|
||||
case 0xf24e: /* Write Protection Status */
|
||||
return s->wpstatus;
|
||||
|
||||
case 0xff00: /* ECC Status */
|
||||
case 0xff00: /* ECC Status */
|
||||
return 0x00;
|
||||
case 0xff01: /* ECC Result of main area data */
|
||||
case 0xff02: /* ECC Result of spare area data */
|
||||
case 0xff03: /* ECC Result of main area data */
|
||||
case 0xff04: /* ECC Result of spare area data */
|
||||
case 0xff01: /* ECC Result of main area data */
|
||||
case 0xff02: /* ECC Result of spare area data */
|
||||
case 0xff03: /* ECC Result of main area data */
|
||||
case 0xff04: /* ECC Result of spare area data */
|
||||
qemu_log_mask(LOG_UNIMP,
|
||||
"onenand: ECC result registers unimplemented\n");
|
||||
return 0x0000;
|
||||
@@ -696,15 +696,15 @@ static void onenand_write(void *opaque, hwaddr addr,
|
||||
}
|
||||
|
||||
switch (value) {
|
||||
case 0x00f0: /* Reset OneNAND */
|
||||
case 0x00f0: /* Reset OneNAND */
|
||||
onenand_reset(s, 0);
|
||||
break;
|
||||
|
||||
case 0x00e0: /* Load Data into Buffer */
|
||||
case 0x00e0: /* Load Data into Buffer */
|
||||
s->cycle = 1;
|
||||
break;
|
||||
|
||||
case 0x0090: /* Read Identification Data */
|
||||
case 0x0090: /* Read Identification Data */
|
||||
memset(s->boot[0], 0, 3 << s->shift);
|
||||
s->boot[0][0 << s->shift] = s->id.man & 0xff;
|
||||
s->boot[0][1 << s->shift] = s->id.dev & 0xff;
|
||||
@@ -718,11 +718,11 @@ static void onenand_write(void *opaque, hwaddr addr,
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xf100 ... 0xf107: /* Start addresses */
|
||||
case 0xf100 ... 0xf107: /* Start addresses */
|
||||
s->addr[offset - 0xf100] = value;
|
||||
break;
|
||||
|
||||
case 0xf200: /* Start buffer */
|
||||
case 0xf200: /* Start buffer */
|
||||
s->bufaddr = (value >> 8) & 0xf;
|
||||
if (PAGE_SHIFT == 11)
|
||||
s->count = (value & 3) ?: 4;
|
||||
@@ -730,36 +730,36 @@ static void onenand_write(void *opaque, hwaddr addr,
|
||||
s->count = (value & 1) ?: 2;
|
||||
break;
|
||||
|
||||
case 0xf220: /* Command */
|
||||
case 0xf220: /* Command */
|
||||
if (s->intstatus & (1 << 15))
|
||||
break;
|
||||
s->command = value;
|
||||
onenand_command(s);
|
||||
break;
|
||||
case 0xf221: /* System Configuration 1 */
|
||||
case 0xf221: /* System Configuration 1 */
|
||||
s->config[0] = value;
|
||||
onenand_intr_update(s);
|
||||
qemu_set_irq(s->rdy, (s->config[0] >> 7) & 1);
|
||||
break;
|
||||
case 0xf222: /* System Configuration 2 */
|
||||
case 0xf222: /* System Configuration 2 */
|
||||
s->config[1] = value;
|
||||
break;
|
||||
|
||||
case 0xf241: /* Interrupt */
|
||||
case 0xf241: /* Interrupt */
|
||||
s->intstatus &= value;
|
||||
if ((1 << 15) & ~s->intstatus)
|
||||
s->status &= ~(ONEN_ERR_CMD | ONEN_ERR_ERASE |
|
||||
ONEN_ERR_PROG | ONEN_ERR_LOAD);
|
||||
onenand_intr_update(s);
|
||||
break;
|
||||
case 0xf24c: /* Unlock Start Block Address */
|
||||
case 0xf24c: /* Unlock Start Block Address */
|
||||
s->unladdr[0] = value & (s->blocks - 1);
|
||||
/* For some reason we have to set the end address to by default
|
||||
* be same as start because the software forgets to write anything
|
||||
* in there. */
|
||||
s->unladdr[1] = value & (s->blocks - 1);
|
||||
break;
|
||||
case 0xf24d: /* Unlock End Block Address */
|
||||
case 0xf24d: /* Unlock End Block Address */
|
||||
s->unladdr[1] = value & (s->blocks - 1);
|
||||
break;
|
||||
|
||||
|
@@ -62,24 +62,24 @@ static void init_dev(tc58128_dev * dev, const char *filename)
|
||||
dev->flash_contents = g_malloc(FLASH_SIZE);
|
||||
memset(dev->flash_contents, 0xff, FLASH_SIZE);
|
||||
if (filename) {
|
||||
/* Load flash image skipping the first block */
|
||||
/* Load flash image skipping the first block */
|
||||
ret = load_image_size(filename, dev->flash_contents + 528 * 32,
|
||||
FLASH_SIZE - 528 * 32);
|
||||
if (ret < 0) {
|
||||
if (ret < 0) {
|
||||
if (!qtest_enabled()) {
|
||||
error_report("Could not load flash image %s", filename);
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
/* Build first block with number of blocks */
|
||||
} else {
|
||||
/* Build first block with number of blocks */
|
||||
blocks = DIV_ROUND_UP(ret, 528 * 32);
|
||||
dev->flash_contents[0] = blocks & 0xff;
|
||||
dev->flash_contents[1] = (blocks >> 8) & 0xff;
|
||||
dev->flash_contents[2] = (blocks >> 16) & 0xff;
|
||||
dev->flash_contents[3] = (blocks >> 24) & 0xff;
|
||||
fprintf(stderr, "loaded %d bytes for %s into flash\n", ret,
|
||||
filename);
|
||||
}
|
||||
dev->flash_contents[0] = blocks & 0xff;
|
||||
dev->flash_contents[1] = (blocks >> 8) & 0xff;
|
||||
dev->flash_contents[2] = (blocks >> 16) & 0xff;
|
||||
dev->flash_contents[3] = (blocks >> 24) & 0xff;
|
||||
fprintf(stderr, "loaded %d bytes for %s into flash\n", ret,
|
||||
filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,26 +87,26 @@ static void handle_command(tc58128_dev * dev, uint8_t command)
|
||||
{
|
||||
switch (command) {
|
||||
case 0xff:
|
||||
fprintf(stderr, "reset flash device\n");
|
||||
dev->state = WAIT;
|
||||
break;
|
||||
fprintf(stderr, "reset flash device\n");
|
||||
dev->state = WAIT;
|
||||
break;
|
||||
case 0x00:
|
||||
fprintf(stderr, "read mode 1\n");
|
||||
dev->state = READ1;
|
||||
dev->address_cycle = 0;
|
||||
break;
|
||||
fprintf(stderr, "read mode 1\n");
|
||||
dev->state = READ1;
|
||||
dev->address_cycle = 0;
|
||||
break;
|
||||
case 0x01:
|
||||
fprintf(stderr, "read mode 2\n");
|
||||
dev->state = READ2;
|
||||
dev->address_cycle = 0;
|
||||
break;
|
||||
fprintf(stderr, "read mode 2\n");
|
||||
dev->state = READ2;
|
||||
dev->address_cycle = 0;
|
||||
break;
|
||||
case 0x50:
|
||||
fprintf(stderr, "read mode 3\n");
|
||||
dev->state = READ3;
|
||||
dev->address_cycle = 0;
|
||||
break;
|
||||
fprintf(stderr, "read mode 3\n");
|
||||
dev->state = READ3;
|
||||
dev->address_cycle = 0;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "unknown flash command 0x%02x\n", command);
|
||||
fprintf(stderr, "unknown flash command 0x%02x\n", command);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
@@ -117,28 +117,28 @@ static void handle_address(tc58128_dev * dev, uint8_t data)
|
||||
case READ1:
|
||||
case READ2:
|
||||
case READ3:
|
||||
switch (dev->address_cycle) {
|
||||
case 0:
|
||||
dev->address = data;
|
||||
if (dev->state == READ2)
|
||||
dev->address |= 0x100;
|
||||
else if (dev->state == READ3)
|
||||
dev->address |= 0x200;
|
||||
break;
|
||||
case 1:
|
||||
dev->address += data * 528 * 0x100;
|
||||
break;
|
||||
case 2:
|
||||
dev->address += data * 528;
|
||||
fprintf(stderr, "address pointer in flash: 0x%08x\n",
|
||||
dev->address);
|
||||
break;
|
||||
default:
|
||||
/* Invalid data */
|
||||
switch (dev->address_cycle) {
|
||||
case 0:
|
||||
dev->address = data;
|
||||
if (dev->state == READ2)
|
||||
dev->address |= 0x100;
|
||||
else if (dev->state == READ3)
|
||||
dev->address |= 0x200;
|
||||
break;
|
||||
case 1:
|
||||
dev->address += data * 528 * 0x100;
|
||||
break;
|
||||
case 2:
|
||||
dev->address += data * 528;
|
||||
fprintf(stderr, "address pointer in flash: 0x%08x\n",
|
||||
dev->address);
|
||||
break;
|
||||
default:
|
||||
/* Invalid data */
|
||||
abort();
|
||||
}
|
||||
dev->address_cycle++;
|
||||
break;
|
||||
}
|
||||
dev->address_cycle++;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
@@ -148,7 +148,7 @@ static uint8_t handle_read(tc58128_dev * dev)
|
||||
{
|
||||
#if 0
|
||||
if (dev->address % 0x100000 == 0)
|
||||
fprintf(stderr, "reading flash at address 0x%08x\n", dev->address);
|
||||
fprintf(stderr, "reading flash at address 0x%08x\n", dev->address);
|
||||
#endif
|
||||
return dev->flash_contents[dev->address++];
|
||||
}
|
||||
@@ -163,31 +163,31 @@ static int tc58128_cb(uint16_t porta, uint16_t portb,
|
||||
int dev;
|
||||
|
||||
if ((porta & CE1) == 0)
|
||||
dev = 0;
|
||||
dev = 0;
|
||||
else if ((porta & CE2) == 0)
|
||||
dev = 1;
|
||||
dev = 1;
|
||||
else
|
||||
return 0; /* No device selected */
|
||||
return 0; /* No device selected */
|
||||
|
||||
if ((porta & RE) && (porta & WE)) {
|
||||
/* Nothing to do, assert ready and return to input state */
|
||||
*periph_portadir &= 0xff00;
|
||||
*periph_portadir |= RDY(dev);
|
||||
*periph_pdtra |= RDY(dev);
|
||||
return 1;
|
||||
/* Nothing to do, assert ready and return to input state */
|
||||
*periph_portadir &= 0xff00;
|
||||
*periph_portadir |= RDY(dev);
|
||||
*periph_pdtra |= RDY(dev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (porta & CLE) {
|
||||
/* Command */
|
||||
assert((porta & WE) == 0);
|
||||
handle_command(&tc58128_devs[dev], porta & 0x00ff);
|
||||
/* Command */
|
||||
assert((porta & WE) == 0);
|
||||
handle_command(&tc58128_devs[dev], porta & 0x00ff);
|
||||
} else if (porta & ALE) {
|
||||
assert((porta & WE) == 0);
|
||||
handle_address(&tc58128_devs[dev], porta & 0x00ff);
|
||||
assert((porta & WE) == 0);
|
||||
handle_address(&tc58128_devs[dev], porta & 0x00ff);
|
||||
} else if ((porta & RE) == 0) {
|
||||
*periph_portadir |= 0x00ff;
|
||||
*periph_pdtra &= 0xff00;
|
||||
*periph_pdtra |= handle_read(&tc58128_devs[dev]);
|
||||
*periph_portadir |= 0x00ff;
|
||||
*periph_pdtra &= 0xff00;
|
||||
*periph_pdtra |= handle_read(&tc58128_devs[dev]);
|
||||
} else {
|
||||
abort();
|
||||
}
|
||||
@@ -195,9 +195,9 @@ static int tc58128_cb(uint16_t porta, uint16_t portb,
|
||||
}
|
||||
|
||||
static sh7750_io_device tc58128 = {
|
||||
RE | WE, /* Port A triggers */
|
||||
0, /* Port B triggers */
|
||||
tc58128_cb /* Callback */
|
||||
RE | WE, /* Port A triggers */
|
||||
0, /* Port B triggers */
|
||||
tc58128_cb /* Callback */
|
||||
};
|
||||
|
||||
int tc58128_init(struct SH7750State *s, const char *zone1, const char *zone2)
|
||||
|
@@ -44,6 +44,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/datadir.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qapi-commands-machine.h"
|
||||
#include "qapi/type-helpers.h"
|
||||
|
@@ -20,6 +20,8 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/boards.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
/*
|
||||
* Report information of a machine's supported CPU topology hierarchy.
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include "qemu/lockable.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "monitor/hmp.h"
|
||||
#include "qapi/error.h"
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qom/object.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
@@ -18,6 +18,7 @@
|
||||
#include "monitor/monitor.h"
|
||||
#include "monitor/hmp-target.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/qapi-commands-misc-target.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "sysemu/hw_accel.h"
|
||||
|
@@ -36,20 +36,20 @@
|
||||
#include "trace.h"
|
||||
|
||||
/* CMD646 specific */
|
||||
#define CFR 0x50
|
||||
#define CFR_INTR_CH0 0x04
|
||||
#define CNTRL 0x51
|
||||
#define CNTRL_EN_CH0 0x04
|
||||
#define CNTRL_EN_CH1 0x08
|
||||
#define ARTTIM23 0x57
|
||||
#define ARTTIM23_INTR_CH1 0x10
|
||||
#define MRDMODE 0x71
|
||||
#define MRDMODE_INTR_CH0 0x04
|
||||
#define MRDMODE_INTR_CH1 0x08
|
||||
#define MRDMODE_BLK_CH0 0x10
|
||||
#define MRDMODE_BLK_CH1 0x20
|
||||
#define UDIDETCR0 0x73
|
||||
#define UDIDETCR1 0x7B
|
||||
#define CFR 0x50
|
||||
#define CFR_INTR_CH0 0x04
|
||||
#define CNTRL 0x51
|
||||
#define CNTRL_EN_CH0 0x04
|
||||
#define CNTRL_EN_CH1 0x08
|
||||
#define ARTTIM23 0x57
|
||||
#define ARTTIM23_INTR_CH1 0x10
|
||||
#define MRDMODE 0x71
|
||||
#define MRDMODE_INTR_CH0 0x04
|
||||
#define MRDMODE_INTR_CH1 0x08
|
||||
#define MRDMODE_BLK_CH0 0x10
|
||||
#define MRDMODE_BLK_CH1 0x20
|
||||
#define UDIDETCR0 0x73
|
||||
#define UDIDETCR1 0x7B
|
||||
|
||||
static void cmd646_update_irq(PCIDevice *pd);
|
||||
|
||||
|
@@ -318,52 +318,52 @@ static void ide_cfata_identify(IDEState *s)
|
||||
|
||||
cur_sec = s->cylinders * s->heads * s->sectors;
|
||||
|
||||
put_le16(p + 0, 0x848a); /* CF Storage Card signature */
|
||||
put_le16(p + 1, s->cylinders); /* Default cylinders */
|
||||
put_le16(p + 3, s->heads); /* Default heads */
|
||||
put_le16(p + 6, s->sectors); /* Default sectors per track */
|
||||
put_le16(p + 0, 0x848a); /* CF Storage Card signature */
|
||||
put_le16(p + 1, s->cylinders); /* Default cylinders */
|
||||
put_le16(p + 3, s->heads); /* Default heads */
|
||||
put_le16(p + 6, s->sectors); /* Default sectors per track */
|
||||
/* *(p + 7) := nb_sectors >> 16 -- see ide_cfata_identify_size */
|
||||
/* *(p + 8) := nb_sectors -- see ide_cfata_identify_size */
|
||||
padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
|
||||
put_le16(p + 22, 0x0004); /* ECC bytes */
|
||||
padstr((char *) (p + 23), s->version, 8); /* Firmware Revision */
|
||||
put_le16(p + 22, 0x0004); /* ECC bytes */
|
||||
padstr((char *) (p + 23), s->version, 8); /* Firmware Revision */
|
||||
padstr((char *) (p + 27), s->drive_model_str, 40);/* Model number */
|
||||
#if MAX_MULT_SECTORS > 1
|
||||
put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
|
||||
#else
|
||||
put_le16(p + 47, 0x0000);
|
||||
#endif
|
||||
put_le16(p + 49, 0x0f00); /* Capabilities */
|
||||
put_le16(p + 51, 0x0002); /* PIO cycle timing mode */
|
||||
put_le16(p + 52, 0x0001); /* DMA cycle timing mode */
|
||||
put_le16(p + 53, 0x0003); /* Translation params valid */
|
||||
put_le16(p + 54, s->cylinders); /* Current cylinders */
|
||||
put_le16(p + 55, s->heads); /* Current heads */
|
||||
put_le16(p + 56, s->sectors); /* Current sectors */
|
||||
put_le16(p + 57, cur_sec); /* Current capacity */
|
||||
put_le16(p + 58, cur_sec >> 16); /* Current capacity */
|
||||
if (s->mult_sectors) /* Multiple sector setting */
|
||||
put_le16(p + 49, 0x0f00); /* Capabilities */
|
||||
put_le16(p + 51, 0x0002); /* PIO cycle timing mode */
|
||||
put_le16(p + 52, 0x0001); /* DMA cycle timing mode */
|
||||
put_le16(p + 53, 0x0003); /* Translation params valid */
|
||||
put_le16(p + 54, s->cylinders); /* Current cylinders */
|
||||
put_le16(p + 55, s->heads); /* Current heads */
|
||||
put_le16(p + 56, s->sectors); /* Current sectors */
|
||||
put_le16(p + 57, cur_sec); /* Current capacity */
|
||||
put_le16(p + 58, cur_sec >> 16); /* Current capacity */
|
||||
if (s->mult_sectors) /* Multiple sector setting */
|
||||
put_le16(p + 59, 0x100 | s->mult_sectors);
|
||||
/* *(p + 60) := nb_sectors -- see ide_cfata_identify_size */
|
||||
/* *(p + 61) := nb_sectors >> 16 -- see ide_cfata_identify_size */
|
||||
put_le16(p + 63, 0x0203); /* Multiword DMA capability */
|
||||
put_le16(p + 64, 0x0001); /* Flow Control PIO support */
|
||||
put_le16(p + 65, 0x0096); /* Min. Multiword DMA cycle */
|
||||
put_le16(p + 66, 0x0096); /* Rec. Multiword DMA cycle */
|
||||
put_le16(p + 68, 0x00b4); /* Min. PIO cycle time */
|
||||
put_le16(p + 82, 0x400c); /* Command Set supported */
|
||||
put_le16(p + 83, 0x7068); /* Command Set supported */
|
||||
put_le16(p + 84, 0x4000); /* Features supported */
|
||||
put_le16(p + 85, 0x000c); /* Command Set enabled */
|
||||
put_le16(p + 86, 0x7044); /* Command Set enabled */
|
||||
put_le16(p + 87, 0x4000); /* Features enabled */
|
||||
put_le16(p + 91, 0x4060); /* Current APM level */
|
||||
put_le16(p + 129, 0x0002); /* Current features option */
|
||||
put_le16(p + 130, 0x0005); /* Reassigned sectors */
|
||||
put_le16(p + 131, 0x0001); /* Initial power mode */
|
||||
put_le16(p + 132, 0x0000); /* User signature */
|
||||
put_le16(p + 160, 0x8100); /* Power requirement */
|
||||
put_le16(p + 161, 0x8001); /* CF command set */
|
||||
put_le16(p + 63, 0x0203); /* Multiword DMA capability */
|
||||
put_le16(p + 64, 0x0001); /* Flow Control PIO support */
|
||||
put_le16(p + 65, 0x0096); /* Min. Multiword DMA cycle */
|
||||
put_le16(p + 66, 0x0096); /* Rec. Multiword DMA cycle */
|
||||
put_le16(p + 68, 0x00b4); /* Min. PIO cycle time */
|
||||
put_le16(p + 82, 0x400c); /* Command Set supported */
|
||||
put_le16(p + 83, 0x7068); /* Command Set supported */
|
||||
put_le16(p + 84, 0x4000); /* Features supported */
|
||||
put_le16(p + 85, 0x000c); /* Command Set enabled */
|
||||
put_le16(p + 86, 0x7044); /* Command Set enabled */
|
||||
put_le16(p + 87, 0x4000); /* Features enabled */
|
||||
put_le16(p + 91, 0x4060); /* Current APM level */
|
||||
put_le16(p + 129, 0x0002); /* Current features option */
|
||||
put_le16(p + 130, 0x0005); /* Reassigned sectors */
|
||||
put_le16(p + 131, 0x0001); /* Initial power mode */
|
||||
put_le16(p + 132, 0x0000); /* User signature */
|
||||
put_le16(p + 160, 0x8100); /* Power requirement */
|
||||
put_le16(p + 161, 0x8001); /* CF command set */
|
||||
|
||||
ide_cfata_identify_size(s);
|
||||
s->identify_set = 1;
|
||||
@@ -1131,13 +1131,13 @@ static void ide_cfata_metadata_inquiry(IDEState *s)
|
||||
memset(p, 0, 0x200);
|
||||
spd = ((s->mdata_size - 1) >> 9) + 1;
|
||||
|
||||
put_le16(p + 0, 0x0001); /* Data format revision */
|
||||
put_le16(p + 1, 0x0000); /* Media property: silicon */
|
||||
put_le16(p + 2, s->media_changed); /* Media status */
|
||||
put_le16(p + 3, s->mdata_size & 0xffff); /* Capacity in bytes (low) */
|
||||
put_le16(p + 4, s->mdata_size >> 16); /* Capacity in bytes (high) */
|
||||
put_le16(p + 5, spd & 0xffff); /* Sectors per device (low) */
|
||||
put_le16(p + 6, spd >> 16); /* Sectors per device (high) */
|
||||
put_le16(p + 0, 0x0001); /* Data format revision */
|
||||
put_le16(p + 1, 0x0000); /* Media property: silicon */
|
||||
put_le16(p + 2, s->media_changed); /* Media status */
|
||||
put_le16(p + 3, s->mdata_size & 0xffff); /* Capacity in bytes (low) */
|
||||
put_le16(p + 4, s->mdata_size >> 16); /* Capacity in bytes (high) */
|
||||
put_le16(p + 5, spd & 0xffff); /* Sectors per device (low) */
|
||||
put_le16(p + 6, spd >> 16); /* Sectors per device (high) */
|
||||
}
|
||||
|
||||
static void ide_cfata_metadata_read(IDEState *s)
|
||||
@@ -1153,7 +1153,7 @@ static void ide_cfata_metadata_read(IDEState *s)
|
||||
p = (uint16_t *) s->io_buffer;
|
||||
memset(p, 0, 0x200);
|
||||
|
||||
put_le16(p + 0, s->media_changed); /* Media status */
|
||||
put_le16(p + 0, s->media_changed); /* Media status */
|
||||
memcpy(p + 1, s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
|
||||
MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
|
||||
s->nsector << 9), 0x200 - 2));
|
||||
|
@@ -40,7 +40,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(MicroDriveState, MICRODRIVE)
|
||||
/***********************************************************/
|
||||
/* CF-ATA Microdrive */
|
||||
|
||||
#define METADATA_SIZE 0x20
|
||||
#define METADATA_SIZE 0x20
|
||||
|
||||
/* DSCM-1XXXX Microdrive hard disk with CF+ II / PCMCIA interface. */
|
||||
|
||||
@@ -65,29 +65,29 @@ struct MicroDriveState {
|
||||
|
||||
/* Register bitfields */
|
||||
enum md_opt {
|
||||
OPT_MODE_MMAP = 0,
|
||||
OPT_MODE_IOMAP16 = 1,
|
||||
OPT_MODE_IOMAP1 = 2,
|
||||
OPT_MODE_IOMAP2 = 3,
|
||||
OPT_MODE = 0x3f,
|
||||
OPT_LEVIREQ = 0x40,
|
||||
OPT_SRESET = 0x80,
|
||||
OPT_MODE_MMAP = 0,
|
||||
OPT_MODE_IOMAP16 = 1,
|
||||
OPT_MODE_IOMAP1 = 2,
|
||||
OPT_MODE_IOMAP2 = 3,
|
||||
OPT_MODE = 0x3f,
|
||||
OPT_LEVIREQ = 0x40,
|
||||
OPT_SRESET = 0x80,
|
||||
};
|
||||
enum md_cstat {
|
||||
STAT_INT = 0x02,
|
||||
STAT_PWRDWN = 0x04,
|
||||
STAT_XE = 0x10,
|
||||
STAT_IOIS8 = 0x20,
|
||||
STAT_SIGCHG = 0x40,
|
||||
STAT_CHANGED = 0x80,
|
||||
STAT_INT = 0x02,
|
||||
STAT_PWRDWN = 0x04,
|
||||
STAT_XE = 0x10,
|
||||
STAT_IOIS8 = 0x20,
|
||||
STAT_SIGCHG = 0x40,
|
||||
STAT_CHANGED = 0x80,
|
||||
};
|
||||
enum md_pins {
|
||||
PINS_MRDY = 0x02,
|
||||
PINS_CRDY = 0x20,
|
||||
PINS_MRDY = 0x02,
|
||||
PINS_CRDY = 0x20,
|
||||
};
|
||||
enum md_ctrl {
|
||||
CTRL_IEN = 0x02,
|
||||
CTRL_SRST = 0x04,
|
||||
CTRL_IEN = 0x02,
|
||||
CTRL_SRST = 0x04,
|
||||
};
|
||||
|
||||
static inline void md_interrupt_update(MicroDriveState *s)
|
||||
@@ -99,7 +99,7 @@ static inline void md_interrupt_update(MicroDriveState *s)
|
||||
}
|
||||
|
||||
qemu_set_irq(card->slot->irq,
|
||||
!(s->stat & STAT_INT) && /* Inverted */
|
||||
!(s->stat & STAT_INT) && /* Inverted */
|
||||
!(s->ctrl & (CTRL_IEN | CTRL_SRST)) &&
|
||||
!(s->opt & OPT_SRESET));
|
||||
}
|
||||
@@ -145,17 +145,17 @@ static uint8_t md_attr_read(PCMCIACardState *card, uint32_t at)
|
||||
at -= s->attr_base;
|
||||
|
||||
switch (at) {
|
||||
case 0x00: /* Configuration Option Register */
|
||||
case 0x00: /* Configuration Option Register */
|
||||
return s->opt;
|
||||
case 0x02: /* Card Configuration Status Register */
|
||||
case 0x02: /* Card Configuration Status Register */
|
||||
if (s->ctrl & CTRL_IEN) {
|
||||
return s->stat & ~STAT_INT;
|
||||
} else {
|
||||
return s->stat;
|
||||
}
|
||||
case 0x04: /* Pin Replacement Register */
|
||||
case 0x04: /* Pin Replacement Register */
|
||||
return (s->pins & PINS_CRDY) | 0x0c;
|
||||
case 0x06: /* Socket and Copy Register */
|
||||
case 0x06: /* Socket and Copy Register */
|
||||
return 0x00;
|
||||
#ifdef VERBOSE
|
||||
default:
|
||||
@@ -173,14 +173,14 @@ static void md_attr_write(PCMCIACardState *card, uint32_t at, uint8_t value)
|
||||
at -= s->attr_base;
|
||||
|
||||
switch (at) {
|
||||
case 0x00: /* Configuration Option Register */
|
||||
case 0x00: /* Configuration Option Register */
|
||||
s->opt = value & 0xcf;
|
||||
if (value & OPT_SRESET) {
|
||||
device_cold_reset(DEVICE(s));
|
||||
}
|
||||
md_interrupt_update(s);
|
||||
break;
|
||||
case 0x02: /* Card Configuration Status Register */
|
||||
case 0x02: /* Card Configuration Status Register */
|
||||
if ((s->stat ^ value) & STAT_PWRDWN) {
|
||||
s->pins |= PINS_CRDY;
|
||||
}
|
||||
@@ -189,11 +189,11 @@ static void md_attr_write(PCMCIACardState *card, uint32_t at, uint8_t value)
|
||||
md_interrupt_update(s);
|
||||
/* Word 170 in Identify Device must be equal to STAT_XE */
|
||||
break;
|
||||
case 0x04: /* Pin Replacement Register */
|
||||
case 0x04: /* Pin Replacement Register */
|
||||
s->pins &= PINS_CRDY;
|
||||
s->pins |= value & PINS_MRDY;
|
||||
break;
|
||||
case 0x06: /* Socket and Copy Register */
|
||||
case 0x06: /* Socket and Copy Register */
|
||||
break;
|
||||
default:
|
||||
printf("%s: Bad attribute space register %02x\n", __func__, at);
|
||||
@@ -232,7 +232,7 @@ static uint16_t md_common_read(PCMCIACardState *card, uint32_t at)
|
||||
}
|
||||
|
||||
switch (at) {
|
||||
case 0x0: /* Even RD Data */
|
||||
case 0x0: /* Even RD Data */
|
||||
case 0x8:
|
||||
return ide_data_readw(&s->bus, 0);
|
||||
|
||||
@@ -245,18 +245,18 @@ static uint16_t md_common_read(PCMCIACardState *card, uint32_t at)
|
||||
}
|
||||
s->cycle = !s->cycle;
|
||||
return ret;
|
||||
case 0x9: /* Odd RD Data */
|
||||
case 0x9: /* Odd RD Data */
|
||||
return s->io >> 8;
|
||||
case 0xd: /* Error */
|
||||
case 0xd: /* Error */
|
||||
return ide_ioport_read(&s->bus, 0x1);
|
||||
case 0xe: /* Alternate Status */
|
||||
case 0xe: /* Alternate Status */
|
||||
ifs = ide_bus_active_if(&s->bus);
|
||||
if (ifs->blk) {
|
||||
return ifs->status;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
case 0xf: /* Device Address */
|
||||
case 0xf: /* Device Address */
|
||||
ifs = ide_bus_active_if(&s->bus);
|
||||
return 0xc2 | ((~ifs->select << 2) & 0x3c);
|
||||
default:
|
||||
@@ -296,7 +296,7 @@ static void md_common_write(PCMCIACardState *card, uint32_t at, uint16_t value)
|
||||
}
|
||||
|
||||
switch (at) {
|
||||
case 0x0: /* Even WR Data */
|
||||
case 0x0: /* Even WR Data */
|
||||
case 0x8:
|
||||
ide_data_writew(&s->bus, 0, value);
|
||||
break;
|
||||
@@ -313,10 +313,10 @@ static void md_common_write(PCMCIACardState *card, uint32_t at, uint16_t value)
|
||||
s->io = value & 0xff;
|
||||
s->cycle = !s->cycle;
|
||||
break;
|
||||
case 0xd: /* Features */
|
||||
case 0xd: /* Features */
|
||||
ide_ioport_write(&s->bus, 0x1, value);
|
||||
break;
|
||||
case 0xe: /* Device Control */
|
||||
case 0xe: /* Device Control */
|
||||
s->ctrl = value;
|
||||
if (value & CTRL_SRST) {
|
||||
device_cold_reset(DEVICE(s));
|
||||
@@ -350,35 +350,35 @@ static const VMStateDescription vmstate_microdrive = {
|
||||
};
|
||||
|
||||
static const uint8_t dscm1xxxx_cis[0x14a] = {
|
||||
[0x000] = CISTPL_DEVICE, /* 5V Device Information */
|
||||
[0x002] = 0x03, /* Tuple length = 4 bytes */
|
||||
[0x004] = 0xdb, /* ID: DTYPE_FUNCSPEC, non WP, DSPEED_150NS */
|
||||
[0x006] = 0x01, /* Size = 2K bytes */
|
||||
[0x000] = CISTPL_DEVICE, /* 5V Device Information */
|
||||
[0x002] = 0x03, /* Tuple length = 4 bytes */
|
||||
[0x004] = 0xdb, /* ID: DTYPE_FUNCSPEC, non WP, DSPEED_150NS */
|
||||
[0x006] = 0x01, /* Size = 2K bytes */
|
||||
[0x008] = CISTPL_ENDMARK,
|
||||
|
||||
[0x00a] = CISTPL_DEVICE_OC, /* Additional Device Information */
|
||||
[0x00c] = 0x04, /* Tuple length = 4 byest */
|
||||
[0x00e] = 0x03, /* Conditions: Ext = 0, Vcc 3.3V, MWAIT = 1 */
|
||||
[0x010] = 0xdb, /* ID: DTYPE_FUNCSPEC, non WP, DSPEED_150NS */
|
||||
[0x012] = 0x01, /* Size = 2K bytes */
|
||||
[0x00a] = CISTPL_DEVICE_OC, /* Additional Device Information */
|
||||
[0x00c] = 0x04, /* Tuple length = 4 byest */
|
||||
[0x00e] = 0x03, /* Conditions: Ext = 0, Vcc 3.3V, MWAIT = 1 */
|
||||
[0x010] = 0xdb, /* ID: DTYPE_FUNCSPEC, non WP, DSPEED_150NS */
|
||||
[0x012] = 0x01, /* Size = 2K bytes */
|
||||
[0x014] = CISTPL_ENDMARK,
|
||||
|
||||
[0x016] = CISTPL_JEDEC_C, /* JEDEC ID */
|
||||
[0x018] = 0x02, /* Tuple length = 2 bytes */
|
||||
[0x01a] = 0xdf, /* PC Card ATA with no Vpp required */
|
||||
[0x016] = CISTPL_JEDEC_C, /* JEDEC ID */
|
||||
[0x018] = 0x02, /* Tuple length = 2 bytes */
|
||||
[0x01a] = 0xdf, /* PC Card ATA with no Vpp required */
|
||||
[0x01c] = 0x01,
|
||||
|
||||
[0x01e] = CISTPL_MANFID, /* Manufacture ID */
|
||||
[0x020] = 0x04, /* Tuple length = 4 bytes */
|
||||
[0x022] = 0xa4, /* TPLMID_MANF = 00a4 (IBM) */
|
||||
[0x01e] = CISTPL_MANFID, /* Manufacture ID */
|
||||
[0x020] = 0x04, /* Tuple length = 4 bytes */
|
||||
[0x022] = 0xa4, /* TPLMID_MANF = 00a4 (IBM) */
|
||||
[0x024] = 0x00,
|
||||
[0x026] = 0x00, /* PLMID_CARD = 0000 */
|
||||
[0x026] = 0x00, /* PLMID_CARD = 0000 */
|
||||
[0x028] = 0x00,
|
||||
|
||||
[0x02a] = CISTPL_VERS_1, /* Level 1 Version */
|
||||
[0x02c] = 0x12, /* Tuple length = 23 bytes */
|
||||
[0x02e] = 0x04, /* Major Version = JEIDA 4.2 / PCMCIA 2.1 */
|
||||
[0x030] = 0x01, /* Minor Version = 1 */
|
||||
[0x02a] = CISTPL_VERS_1, /* Level 1 Version */
|
||||
[0x02c] = 0x12, /* Tuple length = 23 bytes */
|
||||
[0x02e] = 0x04, /* Major Version = JEIDA 4.2 / PCMCIA 2.1 */
|
||||
[0x030] = 0x01, /* Minor Version = 1 */
|
||||
[0x032] = 'I',
|
||||
[0x034] = 'B',
|
||||
[0x036] = 'M',
|
||||
@@ -396,142 +396,142 @@ static const uint8_t dscm1xxxx_cis[0x14a] = {
|
||||
[0x04e] = 0x00,
|
||||
[0x050] = CISTPL_ENDMARK,
|
||||
|
||||
[0x052] = CISTPL_FUNCID, /* Function ID */
|
||||
[0x054] = 0x02, /* Tuple length = 2 bytes */
|
||||
[0x056] = 0x04, /* TPLFID_FUNCTION = Fixed Disk */
|
||||
[0x058] = 0x01, /* TPLFID_SYSINIT: POST = 1, ROM = 0 */
|
||||
[0x052] = CISTPL_FUNCID, /* Function ID */
|
||||
[0x054] = 0x02, /* Tuple length = 2 bytes */
|
||||
[0x056] = 0x04, /* TPLFID_FUNCTION = Fixed Disk */
|
||||
[0x058] = 0x01, /* TPLFID_SYSINIT: POST = 1, ROM = 0 */
|
||||
|
||||
[0x05a] = CISTPL_FUNCE, /* Function Extension */
|
||||
[0x05c] = 0x02, /* Tuple length = 2 bytes */
|
||||
[0x05e] = 0x01, /* TPLFE_TYPE = Disk Device Interface */
|
||||
[0x060] = 0x01, /* TPLFE_DATA = PC Card ATA Interface */
|
||||
[0x05a] = CISTPL_FUNCE, /* Function Extension */
|
||||
[0x05c] = 0x02, /* Tuple length = 2 bytes */
|
||||
[0x05e] = 0x01, /* TPLFE_TYPE = Disk Device Interface */
|
||||
[0x060] = 0x01, /* TPLFE_DATA = PC Card ATA Interface */
|
||||
|
||||
[0x062] = CISTPL_FUNCE, /* Function Extension */
|
||||
[0x064] = 0x03, /* Tuple length = 3 bytes */
|
||||
[0x066] = 0x02, /* TPLFE_TYPE = Basic PC Card ATA Interface */
|
||||
[0x068] = 0x08, /* TPLFE_DATA: Rotating, Unique, Single */
|
||||
[0x06a] = 0x0f, /* TPLFE_DATA: Sleep, Standby, Idle, Auto */
|
||||
[0x062] = CISTPL_FUNCE, /* Function Extension */
|
||||
[0x064] = 0x03, /* Tuple length = 3 bytes */
|
||||
[0x066] = 0x02, /* TPLFE_TYPE = Basic PC Card ATA Interface */
|
||||
[0x068] = 0x08, /* TPLFE_DATA: Rotating, Unique, Single */
|
||||
[0x06a] = 0x0f, /* TPLFE_DATA: Sleep, Standby, Idle, Auto */
|
||||
|
||||
[0x06c] = CISTPL_CONFIG, /* Configuration */
|
||||
[0x06e] = 0x05, /* Tuple length = 5 bytes */
|
||||
[0x070] = 0x01, /* TPCC_RASZ = 2 bytes, TPCC_RMSZ = 1 byte */
|
||||
[0x072] = 0x07, /* TPCC_LAST = 7 */
|
||||
[0x074] = 0x00, /* TPCC_RADR = 0200 */
|
||||
[0x06c] = CISTPL_CONFIG, /* Configuration */
|
||||
[0x06e] = 0x05, /* Tuple length = 5 bytes */
|
||||
[0x070] = 0x01, /* TPCC_RASZ = 2 bytes, TPCC_RMSZ = 1 byte */
|
||||
[0x072] = 0x07, /* TPCC_LAST = 7 */
|
||||
[0x074] = 0x00, /* TPCC_RADR = 0200 */
|
||||
[0x076] = 0x02,
|
||||
[0x078] = 0x0f, /* TPCC_RMSK = 200, 202, 204, 206 */
|
||||
[0x078] = 0x0f, /* TPCC_RMSK = 200, 202, 204, 206 */
|
||||
|
||||
[0x07a] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x07c] = 0x0b, /* Tuple length = 11 bytes */
|
||||
[0x07e] = 0xc0, /* TPCE_INDX = Memory Mode, Default, Iface */
|
||||
[0x080] = 0xc0, /* TPCE_IF = Memory, no BVDs, no WP, READY */
|
||||
[0x082] = 0xa1, /* TPCE_FS = Vcc only, no I/O, Memory, Misc */
|
||||
[0x084] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x086] = 0x55, /* NomV: 5.0 V */
|
||||
[0x088] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x08a] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x08c] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x08e] = 0x08, /* TPCE_MS = 1 window, 1 byte, Host address */
|
||||
[0x090] = 0x00, /* Window descriptor: Window length = 0 */
|
||||
[0x092] = 0x20, /* TPCE_MI: support power down mode, RW */
|
||||
[0x07a] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x07c] = 0x0b, /* Tuple length = 11 bytes */
|
||||
[0x07e] = 0xc0, /* TPCE_INDX = Memory Mode, Default, Iface */
|
||||
[0x080] = 0xc0, /* TPCE_IF = Memory, no BVDs, no WP, READY */
|
||||
[0x082] = 0xa1, /* TPCE_FS = Vcc only, no I/O, Memory, Misc */
|
||||
[0x084] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x086] = 0x55, /* NomV: 5.0 V */
|
||||
[0x088] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x08a] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x08c] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x08e] = 0x08, /* TPCE_MS = 1 window, 1 byte, Host address */
|
||||
[0x090] = 0x00, /* Window descriptor: Window length = 0 */
|
||||
[0x092] = 0x20, /* TPCE_MI: support power down mode, RW */
|
||||
|
||||
[0x094] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x096] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x098] = 0x00, /* TPCE_INDX = Memory Mode, no Default */
|
||||
[0x09a] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x09c] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x09e] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x094] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x096] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x098] = 0x00, /* TPCE_INDX = Memory Mode, no Default */
|
||||
[0x09a] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x09c] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x09e] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x0a0] = 0x1e,
|
||||
[0x0a2] = 0x3e, /* Peakl: 350 mA */
|
||||
[0x0a2] = 0x3e, /* Peakl: 350 mA */
|
||||
|
||||
[0x0a4] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0a6] = 0x0d, /* Tuple length = 13 bytes */
|
||||
[0x0a8] = 0xc1, /* TPCE_INDX = I/O and Memory Mode, Default */
|
||||
[0x0aa] = 0x41, /* TPCE_IF = I/O and Memory, no BVD, no WP */
|
||||
[0x0ac] = 0x99, /* TPCE_FS = Vcc only, I/O, Interrupt, Misc */
|
||||
[0x0ae] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x0b0] = 0x55, /* NomV: 5.0 V */
|
||||
[0x0b2] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x0b4] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x0b6] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x0b8] = 0x64, /* TPCE_IO = 16-byte boundary, 16/8 accesses */
|
||||
[0x0ba] = 0xf0, /* TPCE_IR = MASK, Level, Pulse, Share */
|
||||
[0x0bc] = 0xff, /* IRQ0..IRQ7 supported */
|
||||
[0x0be] = 0xff, /* IRQ8..IRQ15 supported */
|
||||
[0x0c0] = 0x20, /* TPCE_MI = support power down mode */
|
||||
[0x0a4] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0a6] = 0x0d, /* Tuple length = 13 bytes */
|
||||
[0x0a8] = 0xc1, /* TPCE_INDX = I/O and Memory Mode, Default */
|
||||
[0x0aa] = 0x41, /* TPCE_IF = I/O and Memory, no BVD, no WP */
|
||||
[0x0ac] = 0x99, /* TPCE_FS = Vcc only, I/O, Interrupt, Misc */
|
||||
[0x0ae] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x0b0] = 0x55, /* NomV: 5.0 V */
|
||||
[0x0b2] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x0b4] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x0b6] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x0b8] = 0x64, /* TPCE_IO = 16-byte boundary, 16/8 accesses */
|
||||
[0x0ba] = 0xf0, /* TPCE_IR = MASK, Level, Pulse, Share */
|
||||
[0x0bc] = 0xff, /* IRQ0..IRQ7 supported */
|
||||
[0x0be] = 0xff, /* IRQ8..IRQ15 supported */
|
||||
[0x0c0] = 0x20, /* TPCE_MI = support power down mode */
|
||||
|
||||
[0x0c2] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0c4] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x0c6] = 0x01, /* TPCE_INDX = I/O and Memory Mode */
|
||||
[0x0c8] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x0ca] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x0cc] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x0c2] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0c4] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x0c6] = 0x01, /* TPCE_INDX = I/O and Memory Mode */
|
||||
[0x0c8] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x0ca] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x0cc] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x0ce] = 0x1e,
|
||||
[0x0d0] = 0x3e, /* Peakl: 350 mA */
|
||||
[0x0d0] = 0x3e, /* Peakl: 350 mA */
|
||||
|
||||
[0x0d2] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0d4] = 0x12, /* Tuple length = 18 bytes */
|
||||
[0x0d6] = 0xc2, /* TPCE_INDX = I/O Primary Mode */
|
||||
[0x0d8] = 0x41, /* TPCE_IF = I/O and Memory, no BVD, no WP */
|
||||
[0x0da] = 0x99, /* TPCE_FS = Vcc only, I/O, Interrupt, Misc */
|
||||
[0x0dc] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x0de] = 0x55, /* NomV: 5.0 V */
|
||||
[0x0e0] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x0e2] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x0e4] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x0e6] = 0xea, /* TPCE_IO = 1K boundary, 16/8 access, Range */
|
||||
[0x0e8] = 0x61, /* Range: 2 fields, 2 bytes addr, 1 byte len */
|
||||
[0x0ea] = 0xf0, /* Field 1 address = 0x01f0 */
|
||||
[0x0d2] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0d4] = 0x12, /* Tuple length = 18 bytes */
|
||||
[0x0d6] = 0xc2, /* TPCE_INDX = I/O Primary Mode */
|
||||
[0x0d8] = 0x41, /* TPCE_IF = I/O and Memory, no BVD, no WP */
|
||||
[0x0da] = 0x99, /* TPCE_FS = Vcc only, I/O, Interrupt, Misc */
|
||||
[0x0dc] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x0de] = 0x55, /* NomV: 5.0 V */
|
||||
[0x0e0] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x0e2] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x0e4] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x0e6] = 0xea, /* TPCE_IO = 1K boundary, 16/8 access, Range */
|
||||
[0x0e8] = 0x61, /* Range: 2 fields, 2 bytes addr, 1 byte len */
|
||||
[0x0ea] = 0xf0, /* Field 1 address = 0x01f0 */
|
||||
[0x0ec] = 0x01,
|
||||
[0x0ee] = 0x07, /* Address block length = 8 */
|
||||
[0x0f0] = 0xf6, /* Field 2 address = 0x03f6 */
|
||||
[0x0ee] = 0x07, /* Address block length = 8 */
|
||||
[0x0f0] = 0xf6, /* Field 2 address = 0x03f6 */
|
||||
[0x0f2] = 0x03,
|
||||
[0x0f4] = 0x01, /* Address block length = 2 */
|
||||
[0x0f6] = 0xee, /* TPCE_IR = IRQ E, Level, Pulse, Share */
|
||||
[0x0f8] = 0x20, /* TPCE_MI = support power down mode */
|
||||
[0x0f4] = 0x01, /* Address block length = 2 */
|
||||
[0x0f6] = 0xee, /* TPCE_IR = IRQ E, Level, Pulse, Share */
|
||||
[0x0f8] = 0x20, /* TPCE_MI = support power down mode */
|
||||
|
||||
[0x0fa] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0fc] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x0fe] = 0x02, /* TPCE_INDX = I/O Primary Mode, no Default */
|
||||
[0x100] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x102] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x104] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x0fa] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x0fc] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x0fe] = 0x02, /* TPCE_INDX = I/O Primary Mode, no Default */
|
||||
[0x100] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x102] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x104] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x106] = 0x1e,
|
||||
[0x108] = 0x3e, /* Peakl: 350 mA */
|
||||
[0x108] = 0x3e, /* Peakl: 350 mA */
|
||||
|
||||
[0x10a] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x10c] = 0x12, /* Tuple length = 18 bytes */
|
||||
[0x10e] = 0xc3, /* TPCE_INDX = I/O Secondary Mode, Default */
|
||||
[0x110] = 0x41, /* TPCE_IF = I/O and Memory, no BVD, no WP */
|
||||
[0x112] = 0x99, /* TPCE_FS = Vcc only, I/O, Interrupt, Misc */
|
||||
[0x114] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x116] = 0x55, /* NomV: 5.0 V */
|
||||
[0x118] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x11a] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x11c] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x11e] = 0xea, /* TPCE_IO = 1K boundary, 16/8 access, Range */
|
||||
[0x120] = 0x61, /* Range: 2 fields, 2 byte addr, 1 byte len */
|
||||
[0x122] = 0x70, /* Field 1 address = 0x0170 */
|
||||
[0x10a] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x10c] = 0x12, /* Tuple length = 18 bytes */
|
||||
[0x10e] = 0xc3, /* TPCE_INDX = I/O Secondary Mode, Default */
|
||||
[0x110] = 0x41, /* TPCE_IF = I/O and Memory, no BVD, no WP */
|
||||
[0x112] = 0x99, /* TPCE_FS = Vcc only, I/O, Interrupt, Misc */
|
||||
[0x114] = 0x27, /* NomV = 1, MinV = 1, MaxV = 1, Peakl = 1 */
|
||||
[0x116] = 0x55, /* NomV: 5.0 V */
|
||||
[0x118] = 0x4d, /* MinV: 4.5 V */
|
||||
[0x11a] = 0x5d, /* MaxV: 5.5 V */
|
||||
[0x11c] = 0x4e, /* Peakl: 450 mA */
|
||||
[0x11e] = 0xea, /* TPCE_IO = 1K boundary, 16/8 access, Range */
|
||||
[0x120] = 0x61, /* Range: 2 fields, 2 byte addr, 1 byte len */
|
||||
[0x122] = 0x70, /* Field 1 address = 0x0170 */
|
||||
[0x124] = 0x01,
|
||||
[0x126] = 0x07, /* Address block length = 8 */
|
||||
[0x128] = 0x76, /* Field 2 address = 0x0376 */
|
||||
[0x126] = 0x07, /* Address block length = 8 */
|
||||
[0x128] = 0x76, /* Field 2 address = 0x0376 */
|
||||
[0x12a] = 0x03,
|
||||
[0x12c] = 0x01, /* Address block length = 2 */
|
||||
[0x12e] = 0xee, /* TPCE_IR = IRQ E, Level, Pulse, Share */
|
||||
[0x130] = 0x20, /* TPCE_MI = support power down mode */
|
||||
[0x12c] = 0x01, /* Address block length = 2 */
|
||||
[0x12e] = 0xee, /* TPCE_IR = IRQ E, Level, Pulse, Share */
|
||||
[0x130] = 0x20, /* TPCE_MI = support power down mode */
|
||||
|
||||
[0x132] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x134] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x136] = 0x03, /* TPCE_INDX = I/O Secondary Mode */
|
||||
[0x138] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x13a] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x13c] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x132] = CISTPL_CFTABLE_ENTRY, /* 16-bit PC Card Configuration */
|
||||
[0x134] = 0x06, /* Tuple length = 6 bytes */
|
||||
[0x136] = 0x03, /* TPCE_INDX = I/O Secondary Mode */
|
||||
[0x138] = 0x01, /* TPCE_FS = Vcc only, no I/O, no Memory */
|
||||
[0x13a] = 0x21, /* NomV = 1, MinV = 0, MaxV = 0, Peakl = 1 */
|
||||
[0x13c] = 0xb5, /* NomV: 3.3 V */
|
||||
[0x13e] = 0x1e,
|
||||
[0x140] = 0x3e, /* Peakl: 350 mA */
|
||||
[0x140] = 0x3e, /* Peakl: 350 mA */
|
||||
|
||||
[0x142] = CISTPL_NO_LINK, /* No Link */
|
||||
[0x144] = 0x00, /* Tuple length = 0 bytes */
|
||||
[0x142] = CISTPL_NO_LINK, /* No Link */
|
||||
[0x144] = 0x00, /* Tuple length = 0 bytes */
|
||||
|
||||
[0x146] = CISTPL_END, /* Tuple End */
|
||||
[0x146] = CISTPL_END, /* Tuple End */
|
||||
};
|
||||
|
||||
#define TYPE_DSCM1XXXX "dscm1xxxx"
|
||||
|
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/i386/apic_internal.h"
|
||||
#include "hw/i386/apic.h"
|
||||
#include "hw/intc/ioapic.h"
|
||||
|
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/bitmap.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/core/cpu.h"
|
||||
|
@@ -44,6 +44,8 @@
|
||||
#include "sysemu/tpm.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "hw/block/flash.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
static void virt_flash_create(LoongArchMachineState *lams)
|
||||
{
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "hw/block/fdc.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "ui/console.h"
|
||||
#include "target/m68k/cpu.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
@@ -45,6 +45,7 @@
|
||||
#include "hw/block/swim.h"
|
||||
#include "net/net.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/qtest.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "sysemu/reset.h"
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "bootinfo.h"
|
||||
#include "net/net.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/qtest.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "sysemu/reset.h"
|
||||
|
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/mem/memory-device.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/boards.h"
|
||||
|
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/sysbus.h"
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include "sysemu/device_tree.h"
|
||||
#include "sysemu/qtest.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
#include <libfdt.h>
|
||||
|
||||
|
@@ -33,6 +33,7 @@
|
||||
#include "qemu/units.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "exec/address-spaces.h" /* get_system_memory() */
|
||||
#include "hw/irq.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
|
@@ -1,12 +1,14 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/memalign.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "cpu.h"
|
||||
#include "helper_regs.h"
|
||||
#include "hw/ppc/spapr.h"
|
||||
#include "mmu-hash64.h"
|
||||
#include "mmu-book3s-v3.h"
|
||||
|
||||
|
||||
static inline bool valid_ptex(PowerPCCPU *cpu, target_ulong ptex)
|
||||
{
|
||||
/*
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "qemu/cutils.h"
|
||||
#include "hw/riscv/opentitan.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/misc/unimp.h"
|
||||
#include "hw/riscv/boot.h"
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include "hw/boards.h"
|
||||
#include "hw/riscv/shakti_c.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/intc/sifive_plic.h"
|
||||
#include "hw/intc/riscv_aclint.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "hw/acpi/aml-build.h"
|
||||
#include "hw/acpi/utils.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/riscv/virt.h"
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include <linux/vfio.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/display/edid.h"
|
||||
#include "ui/console.h"
|
||||
#include "qapi/error.h"
|
||||
|
@@ -12,6 +12,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/units.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/hw.h"
|
||||
#include "hw/nvram/fw_cfg.h"
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/units.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include <linux/vfio.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
|
@@ -35,6 +35,8 @@ static void xen_init_pv(MachineState *machine)
|
||||
DriveInfo *dinfo;
|
||||
int i;
|
||||
|
||||
setup_xen_backend_ops();
|
||||
|
||||
/* Initialize backend core & drivers */
|
||||
xen_be_init();
|
||||
|
||||
|
@@ -53,22 +53,22 @@ void nand_setio(DeviceState *dev, uint32_t value);
|
||||
uint32_t nand_getio(DeviceState *dev);
|
||||
uint32_t nand_getbuswidth(DeviceState *dev);
|
||||
|
||||
#define NAND_MFR_TOSHIBA 0x98
|
||||
#define NAND_MFR_SAMSUNG 0xec
|
||||
#define NAND_MFR_FUJITSU 0x04
|
||||
#define NAND_MFR_NATIONAL 0x8f
|
||||
#define NAND_MFR_RENESAS 0x07
|
||||
#define NAND_MFR_STMICRO 0x20
|
||||
#define NAND_MFR_HYNIX 0xad
|
||||
#define NAND_MFR_MICRON 0x2c
|
||||
#define NAND_MFR_TOSHIBA 0x98
|
||||
#define NAND_MFR_SAMSUNG 0xec
|
||||
#define NAND_MFR_FUJITSU 0x04
|
||||
#define NAND_MFR_NATIONAL 0x8f
|
||||
#define NAND_MFR_RENESAS 0x07
|
||||
#define NAND_MFR_STMICRO 0x20
|
||||
#define NAND_MFR_HYNIX 0xad
|
||||
#define NAND_MFR_MICRON 0x2c
|
||||
|
||||
/* onenand.c */
|
||||
void *onenand_raw_otp(DeviceState *onenand_device);
|
||||
|
||||
/* ecc.c */
|
||||
typedef struct {
|
||||
uint8_t cp; /* Column parity */
|
||||
uint16_t lp[2]; /* Line parity */
|
||||
uint8_t cp; /* Column parity */
|
||||
uint16_t lp[2]; /* Line parity */
|
||||
uint16_t count;
|
||||
} ECCState;
|
||||
|
||||
|
@@ -30,7 +30,7 @@
|
||||
#include "qemu/rcu_queue.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "qemu/plugin.h"
|
||||
#include "qemu/plugin-event.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
typedef int (*WriteCoreDumpFunction)(const void *buf, size_t size,
|
||||
|
@@ -38,32 +38,32 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
|
||||
|
||||
/* Bits of HD_STATUS */
|
||||
#define ERR_STAT 0x01
|
||||
#define INDEX_STAT 0x02
|
||||
#define ECC_STAT 0x04 /* Corrected error */
|
||||
#define DRQ_STAT 0x08
|
||||
#define SEEK_STAT 0x10
|
||||
#define SRV_STAT 0x10
|
||||
#define WRERR_STAT 0x20
|
||||
#define READY_STAT 0x40
|
||||
#define BUSY_STAT 0x80
|
||||
#define ERR_STAT 0x01
|
||||
#define INDEX_STAT 0x02
|
||||
#define ECC_STAT 0x04 /* Corrected error */
|
||||
#define DRQ_STAT 0x08
|
||||
#define SEEK_STAT 0x10
|
||||
#define SRV_STAT 0x10
|
||||
#define WRERR_STAT 0x20
|
||||
#define READY_STAT 0x40
|
||||
#define BUSY_STAT 0x80
|
||||
|
||||
/* Bits for HD_ERROR */
|
||||
#define MARK_ERR 0x01 /* Bad address mark */
|
||||
#define TRK0_ERR 0x02 /* couldn't find track 0 */
|
||||
#define ABRT_ERR 0x04 /* Command aborted */
|
||||
#define MCR_ERR 0x08 /* media change request */
|
||||
#define ID_ERR 0x10 /* ID field not found */
|
||||
#define MC_ERR 0x20 /* media changed */
|
||||
#define ECC_ERR 0x40 /* Uncorrectable ECC error */
|
||||
#define BBD_ERR 0x80 /* pre-EIDE meaning: block marked bad */
|
||||
#define ICRC_ERR 0x80 /* new meaning: CRC error during transfer */
|
||||
#define MARK_ERR 0x01 /* Bad address mark */
|
||||
#define TRK0_ERR 0x02 /* couldn't find track 0 */
|
||||
#define ABRT_ERR 0x04 /* Command aborted */
|
||||
#define MCR_ERR 0x08 /* media change request */
|
||||
#define ID_ERR 0x10 /* ID field not found */
|
||||
#define MC_ERR 0x20 /* media changed */
|
||||
#define ECC_ERR 0x40 /* Uncorrectable ECC error */
|
||||
#define BBD_ERR 0x80 /* pre-EIDE meaning: block marked bad */
|
||||
#define ICRC_ERR 0x80 /* new meaning: CRC error during transfer */
|
||||
|
||||
/* Bits of HD_NSECTOR */
|
||||
#define CD 0x01
|
||||
#define IO 0x02
|
||||
#define REL 0x04
|
||||
#define TAG_MASK 0xf8
|
||||
#define CD 0x01
|
||||
#define IO 0x02
|
||||
#define REL 0x04
|
||||
#define TAG_MASK 0xf8
|
||||
|
||||
/* Bits of Device Control register */
|
||||
#define IDE_CTRL_HOB 0x80
|
||||
@@ -71,50 +71,50 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
#define IDE_CTRL_DISABLE_IRQ 0x02
|
||||
|
||||
/* ACS-2 T13/2015-D Table B.2 Command codes */
|
||||
#define WIN_NOP 0x00
|
||||
#define WIN_NOP 0x00
|
||||
/* reserved 0x01..0x02 */
|
||||
#define CFA_REQ_EXT_ERROR_CODE 0x03 /* CFA Request Extended Error Code */
|
||||
#define CFA_REQ_EXT_ERROR_CODE 0x03 /* CFA Request Extended Error Code */
|
||||
/* reserved 0x04..0x05 */
|
||||
#define WIN_DSM 0x06
|
||||
/* reserved 0x07 */
|
||||
#define WIN_DEVICE_RESET 0x08
|
||||
#define WIN_DEVICE_RESET 0x08
|
||||
/* reserved 0x09..0x0a */
|
||||
/* REQUEST SENSE DATA EXT 0x0B */
|
||||
/* reserved 0x0C..0x0F */
|
||||
#define WIN_RECAL 0x10 /* obsolete since ATA4 */
|
||||
/* obsolete since ATA3, retired in ATA4 0x11..0x1F */
|
||||
#define WIN_READ 0x20 /* 28-Bit */
|
||||
#define WIN_READ 0x20 /* 28-Bit */
|
||||
#define WIN_READ_ONCE 0x21 /* 28-Bit w/o retries, obsolete since ATA5 */
|
||||
/* obsolete since ATA4 0x22..0x23 */
|
||||
#define WIN_READ_EXT 0x24 /* 48-Bit */
|
||||
#define WIN_READDMA_EXT 0x25 /* 48-Bit */
|
||||
#define WIN_READ_EXT 0x24 /* 48-Bit */
|
||||
#define WIN_READDMA_EXT 0x25 /* 48-Bit */
|
||||
#define WIN_READDMA_QUEUED_EXT 0x26 /* 48-Bit, obsolete since ACS2 */
|
||||
#define WIN_READ_NATIVE_MAX_EXT 0x27 /* 48-Bit */
|
||||
#define WIN_READ_NATIVE_MAX_EXT 0x27 /* 48-Bit */
|
||||
/* reserved 0x28 */
|
||||
#define WIN_MULTREAD_EXT 0x29 /* 48-Bit */
|
||||
#define WIN_MULTREAD_EXT 0x29 /* 48-Bit */
|
||||
/* READ STREAM DMA EXT 0x2A */
|
||||
/* READ STREAM EXT 0x2B */
|
||||
/* reserved 0x2C..0x2E */
|
||||
/* READ LOG EXT 0x2F */
|
||||
#define WIN_WRITE 0x30 /* 28-Bit */
|
||||
#define WIN_WRITE 0x30 /* 28-Bit */
|
||||
#define WIN_WRITE_ONCE 0x31 /* 28-Bit w/o retries, obsolete since ATA5 */
|
||||
/* obsolete since ATA4 0x32..0x33 */
|
||||
#define WIN_WRITE_EXT 0x34 /* 48-Bit */
|
||||
#define WIN_WRITEDMA_EXT 0x35 /* 48-Bit */
|
||||
#define WIN_WRITEDMA_QUEUED_EXT 0x36 /* 48-Bit */
|
||||
#define WIN_WRITE_EXT 0x34 /* 48-Bit */
|
||||
#define WIN_WRITEDMA_EXT 0x35 /* 48-Bit */
|
||||
#define WIN_WRITEDMA_QUEUED_EXT 0x36 /* 48-Bit */
|
||||
#define WIN_SET_MAX_EXT 0x37 /* 48-Bit, obsolete since ACS2 */
|
||||
#define WIN_SET_MAX_EXT 0x37 /* 48-Bit */
|
||||
#define CFA_WRITE_SECT_WO_ERASE 0x38 /* CFA Write Sectors without erase */
|
||||
#define WIN_MULTWRITE_EXT 0x39 /* 48-Bit */
|
||||
#define WIN_SET_MAX_EXT 0x37 /* 48-Bit */
|
||||
#define CFA_WRITE_SECT_WO_ERASE 0x38 /* CFA Write Sectors without erase */
|
||||
#define WIN_MULTWRITE_EXT 0x39 /* 48-Bit */
|
||||
/* WRITE STREAM DMA EXT 0x3A */
|
||||
/* WRITE STREAM EXT 0x3B */
|
||||
#define WIN_WRITE_VERIFY 0x3C /* 28-Bit, obsolete since ATA4 */
|
||||
/* WRITE DMA FUA EXT 0x3D */
|
||||
/* obsolete since ACS2 0x3E */
|
||||
/* WRITE LOG EXT 0x3F */
|
||||
#define WIN_VERIFY 0x40 /* 28-Bit - Read Verify Sectors */
|
||||
#define WIN_VERIFY 0x40 /* 28-Bit - Read Verify Sectors */
|
||||
#define WIN_VERIFY_ONCE 0x41 /* 28-Bit - w/o retries, obsolete since ATA5 */
|
||||
#define WIN_VERIFY_EXT 0x42 /* 48-Bit */
|
||||
#define WIN_VERIFY_EXT 0x42 /* 48-Bit */
|
||||
/* reserved 0x43..0x44 */
|
||||
/* WRITE UNCORRECTABLE EXT 0x45 */
|
||||
/* reserved 0x46 */
|
||||
@@ -136,11 +136,11 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
#define WIN_SEEK 0x70 /* obsolete since ATA7 */
|
||||
/* reserved 0x71-0x7F */
|
||||
/* vendor specific 0x80-0x86 */
|
||||
#define CFA_TRANSLATE_SECTOR 0x87 /* CFA Translate Sector */
|
||||
#define CFA_TRANSLATE_SECTOR 0x87 /* CFA Translate Sector */
|
||||
/* vendor specific 0x88-0x8F */
|
||||
#define WIN_DIAGNOSE 0x90
|
||||
#define WIN_DIAGNOSE 0x90
|
||||
#define WIN_SPECIFY 0x91 /* set drive geometry translation, obsolete since ATA6 */
|
||||
#define WIN_DOWNLOAD_MICROCODE 0x92
|
||||
#define WIN_DOWNLOAD_MICROCODE 0x92
|
||||
/* DOWNLOAD MICROCODE DMA 0x93 */
|
||||
#define WIN_STANDBYNOW2 0x94 /* retired in ATA4 */
|
||||
#define WIN_IDLEIMMEDIATE2 0x95 /* force drive to become "ready", retired in ATA4 */
|
||||
@@ -150,31 +150,31 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
#define WIN_SLEEPNOW2 0x99 /* retired in ATA4 */
|
||||
/* vendor specific 0x9A */
|
||||
/* reserved 0x9B..0x9F */
|
||||
#define WIN_PACKETCMD 0xA0 /* Send a packet command. */
|
||||
#define WIN_PIDENTIFY 0xA1 /* identify ATAPI device */
|
||||
#define WIN_PACKETCMD 0xA0 /* Send a packet command. */
|
||||
#define WIN_PIDENTIFY 0xA1 /* identify ATAPI device */
|
||||
#define WIN_QUEUED_SERVICE 0xA2 /* obsolete since ACS2 */
|
||||
/* reserved 0xA3..0xAF */
|
||||
#define WIN_SMART 0xB0 /* self-monitoring and reporting */
|
||||
#define WIN_SMART 0xB0 /* self-monitoring and reporting */
|
||||
/* Device Configuration Overlay 0xB1 */
|
||||
/* reserved 0xB2..0xB3 */
|
||||
/* Sanitize Device 0xB4 */
|
||||
/* reserved 0xB5 */
|
||||
/* NV Cache 0xB6 */
|
||||
/* reserved for CFA 0xB7..0xBB */
|
||||
#define CFA_ACCESS_METADATA_STORAGE 0xB8
|
||||
#define CFA_ACCESS_METADATA_STORAGE 0xB8
|
||||
/* reserved 0xBC..0xBF */
|
||||
#define CFA_ERASE_SECTORS 0xC0 /* microdrives implement as NOP */
|
||||
#define CFA_ERASE_SECTORS 0xC0 /* microdrives implement as NOP */
|
||||
/* vendor specific 0xC1..0xC3 */
|
||||
#define WIN_MULTREAD 0xC4 /* read sectors using multiple mode*/
|
||||
#define WIN_MULTWRITE 0xC5 /* write sectors using multiple mode */
|
||||
#define WIN_SETMULT 0xC6 /* enable/disable multiple mode */
|
||||
#define WIN_MULTREAD 0xC4 /* read sectors using multiple mode*/
|
||||
#define WIN_MULTWRITE 0xC5 /* write sectors using multiple mode */
|
||||
#define WIN_SETMULT 0xC6 /* enable/disable multiple mode */
|
||||
#define WIN_READDMA_QUEUED 0xC7 /* read sectors using Queued DMA transfers, obsolete since ACS2 */
|
||||
#define WIN_READDMA 0xC8 /* read sectors using DMA transfers */
|
||||
#define WIN_READDMA 0xC8 /* read sectors using DMA transfers */
|
||||
#define WIN_READDMA_ONCE 0xC9 /* 28-Bit - w/o retries, obsolete since ATA5 */
|
||||
#define WIN_WRITEDMA 0xCA /* write sectors using DMA transfers */
|
||||
#define WIN_WRITEDMA 0xCA /* write sectors using DMA transfers */
|
||||
#define WIN_WRITEDMA_ONCE 0xCB /* 28-Bit - w/o retries, obsolete since ATA5 */
|
||||
#define WIN_WRITEDMA_QUEUED 0xCC /* write sectors using Queued DMA transfers, obsolete since ACS2 */
|
||||
#define CFA_WRITE_MULTI_WO_ERASE 0xCD /* CFA Write multiple without erase */
|
||||
#define WIN_WRITEDMA_QUEUED 0xCC /* write sectors using Queued DMA transfers, obsolete since ACS2 */
|
||||
#define CFA_WRITE_MULTI_WO_ERASE 0xCD /* CFA Write multiple without erase */
|
||||
/* WRITE MULTIPLE FUA EXT 0xCE */
|
||||
/* reserved 0xCF..0xDO */
|
||||
/* CHECK MEDIA CARD TYPE 0xD1 */
|
||||
@@ -184,33 +184,33 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
/* obsolete since ATA3, retired in ATA4 0xDB..0xDD */
|
||||
#define WIN_DOORLOCK 0xDE /* lock door on removable drives, obsolete since ATA8 */
|
||||
#define WIN_DOORUNLOCK 0xDF /* unlock door on removable drives, obsolete since ATA8 */
|
||||
#define WIN_STANDBYNOW1 0xE0
|
||||
#define WIN_IDLEIMMEDIATE 0xE1 /* force drive to become "ready" */
|
||||
#define WIN_STANDBY 0xE2 /* Set device in Standby Mode */
|
||||
#define WIN_SETIDLE1 0xE3
|
||||
#define WIN_READ_BUFFER 0xE4 /* force read only 1 sector */
|
||||
#define WIN_CHECKPOWERMODE1 0xE5
|
||||
#define WIN_SLEEPNOW1 0xE6
|
||||
#define WIN_FLUSH_CACHE 0xE7
|
||||
#define WIN_WRITE_BUFFER 0xE8 /* force write only 1 sector */
|
||||
#define WIN_STANDBYNOW1 0xE0
|
||||
#define WIN_IDLEIMMEDIATE 0xE1 /* force drive to become "ready" */
|
||||
#define WIN_STANDBY 0xE2 /* Set device in Standby Mode */
|
||||
#define WIN_SETIDLE1 0xE3
|
||||
#define WIN_READ_BUFFER 0xE4 /* force read only 1 sector */
|
||||
#define WIN_CHECKPOWERMODE1 0xE5
|
||||
#define WIN_SLEEPNOW1 0xE6
|
||||
#define WIN_FLUSH_CACHE 0xE7
|
||||
#define WIN_WRITE_BUFFER 0xE8 /* force write only 1 sector */
|
||||
/* READ BUFFER DMA 0xE9 */
|
||||
#define WIN_FLUSH_CACHE_EXT 0xEA /* 48-Bit */
|
||||
#define WIN_FLUSH_CACHE_EXT 0xEA /* 48-Bit */
|
||||
/* WRITE BUFFER DMA 0xEB */
|
||||
#define WIN_IDENTIFY 0xEC /* ask drive to identify itself */
|
||||
#define WIN_IDENTIFY 0xEC /* ask drive to identify itself */
|
||||
#define WIN_MEDIAEJECT 0xED /* obsolete since ATA8 */
|
||||
/* obsolete since ATA4 0xEE */
|
||||
#define WIN_SETFEATURES 0xEF /* set special drive features */
|
||||
#define WIN_SETFEATURES 0xEF /* set special drive features */
|
||||
#define IBM_SENSE_CONDITION 0xF0 /* measure disk temperature, vendor specific */
|
||||
#define WIN_SECURITY_SET_PASS 0xF1
|
||||
#define WIN_SECURITY_UNLOCK 0xF2
|
||||
#define WIN_SECURITY_ERASE_PREPARE 0xF3
|
||||
#define WIN_SECURITY_ERASE_UNIT 0xF4
|
||||
#define WIN_SECURITY_FREEZE_LOCK 0xF5
|
||||
#define WIN_SECURITY_SET_PASS 0xF1
|
||||
#define WIN_SECURITY_UNLOCK 0xF2
|
||||
#define WIN_SECURITY_ERASE_PREPARE 0xF3
|
||||
#define WIN_SECURITY_ERASE_UNIT 0xF4
|
||||
#define WIN_SECURITY_FREEZE_LOCK 0xF5
|
||||
#define CFA_WEAR_LEVEL 0xF5 /* microdrives implement as NOP; not specified in T13! */
|
||||
#define WIN_SECURITY_DISABLE 0xF6
|
||||
#define WIN_SECURITY_DISABLE 0xF6
|
||||
/* vendor specific 0xF7 */
|
||||
#define WIN_READ_NATIVE_MAX 0xF8 /* return the native maximum address */
|
||||
#define WIN_SET_MAX 0xF9
|
||||
#define WIN_READ_NATIVE_MAX 0xF8 /* return the native maximum address */
|
||||
#define WIN_SET_MAX 0xF9
|
||||
/* vendor specific 0xFA..0xFF */
|
||||
|
||||
/* set to 1 set disable mult support */
|
||||
@@ -231,68 +231,68 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
|
||||
/* The generic packet command opcodes for CD/DVD Logical Units,
|
||||
* From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
|
||||
#define GPCMD_BLANK 0xa1
|
||||
#define GPCMD_CLOSE_TRACK 0x5b
|
||||
#define GPCMD_FLUSH_CACHE 0x35
|
||||
#define GPCMD_FORMAT_UNIT 0x04
|
||||
#define GPCMD_GET_CONFIGURATION 0x46
|
||||
#define GPCMD_BLANK 0xa1
|
||||
#define GPCMD_CLOSE_TRACK 0x5b
|
||||
#define GPCMD_FLUSH_CACHE 0x35
|
||||
#define GPCMD_FORMAT_UNIT 0x04
|
||||
#define GPCMD_GET_CONFIGURATION 0x46
|
||||
#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
|
||||
#define GPCMD_GET_PERFORMANCE 0xac
|
||||
#define GPCMD_INQUIRY 0x12
|
||||
#define GPCMD_LOAD_UNLOAD 0xa6
|
||||
#define GPCMD_MECHANISM_STATUS 0xbd
|
||||
#define GPCMD_MODE_SELECT_10 0x55
|
||||
#define GPCMD_MODE_SENSE_10 0x5a
|
||||
#define GPCMD_PAUSE_RESUME 0x4b
|
||||
#define GPCMD_PLAY_AUDIO_10 0x45
|
||||
#define GPCMD_PLAY_AUDIO_MSF 0x47
|
||||
#define GPCMD_PLAY_AUDIO_TI 0x48
|
||||
#define GPCMD_PLAY_CD 0xbc
|
||||
#define GPCMD_GET_PERFORMANCE 0xac
|
||||
#define GPCMD_INQUIRY 0x12
|
||||
#define GPCMD_LOAD_UNLOAD 0xa6
|
||||
#define GPCMD_MECHANISM_STATUS 0xbd
|
||||
#define GPCMD_MODE_SELECT_10 0x55
|
||||
#define GPCMD_MODE_SENSE_10 0x5a
|
||||
#define GPCMD_PAUSE_RESUME 0x4b
|
||||
#define GPCMD_PLAY_AUDIO_10 0x45
|
||||
#define GPCMD_PLAY_AUDIO_MSF 0x47
|
||||
#define GPCMD_PLAY_AUDIO_TI 0x48
|
||||
#define GPCMD_PLAY_CD 0xbc
|
||||
#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
|
||||
#define GPCMD_READ_10 0x28
|
||||
#define GPCMD_READ_12 0xa8
|
||||
#define GPCMD_READ_CDVD_CAPACITY 0x25
|
||||
#define GPCMD_READ_CD 0xbe
|
||||
#define GPCMD_READ_CD_MSF 0xb9
|
||||
#define GPCMD_READ_DISC_INFO 0x51
|
||||
#define GPCMD_READ_DVD_STRUCTURE 0xad
|
||||
#define GPCMD_READ_FORMAT_CAPACITIES 0x23
|
||||
#define GPCMD_READ_HEADER 0x44
|
||||
#define GPCMD_READ_TRACK_RZONE_INFO 0x52
|
||||
#define GPCMD_READ_SUBCHANNEL 0x42
|
||||
#define GPCMD_READ_TOC_PMA_ATIP 0x43
|
||||
#define GPCMD_REPAIR_RZONE_TRACK 0x58
|
||||
#define GPCMD_REPORT_KEY 0xa4
|
||||
#define GPCMD_REQUEST_SENSE 0x03
|
||||
#define GPCMD_RESERVE_RZONE_TRACK 0x53
|
||||
#define GPCMD_SCAN 0xba
|
||||
#define GPCMD_SEEK 0x2b
|
||||
#define GPCMD_SEND_DVD_STRUCTURE 0xad
|
||||
#define GPCMD_SEND_EVENT 0xa2
|
||||
#define GPCMD_SEND_KEY 0xa3
|
||||
#define GPCMD_SEND_OPC 0x54
|
||||
#define GPCMD_SET_READ_AHEAD 0xa7
|
||||
#define GPCMD_SET_STREAMING 0xb6
|
||||
#define GPCMD_START_STOP_UNIT 0x1b
|
||||
#define GPCMD_STOP_PLAY_SCAN 0x4e
|
||||
#define GPCMD_TEST_UNIT_READY 0x00
|
||||
#define GPCMD_VERIFY_10 0x2f
|
||||
#define GPCMD_WRITE_10 0x2a
|
||||
#define GPCMD_WRITE_AND_VERIFY_10 0x2e
|
||||
#define GPCMD_READ_10 0x28
|
||||
#define GPCMD_READ_12 0xa8
|
||||
#define GPCMD_READ_CDVD_CAPACITY 0x25
|
||||
#define GPCMD_READ_CD 0xbe
|
||||
#define GPCMD_READ_CD_MSF 0xb9
|
||||
#define GPCMD_READ_DISC_INFO 0x51
|
||||
#define GPCMD_READ_DVD_STRUCTURE 0xad
|
||||
#define GPCMD_READ_FORMAT_CAPACITIES 0x23
|
||||
#define GPCMD_READ_HEADER 0x44
|
||||
#define GPCMD_READ_TRACK_RZONE_INFO 0x52
|
||||
#define GPCMD_READ_SUBCHANNEL 0x42
|
||||
#define GPCMD_READ_TOC_PMA_ATIP 0x43
|
||||
#define GPCMD_REPAIR_RZONE_TRACK 0x58
|
||||
#define GPCMD_REPORT_KEY 0xa4
|
||||
#define GPCMD_REQUEST_SENSE 0x03
|
||||
#define GPCMD_RESERVE_RZONE_TRACK 0x53
|
||||
#define GPCMD_SCAN 0xba
|
||||
#define GPCMD_SEEK 0x2b
|
||||
#define GPCMD_SEND_DVD_STRUCTURE 0xad
|
||||
#define GPCMD_SEND_EVENT 0xa2
|
||||
#define GPCMD_SEND_KEY 0xa3
|
||||
#define GPCMD_SEND_OPC 0x54
|
||||
#define GPCMD_SET_READ_AHEAD 0xa7
|
||||
#define GPCMD_SET_STREAMING 0xb6
|
||||
#define GPCMD_START_STOP_UNIT 0x1b
|
||||
#define GPCMD_STOP_PLAY_SCAN 0x4e
|
||||
#define GPCMD_TEST_UNIT_READY 0x00
|
||||
#define GPCMD_VERIFY_10 0x2f
|
||||
#define GPCMD_WRITE_10 0x2a
|
||||
#define GPCMD_WRITE_AND_VERIFY_10 0x2e
|
||||
/* This is listed as optional in ATAPI 2.6, but is (curiously)
|
||||
* missing from Mt. Fuji, Table 57. It _is_ mentioned in Mt. Fuji
|
||||
* Table 377 as an MMC command for SCSi devices though... Most ATAPI
|
||||
* drives support it. */
|
||||
#define GPCMD_SET_SPEED 0xbb
|
||||
#define GPCMD_SET_SPEED 0xbb
|
||||
/* This seems to be a SCSI specific CD-ROM opcode
|
||||
* to play data at track/index */
|
||||
#define GPCMD_PLAYAUDIO_TI 0x48
|
||||
#define GPCMD_PLAYAUDIO_TI 0x48
|
||||
/*
|
||||
* From MS Media Status Notification Support Specification. For
|
||||
* older drives only.
|
||||
*/
|
||||
#define GPCMD_GET_MEDIA_STATUS 0xda
|
||||
#define GPCMD_MODE_SENSE_6 0x1a
|
||||
#define GPCMD_GET_MEDIA_STATUS 0xda
|
||||
#define GPCMD_MODE_SENSE_6 0x1a
|
||||
|
||||
#define ATAPI_INT_REASON_CD 0x01 /* 0 = data transfer */
|
||||
#define ATAPI_INT_REASON_IO 0x02 /* 1 = transfer to the host */
|
||||
|
26
include/qemu/plugin-event.h
Normal file
26
include/qemu/plugin-event.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2017, Emilio G. Cota <cota@braap.org>
|
||||
*
|
||||
* License: GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
#ifndef QEMU_PLUGIN_EVENT_H
|
||||
#define QEMU_PLUGIN_EVENT_H
|
||||
|
||||
/*
|
||||
* Events that plugins can subscribe to.
|
||||
*/
|
||||
enum qemu_plugin_event {
|
||||
QEMU_PLUGIN_EV_VCPU_INIT,
|
||||
QEMU_PLUGIN_EV_VCPU_EXIT,
|
||||
QEMU_PLUGIN_EV_VCPU_TB_TRANS,
|
||||
QEMU_PLUGIN_EV_VCPU_IDLE,
|
||||
QEMU_PLUGIN_EV_VCPU_RESUME,
|
||||
QEMU_PLUGIN_EV_VCPU_SYSCALL,
|
||||
QEMU_PLUGIN_EV_VCPU_SYSCALL_RET,
|
||||
QEMU_PLUGIN_EV_FLUSH,
|
||||
QEMU_PLUGIN_EV_ATEXIT,
|
||||
QEMU_PLUGIN_EV_MAX, /* total number of plugin events we support */
|
||||
};
|
||||
|
||||
#endif /* QEMU_PLUGIN_EVENT_H */
|
@@ -12,23 +12,9 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/plugin-event.h"
|
||||
#include "exec/memopidx.h"
|
||||
|
||||
/*
|
||||
* Events that plugins can subscribe to.
|
||||
*/
|
||||
enum qemu_plugin_event {
|
||||
QEMU_PLUGIN_EV_VCPU_INIT,
|
||||
QEMU_PLUGIN_EV_VCPU_EXIT,
|
||||
QEMU_PLUGIN_EV_VCPU_TB_TRANS,
|
||||
QEMU_PLUGIN_EV_VCPU_IDLE,
|
||||
QEMU_PLUGIN_EV_VCPU_RESUME,
|
||||
QEMU_PLUGIN_EV_VCPU_SYSCALL,
|
||||
QEMU_PLUGIN_EV_VCPU_SYSCALL_RET,
|
||||
QEMU_PLUGIN_EV_FLUSH,
|
||||
QEMU_PLUGIN_EV_ATEXIT,
|
||||
QEMU_PLUGIN_EV_MAX, /* total number of plugin events we support */
|
||||
};
|
||||
#include "hw/core/cpu.h"
|
||||
|
||||
/*
|
||||
* Option parsing/processing.
|
||||
@@ -59,8 +45,6 @@ get_plugin_meminfo_rw(qemu_plugin_meminfo_t i)
|
||||
#ifdef CONFIG_PLUGIN
|
||||
extern QemuOptsList qemu_plugin_opts;
|
||||
|
||||
#define QEMU_PLUGIN_ASSERT(cond) g_assert(cond)
|
||||
|
||||
static inline void qemu_plugin_add_opts(void)
|
||||
{
|
||||
qemu_add_opts(&qemu_plugin_opts);
|
||||
@@ -221,7 +205,10 @@ void qemu_plugin_atexit_cb(void);
|
||||
|
||||
void qemu_plugin_add_dyn_cb_arr(GArray *arr);
|
||||
|
||||
void qemu_plugin_disable_mem_helpers(CPUState *cpu);
|
||||
static inline void qemu_plugin_disable_mem_helpers(CPUState *cpu)
|
||||
{
|
||||
cpu->plugin_mem_cbs = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* qemu_plugin_user_exit(): clean-up callbacks before calling exit callbacks
|
||||
@@ -252,8 +239,6 @@ void qemu_plugin_user_postfork(bool is_child);
|
||||
|
||||
#else /* !CONFIG_PLUGIN */
|
||||
|
||||
#define QEMU_PLUGIN_ASSERT(cond)
|
||||
|
||||
static inline void qemu_plugin_add_opts(void)
|
||||
{ }
|
||||
|
||||
|
@@ -481,17 +481,56 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr);
|
||||
*/
|
||||
const char *qemu_plugin_hwaddr_device_name(const struct qemu_plugin_hwaddr *h);
|
||||
|
||||
typedef void
|
||||
(*qemu_plugin_vcpu_mem_cb_t)(unsigned int vcpu_index,
|
||||
qemu_plugin_meminfo_t info, uint64_t vaddr,
|
||||
void *userdata);
|
||||
/**
|
||||
* typedef qemu_plugin_vcpu_mem_cb_t - memory callback function type
|
||||
* @vcpu_index: the executing vCPU
|
||||
* @info: an opaque handle for further queries about the memory
|
||||
* @vaddr: the virtual address of the transaction
|
||||
* @userdata: any user data attached to the callback
|
||||
*/
|
||||
typedef void (*qemu_plugin_vcpu_mem_cb_t) (unsigned int vcpu_index,
|
||||
qemu_plugin_meminfo_t info,
|
||||
uint64_t vaddr,
|
||||
void *userdata);
|
||||
|
||||
/**
|
||||
* qemu_plugin_register_vcpu_mem_cb() - register memory access callback
|
||||
* @insn: handle for instruction to instrument
|
||||
* @cb: callback of type qemu_plugin_vcpu_mem_cb_t
|
||||
* @flags: (currently unused) callback flags
|
||||
* @rw: monitor reads, writes or both
|
||||
* @userdata: opaque pointer for userdata
|
||||
*
|
||||
* This registers a full callback for every memory access generated by
|
||||
* an instruction. If the instruction doesn't access memory no
|
||||
* callback will be made.
|
||||
*
|
||||
* The callback reports the vCPU the access took place on, the virtual
|
||||
* address of the access and a handle for further queries. The user
|
||||
* can attach some userdata to the callback for additional purposes.
|
||||
*
|
||||
* Other execution threads will continue to execute during the
|
||||
* callback so the plugin is responsible for ensuring it doesn't get
|
||||
* confused by making appropriate use of locking if required.
|
||||
*/
|
||||
void qemu_plugin_register_vcpu_mem_cb(struct qemu_plugin_insn *insn,
|
||||
qemu_plugin_vcpu_mem_cb_t cb,
|
||||
enum qemu_plugin_cb_flags flags,
|
||||
enum qemu_plugin_mem_rw rw,
|
||||
void *userdata);
|
||||
|
||||
/**
|
||||
* qemu_plugin_register_vcpu_mem_inline() - register an inline op to any memory access
|
||||
* @insn: handle for instruction to instrument
|
||||
* @rw: apply to reads, writes or both
|
||||
* @op: the op, of type qemu_plugin_op
|
||||
* @ptr: pointer memory for the op
|
||||
* @imm: immediate data for @op
|
||||
*
|
||||
* This registers a inline op every memory access generated by the
|
||||
* instruction. This provides for a lightweight but not thread-safe
|
||||
* way of counting the number of operations done.
|
||||
*/
|
||||
void qemu_plugin_register_vcpu_mem_inline(struct qemu_plugin_insn *insn,
|
||||
enum qemu_plugin_mem_rw rw,
|
||||
enum qemu_plugin_op op, void *ptr,
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#define SYSCALL_TRACE_H
|
||||
|
||||
#include "exec/user/abitypes.h"
|
||||
#include "qemu/plugin.h"
|
||||
#include "trace/trace-root.h"
|
||||
|
||||
/*
|
||||
|
@@ -18,6 +18,7 @@
|
||||
#include "qemu/units.h"
|
||||
#include "qemu/selfmap.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "target_signal.h"
|
||||
#include "accel/tcg/debuginfo.h"
|
||||
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "gdbstub/syscalls.h"
|
||||
#include "qemu.h"
|
||||
#include "user-internals.h"
|
||||
#include "qemu/plugin.h"
|
||||
#ifdef CONFIG_GPROF
|
||||
#include <sys/gmon.h>
|
||||
#endif
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "qemu/path.h"
|
||||
#include "qemu/memfd.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/plugin.h"
|
||||
#include "target_mman.h"
|
||||
#include <elf.h>
|
||||
#include <endian.h>
|
||||
|
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include <zlib.h>
|
||||
#include "qapi/error.h"
|
||||
#include "cpu.h"
|
||||
|
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "channel.h"
|
||||
#include "exec.h"
|
||||
#include "migration.h"
|
||||
|
@@ -553,17 +553,6 @@ void qemu_plugin_user_postfork(bool is_child)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Call this function after longjmp'ing to the main loop. It's possible that the
|
||||
* last instruction of a TB might have used helpers, and therefore the
|
||||
* "disable" instruction will never execute because it ended up as dead code.
|
||||
*/
|
||||
void qemu_plugin_disable_mem_helpers(CPUState *cpu)
|
||||
{
|
||||
cpu->plugin_mem_cbs = NULL;
|
||||
}
|
||||
|
||||
static bool plugin_dyn_cb_arr_cmp(const void *ap, const void *bp)
|
||||
{
|
||||
return ap == bp;
|
||||
|
@@ -527,7 +527,7 @@ namespace _com_util
|
||||
/* Stop QGA VSS provider service using Winsvc API */
|
||||
STDAPI StopService(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
HRESULT hr = S_OK;
|
||||
SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
|
||||
SC_HANDLE service = NULL;
|
||||
|
||||
|
@@ -55,6 +55,7 @@
|
||||
- librados-devel
|
||||
- librbd-devel
|
||||
- libseccomp-devel
|
||||
- libslirp-devel
|
||||
- libssh-devel
|
||||
- libxkbcommon-devel
|
||||
- lzo-devel
|
||||
|
@@ -48,13 +48,29 @@
|
||||
- debug:
|
||||
msg: gitlab-runner arch is {{ gitlab_runner_arch }}
|
||||
|
||||
- name: Download the matching gitlab-runner
|
||||
- name: Download the matching gitlab-runner (DEB)
|
||||
get_url:
|
||||
dest: "/root/"
|
||||
url: "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_{{ gitlab_runner_arch }}.deb"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
|
||||
- name: Install gitlab-runner via package manager
|
||||
- name: Download the matching gitlab-runner (RPM)
|
||||
get_url:
|
||||
dest: "/root/"
|
||||
url: "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_{{ gitlab_runner_arch }}.rpm"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'CentOS'
|
||||
|
||||
- name: Install gitlab-runner via package manager (DEB)
|
||||
apt: deb="/root/gitlab-runner_{{ gitlab_runner_arch }}.deb"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
|
||||
- name: Install gitlab-runner via package manager (RPM)
|
||||
yum: name="/root/gitlab-runner_{{ gitlab_runner_arch }}.rpm"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'CentOS'
|
||||
|
||||
- name: Register the gitlab-runner
|
||||
command: "/usr/bin/gitlab-runner register --non-interactive --url {{ gitlab_runner_server_url }} --registration-token {{ gitlab_runner_registration_token }} --executor shell --tag-list {{ ansible_facts[\"architecture\"] }},{{ ansible_facts[\"distribution\"]|lower }}_{{ ansible_facts[\"distribution_version\"] }} --description '{{ ansible_facts[\"distribution\"] }} {{ ansible_facts[\"distribution_version\"] }} {{ ansible_facts[\"architecture\"] }} ({{ ansible_facts[\"os_family\"] }})'"
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "kvm/kvm_i386.h"
|
||||
#include "sev.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/qapi-visit-machine.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "standard-headers/asm-x86/kvm_para.h"
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#include "cpu.h"
|
||||
#include "host-cpu.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
/* Note: Only safe for use on x86(-64) hosts */
|
||||
|
@@ -12,6 +12,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/xen/xen.h"
|
||||
#include "sysemu/kvm_int.h"
|
||||
#include "sysemu/kvm_xen.h"
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "qemu/base64.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/uuid.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "crypto/hash.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "sev.h"
|
||||
|
@@ -11,6 +11,7 @@
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "cpu.h"
|
||||
#include "hw/i386/apic_internal.h"
|
||||
#include "hw/i386/apic-msidef.h"
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/qemu-print.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "cpu.h"
|
||||
#include "internal.h"
|
||||
|
@@ -2622,7 +2622,7 @@ void helper_scv(CPUPPCState *env, uint32_t lev)
|
||||
}
|
||||
}
|
||||
|
||||
void helper_pminsn(CPUPPCState *env, powerpc_pm_insn_t insn)
|
||||
void helper_pminsn(CPUPPCState *env, uint32_t insn)
|
||||
{
|
||||
CPUState *cs;
|
||||
|
||||
|
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "cpu.h"
|
||||
#include "s390x-internal.h"
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include "sysemu/kvm.h"
|
||||
#include "sysemu/tcg.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/visitor.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/hw-version.h"
|
||||
|
@@ -22,6 +22,8 @@
|
||||
#include "hw/s390x/pv.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "kvm/kvm_s390x.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
||||
int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
|
||||
{
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#define S390X_INTERNAL_H
|
||||
|
||||
#include "cpu.h"
|
||||
#include "fpu/softfloat.h"
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
typedef struct LowCore {
|
||||
@@ -299,7 +300,7 @@ uint32_t set_cc_nz_f128(float128 v);
|
||||
uint8_t s390_softfloat_exc_to_ieee(unsigned int exc);
|
||||
int s390_swap_bfp_rounding_mode(CPUS390XState *env, int m3);
|
||||
void s390_restore_bfp_rounding_mode(CPUS390XState *env, int old_mode);
|
||||
int float_comp_to_cc(CPUS390XState *env, int float_compare);
|
||||
int float_comp_to_cc(CPUS390XState *env, FloatRelation float_compare);
|
||||
|
||||
#define DCMASK_ZERO 0x0c00
|
||||
#define DCMASK_NORMAL 0x0300
|
||||
|
@@ -2808,7 +2808,6 @@ void tcg_gen_exit_tb(const TranslationBlock *tb, unsigned idx)
|
||||
tcg_debug_assert(idx == TB_EXIT_REQUESTED);
|
||||
}
|
||||
|
||||
plugin_gen_disable_mem_helpers();
|
||||
tcg_gen_op1i(INDEX_op_exit_tb, val);
|
||||
}
|
||||
|
||||
|
@@ -309,6 +309,16 @@ class QemuSystemTest(QemuBaseTest):
|
||||
if netdevhelp.find('\n' + netdevname + '\n') < 0:
|
||||
self.cancel('no support for user networking')
|
||||
|
||||
def require_multiprocess(self):
|
||||
"""
|
||||
Test for the presence of the x-pci-proxy-dev which is required
|
||||
to support multiprocess.
|
||||
"""
|
||||
devhelp = run_cmd([self.qemu_bin,
|
||||
'-M', 'none', '-device', 'help'])[0];
|
||||
if devhelp.find('x-pci-proxy-dev') < 0:
|
||||
self.cancel('no support for multiprocess device emulation')
|
||||
|
||||
def _new_vm(self, name, *args):
|
||||
self._sd = tempfile.TemporaryDirectory(prefix="qemu_")
|
||||
vm = QEMUMachine(self.qemu_bin, base_temp_dir=self.workdir,
|
||||
|
@@ -1,38 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# ethtool tests for igb registers, interrupts, etc
|
||||
|
||||
from avocado_qemu import LinuxTest
|
||||
|
||||
class IGB(LinuxTest):
|
||||
"""
|
||||
:avocado: tags=accel:kvm
|
||||
:avocado: tags=arch:x86_64
|
||||
:avocado: tags=distro:fedora
|
||||
:avocado: tags=distro_version:31
|
||||
:avocado: tags=machine:q35
|
||||
"""
|
||||
|
||||
timeout = 180
|
||||
|
||||
def test(self):
|
||||
self.require_accelerator('kvm')
|
||||
kernel_url = self.distro.pxeboot_url + 'vmlinuz'
|
||||
kernel_hash = '5b6f6876e1b5bda314f93893271da0d5777b1f3c'
|
||||
kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
|
||||
initrd_url = self.distro.pxeboot_url + 'initrd.img'
|
||||
initrd_hash = 'dd0340a1b39bd28f88532babd4581c67649ec5b1'
|
||||
initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
|
||||
|
||||
# Ideally we want to test MSI as well, but it is blocked by a bug
|
||||
# fixed with:
|
||||
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28e96556baca7056d11d9fb3cdd0aba4483e00d8
|
||||
kernel_params = self.distro.default_kernel_params + ' pci=nomsi'
|
||||
|
||||
self.vm.add_args('-kernel', kernel_path,
|
||||
'-initrd', initrd_path,
|
||||
'-append', kernel_params,
|
||||
'-accel', 'kvm',
|
||||
'-device', 'igb')
|
||||
self.launch_and_wait()
|
||||
self.ssh_command('dnf -y install ethtool')
|
||||
self.ssh_command('ethtool -t eth1 offline')
|
@@ -38,11 +38,11 @@ class Aarch64VirtMachine(QemuSystemTest):
|
||||
:avocado: tags=accel:tcg
|
||||
"""
|
||||
iso_url = ('https://dl-cdn.alpinelinux.org/'
|
||||
'alpine/v3.16/releases/aarch64/'
|
||||
'alpine-virt-3.16.3-aarch64.iso')
|
||||
'alpine/v3.17/releases/aarch64/'
|
||||
'alpine-standard-3.17.2-aarch64.iso')
|
||||
|
||||
# Alpine use sha256 so I recalculated this myself
|
||||
iso_sha1 = '0683bc089486d55c91bf6607d5ecb93925769bc0'
|
||||
iso_sha1 = '76284fcd7b41fe899b0c2375ceb8470803eea839'
|
||||
iso_path = self.fetch_asset(iso_url, asset_hash=iso_sha1)
|
||||
|
||||
self.vm.set_console()
|
||||
@@ -65,7 +65,7 @@ class Aarch64VirtMachine(QemuSystemTest):
|
||||
self.vm.add_args('-object', 'rng-random,id=rng0,filename=/dev/urandom')
|
||||
|
||||
self.vm.launch()
|
||||
self.wait_for_console_pattern('Welcome to Alpine Linux 3.16')
|
||||
self.wait_for_console_pattern('Welcome to Alpine Linux 3.17')
|
||||
|
||||
|
||||
def common_aarch64_virt(self, machine):
|
||||
|
@@ -22,6 +22,7 @@ class Multiprocess(QemuSystemTest):
|
||||
machine_type):
|
||||
"""Main test method"""
|
||||
self.require_accelerator('kvm')
|
||||
self.require_multiprocess()
|
||||
|
||||
# Create socketpair to connect proxy and remote processes
|
||||
proxy_sock, remote_sock = socket.socketpair(socket.AF_UNIX,
|
||||
|
116
tests/avocado/netdev-ethtool.py
Normal file
116
tests/avocado/netdev-ethtool.py
Normal file
@@ -0,0 +1,116 @@
|
||||
# ethtool tests for emulated network devices
|
||||
#
|
||||
# This test leverages ethtool's --test sequence to validate network
|
||||
# device behaviour.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-late
|
||||
|
||||
from avocado import skip
|
||||
from avocado_qemu import QemuSystemTest
|
||||
from avocado_qemu import exec_command, exec_command_and_wait_for_pattern
|
||||
from avocado_qemu import wait_for_console_pattern
|
||||
|
||||
class NetDevEthtool(QemuSystemTest):
|
||||
"""
|
||||
:avocado: tags=arch:x86_64
|
||||
:avocado: tags=machine:q35
|
||||
"""
|
||||
|
||||
# Runs in about 17s under KVM, 19s under TCG, 25s under GCOV
|
||||
timeout = 45
|
||||
|
||||
# Fetch assets from the netdev-ethtool subdir of my shared test
|
||||
# images directory on fileserver.linaro.org.
|
||||
def get_asset(self, name, sha1):
|
||||
base_url = ('https://fileserver.linaro.org/s/'
|
||||
'kE4nCFLdQcoBF9t/download?'
|
||||
'path=%2Fnetdev-ethtool&files=' )
|
||||
url = base_url + name
|
||||
# use explicit name rather than failing to neatly parse the
|
||||
# URL into a unique one
|
||||
return self.fetch_asset(name=name, locations=(url), asset_hash=sha1)
|
||||
|
||||
def common_test_code(self, netdev, extra_args=None, kvm=False):
|
||||
|
||||
# This custom kernel has drivers for all the supported network
|
||||
# devices we can emulate in QEMU
|
||||
kernel = self.get_asset("bzImage",
|
||||
"33469d7802732d5815226166581442395cb289e2")
|
||||
|
||||
rootfs = self.get_asset("rootfs.squashfs",
|
||||
"9793cea7021414ae844bda51f558bd6565b50cdc")
|
||||
|
||||
append = 'printk.time=0 console=ttyS0 '
|
||||
append += 'root=/dev/sr0 rootfstype=squashfs '
|
||||
|
||||
# any additional kernel tweaks for the test
|
||||
if extra_args:
|
||||
append += extra_args
|
||||
|
||||
# finally invoke ethtool directly
|
||||
append += ' init=/usr/sbin/ethtool -- -t eth1 offline'
|
||||
|
||||
# add the rootfs via a readonly cdrom image
|
||||
drive = f"file={rootfs},if=ide,index=0,media=cdrom"
|
||||
|
||||
self.vm.add_args('-kernel', kernel,
|
||||
'-append', append,
|
||||
'-drive', drive,
|
||||
'-device', netdev)
|
||||
|
||||
if kvm:
|
||||
self.vm.add_args('-accel', 'kvm')
|
||||
|
||||
self.vm.set_console(console_index=0)
|
||||
self.vm.launch()
|
||||
|
||||
wait_for_console_pattern(self,
|
||||
"The test result is PASS",
|
||||
"The test result is FAIL",
|
||||
vm=None)
|
||||
# no need to gracefully shutdown, just finish
|
||||
self.vm.kill()
|
||||
|
||||
# Skip testing for MSI for now. Allegedly it was fixed by:
|
||||
# 28e96556ba (igb: Allocate MSI-X vector when testing)
|
||||
# but I'm seeing oops in the kernel
|
||||
@skip("Kernel bug with MSI enabled")
|
||||
def test_igb(self):
|
||||
"""
|
||||
:avocado: tags=device:igb
|
||||
"""
|
||||
self.common_test_code("igb")
|
||||
|
||||
def test_igb_nomsi(self):
|
||||
"""
|
||||
:avocado: tags=device:igb
|
||||
"""
|
||||
self.common_test_code("igb", "pci=nomsi")
|
||||
|
||||
def test_igb_nomsi_kvm(self):
|
||||
"""
|
||||
:avocado: tags=device:igb
|
||||
"""
|
||||
self.require_accelerator('kvm')
|
||||
self.common_test_code("igb", "pci=nomsi", True)
|
||||
|
||||
# It seems the other popular cards we model in QEMU currently fail
|
||||
# the pattern test with:
|
||||
#
|
||||
# pattern test failed (reg 0x00178): got 0x00000000 expected 0x00005A5A
|
||||
#
|
||||
# So for now we skip them.
|
||||
|
||||
@skip("Incomplete reg 0x00178 support")
|
||||
def test_e1000(self):
|
||||
"""
|
||||
:avocado: tags=device:e1000
|
||||
"""
|
||||
self.common_test_code("e1000")
|
||||
|
||||
@skip("Incomplete reg 0x00178 support")
|
||||
def test_i82550(self):
|
||||
"""
|
||||
:avocado: tags=device:i82550
|
||||
"""
|
||||
self.common_test_code("i82550")
|
@@ -67,9 +67,6 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
# The name of the kernel Image file
|
||||
self.image = self.get_tag('image', "Image")
|
||||
|
||||
# The block device drive type
|
||||
self.drive = self.get_tag('drive', "virtio-blk-device")
|
||||
|
||||
self.root = self.get_tag('root', "vda")
|
||||
|
||||
# Occasionally we need extra devices to hook things up
|
||||
@@ -99,7 +96,7 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
|
||||
return (kernel_image, self.workdir + "/rootfs.ext4", dtb)
|
||||
|
||||
def prepare_run(self, kernel, disk, dtb=None, console_index=0):
|
||||
def prepare_run(self, kernel, disk, drive, dtb=None, console_index=0):
|
||||
"""
|
||||
Setup to run and add the common parameters to the system
|
||||
"""
|
||||
@@ -121,10 +118,8 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
if self.extradev:
|
||||
self.vm.add_args('-device', self.extradev)
|
||||
|
||||
# Some machines already define a drive device
|
||||
if self.drive != "none":
|
||||
self.vm.add_args('-device',
|
||||
f"{self.drive},drive=hd0")
|
||||
self.vm.add_args('-device',
|
||||
f"{drive},drive=hd0")
|
||||
|
||||
# Some machines need an explicit DTB
|
||||
if dtb:
|
||||
@@ -154,7 +149,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
else:
|
||||
self.vm.wait()
|
||||
|
||||
def common_tuxrun(self, dt=None, haltmsg="reboot: System halted",
|
||||
def common_tuxrun(self, dt=None,
|
||||
drive="virtio-blk-device",
|
||||
haltmsg="reboot: System halted",
|
||||
console_index=0):
|
||||
"""
|
||||
Common path for LKFT tests. Unless we need to do something
|
||||
@@ -163,7 +160,7 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
"""
|
||||
(kernel, disk, dtb) = self.fetch_tuxrun_assets(dt)
|
||||
|
||||
self.prepare_run(kernel, disk, dtb, console_index)
|
||||
self.prepare_run(kernel, disk, drive, dtb, console_index)
|
||||
self.vm.launch()
|
||||
self.run_tuxtest_tests(haltmsg)
|
||||
|
||||
@@ -206,11 +203,11 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=machine:versatilepb
|
||||
:avocado: tags=tuxboot:armv5
|
||||
:avocado: tags=image:zImage
|
||||
:avocado: tags=drive:virtio-blk-pci
|
||||
:avocado: tags=console:ttyAMA0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(dt="versatile-pb.dtb")
|
||||
self.common_tuxrun(drive="virtio-blk-pci",
|
||||
dt="versatile-pb.dtb")
|
||||
|
||||
def test_armv7(self):
|
||||
"""
|
||||
@@ -244,10 +241,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=machine:q35
|
||||
:avocado: tags=tuxboot:i386
|
||||
:avocado: tags=image:bzImage
|
||||
:avocado: tags=drive:virtio-blk-pci
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="virtio-blk-pci")
|
||||
|
||||
def test_mips32(self):
|
||||
"""
|
||||
@@ -257,11 +253,10 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=endian:big
|
||||
:avocado: tags=tuxboot:mips32
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_mips32el(self):
|
||||
"""
|
||||
@@ -270,11 +265,10 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=cpu:mips32r6-generic
|
||||
:avocado: tags=tuxboot:mips32el
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
@skip("QEMU currently broken") # regression against stable QEMU
|
||||
def test_mips64(self):
|
||||
@@ -284,11 +278,10 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=tuxboot:mips64
|
||||
:avocado: tags=endian:big
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_mips64el(self):
|
||||
"""
|
||||
@@ -296,11 +289,10 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=machine:malta
|
||||
:avocado: tags=tuxboot:mips64el
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_ppc32(self):
|
||||
"""
|
||||
@@ -309,10 +301,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=cpu:e500mc
|
||||
:avocado: tags=tuxboot:ppc32
|
||||
:avocado: tags=image:uImage
|
||||
:avocado: tags=drive:virtio-blk-pci
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="virtio-blk-pci")
|
||||
|
||||
def test_ppc64(self):
|
||||
"""
|
||||
@@ -324,10 +315,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=tuxboot:ppc64
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=extradev:driver=spapr-vscsi
|
||||
:avocado: tags=drive:scsi-hd
|
||||
:avocado: tags=root:sda
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="scsi-hd")
|
||||
|
||||
def test_ppc64le(self):
|
||||
"""
|
||||
@@ -338,10 +328,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=tuxboot:ppc64le
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=extradev:driver=spapr-vscsi
|
||||
:avocado: tags=drive:scsi-hd
|
||||
:avocado: tags=root:sda
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="scsi-hd")
|
||||
|
||||
def test_riscv32(self):
|
||||
"""
|
||||
@@ -365,10 +354,10 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=endian:big
|
||||
:avocado: tags=tuxboot:s390
|
||||
:avocado: tags=image:bzImage
|
||||
:avocado: tags=drive:virtio-blk-ccw
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(haltmsg="Requesting system halt")
|
||||
self.common_tuxrun(drive="virtio-blk-ccw",
|
||||
haltmsg="Requesting system halt")
|
||||
|
||||
# Note: some segfaults caused by unaligned userspace access
|
||||
@skipIf(os.getenv('GITLAB_CI'), 'Skipping unstable test on GitLab')
|
||||
@@ -380,7 +369,6 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=tuxboot:sh4
|
||||
:avocado: tags=image:zImage
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=console:ttySC1
|
||||
"""
|
||||
# The test is currently too unstable to do much in userspace
|
||||
@@ -388,7 +376,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
(kernel, disk, dtb) = self.fetch_tuxrun_assets()
|
||||
|
||||
# the console comes on the second serial port
|
||||
self.prepare_run(kernel, disk, console_index=1)
|
||||
self.prepare_run(kernel, disk,
|
||||
"driver=ide-hd,bus=ide.0,unit=0",
|
||||
console_index=1)
|
||||
self.vm.launch()
|
||||
|
||||
self.wait_for_console_pattern("Welcome to TuxTest")
|
||||
@@ -404,10 +394,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=tuxboot:sparc64
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_x86_64(self):
|
||||
"""
|
||||
@@ -417,7 +406,6 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=tuxboot:x86_64
|
||||
:avocado: tags=image:bzImage
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=drive:driver=ide-hd,bus=ide.0,unit=0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
@@ -1,43 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$#" -eq 0 ]; then
|
||||
echo "Usage: $0 fmt..." >&2
|
||||
exit 99
|
||||
fi
|
||||
|
||||
# Honor the SPEED environment variable, just like we do it for "meson test"
|
||||
format_list="$@"
|
||||
if [ "$SPEED" = "slow" ] || [ "$SPEED" = "thorough" ]; then
|
||||
group=
|
||||
else
|
||||
group="-g auto"
|
||||
fi
|
||||
|
||||
skip() {
|
||||
echo "1..0 #SKIP $*"
|
||||
exit 0
|
||||
}
|
||||
|
||||
if [ -z "$(find . -name 'qemu-system-*' -print)" ]; then
|
||||
skip "No qemu-system binary available ==> Not running the qemu-iotests."
|
||||
fi
|
||||
|
||||
cd tests/qemu-iotests
|
||||
|
||||
# QEMU_CHECK_BLOCK_AUTO is used to disable some unstable sub-tests
|
||||
export QEMU_CHECK_BLOCK_AUTO=1
|
||||
export PYTHONUTF8=1
|
||||
# If make was called with -jN we want to call ./check with -j N. Extract the
|
||||
# flag from MAKEFLAGS, so that if it absent (or MAKEFLAGS is not defined), JOBS
|
||||
# would be an empty line otherwise JOBS is prepared string of flag with value:
|
||||
# "-j N"
|
||||
# Note, that the following works even if make was called with "-j N" or even
|
||||
# "--jobs N", as all these variants becomes simply "-jN" in MAKEFLAGS variable.
|
||||
JOBS=$(echo "$MAKEFLAGS" | sed -n 's/\(^\|.* \)-j\([0-9]\+\)\( .*\|$\)/-j \2/p')
|
||||
|
||||
ret=0
|
||||
for fmt in $format_list ; do
|
||||
${PYTHON} ./check $JOBS -tap -$fmt $group || ret=1
|
||||
done
|
||||
|
||||
exit $ret
|
@@ -39,7 +39,7 @@ docker-qemu-src: $(DOCKER_SRC_COPY)
|
||||
# General rule for building docker images.
|
||||
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
|
||||
$(call quiet-command, \
|
||||
$(RUNC) build \
|
||||
DOCKER_BUILDKIT=1 $(RUNC) build \
|
||||
$(if $V,,--quiet) \
|
||||
$(if $(NOCACHE),--no-cache, \
|
||||
$(if $(DOCKER_REGISTRY),--cache-from $(DOCKER_REGISTRY)/qemu/$*)) \
|
||||
|
@@ -26,9 +26,23 @@ from findtests import TestFinder
|
||||
from testenv import TestEnv
|
||||
from testrunner import TestRunner
|
||||
|
||||
def get_default_path(follow_link=False):
|
||||
"""
|
||||
Try to automagically figure out the path we are running from.
|
||||
"""
|
||||
# called from the build tree?
|
||||
if os.path.islink(sys.argv[0]):
|
||||
if follow_link:
|
||||
return os.path.dirname(os.readlink(sys.argv[0]))
|
||||
else:
|
||||
return os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||
else: # or source tree?
|
||||
return os.getcwd()
|
||||
|
||||
def make_argparser() -> argparse.ArgumentParser:
|
||||
p = argparse.ArgumentParser(description="Test run options")
|
||||
p = argparse.ArgumentParser(
|
||||
description="Test run options",
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
|
||||
p.add_argument('-n', '--dry-run', action='store_true',
|
||||
help='show me, do not run tests')
|
||||
@@ -113,6 +127,11 @@ def make_argparser() -> argparse.ArgumentParser:
|
||||
'middle of the process.')
|
||||
g_sel.add_argument('tests', metavar='TEST_FILES', nargs='*',
|
||||
help='tests to run, or "--" followed by a command')
|
||||
g_sel.add_argument('--build-dir', default=get_default_path(),
|
||||
help='Path to iotests build directory')
|
||||
g_sel.add_argument('--source-dir',
|
||||
default=get_default_path(follow_link=True),
|
||||
help='Path to iotests build directory')
|
||||
|
||||
return p
|
||||
|
||||
@@ -120,11 +139,14 @@ def make_argparser() -> argparse.ArgumentParser:
|
||||
if __name__ == '__main__':
|
||||
args = make_argparser().parse_args()
|
||||
|
||||
env = TestEnv(imgfmt=args.imgfmt, imgproto=args.imgproto,
|
||||
env = TestEnv(source_dir=args.source_dir,
|
||||
build_dir=args.build_dir,
|
||||
imgfmt=args.imgfmt, imgproto=args.imgproto,
|
||||
aiomode=args.aiomode, cachemode=args.cachemode,
|
||||
imgopts=args.imgopts, misalign=args.misalign,
|
||||
debug=args.debug, valgrind=args.valgrind,
|
||||
gdb=args.gdb, qprint=args.print)
|
||||
gdb=args.gdb, qprint=args.print,
|
||||
dry_run=args.dry_run)
|
||||
|
||||
if len(sys.argv) > 1 and sys.argv[-len(args.tests)-1] == '--':
|
||||
if not args.tests:
|
||||
@@ -162,7 +184,7 @@ if __name__ == '__main__':
|
||||
sys.exit(str(e))
|
||||
|
||||
if args.dry_run:
|
||||
print('\n'.join(tests))
|
||||
print('\n'.join([os.path.basename(t) for t in tests]))
|
||||
else:
|
||||
with TestRunner(env, tap=args.tap,
|
||||
color=args.color) as tr:
|
||||
|
@@ -32,16 +32,39 @@ foreach k, v : emulators
|
||||
endif
|
||||
endforeach
|
||||
|
||||
qemu_iotests_check_cmd = files('check')
|
||||
|
||||
foreach format, speed: qemu_iotests_formats
|
||||
if speed == 'quick'
|
||||
suites = 'block'
|
||||
else
|
||||
suites = ['block-' + speed, speed]
|
||||
endif
|
||||
test('qemu-iotests ' + format, sh, args: [files('../check-block.sh'), format],
|
||||
depends: qemu_iotests_binaries, env: qemu_iotests_env,
|
||||
protocol: 'tap',
|
||||
suite: suites,
|
||||
timeout: 0,
|
||||
is_parallel: false)
|
||||
|
||||
args = ['-tap', '-' + format]
|
||||
if speed == 'quick'
|
||||
args += ['-g', 'auto']
|
||||
endif
|
||||
|
||||
rc = run_command(
|
||||
[qemu_iotests_check_cmd] + args + ['-n'],
|
||||
check: true,
|
||||
)
|
||||
|
||||
foreach item: rc.stdout().strip().split()
|
||||
args = ['-tap', '-' + format, item,
|
||||
'--source-dir', meson.current_source_dir(),
|
||||
'--build-dir', meson.current_build_dir()]
|
||||
# Some individual tests take as long as 45 seconds
|
||||
# Bump the timeout to 3 minutes for some headroom
|
||||
# on slow machines to minimize spurious failures
|
||||
test('io-' + format + '-' + item,
|
||||
qemu_iotests_check_cmd,
|
||||
args: args,
|
||||
depends: qemu_iotests_binaries,
|
||||
env: qemu_iotests_env,
|
||||
protocol: 'tap',
|
||||
timeout: 180,
|
||||
suite: suites)
|
||||
endforeach
|
||||
endforeach
|
||||
|
@@ -170,14 +170,16 @@ class TestEnv(ContextManager['TestEnv']):
|
||||
if not isxfile(b):
|
||||
sys.exit('Not executable: ' + b)
|
||||
|
||||
def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
|
||||
def __init__(self, source_dir: str, build_dir: str,
|
||||
imgfmt: str, imgproto: str, aiomode: str,
|
||||
cachemode: Optional[str] = None,
|
||||
imgopts: Optional[str] = None,
|
||||
misalign: bool = False,
|
||||
debug: bool = False,
|
||||
valgrind: bool = False,
|
||||
gdb: bool = False,
|
||||
qprint: bool = False) -> None:
|
||||
qprint: bool = False,
|
||||
dry_run: bool = False) -> None:
|
||||
self.imgfmt = imgfmt
|
||||
self.imgproto = imgproto
|
||||
self.aiomode = aiomode
|
||||
@@ -211,18 +213,16 @@ class TestEnv(ContextManager['TestEnv']):
|
||||
# which are needed to initialize some environment variables. They are
|
||||
# used by init_*() functions as well.
|
||||
|
||||
if os.path.islink(sys.argv[0]):
|
||||
# called from the build tree
|
||||
self.source_iotests = os.path.dirname(os.readlink(sys.argv[0]))
|
||||
self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||
else:
|
||||
# called from the source tree
|
||||
self.source_iotests = os.getcwd()
|
||||
self.build_iotests = self.source_iotests
|
||||
self.source_iotests = source_dir
|
||||
self.build_iotests = build_dir
|
||||
|
||||
self.build_root = os.path.join(self.build_iotests, '..', '..')
|
||||
|
||||
self.init_directories()
|
||||
|
||||
if dry_run:
|
||||
return
|
||||
|
||||
self.init_binaries()
|
||||
|
||||
self.malloc_perturb_ = os.getenv('MALLOC_PERTURB_',
|
||||
|
@@ -24,12 +24,10 @@ import difflib
|
||||
import subprocess
|
||||
import contextlib
|
||||
import json
|
||||
import termios
|
||||
import shutil
|
||||
import sys
|
||||
from multiprocessing import Pool
|
||||
from contextlib import contextmanager
|
||||
from typing import List, Optional, Iterator, Any, Sequence, Dict, \
|
||||
from typing import List, Optional, Any, Sequence, Dict, \
|
||||
ContextManager
|
||||
|
||||
from testenv import TestEnv
|
||||
@@ -56,22 +54,6 @@ def file_diff(file1: str, file2: str) -> List[str]:
|
||||
return res
|
||||
|
||||
|
||||
# We want to save current tty settings during test run,
|
||||
# since an aborting qemu call may leave things screwed up.
|
||||
@contextmanager
|
||||
def savetty() -> Iterator[None]:
|
||||
isterm = sys.stdin.isatty()
|
||||
if isterm:
|
||||
fd = sys.stdin.fileno()
|
||||
attr = termios.tcgetattr(fd)
|
||||
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
if isterm:
|
||||
termios.tcsetattr(fd, termios.TCSADRAIN, attr)
|
||||
|
||||
|
||||
class LastElapsedTime(ContextManager['LastElapsedTime']):
|
||||
""" Cache for elapsed time for tests, to show it during new test run
|
||||
|
||||
@@ -169,7 +151,6 @@ class TestRunner(ContextManager['TestRunner']):
|
||||
self._stack = contextlib.ExitStack()
|
||||
self._stack.enter_context(self.env)
|
||||
self._stack.enter_context(self.last_elapsed)
|
||||
self._stack.enter_context(savetty())
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
|
||||
@@ -247,13 +228,11 @@ class TestRunner(ContextManager['TestRunner']):
|
||||
|
||||
return f'{test}.out'
|
||||
|
||||
def do_run_test(self, test: str, mp: bool) -> TestResult:
|
||||
def do_run_test(self, test: str) -> TestResult:
|
||||
"""
|
||||
Run one test
|
||||
|
||||
:param test: test file path
|
||||
:param mp: if true, we are in a multiprocessing environment, use
|
||||
personal subdirectories for test run
|
||||
|
||||
Note: this method may be called from subprocess, so it does not
|
||||
change ``self`` object in any way!
|
||||
@@ -276,12 +255,14 @@ class TestRunner(ContextManager['TestRunner']):
|
||||
|
||||
args = [str(f_test.resolve())]
|
||||
env = self.env.prepare_subprocess(args)
|
||||
if mp:
|
||||
# Split test directories, so that tests running in parallel don't
|
||||
# break each other.
|
||||
for d in ['TEST_DIR', 'SOCK_DIR']:
|
||||
env[d] = os.path.join(env[d], f_test.name)
|
||||
Path(env[d]).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Split test directories, so that tests running in parallel don't
|
||||
# break each other.
|
||||
for d in ['TEST_DIR', 'SOCK_DIR']:
|
||||
env[d] = os.path.join(
|
||||
env[d],
|
||||
f"{self.env.imgfmt}-{self.env.imgproto}-{f_test.name}")
|
||||
Path(env[d]).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
test_dir = env['TEST_DIR']
|
||||
f_bad = Path(test_dir, f_test.name + '.out.bad')
|
||||
@@ -294,6 +275,7 @@ class TestRunner(ContextManager['TestRunner']):
|
||||
t0 = time.time()
|
||||
with f_bad.open('w', encoding="utf-8") as f:
|
||||
with subprocess.Popen(args, cwd=str(f_test.parent), env=env,
|
||||
stdin=subprocess.DEVNULL,
|
||||
stdout=f, stderr=subprocess.STDOUT) as proc:
|
||||
try:
|
||||
proc.wait()
|
||||
@@ -365,7 +347,7 @@ class TestRunner(ContextManager['TestRunner']):
|
||||
testname = os.path.basename(test)
|
||||
print(f'# running {self.env.imgfmt} {testname}')
|
||||
|
||||
res = self.do_run_test(test, mp)
|
||||
res = self.do_run_test(test)
|
||||
|
||||
end = datetime.datetime.now().strftime('%H:%M:%S')
|
||||
self.test_print_one_line(test=test,
|
||||
@@ -391,6 +373,7 @@ class TestRunner(ContextManager['TestRunner']):
|
||||
casenotrun = []
|
||||
|
||||
if self.tap:
|
||||
print('TAP version 13')
|
||||
self.env.print_env('# ')
|
||||
print('1..%d' % len(tests))
|
||||
else:
|
||||
|
@@ -2462,14 +2462,18 @@ static bool kvm_dirty_ring_supported(void)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const bool has_kvm = qtest_has_accel("kvm");
|
||||
const bool has_uffd = ufd_version_check();
|
||||
const char *arch = qtest_get_arch();
|
||||
bool has_kvm;
|
||||
bool has_uffd;
|
||||
const char *arch;
|
||||
g_autoptr(GError) err = NULL;
|
||||
int ret;
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
|
||||
has_kvm = qtest_has_accel("kvm");
|
||||
has_uffd = ufd_version_check();
|
||||
arch = qtest_get_arch();
|
||||
|
||||
/*
|
||||
* On ppc64, the test only works with kvm-hv, but not with kvm-pr and TCG
|
||||
* is touchy due to race conditions on dirty bits (especially on PPC for
|
||||
|
@@ -201,3 +201,10 @@ clean:
|
||||
|
||||
distclean:
|
||||
rm -f config-cc.mak config-target.mak ../config-$(TARGET).mak
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "TCG tests help $(TARGET_NAME)"
|
||||
@echo "Built with $(CC)"
|
||||
@echo "Available tests:"
|
||||
@$(foreach t,$(RUN_TESTS),echo " $t";)
|
||||
|
@@ -106,8 +106,7 @@ class OpenBSDVM(basevm.BaseVM):
|
||||
self.console_wait("Password for root account")
|
||||
self.console_send("%s\n" % self._config["root_pass"])
|
||||
self.console_wait_send("Start sshd(8)", "yes\n")
|
||||
self.console_wait_send("X Window System", "\n")
|
||||
self.console_wait_send("xenodm", "\n")
|
||||
self.console_wait_send("X Window System", "no\n")
|
||||
self.console_wait_send("console to com0", "\n")
|
||||
self.console_wait_send("Which speed", "\n")
|
||||
|
||||
@@ -124,7 +123,32 @@ class OpenBSDVM(basevm.BaseVM):
|
||||
self.console_wait_send("timezone", "UTC\n")
|
||||
self.console_wait_send("root disk", "\n")
|
||||
self.console_wait_send("(W)hole disk", "\n")
|
||||
self.console_wait_send("(A)uto layout", "\n")
|
||||
self.console_wait_send("(A)uto layout", "c\n")
|
||||
|
||||
# 4000 MB / as /dev/sd0a, at start of disk
|
||||
self.console_wait_send("sd0>", "a a\n")
|
||||
self.console_wait_send("offset:", "\n")
|
||||
self.console_wait_send("size:", "4000M\n")
|
||||
self.console_wait_send("FS type", "4.2BSD\n")
|
||||
self.console_wait_send("mount point:", "/\n")
|
||||
|
||||
# 256 MB swap as /dev/sd0b
|
||||
self.console_wait_send("sd0*>", "a b\n")
|
||||
self.console_wait_send("offset:", "\n")
|
||||
self.console_wait_send("size:", "256M\n")
|
||||
self.console_wait_send("FS type", "swap\n")
|
||||
|
||||
# All remaining space for /home as /dev/sd0d
|
||||
# NB, 'c' isn't allowed to be used.
|
||||
self.console_wait_send("sd0*>", "a d\n")
|
||||
self.console_wait_send("offset:", "\n")
|
||||
self.console_wait_send("size:", "\n")
|
||||
self.console_wait_send("FS type", "4.2BSD\n")
|
||||
self.console_wait_send("mount point:", "/home\n")
|
||||
|
||||
self.console_wait_send("sd0*>", "q\n")
|
||||
self.console_wait_send("Write new label?:", "y\n")
|
||||
|
||||
self.console_wait_send("Location of sets", "cd0\n")
|
||||
self.console_wait_send("Pathname to the sets", "\n")
|
||||
self.console_wait_send("Set name(s)", "\n")
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user