xref: /qemu/target/alpha/sys_helper.c (revision d9a4282c4b690e45d25c2b933f318bb41eeb271d)
169163fbbSRichard Henderson /*
269163fbbSRichard Henderson  *  Helpers for system instructions.
369163fbbSRichard Henderson  *
469163fbbSRichard Henderson  *  Copyright (c) 2007 Jocelyn Mayer
569163fbbSRichard Henderson  *
669163fbbSRichard Henderson  * This library is free software; you can redistribute it and/or
769163fbbSRichard Henderson  * modify it under the terms of the GNU Lesser General Public
869163fbbSRichard Henderson  * License as published by the Free Software Foundation; either
9d6ea4236SChetan Pant  * version 2.1 of the License, or (at your option) any later version.
1069163fbbSRichard Henderson  *
1169163fbbSRichard Henderson  * This library is distributed in the hope that it will be useful,
1269163fbbSRichard Henderson  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1369163fbbSRichard Henderson  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1469163fbbSRichard Henderson  * Lesser General Public License for more details.
1569163fbbSRichard Henderson  *
1669163fbbSRichard Henderson  * You should have received a copy of the GNU Lesser General Public
1769163fbbSRichard Henderson  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
1869163fbbSRichard Henderson  */
1969163fbbSRichard Henderson 
20e2e5e114SPeter Maydell #include "qemu/osdep.h"
2169163fbbSRichard Henderson #include "cpu.h"
22*6ff5da16SPhilippe Mathieu-Daudé #include "exec/cputlb.h"
23548c9609SAlex Bennée #include "exec/tb-flush.h"
242ef6175aSRichard Henderson #include "exec/helper-proto.h"
2532cad1ffSPhilippe Mathieu-Daudé #include "system/runstate.h"
2632cad1ffSPhilippe Mathieu-Daudé #include "system/system.h"
271de7afc9SPaolo Bonzini #include "qemu/timer.h"
2869163fbbSRichard Henderson 
2969163fbbSRichard Henderson 
3069163fbbSRichard Henderson /* PALcode support special instructions */
helper_tbia(CPUAlphaState * env)3169163fbbSRichard Henderson void helper_tbia(CPUAlphaState *env)
3269163fbbSRichard Henderson {
331c7ad260SRichard Henderson     tlb_flush(env_cpu(env));
3469163fbbSRichard Henderson }
3569163fbbSRichard Henderson 
helper_tbis(CPUAlphaState * env,uint64_t p)3669163fbbSRichard Henderson void helper_tbis(CPUAlphaState *env, uint64_t p)
3769163fbbSRichard Henderson {
381c7ad260SRichard Henderson     tlb_flush_page(env_cpu(env), p);
3969163fbbSRichard Henderson }
4069163fbbSRichard Henderson 
helper_tb_flush(CPUAlphaState * env)41a9ead832SRichard Henderson void helper_tb_flush(CPUAlphaState *env)
42a9ead832SRichard Henderson {
431c7ad260SRichard Henderson     tb_flush(env_cpu(env));
44a9ead832SRichard Henderson }
45a9ead832SRichard Henderson 
helper_halt(uint64_t restart)4669163fbbSRichard Henderson void helper_halt(uint64_t restart)
4769163fbbSRichard Henderson {
4869163fbbSRichard Henderson     if (restart) {
49cf83f140SEric Blake         qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
5069163fbbSRichard Henderson     } else {
51cf83f140SEric Blake         qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
5269163fbbSRichard Henderson     }
5369163fbbSRichard Henderson }
5469163fbbSRichard Henderson 
helper_get_vmtime(void)5519e0cbb8SRichard Henderson uint64_t helper_get_vmtime(void)
5619e0cbb8SRichard Henderson {
57bc72ad67SAlex Bligh     return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
5819e0cbb8SRichard Henderson }
5919e0cbb8SRichard Henderson 
helper_get_walltime(void)6019e0cbb8SRichard Henderson uint64_t helper_get_walltime(void)
6169163fbbSRichard Henderson {
62884f17c2SAlex Bligh     return qemu_clock_get_ns(rtc_clock);
6369163fbbSRichard Henderson }
6469163fbbSRichard Henderson 
helper_set_alarm(CPUAlphaState * env,uint64_t expire)6569163fbbSRichard Henderson void helper_set_alarm(CPUAlphaState *env, uint64_t expire)
6669163fbbSRichard Henderson {
671c7ad260SRichard Henderson     AlphaCPU *cpu = env_archcpu(env);
68c9245853SAndreas Färber 
6969163fbbSRichard Henderson     if (expire) {
7069163fbbSRichard Henderson         env->alarm_expire = expire;
71bc72ad67SAlex Bligh         timer_mod(cpu->alarm_timer, expire);
7269163fbbSRichard Henderson     } else {
73bc72ad67SAlex Bligh         timer_del(cpu->alarm_timer);
7469163fbbSRichard Henderson     }
7569163fbbSRichard Henderson }
76