summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/digi/pcimac/mtl.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/ndis/digi/pcimac/mtl.h
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/ntos/ndis/digi/pcimac/mtl.h')
-rw-r--r--private/ntos/ndis/digi/pcimac/mtl.h306
1 files changed, 306 insertions, 0 deletions
diff --git a/private/ntos/ndis/digi/pcimac/mtl.h b/private/ntos/ndis/digi/pcimac/mtl.h
new file mode 100644
index 000000000..06d71919c
--- /dev/null
+++ b/private/ntos/ndis/digi/pcimac/mtl.h
@@ -0,0 +1,306 @@
+/*
+ * MTL.H - include file for all MTL modules
+ */
+
+#ifndef _MTL_
+#define _MTL_
+
+/* some constants values */
+// The value for mtl_max_chan has to be <= the value for
+// cm_max_chan in cm_pub.h
+
+//
+// I set the MTU to a large enough value to allow multi-link,
+// bridging and any other future expansion to occur.
+//
+#define MTL_MAC_MTU 1600 /* mac size mtu, fixed */
+
+#define MTL_IDD_MTU 260 /* idd size mtu, default value */
+
+//
+// a guess at how much receive space we will need this is 1514 * 16 wich seems
+// like alot to me
+//
+#define MTL_RX_BUFS 16 /* # of recieve buffers, must be 2^n */
+
+//
+// max local tx descriptor buffers based on the maximum number of
+// wanpackets we told the wrapper it could send (mydefs.h MAX_WANPACKET_XMITS)
+//
+#define MTL_TX_BUFS 8 /* # of transmit buffers */
+
+//
+// max fragments per packet
+//
+#define MTL_MAX_FRAG 16
+
+//
+// index into buffer where destination ethernet address starts
+//
+#define DST_ADDR_INDEX 0
+
+//
+// index into buffer where source ethernet address starts
+//
+#define SRC_ADDR_INDEX 6
+
+//
+// index into buffer where length of buffer starts
+//
+#define PKT_LEN_INDEX 12
+
+/* mtl error codes */
+#define MTL_E_SUCC 0
+#define MTL_E_NOMEM 1
+#define MTL_E_NOTIMPL 2
+#define MTL_E_NOROOM 3
+#define MTL_E_NOSUCH 4
+
+//
+// local mtl defs
+//
+/* packet receive/transmit assembly/disassembly descriptor */
+typedef struct
+{
+ LIST_ENTRY link;
+ ULONG Queued;
+ ULONG QueueOverRun;
+ UCHAR seq; /* recorded sequence number */
+ UCHAR tot; /* total # of fragments (0 free) */
+ UCHAR num; /* # of fragments received/transmitted */
+ ULONG ttl; /* time to live, in seconds */
+ USHORT len; /* accumulated packet length */
+ struct _MTL *mtl; /* back pointer to mtl */
+ USHORT State; /* State of current large frame */
+ UCHAR* DataPtr; /* current data index into buffer */
+ USHORT MaxRxLength; /* max frame receive length */
+ ULONG MissCount; /* rx miss count */
+ PUCHAR buf;
+} MTL_AS;
+
+typedef struct
+{
+ UCHAR NextFree;
+ NDIS_SPIN_LOCK lock; /* access spinlock */
+ ULONG DKFReceiveError1;
+ ULONG DKFReceiveError2;
+ ULONG DKFReceiveError3;
+ ULONG DKFReceiveError4;
+ ULONG DKFReceiveError5;
+ ULONG PPPReceiveError1;
+ ULONG PPPReceiveError2;
+ ULONG PPPReceiveError3;
+ ULONG PPPReceiveError4;
+ ULONG PPPReceiveError5;
+ ULONG IndicateReceiveError1;
+ ULONG IndicateReceiveError2;
+ ULONG IndicateReceiveError3;
+ ULONG TimeOutReceiveError1;
+ MTL_AS as_tbl[MTL_RX_BUFS];
+ PUCHAR Data;
+}MTL_RX_TBL;
+
+typedef struct
+{
+ LIST_ENTRY head;
+ NDIS_SPIN_LOCK lock;
+} MTL_AS_FIFO;
+
+//
+// Fifo for storing wan packets before fragment processing
+//
+typedef struct
+{
+ LIST_ENTRY head; /* head pointer, head==NULL -> empty */
+ NDIS_SPIN_LOCK lock; /* access lock */
+ ULONG Count;
+ ULONG Max;
+} MTL_WANPACKET_FIFO;
+
+/* idd packet header */
+typedef struct
+{
+ UCHAR sig_tot; /* signature + total fragments */
+ UCHAR seq; /* packet sequence number */
+ USHORT ofs; /* offset of fragment data into packet */
+} MTL_HDR;
+
+//
+// this structure is used for data this is fragmented in the DKF format
+//
+typedef struct
+{
+ IDD_FRAG IddFrag[2]; /* two fragments (hdr+data) required */
+ MTL_HDR MtlHeader; /* header storage */
+} DKF_FRAG;
+
+/* trasmit fragement descriptor */
+//
+// The DKF_FRAG member must be kept at the begining of this structure
+// !!!!!!!!!!!!!! mtl_tx.c relies on this !!!!!!!!!!!!!!!
+//
+typedef struct
+{
+ DKF_FRAG DkfFrag; /* frament descriptor for idd poll_tx */
+ IDD_MSG frag_msg; /* fragments waiting to be sent vector */
+ VOID *frag_idd; /* idd accepting fragments */
+ USHORT frag_bchan; /* destination bchannels */
+ VOID *frag_arg; /* argument to completion function */
+ ULONG FragSent; /* flag to indicate if this frag has been xmitted */
+} MTL_TX_FRAG;
+
+/* trasmit packet descriptor */
+typedef struct
+{
+ LIST_ENTRY TxPacketQueue;
+ NDIS_SPIN_LOCK lock;
+ ULONG InUse; /* this entry is in use */
+ USHORT NumberOfFrags; /* # of fragments in frag_tbl */
+ USHORT NumberOfFragsSent; /* # of fragments already sent */
+ USHORT FragReferenceCount; /* refrence count */
+ UCHAR *frag_buf; /* pointer to real data buffer */
+ NDIS_WAN_PACKET *WanPacket; /* related user packet */
+ struct _MTL *mtl; /* back pointer to mtl */
+ MTL_TX_FRAG frag_tbl[MTL_MAX_FRAG]; /* fragment table (assembled) */
+} MTL_TX_PKT;
+
+/* trasmit packet control table */
+typedef struct
+{
+ LIST_ENTRY head;
+ NDIS_SPIN_LOCK lock; /* access lock */
+ ULONG seq; /* packet sequence number (for next) */
+ ULONG NextFree; /* next available packet */
+ MTL_TX_PKT TxPacketTbl[MTL_TX_BUFS]; /* packet table */
+} MTL_TX_TBL;
+
+/* a channel descriptor */
+typedef struct
+{
+ VOID *idd; /* related idd object */
+ USHORT bchan; /* related channel within idd, b1=0, b2=1 */
+ ULONG speed; /* channel speed in bps */
+ struct _MTL *mtl; /* mtl back pointer */
+} MTL_CHAN;
+
+/* channel table */
+typedef struct
+{
+ MTL_CHAN tbl[MAX_CHAN_PER_CONN]; /* table of channels */
+ USHORT num; /* # of entries used */
+ NDIS_SPIN_LOCK lock; /* access spinlock */
+} MTL_CHAN_TBL;
+
+/* an MTL object */
+typedef struct _MTL
+{
+ ADAPTER *Adapter; /* adapter that owns this mtl */
+
+ NDIS_HANDLE LinkHandle; /* handle from wrapper for this link */
+
+ //statistics
+ ULONG FramesXmitted;
+ ULONG FramesReceived;
+ ULONG BytesXmitted;
+ ULONG BytesReceived;
+
+ NDIS_SPIN_LOCK lock; /* access lock */
+
+ VOID (*rx_handler)(); /* mgr receiver handler routine */
+ VOID *rx_handler_arg; /* ... handler argument */
+
+ VOID (*tx_handler)(); /* mgr transmitter handler routine */
+ VOID *tx_handler_arg; /* ... handler argument */
+
+ USHORT idd_mtu; /* idd max frame size */
+ BOOL is_conn; /* is connected now? */
+
+ ULONG IddTxFrameType; /* 0/1 - PPP/DKF */
+ ULONG IddRxFrameType; /* 0/1 - PPP/DKF */
+
+ MTL_CHAN_TBL chan_tbl; /* the channel table */
+
+ //
+ // Receive table
+ //
+ MTL_RX_TBL rx_tbl;
+
+ //
+ // Receive Completion Fifo
+ //
+ MTL_AS_FIFO RxIndicationFifo;
+
+ //
+ // fifo of wan packets to be transmitted
+ //
+ MTL_WANPACKET_FIFO WanPacketFifo;
+
+ //
+ // transmit table
+ //
+ MTL_TX_TBL tx_tbl;
+
+ //
+ // flag to show
+ //
+ BOOL RecvCompleteScheduled;
+
+ //
+ // backpointer to connection object
+ //
+ VOID *cm;
+
+ SEMA tx_sema; /* transmit processing sema */
+
+ //
+ // wan wrapper information
+ //
+ ULONG MaxSendFrameSize;
+ ULONG MaxRecvFrameSize;
+ ULONG PreamblePadding;
+ ULONG PostamblePadding;
+ ULONG SendFramingBits;
+ ULONG RecvFramingBits;
+ ULONG SendCompressionBits;
+ ULONG RecvCompressionBits;
+
+} MTL;
+
+//
+// public mtl defs
+//
+/* MTL object operations */
+INT mtl_create(VOID** mtl_1, NDIS_HANDLE AdapterHandle);
+INT mtl_destroy(VOID* mtl_1);
+INT mtl_set_rx_handler(VOID* mtl_1, VOID (*handler)(), VOID* handler_arg);
+INT mtl_set_tx_handler(VOID* mtl_1, VOID (*handler)(), VOID* handler_arg);
+INT mtl_set_idd_mtu(VOID* mtl_1, USHORT idd_mtu);
+INT mtl_set_conn_state(VOID* mtl_1, USHORT NumberOfChannels, BOOL is_conn);
+INT mtl_get_conn_speed(VOID* mtl_1, ULONG *speed);
+INT mtl_get_mac_mtu(VOID* mtl_1, ULONG* mtu);
+VOID mtl_tx_packet(VOID* mtl_1, PNDIS_WAN_PACKET pkt);
+INT mtl_add_chan(VOID* mtl_1, VOID* idd, USHORT chan, ULONG speed, ULONG ConnectionType);
+INT mtl_del_chan(VOID* mtl_1, VOID* idd, USHORT chan);
+INT GetStatistics (VOID*, VOID*);
+INT ClearStatistics (VOID*);
+INT MtlSetFramingType (VOID*, ULONG);
+
+
+/* prototypes for internal functions */
+VOID mtl__rx_bchan_handler(MTL_CHAN* chan, USHORT bchan, ULONG RxFrameType, IDD_XMSG* xmsg);
+VOID IndicateRxToWrapper(MTL*);
+VOID mtl__tx_cmpl_handler(MTL_TX_PKT *pkt, USHORT bchan, IDD_MSG* msg);
+VOID mtl__rx_tick(MTL* mtl);
+VOID mtl__tx_tick(MTL* mtl);
+VOID MtlPollFunction(VOID* a1, ADAPTER *Adapter, VOID* a3, VOID* a4);
+VOID MtlRecvCompleteFunction(ADAPTER *Adapter);
+BOOLEAN IsRxIndicationFifoEmpty(MTL*);
+MTL_AS* GetAssemblyFromRxIndicationFifo(MTL*);
+VOID QueueDescriptorForRxIndication(MTL*, MTL_AS*);
+VOID MtlSendCompleteFunction(ADAPTER *Adapter);
+VOID IndicateTxCompletionToWrapper(MTL*);
+VOID MtlFlushWanPacketTxQueue(MTL*);
+VOID mtl__tx_packet(MTL*, NDIS_WAN_PACKET*);
+VOID TryToIndicateMtlReceives(ADAPTER *Adapter);
+
+#endif /* _MTL_ */