diff options
author | Helge Deller <deller@gmx.de> | 2024-02-09 21:36:07 +0100 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2024-04-02 14:22:45 +0200 |
commit | 19279978ab47e60475cbd604fcac0fdb3c031567 (patch) | |
tree | 549098cf4947c9b0d13127d63d37b89a1b07a17c | |
parent | 7b70058b8151f728c40c8b0520354396a86d43ae (diff) | |
download | seabios-hppa-19279978ab47e60475cbd604fcac0fdb3c031567.zip seabios-hppa-19279978ab47e60475cbd604fcac0fdb3c031567.tar.gz seabios-hppa-19279978ab47e60475cbd604fcac0fdb3c031567.tar.bz2 |
parisc: Add PDC_PAT_EVENT firmware call
Add the PAT_EVENT PDC function. Disable PAT for now as the c3k machines
do not seem to support PAT.
Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r-- | src/parisc/parisc.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c index e933c80..8c6d0cd 100644 --- a/src/parisc/parisc.c +++ b/src/parisc/parisc.c @@ -61,6 +61,7 @@ char cpu_bit_width; #endif #define is_64bit_CPU() (cpu_bit_width == 64) /* 64-bit CPU? */ +#define pat_disabled() 1 // !is_64bit_PDC() /* running 64-bit PDC, but called from 32-bit app */ #define is_compat_mode() (is_64bit_PDC() && ((psw_defaults & PDC_PSW_WIDE_BIT) == 0)) @@ -1411,6 +1412,7 @@ static const char *pdc_name(unsigned long num) DO(PDC_PAT_CELL) DO(PDC_PAT_CHASSIS_LOG) DO(PDC_PAT_CPU) + DO(PDC_PAT_EVENT) DO(PDC_PAT_PD) DO(PDC_LINK) #undef DO @@ -2266,6 +2268,8 @@ static int pdc_pat_cell(unsigned long *arg) return PDC_OK; case PDC_PAT_CELL_GET_INFO: return PDC_BAD_OPTION; /* optional on single-cell machines */ + case PDC_PAT_CELL_MODULE: + return PDC_BAD_OPTION; default: break; } @@ -2301,6 +2305,22 @@ static int pdc_pat_cpu(unsigned long *arg) return PDC_BAD_OPTION; } +static int pdc_pat_event(unsigned long *arg) +{ + unsigned long option = ARG1; + unsigned long *result = (unsigned long *)ARG2; + + switch (option) { + case PDC_PAT_EVENT_GET_CAPS: + result[0] = result[1] = 0x0f; /* XXX: review caps! */ + return PDC_OK; + default: + break; + } + dprintf(0, "\n\nSeaBIOS: Unimplemented PDC_PAT_CPU OPTION %lu called with ARG2=%lx ARG3=%lx ARG4=%lx\n", option, ARG2, ARG3, ARG4); + return PDC_BAD_OPTION; +} + static int pdc_pat_pd(unsigned long *arg) { unsigned long option = ARG1; @@ -2469,28 +2489,33 @@ int __VISIBLE parisc_pdc_entry(unsigned long *arg FUNC_MANY_ARGS) /* PDC PAT functions */ case PDC_PAT_CELL: - if (firmware_width_locked) + if (pat_disabled()) return PDC_BAD_PROC; return pdc_pat_cell(arg); case PDC_PAT_CHASSIS_LOG: - if (firmware_width_locked) + if (pat_disabled()) return PDC_BAD_PROC; dprintf(0, "\n\nSeaBIOS: PDC_PAT_CHASSIS_LOG OPTION %lu called with ARG2=%lx ARG3=%lx ARG4=%lx\n", option, ARG2, ARG3, ARG4); return PDC_BAD_PROC; case PDC_PAT_CPU: - if (firmware_width_locked) + if (pat_disabled()) return PDC_BAD_PROC; return pdc_pat_cpu(arg); + case PDC_PAT_EVENT: + if (pat_disabled()) + return PDC_BAD_PROC; + return pdc_pat_event(arg); + case PDC_PAT_PD: - if (firmware_width_locked) + if (pat_disabled()) return PDC_BAD_PROC; return pdc_pat_pd(arg); case PDC_PAT_MEM: - if (firmware_width_locked) + if (pat_disabled()) return PDC_BAD_PROC; return pdc_pat_mem(arg); } |