A note on the current state of the world for the CMC Enp-30 ethernet 
interface.  Paul Roy  6/12/85.

Kernel driver:   ethercmc.c
On-board driver: ethercmcob.c
Shared header:   ethercmc.h

The Enp-30 should be installed in a slot on the Multibus backplane that
does NOT share a P2 bus with the processor board (e.g., slot 12 on a 
Sun-2/170 is good).

A machine with the Enp-30 interface currently must boot using a 3Com interface.
Because not only must a kernel and first team be loaded, but also the
on-board driver, a separate version of Vload is required.
It is installed as VloadEnp30.d.

About the code:

The mechanism for the host getting the interface to initialize seems to be
in order.  The host-interface communication using shared records also
is in order (for example, using netwatch I have seen the Enp interface
transmit a valid packet).

There is a problem with the way the interface interrupts the host after
completion of an operation (i.e., interrupts sometimes, but not always,
get through to the host).  At the time I left, I was trying to get
"printf" to run in the on-board driver.  This requires putting 
characters into a shared mailbox, interrupting the host and having
it print the character.  Unfortunately, because interrupts were not
working properly neither was printing.  I suggest looking at the
interrupt mechanism for the Enp-10 developed by Neguine Navab and 
Andy Hastings.

I am not sure if the driver, as is, receives packets.  On receive,
there is a scatter mechanism that copies the kernel header part of the 
ethernet packet into the stomach of an alien process descriptor and
the segment into a separate buffer.  None of this code has been tested.

Because the Lance chip hogs the on-board bus for 10 us bursts it is
possible for the host to timeout while trying to access Enp memory.
Thus, whenever possible it is advisable to have the Enp do all the
copying and have any shared records or flags be in host memory.
We decided that whenever the host times out trying to access Enp memory,
it should recognize this event in the exception handler and retry the
instruction.  This has not been implemented.

This is the way I was compiling and linking:

ethercmc.b: $(HOST)/ethercmc.c
	cc68 $(C68FLAGS) -DENP30 -c $(HOST)/ethercmc.c
ethercmcob.b: $(HOST)/ethercmcob.c
	cc68 $(C68FLAGS) -DENP30 -c $(HOST)/ethercmcob.c
ethercmcob.68:	ethercmcob.b
	ld68 -T f02000 -o ethercmcob.68 -s ethercmcob.b $(MDLIBS)

	rev68 ethercmcob.68 ethercmcob

