+
+int waittime = -1;
+
+boot(panic, arghowto)
+ int panic, arghowto;
+{
+ register int howto; /* r11 == how to boot */
+ register int devtype; /* r10 == major of root dev */
+
+ howto = arghowto;
+ printf("howto %d\n", howto);
+ if ((howto&RB_NOSYNC)==0 && waittime < 0) {
+ waittime = 0;
+ update();
+ printf("updating (wait");
+ while (++waittime <= 10) {
+ printf(".");
+ sleep((caddr_t)&lbolt, PZERO);
+ }
+ printf(") done\n");
+ }
+ splx(0x1f); /* extreme priority */
+ devtype = major(rootdev);
+ if ((howto&RB_HALT)==0) {
+ while ((mfpr(TXCS)&TXCS_RDY) == 0)
+ continue;
+ mtpr(TXDB, panic == RB_PANIC ? TXDB_AUTOR : TXDB_BOOT);
+ }
+ for (;;)
+ asm("halt");
+}