diff options
author | Helge Deller <deller@gmx.de> | 2022-10-29 18:40:24 +0200 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2022-10-29 18:40:24 +0200 |
commit | f672d8968433fc52177e20d77b0e72db2d230cb8 (patch) | |
tree | 6a3f996e2a4bc69a20e06929cc8f3fd813937006 | |
parent | 0f5fe5041219220a11bfb66e209d5f3144579ff3 (diff) | |
download | seabios-hppa-f672d8968433fc52177e20d77b0e72db2d230cb8.zip seabios-hppa-f672d8968433fc52177e20d77b0e72db2d230cb8.tar.gz seabios-hppa-f672d8968433fc52177e20d77b0e72db2d230cb8.tar.bz2 |
cleanups
-rw-r--r-- | src/parisc/parisc.c | 284 |
1 files changed, 223 insertions, 61 deletions
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c index 5e3ba56..1dc40da 100644 --- a/src/parisc/parisc.c +++ b/src/parisc/parisc.c @@ -194,6 +194,9 @@ int pdc_console; #define CONSOLE_DEFAULT 0x0000 #define CONSOLE_SERIAL 0x0001 #define CONSOLE_GRAPHICS 0x0002 +#define CONSOLE_PSEUDO 0x0003 + +static const struct pz_device *console_display, *console_keyboard; unsigned int opsys_id = OS_ID_MPEXL; // default OS: OS_ID_HPUX or OS_ID_MPEXL unsigned int parisc_cpuid = PARISC_PDC_CPUID; @@ -254,6 +257,81 @@ static int index_of_CPU_HPA(unsigned long hpa) { return -1; } +#define IO_STATUS_READY 8 + +#if 0 + http://ftp.parisc-linux.org/docs/arch/pdc20-v1.1-Ch5-iodc.pdf + 5.5.8 Console Pseudo-Module Specific IODC, page 5-85 + IODC_TYPE must be implemented as already defined for other module types. The IODC_TYPE[type] field + must equal TP_CONSOLE, value 9. +#endif + +#define PDC_CONSOLE_HPA 0xfff84000 + +#define HPA_CONSOLE_DESCRIPTION "Merlin CONSOLE" +static struct pdc_system_map_mod_info mod_info_hpa_CONSOLE = { + .mod_addr = PDC_CONSOLE_HPA, + .mod_pgs = 0x0, + .add_addrs = 0x0, +}; + +static struct pdc_module_path mod_path_hpa_CONSOLE = { + .path = { .flags = 0x0, .bc = { 0xff, 0xff, 0xff, 0xff, 0x08, 0x11 }, .mod = 0x4 }, // 0x8,0x10 + .layers = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +}; +#if 0 + Type HW SW Revisions +Path Component Name ID Mod Mod Hdwr Firm +---------- ----------------------------------- ----- ----- ----- ----- ----- + + 2H 14H 60H 0 1 +8/4 Unknown Module 9H 3DH 38H 0 0 +{HPHW_CONSOLE, 0x004, 0x0001C, 0x00, "Cheetah console"}, +struct hp_hardware { + unsigned short hw_type:5; /* HPHW_xxx */ + unsigned short hversion; + unsigned long sversion:28; + unsigned short opt; + const char name[80]; /* The hardware description */ + + dev->id.hw_type = iodc_data[3] & 0x1f; + dev->id.hversion = (iodc_data[0] << 4) | ((iodc_data[1] & 0xf0) >> 4); + dev->id.hversion_rev = iodc_data[1] & 0x0f; + dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) | + (iodc_data[5] << 8) | iodc_data[6]; + +struct pdc_iodc { /* PDC_IODC */ + unsigned char hversion_model; + unsigned char hversion; + unsigned char spa; + unsigned char type; + unsigned int sversion_rev:4; + unsigned int sversion_model:19; + unsigned int sversion_opt:8; + unsigned char rev; +}; +#endif + +static struct pdc_iodc iodc_data_hpa_CONSOLE = { + // dev->id.hversion = (iodc_data[0] << 4) | ((iodc_data[1] & 0xf0) >> 4); + // dev->id.hversion_rev = iodc_data[1] & 0x0f; + .hversion_model = 0, + .hversion = 0x40, + .spa = 0x0000, + .type = 9, /* TP_CONSOLE = 9 */ + // dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) | (iodc_data[5] << 8) | iodc_data[6]; + .sversion_rev = 0, + .sversion_model = 0x1c >> 1, + .sversion_opt = 111, + .rev = 0x0000, + .dep = 0x0000, + .features = 0x0000, + .checksum = 0x6309, + .length = 0x0002, + /* pad: 0x0000, 0x0000 */ +}; + + static unsigned long GoldenMemory = MIN_RAM_SIZE; static unsigned int chassis_code = 0; @@ -383,6 +461,7 @@ static hppa_device_t parisc_devices[HPPA_MAX_CPUS+16] = { PARISC_DEVICE_LIST }; LASI_GFX_HPA,\ LASI_PS2KBD_HPA, \ LASI_PS2MOU_HPA, \ + PDC_CONSOLE_HPA, \ 0 static const char *hpa_name(unsigned long hpa) @@ -390,9 +469,6 @@ static const char *hpa_name(unsigned long hpa) struct pci_device *pci; int i; - if (opsys_id != OS_ID_MPEXL && hpa == MPE_CONSOLE_HPA) - return "NOT-MPE-CONSOLE"; - #define DO(x) if (hpa == x) return #x; DO(GSC_HPA) DO(DINO_HPA) @@ -410,7 +486,7 @@ static const char *hpa_name(unsigned long hpa) DO(LASI_PS2KBD_HPA) DO(LASI_PS2MOU_HPA) DO(LASI_GFX_HPA) - DO(MPE_CONSOLE_HPA) + DO(PDC_CONSOLE_HPA) #undef DO /* could be one of the SMP CPUs */ @@ -450,13 +526,13 @@ static int class_of_hpa(unsigned long hpa) case IDE_HPA: case DINO_SCSI_HPA: case LASI_SCSI_HPA: return CL_RANDOM; - case MPE_CONSOLE_HPA: /* MPE hack */ case DINO_UART_HPA: case LASI_UART_HPA: return CL_DUPLEX; case LASI_LAN_HPA: return CL_NULL; case LASI_LPT_HPA: return CL_NULL; // ?? case LASI_PS2KBD_HPA: return CL_KEYBD; case LASI_PS2MOU_HPA: return CL_NULL; // ?? + case PDC_CONSOLE_HPA: case LASI_GFX_HPA: return CL_DISPL; default: printf("SeaBIOS: %s: Class of hpa %lx unknown.\n", __FUNCTION__, hpa); @@ -467,7 +543,7 @@ static int class_of_hpa(unsigned long hpa) int HPA_is_serial_device(unsigned long hpa) { - return (hpa == DINO_UART_HPA) || (hpa == LASI_UART_HPA) || (hpa == MPE_CONSOLE_HPA); + return (hpa == DINO_UART_HPA) || (hpa == LASI_UART_HPA) || (hpa == PDC_CONSOLE_HPA); } int HPA_is_storage_device(unsigned long hpa) @@ -491,8 +567,9 @@ static const char *hpa_device_name(unsigned long hpa) { return HPA_is_graphics_device(hpa) ? "GRAPHICS(1)" : HPA_is_keyboard_device(hpa) ? "PS2" : - ((hpa + 0x800) == PORT_SERIAL1) ? - "SERIAL_1.9600.8.none" : "SERIAL_2.9600.8.none"; + ((hpa + 0x800) == PORT_SERIAL1) ? "SERIAL_1.9600.8.none" : + ((hpa + 0x800) == PORT_SERIAL2) ? "SERIAL_2.9600.8.none" : + "PDC_CONSOLE"; } static unsigned long keep_list[] = { PARISC_KEEP_LIST }; @@ -586,6 +663,21 @@ static void remove_parisc_devices(unsigned int num_cpus) t++; } + /* add PDC_CONSOLE_HPA */ + { + unsigned long hpa = PDC_CONSOLE_HPA; + + parisc_devices[t].hpa = hpa; + parisc_devices[t].iodc = &iodc_data_hpa_CONSOLE; + parisc_devices[t].mod_info = &mod_info_hpa_CONSOLE; + mod_path_hpa_CONSOLE.path.mod = (hpa - DINO_HPA) / 0x1000; // fix mod + parisc_devices[t].mod_path = &mod_path_hpa_CONSOLE; + parisc_devices[t].num_addr = 0; + parisc_devices[t].add_addr[0] = 0; + + t++; + } + BUG_ON(t > ARRAY_SIZE(parisc_devices)); while (t < ARRAY_SIZE(parisc_devices)) { @@ -596,8 +688,8 @@ static void remove_parisc_devices(unsigned int num_cpus) static int fix_hpa_hack(unsigned long hpa) { - if (hpa == MPE_CONSOLE_HPA && opsys_id == OS_ID_MPEXL) // MPE sets this value as screen output, how come? - return PARISC_SERIAL_CONSOLE - 0x800; + // if (hpa == MPE_CONSOLE_HPA && opsys_id == OS_ID_MPEXL) // MPE sets this value as screen output, how come? + // return PARISC_SERIAL_CONSOLE - 0x800; return hpa; } @@ -615,6 +707,50 @@ static int find_hpa_index(unsigned long hpa) return -1; } +static void path_to_string(char *str, volatile struct device_path *p) +{ + char *s = str; + int i; + + for (i = 0; i < 6; i++) + if (p->bc[i] >= 64) + { /* ignore "null" path elements (see the i/o acd ver 0.93 pg. 12-66). */ } + else { + snprintf(s, 10, "%d/", p->bc[i]); + while (*s) ++s; + } + + for (i = 0; i < 6; i++) { + snprintf(s, 10, "%d.", p->layers[i]); + while (*s) ++s; + } +} + +static void print_path(const char *prefix, volatile struct device_path *p) { + static char path[40]; + path_to_string(path, p); + printf(prefix); + printf("PATH = %s\n", path); +} + +static void layer_to_string(char *str, unsigned int *layers) +{ + char *s = str; + int i; + + for (i = 0; i < 6; i++) { + snprintf(s, 10, "%d.", layers[i]); + while (*s) ++s; + } +} + +static void print_layer(const char *prefix, unsigned long addr) { + static char path[40]; + layer_to_string(path, (unsigned int *)addr); + printf(prefix); + printf("PATH = %s\n", path); +} + static int compare_module_path(struct pdc_module_path *path, struct pdc_module_path *search, int check_layers) @@ -657,14 +793,6 @@ static hppa_device_t *find_hppa_device_by_path(struct pdc_module_path *search, return NULL; } -static portaddr_t ser_port_addr(unsigned long defport) -{ - if (opsys_id == OS_ID_MPEXL) - return PARISC_SERIAL_CONSOLE; /* XXX: workaround that MPE uses different serial port hpa */ - else - return defport; -} - #define SERIAL_TIMEOUT 20 static unsigned long parisc_serial_in(char *c, unsigned long maxchars) { @@ -672,7 +800,7 @@ static unsigned long parisc_serial_in(char *c, unsigned long maxchars) unsigned long count = 0; portaddr_t addr; - addr = ser_port_addr(PAGE0->mem_kbd.hpa + 0x800); + addr = console_keyboard->hpa + 0x800; while (count < maxchars) { u8 lsr = inb(addr+SEROFF_LSR); if (lsr & 0x01) { @@ -690,7 +818,7 @@ static void parisc_serial_out(char c) { portaddr_t addr; - addr = ser_port_addr(PAGE0->mem_cons.hpa + 0x800); + addr = console_display->hpa + 0x800; for (;;) { if (c == '\n') parisc_serial_out('\r'); @@ -766,8 +894,6 @@ int __VISIBLE parisc_iodc_ENTRY_IO(ARG_LIST) hpa = fix_hpa_hack(hpa); if (0 && hpa == DINO_HPA) // MPE uses the DINO HPA as boot medium with arg3=0x3d8 hpa = DINO_SCSI_HPA; - if (hpa == MPE_CONSOLE_HPA && opsys_id == OS_ID_MPEXL) - hpa = PARISC_SERIAL_CONSOLE - 0x800; if (find_hpa_index(hpa) < 0 && !HPA_is_storage_device(hpa)) { printf("parisc_iodc_ENTRY_IO Did not find hpa %lx\n", hpa); // return PDC_NE_CELL_MOD; /* Nonexistent device */ @@ -778,6 +904,8 @@ int __VISIBLE parisc_iodc_ENTRY_IO(ARG_LIST) case ENTRY_IO_COUT: /* console output */ c = (char*)ARG6; result[0] = len = ARG7; + /* get real output device */ + hpa = console_display->hpa; if (HPA_is_serial_device(hpa) || HPA_is_graphics_device(hpa)) { while (len--) printf("%c", *c++); @@ -785,6 +913,8 @@ int __VISIBLE parisc_iodc_ENTRY_IO(ARG_LIST) return PDC_OK; case ENTRY_IO_CIN: /* console input, with 5 seconds timeout */ c = (char*)ARG6; + /* get real input device */ + hpa = console_keyboard->hpa; /* FIXME: Add loop to wait for up to 5 seconds for input */ if (HPA_is_serial_device(hpa)) result[0] = parisc_serial_in(c, ARG7); @@ -805,9 +935,6 @@ int __VISIBLE parisc_iodc_ENTRY_IO(ARG_LIST) case ENTRY_IO_BOOTIN: /* boot medium IN */ case ENTRY_IO_BBLOCK_IN: /* boot block medium IN */ disk_op.command = CMD_READ; - - printf("JJ2222222222222222JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ\n"); - dump_mem(ARG3, 16, ARG3); process_bootio: if (ARG6 >= ram_size || (ARG6 + ARG7) >= ram_size || @@ -832,8 +959,8 @@ int __VISIBLE parisc_iodc_ENTRY_IO(ARG_LIST) } // ARG8 = maxsize !!! ret = process_op(&disk_op); - printf("\nBOOT IO res %d count = %d\n", ret, ARG7); - if ((pdc_debug & DEBUG_IODC) && (option == ENTRY_IO_BOOTOUT)) + // printf("\nBOOT IO res %d count = %d\n", ret, ARG7); + if (0 && (pdc_debug & DEBUG_IODC) && (option == ENTRY_IO_BOOTOUT)) printf("\nBOOT IO OUT ret %d count = %d\n", ret, ARG7); result[0] = ARG7; if (ret) @@ -860,8 +987,7 @@ int __VISIBLE parisc_iodc_ENTRY_INIT(ARG_LIST) iodc_log_call(ARG_REFS, __FUNCTION__); - if (hpa == MPE_CONSOLE_HPA && opsys_id == OS_ID_MPEXL) { - } else { + { hpa = fix_hpa_hack(hpa); hpa_index = find_hpa_index(hpa); if (hpa_index < 0) { @@ -872,17 +998,28 @@ int __VISIBLE parisc_iodc_ENTRY_INIT(ARG_LIST) switch (option) { case ENTRY_INIT_SRCH_FRST: /* 2: Search first */ - memcpy((void *)ARG3, &mod_path_emulated_drives.layers, - sizeof(mod_path_emulated_drives.layers)); /* fill ID_addr */ + if (!HPA_is_serial_device(hpa) & !HPA_is_storage_device(hpa)) + return PDC_NE_BOOTDEV; /* No further boot devices */ + memcpy((void *)ARG3, &mod_path_hpa_CONSOLE, + sizeof(mod_path_hpa_CONSOLE)); result[0] = 0; - result[1] = HPA_is_serial_device(hpa) ? CL_DUPLEX: - HPA_is_storage_device(hpa) ? CL_RANDOM : 0; + result[1] = class_of_hpa(hpa); result[2] = result[3] = 0; /* No network card, so no MAC. */ return PDC_OK; case ENTRY_INIT_SRCH_NEXT: /* 3: Search next */ - return PDC_NE_BOOTDEV; /* No further boot devices */ + if (!HPA_is_serial_device(hpa) & !HPA_is_storage_device(hpa)) + return PDC_NE_BOOTDEV; /* No further boot devices */ + ARG4 = (unsigned long) (char *) &(PAGE0->mem_boot.dp.layers); + memcpy((void *)ARG3, (void *) ARG4, + sizeof(mod_path_emulated_drives.layers)); /* fill ID_addr */ + result[0] = 0; + result[1] = CL_SEQU; /* TAPE HPA_is_storage_device(hpa) ? CL_RANDOM : 0; */ + result[2] = result[3] = 0; /* No network card, so no MAC. */ + return PDC_OK; case ENTRY_INIT_MOD_DEV: /* 4: Init & test mod & dev */ case ENTRY_INIT_DEV: /* 5: Init & test dev */ +printf("ENTRY_INIT_DEV called for "); + print_layer(" ", ARG3); if (HPA_is_storage_device(hpa)) { struct disk_op_s disk_op; int ret; @@ -893,12 +1030,14 @@ int __VISIBLE parisc_iodc_ENTRY_INIT(ARG_LIST) ret = process_op(&disk_op); printf("\nBOOT IO reset = %d\n", ret); } - result[0] = 0; /* module IO_STATUS */ + result[0] = IO_STATUS_READY; result[1] = class_of_hpa(hpa); +printf("ENTRY_INIT_DEV class %ld\n", result[1]); + asm("copy %r31,%r31"); result[2] = result[3] = 0; /* TODO?: MAC of network card. */ return PDC_OK; case ENTRY_INIT_MOD: /* 6: INIT */ - result[0] = 0; /* module IO_STATUS */ + result[0] = IO_STATUS_READY; return PDC_OK; } return PDC_BAD_OPTION; @@ -967,10 +1106,10 @@ int __VISIBLE parisc_iodc_ENTRY_TLB(ARG_LIST) ********************************************************/ #define STABLE_STORAGE_SIZE 2048 -static unsigned char stable_storage[STABLE_STORAGE_SIZE]; +static unsigned char stable_storage[STABLE_STORAGE_SIZE] __attribute__((aligned(256))); #define NVOLATILE_STORAGE_SIZE 2048 -static unsigned char nvolatile_storage[NVOLATILE_STORAGE_SIZE]; +static unsigned char nvolatile_storage[NVOLATILE_STORAGE_SIZE] __attribute__((aligned(256))); static void init_stable_storage(void) { @@ -1299,15 +1438,11 @@ static int pdc_iodc(ARG_LIST) hpa = ARG3; if (0 && hpa == IDE_HPA) { // do NOT check for DINO_SCSI_HPA, breaks Linux which scans IO areas for unlisted io modules iodc_p = &iodc_data_hpa_fff8c000; // workaround for PCI ATA (use DINO_SCSI_HPA) - } else if (hpa == MPE_CONSOLE_HPA && opsys_id == OS_ID_MPEXL) { - iodc_p = &iodc_data_hpa_ffd05000; // workaround for MPE RS-232 -printf("FIXME !!!!!\n\n"); -dump_mem(ARG3,12,ARG3); } else { hpa = fix_hpa_hack(hpa); hpa_index = find_hpa_index(hpa); if (hpa_index < 0) { - // printf("DEVICE NOT FOUND \n"); + printf("DEVICE NOT FOUND \n"); return -4; // not found } iodc_p = parisc_devices[hpa_index].iodc; @@ -1346,7 +1481,7 @@ dump_mem(ARG3,12,ARG3); case PDC_IODC_DINIT: /* 3: destructive init */ break; case PDC_IODC_MEMERR: /* 4: check for errors */ - result[0] = 0; /* IO_STATUS */ + result[0] = IO_STATUS_READY; result[1] = 0; result[2] = 0; result[3] = 0; @@ -2243,6 +2378,18 @@ static int parisc_boot_menu(unsigned long *iplstart, unsigned long *iplend, * FIRMWARE MAIN ENTRY POINT ********************************************************/ +static const struct pz_device mem_display_pseudo = { + .hpa = PDC_CONSOLE_HPA, + .iodc_io = (unsigned long)&iodc_entry, + .cl_class = CL_DISPL, // TP_CONSOLE = 9 ?? +}; + +static const struct pz_device mem_kbd_pseudo = { + .hpa = PDC_CONSOLE_HPA, + .iodc_io = (unsigned long)&iodc_entry, + .cl_class = CL_KEYBD, +}; + static const struct pz_device mem_cons_sti_boot = { .hpa = LASI_GFX_HPA, .iodc_io = (unsigned long)&iodc_entry, @@ -2267,7 +2414,7 @@ static struct pz_device mem_kbd_boot = { .cl_class = CL_KEYBD, }; -static const struct pz_device mem_boot_boot = { // the currently booted device +static struct pz_device mem_boot_boot = { // the currently booted device .dp.flags = PF_AUTOBOOT, .hpa = DINO_SCSI_HPA, // workaround as LASI_SCSI_HPA and DINO_SCSI_HPA may not exist in inventory! .iodc_io = (unsigned long) &iodc_entry, @@ -2415,6 +2562,8 @@ void __VISIBLE start_parisc_firmware(void) pdc_console = CONSOLE_SERIAL; if (strcmp(str, "graphics") == 0) pdc_console = CONSOLE_GRAPHICS; + if (strcmp(str, "console") == 0) + pdc_console = CONSOLE_PSEUDO; } /* 0,1 = default 8x16 font, 2 = 16x32 font */ @@ -2423,7 +2572,7 @@ void __VISIBLE start_parisc_firmware(void) /* 0: HP-UX/Linux, 2: MPE/XL */ opsys_id = romfile_loadstring_to_int("opt/os", opsys_id); if (opsys_id == OS_ID_MPEXL) { - struct pdc_model mpe_model = { MPE_PARISC_PDC_MODEL }; + // struct pdc_model mpe_model = { MPE_PARISC_PDC_MODEL }; // model = mpe_model; } else opsys_id = OS_ID_HPUX; /* else default to NONE */ @@ -2481,6 +2630,14 @@ void __VISIBLE start_parisc_firmware(void) // Initialize stable storage init_stable_storage(); + /* Initialize device list */ + remove_parisc_devices(smp_cpus); + + /* Show list of HPA devices which are still returned by firmware. */ + if (0) { for (i=0; parisc_devices[i].hpa; i++) + printf("Kept #%d at 0x%lx\n", i, parisc_devices[i].hpa); + } + // Initialize boot paths (graphics & keyboard) if (pdc_console == CONSOLE_DEFAULT) { if (artist_present()) @@ -2488,21 +2645,17 @@ void __VISIBLE start_parisc_firmware(void) else pdc_console = CONSOLE_SERIAL; } + if (pdc_console == CONSOLE_GRAPHICS) { - prepare_boot_path(&(PAGE0->mem_cons), &mem_cons_sti_boot, 0x60); - prepare_boot_path(&(PAGE0->mem_kbd), &mem_kbd_sti_boot, 0xa0); + console_display = &mem_cons_sti_boot; + console_keyboard = &mem_kbd_sti_boot; } else { - prepare_boot_path(&(PAGE0->mem_cons), &mem_cons_boot, 0x60); - prepare_boot_path(&(PAGE0->mem_kbd), &mem_kbd_boot, 0xa0); - } - - /* Initialize device list */ - remove_parisc_devices(smp_cpus); - - /* Show list of HPA devices which are still returned by firmware. */ - if (0) { for (i=0; parisc_devices[i].hpa; i++) - printf("Kept #%d at 0x%lx\n", i, parisc_devices[i].hpa); + console_display = &mem_cons_boot; + console_keyboard = &mem_kbd_boot; } + /* Install PSEUDO console */ + prepare_boot_path(&(PAGE0->mem_cons), &mem_display_pseudo, 0x60); + prepare_boot_path(&(PAGE0->mem_kbd), &mem_kbd_pseudo, 0xa0); chassis_code = 0; @@ -2570,6 +2723,9 @@ void __VISIBLE start_parisc_firmware(void) default: if (!boot_drive) boot_drive = parisc_pri_harddisc; } + // HACK: Set bootdrive to alt_harddisc + boot_drive = parisc_alt_harddisc; + /* default to DINO_SCSI_HPA */ mod_path_emulated_drives = mod_path_hpa_fff8c000; @@ -2587,15 +2743,21 @@ void __VISIBLE start_parisc_firmware(void) set_emulated_lun(&mod_path_emulated_drives, parisc_pri_harddisc); prepare_boot_path(NULL, &mem_boot_boot, 0x00); // store in STABLE[0x00] - set_emulated_lun(&mod_path_emulated_drives, parisc_alt_harddisc); + // -> HACK !!! + mem_boot_boot.cl_class = CL_SEQU; // and make it TAPE + set_emulated_lun(&mod_path_emulated_drives, boot_drive); // parisc_alt_harddisc); prepare_boot_path(NULL, &mem_boot_boot, 0x80); // store in STABLE[0x80] set_emulated_lun(&mod_path_emulated_drives, boot_drive); // SCSI-ID of boot drive in PAGE0 is still 0, but will be set later in parisc_boot_menu() // mod_path_emulated_drives.path.flags = PF_AUTOBOOT; prepare_boot_path(&(PAGE0->mem_boot), &mem_boot_boot, -1); // do not store in STABLE - dump_mem(&(PAGE0->mem_boot), 32, 0); - dump_mem(&stable_storage, 0x100, 0); + dump_mem((unsigned long)&(PAGE0->mem_boot), 48, (unsigned long)&(PAGE0->mem_boot)); + dump_mem((unsigned long)&stable_storage, 0x100, (unsigned long)&stable_storage); + + print_path("BOOT PATH PAGE0 ", &PAGE0->mem_boot.dp); + print_path("BOOT PATH STABLE", (volatile struct device_path *)&stable_storage); + print_path("BOOT CONSOLE ", &PAGE0->mem_cons.dp); init_nvolatile_storage(); |