*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
*/
#include <stdint.h>
};
#if 0
-/* One must explicitely check that the TB is valid and the FOE bit is reset */
-static void update_itb ()
+/* One must explicitly check that the TB is valid and the FOE bit is reset */
+static void update_itb (void)
{
/* This writes into a temp register, not the actual one */
mtpr(TB_TAG);
mtpr(ITB_PTE);
}
-static void update_dtb ();
+static void update_dtb (void);
{
mtpr(TB_CTL);
/* This write into a temp register, not the actual one */
uint64_t physical, page_size, end;
int prot, zbits, ret;
- if (env->user_mode_only) {
+#if defined(CONFIG_USER_ONLY)
ret = 2;
- } else {
+#else
ret = virtual_to_physical(env, &physical, &zbits, &prot,
address, mmu_idx, rw);
- }
+#endif
switch (ret) {
case 0:
/* No fault */
void call_pal (CPUState *env, int palcode)
{
- target_ulong ret;
+ target_long ret;
- printf("%s: palcode %02x\n", __func__, palcode);
- if (logfile != NULL)
- fprintf(logfile, "%s: palcode %02x\n", __func__, palcode);
+ qemu_log("%s: palcode %02x\n", __func__, palcode);
switch (palcode) {
case 0x83:
/* CALLSYS */
- printf("CALLSYS n " TARGET_FMT_ld "\n", env->ir[0]);
- if (logfile != NULL)
- fprintf(logfile, "CALLSYS n " TARGET_FMT_ld "\n", env->ir[0]);
+ qemu_log("CALLSYS n " TARGET_FMT_ld "\n", env->ir[0]);
ret = do_syscall(env, env->ir[IR_V0], env->ir[IR_A0], env->ir[IR_A1],
env->ir[IR_A2], env->ir[IR_A3], env->ir[IR_A4],
env->ir[IR_A5]);
- env->ir[IR_A3] = ret;
- if (ret > (target_ulong)(-515)) {
- env->ir[IR_V0] = 1;
+ if (ret >= 0) {
+ env->ir[IR_A3] = 0;
+ env->ir[IR_V0] = ret;
} else {
- env->ir[IR_V0] = 0;
+ env->ir[IR_A3] = 1;
+ env->ir[IR_V0] = -ret;
}
break;
case 0x9E:
/* RDUNIQUE */
env->ir[IR_V0] = env->unique;
- printf("RDUNIQUE: " TARGET_FMT_lx "\n", env->unique);
+ qemu_log("RDUNIQUE: " TARGET_FMT_lx "\n", env->unique);
break;
case 0x9F:
/* WRUNIQUE */
env->unique = env->ir[IR_A0];
- printf("WRUNIQUE: " TARGET_FMT_lx "\n", env->unique);
+ qemu_log("WRUNIQUE: " TARGET_FMT_lx "\n", env->unique);
break;
default:
- printf("%s: unhandled palcode %02x\n", __func__, palcode);
- if (logfile != NULL)
- fprintf(logfile, "%s: unhandled palcode %02x\n",
+ qemu_log("%s: unhandled palcode %02x\n",
__func__, palcode);
exit(1);
}