/* | |
******************************************************************************** | |
* TERN, Inc. | |
* (c) Copyright 2005, http://www.tern.com | |
* | |
* - Derived based on development version provided by Wiznet. | |
* | |
* Filename : socket.h | |
* Programmer(s): | |
* Created : 2002/06/20 | |
* Modified : | |
* 2002/09/27 : - Renaming | |
* INT_STATUS --> INT_REG | |
* STATUS(i) --> INT_STATUS(i) | |
* C_STATUS(i) --> SOCK_STATUS(i) | |
* 2003/11/06 : Ported for use with TERN controller. Note all byte access is at even addresses | |
* 2005/10/8 : Modified constants for easier initialization. | |
* | |
* Description : Header file of W3100A for TERN embedded controller | |
******************************************************************************** | |
*/ | |
#ifndef __SOCKET_H__ | |
#define __SOCKET_H__ | |
#include "types.h" | |
#include "i2chip_hw.h" | |
#include <dos.h> | |
/*******************************************************************/ | |
#define MAX_SOCK_NUM 4 // Concurrent maxmium number of socket | |
#define I2CHIP_C0_CR 0x00 | |
#define I2CHIP_C1_CR 0x01 | |
#define I2CHIP_C2_CR 0x02 | |
#define I2CHIP_C3_CR 0x03 | |
#define I2CHIP_C0_ISR 0x04 | |
#define I2CHIP_C1_ISR 0x05 | |
#define I2CHIP_C2_ISR 0x06 | |
#define I2CHIP_C3_ISR 0x07 | |
#define I2CHIP_IR 0x08 | |
#define I2CHIP_IMR 0x09 | |
#define I2CHIP_IDM_OR 0x0C | |
#define I2CHIP_IDM_AR0 0x0D | |
#define I2CHIP_IDM_AR1 0x0E | |
#define I2CHIP_IDM_DR 0x0F | |
#define I2CHIP_C0_RW_PR 0x10 | |
#define I2CHIP_C0_RR_PR 0x14 | |
#define I2CHIP_C0_TA_PR 0x18 | |
#define I2CHIP_C1_RW_PR 0x1C | |
#define I2CHIP_C1_RR_PR 0x20 | |
#define I2CHIP_C1_TA_PR 0x24 | |
#define I2CHIP_C2_RW_PR 0x28 | |
#define I2CHIP_C2_RR_PR 0x2C | |
#define I2CHIP_C2_TA_PR 0x30 | |
#define I2CHIP_C3_RW_PR 0x34 | |
#define I2CHIP_C3_RR_PR 0x38 | |
#define I2CHIP_C3_TA_PR 0x3C | |
#define I2CHIP_C0_TW_PR 0x40 | |
#define I2CHIP_C0_TR_PR 0x44 | |
#define I2CHIP_C1_TW_PR 0x4C | |
#define I2CHIP_C1_TR_PR 0x50 | |
#define I2CHIP_C2_TW_PR 0x58 | |
#define I2CHIP_C2_TR_PR 0x5C | |
#define I2CHIP_C3_TW_PR 0x64 | |
#define I2CHIP_C3_TR_PR 0x68 | |
#define I2CHIP_GAR 0x80 | |
#define I2CHIP_SMR 0x84 | |
#define I2CHIP_SHAR 0x88 | |
#define I2CHIP_SIPR 0x8E | |
#define I2CHIP_IRTR 0x92 | |
#define I2CHIP_RCR 0x94 | |
#define I2CHIP_RMSR 0x95 | |
#define I2CHIP_TMSR 0x96 | |
#define I2CHIP_C0_SSR 0xA0 | |
#define I2CHIP_C0_SOPR 0xA1 | |
#define I2CHIP_C0_DIR 0xA8 | |
#define I2CHIP_CO_DPR 0xAC | |
#define I2CHIP_C0_SPR 0xAE | |
#define I2CHIP_C0_IPR 0xB0 | |
#define I2CHIP_C0_TOSR 0xB1 | |
#define I2CHIP_C0_MSSR 0xB2 | |
#define I2CHIP_C1_SSR 0xB8 | |
#define I2CHIP_C1_SOPR 0xB9 | |
#define I2CHIP_C1_DIR 0xC0 | |
#define I2CHIP_C1_DPR 0xC4 | |
#define I2CHIP_C1_SPR 0xC6 | |
#define I2CHIP_C1_IPR 0xC8 | |
#define I2CHIP_C1_TOSR 0xC9 | |
#define I2CHIP_C1_MSSR 0xCA | |
#define I2CHIP_C2_SSR 0xD0 | |
#define I2CHIP_C2_SOPR 0xD1 | |
#define I2CHIP_C2_DIR 0xD8 | |
#define I2CHIP_C2_DPR 0xDC | |
#define I2CHIP_C2_SPR 0xDE | |
#define I2CHIP_C2_IPR 0xE0 | |
#define I2CHIP_C2_TOSR 0xE1 | |
#define I2CHIP_C2_MSSR 0xE2 | |
#define I2CHIP_C3_SSR 0xE8 | |
#define I2CHIP_C3_SOPR 0xE9 | |
#define I2CHIP_C3_DIR 0xF0 | |
#define I2CHIP_C3_DPR 0xF4 | |
#define I2CHIP_C3_SPR 0xF6 | |
#define I2CHIP_C3_IPR 0xF8 | |
#define I2CHIP_C3_TOSR 0xF9 | |
#define I2CHIP_C3_MSSR 0xFA | |
#define MAX_SEGMENT_SIZE 1460 // Maximum TCP transmission packet size | |
#define MAX_BUF_SIZE1 0 | |
/* SOCKET OPTION(Settting OPT_PROTOCOL REG.) */ | |
#define SOCKOPT_BROADCAST 0x80 // Transmission, Reception of broadcasting data | |
#define SOCKOPT_NDTIMEOUT 0x40 // Setting timeout | |
#define SOCKOPT_NDACK 0x20 // Setting No Delayed Ack(TCP) | |
#define SOCKOPT_SWS 0x10 // Setting Silly Window Syndrome(TCP) | |
/* OPTION(Setting OPT_PROTOCOL REG.) for MAC LAYER RAW MODE */ | |
#define MACLOPT_RXERR 0x80 // Setting reception of error packet | |
#define MACLOPT_BROADCAST 0x40 // Setting reception of broadcast packet | |
#define MACLOPT_PROMISC 0x20 // Setting reception of promiscuous packet | |
/* Distinguish TCP / UDP / IP RAW / MAC RAW (Setting OPT_PROTOCOL REG.) */ | |
#define SOCK_CLOSEDM 0x00 // unused socket | |
#define SOCK_STREAM 0x01 // TCP | |
#define SOCK_DGRAM 0x02 // UDP | |
#define SOCK_IPL_RAW 0x03 // IP LAYER RAW SOCK | |
#define SOCK_MACL_RAW 0x04 // MAC LAYER RAW SOCK | |
/* Setting IP PROTOCOL */ | |
#define IPPROTO_IP 0 // dummy for IP | |
#define IPPROTO_ICMP 1 // control message protocol | |
#define IPPROTO_IGMP 2 // internet group management protocol | |
#define IPPROTO_GGP 3 // gateway^2 (deprecated) | |
#define IPPROTO_TCP 6 // tcp | |
#define IPPROTO_PUP 12 // pup | |
#define IPPROTO_UDP 17 // user datagram protocol | |
#define IPPROTO_IDP 22 // xns idp | |
#define IPPROTO_ND 77 // UNOFFICIAL net disk proto | |
#define IPPROTO_RAW 255 // raw IP packet | |
/* Select parameter to use */ | |
#define SEL_CONTROL 0 //Confirm socket status | |
#define SEL_SEND 1 // Confirm Tx free buffer size | |
#define SEL_RECV 2 // Confirm Rx data size | |
/* Command variables */ | |
#define CSYS_INIT 0x01 // To set up network information(mac address, gateway address, | |
// subnet mask, source ip) | |
#define CSOCK_INIT 0x02 // To initialize socket | |
#define CCONNECT 0x04 // To establish connection as tcp client mode | |
#define CLISTEN 0x08 // To wait for connection request as tcp server mode | |
#define CCLOSE 0x10 // To terminate connection | |
#define CSEND 0x20 // To send data | |
#define CRECV 0x40 // To receive data | |
#define CSW_RESET 0x80 // To do software reset | |
#define CSET_MEMORY_TEST 0x80 // To set the memory test bit | |
#define CRESET_MEMORY_TEST 0x00 // To clear the memory test bit | |
/* Status Variables */ | |
#define SSYS_INIT_OK 0x01 // Completion of CSYS_INIT command | |
#define SSOCK_INIT_OK 0x02 // Completion of CSOCK_INIT command | |
#define SESTABLISHED 0x04 // Completion of connection setup | |
#define SCLOSED 0x08 // Completion of CCLOSED command | |
#define SSEND_OK 0x20 // Completion of sending data | |
#define SRECV_OK 0x40 // Completion of receiving data | |
/* Socket Status Vabiables */ | |
#define SOCK_CLOSED 0x00 // Status of connection closed | |
#define SOCK_ARP 0x01 // Status of ARP | |
#define SOCK_LISTEN 0x02 // Status of waiting for TCP connection setup | |
#define SOCK_SYNSENT 0x03 // Status of setting up TCP connection | |
#define SOCK_SYNSENT_ACK 0x04 // Status of setting up TCP connection | |
#define SOCK_SYNRECV 0x05 // Status of setting up TCP connection | |
#define SOCK_ESTABLISHED 0x06 // Status of TCP connection established | |
#define SOCK_CLOSE_WAIT 0x07 // Status of closing TCP connection | |
#define SOCK_LAST_ACK 0x08 // Status of closing TCP connection | |
#define SOCK_FIN_WAIT1 0x09 // Status of closing TCP connection | |
#define SOCK_FIN_WAIT2 0x0A // Status of closing TCP connection | |
#define SOCK_CLOSING 0x0B // Status of closing TCP connection | |
#define SOCK_TIME_WAIT 0x0C // Status of closing TCP connection | |
#define SOCK_RESET 0x0D // Status of closing TCP connection | |
#define SOCK_INIT 0x0E // Status of socket initialization | |
#define SOCK_UDP 0x0F // Status of UDP | |
#define SOCK_RAW 0x10 // Status of IP RAW | |
/* TERN Behavior Parameters */ | |
#define TERN_TDMA_THRES 10000 // Use DMA for transmits if data > thres bytes. | |
#define TERN_RDMA_THRES 10000 // Use DMA for receives if data > thres bytes. | |
// High thres value effectively disables DMA | |
void far interrupt in4_isr_i2chip(void); | |
//void ISR_ESTABLISHED(SOCKET s); | |
//void ISR_CLOSED(SOCKET s); | |
//void ISR_RX(SOCKET s); | |
void initW3100A(void); | |
void sysinit(u_char sbufsize, u_char rbufsize); | |
void setsubmask(u_char * addr); | |
void setgateway(u_char * addr); | |
void setMACAddr(u_char * addr); | |
void setIP(u_char * addr); | |
char socket(SOCKET s, u_char protocol, u_int port, u_char flag); | |
void setIPprotocol(SOCKET s, u_char ipprotocol); | |
void setINTMask(u_char mask); | |
void settimeout(u_char * val); | |
void setTOS(SOCKET s, u_char tos); | |
void GetDestAddr(SOCKET s, u_char* addr); | |
//void setbroadcast(SOCKET s); | |
char connect(SOCKET s, u_char far * addr, u_int port); | |
char NBconnect(SOCKET s, u_char far * addr, u_int port); | |
//char listen(SOCKET s, u_char far * addr, u_int far * port); | |
char NBlisten(SOCKET s); | |
void initseqnum(SOCKET s); | |
int send(SOCKET s, u_char far * buf, u_int len); | |
int send_in(SOCKET s, u_char far * buf, u_int len); | |
int recv(SOCKET s, u_char far * buf, u_int len); | |
u_int sendto(SOCKET , u_char far * buf, u_int, u_char * addr, u_int); | |
u_int sendto_in(SOCKET , u_char far *, u_int); | |
u_int recvfrom(SOCKET , u_char far * buf, u_int, u_char * addr, u_int *); | |
u_int read_data(SOCKET s, u_int src_offset, u_char far * dst, u_int len); | |
u_int write_data(SOCKET s, u_char far * src, u_int dst_offset, u_int len); | |
void close(SOCKET s); | |
char reset_sock(SOCKET s); | |
u_int select(SOCKET s, u_char func); | |
void recv_clear(SOCKET s); | |
u_char tx_empty(SOCKET s); | |
#endif // __SOCKET_H__ |