/* Copyright 1984 by the Massachusetts Institute of Technology */

/*
 *------------------------------------------------------------------
 *
 * $Source: /mit/cgw/conf/e19gw/RCS/systbl-c.c,v $
 * $Revision: 1.2 $
 * $Date: 89/03/17 16:57:43 $
 * $State: Exp $
 * $Author: jon $
 * $Locker: jon $
 *
 * $Log:	systbl-c.c,v $
 * Revision 1.2  89/03/17  16:57:43  jon
 * slip and nip support
 * 
 *------------------------------------------------------------------
 */

#ifndef lint
static char *rcsid_systbl_c = "$Header: systbl-c.c,v 1.2 89/03/17 16:57:43 jon Locked $";
#endif	lint

/* System definition */

#include	<types.h>
#include	<sys.h>

#include	<gw/dev.vax/async.h>
#include	<gw/dev.vax/dhv.h>

#define	NULL	0

/* definitions of packet sizes */
#define	MX_PKT	3000		/* Size of largest packet */
#define	MX_SH	4		/* software header (MPW) */
#define	MX_HH	14		/* hardware header (10 Mb EtherNet) */
#define	MX_ST	0		/* software trailer */
#define	MX_HT	6		/* hardware trailer (chaos) */

/*
 * System initialization routines
 */

ext void	log_init(), opcon_register();
ext word	log_cmd;
ext void	time_init(), io_init(), bus_int();
ext void	initgw();
ext void	INNET(), CHNET(), ARP(), RIP(), NIP();
ext void	STAT();
ext void	restart_init();
ext void	tcp_Init(), SUPDUP();

struct inittbl	INITTBL[] = {
			/* system initialization */
	log_init, 0,		/* logging */
	time_init, 0,		/* timers */
	io_init, 0,		/* devices */
	STAT, 60*60,		/* log gateway stats every 60 minutes */
	opcon_register, (word)(&log_cmd), /* init logging commands */

	initgw, 0,	/* gateway initialization */
		
			/* protocol initialization */
	INNET, 0,		/* internet */
	CHNET, 0,		/* chaos net */
	ARP, 0,			/* address resolution protocol */
	RIP, 0,	    		/* Routed */
	NIP, 0,                 /* JIS's Network Information Protocol */
	tcp_Init, 0,		/* TCP */
	SUPDUP, 0,		/* SUPDUP server */

	restart_init, 0, /* Sets up restart parameter block */
	0, 0
};

/*
 * Device definitions
 */

ext void viiii(), viioi(), viiin(), viiot(), vii_up();
ext void qna_in_up(), qna_out_up(), qna_out(), qna_in(), qna_int();
ext void dhii(), dhoi(), dhup(), dhin(), dhot();
ext void con_rup(), con_tup(), con_out(), con_rint(), con_tint();
ext void sd_tup(), sd_write();

dct viidct[2] = {
	DCTMAC(viiii, vii_up, viiin, 0x20001a80, 0x2b0, &viidct[1]),
	DCTMAC(viioi, vii_up, viiot, 0x20001a88, 0x2b4, &viidct[0])
	};

dct qnadct[2] = {
	DCTMAC(qna_int, qna_in_up, qna_in, 0x20001920, 0x3f8, &qnadct[1]),
	DCTMAC(qna_int, qna_out_up, qna_out, 0x20001920, 0x3fc, &qnadct[0])
	};

dct condct[2] = {
    DCTMAC(con_rint, con_rup, NULL, 0, 0xf8, &condct[1]),
    DCTMAC(con_tint, con_tup, con_out, 0, 0xfc, &condct[0]),
};

dct sddct[1] = {
    DCTMAC(NULL, sd_tup, sd_write, 0, 0, &sddct[0]),
};

struct async_conf modem_19200 = {
    PARITY_OFF,
    CHAR_LEN_8,
    STOP1,
    MODEM,
    BAUD_19200,
    BAUD_19200,
    FC_NONE
};

struct async_conf modem_9600 = {
    PARITY_OFF,
    CHAR_LEN_8,
    STOP1,
    MODEM,
    BAUD_9600,
    BAUD_9600,
    FC_NONE
};

struct async_conf modem_4800 = {
    PARITY_OFF,
    CHAR_LEN_8,
    STOP1,
    MODEM,
    BAUD_4800,
    BAUD_4800,
    FC_NONE
};

struct async_conf modem_2400 = {
    PARITY_OFF,
    CHAR_LEN_8,
    STOP1,
    MODEM,
    BAUD_2400,
    BAUD_2400,
    FC_NONE
};

struct async_conf CTS_9600 = {
    PARITY_OFF,
    CHAR_LEN_8,
    STOP1,
    MODEM,
    BAUD_9600,
    BAUD_9600,
    FC_NONE
};

extern dct dhodct[];
/* CSR used to be 0760440 */
dct dhidct[8] = {
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), VAX_INT(0310), &dhodct[0],
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[1], 
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[2], 
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[3], 
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[4], 
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[5], 
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[6], 
	    &modem_19200),
    DCTMAC2(dhii, dhup, dhin, VAX_CSR(0760460), NO_IVEC, &dhodct[7], 
	    &modem_19200),
};

dct dhodct[8] = {
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), VAX_INT(0314), &dhidct[0]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[1]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[2]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[3]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[4]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[5]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[6]),
    DCTMAC(dhoi, NULL, dhot, VAX_CSR(0760460), NO_IVEC, &dhidct[7]),
};

dct *DCTVT[] =	{	&viidct[0],
			&viidct[1],
			&qnadct[0],
			&qnadct[1],
			&dhidct[0], &dhidct[1], &dhidct[2], &dhidct[3],
			&dhidct[4], &dhidct[5], &dhidct[6], &dhidct[7],
			&dhodct[0], &dhodct[1], &dhodct[2], &dhodct[3],
			&dhodct[4], &dhodct[5], &dhodct[6], &dhodct[7],
			&condct[0],
			&condct[1],
			&sddct[0],
			NULL
		};

dct *log_dev = &condct[1];

/*
 * Global Variables defined per configuration
 *
 *	These should really be set from the net structure at runtime.
 */

word	pktsiz = MX_PKT + MX_SH + MX_HH + MX_ST + MX_HT;
word	hdrsiz = MX_SH + MX_HH;
word	tlrsiz = MX_ST + MX_HT;
word	bufsiz = sizeof(iorb) + MX_PKT + MX_SH + MX_HH + MX_ST + MX_HT;
word	pktoff = sizeof(iorb) + MX_SH + MX_HH;
