Port-vax archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: VAX RPB (Restart Parameter Block)
Holm Tiffe wrote:
> Since I want to post mortem debug my broken netbsd kernels with that scn
> driver, that auto restart at a halt instruction is annoying.
>
> As I wrote before I've set HALT to 3 before booting, but when the kernel
> is crashing it is set to 0 automagically.
>
> The Netbsd bootloader is faking an RPB in autoconf.c:
> -----------------------------------------------------------------------
> long *bootregs;
>
> /*
> * Do some initial setup. Also create a fake RPB for net-booted machines
> * that don't have an in-prom VMB.
> */
>
> void
> autoconf(void)
> {
> int copyrpb = 1;
> int fromnet = (bootregs[12] != -1);
>
> findcpu(); /* Configures CPU variables */
> consinit(); /* Allow us to print out things */
> scbinit(); /* Fix interval clock etc */
>
> #define Holm
> #ifdef Holm
>
> vax_siedata = *(int *)(0x20040004); /* SIE address */
> vax_boardtype |= vax_siedata >> 24;
> printf("\nvax_boardtype(sie): %x\n",vax_boardtype);
> #endif
>
>
> #ifdef DEV_DEBUG
> printf("\nRegister contents:\n");
> for (copyrpb = 0; copyrpb < 13; copyrpb++)
> printf("r%d: %lx\n", copyrpb, bootregs[copyrpb]);
> #endif
> switch (vax_boardtype) {
>
> case VAX_BTYP_780:
> case VAX_BTYP_790:
> case VAX_BTYP_8000:
> case VAX_BTYP_9CC:
> case VAX_BTYP_9RR:
> case VAX_BTYP_1202:
> if (fromnet == 0)
> break;
> copyrpb = 0;
> bootrpb.devtyp = bootregs[0];
> bootrpb.adpphy = bootregs[1];
> bootrpb.csrphy = bootregs[2];
> bootrpb.unit = bootregs[3];
> bootrpb.rpb_bootr5 = bootregs[5];
> bootrpb.pfncnt = 0;
> break;
>
> break;
>
> case VAX_BTYP_RT300:
> if (fromnet == 0)
> break;
> copyrpb = 0;
> bootrpb.devtyp = 100;
> bootrpb.csrphy = 0x20008000;
> bootrpb.unit = 0;
> bootrpb.pfncnt = 0;
> break;
>
> -----------------------------------------------------------------------
>
> ...and I think that the behavior with the reboot has something todo with
> that "bootregs".
>
> so I've looked at the ../../include/rpb.h file:
>
> -----------------------------------------------------------------------
> /*
> * Look at "VAX/VMS Internals and Data Structures" around page 907
> * to get more info about RPB.
> */
>
> struct rpb { /* size description */
> struct rpb *rpb_base; /* 4 physical base address of block */
> void (*rpb_restart)(void);/* 4 physical address of restart
> routine */
> long rpb_chksum;/* 4 checksum of first 31 longwords of restart
> */
> long rpb_rstflg; /* 4 Restart in progress flag */
> long rpb_haltpc; /* 4 PC at HALT/restart */
> /* offset: 20 */
> long rpb_haltpsl;/* 4 PSL at HALT/restart */
> long rpb_haltcode;/* 4 reason for restart */
> long rpb_bootr0;/* 24 Saved bootstrap parameters (R0 through R5)
> */
> long rpb_bootr1;
> long rpb_bootr2;
> long rpb_bootr3;
> long rpb_bootr4;
> long rpb_bootr5;
> long iovec; /* 4 Address of bootstrap driver */
> long iovecsz;/* 4 Size (in bytes) of bootstrap driver */
> /* offset: 60 */
> long fillbn; /* 4 LBN of seconday bootstrap file */
> long filsiz; /* 4 Size (in blocks) of seconday bootstrap file
> */
> long pfnmap[2]; /* 8 Descriptor of PFN bitmap */
> long pfncnt; /* 4 Count of physical pages */
> /* offset: 80 */
> long svaspt; /* 4 system virtual address of system page table
> */
> long csrphy; /* 4 Physical Address of UBA device CSR */
> long csrvir; /* 4 Virtual Address of UBA device CSR */
> long adpphy; /* 4 Physical Address of adapter configurate reg.
> */
> long adpvir; /* 4 Virtual Address of adapter configurate reg.
> */
> -----------------------------------------------------------------------
>
> ...and so I need to know a little more.
> Above in rpb.h is the hint about that
>
> Look at "VAX/VMS Internals and Data Structures" around page 907
>
> But this manual seems to be not existing as PDF or so.
> Does anyone have this on paper and could please doo a look at it?
>
> I want to know if the "HALT" Value from the firmware loader is lokated
> somewhere in the rpb astructure so I can it set right in the loader.
> I thought it is set somewhere in the 24 saved values and enabled
> DEV_DEBUG while building, but I can see nowhere a "3" in the
> registers at the start auf the autoconf:
> -----------------------------------------------------------------------
> 2..1..0..
> vax_boardtype(sie): a000009
>
> Register contents:
> r0: 20042f75
> r1: ffea00
> r2: 1000
> r3: ffba00
> r4: 0
> r5: 0
> r6: 0
> r7: 3fe6a8
> r8: 800
> r9: 1800
> r10: 1800
> r11: 0
> r12: 200
> -----------------------------------------------------------------------
>
> Or what is that rpb_rstflag meaning, I read somewhere in the rtVAX manual
> that a restart should be prevented when the booted Os is broken (for
> debugging purposes).
>
> THX,
>
> Holm
>
>
> --
Ok... found the manual on bitsavers.
Regards,
Holm
--
Technik Service u. Handel Tiffe, www.tsht.de, Holm Tiffe,
Freiberger Straße 42, 09600 Oberschöna, USt-Id: DE253710583
www.tsht.de, info%tsht.de@localhost, Fax +49 3731 74200, Mobil: 0172 8790 741
Home |
Main Index |
Thread Index |
Old Index