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