bobs@randvax.UUCP (Rober Schwartzkopf) (01/30/91)
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 3 (of 3)."
# Contents: cmdidx.h cmdmacro.h
# Wrapped by bobs@chumley on Tue Jan 29 17:41:52 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'cmdidx.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'cmdidx.h'\"
else
echo shar: Extracting \"'cmdidx.h'\" \(4127 characters\)
sed "s/^X//" >'cmdidx.h' <<'END_OF_FILE'
X/*
X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/cmdidx.h,v 1.1 91/01/29 17:37:34 root Exp $
X *
X * $Log: cmdidx.h,v $
X * Revision 1.1 91/01/29 17:37:34 root
X * Initial revision
X *
X */
X
X/*
X** Copyright (C) 1987, 1988 Kinetics, Inc. All Rights Reserved.
X** This program contains proprietary confidential information
X** and trade secrets of Kinetics, Inc. Reverse engineering
X** of object code is prohibited. Use of copyright notice
X** is precautionary and does not imply publication.
X**
X**
X** Indices into the jump table for PROM routines.
X** Also, the command numbers for the routines when invoked
X** from Kinetics LAP type command packets.
X**
X** NOTE: this include file is used in assembly source as
X** well as C source, and so may not contain any C-dependent
X** definitions.
X*/
X
X/* number of mc68000 vectors we support: */
X#define NUMVECS 64
X
X/* number of entries in subroutine table: */
X#define NUMKCMDS 150
X
X/* commands commented with KLAP are callable as remote procedures: */
X#define X_VERSION 0 /* KLAP */
X#define X_EXECUTE 1 /* KLAP */
X#define X_ACK 2 /* OBSOLETE */
X#define X_REBOOT 3 /* KLAP */
X#define X_SET68 4
X#define X_SET86 5
X#define X_ATINIT 6
X#define X_ATWRITE 7
X#define X_WAIT 8 /* KLAP */
X#define X_WHEREIS 9 /* KLAP */
X#define X_GETMEM 10 /* KLAP */
X#define X_PROTECT 11 /* KLAP */
X#define X_COPYMEM 12 /* KLAP */
X#define X_CLRMEM 13 /* KLAP */
X#define X_PROMRAM 14 /* KLAP */
X#define X_RESET 15 /* KLAP */
X#define X_USER0 16 /* KLAP */
X#define X_USER1 17 /* KLAP */
X#define X_USER2 18 /* KLAP */
X#define X_USER3 19 /* KLAP */
X#define X_USER4 20 /* KLAP */
X#define X_USER5 21 /* KLAP */
X#define X_USER6 22 /* KLAP */
X#define X_USER7 23 /* KLAP */
X#define X_BUFINIT 24
X#define X_BUFGET 25
X#define X_BUFFREE 26
X#define X_BUFENQ 27
X#define X_BUFDEQ 28
X#define X_ERR 29 /* KLAP */
X#define X_IDLE 30 /* KLAP */
X#define X_KLAP 31
X#define X_WHO 32 /* KLAP */
X#define X_CA86 33
X#define X_RES86 34
X#define X_CLRINT 35
X#define X_RCSID 36 /* KLAP */
X#define X_EXPROM 37 /* KLAP */
X#define X_INIPROM 38 /* KLAP */
X#define X_RES8530 39
X#define X_DMTSERV 40
X#define X_SREC 41 /* KLAP */
X#define X_SPL 42 /* KLAP */
X#define X_LED 43
X#define X_RAND 44 /* KLAP */
X#define X_CMPMEM 45 /* KLAP */
X#define X_SENDF 46
X#define X_MEMSEG 47
X#define X_MALLOC 48
X#define X_FREE 49
X#define X_IE_INIT 50
X#define X_IEXSTART 51
X#define X_KLAP2 52
X#define X_PROM1_CHECK 53
X#define X_PROM1_EXECUTE 54 /* KLAP */
X#define X_ARPINIT 55
X#define X_ARPINPUT 56
X#define X_ARPRESOLVE 57
X#define X_ARPTIMER 58
X#define X_ISIPAARP 59
X#define X_ETINIT 60
X#define X_TIMING 61
X#define X_ARPDUMP 62 /* KLAP */
X#define X_ROUTEDDP 63
X#define X_NBPINIT 64
X#define X_NBPINPUT 65
X#define X_RTMPINIT 66
X#define X_RTMPINPUT 67
X#define X_RTMPRESPONSE 68
X#define X_RTMPTIMER 69
X#define X_ZIPINIT 70
X#define X_ZIPINPUT 71
X#define X_ZIPTIMER 72
X#define X_ATPINIT 73
X#define X_ATPINPUT 74
X#define X_ECHOINIT 75
X#define X_ECHOINPUT 76
X#define X_DDPIPINIT 77
X#define X_ROUTEDDPINIT 78
X#define X_AUTOCINIT 79
X#define X_HASHINIT 80
X#define X_NEWHASHTABLE 81
X#define X_LOOKUP 82
X#define X_ADD 83
X#define X_REMOVE 84
X#define X_FIRST 85
X#define X_NEXT 86
X#define X_NETLOOKUP 87
X#define X_RMRTMP 88
X#define X_RTMPREPLACE 89
X#define X_ADDNET 90
X#define X_RMNET 91
X#define X_FINDZONE 92
X#define X_AUTOCONF 93
X#define X_RESET_AUTOCONF 94
X#define X_DDPREPLY 95
X#define X_ROUTEIP 96
X#define X_ISSAMEZONE 97
X#define X_CHECKSUM 98
X#define X_WHERE2 99 /* KLAP */
X#define X_GETCFGSUM 100 /* KLAP */
X#define X_SETCFGSUM 101 /* KLAP */
X#define X_DMSG 102 /* KLAP */
X#define X_STATE 103 /* KLAP */
X#define X_HWSTATUS 104 /* KLAP */
X#define X_SENDFINIT 105
X#define X_IESTATS 106 /* KLAP */
X#define X_AATWRITE 107
X#define X_ALLBUFS 108
X#define X_MAKEBUFS 109
X#define X_CLRPROTSTATS 110 /* KLAP */
X#define X_GETPROTSTATS 111 /* KLAP */
X#define X_SIZEMEM 112 /* KLAP */
X#define X_SETACKLEN 113
X#define X_IDENT 114 /* KLAP */
X#define X_SETMCAST 115 /* KLAP */
X#define X_CHECKFREE 116 /* KLAP */
X#define X_CLRLOG 117 /* KLAP */
X#define X_PAUSE 118 /* KLAP */
X#define X_NOTIMP (NUMKCMDS-1)
END_OF_FILE
if test 4127 -ne `wc -c <'cmdidx.h'`; then
echo shar: \"'cmdidx.h'\" unpacked with wrong size!
fi
# end of 'cmdidx.h'
fi
if test -f 'cmdmacro.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'cmdmacro.h'\"
else
echo shar: Extracting \"'cmdmacro.h'\" \(44942 characters\)
sed "s/^X//" >'cmdmacro.h' <<'END_OF_FILE'
X/*
X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/cmdmacro.h,v 1.1 91/01/29 17:37:37 root Exp $
X *
X * $Log: cmdmacro.h,v $
X * Revision 1.1 91/01/29 17:37:37 root
X * Initial revision
X *
X */
X
X/*
X** Copyright (C) 1987 Kinetics, Inc. All Rights Reserved.
X** This program contains proprietary confidential information
X** and trade secrets of Kinetics, Inc. Reverse engineering
X** of object code is prohibited. Use of copyright notice
X** is precautionary and does not imply publication.
X**
X**
X** The PROM loader guarantees the following to be true when the
X** downloaded program begins executing:
X**
X** - CPU is in supervisor state,
X** - Interrupt service is at level 7
X** - 'sp' contains the address of the boot prom 'jump_table'
X** defined below
X**
X** NOTE: this file included by assembly and C source,
X** all C statements are to be bracketed by ASM_INCLUDE
X*/
X
X/*#include <cmdidx.h> /* use the position dependent command
X ** indices for the X_nnn constants
X */
X#ifndef ASM_INCLUDE
Xstruct fp_table {
X struct {
X unsigned short opcode;
X unsigned long dst_addr;
X } jump_table[NUMVECS];/* one jump per mc68000 vector */
X
X int (*subr_table[NUMKCMDS])();
X char rpctab[NUMKCMDS]; /* 1 indicates corresponding routine
X ** can be called via KLAP, 0 indicates
X ** subroutine only
X */
X};
X
Xextern struct fp_table *table_ptr;
X
X#define K_VERSION(a) table_ptr->subr_table[X_VERSION](a)
X#define K_EXECUTE() table_ptr->subr_table[X_EXECUTE]()
X#define K_ACK() table_ptr->subr_table[X_ACK]()
X#define K_REBOOT() table_ptr->subr_table[X_REBOOT]()
X#define K_SET68() table_ptr->subr_table[X_SET68]()
X#define K_SET86(a) table_ptr->subr_table[X_SET86](a)
X#define K_ATINIT(a) table_ptr->subr_table[X_ATINIT](a)
X#define K_ATWRITE(a) table_ptr->subr_table[X_ATWRITE](a)
X#define K_WAIT(a) table_ptr->subr_table[X_WAIT](a)
X#define K_WHEREIS(a) table_ptr->subr_table[X_WHEREIS](a)
X#define K_GETMEM(a) table_ptr->subr_table[X_GETMEM](a)
X#define K_PROTECT(a) table_ptr->subr_table[X_PROTECT](a)
X#define K_COPYMEM(a) table_ptr->subr_table[X_COPYMEM](a)
X#define K_CLRMEM(a) table_ptr->subr_table[X_CLRMEM](a)
X#define K_PROMRAM(a) table_ptr->subr_table[X_PROMRAM](a)
X#define K_RESET() table_ptr->subr_table[X_RESET]()
X#define K_USER0(a) table_ptr->subr_table[X_USER0](a)
X#define K_USER1(a) table_ptr->subr_table[X_USER1](a)
X#define K_USER2(a) table_ptr->subr_table[X_USER2](a)
X#define K_USER3(a) table_ptr->subr_table[X_USER3](a)
X#define K_USER4(a) table_ptr->subr_table[X_USER4](a)
X#define K_USER5(a) table_ptr->subr_table[X_USER5](a)
X#define K_USER6(a) table_ptr->subr_table[X_USER6](a)
X#define K_USER7(a) table_ptr->subr_table[X_USER7](a)
X#define K_BUFINIT(a) table_ptr->subr_table[X_BUFINIT](a)
X#define K_BUFGET(a) table_ptr->subr_table[X_BUFGET](a)
X#define K_BUFFREE(a) table_ptr->subr_table[X_BUFFREE](a)
X#define K_BUFENQ(a) table_ptr->subr_table[X_BUFENQ](a)
X#define K_BUFDEQ(a) table_ptr->subr_table[X_BUFDEQ](a)
X#define K_ERR() table_ptr->subr_table[X_ERR]()
X#define K_IDLE() table_ptr->subr_table[X_IDLE]()
X#define K_KLAP(a) table_ptr->subr_table[X_KLAP](a)
X#define K_WHO() table_ptr->subr_table[X_WHO]()
X#define K_CA86() table_ptr->subr_table[X_CA86]()
X#define K_RES86() table_ptr->subr_table[X_RES86]()
X#define K_CLRINT() table_ptr->subr_table[X_CLRINT]()
X#define K_RCSID(a) table_ptr->subr_table[X_RCSID](a)
X#define K_EXPROM() table_ptr->subr_table[X_EXPROM]()
X#define K_INIPROM() table_ptr->subr_table[X_INIPROM]()
X#define K_RES8530() table_ptr->subr_table[X_RES8530]()
X#define K_DMTSERV() table_ptr->subr_table[X_DMTSERV]()
X#define K_SREC(a) table_ptr->subr_table[X_SREC](a)
X#define K_SPL(a) table_ptr->subr_table[X_SPL](a)
X#define K_LED(a) table_ptr->subr_table[X_LED](a)
X#define K_RAND(a) table_ptr->subr_table[X_RAND](a)
X#define K_CMPMEM(a) table_ptr->subr_table[X_CMPMEM](a)
X#define K_SENDF(a) table_ptr->subr_table[X_SENDF](a)
X#define K_MEMSEG(a) table_ptr->subr_table[X_MEMSEG](a)
X#define K_MALLOC(a) table_ptr->subr_table[X_MALLOC](a)
X#define K_FREE(a) table_ptr->subr_table[X_FREE](a)
X#define K_IE_INIT(a) table_ptr->subr_table[X_IE_INIT](a)
X#define K_IEXSTART(a) table_ptr->subr_table[X_IEXSTART](a)
X#define K_KLAP2(a) table_ptr->subr_table[X_KLAP2](a)
X#define K_PROM1_CHECK(a) table_ptr->subr_table[X_PROM1_CHECK](a)
X#define K_PROM1_EXECUTE() table_ptr->subr_table[X_PROM1_EXECUTE]()
X#define K_ARPINIT(a) table_ptr->subr_table[X_ARPINIT](a)
X#define K_ARPINPUT(a) table_ptr->subr_table[X_ARPINPUT](a)
X#define K_ARPRESOLVE(a) table_ptr->subr_table[X_ARPRESOLVE](a)
X#define K_ARPTIMER(a) table_ptr->subr_table[X_ARPTIMER](a)
X#define K_ISIPAARP(a) table_ptr->subr_table[X_ISIPAARP](a)
X#define K_ARPDUMP() table_ptr->subr_table[X_ARPDUMP]()
X#define K_ETINIT(a) table_ptr->subr_table[X_ETINIT](a)
X#define K_TIMING(a) table_ptr->subr_table[X_TIMING](a)
X#define K_ROUTEDDP(a) table_ptr->subr_table[X_ROUTEDDP](a)
X#define K_NBPINIT() table_ptr->subr_table[X_NBPINIT]()
X#define K_NBPINPUT(a) table_ptr->subr_table[X_NBPINPUT](a)
X#define K_RTMPINIT(a) table_ptr->subr_table[X_RTMPINIT](a)
X#define K_RTMPINPUT(a) table_ptr->subr_table[X_RTMPINPUT](a)
X#define K_RTMPRESPONSE(a) table_ptr->subr_table[X_RTMPRESPONSE](a)
X#define K_RTMPTIMER() table_ptr->subr_table[X_RTMPTIMER]()
X#define K_ZIPINIT(a) table_ptr->subr_table[X_ZIPINIT](a)
X#define K_ZIPINPUT(a) table_ptr->subr_table[X_ZIPINPUT](a)
X#define K_ZIPTIMER() table_ptr->subr_table[X_ZIPTIMER]()
X#define K_ATPINIT() table_ptr->subr_table[X_ATPINIT]()
X#define K_ATPINPUT(a) table_ptr->subr_table[X_ATPINPUT](a)
X#define K_ECHOINIT(a) table_ptr->subr_table[X_ECHOINIT](a)
X#define K_ECHOINPUT(a) table_ptr->subr_table[X_ECHOINPUT](a)
X#define K_DDPIPINIT(a) table_ptr->subr_table[X_DDPIPINIT](a)
X#define K_ROUTEDDPINIT(a) table_ptr->subr_table[X_ROUTEDDPINIT](a)
X#define K_AUTOCINIT(a) table_ptr->subr_table[X_AUTOCINIT](a)
X#define K_HASHINIT() table_ptr->subr_table[X_HASHINIT]()
X#define K_NEWHASHTABLE(a) table_ptr->subr_table[X_NEWHASHTABLE](a)
X#define K_LOOKUP(a) table_ptr->subr_table[X_LOOKUP](a)
X#define K_ADD(a) table_ptr->subr_table[X_ADD](a)
X#define K_REMOVE(a) table_ptr->subr_table[X_REMOVE](a)
X#define K_FIRST(a) table_ptr->subr_table[X_FIRST](a)
X#define K_NEXT(a) table_ptr->subr_table[X_NEXT](a)
X#define K_NETLOOKUP(a) table_ptr->subr_table[X_NETLOOKUP](a)
X#define K_RMRTMP(a) table_ptr->subr_table[X_RMRTMP](a)
X#define K_RTMPREPLACE(a) table_ptr->subr_table[X_RTMPREPLACE](a)
X#define K_ADDNET(a) table_ptr->subr_table[X_ADDNET](a)
X#define K_RMNET(a) table_ptr->subr_table[X_RMNET](a)
X#define K_FINDZONE(a) table_ptr->subr_table[X_FINDZONE](a)
X#define K_AUTOCONF(a) table_ptr->subr_table[X_AUTOCONF](a)
X#define K_RESET_AUTOCONF(a) table_ptr->subr_table[X_RESET_AUTOCONF](a)
X#define K_DDPREPLY(a) table_ptr->subr_table[X_DDPREPLY](a)
X#define K_ROUTEIP(a) table_ptr->subr_table[X_ROUTEIP](a)
X#define K_ISSAMEZONE(a) table_ptr->subr_table[X_ISSAMEZONE](a)
X#define K_CHECKSUM(a) table_ptr->subr_table[X_CHECKSUM](a)
X#define K_WHERE2(a) table_ptr->subr_table[X_WHERE2](a)
X#define K_GETCFGSUM(a) table_ptr->subr_table[X_GETCFGSUM](a)
X#define K_SETCFGSUM() table_ptr->subr_table[X_SETCFGSUM]()
X#define K_DMSG(a) table_ptr->subr_table[X_DMSG](a)
X#define K_STATE(a) table_ptr->subr_table[X_STATE](a)
X#define K_HWSTATUS(a) table_ptr->subr_table[X_HWSTATUS](a)
X#define K_SENDFINIT() table_ptr->subr_table[X_SENDFINIT]()
X#define K_IESTATS(a) table_ptr->subr_table[X_IESTATS](a)
X#define K_AATWRITE(a) table_ptr->subr_table[X_AATWRITE](a)
X#define K_ALLBUFS(a) table_ptr->subr_table[X_ALLBUFS](a)
X#define K_MAKEBUFS(a) table_ptr->subr_table[X_MAKEBUFS](a)
X#define K_CLRPROTSTATS() table_ptr->subr_table[X_CLRPROTSTATS]()
X#define K_GETPROTSTATS(a) table_ptr->subr_table[X_GETPROTSTATS](a)
X#define K_SIZEMEM(a) table_ptr->subr_table[X_SIZEMEM](a)
X#define K_SETACKLEN(a) table_ptr->subr_table[X_SETACKLEN](a)
X#define K_IDENT(a) table_ptr->subr_table[X_IDENT](a)
X#define K_SETMCAST(a) table_ptr->subr_table[X_SETMCAST](a)
X#define K_CHECKFREE() table_ptr->subr_table[X_CHECKFREE]()
X#define K_CLRLOG() table_ptr->subr_table[X_CLRLOG]()
X#define K_NOTIMP() table_ptr->subr_table[X_NOTIMP]()
X
X/* structures and macro definitions for the above commands */
X
X/* X_VERSION */
Xstruct fp_version {
X short fpv_entries; /* number of valid entries in jump table */
X short fpv_version; /* version of the prom code */
X long fpv_model; /* "KFPS", "KFPQ", or "KFPM" */
X};
X
X/* X_EXECUTE */
X/* no parameters */
X
X/* X_ACK */
X/* no parameters */
X
X/* X_REBOOT */
X/* no parameters */
X
X/* X_SET68 */
X/* no parameters */
X
X/* X_SET86 */
X/* this structure is really defined in ie.h, but it should look like this */
X#ifdef NEVER
Xstruct scb {
X unsigned short sc_status; /* status */
X unsigned short sc_cmd; /* command */
X unsigned short sc_clist; /* command list */
X unsigned short sc_rlist; /* receive frame list */
X unsigned short sc_crcerrs; /* crc errors */
X unsigned short sc_alnerrs; /* alignment errors */
X unsigned short sc_rscerrs; /* resource errors (lack of rfd/rbd's) */
X unsigned short sc_ovrnerrs; /* overrun errors (mem bus not avail) */
X};
X#endif NEVER
X
X/* X_ATINIT */
X/* The parameter is a pointer to a short which is filled in with
X the node number chosen by the AppleTalk initialization sequence */
X
X/* X_ATWRITE */
Xstruct fp_atwrite {
X short fpw_length; /* number of bytes in the following string */
X unsigned char *fpw_str; /* string to be output onto the network */
X};
X
X/* X_WAIT */
X/* The parameter is a long integer which indicates
X the number of milliseconds to delay */
X
X/* X_WHEREIS */
Xstruct fp_whereis {
X char *fpw_rom0; /* first address of 1st ROM */
X char *fpw_rom1; /* first address of 2nd ROM */
X char *fpw_8530; /* address of Zilog 8530 chip */
X char *fpw_0port; /* address of 1st 8-bit port */
X char *fpw_1port; /* address of 2nd 8-bit port */
X char *fpw_ram2; /* address of 1st RAM location */
X char *fpw_ramtop; /* address of last RAM location */
X};
X
X/* X_GETMEM and X_CLRMEM and X_BUFINIT */
Xstruct fp_mem {
X unsigned short fpm_count; /* number of bytes */
X char *fpm_memp; /* addr of allocated or to be cleared memory */
X};
X
X/* X_PROTECT */
Xstruct fp_proelem { /* protection array element */
X unsigned short fpp_count; /* number of bytes to protect */
X char *fpp_memp; /* address of memory to protect */
X unsigned short fpp_chksum; /* checksum of protected memory */
X};
X
Xstruct fp_protect {
X short fpt_oper; /* type of protection operation and result */
X short fpt_count; /* number of elements in protection array */
X struct fp_proelem *fpt_elem; /* addr 1st element in protection array */
X};
X#endif ASM_INCLUDE
X
X/* fpt_oper operations */
X#define PR_FAIL -1 /* result: check of checksums failed */
X#define PR_PASS 0 /* result: check of checksums passed */
X#define PR_PROTECT 1 /* operation: start protect via elem array */
X#define PR_CHECK 2 /* operation: verify protect via elem array */
X#define PR_CANCEL 3 /* operation: cancel protect via elem array */
X
X#ifndef ASM_INCLUDE
X/* X_COPYMEM and X_CMPMEM */
Xstruct fp_copy {
X char *fpc_from; /* location to copy/cmp bytes from */
X char *fpc_to; /* location to copy/cmp bytes to */
X unsigned short fpc_count; /* number of bytes to copy/cmp */
X};
X
X/* macros based on COPYMEM and CMPMEM */
X#define K_BCOPY(addr1,addr2,cnt) { \
X struct fp_copy ab; \
X ab.fpc_from = (char *)(addr1); \
X ab.fpc_to = (char *)(addr2); \
X ab.fpc_count = (unsigned short)(cnt); \
X K_COPYMEM(&ab); \
X}
X
X#define K_BZERO(addr,cnt) { \
X struct fp_mem ab; \
X ab.fpm_count = (unsigned short)(cnt); \
X ab.fpm_memp = (char *)(addr); \
X K_CLRMEM(&ab); \
X}
X
X#define K_BCMP(rv,addr1,addr2,cnt) { \
X struct fp_copy ab; \
X ab.fpc_from = (char *)(addr1); \
X ab.fpc_to = (char *)(addr2); \
X ab.fpc_count = (unsigned short)(cnt); \
X K_CMPMEM(&ab); \
X (rv) = (int)ab.fpc_count; \
X}
X#endif ASM_INCLUDE
X
X/* X_PROMRAM */
X
X/* packet buffer allocation types: */
X#define PT_NTYPES 16 /* total number of types defined below */
X#define PT_FREE 0 /* should be on free list */
X#define PT_ABUS 1 /* received AppleTalk packet */
X#define PT_ENET 2 /* received Ethernet packet */
X#define PT_ARP 3 /* ARP packet */
X#define PT_DATA 4 /* general data */
X#define PT_ERBF 5 /* awaiting Ethernet receive packet */
X#define PT_ETBF 6 /* awaiting Ethernet transmit complete */
X#define PT_MALLOC 7 /* buffer allocated by malloc() */
X#define PT_NFS 8 /* buffer allocated for nfs */
X#define PT_ASP 9 /* buffer for asp */
X#define PT_NOFREE 10 /* don't free this buffer, for asp*/
X#define PT_UNUSED4 11 /* spare, for future use or debugging */
X#define PT_UNUSED5 12 /* spare, for future use or debugging */
X#define PT_UNUSED6 13 /* spare, for future use or debugging */
X#define PT_UNUSED7 14 /* spare, for future use or debugging */
X#define PT_UNUSED8 15 /* spare, for future use or debugging */
X
X#ifndef ASM_INCLUDE
Xstruct fp_bufinfo {
X struct pbuf **fpb_pfree;/* beginning of the free list */
X struct pqueue *fpb_pq; /* received buffers queue (both networks) */
X struct pqueue *fpb_sendq;/* Ethernet transmit queue */
X unsigned short fpb_bsize; /* size of a buffer including header */
X unsigned short fpb_pbnavail; /* total # of pbufs initialized */
X unsigned long fpb_pbndrops; /* no buffers (used to be a short) */
X unsigned short fpb_pbntypes[PT_NTYPES];
X /* type specific pbuf allocations */
X};
X#endif ASM_INCLUDE
X
X/* NOTE - SNAMESIZE used in fp_ident as well */
X#define SNAMESIZE 21 /* extra char for null at end */
X#define ZNAMESIZE 33 /* extra char for null at end */
X#define FNAMESIZE 33 /* extra char for null at end */
X#define OPTSIZE 32 /* number of bytes for option parameters */
X#define NAMESIGNATURE 0x48617276 /* stored in fps_signature if fps_name
X ** field has been set by FastPath Manager
X */
X#ifndef ASM_INCLUDE
X
Xstruct tftp_data {
X char unix_path[194];
X unsigned long srvr_addr;
X};
X
Xstruct afp_data {
X char mac_path[64];
X char srvr_zone[ZNAMESIZE];
X char srvr_name[FNAMESIZE];
X char usr_name[32];
X char usr_passwd[8];
X char volume[28];
X};
X
X/*
X** WARNING: this size of this structure MUST be adjusted to
X** max lap size (586). adjust fps_spare as necessary.
X*/
Xstruct fp_state {
X unsigned short fps_atnet; /* current net number for AppleTalk side */
X unsigned short fps_etnet; /* current net number for Ethernet side */
X unsigned char fps_valid; /* following AppleTalk node number valid */
X unsigned char fps_node; /* current AppleTalk LAP node number */
X unsigned char fps_netw; /* network number (not used) */
X unsigned char fps_bridge; /* last known bridge num on net if any */
X unsigned char fps_ether[6]; /* current ethernet address */
X char fps_name[SNAMESIZE];/* ascii name of the gateway */
X char fps_file[SNAMESIZE];/* ascii name of srec file last loaded */
X unsigned char fps_pforce; /* non-zero forces execution of prom loop */
X unsigned char fps_reserve; /* even pad */
X unsigned char fps_unused[4];
X char fps_atzone[ZNAMESIZE]; /* zone name for AppleTalk side */
X char fps_etzone[ZNAMESIZE]; /* zone name for Ethernet side */
X unsigned char fps_ETvalid; /* EtherTalk node number valid */
X unsigned char fps_ETnode; /* EtherTalk LAP node number */
X short fps_autoconfig; /* auto-config switch */
X short fps_autoboot; /* auto-boot switch */
X unsigned long fps_options; /* option flags */
X char fps_optparam[OPTSIZE]; /* optional parameters */
X
X /* box specific data */
X
X long fps_sn; /* serial number of this box */
X long fps_date; /* time/date of last configuration */
X short fps_type; /* 0 = AppleTalk Only, 1 = IP Subnet, 2 = KIP */
X char fps_config[FNAMESIZE]; /* name of config file for this box */
X char fps_1align; /* pad for compiler */
X
X char fps_udpzone[ZNAMESIZE]; /* UDP AppleTalk zone name */
X char fps_2align; /* pad for compiler */
X
X /* IP & KIP parameters */
X
X unsigned long fps_ipdefrouter;/* address of default IP router */
X unsigned long fps_ipaddress; /* Ethernet IP address of FastPath */
X unsigned long fps_ATipaddress;/* AppleTalk IP address of FastPath */
X unsigned long fps_ipbroadcast;/* IP broadcast address */
X unsigned long fps_ipsubmask; /* IP subnet mask */
X unsigned long fps_ipkipserver;/* IP address of administrator host */
X unsigned short fps_udpnet; /* UDP AppleTalk net number */
X unsigned char fps_udpnode; /* UDP AppleTalk node number */
X unsigned char fps_3align; /* padding */
X
X unsigned long fps_nameserver; /* IP address of name server */
X unsigned long fps_fileserver; /* IP address of file server */
X long fps_lp1; /* local parameter #1 */
X long fps_lp2; /* local parameter #2 */
X long fps_lp3; /* local parameter #3 */
X long fps_lp4; /* local parameter #4 */
X short fps_ndynamics; /* number of dynamically assigned
X ** addresses for IP assignment on EtherTalk
X */
X short fps_nstatics; /* number of statically assigned
X ** addresses served by this box
X */
X
X /* more box specific data: */
X long fps_signature; /* signature for validating gateway name */
X
X /* decnet stuff */
X unsigned short fps_areanode; /* area and node */
X short fps_backtimer; /* background routing timer */
X short fps_hellotimer; /* hello timer */
X
X /* AppleTalk 2.0 stuff */
X unsigned short fps_rstart; /* range start for EtherTalk 2.0 */
X unsigned short fps_rend; /* range end for EtherTalk 2.0 */
X unsigned short fps_et2net; /* net number for EtherTalk 2.0 side */
X unsigned char fps_et2valid; /* EtherTalk 2.0 node number valid */
X unsigned char fps_et2node; /* EtherTalk 2.0 LAP node number */
X unsigned char *fps_zoneList; /* ptr to zone list for EtherTalk 2.0 */
X unsigned long fps_configTypes; /* reserved for FastPath Manager */
X
X /* defines what is next */
X unsigned short fps_data_type; /* defines following data */
X unsigned short fps_data_len; /* includes length field but not type */
X
X /* Atalkap stuff */
X unsigned short fps_atap_options;
X unsigned short fps_atap_retry;
X
X union {
X struct tftp_data tftp;
X struct afp_data afp;
X } fps_trnsprt;
X
X unsigned char fps_spare[46]; /* available for future use */
X unsigned long fps_cfgsum; /* configuration area checksum */
X};
X
X/* defines for the types pointed to by fps_configPtr */
X#define CFG_ZONE_LIST 1
X
X/*
X** new abstats structure, corresponding to Appletalk version 49
X*/
Xstruct fp_abstats {
X int IntCount; /* receive interrupt count */
X int AbortCount; /* abort interrupt count */
X int SpurCount; /* spurrious interrupt count */
X int RcvCount; /* good data packets received */
X int XmitCount; /* data packets transmitted */
X int CRCCount; /* bad CRC (all packets) */
X int OvrCount; /* receive overruns (all packets) */
X int UndCount; /* receive underruns (all packets) */
X int NoHandCnt; /* No protocol handler for packet */
X int LenErrCnt; /* Packet length does not match header's */
X int BadCount; /* Bad packets seen */
X int CollsnCount; /* Number of assumed collisions */
X int DeferCount; /* Number of times deferred to other packets */
X int NoDtaCount; /* No packet seen after RTS in */
X int RandomCTS; /* Unsolicted CTS */
X};
X
X/*
X** the max size for the following structure is 64
X*/
Xstruct fp_promram {
X short fpr_count; /* number of valid ptrs that follow */
X struct fp_table **fpr_jtable; /* jump table */
X struct fp_bufinfo *fpr_bufs; /* buffer manager vector */
X struct fp_state *fpr_state; /* Prompt program's state vector */
X struct fp_abstats *fpr_abstats; /* AppleTalk statistics vector */
X struct fp_iestats *fpr_iestats; /* Ethernet statistics vector */
X char *fpr_1debug; /* first level debug flag */
X char *fpr_2debug; /* second level debug flag */
X char *fpr_3debug; /* third level debug flag */
X struct fp_ddpstats *fpr_ddpstats;/* DDP statistics vector */
X char *fpr_logbuf; /* log buffer address */
X char *fpr_protstats; /* protected scratch area address */
X char fpr_unused[18]; /* remaining ptrs are not defined yet */
X};
X
X/* X_RESET */
X/* no parameters */
X
X/* X_USER0, X_USER1, X_USER2, X_USER3, X_USER4, X_USER5, X_USER6, X_USER7 */
X/* parameters (if any) defined by user */
X
X/* X_BUFGET */
Xstruct fp_bget {
X struct pbuf *fpg_buf; /* address of buffer returned */
X short fpg_type; /* type of buffer to be "gotten" */
X};
X
X#define K_PGET(type,buf) { \
X struct fp_bget bg; \
X bg.fpg_type = (type); \
X K_BUFGET(&bg); \
X (buf) = bg.fpg_buf; \
X}
X
X/* X_BUFFREE */
Xstruct fp_bfree {
X struct pbuf *fpf_buf; /* address of buffer to be freed */
X struct pbuf *fpf_nxt; /* the freed buffer's link before it was freed*/
X};
X
X#define K_PFREE(buf) { \
X struct fp_bfree bf; \
X bf.fpf_buf = (buf); \
X K_BUFFREE(&bf); \
X}
X
X#define K_PFREEN(buf,nxt) { \
X struct fp_bfree bf; \
X bf.fpf_buf = (buf); \
X K_BUFFREE(&bf); \
X (nxt) = bf.fpf_nxt; \
X}
X
X/* X_BUFENQ and X_BUFDEQ */
Xstruct fp_bqueue {
X struct pqueue *fpq_q; /* addr of queue to enqueue to / dequeue from */
X struct pbuf *fpq_buf; /* addr of buffer to be enqueued or dequeued */
X};
X
X#define K_PENQ(level,head,buf) { \
X struct fp_bqueue bq; \
X short pr; \
X bq.fpq_q = (head); \
X bq.fpq_buf = (buf); \
X pr = (level); \
X K_SPL(&pr); \
X K_BUFENQ(&bq); \
X K_SPLX(&pr); \
X}
X
X#define K_PENQNP(head,buf) { \
X struct fp_bqueue bq; \
X bq.fpq_q = (head); \
X bq.fpq_buf = (buf); \
X K_BUFENQ(&bq); \
X}
X
X#define K_PDEQ(level,head,buf) { \
X struct fp_bqueue bq; \
X short pr; \
X bq.fpq_q = (head); \
X pr = (level); \
X K_SPL(&pr); \
X K_BUFDEQ(&bq); \
X K_SPL(&pr); \
X (buf) = bq.fpq_buf; \
X}
X
X#define K_PDEQNP(head,buf) { \
X struct fp_bqueue bq; \
X bq.fpq_q = (head); \
X K_BUFDEQ(&bq); \
X (buf) = bq.fpq_buf; \
X}
X
X/* X_ERR */
X/* no parameters */
X
X/* X_IDLE */
X/* no parameters */
X
X/* X_KLAP */
X/* The parameter is the address of a pbuf structure. See pbuf.h. */
X
X/* X_WHO */
X/* no parameters */
X
X/* X_CA86 */
X/* no parameters */
X
X/* X_RES86 */
X/* no parameters */
X
X/* X_CLRINT */
X/* no parameters */
X
X/* X_RCSID */
X/* The parameter is the address of a character array which is filled
X in with the current RCS identification string of this PROM version. */
X
X/* X_EXPROM */
X/* no parameters */
X
X/* X_INIPROM */
X/* no parameters */
X
X/* X_RES8530 */
X/* no parameters */
X
X/* X_DMTSERV */
X/* no parameters */
X
X/* X_SREC */
X/* The parameter is the address of a character array which contains
X the S-record to be interpreted and used by the gateway */
X
X/* X_SPL */
X/* The parameter is the address of a short which becomes the next processor
X priority level. The previous priority level is returned at same location */
X#endif ASM_INCLUDE
X
X/* macros for various spl options */
X#define SPL0_VAL 0x2000
X#define SPLIE_VAL 0x2200
X#define SPLABUS_VAL 0x2500
X#define SPLIMP_VAL 0x2700
X
X#ifndef ASM_INCLUDE
X#define K_SPL0(a) { \
X *(a) = SPL0_VAL; \
X K_SPL(a); \
X}
X
X#define K_SPLIE(a) { \
X *(a) = SPLIE_VAL; \
X K_SPL(a); \
X}
X#define K_SPLABUS(a) { \
X *(a) = SPLABUS_VAL; \
X K_SPL(a); \
X}
X
X#define K_SPLIMP(a) { \
X *(a) = SPLIMP_VAL; \
X K_SPL(a); \
X}
X
X#define K_SPLX(a) { \
X K_SPL(a); \
X}
X
X/* X_LED */
Xstruct fp_led {
X char fpl_leds; /* bit field: each bit is an led */
X char fpl_state; /* LED_ON, LED_OFF, LED_TOGGLE */
X};
X#endif ASM_INCLUDE
X
X/* constants for fpl_onoff */
X#define LED_OFF 0
X#define LED_ON 1
X#define LED_TOGGLE 2 /* if on, off. if off, on */
X
X#ifndef ASM_INCLUDE
X/* macros for led calls */
X#define K_LEDON() { \
X struct fp_led fpl; \
X fpl.fpl_leds = 0; /* currently not used (only one led) */ \
X fpl.fpl_state = LED_ON; \
X K_LED(&fpl); \
X}
X
X#define K_LEDOFF() { \
X struct fp_led fpl; \
X fpl.fpl_leds = 0; /* currently not used (only one led) */ \
X fpl.fpl_state = LED_OFF; \
X K_LED(&fpl); \
X}
X
X#define K_LEDTOGGLE() { \
X struct fp_led fpl; \
X fpl.fpl_leds = 0; /* currently not used (only one led) */ \
X fpl.fpl_state = LED_TOGGLE; \
X K_LED(&fpl); \
X}
X
X/* X_RAND */
X/* The parameter is the address of a long integer which has a new random
X number in it when the call returns. */
X
X/* X_SENDF */
X/* The parameter is the address of a stack location which contains a format
X string address and followed by the variable number of arguments which are
X required by that format string */
X
X/* X_DMSG */
X/* The parameter is a pointer to a 586 byte area in which to copy the
X messages. */
X
X/* X_MEMSEG, X_MALLOC, X_FREE */
Xstruct fp_malloc {
X union {
X long fpo_size; /* bytes, for memseg and malloc */
X unsigned char *fpo_area; /* ptr to area, for free */
X } fpo_parm;
X};
X
X#define MEMSEG(cast_type,kcp,kss) { \
X struct fp_malloc xyz0; \
X xyz0.fpo_parm.fpo_size = (kss); \
X K_MEMSEG(&xyz0); \
X (kcp) = (cast_type)xyz0.fpo_parm.fpo_area; \
X}
X
X#define MALLOC(cast_type,kcp,kss) { \
X struct fp_malloc xyz0; \
X xyz0.fpo_parm.fpo_size = (kss); \
X K_MALLOC(&xyz0); \
X (kcp) = (cast_type)xyz0.fpo_parm.fpo_area; \
X}
X
X#define FREE(kcp) { \
X struct fp_malloc xyz0; \
X xyz0.fpo_parm.fpo_area = (unsigned char *)(kcp); \
X K_FREE(&xyz0); \
X}
X#endif ASM_INCLUDE
X
X/*
X** X_IE_INIT
X**
X** ethernet initialization options:
X*/
X#define STANDARD 0x0000 /* standard config */
X#define NO_CRS 0x0008 /* transmit even if no carrier */
X#define PROMISCUOUS 0x0001 /* promiscuous mode */
X
X#ifndef ASM_INCLUDE
Xstruct fp_ieinit {
X unsigned short fpie_options; /* one of:
X ** {STANDARD, NO_CRS, PROMISCUOUS} */
X unsigned char *fpie_etheraddr; /* ethernet address */
X struct pqueue *fpie_recq; /* recevie queue to use */
X int fpie_nbufs; /* number of buffers to use */
X};
X
X#define IE_INIT(O,E,Q,N) { \
X struct fp_ieinit arg; \
X arg.fpie_options = (O); /* options */ \
X arg.fpie_etheraddr = (E); /* ethernet address */ \
X arg.fpie_recq = (Q); /* receive queue to use */ \
X arg.fpie_nbufs = (N); /* number of buffers to use */ \
X K_IE_INIT(&arg); \
X}
X
X/* X_IEXSTART */
X /* takes pbuf as parameter */
X
X/* X_KLAP2 - version 2.0 of KLAP allows KLAP on ethernet: */
Xstruct fp_klap {
X struct pbuf **kl_pbuf; /* pkt handle - contents set to 0 if freed */
X struct ifnet *kl_ifp; /* interface received on */
X};
X
X#define KLAP2(P,IFP) { \
X struct fp_klap arg; \
X arg.kl_pbuf = (P); /* packet handle (struct **pbuf) */ \
X arg.kl_ifp = (IFP); /* interface received on */ \
X K_KLAP2(&arg); \
X}
X#endif ASM_INCLUDE
X
X/* X_PROM1_CHECK */
X /* takes pointer to int as parameter - sets to 1 if PROM1 socket
X ** populated, otherwise 0.
X */
X#define MAGIC_PROM1 0x4b465053 /* this must be first long in PROM1
X ** for PROM0 to execute it
X */
X
X#ifndef ASM_INCLUDE
X/* X_PROM1_EXECUTE - no parameters */
X
X/* X_ARPINIT */
Xstruct fp_arp_init {
X int options;
X struct Addr *address;
X};
X#endif ASM_INCLUDE
X /* the "options" parameter consists of one or more of the
X ** following options or'ed together:
X */
X#define ARPOPT_IP_OFF 0x0000
X#define ARPOPT_IP_ON 0x0001
X#define ARPOPT_FAKEIP_ON 0x0002
X
X#ifndef ASM_INCLUDE
X#define ARPINIT(OPT, ADDR) { \
X struct fp_arp_init arg; \
X arg.options = (OPT); \
X arg.address = (struct Addr *) (ADDR); \
X K_ARPINIT(&arg); \
X}
X
X/* X_ARPINPUT */
Xstruct fp_arpin {
X struct pbuf **arp_pbuf; /* pkt handle - contents set to 0 if freed */
X struct ifnet *arp_ifp; /* hardware interface received on */
X unsigned short arp_afin; /* protocol interface received on */
X};
X
X#define ARPINPUT(P,IFP,AFIN) { \
X struct fp_arpin arg; \
X arg.arp_pbuf = (P); \
X arg.arp_ifp = (IFP); \
X arg.arp_afin = (AFIN); \
X K_ARPINPUT(&arg); \
X}
X
X/* X_ARPRESOLVE */
Xstruct fp_arpresolve {
X struct pbuf **arpr_pbuf;/* pkt handle - contents set to 0 if freed */
X struct ifnet *arpr_ifp; /* hardware interface received on */
X unsigned long *arpr_pdst; /* protocol destination (value) */
X unsigned char *arpr_hdst; /* hardware destination (result) */
X short *isresolved; /* contents set to 1 if resolved */
X};
X
X#define ARPRESOLVE(P,IFP,PDST,HDST,ISRESOLVED) { \
X struct fp_arpresolve arg; \
X arg.arpr_pbuf = (P); \
X arg.arpr_ifp = (IFP); \
X arg.arpr_pdst = (PDST); \
X arg.arpr_hdst = (HDST); \
X arg.isresolved = (ISRESOLVED); \
X K_ARPRESOLVE(&arg); \
X}
X
X/* X_ISIPAARP */
Xstruct fp_isipaarp {
X struct pbuf *pkt; /* input ARP for IP resolution */
X short *isaarp; /* contents set to 1 if an AARP masquerading
X ** as IP ARP, o'wise set to 0
X */
X};
X
X#define ISIPAARP(P,ANS) { \
X struct fp_isipaarp arg; \
X arg.pkt = (P); /* VALUE parameter */ \
X arg.isaarp = (ANS); /* RESULT parameter */ \
X K_ISIPAARP(&arg); \
X}
X
X/* X_ARPDUMP */
X /* no parameters */
X
X/* X_ETINIT */
X /* parameter is pointer to if_net structure of EtherTalk interface.
X ** if_dnode is a VALUE-RESULT, initial value is taken as a hint
X ** for node-finding. if_addr[3] is a RESULT - this is the
X ** EtherTalk node number saved as an IP address, used in
X ** earlier implementations, and retained for backwards compatibility.
X */
X#endif ASM_INCLUDE
X
X/* X_TIMING */
X#define MC68008 1
X#define MC68000 2
X
X#ifndef ASM_INCLUDE
Xstruct fp_timing {
X int processor; /* processor type */
X int hertz; /* processor clock speed in hertz */
X};
X
X/* X_ROUTEDDPINIT */
Xstruct fp_routeddpinit {
X struct ifnet *ifab; /* AppleTalk interface structure */
X struct ifnet *ifie; /* Ethernet interface structure */
X struct ifnet *ifabip; /* AppleTalk IP interface structure */
X int *iscombgw; /* is combined gateway? */
X struct pqueue *pq; /* incoming packet queue */
X};
X
X#define ROUTEDDPINIT(IFAB, IFIE, IFABIP, ISCOMBGW, PQ) { \
X struct fp_routeddpinit arg; \
X arg.ifab = (IFAB); \
X arg.ifie = (IFIE); \
X arg.ifabip = (IFABIP); \
X arg.iscombgw = (ISCOMBGW); \
X arg.pq = (PQ); \
X K_ROUTEDDPINIT(&arg); \
X}
X
X/* X_ROUTEDDP */
Xstruct fp_routeddp {
X struct pbuf **p; /* LAP data of packet to route */
X unsigned char lapdest; /* short ddp params from lap */
X unsigned char lapsrc;
X unsigned char laptype;
X struct ifnet *fromifp; /* interface packet came from */
X};
X
X#define ROUTEDDP(PKT, DST, SRC, TYPE, IFP) { \
X struct fp_routeddp arg; \
X arg.p = (PKT); \
X arg.lapdest = (DST); \
X arg.lapsrc = (SRC); \
X arg.laptype = (TYPE); \
X arg.fromifp = (IFP); \
X K_ROUTEDDP(&arg); \
X}
X
X/* X_NBPINPUT */
X/* X_RTMPINPUT */
X/* X_RTMPRESPONSE */
X/* X_ZIPINPUT */
X/* X_ATPINPUT */
X/* X_ECHOINPUT */
Xstruct fp_input {
X struct pbuf **p; /* pointer to the incoming packet */
X struct gen_ddp *ddp_info; /* generic ddp */
X struct ifnet *ifp; /* interface packet came from */
X};
X
X/* X_NBPINIT */
X/* no parameters */
X
X#define NBPINPUT(PKT, DDP, IFP) { \
X struct fp_input arg; \
X arg.p = (PKT); \
X arg.ddp_info = (DDP); \
X arg.ifp = (IFP); \
X K_NBPINPUT(&arg); \
X}
X
X/* X_RTMPINIT */
Xstruct fp_rtmpinit {
X short autoconf_on; /* is autoconfig turned on? */
X int delay; /* autoconfig delay */
X struct ifnet *ifnet, /* linked list of interface structs */
X *ifab, /* AppleTalk interface */
X *ifie; /* Ethernet interface */
X};
X
X#define RTMPINIT(AUTOCONF_ON, DELAY, IFNET, IFAB, IFIE) { \
X struct fp_rtmpinit arg; \
X arg.autoconf_on = (AUTOCONF_ON); \
X arg.delay = (DELAY); \
X arg.ifnet = (IFNET); \
X arg.ifab = (IFAB); \
X arg.ifie = (IFIE); \
X K_RTMPINIT(&arg); \
X}
X
X#define RTMPINPUT(PKT, DDP, IFP) { \
X struct fp_input arg; \
X arg.p = (PKT); \
X arg.ddp_info = (DDP); \
X arg.ifp = (IFP); \
X K_RTMPINPUT(&arg); \
X}
X
X#define RTMPRESPONSE(PKT, DDP, IFP) { \
X struct fp_input arg; \
X arg.p = (PKT); \
X arg.ddp_info = (DDP); \
X arg.ifp = (IFP); \
X K_RTMPRESPONSE(&arg); \
X}
X
X/* X_RTMPTIMER */
X/* no parameters */
X
X/* X_ZIPINIT */
Xstruct fp_zipinit {
X int atzconf, /* AppleTalk zone configured? */
X etzconf; /* Ethernet zone configured? */
X struct ifnet *ifab, /* AppleTalk interface struct */
X *ifie; /* Ethernet interface struct */
X};
X
X#define ZIPINIT(ATZCONF, ETZCONF, IFAB, IFIE) { \
X struct fp_zipinit arg; \
X arg.atzconf = (ATZCONF); \
X arg.etzconf = (ETZCONF); \
X arg.ifab = (IFAB); \
X arg.ifie = (IFIE); \
X K_ZIPINIT(&arg); \
X}
X
X#define ZIPINPUT(PKT, DDP, IFP) { \
X struct fp_input arg; \
X arg.p = (PKT); \
X arg.ddp_info = (DDP); \
X arg.ifp = (IFP); \
X K_ZIPINPUT(&arg); \
X}
X
X/* X_ZIPTIMER */
X/* no parameters */
X
X/* X_ATPINIT */
X/* no parameters */
X
X#define ATPINPUT(PKT, DDP, IFP) { \
X struct fp_input arg; \
X arg.p = (PKT); \
X arg.ddp_info = (DDP); \
X arg.ifp = (IFP); \
X K_ATPINPUT(&arg); \
X}
X
X/* X_ECHOINIT */
Xstruct fp_echoinit {
X struct ifnet *ifie; /* Ethernet interface struct */
X};
X
X#define ECHOINIT(IFIE) { \
X struct fp_echoinit arg; \
X arg.ifie = (IFIE); \
X K_ECHOINIT(&arg); \
X}
X
X#define ECHOINPUT(PKT, DDP, IFP) { \
X struct fp_input arg; \
X arg.p = (PKT); \
X arg.ddp_info = (DDP); \
X arg.ifp = (IFP); \
X K_ECHOINPUT(&arg); \
X}
X
X/* X_DDPIPINIT */
Xstruct fp_ddpIPinit {
X struct fp_promram *pvars; /* pointer to prom vars */
X struct Addr *macipbcast; /* special bcast address */
X unsigned char *etheraddr; /* our ethernet address */
X unsigned long *gwoptions; /* gateway options */
X unsigned short atnet; /* AppleTalk net number */
X struct ifnet *ifabip, /* AppleTalk IP interface struct */
X *ifieip; /* Ethernet IP interface struct */
X int *iscombgw; /* is this a combined gateway? */
X};
X
X#define DDPIPINIT(PVARS, MACIPBCAST, ETHERADDR, GWOPTIONS, ATNET, IFABIP, IFIEIP, ISCOMBGW) { \
X struct fp_ddpIPinit arg; \
X arg.pvars = (PVARS); \
X arg.macipbcast = (MACIPBCAST); \
X arg.etheraddr = (ETHERADDR); \
X arg.gwoptions = (GWOPTIONS); \
X arg.atnet = (ATNET); \
X arg.ifabip = (IFABIP); \
X arg.ifieip = (IFIEIP); \
X arg.iscombgw = (ISCOMBGW); \
X K_DDPIPINIT(&arg); \
X}
X
X/* X_AUTOCINIT */
Xstruct fp_autocinit {
X int *delay; /* rtmp intervals before autoconf */
X unsigned char *etheraddr; /* our ethernet address */
X struct ifnet *ifab; /* AppleTalk interface */
X struct ifnet *ifie; /* Ethernet interface */
X};
X
X#define AUTOCINIT(DELAY, ETHERADDR, IFAB, IFIE) { \
X struct fp_autocinit arg; \
X arg.delay = (DELAY); \
X arg.etheraddr = (ETHERADDR); \
X arg.ifab = (IFAB); \
X arg.ifie = (IFIE); \
X K_AUTOCINIT(&arg); \
X}
X
X/* X_HASHINIT */
X/* no parameters */
X
X/* X_NEWHASHTAB */
Xstruct fp_newtab {
X int (*key_func)(); /* pointer to hash function */
X int (*match_func)(); /* pointer to key equality function */
X unsigned short size; /* number of buckets to allocate */
X struct hashtab **table; /* the new table */
X};
X
X#define NEWHASHTABLE(KEY, MATCH, SIZE, TAB) { \
X struct fp_newtab arg; \
X arg.key_func = (KEY); \
X arg.match_func = (MATCH); \
X arg.size = (SIZE); \
X arg.table = (TAB); \
X K_NEWHASHTABLE(&arg); \
X}
X
X/* X_LOOKUP */
Xstruct fp_lkuphash {
X unsigned char *key; /* the key to hash */
X struct entry **prev; /* return entry before sought entry */
X struct hashtab *tab; /* the table to search in */
X struct entry **entry; /* the sought entry */
X};
X
X#define LOOKUP(KEY, PREV, TAB, ENTRY) { \
X struct fp_lkuphash arg; \
X arg.key = (unsigned char *)(KEY); \
X arg.prev = (struct entry **)(PREV); \
X arg.tab = (TAB); \
X arg.entry = (struct entry **)(ENTRY); \
X K_LOOKUP(&arg); \
X}
X
X/* X_ADD */
Xstruct fp_addhash {
X unsigned char *key; /* the key of the entry to add */
X struct entry *entry; /* the entry to add */
X struct hashtab *tab; /* the table to add to */
X};
X
X#define ADD(KEY, ENTRY, TAB) { \
X struct fp_addhash arg; \
X arg.key = (unsigned char *)(KEY); \
X arg.entry = (struct entry *)(ENTRY); \
X arg.tab = (TAB); \
X K_ADD(&arg); \
X}
X
X/* X_REMOVE */
Xstruct fp_delhash {
X unsigned char *key; /* the key of the entry to delete */
X struct hashtab *tab; /* the table to delete from */
X};
X
X#define REMOVE(KEY, TAB) { \
X struct fp_delhash arg; \
X arg.key = (unsigned char *)(KEY); \
X arg.tab = (TAB); \
X K_REMOVE(&arg); \
X}
X
X/* X_FIRST */
Xstruct fp_firsthash {
X struct hashtab *tab; /* table to search in */
X struct entry **entry; /* first entry in table */
X};
X
X#define FIRST(TAB, ENTRY) { \
X struct fp_firsthash arg; \
X arg.tab = (TAB); \
X arg.entry = (struct entry **)(ENTRY); \
X K_FIRST(&arg); \
X}
X
X/* X_NEXT */
Xstruct fp_nexthash {
X unsigned char *key; /* key of current entry */
X struct entry *entry; /* the current entry */
X struct hashtab *tab; /* the table to search in */
X struct entry **nextentry; /* the next entry in the table */
X};
X
X#define NEXT(KEY, ENTRY, TAB, NEXT) { \
X struct fp_nexthash arg; \
X arg.key = (unsigned char *)(KEY); \
X arg.entry = (struct entry *)(ENTRY); \
X arg.tab = (TAB); \
X arg.nextentry = (struct entry **)(NEXT); \
X K_NEXT(&arg); \
X}
X
X/* X_NETLOOKUP */
Xstruct fp_netlookup {
X unsigned short net; /* net number */
X struct rtmptab **lastentry; /* RESULT parameter */
X struct rtmptab **the_net; /* return value */
X};
X
X#define NETLOOKUP(NET, LASTENTRY, THE_NET) { \
X struct fp_netlookup arg; \
X arg.net = (NET); \
X arg.lastentry = (LASTENTRY); \
X arg.the_net = (THE_NET); \
X K_NETLOOKUP(&arg); \
X}
X
X/* X_RMRTMP */
Xstruct fp_rmrtmp {
X struct rtmptab *tp; /* the entry to remove */
X};
X
X#define RMRTMP(TP) { \
X struct fp_rmrtmp arg; \
X arg.tp = (TP); \
X K_RMRTMP(&arg); \
X}
X
X/* X_RTMPREPLACE */
Xstruct fp_rtmpreplace {
X struct rtmptab *tp; /* entry to replace */
X int hops; /* number of hops */
X struct ifnet *ifp; /* interface for entry */
X unsigned char nodenum; /* next IR for entry */
X unsigned short net; /* net number */
X struct rtmptab **new_entry; /* new entry */
X};
X
X#define RTMPREPLACE(TP, HOPS, IFP, NODENUM, NET, NEW_ENTRY) { \
X struct fp_rtmpreplace arg; \
X arg.tp = (TP); \
X arg.hops = (HOPS); \
X arg.ifp = (IFP); \
X arg.nodenum = (NODENUM); \
X arg.net = (NET); \
X arg.new_entry = (NEW_ENTRY); \
X K_RTMPREPLACE(&arg); \
X}
X
X/* X_ADDNET */
Xstruct fp_addNet {
X unsigned char *zname; /* a Pascal string referring to the zone */
X struct rtmptab *net; /* the net to add to the list */
X};
X
X#define ADDNET(ZNAME, NET) { \
X struct fp_addNet arg; \
X arg.zname = (unsigned char *)(ZNAME); \
X arg.net = (NET); \
X K_ADDNET(&arg); \
X}
X
X/* X_RMNET */
Xstruct fp_rmNet {
X struct zitEntry *zone; /* the zone to remove from */
X struct rtmptab *net; /* the net to be removed */
X struct rtmptab *prev; /* net before the net to be removed */
X};
X
X#define RMNET(ZONE, NET, PREV) { \
X struct fp_rmNet arg; \
X arg.zone = (ZONE); \
X arg.net = (NET); \
X arg.prev = (PREV); \
X K_RMNET(&arg); \
X}
X
X/* X_FINDZONE */
Xstruct fp_findzone {
X unsigned char *zone;
X struct zitEntry **foundzone;
X};
X
X#define FINDZONE(ZONE, FOUNDZONE) { \
X struct fp_findzone arg; \
X arg.zone = (unsigned char *)(ZONE); \
X arg.foundzone = (FOUNDZONE); \
X K_FINDZONE(&arg); \
X}
X
X/* X_AUTOCONF */
X/* the parameter is a pointer to the interface structure
X** of the interface to be configured.
X*/
X
X
X/* X_RESET_AUTOCONF */
Xstruct fp_resetautoc {
X struct ifnet *ifp; /* pointer to interface to reset */
X int *delay; /* delay before autoconfiguring */
X};
X
X#define RESET_AUTOCONF(IFP, DELAY) { \
X struct fp_resetautoc arg; \
X arg.ifp = (IFP); \
X arg.delay = (DELAY); \
X K_RESET_AUTOCONF(&arg); \
X}
X
X/* X_DDPREPLY */
Xstruct fp_ddpreply {
X struct pbuf **pkt; /* the packet to send */
X struct gen_ddp *gddp; /* generic ddp header for packet */
X struct ifnet *ifp; /* interface packet came from */
X};
X
X#define DDPREPLY(PKT, GDDP, IFP) { \
X struct fp_ddpreply arg; \
X arg.pkt = (PKT); \
X arg.gddp = (GDDP); \
X arg.ifp = (IFP); \
X K_DDPREPLY(&arg); \
X}
X
X/* X_ROUTEIP */
Xstruct fp_routeip {
X struct pbuf **pkt; /* value result param */
X struct ifnet *ifp; /* source interface */
X int isbcast; /* is packet a broadcast? */
X};
X
X#define ROUTEIP(PKT, IFP, ISBCAST) { \
X struct fp_routeip arg; \
X arg.pkt = (PKT); \
X arg.ifp = (IFP); \
X arg.isbcast = (ISBCAST); \
X K_ROUTEIP(&arg); \
X}
X
X/* X_ISSAMEZONE */
Xstruct fp_issamezone {
X struct zitEntry *zone; /* zone to compare with */
X unsigned char *zname; /* a Pascal string */
X unsigned short *same; /* are the zones the same? */
X};
X
X#define ISSAMEZONE(ZONE, ZNAME, SAME) { \
X struct fp_issamezone arg; \
X arg.zone = (ZONE); \
X arg.zname = (unsigned char *)(ZNAME); \
X arg.same = (SAME); \
X K_ISSAMEZONE(&arg); \
X}
X#endif ASM_INCLUDE
X
X/* X_CHECKSUM */
X
X#define BYTESUM 1
X#define WORDSUM 2
X#define LONGSUM 3
X
X#ifndef ASM_INCLUDE
Xstruct fp_checksum {
X unsigned char *cs_loaddr; /* address of first byte */
X unsigned char *cs_hiaddr; /* address of last byte */
X short cs_size; /* one of: {BYTESUM, WORDSUM, LONGSUM} */
X unsigned long *cs_answptr; /* pointer to storage for result */
X};
X
X#define CHECKSUM(LO,HI,OPT,RESULTPTR) {\
X struct fp_checksum arg;\
X arg.cs_loaddr = (LO);\
X arg.cs_hiaddr = (HI);\
X arg.cs_size = (OPT);\
X arg.cs_answptr = (RESULTPTR);\
X K_CHECKSUM(&arg);\
X}
X#endif ASM_INCLUDE
X
X/* X_WHERE2 */
X
X#define FPMODEL123 1
X#define FPMODEL4 2
X#define WHERE2UNUSED 24
X
X#ifndef ASM_INCLUDE
Xstruct fp_where2 {
X short fpw2_model; /* model: one of {FPMODEL123, FPMODEL4} */
X /* following is zero for FPMODEL123: */
X unsigned char *fpw2_enetprom; /* ethernet address ROM on KFPS-4 */
X unsigned char *fpw2_exrambot; /* expansion ram first word */
X unsigned char *fpw2_exramtop; /* expansion ram last word */
X unsigned char fpw2_spare[WHERE2UNUSED]; /* for future use */
X};
X
X/* X_GETCFGSUM - takes pointer to unsigned long, computes checksum
X of configuration area and returns result */
X
X/* X_SETCFGSUM - recomputes and resets configuration area checksum.
X - no parameters */
X
X/* X_DMSG - argument is *char, copies contents of message log into
X string, which must be large enough (586 bytes) */
X
X/* X_STATE - argument is pointer to int, returns state of PROM,
X defined to be one of the following: */
X#endif ASM_INCLUDE
X
X#define BOOTME 1
X#define DOWNLOAD_VALID 2
X#define FORCE_PROM_EXECUTION 3
X#define PROM1_VALID 4
X#define BE_A_BRIDGE 5
X#define EXECUTING_BRIDGE 6
X#define EXECUTING_DOWNLOAD 7
X#define EXECUTING_PROM1 8
X
X/* upper and lower bounds state var can take: */
X#define LBSTATE 1
X#define UBSTATE 8
X
X/* X_HWSTATE - takes pointer to unsigned long returns
X hardware status returned by selftests,
X formed by logically or'ing members from
X the following set: */
X
X#define SCC_BAD 0x01
X#define I82586_BAD 0x02
X#define BATTERY_LOW 0x04
X#define EXP_RAM_INSTALLED 0x08
X#define FUSE_BLOWN 0x10
X#define RAMTEST_FAILED 0x20
X
X/* X_SENDFINIT -no parameters */
X
X/* X_IESTATS */
X
X/* array positions of various ethernet stats.
X** Note: scb errors counts are updated only by K_IESTAT call.
X*/
X#define SCB_CRCERRS 0
X#define SCB_ALNERRS 1
X#define SCB_RSCERRS 2
X#define SCB_OVRNERRS 3
X#define IN_PACKETS 4
X#define OUT_PACKETS 5
X#define BAD_TRANSMIT 6
X#define OVERSIZE_FRAME 7
X#define SPUR_RU_READY 8
X#define SPUR_CU_ACTIVE 9
X#define SPUR_UNKNOWN 10
X#define BCAST_DROPS 11
X#define RCV_RESTARTS 12
X#define REINTERRUPTS 13
X#define ENET_BUF_REROUTE 14
X#define ENET_PBNDROP 15
X#define XMIT_COLLISIONS 16
X#define XMIT_DEFERS 17
X#define XMIT_DMA_URUN 18
X#define XMIT_MAX_COLL 19
X#define XMIT_NO_CARRIER 20
X#define XMIT_NO_CTS 21
X#define XMIT_NO_SQE 22
X
X#define MAXIESTATS 25
X#define SIZEOFIESTATS ((MAXIESTATS*4)+4)
X
X#ifndef ASM_INCLUDE
Xstruct fp_iestats {
X struct scb *fpi_scbptr; /* status control block */
X int fpi_stats[MAXIESTATS]; /* statistics array */
X};
X#endif ASM_INCLUDE
X
X/* X_DDPSTATS */
X
X#define BADATPSKT 0
X#define BADECHO_REQ 1
X#define BADHOPCNT 2
X#define BADKLAPREQ 3
X#define BADKLAPSKT 4
X#define BADRTMPREQ_SKT 5
X#define BADRTMP_SKT 6
X#define BADZIPSKT 7
X#define BAD_DDPTYPE 8
X#define BAD_DESTNET 9
X#define COPY_BCAST 10
X#define ECHOLONG_DROP 11
X#define ECHOSHORT_DROP 12
X#define LAPBCAST_DROP 13
X#define NBPLOOKUP_DROP 14
X#define NOBUF_CPBCAST 15
X#define RTMPREQ_DROP 16
X#define SHORTDDP_DROP 17
X#define TOOLONG_DDP 18
X#define TOOSHORT_DDP 19
X
X#define MAXDDPSTATS 30
X#define SIZEOFDDPSTATS (MAXDDPSTATS*4)
X
X#ifndef ASM_INCLUDE
Xstruct fp_ddpstats {
X int fpddp_stats[MAXDDPSTATS]; /* statistics array */
X};
X#endif ASM_INCLUDE
X
X/* X_AATWRITE */
X /* takes pbuf as parameter */
X
X/* X_ALLBUFS */
X /* takes the address of the end of the download area, where
X ** packet buffers can start.
X */
X
X/* X_MAKEBUFS */
X /* takes an array of unsigned longs, representing pairs
X ** of the form (lo,hi), terminated by (0,0).
X */
X
X/* NPROTSTATS*4 is the number of bytes in the protected scratch area */
X#define NPROTSTATS 64
X
X/* X_CLRPROTSTATS */
X /* no arguments. Clears (NPROTSTATS*4) bytes of protected area
X ** in RAM which can be used as a general debugging aid.
X */
X
X/* X_GETPROTSTATS */
X /* no arguments. Returns (NPROTSTATS*4) bytes from a protected
X ** area in RAM which can be used as a general debugging aid.
X */
X
X/* X_SIZEMEM */
X /* takes a pointer to an int as an arg, returns number of bytes
X ** of memory installed.
X */
X
X/* X_SETACKLEN */
X /* argument is an int value. Sets the length of the KLAP
X ** portion of a packet returned by a user-implemented KLAP call.
X */
X
X/* X_IDENT */
X#ifndef ASM_INCLUDE
Xstruct fp_ident {
X char fpid_name[SNAMESIZE]; /* ascii name of the gateway */
X char fpid_pad; /* padding, SNAMESIZE is odd */
X unsigned char fpid_ether[6]; /* ethernet address of gw */
X long fpid_sn; /* serial number of this box */
X short fpid_model; /* model number */
X short fpid_version; /* version of the prom code */
X int fpid_state; /* operating state */
X};
X#endif ASM_INCLUDE
X
X/* X_SETMCAST */
X
X/* maximum multicast addresses we can set up: */
X#define MAX_MCAST 16
X
X#ifndef ASM_INCLUDE
Xstruct fp_mcast {
X unsigned short fpmc_naddrs; /* number of multicast addresses, 0
X ** to turn off multicasting */
X unsigned char fpmc_addrs[MAX_MCAST*6];
X /* packed array of enet addresses */
X};
X#endif ASM_INCLUDE
X
X/* X_CHECKFREE */
X /* no parameters. Checks the consistency of the buffer
X ** structures. If error found, dumps diagnostics and
X ** reboots system.
X */
X
X/* X_CLRLOG */
X /* no parameters. Clears the log buffer. */
X
X/* X_PAUSE */
X /* takes a pointer to a short as a parameter. Returns 1 if
X ** the gateway was paused, and 0 if it was not.
X ** NOTE: the gateway cannot be paused if it is not executing
X ** the prom main loop.
X */
X
X/* X_NOTIMP - no parameters */
END_OF_FILE
if test 44942 -ne `wc -c <'cmdmacro.h'`; then
echo shar: \"'cmdmacro.h'\" unpacked with wrong size!
fi
# end of 'cmdmacro.h'
fi
echo shar: End of archive 3 \(of 3\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0