// Sample code file: cne3200.h
// Warning: This code has been marked up for HTML
/*--------------------------------------------------------------------------*
* $name: Cne3200.h
* $version: 7
* $date_modified: 121898
* $description: C NE3200 HSM Header file
* $owner: ODI LAN Driver Manager
* Copyright (c) 1996, 1997, 1998 Novell, Inc. All Rights Reserved.
*
* THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
* USE AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO THE LICENSE AGREEMENT
* ACCOMPANYING THE SOFTWARE DEVELOPMENT KIT (SDK) THAT CONTAINS THIS WORK.
* PURSUANT TO THE SDK LICENSE AGREEMENT, NOVELL HEREBY GRANTS TO DEVELOPER A
* ROYALTY-FREE, NON-EXCLUSIVE LICENSE TO INCLUDE NOVELL'S SAMPLE CODE IN ITS
* PRODUCT. NOVELL GRANTS DEVELOPER WORLDWIDE DISTRIBUTION RIGHTS TO MARKET,
* DISTRIBUTE, OR SELL NOVELL'S SAMPLE CODE AS A COMPONENT OF DEVELOPER'S
* PRODUCTS. NOVELL SHALL HAVE NO OBLIGATIONS TO DEVELOPER OR DEVELOPER'S
* CUSTOMERS WITH RESPECT TO THIS CODE.
*--------------------------------------------------------------------------*/
/*****************************************************************************
*
* Title: C language NE3200 HSM Header file.
*
* Filename: NE3200.H
*
* ODI Spec Ver: 1.11
*
* Description: Include file for C version of NE2_32 LAN HSM.
*
* Modification History:
*
* 08-19-97 JCJ WAIT_LOOP and WAIT_RESET values are changed to a high value
* since the waiting procedure is changed to a counter based one.
* Now this values are the initial count for the counter. Very
* high value is chosen because it needs to run in a variety of
* systems. SPD# 159385
*
* 09-18-97 JCJ If adapter provides 100% filtering of group addresses and
* the TSM does not need to perform any checking bits 10&9
* of MLIDFlags should be set. SPD# 166454
*
* 11-07-97 JCJ WAIT_LOOP and WAIT_RESET values are changed since some fast
* machines are having loading problem SPD# 164834
*
****************************************************************************/
#ifndef CNE3200_H
/*===[ Include files specific to current platform ]======================*/
#include <portable.h>
/*===[ Generic HSM Include files ]===========================*/
#include <odi.h>
#include <odi_nbi.h>
#include <odi_nesl.h>
#include <nesl_str.h>
#include <parser.h>
#include <cmsm.h>
#ifndef NULL
#define NULL 0L
#endif
/*===[ External data ]===================================================*/
extern MLID_CONFIG_TABLE DriverConfigTemplate;
/*===[ Manifest constants ]==============================================*/
/* EISA Slot Equates */
#define PRODUCT_ID_LEN 4
#define MANUFACT_CHAR_CODE_1 0x3a /* Computed from the code... */
#define MANUFACT_CHAR_CODE_2 0xcc /* .."NVL 07 01" or "NVL 07 02" */
#define PRODUCT_NUMBER_07 0x07 /* For this adapter... */
#define PRODUCT_NUMBER_01 0x01 /* For this adapter... */
#define PRODUCT_NUMBER_02 0x02
#define SLOT_0 0x0c80 /* begin with this slot value */
#define ISOLATE_INT_MASK 0x0f /* mask used to isolate ints */
#define EISA_INT_FUNCTION_BIT 0x04 /* interrupt function */
#define EISA_VALID_INT 0x22 /* valid interrupt bit */
#define EISA_INTERRUPT 0xb2 /* possible interrupt */
#define EISA_SHARED_INT_MASK 0x40 /* is it a shared interrupt? */
#define EISA_CFG_BLOCK_SIZE 320 /* size of the config block */
/* Firmware definitions */
#define STATIC_RAM_ERROR_MASK 0x40
#define FIRMWARE_INIT_SUCCESS 0x80
#define FIRMWARE_RUNNING 0x11111111
/* Counter/Timeout definitions */
#define DEFAULT_TIMEOUT_VALUE 2 /* default poll */
#define DEADMAN_TIMEOUT 18*9 /* 9 seconds */
#define RESET_BASE_COUNT 200 /* Speed from slow 386. */
/* Timeout definitions */
#define WAIT_BYTE_SET 1
#define WAIT_BYTE_CLEAR 2
#define WAIT_FIRMWARE 3
#define WAIT_TIMEOUT 4
//JCJ SPD# 159385 Following values are changed for reset problem
//These values will be the initial values for the counter while the driver
//wait for the adapter response. A high value is chosen to take care of
//high speed systems.
//JCJ SPD# 164834 Following values are changed since some fast machines are having
//driver loading problem
#define WAIT_LOOP 0xE00000
#define WAIT_RESET 20000
//JCJ End SPD# 159385
/* Mailbox commands */
#define ADD_MULTICAST_COMMAND 1 /* update the multicastlist */
#define IDLE_COMMAND 4 /* idle the adapter */
/* Miscellaneous driver definitions */
#define MAX_PACKET_SIZE 1514
#define TOTAL_RCBS 0x10
#define TABLE_SIZE 0x20
#define TABLE_MASK TABLE_SIZE-1
#define TOTAL_TCBS 128
#define TCB_TABLE_SIZE 256
#define TCB_TABLE_MASK TCB_TABLE_SIZE-1
#define GLOBAL_CONFIG 0x0e
#define GLOBAL_CFG_SHARE_MASK 0xf7
/* Config Table Flags */
#define MODE_FLAGS MM_PREFILLED_ECB_BIT | \
MM_MULTICAST_BIT | \
MM_C_HSM_BIT | \
MM_RAW_SENDS_BIT | \
MM_FRAGS_PHYS_BIT | \
MM_PROMISCUOUS_BIT
/* JCJ: 18-Sep-97 SPD# 166454
If adapter provides 100% filtering of group addresses and the TSM does not
need to perform any checking bits 10&9 of MLIDFlags should be set. */
#define FLAGS MF_MULTICAST_TYPE_BITS
#define SHARING_FLAGS MS_SHARE_IRQ0_BIT
/* BMIC IO port structure defines */
#define ID 0x00
#define RESERVED_0 0x04
#define GLOBAL_CFG_REG 0x08
#define SYSTEM_INT_MASK_CTRL_REG 0x09
#define SEMAPHORES 0x0a
#define LOCAL_DOORBELL_MASK_REG 0x0c
#define LOCAL_DOORBELL_INT_STATUS_REG 0x0d
#define SYSTEM_DOORBELL_MASK_REG 0x0e
#define SYSTEM_DOORBELL_INT_STATUS_REG 0x0f
#define MAILBOX_REGISTERS 0x10
#define RESERVED_1 0x20
/*===[ Type definitions ]==================================================*/
/* Start of the Driver Virtual Adapter structure for CNE3200 */
typedef struct _DRIVER_DATA_
{
/***********************************************************************\
** !! IMPORTANT !!
** This list must be dword aligned !!!
** The BMIC locked exchange only works on dword boundaries.
\***********************************************************************/
RCB *adapterRCBList [TABLE_SIZE];
struct _TCB_ *adapterTCBList [TCB_TABLE_SIZE];
UINT32 hostPWSList1 [TABLE_SIZE];
UINT32 hostPWSList2 [TABLE_SIZE];
RCB *hostRCBList [TABLE_SIZE];
struct _TCB_ *hostTCBList [TCB_TABLE_SIZE];
UINT32 txStartList [TCB_TABLE_SIZE];
UINT32 tcbQueueHead;
UINT32 tcbQueueTail;
UINT32 tcbInProcess;
UINT32 txStartTime;
UINT32 updateStatCount;
/***********************************************************************\
** Receive and Transmit pointers.
\***********************************************************************/
UINT32 receiveQueueHead;
UINT32 receiveQueueTail;
UINT32 needRCBCount;
/***********************************************************************\
**
** CNE3200 I/O Register Values...
**
\***********************************************************************/
void *resetRegister;
void *eisaSystemDoorbellEnable;
void *eisaSystemDoorbellStatus;
void *idleMailbox;
void *updateParmMailbox;
void *updateStatMailbox;
void *tcbValidMailbox;
void *pollingMailbox;
void *tcbMailbox;
void *parametersMailbox;
/***********************************************************************\
**
** Adapter Parameter Block. Do NOT change the order of the
** following fields...
**
\***********************************************************************/
UINT32 logicalToPhysicalOffset;
void *nodeAddressPointer;
UINT16 boardNumber8023;
UINT16 boardNumberEII;
UINT16 boardNumber8022;
UINT16 boardNumberSNAP;
UINT32 maxReceivePacketSize;
void *genericStatisticsPointer;
UINT16 customStatisticsCount;
void *rcbListPointer;
UINT16 multicastCount;
void *multicastTablePointer;
UINT8 hostNodeAddress [ADDR_SIZE];
UINT8 promiscuousMode;
UINT16 pollTimeout;
UINT8 globalConfigValue;
UINT16 dummyAlignValue;
/***********************************************************************\
** Command parameter storage location.
\***********************************************************************/
UINT32 parameterCommand;
UINT32 parameter1;
UINT32 parameter2;
/***********************************************************************\
** Other variables.
\***********************************************************************/
UINT32 inDriverPoll;
UINT32 inDriverReset;
UINT32 inDriverDisable;
MLID_AES_ECB DAES;
UINT32 busType;
void *busTag;
/***********************************************************************\
** Statistics Table.
\***********************************************************************/
MLID_StatsTable StatsTable;
/* Generic Statistics Table Entries */
StatTableEntry TotalTxPacketTable;
StatTableEntry TotalRxPacketTable;
StatTableEntry NoECBAvailableTable;
StatTableEntry PacketTxTooBigTable;
StatTableEntry PacketTxTooSmallTable;
StatTableEntry PacketRxOverflowTable;
StatTableEntry PacketRxTooBigTable;
StatTableEntry PacketRxTooSmallTable;
StatTableEntry PacketTxMiscErrorTable;
StatTableEntry PacketRxMiscErrorTable;
StatTableEntry RetryTxTable;
StatTableEntry ChecksumErrorTable;
StatTableEntry HardwareRxMismatchTable;
StatTableEntry TotalTxOKByteTable;
StatTableEntry TotalRxOKByteTable;
StatTableEntry TotalGroupAddrTxTable;
StatTableEntry TotalGroupAddrRxTable;
StatTableEntry AdapterResetTable;
StatTableEntry AdapterOprTimeStampTable;
StatTableEntry QDepthTable;
/* Media Statistics Table Entries */
StatTableEntry TxOKSingleCollisionTable;
StatTableEntry TxOKMultipleCollisionsTable;
StatTableEntry TxOKButDeferredTable;
StatTableEntry TxAbortLateCollisionTable;
StatTableEntry TxAbortExcessCollisionsTable;
StatTableEntry TxAbortCarrierSenseTable;
StatTableEntry TxAbortExDeferralTable;
StatTableEntry RxAbortFrameAlignmentTable;
/* Custom Statistics Table Entries */
StatTableEntry TxRetryFailureTable;
StatTableEntry ClearToSendTable;
StatTableEntry UnderRunTable;
StatTableEntry RxDMAOverrunTable;
StatTableEntry PacketSlideTable;
StatTableEntry DummyRCBTable;
StatTableEntry AdapterReset1Table;
StatTableEntry BadFragLengthTable;
StatTableEntry PollingTimeoutTable;
StatTableEntry AdapterDiedTable;
StatTableEntry NumberOfIntsFiredTable;
/* Generic Counters */
UINT32 TotalTxPacketCount;
UINT32 TotalRxPacketCount;
UINT32 NoECBAvailableCount;
UINT32 PacketTxTooBigCount;
UINT32 PacketTxTooSmallCount;
UINT32 PacketRxOverflowCount;
UINT32 PacketRxTooBigCount;
UINT32 PacketRxTooSmallCount;
UINT32 PacketTxMiscErrorCount;
UINT32 PacketRxMiscErrorCount;
UINT32 RetryTxCount;
UINT32 ChecksumErrorCount;
UINT32 HardwareRxMismatchCount;
UINT64 TotalTxOKByteCount;
UINT64 TotalRxOKByteCount;
UINT32 TotalGroupAddrTxCount;
UINT32 TotalGroupAddrRxCount;
UINT32 AdapterResetCount;
UINT32 AdapterOprTimeStamp;
UINT32 QDepth;
/* Media Counters */
UINT32 TxOKSingleCollision;
UINT32 TxOKMultipleCollisions;
UINT32 TxOKButDeferred;
UINT32 TxAbortLateCollision;
UINT32 TxAbortExcessCollisions;
UINT32 TxAbortCarrierSense;
UINT32 TxAbortExDeferral;
UINT32 RxAbortFrameAlignment;
/* Custom Counters */
UINT16 CustomCounterCount;
UINT32 TxRetryFailureCount;
UINT32 ClearToSendCount;
UINT32 UnderRunCount;
UINT32 RxDMAOverrunCount;
UINT32 PacketSlideCount;
UINT32 DummyRCBCount;
UINT32 AdapterReset1Count;
UINT32 BadFragLengthCount;
UINT32 PollingTimeoutCount;
UINT32 AdapterDiedCount;
UINT32 NumberOfIntsFiredCount;
}
DRIVER_DATA;
/*===[ Include files specific Ethernet MLIDs ]===========================*/
#include "ethertsm.h"
/*===[ Function prototypes ]=============================================== */
void CFixUpStatStrings (
DRIVER_DATA *driverData);
ODISTAT DriverInit (
struct _MODULE_HANDLE_ *ModuleHandle,
SCREEN_HANDLE *ScreenHandle,
MEON *CommandLine,
MEON *ModuleLoadPath,
UINT32 UnitializedDataLength,
void *CustomDataFileHandle,
UINT32 (* FileRead)(
void *FileHandle,
UINT32 FileOffset,
void *FileBuffer,
UINT32 FileSize),
UINT32 CustomDataOffset,
UINT32 CustomDataSize,
UINT32 NumMsgs,
MEON **Msgs);
ODISTAT DriverReset (
DRIVER_DATA *driverData,
CONFIG_TABLE *configTable,
OPERATION_SCOPE operationScope);
ODISTAT DriverMulticastChange (
DRIVER_DATA *driverData,
CONFIG_TABLE *configTable,
GROUP_ADDR_LIST_NODE *mcTable,
UINT32 numEntries,
UINT32 functionalTable);
ODISTAT DriverShutdown (
DRIVER_DATA *driverData,
MLID_ConfigTable *configTable,
UINT32 shutDownType,
OPERATION_SCOPE operationScope);
ODISTAT DriverPromiscuousChange(
DRIVER_DATA *driverData,
CONFIG_TABLE *configTable,
UINT32 promiscuousMode);
ODISTAT DriverStatisticsChange (
DRIVER_DATA *driverData,
CONFIG_TABLE *configTable);
void DriverSend (
DRIVER_DATA *driverData,
CONFIG_TABLE *configTable,
TCB *tcb,
UINT32 pktSize,
void *physTcb);
void DriverISR(
DRIVER_DATA *driverData);
void DriverCallBack(
DRIVER_DATA *driverData,
CONFIG_TABLE *ConfigTable);
BOOLEAN DriverDisableInterrupt(
DRIVER_DATA *driverData,
BOOLEAN flag);
void DriverEnableInterrupt(
DRIVER_DATA *driverData);
void DriverPoll (
DRIVER_DATA *driverData,
CONFIG_TABLE *configTable);
UINT32 WaitForEvent (
DRIVER_DATA *driverData,
void *port,
UINT8 type,
UINT32 timeout);
#define CNE3200_H
#endif /* CNE3200_H */