/*
 * (C) 1984 UniSoft Corp. of Berkeley CA
 *
 * UniPlus Source Code. This program is proprietary
 * with Unisoft Corporation and is not to be reproduced
 * or used in any manner except as authorized in
 * writing by Unisoft.
 *
 * reinit.c - reinitialize parts of data segment for restarting unix
 */

#include "sys/param.h"
#include "sys/config.h"
#include "sys/types.h"
#include "sys/systm.h"
#include "sys/dir.h"
#include "sys/signal.h"
#include "sys/user.h"
#include "sys/errno.h"
#include "sys/file.h"
#include "sys/tty.h"
#include "sys/termio.h"
#include "sys/conf.h"
#include "sys/sysinfo.h"
#include "sys/var.h"
#include "sys/reg.h"
#include "setjmp.h"
#include "sys/kb.h"
#include "sys/sysmacros.h"
#include "sys/iobuf.h"
#include "sys/map.h"
#define	CMAPSIZ	50	/* also in conf.c */
#define	SMAPSIZ	50	/* also in conf.c */

extern mpid;		/* used by newproc to decide whether first "init" or not */

extern struct iostat prostat[];
extern struct iobuf protab;
extern struct iostat snstat[];
extern struct iobuf sntab;
extern struct iostat cvstat[];
extern struct iobuf cvtab;

extern char *kb_keytab;
extern char ToLA[];
extern char kb_altkp;
extern int (*te_putc)();
extern int vt_putc();
extern char vt_tabset[];
/*
 *	reinit - called from RESTART console ioctl call in sunix
 */
reinit()
{
	extern int teslotsused;
	register i;

	mpid = 0;

	retabinit(&protab, PR0, prostat);
	retabinit(&sntab, SN1, snstat);
	retabinit(&cvtab, CV2, cvstat);

	kb_keytab = ToLA;
	kb_shft = kb_lock = kb_altkp = 0;
	te_putc = vt_putc;
	for (i = 0 ; i < 88 ; i++ )
		vt_tabset[i] = 0;

	remapinit(&coremap[0], CMAPSIZ);
	remapinit(&swapmap[0], SMAPSIZ);
	/*
	 * reset tecmar four port card
	 */
	teslotsused = 0;
}

retabinit(tab, dev, stat)
register struct iobuf *tab;
struct iostat stat[];
{
	tab->b_flags = 0;
	tab->b_forw = 0;
	tab->b_back = 0;
	tab->b_actf = 0;
	tab->b_actl = 0;
	tab->b_dev = makedev(dev, 0);
	tab->b_active = 0;
	tab->b_errcnt = 0;
	tab->io_erec = 0;
	tab->io_nreg = 0;
	tab->io_addr = 0;
	tab->io_stp = stat;
	tab->io_start = 0;
	tab->io_s1 = 0;
	tab->io_s2 = 0;
}

remapinit(map, szmap)
struct map *map;
{
	map->m_size = szmap - 2;
	map->m_addr = 0;
	for (map++, szmap--; szmap > 0; map++, szmap--) {
		map->m_size = 0;
		map->m_addr = 0;
	}
}
