diff options
author | Helge Deller <deller@gmx.de> | 2024-01-18 18:05:56 +0100 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2024-01-18 18:05:56 +0100 |
commit | e3e9267f62a16269314b9ac5a00ee04ea4bb2b5b (patch) | |
tree | 83a8fccfc778c7c9dbbd342b18fbe990430e7e21 /src/parisc/parisc.c | |
parent | 6863b001b50319311daaba7a94c23764cd8bc271 (diff) | |
download | seabios-hppa-e3e9267f62a16269314b9ac5a00ee04ea4bb2b5b.zip seabios-hppa-e3e9267f62a16269314b9ac5a00ee04ea4bb2b5b.tar.gz seabios-hppa-e3e9267f62a16269314b9ac5a00ee04ea4bb2b5b.tar.bz2 |
head: Prepare code to build 64-bit firmware
Adjust for bigger pdc and iodc entry points too.
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'src/parisc/parisc.c')
-rw-r--r-- | src/parisc/parisc.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c index 52a8148..bb313f5 100644 --- a/src/parisc/parisc.c +++ b/src/parisc/parisc.c @@ -159,9 +159,11 @@ unsigned int tlb_entries = 256; #define PARISC_SERIAL_CONSOLE PORT_SERIAL1 extern char pdc_entry; -extern char pdc_entry_table[4*4]; +extern char pdc_entry_table; +extern char pdc_entry_table_end; extern char iodc_entry[512]; -extern char iodc_entry_table[14*4]; +extern char iodc_entry_table; +extern char iodc_entry_table_one_entry; /* args as handed over for firmware calls */ #define ARG0 arg[7-0] @@ -1669,7 +1671,7 @@ static int pdc_iodc(unsigned int *arg) { unsigned long option = ARG1; unsigned long *result = (unsigned long *)ARG2; - unsigned long hpa; + unsigned long hpa, entry_len; hppa_device_t *dev; struct pdc_iodc *iodc_p; unsigned char *c; @@ -1707,9 +1709,10 @@ static int pdc_iodc(unsigned int *arg) memcpy((void*) ARG5, &iodc_entry, *result); c = (unsigned char *) &iodc_entry_table; /* calculate offset into jump table. */ - c += (ARG4 - PDC_IODC_RI_INIT) * 2 * sizeof(unsigned int); - memcpy((void*) ARG5, c, 2 * sizeof(unsigned int)); - // dprintf(0, "\n\nSeaBIOS: Info PDC_IODC function OK\n"); + entry_len = &iodc_entry_table_one_entry - &iodc_entry_table; + c += (ARG4 - PDC_IODC_RI_INIT) * entry_len; + memcpy((void*) ARG5, c, entry_len); + // printf("\n\nSeaBIOS: Info PDC_IODC function OK\n"); flush_data_cache((char*)ARG5, *result); return PDC_OK; break; @@ -3118,8 +3121,9 @@ void __VISIBLE start_parisc_firmware(void) /* memset((void*)PAGE0, 0, sizeof(*PAGE0)); */ /* copy pdc_entry entry into low memory. */ - memcpy((void*)MEM_PDC_ENTRY, &pdc_entry_table, 4*4); - flush_data_cache((char*)MEM_PDC_ENTRY, 4*4); + i = &pdc_entry_table_end - &pdc_entry_table; + memcpy((void*)MEM_PDC_ENTRY, &pdc_entry_table, i); + flush_data_cache((char*)MEM_PDC_ENTRY, i); PAGE0->memc_cont = ram_size; PAGE0->memc_phsize = ram_size; |