diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/ndis/madge/driver/head_def/ftk_fm.h | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/private/ntos/ndis/madge/driver/head_def/ftk_fm.h b/private/ntos/ndis/madge/driver/head_def/ftk_fm.h new file mode 100644 index 000000000..0d99596df --- /dev/null +++ b/private/ntos/ndis/madge/driver/head_def/ftk_fm.h @@ -0,0 +1,351 @@ +/****************************************************************************/ +/****************************************************************************/ +/* */ +/* THE FASTMAC DEFINITIONS */ +/* ======================= */ +/* */ +/* FTK_FM.H : Part of the FASTMAC TOOL-KIT (FTK) */ +/* */ +/* Copyright (c) Madge Networks Ltd. 1991-1994 */ +/* CONFIDENTIAL */ +/* */ +/* */ +/****************************************************************************/ +/* */ +/* This header file contains the structures, constants etc., that are */ +/* relevant to Fastmac and its use by the FTK and are not included */ +/* elsewhere. This includes the Fastmac status block structure and the */ +/* Fastmac use of the EAGLE SIFINT register. */ +/* */ +/* IMPORTANT : All structures used within the FTK need to be packed in */ +/* order to work correctly. This means sizeof(STRUCTURE) will give the real */ +/* size in bytes, and if a structure contains sub-structures there will be */ +/* no spaces between the sub-structures. */ +/* */ +/****************************************************************************/ + +#pragma pack(1) + +/****************************************************************************/ +/* */ +/* VERSION_NUMBER of FTK to which this FTK_FM.H belongs : */ +/* */ + +#define FTK_VERSION_NUMBER_FTK_FM_H 221 + + +/****************************************************************************/ +/* */ +/* TYPEDEFs for all structures defined within this header file : */ +/* */ + +typedef struct STRUCT_FASTMAC_STATUS_BLOCK FASTMAC_STATUS_BLOCK; +#ifdef FMPLUS +typedef struct STRUCT_RX_SLOT RX_SLOT; +typedef struct STRUCT_TX_SLOT TX_SLOT; +#endif + +/****************************************************************************/ +/* */ +/* Structure type : FASTMAC_STATUS_BLOCK */ +/* */ +/* Fastmac maintains a status block that includes the pointers to the */ +/* receive and transmit buffers, as well as the ring status and a boolean */ +/* flag to say if the adapter is open. */ +/* */ +/* REFERENCE : The Madge Fastmac Interface Specification */ +/* - Status Block */ +/* */ + +struct STRUCT_FASTMAC_STATUS_BLOCK + { + WORD reserved_1; + WORD signature; + WBOOLEAN adapter_open; /* TRUE when open */ + WORD open_error; /* open error code */ + WORD tx_adap_ptr; /* transmit buffer pointers */ + WORD tx_host_ptr; + WORD tx_wrap_ptr; + WORD rx_adap_ptr; /* receive buffer pointers */ + WORD rx_wrap_ptr; + WORD rx_host_ptr; + NODE_ADDRESS permanent_address; /* BIA PROM node address */ + NODE_ADDRESS open_address; /* opening node address */ + WORD tx_dma_count; + WORD timestamp_ptr; + WORD rx_internal_buffer_size; + WORD rx_total_buffers_avail; + WORD rx_buffers_in_use; + WORD rx_frames_lost; + WORD watchdog_timer; + WORD ring_status; /* current ring status */ + WORD tx_discarded; +#ifdef FMPLUS + WORD rx_slot_start; /* where to find rx slots */ + WORD tx_slot_start; /* where to find tx slots */ +#endif + WORD reserved_2[1]; + WORD rxdesc_host_ptr; + DWORD rxdesc_queue[1]; + }; + + +/****************************************************************************/ +/* */ +/* Values : Fastmac buffer sizes */ +/* */ +/* The Fastmac receive and transmit buffers have minimum and maximum */ +/* allowable sizes. The minimum size allows the buffer to contain a single */ +/* 1K frame. */ +/* */ + +#define FASTMAC_MAXIMUM_BUFFER_SIZE 0xFF00 +#define FASTMAC_MINIMUM_BUFFER_SIZE 0x0404 + + +/****************************************************************************/ +/* */ +/* Values : FASTMAC SIF INTERRUPT (SIFCMD-SIFSTS) REGISTER BITS */ +/* */ +/* When Fastmac generates an interrupt (via the SIF interrupt register), */ +/* the value in the register will indicate the reason for the interrupt. */ +/* Also, when the user interrupts Fastmac (again via the SIF interrupt */ +/* register), the value in the register indicates the reason. */ +/* */ +/* REFERENCE : The Madge Smart SRB Interface */ +/* - The Interrupt Register */ +/* */ + +#define DRIVER_SIFINT_IRQ_FASTMAC 0x8000 /* interrupt Fastmac */ + +#define DRIVER_SIFINT_FASTMAC_IRQ_MASK 0x00FF + +#define DRIVER_SIFINT_SSB_FREE 0x4000 +#define DRIVER_SIFINT_SRB_COMMAND 0x2000 +#define DRIVER_SIFINT_ARB_FREE 0x1000 + +#define DRIVER_SIFINT_ACK_SSB_RESPONSE 0x0400 +#define DRIVER_SIFINT_ACK_SRB_FREE 0x0200 +#define DRIVER_SIFINT_ACK_ARB_COMMAND 0x0100 + + +#define FASTMAC_SIFINT_IRQ_DRIVER 0x0080 /* interrupt driver */ + +#define FASTMAC_SIFINT_ADAPTER_CHECK 0x0008 +#define FASTMAC_SIFINT_SSB_RESPONSE 0x0004 +#define FASTMAC_SIFINT_SRB_FREE 0x0002 +#define FASTMAC_SIFINT_ARB_COMMAND 0x0001 + +#define FASTMAC_SIFINT_RECEIVE 0x0000 + + +/****************************************************************************/ +/* */ +/* Values : FASTMAC DIO LOCATIONS */ +/* */ +/* There are certain fixed locations in DIO space containing pointers that */ +/* are accessed by the driver to determine DIO locations where the driver */ +/* must read or store Fastmac information. These pointers identify the */ +/* location of such things as the SRB and status block (STB). The pointers */ +/* are at DIO locations 0x00011000 - 0x00011008. The values defined below */ +/* give the location of the pointers within the EAGLE DATA page 0x00010000. */ +/* */ +/* REFERENCE : The Madge Smart SRB Interface */ +/* - Shared RAM Format */ +/* */ + +#define DIO_LOCATION_SSB_POINTER 0x1000 +#define DIO_LOCATION_SRB_POINTER 0x1002 +#define DIO_LOCATION_ARB_POINTER 0x1004 +#define DIO_LOCATION_STB_POINTER 0x1006 /* status block */ +#define DIO_LOCATION_IPB_POINTER 0x1008 /* init block */ +#define DIO_LOCATION_DMA_CONTROL 0x100A +#define DIO_LOCATION_DMA_POINTER 0x100C + + +/****************************************************************************/ +/* */ +/* Values : Fastmac product id string */ +/* */ +/* The product id string for Fastmac that is used by certain management MAC */ +/* frames. If the Fastmac auto-open feature is used then the product id is */ +/* always "THE MADGE FASTMAC". If an OPEN_ADAPTER SRB then the FTK product */ +/* id is "FTK MADGE FASTMAC". */ +/* */ +/* REFERENCE : The Madge Fastmac Interface Specification */ +/* - SRB Interface : Open Adapter SRB */ +/* */ + +#define SIZEOF_PRODUCT_ID 18 +#ifdef FMPLUS +#define FASTMAC_PRODUCT_ID "FTK MADGE FM PLUS" +#else +#define FASTMAC_PRODUCT_ID "FTK MADGE FASTMAC" +#endif + +/****************************************************************************/ +/* */ +/* Global variable : ftk_product_inst_id */ +/* */ +/* Value of the product ID strings set when an open adapter SRB */ +/* is generated. This is set to FASTMAC_PRODUCT_ID in DRV_SRB.C. */ +/* */ + +extern char ftk_product_inst_id[SIZEOF_PRODUCT_ID]; + +/****************************************************************************/ +/* */ +/* Values : Fastmac buffer format */ +/* */ +/* The format in which frames are kept in the Fastmac buffers includes a */ +/* header to the frame containing the length of the entire header and */ +/* frame, and a timestamp. */ +/* */ +/* REFERENCE : The Madge Fastmac Interface Specification */ +/* - The Fastmac Algorithm */ +/* */ + + +#define FASTMAC_BUFFER_HEADER_SIZE 4 + +#define FASTMAC_HEADER_LENGTH_OFFSET 0 +#define FASTMAC_HEADER_STAMP_OFFSET 2 + + +#ifdef FMPLUS +/****************************************************************************/ +/* */ +/* Structure type : RX_SLOT */ +/* */ +/* Fastmac Plus maintains a slot structure on the card for each receive */ +/* buffer on the host. These include the address of the buffer, the length */ +/* of any frame in it, and the receive status of any frame there. When a */ +/* frame is received, Fastmac Plus updates the length and status fields. */ +/* */ +/* REFERENCE : The Madge Fastmac Plus Programming Specification */ +/* - Receive Details: Slot Structure */ +/* */ + +struct STRUCT_RX_SLOT + { + WORD buffer_len; + WORD reserved; + WORD buffer_hiw; + WORD buffer_low; + WORD rx_status; + WORD next_slot; + }; + + +/****************************************************************************/ +/* */ +/* Structure type : TX_SLOT */ +/* */ +/* Fastmac Plus maintains a number of slot structures on the card, to allow */ +/* transmit pipelining. Each of these structures includes two fields for */ +/* host buffers and lengths - one is for a small buffer, less than the size */ +/* of a buffer on the adapter card, and the other is for a large buffer, up */ +/* to the maximum frame size. There is also a status field so that the host */ +/* transmit code can monitor the progress of the transmit. */ +/* */ +/* REFERENCE : The Madge Fastmac Plus Programming Specification */ +/* - Transmit Details: Slot Structure */ +/* */ + +struct STRUCT_TX_SLOT + { + WORD tx_status; + WORD small_buffer_len; + WORD large_buffer_len; + WORD reserved[2]; + WORD small_buffer_hiw; + WORD small_buffer_low; + WORD next_slot; + WORD large_buffer_hiw; + WORD large_buffer_low; + }; + + +/****************************************************************************/ +/* */ +/* Values : Fastmac Plus min/max slot numbers */ +/* */ +/* Fastmac Plus places certain restrictions on the numbers of transmit and */ +/* receive slots that can be allocated. These constants specify the values. */ +/* */ +/* REFERENCE : The Madge Fastmac Plus Programming Specification */ +/* - Initialisation : TMS Load Parms */ +/* */ + +#define FMPLUS_MAX_RX_SLOTS 32 +#define FMPLUS_MIN_RX_SLOTS 2 + +#define FMPLUS_MAX_TX_SLOTS 32 +#define FMPLUS_MIN_TX_SLOTS 2 + + +/****************************************************************************/ +/* */ +/* Values : Fastmac Plus Receive Status Mask */ +/* */ +/* By bitwise AND-ing the mask here with the receive status read from the */ +/* receive slot, code can determine whether the received frame is good or */ +/* not. If the result is zero, the frame is good, otherwise it is a junk */ +/* frame. */ +/* */ +/* REFERENCE : The Madge Fastmac Plus Programming Specification */ +/* - Receive Status Processing */ +/* */ + +#define GOOD_RX_FRAME_MASK ((WORD) 0x5E00) + + +/****************************************************************************/ +/* */ +/* Values : Fastmac Plus Transmit Status Mask And Values */ +/* */ +/* By bitwise AND-ing the good frame mask with the transmit status read */ +/* from the receive slot, code can determine whether the frame was */ +/* transmitted properly or not. If more detail is required, the receive */ +/* status mask can be used to check various conditions in the transmitted */ +/* frame when it returned to the adapter. */ +/* */ +/* REFERENCE : The Madge Fastmac Plus Programming Specification */ +/* - Transmit Status Processing */ +/* */ + +#define GOOD_TX_FRAME_MASK ((WORD) 0x5F00) +#define GOOD_TX_FRAME_VALUE ((WORD) 0x0100) + +#define TX_RECEIVE_STATUS_MASK ((WORD) 0x0700) +#define TX_RECEIVE_LOST_FRAME ((WORD) 0x0300) +#define TX_RECEIVE_CORRUPT_TOKEN ((WORD) 0x0500) +#define TX_RECEIVE_IMPLICIT_ABORT ((WORD) 0x0700) + + +/****************************************************************************/ +/* */ +/* Values : Fastmac Plus Zero Length Small Buffer value */ +/* */ +/* When transmitting a frame that exists only in a large buffer, a special */ +/* non-zero value must be written to the small buffer length field of the */ +/* receive slot (this is because Fastmac Plus uses zero there to indicate */ +/* that a transmit has completed, and waits for it to change before trying */ +/* to transmit any more from that slot). This special value is defined here.*/ +/* */ +/* REFERENCE : The Madge Fastmac Plus Programming Specification */ +/* - Transmit Details */ +/* */ + +#define FMPLUS_SBUFF_ZERO_LENGTH ((WORD)(0x8000)) + +#endif + + +#pragma pack() + +/* */ +/* */ +/************** End of FTK_FM.H file ****************************************/ +/* */ +/* */ |