[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/protocol/l2_c2k/common/TCP.H b/mcu/interface/protocol/l2_c2k/common/TCP.H
new file mode 100644
index 0000000..eafc6e5
--- /dev/null
+++ b/mcu/interface/protocol/l2_c2k/common/TCP.H
@@ -0,0 +1,243 @@
+/*************************************************************
+*
+* This Software is the property of VIA Telecom, Inc. and may only be used pursuant to a license from VIA Telecom, Inc.  
+* 
+* Any unauthorized use inconsistent with the terms of such license is strictly prohibited.
+* 
+* Copyright (c) 2002-2010 VIA Telecom, Inc.  All rights reserved.
+*
+*************************************************************/
+/*************************************************************************
+ *
+ * File Name: tcp.h
+ * Project:   TCP/IP
+ *
+ * Original Author: Steve Pye
+ * Creation Date:   Based on PVCS Rev 1.1   (15 Apr 1998)
+ *
+ * Description: TCP Data Structures
+ * Restrictions:
+ * Dependencies:
+ *
+ *************************************************************************
+ *
+ * This Software is the property of ISOTEL Research Ltd.  
+ * Unauthorized use is prohibited.
+ *
+ * ISOTEL Research Ltd.
+ * Suite 340, 525 - 28th Street S.E.
+ * Calgary, Alberta, Canada T2A 6W9
+ * Tel: (403)275-0041   Fax: (403)274-3598
+ *
+ *
+ *************************************************************************
+ *
+ * RCS Log Information
+ *
+ * removed!
+ *
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ ************************************************************************/
+
+#ifndef _TCP_H_
+#define _TCP_H_ 1
+
+#include "IP_TYPE.H"
+#include "IP.H"
+
+
+/* TCP Header */
+
+struct tcp_header
+  {
+    kal_uint16  src;                      /* source port number              */
+    kal_uint16  dst;                      /* destination port number         */
+    kal_uint32  seq;                      /* sequence number                 */
+    kal_uint32  ack;                      /* acknowledgement sequence number */
+    kal_uint8   hlen;                     /* [7:3] header 32-bit word length */
+    kal_uint8   ctl;                      /* TCP control bit flags           */
+    kal_uint16  win;                      /* offered window                  */
+    kal_uint16  chk;                      /* checksum over TCP header+data   */
+    kal_uint16  urg;                      /* offset from seq of last byte of */
+  };                                  /* urgent data                     */
+
+
+/* TCP Header Control Field Bit Flags */
+
+#define TCP_FIN 0x01
+#define TCP_SYN 0x02
+#define TCP_RST 0x04
+#define TCP_PSH 0x08
+#define TCP_ACK 0x10
+#define TCP_URG 0x20
+
+
+/* TCP/IP Header */
+
+struct tcpip_header
+  {
+    struct ip_header   ip;             /* IP header without options       */
+    struct tcp_header  tcp;            /* TCP header without options      */
+  };
+
+
+/* TCP Constant Sizes */
+
+#define TCP_HEADERSIZE       20        /* default TCP header size         */
+#define TCP_MAXHDRSIZE       40        /* should really be 24 but nops ok */
+#define TCP_MAXSEGSIZE       536       /* IP_MAXDGMSIZE-TCPIP_HEADERSIZE  */
+#define TCP_MSSOPTSIZE       4         /* max seg size option length      */
+#define TCP_MSS_BACKOFF      80        /* in the case of VSNP type packets */
+
+
+/* TCP Maximum Segment Size Option */
+
+struct tcp_mssopt
+  {
+    kal_uint8  type;                      /* TCPOPT_MAXSEG                   */
+    kal_uint8  len;                       /* TCP_MSSOPTSIZE                  */
+    kal_uint16 mss;                       /* maximum segment size            */
+  };
+
+#define TCPOPT_TYPE          0         /* option type field offset        */
+#define TCPOPT_LEN           1         /* option length field offset      */
+#define TCPOPT_MSS           2         /* option mss field offset         */
+
+
+/* TCP Option Types */
+
+#define TCPOPT_EOL           0         /* end-of-list option              */
+#define TCPOPT_NOP           1         /* no-operation option (padding)   */
+#define TCPOPT_MAXSEG        2         /* maximum segment size option     */
+
+
+/* TCP Protocol States */
+
+#define TCPS_CLOSED          0         /* closed                          */
+#define TCPS_LISTEN          1         /* passive: listening for SYN      */
+#define TCPS_SYNSENT         2         /* active: have sent SYN           */
+#define TCPS_SYNRCVD         3         /* have sent and received SYN      */
+#define TCPS_ESTABLISHED     4         /* established                     */
+#define TCPS_CLOSEWAIT       5         /* rcvd FIN, awaiting user close   */
+#define TCPS_FINWAIT1        6         /* user closed, sent FIN           */
+#define TCPS_CLOSING         7         /* closed xchd FIN; await FIN ACK  */
+#define TCPS_LASTACK         8         /* had FIN and close await FIN ACK */
+#define TCPS_FINWAIT2        9         /* have closed, FIN is acked       */
+#define TCPS_TIMEWAIT        10        /* in 2*MSL quiet wait after close */
+
+#define TCP_NSTATES          11
+
+/*set for trace, copy from TCP Protocol States above*/
+enum TraceTcpStates
+{
+   TCP_CLOSED,
+   TCP_LISTEN,
+   TCP_SYNSENT,
+   TCP_SYNRCVD,
+   TCP_ESTABLISHED,
+   TCP_CLOSEWAIT,
+   TCP_FINWAIT1,
+   TCP_CLOSING,
+   TCP_LASTACK,
+   TCP_FINWAIT2,
+   TCP_TIMEWAIT,
+   TCP_STATE_NUM
+};
+
+#define TCP_HAVERCVDSYN(s)   ((s) >= TCPS_SYNRCVD)
+#define TCP_HAVERCVDFIN(s)   ((s) >= TCPS_TIMEWAIT)
+#define TCP_HAVESENTSYN(s)   ((s) >= TCPS_SYNSENT)
+#define TCP_HAVESENTFIN(s)   ((s) >= TCPS_FINWAIT1)
+
+
+/* TCP Sequence Number Ordinality Macros. Note that if two sequence numbers
+   differ by more than half the sequence space, then their ordinality is
+   reversed and wraparound is assumed to have occurred. */
+
+#define SEQ_LT(a,b)          ( (kal_int32)((a)-(b)) <  0 )
+#define SEQ_LE(a,b)          ( (kal_int32)((a)-(b)) <= 0 )
+#define SEQ_GT(a,b)          ( (kal_int32)((a)-(b)) >  0 )
+#define SEQ_GE(a,b)          ( (kal_int32)((a)-(b)) >= 0 )
+
+
+/* TCP Send and Receive Sequence Number Initialization Macros */
+
+#define TCP_RECVSEQINIT(tp) \
+(tp)->rcv_adv = (tp)->rcv_nxt = (tp)->rcv_irs + 1
+
+#define TCP_SENDSEQINIT(tp) \
+(tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_iss
+
+#define TCP_PUSHURGINIT(tp) \
+(tp)->snd_psh = (tp)->snd_urg = (tp)->snd_una-1
+
+
+/* TCP Set Time Value Within a Defined Range Macro */
+
+#define TCPT_RANGESET( tv, value, tvmin, tvmax ) \
+ {                           \
+   (tv) = (value);           \
+   if( (tv) < (tvmin) )      \
+     (tv) = (tvmin);         \
+   else if( (tv) > (tvmax) ) \
+    (tv) = (tvmax);          \
+  }
+
+
+/* TCP Initial Sequence Number Assignment Increment. RFC793 suggests that
+   the TCP connection snd_iss should be assigned from a counter that is
+   incremented by 1 every 4 usecs. Then TCP_ISSINCR =
+
+          1    (incr)          1    (secs)          10^6     (incr)
+   ------------------ x ------------------  =  --------------------
+   4 x 10^(-6) (secs)   IP_CLOCKHZ (ticks)    4 x IP_CLOCKHZ (tick)
+
+   For an IP clock tick of 250 msecs (i.e. IP_CLOCKHZ = 4 ticks/sec)
+   TCP_ISSINCR = 1/16 x 10^6 = 62500 incr/tick. */
+
+#define TCP_ISSINCR (62500UL)           /* tcp_iss increment on each tick  */
+
+
+/* Round-Trip Time and Variance Scaling Factors. The smoothed round-trip
+   time and estimated variance are stored in the tcb as fixed point
+   values scaled-up by the multipliers below. */
+
+#define TCP_RTT_SCALE        8         /* multiplier for SRTT             */
+#define TCP_RTT_SHIFT        3         /* log2 of SRTT multiplier         */
+#define TCP_RTTVAR_SCALE     4         /* multiplier for RTTVAR           */
+#define TCP_RTTVAR_SHIFT     2         /* log2 of RTTVAR multiplier       */
+
+#define REAL_RTTUNIT         1000000UL /* route cache rtt values recorded */
+                                       /* in units of microseconds        */
+
+/* TCP Retransmit Timeout Macro */
+
+#define TCP_REXMTVAL(tp)     ((((kal_int32)(tp)->t_srtt)>>TCP_RTT_SHIFT)+((kal_int32)(tp)->t_rttvar))
+
+#endif /* _TCP_H_ */