EthernetFace: DEFINITIONS = BEGIN GetNextDevice: PROC [DeviceHandle] RETURNS [DeviceHandle]; AddCleanup: PROC [DeviceHandle]; RemoveCleanup: PROC [DeviceHandle]; HostNumber: TYPE = MACHINE DEPENDENT RECORD [ SELECT type: * FROM physical => [a: CARDINAL[0..32768), b: CARDINAL, c: CARDINAL], multicast => [a: CARDINAL[0..32768), b: CARDINAL, c: CARDINAL], ENDCASE ]; TurnOn: PROC [device: DeviceHandle, host: physical HostNumber, inInterrupt, outInterrupt: WORD, globalState: GlobalStatePtr]; TurnOff: PROC [device: DeviceHandle]; QueueOutput: PROC [device: DeviceHandle, buffer: LONG POINTER, length: CARDINAL, cb: ControlBlock]; QueueInput: PROC [device: DeviceHandle, buffer: LONG POINTER, length: CARDINAL, cb: ControlBlock]; GetStatus: PROC [cb: ControlBlock] RETURNS [status: Status]; GetRetries: PROC [cb: ControlBlock] RETURNS [CARDINAL]; GetPacketLength: PROC [cb: ControlBlock] RETURNS [CARDINAL]; GetPacketsMissed: PROC [DeviceHandle] RETURNS [CARDINAL]; DeviceHandle: TYPE[1]; GlobalStatePtr: TYPE = LONG POINTER; Status: TYPE = { pending, ok, overrun, -- Input data arrived when FIFO was full underrun, -- Output FIFO went empty before end of packet was set packetTooLong, -- Input packet didn't fit into buffer tooManyCollisions, -- More than 16 attempts to transmit the same packet crc, crcAndBadAlignment, badAlignmentButOkCrc, otherError }; ControlBlock: TYPE = LONG POINTER TO ControlBlockRecord; ControlBlockRecord: TYPE; globalStateSize: READONLY CARDINAL; controlBlockSize: READONLY CARDINAL; nullDeviceHandle: READONLY DeviceHandle; hearSelf: READONLY BOOLEAN; END. LOG Time: September 5, 1980 12:16 AM By: HGM Action: Create from EthernetOneFace Time: May 6, 1983 1:00 pm By: ADB Action: Minor changes for Cedar nucleus conversion ¼EthernetFace.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. HGM on: September 5, 1980 1:21 AM) Andrew Birrell May 6, 1983 12:59 pm Russ Atkinson (RRA) January 29, 1985 0:48:27 am PST Doug Wyatt, February 26, 1985 5:26:15 pm PST Processor-independent interface for 10MB ethernet. Note: This in an Ethernet 2 face. See EthernetOneFace for the interface to the old (3MB) Ethernet. We may also have to do something about multicasting one of these days. Return handle of next device in physical order (starts and ends with EthernetFace.nullDeviceHandle). Add/delete the device cleanup procedure which is used to turn off an Ethernet controller around world swaps (see DeviceCleanup.mesa). For now, RemoveCleanup doesn't do anything, but the (leftover) cleanup proc is careful to avoid doing anything nasty. (Extra calls to AddCleanup are currently ignored.) A physical host number is assigned to an actual system element. A multicast host number names a logical group all wishing to receive a particular class of multicast packets. Turn on/off the device associated with this DeviceHandle. Calling TurnOn when the device is already on may forget any operations currently in progress. Extra calls to TurnOff are harmless. Queue the buffer for transmit or receive. A (different) control block must be passed in with each call for the private use of the head. cb should be a pointer to a block of EthernetFace.controlBlockSize words. It must be allocated within the first 64K and must be quad word aligned. The buffer must have 11 in the low 2 bits (ie it starts one word before a quad word aligned buffer) and less than 32K words long. When GetStatus[cb] returns anything other than pending, both the control block and the data buffer are available for reuse. Returns the status of the packet associated with this control block. See the comments on Status below. Returns the number of times the packet was retransmitted because of collisions. Returns the length in words of a recently arrived packet. Returns the number of input packets missed because a buffer was not ready. Note: The error conditions are an open ended set to allow a smart driver to collect statistics. Thus new error conditions may be added to allow more sophisticated data collection, so a driver should not get upset if it encounters a strange error status that it does not understand. Dumb drivers should only check for pending or ok and consider everything else as an error. Ê&˜codešœ™Kšœ Ïmœ1™Kšœžœžœžœ˜?Kšž˜—Kšœ˜Kšœ®™®—K˜KšŸœžœOžœ˜~K˜šŸœžœ˜%Kšœ¿™¿—K˜Kš Ÿ œžœ!žœžœ žœ˜dK˜š Ÿ œžœ!žœžœ žœ˜cKšœž™žK˜—šŸ œžœžœ˜