2 ********************************************************************************
\r
4 * (c) Copyright 2005, http://www.tern.com
\r
6 * - Derived based on development version provided by Wiznet.
\r
8 * Filename : socket.h
\r
10 * Created : 2002/06/20
\r
12 * 2002/09/27 : - Renaming
\r
13 * INT_STATUS --> INT_REG
\r
14 * STATUS(i) --> INT_STATUS(i)
\r
15 * C_STATUS(i) --> SOCK_STATUS(i)
\r
16 * 2003/11/06 : Ported for use with TERN controller. Note all byte access is at even addresses
\r
17 * 2005/10/8 : Modified constants for easier initialization.
\r
19 * Description : Header file of W3100A for TERN embedded controller
\r
20 ********************************************************************************
\r
22 #ifndef __SOCKET_H__
\r
23 #define __SOCKET_H__
\r
26 #include "i2chip_hw.h"
\r
29 /*******************************************************************/
\r
30 #define MAX_SOCK_NUM 4 // Concurrent maxmium number of socket
\r
32 #define I2CHIP_C0_CR 0x00
\r
33 #define I2CHIP_C1_CR 0x01
\r
34 #define I2CHIP_C2_CR 0x02
\r
35 #define I2CHIP_C3_CR 0x03
\r
36 #define I2CHIP_C0_ISR 0x04
\r
37 #define I2CHIP_C1_ISR 0x05
\r
38 #define I2CHIP_C2_ISR 0x06
\r
39 #define I2CHIP_C3_ISR 0x07
\r
40 #define I2CHIP_IR 0x08
\r
41 #define I2CHIP_IMR 0x09
\r
43 #define I2CHIP_IDM_OR 0x0C
\r
44 #define I2CHIP_IDM_AR0 0x0D
\r
45 #define I2CHIP_IDM_AR1 0x0E
\r
46 #define I2CHIP_IDM_DR 0x0F
\r
47 #define I2CHIP_C0_RW_PR 0x10
\r
48 #define I2CHIP_C0_RR_PR 0x14
\r
49 #define I2CHIP_C0_TA_PR 0x18
\r
50 #define I2CHIP_C1_RW_PR 0x1C
\r
51 #define I2CHIP_C1_RR_PR 0x20
\r
52 #define I2CHIP_C1_TA_PR 0x24
\r
53 #define I2CHIP_C2_RW_PR 0x28
\r
54 #define I2CHIP_C2_RR_PR 0x2C
\r
55 #define I2CHIP_C2_TA_PR 0x30
\r
56 #define I2CHIP_C3_RW_PR 0x34
\r
57 #define I2CHIP_C3_RR_PR 0x38
\r
58 #define I2CHIP_C3_TA_PR 0x3C
\r
59 #define I2CHIP_C0_TW_PR 0x40
\r
60 #define I2CHIP_C0_TR_PR 0x44
\r
61 #define I2CHIP_C1_TW_PR 0x4C
\r
62 #define I2CHIP_C1_TR_PR 0x50
\r
63 #define I2CHIP_C2_TW_PR 0x58
\r
64 #define I2CHIP_C2_TR_PR 0x5C
\r
65 #define I2CHIP_C3_TW_PR 0x64
\r
66 #define I2CHIP_C3_TR_PR 0x68
\r
67 #define I2CHIP_GAR 0x80
\r
68 #define I2CHIP_SMR 0x84
\r
69 #define I2CHIP_SHAR 0x88
\r
70 #define I2CHIP_SIPR 0x8E
\r
71 #define I2CHIP_IRTR 0x92
\r
72 #define I2CHIP_RCR 0x94
\r
73 #define I2CHIP_RMSR 0x95
\r
74 #define I2CHIP_TMSR 0x96
\r
75 #define I2CHIP_C0_SSR 0xA0
\r
76 #define I2CHIP_C0_SOPR 0xA1
\r
77 #define I2CHIP_C0_DIR 0xA8
\r
78 #define I2CHIP_CO_DPR 0xAC
\r
79 #define I2CHIP_C0_SPR 0xAE
\r
80 #define I2CHIP_C0_IPR 0xB0
\r
81 #define I2CHIP_C0_TOSR 0xB1
\r
82 #define I2CHIP_C0_MSSR 0xB2
\r
84 #define I2CHIP_C1_SSR 0xB8
\r
85 #define I2CHIP_C1_SOPR 0xB9
\r
86 #define I2CHIP_C1_DIR 0xC0
\r
87 #define I2CHIP_C1_DPR 0xC4
\r
88 #define I2CHIP_C1_SPR 0xC6
\r
89 #define I2CHIP_C1_IPR 0xC8
\r
90 #define I2CHIP_C1_TOSR 0xC9
\r
91 #define I2CHIP_C1_MSSR 0xCA
\r
93 #define I2CHIP_C2_SSR 0xD0
\r
94 #define I2CHIP_C2_SOPR 0xD1
\r
95 #define I2CHIP_C2_DIR 0xD8
\r
96 #define I2CHIP_C2_DPR 0xDC
\r
97 #define I2CHIP_C2_SPR 0xDE
\r
98 #define I2CHIP_C2_IPR 0xE0
\r
99 #define I2CHIP_C2_TOSR 0xE1
\r
100 #define I2CHIP_C2_MSSR 0xE2
\r
102 #define I2CHIP_C3_SSR 0xE8
\r
103 #define I2CHIP_C3_SOPR 0xE9
\r
104 #define I2CHIP_C3_DIR 0xF0
\r
105 #define I2CHIP_C3_DPR 0xF4
\r
106 #define I2CHIP_C3_SPR 0xF6
\r
107 #define I2CHIP_C3_IPR 0xF8
\r
108 #define I2CHIP_C3_TOSR 0xF9
\r
109 #define I2CHIP_C3_MSSR 0xFA
\r
111 #define MAX_SEGMENT_SIZE 1460 // Maximum TCP transmission packet size
\r
112 #define MAX_BUF_SIZE1 0
\r
115 /* SOCKET OPTION(Settting OPT_PROTOCOL REG.) */
\r
116 #define SOCKOPT_BROADCAST 0x80 // Transmission, Reception of broadcasting data
\r
117 #define SOCKOPT_NDTIMEOUT 0x40 // Setting timeout
\r
118 #define SOCKOPT_NDACK 0x20 // Setting No Delayed Ack(TCP)
\r
119 #define SOCKOPT_SWS 0x10 // Setting Silly Window Syndrome(TCP)
\r
121 /* OPTION(Setting OPT_PROTOCOL REG.) for MAC LAYER RAW MODE */
\r
122 #define MACLOPT_RXERR 0x80 // Setting reception of error packet
\r
123 #define MACLOPT_BROADCAST 0x40 // Setting reception of broadcast packet
\r
124 #define MACLOPT_PROMISC 0x20 // Setting reception of promiscuous packet
\r
126 /* Distinguish TCP / UDP / IP RAW / MAC RAW (Setting OPT_PROTOCOL REG.) */
\r
127 #define SOCK_CLOSEDM 0x00 // unused socket
\r
128 #define SOCK_STREAM 0x01 // TCP
\r
129 #define SOCK_DGRAM 0x02 // UDP
\r
130 #define SOCK_IPL_RAW 0x03 // IP LAYER RAW SOCK
\r
131 #define SOCK_MACL_RAW 0x04 // MAC LAYER RAW SOCK
\r
133 /* Setting IP PROTOCOL */
\r
134 #define IPPROTO_IP 0 // dummy for IP
\r
135 #define IPPROTO_ICMP 1 // control message protocol
\r
136 #define IPPROTO_IGMP 2 // internet group management protocol
\r
137 #define IPPROTO_GGP 3 // gateway^2 (deprecated)
\r
138 #define IPPROTO_TCP 6 // tcp
\r
139 #define IPPROTO_PUP 12 // pup
\r
140 #define IPPROTO_UDP 17 // user datagram protocol
\r
141 #define IPPROTO_IDP 22 // xns idp
\r
142 #define IPPROTO_ND 77 // UNOFFICIAL net disk proto
\r
143 #define IPPROTO_RAW 255 // raw IP packet
\r
145 /* Select parameter to use */
\r
146 #define SEL_CONTROL 0 //Confirm socket status
\r
147 #define SEL_SEND 1 // Confirm Tx free buffer size
\r
148 #define SEL_RECV 2 // Confirm Rx data size
\r
150 /* Command variables */
\r
151 #define CSYS_INIT 0x01 // To set up network information(mac address, gateway address,
\r
152 // subnet mask, source ip)
\r
153 #define CSOCK_INIT 0x02 // To initialize socket
\r
154 #define CCONNECT 0x04 // To establish connection as tcp client mode
\r
155 #define CLISTEN 0x08 // To wait for connection request as tcp server mode
\r
156 #define CCLOSE 0x10 // To terminate connection
\r
157 #define CSEND 0x20 // To send data
\r
158 #define CRECV 0x40 // To receive data
\r
159 #define CSW_RESET 0x80 // To do software reset
\r
161 #define CSET_MEMORY_TEST 0x80 // To set the memory test bit
\r
162 #define CRESET_MEMORY_TEST 0x00 // To clear the memory test bit
\r
164 /* Status Variables */
\r
165 #define SSYS_INIT_OK 0x01 // Completion of CSYS_INIT command
\r
166 #define SSOCK_INIT_OK 0x02 // Completion of CSOCK_INIT command
\r
167 #define SESTABLISHED 0x04 // Completion of connection setup
\r
168 #define SCLOSED 0x08 // Completion of CCLOSED command
\r
169 #define SSEND_OK 0x20 // Completion of sending data
\r
170 #define SRECV_OK 0x40 // Completion of receiving data
\r
172 /* Socket Status Vabiables */
\r
173 #define SOCK_CLOSED 0x00 // Status of connection closed
\r
174 #define SOCK_ARP 0x01 // Status of ARP
\r
175 #define SOCK_LISTEN 0x02 // Status of waiting for TCP connection setup
\r
176 #define SOCK_SYNSENT 0x03 // Status of setting up TCP connection
\r
177 #define SOCK_SYNSENT_ACK 0x04 // Status of setting up TCP connection
\r
178 #define SOCK_SYNRECV 0x05 // Status of setting up TCP connection
\r
179 #define SOCK_ESTABLISHED 0x06 // Status of TCP connection established
\r
180 #define SOCK_CLOSE_WAIT 0x07 // Status of closing TCP connection
\r
181 #define SOCK_LAST_ACK 0x08 // Status of closing TCP connection
\r
182 #define SOCK_FIN_WAIT1 0x09 // Status of closing TCP connection
\r
183 #define SOCK_FIN_WAIT2 0x0A // Status of closing TCP connection
\r
184 #define SOCK_CLOSING 0x0B // Status of closing TCP connection
\r
185 #define SOCK_TIME_WAIT 0x0C // Status of closing TCP connection
\r
186 #define SOCK_RESET 0x0D // Status of closing TCP connection
\r
187 #define SOCK_INIT 0x0E // Status of socket initialization
\r
188 #define SOCK_UDP 0x0F // Status of UDP
\r
189 #define SOCK_RAW 0x10 // Status of IP RAW
\r
191 /* TERN Behavior Parameters */
\r
192 #define TERN_TDMA_THRES 10000 // Use DMA for transmits if data > thres bytes.
\r
193 #define TERN_RDMA_THRES 10000 // Use DMA for receives if data > thres bytes.
\r
194 // High thres value effectively disables DMA
\r
196 void far interrupt in4_isr_i2chip(void);
\r
198 //void ISR_ESTABLISHED(SOCKET s);
\r
199 //void ISR_CLOSED(SOCKET s);
\r
200 //void ISR_RX(SOCKET s);
\r
202 void initW3100A(void);
\r
203 void sysinit(u_char sbufsize, u_char rbufsize);
\r
204 void setsubmask(u_char * addr);
\r
205 void setgateway(u_char * addr);
\r
206 void setMACAddr(u_char * addr);
\r
207 void setIP(u_char * addr);
\r
209 char socket(SOCKET s, u_char protocol, u_int port, u_char flag);
\r
211 void setIPprotocol(SOCKET s, u_char ipprotocol);
\r
213 void setINTMask(u_char mask);
\r
214 void settimeout(u_char * val);
\r
215 void setTOS(SOCKET s, u_char tos);
\r
217 void GetDestAddr(SOCKET s, u_char* addr);
\r
219 //void setbroadcast(SOCKET s);
\r
221 char connect(SOCKET s, u_char far * addr, u_int port);
\r
222 char NBconnect(SOCKET s, u_char far * addr, u_int port);
\r
224 //char listen(SOCKET s, u_char far * addr, u_int far * port);
\r
225 char NBlisten(SOCKET s);
\r
227 void initseqnum(SOCKET s);
\r
229 int send(SOCKET s, u_char far * buf, u_int len);
\r
230 int send_in(SOCKET s, u_char far * buf, u_int len);
\r
231 int recv(SOCKET s, u_char far * buf, u_int len);
\r
233 u_int sendto(SOCKET , u_char far * buf, u_int, u_char * addr, u_int);
\r
234 u_int sendto_in(SOCKET , u_char far *, u_int);
\r
235 u_int recvfrom(SOCKET , u_char far * buf, u_int, u_char * addr, u_int *);
\r
237 u_int read_data(SOCKET s, u_int src_offset, u_char far * dst, u_int len);
\r
238 u_int write_data(SOCKET s, u_char far * src, u_int dst_offset, u_int len);
\r
240 void close(SOCKET s);
\r
241 char reset_sock(SOCKET s);
\r
243 u_int select(SOCKET s, u_char func);
\r
244 void recv_clear(SOCKET s);
\r
245 u_char tx_empty(SOCKET s);
\r
247 #endif // __SOCKET_H__
\r