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