aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2019-06-30 00:18:05 +0200
committerHelge Deller <deller@gmx.de>2019-08-16 04:00:53 +0200
commitc8625df48fa0be4b791c20e7825cde60aaa747a7 (patch)
treee28f50c8684003f7cbea9e61613242d9719f5d34
parent505624a1305046d2d3c6098cd551c2688770f714 (diff)
downloadseabios-hppa-c8625df48fa0be4b791c20e7825cde60aaa747a7.zip
seabios-hppa-c8625df48fa0be4b791c20e7825cde60aaa747a7.tar.gz
seabios-hppa-c8625df48fa0be4b791c20e7825cde60aaa747a7.tar.bz2
Implement SeaBIOS returning additional addresses. Fixes HP-UX boot.
-rw-r--r--src/parisc/parisc.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c
index 41895bc..e038ddc 100644
--- a/src/parisc/parisc.c
+++ b/src/parisc/parisc.c
@@ -1235,11 +1235,24 @@ static int pdc_system_map(unsigned int *arg)
memset(result, 0, 32*sizeof(long));
result[0] = hpa; // .mod_addr for PDC_IODC
result[1] = 1; // .mod_pgs number of pages (FIXME: only graphics has more, e.g. 0x2000)
- result[2] = 0; // FIXME: additional addresses
-
+ result[2] = parisc_devices[hpa_index].num_addr; // additional addresses
return PDC_OK;
+
case PDC_FIND_ADDRESS:
- break;
+ hpa_index = ARG3;
+ if (hpa_index >= ARRAY_SIZE(parisc_devices))
+ return PDC_NE_MOD; // Module not found
+ hpa = parisc_devices[hpa_index].hpa;
+ if (!hpa)
+ return PDC_NE_MOD; // Module not found
+
+ memset(result, 0, 32*sizeof(long));
+ ARG4 -= 1;
+ if (ARG4 >= parisc_devices[hpa_index].num_addr)
+ return PDC_INVALID_ARG;
+ result[0] = parisc_devices[hpa_index].add_addr[ARG4];
+ result[1] = 1; // .mod_pgs number of pages (FIXME: only graphics has more, e.g. 0x2000)
+ return PDC_OK;
case PDC_TRANSLATE_PATH:
mod_path = (struct pdc_module_path *)ARG3;