1248 lines
54 KiB
C
1248 lines
54 KiB
C
/*************************************************************************
|
|
* wanpipe_sdlc.h Sangoma SDLC firmware API definitions
|
|
*
|
|
* Author: Nenad Corbic <ncorbic@sangoma.com>
|
|
*
|
|
* Copyright: (c) 2002 Sangoma Technologies Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the term of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*
|
|
*===========================================================================
|
|
* Jul 24, 2002 Nenad Corbic Initial Version
|
|
*=======================================================================
|
|
*
|
|
* Organization
|
|
* - Compatibility notes
|
|
* - Constants defining the shared memory control block (mailbox)
|
|
* - Interface commands
|
|
* - Return code from interface commands
|
|
* - Constants for the commands (structures for casting data)
|
|
* - UDP Management constants and structures
|
|
*
|
|
**************************************************************************/
|
|
|
|
/*
|
|
***************************************************************
|
|
* *
|
|
* SDLCHDR.C is the 'C' header file for the Sangoma SDLC code. *
|
|
* *
|
|
***************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
* $Log: not supported by cvs2svn $
|
|
* Revision 1.2 2004/06/07 15:53:08 sangoma
|
|
* *** empty log message ***
|
|
*
|
|
* Revision 1.1.1.1 2002/11/25 09:20:00 ncorbic
|
|
* Wanpipe Linux Development
|
|
*
|
|
* Revision 1.1 2002/11/08 05:15:00 ncorbic
|
|
* *** empty log message ***
|
|
*
|
|
*
|
|
* Rev 1.1 25 Feb 1998 11:27:26 gideon
|
|
* Added the command READ_STATION_INFO_STRUCT and the
|
|
* 'general_operational_config_option' of DISABLE_RX_WHEN_TX.
|
|
* The code version is now 1.02.
|
|
*
|
|
*
|
|
* Rev 1.0 08 Aug 1996 10:58:00 gideon
|
|
* Initial revision.
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
/*
|
|
Reserved data areas for this code are as follows:
|
|
0x0010 - the adapter configuration data
|
|
byte passed by the loader
|
|
0x4700 to 0x477F - primary receive buffer status table (128 bytes)
|
|
|
|
0x4780 - P0_ADDR_LAST_READ_RR0_BYTE (used by the external
|
|
status interrupt handler)
|
|
|
|
0x4781 - address of the CTS status (used by the external
|
|
status interrupt handler)
|
|
|
|
0x4800 to 0x57FF - primary receive buffer (this buffer is of size
|
|
4096 bytes which is large enough to accomodate
|
|
at least four frames of maximum permitted length,
|
|
plus header length)
|
|
|
|
0xE000 to 0xE22F - SEND mailbox (560 bytes)
|
|
0xE230 to 0xE45F - RECEIVE mailbox (560 bytes)
|
|
0xE460 to 0xEEDF - reserved for later use (2688 bytes)
|
|
0xEEE0 to 0xEEEF - general status interface bytes (16 bytes)
|
|
0xEEE0 - number of received I-frames queued for the application
|
|
0xEEE1 - global transmit buffer status
|
|
0xEEE2 to 0xEEE3 - current exception conditions
|
|
0xEEE4 - current modem status
|
|
0xEEE5 - trace data available byte
|
|
0xEEF0 to 0xEEFF - interrupt interface bytes (16 bytes)
|
|
0xEEF0 - interrupt reporting byte
|
|
0xEEF1 - interrupt permission byte
|
|
0xEF00 to 0xEFFF - status bytes on a per station basis (256 bytes)
|
|
0xF000 to 0xFFFF - trace buffer (4096 bytes)
|
|
*/
|
|
|
|
#ifndef _WANPIPE_SDLC_
|
|
#define _WANPIPE_SDLC_
|
|
|
|
#pragma pack(1)
|
|
|
|
/* absolute addresses of buffers and variables on the board */
|
|
#define ADDR_DOWNLOADED_CONFIG_DATA 0x0010 /* the offset of the downloaded configuration data on the adapter */
|
|
#define P0_OFF_PRI_RX_BFR_STATUS_TABLE 0x4700 /* Port 0 - the address of the primary status element table */
|
|
#define P0_ADDR_LAST_READ_RR0_BYTE 0x4780 /* Port 0 - the address of the previously read status of RR0 */
|
|
#define P0_ADDR_CTS_STATUS_BYTE 0x4781 /* Port 0 - address of the CTS status */
|
|
#define BASE_ADDR_PRI_RX_BFR 0x4800 /* the base address of the primary receive DMA buffer */
|
|
#define END_ADDR_PRI_RX_BFR 0x57FF /* the end address of the primary receive DMA buffer */
|
|
#define BASE_ADDR_OF_MB_STRUCTS 0xE000 /* the base address of the mailbox area */
|
|
#define ADDR_GLOBAL_NO_RX_I_FRMS_FOR_APP 0xEEE0 /* the address of the global number of I-frames available */
|
|
/* for the application */
|
|
#define ADDR_GLOBAL_TX_BFR_STATUS_BYTE 0xEEE1 /* the address of the global transmit buffer status byte */
|
|
#define ADDR_EXCEPTION_COND_INTERFACE_WORD 0xEEE2 /* the address of the exception condition interface word */
|
|
#define ADDR_CURR_MODEM_STAT_INTERFACE_BYTE 0xEEE4 /* the address of the current modem status interface byte */
|
|
#define ADDR_TRACE_DATA_AVAILABLE_BYTE 0xEEE5 /* the address of the byte indicating the availablity of trace */
|
|
/* data */
|
|
#define ADDR_INTERRUPT_REPORT_INTERFACE_BYTE 0xEEF0 /* the address of the interrupt type reporting interface byte */
|
|
#define ADDR_INTERRUPT_PERMIT_INTERFACE_BYTE 0xEEF1 /* the address of the interrupt permission interface byte */
|
|
#define BASE_ADDR_STATION_INFO_INTERFACE_BYTES 0xEF00 /* the base address of the per-station status bytes */
|
|
#define BASE_ADDR_TRACE_BFR 0xF000 /* the base address of the trace buffer */
|
|
#define END_ADDR_TRACE_BFR 0xFFFF /* the end address of the trace buffer */
|
|
|
|
|
|
|
|
/* interface commands */
|
|
#define SDLC_READ 0x00 /* receive an SDLC I-frame */
|
|
#define SDLC_WRITE 0x01 /* transmit an SDLC I-frame */
|
|
#define SET_SDLC_CONFIGURATION 0x10 /* set the SDLC operational configuration */
|
|
#define READ_SDLC_CONFIGURATION 0x11 /* read the current SDLC configuration */
|
|
#define SET_ADAPTER_OPERATING_FREQUENCY 0x12 /* set the adapter operating frequency */
|
|
#define ENABLE_COMMUNICATIONS 0x13 /* enable communications */
|
|
#define DISABLE_COMMUNICATIONS 0x14 /* disable communications */
|
|
#define ADD_STATION 0x15 /* add and configure and SDLC station */
|
|
#define DELETE_STATION 0x16 /* delete an SDLC station */
|
|
#define ACTIVATE_STATION 0x17 /* activate an SDLC station */
|
|
#define DEACTIVATE_STATION 0x18 /* deactivate an SDLC station */
|
|
#define FLUSH_I_FRAME_BUFFERS 0x19 /* flush the I-frame buffers */
|
|
#define READ_STATION_STATUS 0x20 /* read the status of a station */
|
|
#define LIST_ADDED_STATIONS 0x21 /* return a list of 'added' stations */
|
|
#define LIST_STATIONS_IN_NRM 0x22 /* return a list of stations currently in the NRM */
|
|
#define LIST_STATIONS_WITH_I_FRMS_AVAILABLE 0x23 /* return a list of stations with I-frames available for the */
|
|
/* application */
|
|
#define READ_OPERATIONAL_STATISTICS 0x24 /* retrieve the operational statistics */
|
|
#define FLUSH_OPERATIONAL_STATISTICS 0x25 /* flush the operational statistics */
|
|
#define READ_STATION_INFO_STRUCT 0x26 /* return the STATION_INFORMATION structure to the application */
|
|
#define SEND_TEST_FRAME 0x30 /* send a TEST frame */
|
|
#define SEND_SIM_RIM_FRAME 0x31 /* send a SIM or a RIM frame */
|
|
#define SEND_XID_RESPONSE_FRAME 0x32 /* send an XID response frame */
|
|
#define SET_PRI_STATION_XID_I_FIELD 0x33 /* set the XID field for a primary SDLC station */
|
|
#define LIST_PRI_STATIONS_ISSUING_XID_FRAMES 0x34 /* return a list of primary stations issuing XID frames */
|
|
#define SET_MODEM_STATUS 0x40 /* set the DTR/RTS state */
|
|
#define READ_MODEM_STATUS 0x41 /* read the current modem status (CTS and DCD status) */
|
|
#define READ_COMMS_ERR_STATISTICS 0x42 /* read the communication error statistics */
|
|
#define FLUSH_COMMS_ERR_STATISTICS 0x43 /* flush the communication error statistics */
|
|
#define SET_INTERRUPT_TRIGGERS 0x50 /* set the interrupt triggers */
|
|
#define READ_INTERRUPT_TRIGGERS 0x51 /* read the interrupt trigger configuration */
|
|
#define SET_TRACE_CONFIGURATION 0x60 /* set the trace configuration */
|
|
#define READ_TRACE_DATA 0x61 /* read trace data */
|
|
#define READ_TRACE_STATISTICS 0x62 /* read the trace statistics */
|
|
#define READ_CODE_VERSION 0x70 /* read the SDLC code version */
|
|
#define READ_EXCEPTION_CONDITION 0x71 /* read any exception conditions from the adapter */
|
|
#define DISCARD_INCOMMING_INFORMATION_FRAMES 0x72 /* discard incomming I-frames */
|
|
#define BRIDGE_RECEIVER_AND_TRANSMITTER 0x73 /* bridge the receiver and transmitter */
|
|
#define SET_APPLICATION_IRQ_TIMEOUT 0x74 /* set a timeout for the application to respond to an IRQ */
|
|
#define READ_SDLC_ADAPTER_CONFIGURATION 0xA0 /* read the adapter type and operating speed */
|
|
#define DUMMY_MB_COMMAND 0xFF /* a dummy command used internally */
|
|
|
|
|
|
|
|
/* return codes */
|
|
#define COMMAND_OK 0x00
|
|
#define OK 0x00 /* the interface call was successfull */
|
|
#define SET_SDLC_CONFIG_BEFORE_ADD_STATION 0x01 /* set the SDLC configuration before a station is added */
|
|
#define SET_SDLC_CONFIG_BEFORE_ENABLE_COMMS 0x01 /* set the configuration before communications are enabled */
|
|
#define SET_SDLC_CONFIG_BEFORE_SET_INTS 0x01 /* set the configuration before enabling interrupts */
|
|
#define INVALID_CONFIGURATION_DATA 0x01 /* the passed configuration data is invalid */
|
|
#define COMMUNICATIONS_NOT_ENABLED 0x01 /* communications are not enabled */
|
|
#define INVALID_SDLC_ADDRESS 0x02 /* the passed SDLC address is invalid */
|
|
#define INVALID_TRACE_CONFIGURATION 0x02 /* the trace configuration data is invalid */
|
|
#define TRACE_HAS_NOT_BEEN_ACTIVATED 0x02 /* the trace has not yet been activated */
|
|
#define STATION_NOT_ADDED 0x03 /* the station has not been added */
|
|
#define STATION_ALREADY_ADDED 0x03 /* the station has already been added */
|
|
#define STATION_ALREADY_ACTIVATED 0x04 /* the station has already been activated */
|
|
#define STATION_ALREADY_DEACTIVATED 0x04 /* the station has already been deactivated */
|
|
#define STATION_DISCONNECTED 0x04 /* the station is currently disconnected */
|
|
#define POLL_INTERVAL_INVALID 0x04 /* the set poll interval is invalid */
|
|
#define INVALID_INTERRUPT_TMR_VALUE_SELECTED 0x04 /* the selected interrupt timer value is invalid */
|
|
#define NO_RX_I_FRAMES_AVAILABLE_FOR_APP 0x05 /* no frames are available for the application */
|
|
#define INVALID_FRAME_LENGTH 0x05 /* the passed transmit buffer length is invalid */
|
|
#define NO_TRACE_DATA_AVAILABLE 0x05 /* no trace data is available for the application */
|
|
#define I_FRM_NOT_QUEUED_FOR_TX 0x06 /* the I-frame has not been queued for transmission */
|
|
#define CMND_INVALID_FOR_SECONDARY_STATION 0x06 /* the command is invalid for a secondary SDLC station */
|
|
#define CMND_INVALID_FOR_PRIMARY_STATION 0x06 /* the command is invalid for a primary SDLC station */
|
|
#define TEST_FRM_BFR_CURRENTLY_IN_USE 0x07 /* the TEST frame buffer is currently in use */
|
|
#define XID_FRM_BFR_CURRENTLY_IN_USE 0x07 /* the XID frame buffer is currently in use */
|
|
#define XID_I_FIELD_BFRS_FULL 0x07 /* the XID Information field buffers are all occupied */
|
|
#define NO_XID_CMND_RECEIVED_FROM_PRI 0x08 /* no XID command has been received from the primary station */
|
|
#define CMND_INVALID_FOR_CURRENT_SDLC_STATE 0x08 /* the command is invalid for the current SDLC state */
|
|
#define PRI_STATION_ALREADY_HAS_XID_DEFINED 0x09 /* the primary station already has an XID field defined */
|
|
#define ILLEGAL_COMMAND 0x10 /* the interface command used is invalid */
|
|
#define BUSY_WITH_BAUD_CALIBRATION 0x40 /* the adapter is busy with a baud rate calibration */
|
|
#define BAUD_CALIBRATION_FAILED 0x41 /* the adapter failed the baud rate calibration */
|
|
|
|
|
|
/* miscellaneous constants used when executing mailbox commands */
|
|
|
|
/* for the SET_CONFIGURATION command */
|
|
#define LGTH_CONFIG_DATA 0x1F /* the length of the configuration data */
|
|
#define SECONDARY_STATION 0x00 /* the station is configured as a primary */
|
|
#define PRIMARY_STATION 0x01 /* the station is configured as a secondary */
|
|
|
|
/* offset within the data area of various configuration parameters */
|
|
#define OFF_STATION_CONFIG_IN_CFG_DATA 0x00 /* the offset of the station configuration */
|
|
#define OFF_BAUD_RATE_IN_CFG_DATA 0x01 /* the offset of the baud rate */
|
|
#define OFF_MAX_I_FIELD_LGTH_IN_CFG_DATA 0x05 /* the offset of the maximum I-field length */
|
|
#define OFF_GENL_OP_CFG_BITS_IN_CFG_DATA 0x07 /* the offset of the operational configuration bits */
|
|
#define OFF_PRI_STATION_SLOW_POLL_INTERVAL_IN_CFG_DATA 0x11 /* the offset of the primary station slow poll interval */
|
|
#define OFF_SEC_STATION_RESPONSE_TO_IN_CFG_DATA 0x13 /* the offset of the secondary station response timeout */
|
|
#define OFF_NO_CONSEC_SEC_TOs_IN_NRM_IN_CFG_DATA 0x15 /* the offset of the permitted number of consecutive */
|
|
/* secondary stations timeouts */
|
|
#define OFF_MAX_LGTH_I_FLD_PRI_XID_FRM_IN_CFG_DATA 0x17 /* the offset of the maximum length of the XID data */
|
|
/* field for a primary station */
|
|
#define OFF_OP_FLG_BIT_DELAY_IN_CFG_DATA 0x19 /* the offset of the opening flag bit delay within the data area */
|
|
#define OFF_RTS_DROP_DELAY_IN_CFG_DATA 0x1B /* the offset of the RTS dropping delay within the data area */
|
|
#define OFF_CTS_TIMEOUT_IN_CFG_DATA 0x1D /* the offset of the permitted CTS timeout within the data area */
|
|
|
|
/* minimum and maximum values for the configuration parameters */
|
|
#define MAX_PERMITTED_BAUD_RATE 200000 /* the maximum permitted baud rate */
|
|
#define MIN_PERMITTED_I_FIELD_LENGTH 1 /* the minimum permitted I-frame length */
|
|
#define MAX_PERMITTED_I_FIELD_LENGTH 544 /* the maximum permitted I-frame length */
|
|
#define MAX_ADD_OP_FLG_BIT_DELAY_COUNT 200 /* the maximum permitted opening flag bit delay */
|
|
#define MAX_ADD_DROP_RTS_BIT_DELAY 200 /* the maximum permitted DRT drop bit delay */
|
|
#define MIN_CTS_DELAY_1000THS_SEC 10 /* the minimum permitted CTS timeout bit delay (1/100ths second) */
|
|
#define MAX_CTS_DELAY_1000THS_SEC 2000 /* the maximum permitted CTS timeout bit delay (1/100ths second) */
|
|
#define MIN_PRI_STATION_SLOW_POLL_INTERVAL 1 /* the minimum slow poll interval */
|
|
#define MAX_PRI_STATION_SLOW_POLL_INTERVAL 60000 /* the maximum slow poll interval */
|
|
#define MIN_SEC_STATION_RESPONSE_TO 1 /* the minimum secondary station response timeout */
|
|
#define MAX_SEC_STATION_RESPONSE_TO 15000 /* the maximum secondary station response timeout */
|
|
#define MIN_NO_CONSEC_SEC_TOs_IN_NRM 0 /* the minimum number of consecutive secondary timeouts */
|
|
#define MAX_NO_CONSEC_SEC_TOs_IN_NRM 200 /* the maximum number of consecutive secondary timeouts */
|
|
#define MAX_LGTH_I_FLD_PRI_XID_FRAME 255 /* the maximum length of a primary station XID data field */
|
|
|
|
/* 'general_operational_config_bits' settings used by the SET_CONFIGURATION command */
|
|
#define SWITCHED_CTS_RTS 0x0001 /* switched CTS/RTS */
|
|
#define IDLE_FLAGS 0x0002 /* the line idle condition is flags (and not ones) */
|
|
#define NRZI_ENCODING 0x0010 /* NRZI encoding */
|
|
#define FM0_ENCODING 0x0020 /* FM0 encoding (used in a 4 wire, V.35 configuration) */
|
|
#define APP_REQUESTS_PASSING_EXCEPT_COND 0x0100 /* exception conditions are only passed to the application on a */
|
|
/* READ_EXCEPTION_CONDITION command */
|
|
#define DISABLE_RX_WHEN_TX 0x0200 /* disable the receiver while transmitting a frame */
|
|
#define INTERFACE_LEVEL_V35 0x8000 /* V.35 interface */
|
|
|
|
|
|
|
|
/************************************************************************
|
|
* 'protocol_config_bits'
|
|
* settings used by the SET_CONFIGURATION command
|
|
************************************************************************/
|
|
|
|
#define APP_TO_ISSUE_DISC_AFTER_RX_RD 0x0001
|
|
/* the application is responsible for issuing a DISC when
|
|
* notified that an RD frame has been received */
|
|
|
|
#define APP_TO_ISSUE_SIM_AFTER_RX_RIM 0x0002
|
|
/* the application is responsible for issuing a SIM when
|
|
* notified that an RIM frame has been received */
|
|
|
|
#define NRM_TIMEOUT_FOR_SECONDARY 0x0004
|
|
/* the secondary will timeout while in the NRM (and
|
|
* automatically enter the NDM) if not polled by the
|
|
* primary at the configured poll rate */
|
|
|
|
#define PERMANENT_SEC_DISC_MODE 0x0008
|
|
/* on reception of a DISC command, the secondary
|
|
* permanently enters the disconnected mode, and
|
|
* will issue DMs in response to incomming SNRMs
|
|
* (i.e, will not re-enter ABM until an ACTIVATE_STATION
|
|
* command is performed by the application) */
|
|
|
|
#define ISSUE_SNRM_AFTER_RX_DM_IN_NRM 0x0010
|
|
/* a primary station should automatically issue
|
|
* a SNRM and attempt to re-enter the ABM after
|
|
* receiving a DM while in the NRM */
|
|
|
|
#define ISSUE_DISC_AFTER_RX_FRMR 0x0020
|
|
/* a primary station should automatically issue a
|
|
* DISC (and not a SNRM) after receiving a FRMR
|
|
* while in the NRM */
|
|
|
|
/************************************************************
|
|
* 'exception_condition_reporting_config'
|
|
* settings used by the SET_CONFIGURATION command
|
|
************************************************************/
|
|
|
|
|
|
#define DONT_REPORT_STATIONS_GOING_ACTIVE 0x01
|
|
/* don't report stations going active */
|
|
|
|
#define DONT_REPORT_STATIONS_GOING_INACTIVE 0x02
|
|
/* don't report stations going inactive */
|
|
|
|
|
|
/************************************************************
|
|
* 'modem_config_bits'
|
|
* settings used by the SET_CONFIGURATION command
|
|
************************************************************/
|
|
|
|
#define DONT_RAISE_DTR_RTS_ON_EN_COMMS 0x01
|
|
/* don't automatically raise DTR and RTS when
|
|
* performing an ENABLE_COMMUNICATIONS
|
|
* command and the ADD_STATION command */
|
|
|
|
#define MAX_POLL_INTERVAL 60000
|
|
/* the maximum permitted poll interval
|
|
* for the READ_STATUS command */
|
|
|
|
#define LGTH_STATUS_DATA 0x06
|
|
/* the number of bytes included in the status
|
|
* data (READ_STATUS) */
|
|
|
|
#define OFF_COMMS_STAT_IN_STATS_DATA 0x00
|
|
/* the offset of the communications status
|
|
* within the data area */
|
|
|
|
#define OFF_NO_FRMS_TO_TX_IN_STATS_DATA 0x01
|
|
/* the offset of the number of queued outgoing
|
|
* frames */
|
|
|
|
#define OFF_INT_REPORT_BYTE_IN_STATS_DATA 0x05
|
|
/* the offset of the interrupt status byte
|
|
* within the data area */
|
|
|
|
/****************************************************
|
|
* for the SET_INTERRUPT_TRIGGERS command
|
|
***************************************************/
|
|
|
|
#define LGTH_INTERRUPT_TRIGGER_DATA 0x03
|
|
/* the length of the interrupt trigger
|
|
* configuration data */
|
|
|
|
#define OFF_TRIGGER_BITS_IN_SET_INT_DATA 0x00
|
|
/* offset of the interrupt trigger map within
|
|
* the data area */
|
|
|
|
#define OFF_TX_FRM_LGTH_IN_SET_INT_DATA 0x01
|
|
/* offset of the transmit frame length within
|
|
* the data area */
|
|
|
|
#define OFF_INT_TIMER_VALUE_IN_SET_INT_DATA 0x01
|
|
/* offset of the interrupt timer value within
|
|
* the data area */
|
|
|
|
#define MAX_INTERRUPT_TIMER_VALUE 60000
|
|
/* the maximum permitted interrupt timer value */
|
|
|
|
/************************************************
|
|
* for the OPERATE_DATALINE_MONITOR command
|
|
************************************************/
|
|
|
|
#define OFF_LN_TRC_SETUP 0x00
|
|
/* the offset within the mailbox structure data
|
|
* area of the line trace setup parameter */
|
|
|
|
#define OFF_TRC_DEACTIVATION_TMR_BYTE 0x01
|
|
/* the offset within the mailbox of the trace
|
|
* deactivation timer */
|
|
|
|
|
|
/************************************************
|
|
* for the SET_APPLICATION_IRQ_TIMEOUT command
|
|
************************************************/
|
|
|
|
#define OFF_IRQ_TO_IN_SET_APP_IRQ_TO_CMND 0x00
|
|
/* offset of the IRQ timeout within the data area */
|
|
|
|
#define MIN_IRQ_TIMEOUT_VALUE 0x00
|
|
/* the minimum permitted IRQ timeout */
|
|
|
|
#define MAX_IRQ_TIMEOUT_VALUE 5000
|
|
/* the maximum permitted IRQ timeout */
|
|
|
|
/* miscellaneous commands */
|
|
#define OFF_TX_BFR_SIZE_IN_DATA_AREA 0x0A
|
|
/* READ_CONFIGURATION - the offset of the
|
|
* transmit buffer size within the data area */
|
|
|
|
#define LGTH_COMMS_ERR_STAT_DATA 0x0A
|
|
/* READ_COMMS_ERR_STATISTICS - the number of
|
|
* bytes included in the communication error data */
|
|
|
|
#define LGTH_GLOBAL_OP_STATS 42
|
|
/* the length of the global operational statistic data */
|
|
|
|
#define LGTH_SPECIFIC_STATION_STATUS 0x03
|
|
/* the length of the station-specific status information */
|
|
|
|
#define LGTH_GLOBAL_STATION_STATUS 0x05
|
|
/* the length of the general station information */
|
|
|
|
#define LGTH_CODE_VERSION_STRING 0x04
|
|
/* READ_CODE_VERSION - the length of the code version string */
|
|
|
|
#define OFF_DISCARD_MODE_IN_DATA_AREA 0x00
|
|
/* DISCARD_INCOMMING_INFORMATION_FRAMES - the
|
|
* offset of the discard mode parameter within
|
|
* the data area */
|
|
|
|
#define OFF_BRIDGE_MODE_IN_DATA_AREA 0x00
|
|
/* BRIDGE_RECEIVER_AND_TRANSMITTER - the offset 00
|
|
* of the bridging bridging mode parameter within
|
|
* the data area */
|
|
|
|
|
|
/****************************************************
|
|
* exception conditions reported to the application
|
|
***************************************************/
|
|
|
|
#define EXCEPTION_CONDITION_BASE_VALUE 0x20
|
|
/* a base value used for reporting exception conditions */
|
|
|
|
#define EXCEP_COND_STATE_CHANGE 0x20
|
|
/* the SDLC station changed state */
|
|
|
|
#define EXCEP_COND_TIMEOUT_NRM 0x21
|
|
/* a timeout occurred while the stations was in the NRM */
|
|
|
|
#define EXCEP_COND_RD_FRM_RX_WHILE_IN_NRM 0x22
|
|
/* a RD was received while the link was in the NRM */
|
|
|
|
#define EXCEP_COND_DM_FRM_RX_WHILE_IN_NRM 0x23
|
|
/* a DM was received while the link was in the NRM */
|
|
|
|
#define EXCEP_COND_SNRM_FRM_RX_WHILE_IN_NRM 0x24
|
|
/* a SNRM was received while the link was in the NRM */
|
|
|
|
#define EXCEP_COND_RIM_FRM_RX 0x25
|
|
/* a RIM was received */
|
|
|
|
#define EXCEP_COND_XID_FRM_RX 0x26
|
|
/* an XID frame was received */
|
|
|
|
#define EXCEP_COND_TEST_FRM_RX 0x27
|
|
/* a TEST frame was received */
|
|
|
|
#define EXCEP_COND_FRMR_FRM_RX_TX 0x28
|
|
/* a FRMR condition occurred */
|
|
|
|
#define EXCEP_COND_CHANGE_IN_MODEM_STATUS 0x30
|
|
/* a modem status change occurred */
|
|
|
|
|
|
/****************************************************
|
|
* clocking types
|
|
****************************************************/
|
|
|
|
#define EXTERNAL_CLOCKING 0x00 /* external clocking */
|
|
#define INTERNAL_CLOCKING 0x01 /* internal clocking */
|
|
|
|
|
|
|
|
|
|
/* bit settings of RTS and DTR used for WR5 of the
|
|
* ESCC and channel 0 of the ASCI
|
|
* (SET_MODEM_STATUS command) */
|
|
#define DTR_LOW_RTS_LOW 0x00 /* DTR low, RTS low */
|
|
#define RTS_HIGH 0x02 /* RTS high */
|
|
#define DTR_HIGH 0x80 /* RTS high */
|
|
|
|
/* modem status changes */
|
|
#define DCD_HIGH 0x08
|
|
#define CTS_HIGH 0x20
|
|
|
|
/****************************************************
|
|
* definitions for triggering interrupts
|
|
**************************************************/
|
|
|
|
/* 'interrupt_triggers' bit mapping set by a
|
|
* SET_INTERRUPT_TRIGGERS command */
|
|
|
|
#define INTERRUPT_ON_RX_FRAME 0x01
|
|
/* interrupt when an incomming frame is available
|
|
* for reception by the application */
|
|
|
|
#define INTERRUPT_ON_TX_FRAME 0x02 /* interrupt when a frame may be transmitted */
|
|
#define INTERRUPT_ON_COMMAND_COMPLETE 0x08 /* interrupt when an interface command is complete */
|
|
#define INTERRUPT_ON_EXCEPTION_CONDITION 0x10 /* interrupt on an exception condition */
|
|
#define INTERRUPT_ON_TIMER 0x20 /* interrupt on a timer */
|
|
#define INTERRUPT_ON_TRACE_DATA_AVAILABLE 0x40 /* interrupt if trace data is available for the application */
|
|
|
|
/* interrupt types indicated at 'ptr_interrupt_interface_byte' */
|
|
#define NO_INTERRUPTS_PENDING 0x00 /* no interrups are currently pending */
|
|
#define RX_INTERRUPT_PENDING 0x01 /* a receive interrupt is pending */
|
|
#define TX_INTERRUPT_PENDING 0x02 /* a transmit interrupt is pending */
|
|
#define COMMAND_COMPLETE_INTERRUPT_PENDING 0x08 /* a 'command complete' interrupt is pending */
|
|
#define EXCEPTION_CONDITION_INTERRUPT_PENDING 0x10 /* an exception condition interrupt is pending */
|
|
#define TIMER_INTERRUPT_PENDING 0x20 /* a timer interrupt is pending */
|
|
#define TRACE_INTERRUPT_PENDING 0x40 /* a trace interrupt is pending */
|
|
|
|
/* bit mappings used for the transmit and receive interface bytes */
|
|
#define NO_FRAMES_QUEUED_FOR_TRANSMISSION 0x00 /* no frames are currently queued for transmission */
|
|
#define AT_LEAST_ONE_FRAME_QUEUED_FOR_TRANSMISSION 0x01 /* at least one frame is currently queued for transmission */
|
|
#define NO_FRAMES_AVAILABLE_FOR_RECEPTION 0x00 /* no frames are currently queued for reception */
|
|
#define AT_LEAST_ONE_FRAME_AVAILABLE_FOR_RECEPTION 0x01 /* at least one frame is currently queued for reception */
|
|
|
|
|
|
|
|
/* definitions for the interrupt level receive buffers */
|
|
#define NUMBER_RX_INT_LVL_BUFFERS 4 /* the number of interrupt level receive buffers */
|
|
#define SIZEOF_INT_LVL_RX_BFR_STRUCT 556 /* the size of each interrupt level receive structure */
|
|
#define FIRST_INT_LVL_RX_STRUCTURE 0x00 /* the first interrupt level receive structure number */
|
|
#define MAX_FRM_LGTH_INCL_HDR_CRC_BYTES 548 /* the maximum permitted frame length (including headed and CRC */
|
|
/* bytes) */
|
|
|
|
|
|
|
|
/* for modem status initialization and reporting */
|
|
#define LINE_LOW 0x00 /* the initial CTS and DCD status */
|
|
#define OFF_MODEM_STAT 0x00 /* the offset within the mailbox structure data area of the modem */
|
|
/* status byte in a READ_MODEM_STAT command */
|
|
#define DCD_CTS_MASK 0x28 /* a mask to show bits 5 and 3 (CTS and DCD) when reading the */
|
|
/* modem status in RR0 of the SCC */
|
|
|
|
|
|
/* mailbox definitions */
|
|
#define SIZEOF_MB_STRUCTS 560 /* the size of the mailbox structures */
|
|
#define SIZEOF_MB_DATA_AREA 544 /* the size of the mailbox data area */
|
|
#define NO_RESERVED_BYTES_IN_MB 0x06 /* the number of reserved bytes in the mailbox structure */
|
|
#define SEND_MAILBOX 0x00 /* SEND mailbox structure */
|
|
#define RECEIVE_MAILBOX 0x01 /* RECEIVE mailbox structure */
|
|
|
|
|
|
|
|
/* transmit and receive I-frame buffering */
|
|
#define SIZEOF_RX_I_FRM_STORAGE_BFR_AREA 10000 /* the size of the I-frame receive buffer area */
|
|
#define SIZEOF_TX_I_FRM_STORAGE_BFR_AREA 10000 /* the size of the I-frame transmit buffer area */
|
|
#define MAX_NO_RX_I_FRM_STORAGE_BUFFERS 35 /* the maximum number of receive I-frame storage buffers */
|
|
#define MAX_NO_TX_I_FRM_STORAGE_BUFFERS 35 /* the maximum number of transmit I-frame storage buffers */
|
|
|
|
|
|
|
|
/* SDLC control field types */
|
|
#define RR 0x01
|
|
#define RNR 0x05
|
|
#define REJ 0x09
|
|
#define INFORMATION 0x00
|
|
#define UI 0x03
|
|
#define SIM 0x07
|
|
#define RIM 0x07
|
|
#define DM 0x0F
|
|
#define UP 0x23
|
|
#define DISC 0x43
|
|
#define RD 0x43
|
|
#define UA 0x63
|
|
#define SNRM 0x83
|
|
#define FRMR 0x87
|
|
#define XID 0xAF
|
|
#define CFGR 0xC7
|
|
#define TEST 0xE3
|
|
#define BCN 0xEF
|
|
|
|
|
|
|
|
/* constants for the formation and interpretation of SDLC frames */
|
|
#define OFF_PF_BIT 0x04 /* offset of the P/F bit in the SDLC control field */
|
|
#define OFF_Nr_FIELD 0x05 /* offset of the Nr bits in the SDLC control field */
|
|
#define OFF_Ns_FIELD 0x01 /* offset of the Ns bits in the SDLC control field */
|
|
#define REM_PF_BIT_MASK 0xEF /* mask to remove the P/F bit from an SDLC control field */
|
|
#define SET_PF_BIT_MASK 0x10 /* mask to include the P/F bit in an SDLC control field */
|
|
#define REM_rrr_MASK 0x1F /* mask to remove the rrr bits from an SDLC control field */
|
|
#define REM_sss_MASK 0xF1 /* mask to remove the sss bits from an SDLC control field */
|
|
#define EXTRACT_rrr_MASK 0xE0 /* mask to extract the rrr bits from an SDLC control field */
|
|
#define EXTRACT_sss_MASK 0x0E /* mask to extract the sss bits from an SDLC control field */
|
|
#define BIT_0_SET 0x01 /* used to test the received frame control field type */
|
|
#define OFF_ADDR_FLD 0x00 /* the offset of the SDLC address field in the receiver buffer area */
|
|
#define OFF_CNTRL_FLD 0x01 /* the offset of the SDLC control field in the receiver buffer area */
|
|
#define OFF_INFO_FLD 0x02 /* the offset of the SDLC information field in the receiver buffer */
|
|
#define SDLC_HDR_LGTH 0x02 /* the number of bytes in the SDLC address and control fields */
|
|
#define CRC_LGTH 0x02 /* the number of bytes in the CRC field */
|
|
#define BROADCAST_ADDRESS 0xFF /* the SDLC broadcast address */
|
|
|
|
|
|
|
|
/* overall SDLC states */
|
|
#define NDM 0x00 /* the device is currently in the NDM */
|
|
#define NRM 0x01 /* the device is in the NRM (information transfer mode) */
|
|
|
|
|
|
|
|
/* definitions for constructing the I-field for FRMR frames */
|
|
#define LGTH_FRMR_I_FLD 0x03 /* the length of a FRMR I-field */
|
|
#define OFF_C_FLD_FRMR 0x02 /* the offset within the FRMR I-field of the control field of the */
|
|
/* rejected command */
|
|
#define OFF_Nr_Ns_FLD_FRMR 0x03 /* the offset within the FRMR I-field of the Nr and Ns counts of */
|
|
/* the station reporting the frame reject */
|
|
#define OFF_STATUS_FLD_FRMR 0x04 /* the offset within the FRMR I-field of the FRMR status field */
|
|
#define FRMR_STAT_CTRL_FLD_INVALID 0x01 /* the control field of the received frame was invalid */
|
|
#define FRMR_STAT_I_FLD_PRESENT 0x02 /* the received frame was invalid as it contained an I-field */
|
|
/* which is not permitted with the command */
|
|
#define FRMR_STAT_I_FLD_TOO_LONG 0x04 /* the I-field in the received frame exceeded the configured */
|
|
/* maximum */
|
|
#define FRMR_STAT_RX_Nr_INVALID 0x08 /* the received Nr count is invalid */
|
|
#define FRMR_STAT_REPEAT_ORG_FRMR 0x80 /* a bit setting if the original FRMR must be retransmitted */
|
|
|
|
|
|
|
|
/* definitions for the SDLC state machine */
|
|
|
|
/* state when setting up to transmit a frame */
|
|
#define SENDING_I_FRAME 0x00 /* sending an I-frame */
|
|
#define SENDING_RR0 0x01 /* sending an RR (P/F bit reset) */
|
|
#define SENDING_RR1 0x02 /* sending an RR (P/F bit set) */
|
|
#define SENDING_RNR0 0x03 /* sending an RNR (P/F bit reset) */
|
|
#define SENDING_RNR1 0x04 /* sending an RNR (P/F bit set) */
|
|
#define SENDING_REJ0 0x05 /* sending an REJ (P/F bit reset) */
|
|
#define SENDING_REJ1 0x06 /* sending an REJ (P/F bit set) */
|
|
#define SENDING_SNRM 0x10 /* sending a SNRM */
|
|
#define SENDING_UA 0x11 /* sending a UA */
|
|
#define SENDING_DISC_RD 0x12 /* sending a DISC or RD */
|
|
#define SENDING_DM 0x13 /* sending a DM */
|
|
#define SENDING_SIM_RIM 0x14 /* sending a SIM or RIM */
|
|
#define SENDING_XID 0x15 /* sending an XID */
|
|
#define SENDING_TEST 0x16 /* sending a TEST frame */
|
|
#define SENDING_FRMR 0x17 /* sending a FRMR */
|
|
|
|
/* waiting to receive a frame */
|
|
#define AWAITING_INCOMMING_FRAME 0x20 /* awaiting an incomming frame */
|
|
#define WAITING_TO_POLL_SECONDARY 0x21 /* waiting to poll a secondary device */
|
|
|
|
/* states after transmitting a frame */
|
|
#define I_FRAME_TRANSMITTED 0x30 /* an I-frame has been transmitted */
|
|
#define RR1_TRANSMITTED 0x31 /* an RR (P/F bit set) has been transmitted */
|
|
#define RNR1_TRANSMITTED 0x32 /* an RNR (P/F bit set) has been transmitted */
|
|
#define REJ1_TRANSMITTED 0x33 /* an REJ (P/F bit set) has been transmitted */
|
|
#define SNRM_TRANSMITTED 0x34 /* a SNRM has been transmitted */
|
|
#define DISC_TRANSMITTED 0x35 /* a DISC frame has been transmitted */
|
|
#define SIM_TRANSMITTED 0x36 /* a SIM has been transmitted */
|
|
#define TEST_TRANSMITTED 0x37 /* a TEST frame has been transmitted */
|
|
#define XID_TRANSMITTED 0x38 /* an XID frame has been transmitted */
|
|
|
|
|
|
|
|
/* definitions for the 'status' variable in the STATION_INFORMATION structure */
|
|
#define STATION_UNINITIALIZED 0x0000 /* the station is uninitialized */
|
|
#define STATION_ADDED 0x0001 /* the station has been added */
|
|
#define STATION_ACTIVATED 0x0002 /* the station has been activated */
|
|
#define STATION_IN_NRM 0x0004 /* the station is in the NRM */
|
|
#define STATION_IN_FRMR_MODE 0x0008 /* the station is in the FRMR mode */
|
|
#define PRI_STATION_HAS_XID_DEFINED 0x0010 /* the primary station has an XID defined */
|
|
#define SEC_STATION_HAS_RX_XID_CMND 0x0010 /* the secondary station has received an XID command */
|
|
#define REMOTE_STATION_FLOW_CTRL_BLOCKED 0x0100 /* the remote station is flow control blocked */
|
|
#define LOCAL_STATION_FLOW_CTRL_BLOCKED 0x0200 /* the local station is flow control blocked */
|
|
#define LOCAL_STATION_SENDING_REJ 0x0400 /* the local station is issuing a REJ */
|
|
#define APP_CMND_SND_SIM_RIM_FRM 0x0800 /* the station must issue a SIM or RIM frame */
|
|
#define APP_CMND_SND_TEST_FRM 0x1000 /* the station must issue a TEST frame */
|
|
#define APP_CMND_SND_XID_FRM 0x2000 /* the station must issue an XID frame */
|
|
#define APP_CMND_SND_SNRM_FRMR_FRM 0x4000 /* the station must issue a SNRM or FRMR frame */
|
|
#define APP_CMND_SND_DISC_RD_FRM 0x8000 /* the station must issue a DISC or RD frame */
|
|
|
|
/* a test value to see if an asynchronous frame must be issued at this station */
|
|
#define ISSUE_APP_DRIVEN_FRAME (APP_CMND_SND_TEST_FRM | APP_CMND_SND_XID_FRM | APP_CMND_SND_SNRM_FRMR_FRM | APP_CMND_SND_DISC_RD_FRM | APP_CMND_SND_SIM_RIM_FRM)
|
|
|
|
|
|
|
|
/* definitions for the setting of the 'exception_cond_for_app' word */
|
|
#define STATIONS_CHANGED_STATE 0x0001
|
|
/* the station has changed state */
|
|
|
|
#define RESERVED_FOR_STATIONS_GOING_INACTIVE 0x0002
|
|
/* used when the station becomes inactive */
|
|
|
|
#define REMOTE_STATION_TIMEOUT_NRM 0x0010
|
|
/* a timeout occurred while the link was in the NRM */
|
|
|
|
#define RD_RX_FROM_SEC_WHILE_IN_NRM 0x0020
|
|
/* a RD frame has been received from the secondary station */
|
|
|
|
#define DM_RX_FROM_SEC_WHILE_IN_NRM 0x0040
|
|
/* a DM frame has been received from the secondary station */
|
|
|
|
#define RIM_FRM_RECEIVED_FROM_SECONDARY 0x0080
|
|
/* a RIM frame has been received from the secondary station */
|
|
|
|
#define XID_FRM_AVAILABLE_FOR_APPLICATION 0x0100
|
|
/* a XID frame is available for the application */
|
|
|
|
#define TEST_FRM_AVAILABLE_FOR_APPLICATION 0x0200
|
|
/* a TEST frame is available for the application */
|
|
|
|
#define FRMR_CONDITION_TO_REPORT 0x0400
|
|
/* there is a FRMR condition to report */
|
|
|
|
#define SNRM_RX_FROM_PRI_WHILE_IN_NRM 0x0800
|
|
/* a SNRM was received from the primary station
|
|
* while the link was in the NRM */
|
|
|
|
#define CHANGE_IN_MODEM_STATUS 0x8000
|
|
/* a change in modem status occurred */
|
|
|
|
|
|
|
|
/* definitions for TEST/trace receive error buffer usage */
|
|
#define MAX_LGTH_TEST_FRAME 265
|
|
/* the maximum length of a TEST frame */
|
|
|
|
#define TEST_TRC_RX_ERR_FRM_BFR_NOT_IN_USE 0x0000
|
|
/* the buffer is available for use */
|
|
|
|
#define TEST_TRC_RX_ERR_FRM_BFR_IN_USE 0x8000
|
|
/* the buffer is in use */
|
|
|
|
|
|
|
|
/* definitions for XID buffer usage */
|
|
#define SIZEOF_XID_I_FIELD_STORAGE_BFR 1000
|
|
/* the size of the XID data storage buffer */
|
|
|
|
#define MAX_NUMBER_XID_I_FIELDS_STORED 100
|
|
/* the maximum number of XID data fields stored at any one time */
|
|
|
|
#define MAX_LGTH_XID_FRAME 265
|
|
/* the maximum length of an XID frame */
|
|
|
|
#define XID_FRM_BFR_NOT_IN_USE 0x0000
|
|
/* the buffer is available for use */
|
|
|
|
#define XID_FRM_BFR_IN_USE 0x8000
|
|
/* the buffer is in use */
|
|
|
|
|
|
|
|
/* flags used by the 'send_Supervisory_or_I_frame()'
|
|
* procedure to see if an I-frame may be transmitted */
|
|
#define I_FRAME_TRANSMISSION_FORBIDDEN 0x00
|
|
/* I-frame transmission is forbidden */
|
|
|
|
#define I_FRAME_TRANSMISSION_PERMITTED 0x01
|
|
/* I-frame transmission is permitted */
|
|
|
|
|
|
|
|
/* bit mappings for the user interface byte on a
|
|
* per station basis */
|
|
#define STATION_IS_IN_NRM 0x01
|
|
/* the station is in the NRM */
|
|
|
|
#define STATION_HAS_I_FRM_FOR_APP 0x10
|
|
/* the station has incomming I-frames available */
|
|
|
|
#define TX_WINDOW_OPEN_FOR_STATION 0x20
|
|
/* the transmit window is open for this station */
|
|
|
|
#define SET_ALL_STATION_INTERFACE_BITS 0xFF
|
|
/* set all interface bits for this station */
|
|
|
|
|
|
|
|
/* bit settings for the interface byte
|
|
* ADDR_GLOBAL_TX_BFR_STATUS_BYTE */
|
|
|
|
#define NO_SPACE_AVAILABLE_IN_TX_BFR 0x00
|
|
/* no space is available in the global transmit buffer */
|
|
|
|
#define SPACE_AVAILABLE_IN_TX_BFR 0x01
|
|
/* space is currently available in the global transmit buffer */
|
|
|
|
|
|
|
|
/* definitions for line tracing bit settings for the
|
|
* 'line_trace_config' variable */
|
|
|
|
#define TRACE_ACTIVE 0x01 /* the trace is active */
|
|
#define TRACE_TIMER_ACTIVE 0x02 /* the trace timer is active */
|
|
#define TRACE_DELAY_MODE 0x04 /* enable the trace delay mode */
|
|
#define FLUSH_TRACE_STATISTICS 0x08 /* flush the trace statistics */
|
|
#define TRACE_I_FRMS 0x10 /* trace SDLC I-frames */
|
|
#define TRACE_SUPERVISORY_FRMS 0x20 /* trace Supervisory frames */
|
|
#define TRACE_UNNUM_FRMS 0x40 /* trace Unnumbered frames */
|
|
#define RETURN_TRC_SETUP 0x80 /* return the current line trace setup to the user */
|
|
|
|
/* the 'trc_deactivation_tmr' */
|
|
#define MAX_DEACTIVATION_TMR_VALUE 0x80 /* the maximum timer value */
|
|
#define HIGH_FOUR_BITS_OF_DEAC_TMR 0xF0 /* mask for preserving the high 4 bits of this timer */
|
|
|
|
/* trace types */
|
|
#define TRC_INCOMMING_FRAME 0x00 /* trace an incomming frame */
|
|
#define TRC_OUTGOING_FRAME 0x01 /* trace an outgoing frame */
|
|
#define TRC_FRAME_ERROR 0x02 /* trace a frame error */
|
|
|
|
/* trace error types */
|
|
#define NO_TRC_ERR 0x00 /* no trace error has occured */
|
|
#define TRC_RX_ABORT_ERR 0x12 /* trace a received abort frame */
|
|
#define TRC_RX_CRC_ERR 0x22 /* trace a received frame with a CRC error */
|
|
#define TRC_RX_OVRN_ERR 0x32 /* trace a received frame with a receiver overrun error */
|
|
#define TRC_RX_EX_FRM_LGTH 0x42 /* trace a received frame of excessive length */
|
|
#define TRC_TX_ABORT_TX_INT 0x72 /* trace an outgoing frame aborted due to a missed transmit */
|
|
/* interrupt */
|
|
#define TRC_TX_ABORT_UND_INT 0x82
|
|
/* trace an outgoing frame aborted due to
|
|
* a missed transmit underrun interrupt */
|
|
|
|
/* general parameters for line tracing */
|
|
#define LGTH_LNE_TRC_STR_HDR 14
|
|
/* the header length of the structure used for line tracing */
|
|
|
|
#define DUMMY_CRC_TX_TRC 0xFFFF
|
|
/* the CRC used for outgoing frames */
|
|
|
|
#define RX_STATUS_BYTE_TRACE_ACTIVE 0x80
|
|
/* bit setting of the 'rx_status_byte' to indicate
|
|
* that the trace is active */
|
|
|
|
#define LGTH_TRACE_STATISTIC_DATA 0x08
|
|
/* the length of the trace statistic data */
|
|
|
|
/* bit settings for the interface byte
|
|
* ADDR_TRACE_DATA_AVAILABLE_BYTE */
|
|
|
|
#define NO_TRACE_DATA_CURRENLY_AVAILABLE 0x00
|
|
/* trace data is available */
|
|
|
|
#define TRACE_DATA_CURRENLY_AVAILABLE 0x01
|
|
/* no trace data is available */
|
|
|
|
|
|
/* the change in station status - used when
|
|
* checking to see if we must report this status
|
|
* change to the application */
|
|
|
|
#define STATION_ENTERING_NRM 0x01
|
|
/* the station is entering NRM */
|
|
|
|
#define STATION_ENTERING_NDM 0x02
|
|
/* the station is entering NDM */
|
|
|
|
|
|
|
|
/* general constants */
|
|
#define MAX_SDLC_STATIONS_SUPPORTED 255
|
|
/* the maximum number of SDLC addresses
|
|
* supported (254 "real" addesses plus an
|
|
* all-poll address) */
|
|
|
|
#define HIGHEST_SDLC_ADDRESS 0xFE
|
|
/* the highest valid SDLC station address */
|
|
|
|
#define SDLC_WINDOW 0x07
|
|
/* the SDLC window */
|
|
|
|
#define HIGHEST_TIME_CONSTANT_VALUE 256
|
|
/* the highest time constant value permitted
|
|
* when setting the baud rate */
|
|
|
|
#define NUMBER_BITS_IN_FLAG_CHAR 8
|
|
/* the number of bits in the HDLC flag character */
|
|
|
|
#define NUMBER_BITS_IN_FIVE_CHARS 40
|
|
/* the number of bits in five characters */
|
|
|
|
#define PROCESS_NEXT_STATION 0x80
|
|
/* an indication that the primary station must
|
|
* process the next station in the queue */
|
|
|
|
#define INTERNAL_I_FRM_BFR_FLUSH 0x80
|
|
/* a dummy command used for an internal I-frame buffer flush */
|
|
|
|
#define DEFAULT_APP_IRQ_RESPONSE_TIMEOUT 250
|
|
/* the default application IRQ timeout value */
|
|
|
|
#define RTS_LOW 0x00 /* the initial state of RTS */
|
|
#define NO 0x00 /* logical 'no' */
|
|
#define YES 0x01 /* logical 'yes' */
|
|
#define RESET 0x00 /* flag in a reset state */
|
|
#define SET 0x01 /* flag in a set state */
|
|
#define BIT_1_SET 0x02 /* bit one set mask */
|
|
#define ZERO 0x00 /* zero count */
|
|
|
|
#define HIGH_BIT_SET_IN_UNSIGNED_CHAR 0x80
|
|
/* test for the high bit being set in an
|
|
* unsigned character */
|
|
|
|
/* general byte counts */
|
|
|
|
#define ONE_BYTE 0x01
|
|
#define TWO_BYTES 0x02
|
|
#define THREE_BYTES 0x03
|
|
#define FOUR_BYTES 0x04
|
|
#define TWENTY_BYTES 20
|
|
#define FOUR_BITS 4
|
|
#define EIGHT_BITS 8
|
|
|
|
|
|
|
|
/* a general head/tail buffer list used for linked list pragmatics */
|
|
typedef struct {
|
|
char head;
|
|
char tail;
|
|
} BFR_LIST;
|
|
|
|
|
|
|
|
/* the I-frame receive structure */
|
|
typedef struct {
|
|
char *ptr_Rx_I_frm; /* a pointer to the I-frame */
|
|
unsigned lgth_Rx_I_frm; /* the length of the I-frame */
|
|
char PF_bit; /* the P/F bit as received */
|
|
} RX_I_FRAME_STRUCTURE;
|
|
|
|
|
|
|
|
/* the I-frame transmit structure */
|
|
typedef struct {
|
|
char *ptr_Tx_I_frm; /* a pointer to the I-frame */
|
|
unsigned lgth_Tx_I_frm; /* the length of the I-frame */
|
|
char PF_bit; /* the P/F bit to be transmitted */
|
|
} TX_I_FRAME_STRUCTURE;
|
|
|
|
|
|
|
|
/* SDLC station statistics */
|
|
/* Note - a number of the statistics only use
|
|
* four bits so as to save on data space.
|
|
* These statistics start at 0 and increment to a
|
|
* maximum value of 15, before rotating over
|
|
* the top to 1. */
|
|
|
|
typedef struct {
|
|
unsigned no_I_frms_Rx_and_stored; /* the number of I-frames received and stored */
|
|
char I_frms_Rx_seq_err_no_I_fld; /* low: no I-frames Rx out of sequence, high: no I-frames Rx */
|
|
/* with no I-field */
|
|
char frms_Rx_bad_state_reserved; /* low: no frames Rx in incorrect state, high: reserved */
|
|
unsigned no_I_frms_Tx_and_acknowledged; /* the number of I-frames transmitted and acknowledged */
|
|
char no_I_frms_retransmitted; /* the number of I-frames re-transmitted */
|
|
char RR_statistics; /* low: no RR frames Tx, high: no RR frames Rx */
|
|
char RNR_statistics; /* low: no RNR frames Tx, high: no RNR frames Rx */
|
|
char REJ_statistics; /* low: no REJ frames Tx, high: no REJ frames Rx */
|
|
char TEST_statistics; /* low: no TEST frames Tx, high: no TEST frames Rx */
|
|
char XID_statistics; /* low: no XID frames Tx, high: no XID frames Rx */
|
|
char DISC_RD_statistics; /* primary - low: no DISC frames Tx, high: no RD frames Rx */
|
|
/* secondary - low: no RD frames Tx, high: no DISC frames Rx */
|
|
char SNRM_UA_statistics; /* primary - low: no SNRM frames Tx, high: no UA frames Rx */
|
|
/* secondary - low: no UA frames Tx, high: no SNRM frames Rx */
|
|
char DM_FRMR_statistics; /* primary - low: no DM frames Rx, high: no FRMR frames Rx */
|
|
/* secondary - low: no DM frames Tx, high: no FRMR frames Tx */
|
|
char SIM_RIM_statistics; /* primary - low: no SIM frames Tx, high: no RIM frames Rx */
|
|
/* secondary - low: no RIM frames Tx, high: no SIM frames Rx */
|
|
char timeout_SNRM_DISC_statistic; /* primary - low: no timeouts on SNRM frames Tx, high: no */
|
|
/* timeouts on DISC frames Tx */
|
|
char timeout_SUP_I_SIM_statistic; /* primary - low: no timeouts on SUP or I frames Tx, high: no */
|
|
/* timeouts on SIM frames Tx */
|
|
/* secondary - low: no timeouts while in NRM */
|
|
char timeout_TEST_XID_statistic; /* primary - low: no timeouts on TEST frames Tx, high: no */
|
|
/* timeouts on XID frames Tx */
|
|
} STATION_STATISTICS;
|
|
|
|
|
|
|
|
/* Secondary SDLC device parameters for keeping track
|
|
* of the status, sequence numbers etc. of the
|
|
* SDLC devices */
|
|
typedef struct {
|
|
|
|
/* general variables */
|
|
unsigned status; /* the current station status */
|
|
char internal_SDLC_state; /* the state of the SDLC device (used for the state machine) */
|
|
unsigned state_timer; /* the station state timer */
|
|
unsigned poll_timer_interval; /* primary - the number of milliseconds between polls */
|
|
/* secondary - the maximum permitted time between polls while */
|
|
/* in the NRM before a secondary station enters the NDM */
|
|
char no_consec_secondary_timeouts; /* the number of consecutive secondary station timeouts */
|
|
/* transmit variables */
|
|
char no_I_frms_queued_for_Tx; /* the number of I-frames queued for transmission */
|
|
char no_Tx_I_frms_awaiting_acknowledgement; /* the number of transmitted I-frames awaiting acknowledgement */
|
|
char Ns_variables; /* low nibble - the number of the last I-frame transmitted */
|
|
/* high nibble - the number of the last I-frame acknowledged */
|
|
char I_frm_Tx_ack_status; /* the I-frame transmit/acknowledgment status */
|
|
/* receive variables */
|
|
char Nr_variables; /* low nibble - the number of the next I-frame we expect to */
|
|
/* receive */
|
|
/* high nibble - the number of I-frames currently available for */
|
|
/* reception by the application statistics */
|
|
STATION_STATISTICS statistics; /* the station statistics */
|
|
|
|
} STATION_INFORMATION;
|
|
|
|
|
|
|
|
/* the structure for handling primary station XID data fields */
|
|
typedef struct {
|
|
char SDLC_address; /* the SDLC address associated with this XID field */
|
|
char length_XID_I_field; /* the length of the XID data field */
|
|
} XID_INFORMATION_STRUCT;
|
|
|
|
|
|
|
|
|
|
/* definitions for primary receive buffering */
|
|
/* the primary receive status element structure */
|
|
typedef struct {
|
|
char opp_flag; /* the 'opp_flag' */
|
|
char *ptr_base_nxt_Rx_frame; /* a pointer to the physical base address of the next frame */
|
|
char reserved; /* reserved */
|
|
} PRI_RX_STAT_EL_STRUCT;
|
|
|
|
#define MAX_NO_PRI_RX_BFR_STATUS_ELS 32 /* the maximum number of primary receive status elements */
|
|
#define MIN_NO_RECEIVE_BFRS 4 /* the minimum number of receive buffers */
|
|
#define MAX_NO_RECEIVE_BFRS 32 /* the maximum number of receive buffers */
|
|
#define SIZEOF_PRI_RX_STATUS_ELEMENT 0x04 /* the size of a primary receive status element */
|
|
#define P0_MAX_SIZE_PRI_RX_BFR 0xF000 /* Port 0 - for 128K board, the maximum size DMA Rx buffer goes */
|
|
/* from 0x10000 to 0x1EFFF (if no transmit buffering is used) */
|
|
#define P0_SIZE_PRI_RX_BFR_256K_RAM 0xF000 /* Port 0 - for 256K board, the DMA Rx buffer always goes from */
|
|
/* 0x10000 to 0x1EFFF, irrespective of the size of the Tx buffer */
|
|
#define P0_RX_DMA_AREA_BASE_ADDR_BYTE 0x00 /* Port 0 - the high byte of the base address of the DMA Rx */
|
|
/* buffer area */
|
|
#define P0_RX_DMA_AREA_BASE_ADDR 0x10000 /* Port 0 - the base address of the DMA Rx buffer area */
|
|
#define MAX_CONSEC_RX_BFRS_HANDLED 0x04 /* the maximum consecutive number of Rx buffers handled before */
|
|
/* continuing with the main 'C' loop */
|
|
|
|
/* the setting of the 'opp_flag' in the receive status element */
|
|
#define PRI_BFR_QUEUED_BUT_NOT_FREED 0x08 /* a flag indicating that the primary receive buffer has been */
|
|
/* queued for application processing, but not yet freed by the */
|
|
/* application */
|
|
#define PRI_RX_BFR_AVAIL 0x80 /* bit to be set in the 'opp_flag' of the primary Rx status */
|
|
/* element to indicate that this element is available for */
|
|
/* processing by the application */
|
|
|
|
/* Z80 op codes for resetting a specified bit in the L register */
|
|
#define OP_CODE_RES_4_L 0xA5 /* reset bit 4 */
|
|
#define OP_CODE_RES_5_L 0xAD /* reset bit 5 */
|
|
#define OP_CODE_RES_6_L 0xB5 /* reset bit 6 */
|
|
#define OP_CODE_RES_7_L 0xBD /* reset bit 7 */
|
|
|
|
/* definitions for the 'P0_Tx_Rx_cfg' */
|
|
#define TX_RX_CFG_IDLE_MARK 0x01 /* we are configured to idle mark */
|
|
#define TX_RX_CFG_SW_CTS_RTS 0x02 /* we are configured for switched CTS/RTS */
|
|
|
|
|
|
/* definitions for the 'P0_Tx_status_byte' */
|
|
#define TX_STAT_DROP_RTS_AFTR_TX 0x01 /* we must drop RTS after frame transmission */
|
|
#define TX_STAT_IDLE_FLGS_AFTR_TX 0x02 /* we must idle flags after frame transmission */
|
|
#define TX_STAT_RTS_HI 0x08 /* RTS is currently set high */
|
|
#define TX_STAT_WT_CTS_HI 0x10 /* we are waiting for CTS to be set high */
|
|
#define TX_STAT_CURR_IDLE_FLAGS 0x20 /* we are currently idling flags */
|
|
#define TX_STAT_OPEN_FLG_TMR_ACTIVE 0x40 /* we have started a timer for transmitting an opening flag */
|
|
/* sequence */
|
|
#define TX_STAT_CLOSE_FLG_TMR_ACTIVE 0x80 /* we have started a timer for transmitting a closing flag */
|
|
/* sequence */
|
|
|
|
|
|
/* definitions for the 'P0_ESCC_WR10_cfg' */
|
|
#define ESCC_WR10_NRZ_IDLE_FLAGS 0x80 /* NRZ, idle flags */
|
|
#define ESCC_WR10_ENABLE_NRZI 0x20 /* enable NRZI */
|
|
#define ESCC_WR10_ENABLE_IDLE_MARK 0x08 /* enable 'idle mark' */
|
|
|
|
|
|
/* settings for the 'error_flag' */
|
|
#define RX_FRM_ABORT 0x01 /* the incoming frame was aborted */
|
|
#define RX_FRM_CRC_ERROR 0x02 /* the incoming frame has a CRC error */
|
|
#define RX_FRM_OVERRUN_ERROR 0x04 /* the incoming frame has an overrun error */
|
|
|
|
|
|
#define ONLY_INCL_ABORT_BIT_IN_RR0 0x80 /* only include the break/abort bit in the read RR0 byte */
|
|
|
|
|
|
/* definitions for the 'P0_baud_cal_status' variable */
|
|
#define BAUD_CAL_BUSY 0x01 /* busy with baud calibration */
|
|
#define BAUD_CAL_COMPLETED 0x02 /* baud calibration has been completed */
|
|
#define BAUD_CAL_COMPUTE_BAUD 0x04 /* the baud rate must be computed */
|
|
#define BAUD_CAL_FAIL_NO_CLK 0x10 /* baud calibration has failed - no Tx clock */
|
|
#define BAUD_CAL_FAIL_BAUD_HI 0x20 /* baud calibration has failed - Tx clock speed too high */
|
|
#define BAUD_CAL_SUCCESSFUL 0x80 /* baud calibration was successful */
|
|
|
|
|
|
|
|
/* constants for indicating the modem status */
|
|
#define SHOW_CHANGE_IN_DCD_OCCURRED 0x04 /* a change in DCD occured */
|
|
#define SHOW_CHANGE_IN_CTS_OCCURRED 0x10 /* a change in CTS occured */
|
|
#define SHOW_CTS_TIMEOUT_FAILURE_OCCURRED 0x80 /* a CTS timeout occurred */
|
|
|
|
|
|
/* Special UDP drivers management commands */
|
|
#define CPIPE_ENABLE_TRACING 0x50
|
|
#define CPIPE_DISABLE_TRACING 0x51
|
|
#define CPIPE_GET_TRACE_INFO 0x52
|
|
#define CPIPE_GET_IBA_DATA 0x53
|
|
#define CPIPE_FT1_READ_STATUS 0x54
|
|
#define CPIPE_DRIVER_STAT_IFSEND 0x55
|
|
#define CPIPE_DRIVER_STAT_INTR 0x56
|
|
#define CPIPE_DRIVER_STAT_GEN 0x57
|
|
#define CPIPE_FLUSH_DRIVER_STATS 0x58
|
|
#define CPIPE_ROUTER_UP_TIME 0x59
|
|
#define CPIPE_MPPP_TRACE_ENABLE 0x60
|
|
#define CPIPE_MPPP_TRACE_DISABLE 0x61
|
|
#define CPIPE_TE1_56K_STAT 0x62 /* TE1_56K */
|
|
#define CPIPE_GET_MEDIA_TYPE 0x63 /* TE1_56K */
|
|
#define CPIPE_FLUSH_TE1_PMON 0x64 /* TE1 */
|
|
#define CPIPE_READ_REGISTER 0x65 /* TE1_56K */
|
|
#define CPIPE_TE1_CFG 0x66 /* TE1 */
|
|
|
|
/* Driver specific commands for API */
|
|
#define CHDLC_READ_TRACE_DATA 0xE4 /* read trace data */
|
|
#define TRACE_ALL 0x00
|
|
#define TRACE_PROT 0x01
|
|
#define TRACE_DATA 0x02
|
|
|
|
#define UDPMGMT_SIGNATURE "STPIPEAB"
|
|
#define UDPMGMT_UDP_PROTOCOL 0x11
|
|
|
|
|
|
|
|
typedef struct SDLC_CONFIGURATION {
|
|
|
|
/* configuration variables */
|
|
/* NOTE - these variables must be kept in this
|
|
* order and so must be initialized */
|
|
|
|
/* the station configuration (primary or secondary) */
|
|
unsigned char station_configuration;
|
|
/* the baud rate to be generated */
|
|
unsigned long baud_rate;
|
|
/* the maximum permitted Information field length supported */
|
|
unsigned short max_I_field_length;
|
|
/* miscellaneous operational configuration bits */
|
|
unsigned short general_operational_config_bits;
|
|
/* miscellaneous protocol configuration bits */
|
|
unsigned short protocol_config_bits;
|
|
/* bits to specify which exception conditions are reported to the application */
|
|
unsigned short exception_condition_reporting_config;
|
|
/* modem operation configuration bits */
|
|
unsigned short modem_config_bits;
|
|
/* the statistics format byte */
|
|
unsigned short statistics_format;
|
|
/* the slow poll interval for a primary station (milliseconds) */
|
|
unsigned short pri_station_slow_poll_interval;
|
|
/* the permitted secondary station_response timeout (milliseconds) */
|
|
unsigned short permitted_sec_station_response_TO;
|
|
/* the number of consecutive secondary timeouts while */
|
|
/* in the NRM before a SNRM is issued */
|
|
unsigned short no_consec_sec_TOs_in_NRM_before_SNRM_issued;
|
|
/* the maximum Information field length permitted in an XID */
|
|
/* frame sent by a primary station */
|
|
unsigned short max_lgth_I_fld_pri_XID_frame;
|
|
/* the additional bit delay before transmitting the opening */
|
|
/* character in a frame */
|
|
unsigned short opening_flag_bit_delay_count;
|
|
/* the additional bit delay before dropping RTS */
|
|
unsigned short RTS_bit_delay_count;
|
|
/* the permitted CTS timeout for switched CTS/RTS configurations */
|
|
/* (in 1000ths/second) */
|
|
unsigned short CTS_timeout_1000ths_sec;
|
|
/* the adapter type and the CPU speed */
|
|
unsigned char SDLA_configuration;
|
|
|
|
}SDLC_CONFIGURATION_STRUCT;
|
|
|
|
typedef struct {
|
|
unsigned char CHDLC_interrupt_triggers; /* CHDLC interrupt trigger configuration */
|
|
unsigned char IRQ; /* IRQ to be used */
|
|
unsigned short interrupt_timer; /* interrupt timer */
|
|
unsigned short misc_interrupt_bits; /* miscellaneous bits */
|
|
}SDLC_INT_TRIGGERS_STRUCT;
|
|
|
|
/* the interrupt information structure */
|
|
typedef struct {
|
|
unsigned char interrupt_type; /* type of interrupt triggered */
|
|
unsigned char interrupt_permission; /* interrupt permission mask */
|
|
unsigned char int_info_reserved[14]; /* reserved */
|
|
} INTERRUPT_INFORMATION_STRUCT;
|
|
|
|
/* the communications error statistics structure */
|
|
typedef struct {
|
|
char Rx_overrun_err_cnt;
|
|
char CRC_err_cnt;
|
|
char Rx_abort_cnt;
|
|
char Rx_frm_lgth_err_cnt;
|
|
char Tx_abort_cnt;
|
|
char Tx_underrun_cnt;
|
|
char msd_Tx_und_int_cnt;
|
|
char no_CTS_resp_to_RTS_cnt;
|
|
char DCD_state_change_cnt;
|
|
char CTS_state_change_cnt;
|
|
} COMMS_ERROR_STATS_STRUCT;
|
|
|
|
|
|
typedef struct {
|
|
|
|
unsigned long total_no_frms_Rx;
|
|
unsigned long total_no_I_frms_Rx_and_stored;
|
|
unsigned long total_no_frms_Tx;
|
|
unsigned long total_no_I_frms_Tx_and_acknowledged;
|
|
unsigned no_frames_Rx_address_invalid;
|
|
unsigned no_frames_Rx_on_unconfigured_stations;
|
|
unsigned no_short_frames_Rx;
|
|
unsigned no_unsupported_frames_Rx;
|
|
unsigned no_frms_Rx_incompat_station_config;
|
|
unsigned frm_Rx_in_incorrect_state;
|
|
unsigned no_Rx_XID_frms_disc_bfr_full;
|
|
unsigned no_Rx_TEST_frms_disc_bfr_full;
|
|
unsigned no_Rx_FRMR_frms_disc_bfr_full;
|
|
unsigned Rx_resp_broadcast_XID_added_station;
|
|
unsigned Rx_frm_discards_int_lvl;
|
|
unsigned no_Tx_bridge_discard_count;
|
|
unsigned no_IRQ_timeouts;
|
|
|
|
}SDLC_OPERATIONAL_STATS_STRUCT;
|
|
|
|
|
|
typedef struct {
|
|
unsigned char station;
|
|
unsigned char state;
|
|
|
|
}SDLC_STATE_STRUCT;
|
|
|
|
/* the line trace status element configuration structure */
|
|
typedef struct {
|
|
unsigned short number_trace_status_elements ; /* number of line trace elements */
|
|
unsigned long base_addr_trace_status_elements ; /* base address of the trace element list */
|
|
unsigned long next_trace_element_to_use ; /* pointer to the next trace element to be used */
|
|
unsigned long base_addr_trace_buffer ; /* base address of the trace data buffer */
|
|
unsigned long end_addr_trace_buffer ; /* end address of the trace data buffer */
|
|
} TRACE_STATUS_EL_CFG_STRUCT;
|
|
|
|
/* the line trace status element structure */
|
|
typedef struct {
|
|
unsigned char opp_flag ; /* opp flag */
|
|
unsigned short trace_length ; /* trace length */
|
|
unsigned char trace_type ; /* trace type */
|
|
unsigned short trace_time_stamp ; /* time stamp */
|
|
unsigned short trace_reserved_1 ; /* reserved for later use */
|
|
unsigned long trace_reserved_2 ; /* reserved for later use */
|
|
unsigned long ptr_data_bfr ; /* ptr to the trace data buffer */
|
|
} TRACE_STATUS_ELEMENT_STRUCT;
|
|
|
|
|
|
#pragma pack()
|
|
|
|
#define SIOC_WANPIPE_EXEC_CMD SIOC_WANPIPE_DEVPRIVATE
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
typedef struct wp_sdlc_reg {
|
|
int (*sdlc_stack_rx) (struct sk_buff *skb);
|
|
}wp_sdlc_reg_t;
|
|
|
|
extern int wanpipe_sdlc_unregister(netdevice_t *dev);
|
|
extern int wanpipe_sdlc_register(struct net_device *dev, void *wp_sdlc_reg);
|
|
|
|
/*__KERNEL__*/
|
|
#endif
|
|
|
|
#endif
|