remove const from TPL_OpenTPLFromMemory since the memory is altered
[libogc.git] / libdb / uIP / uip_arch.h
blob2a0e26a8b9abc88cd9dd46274b3440a3b8864b0d
1 /**
2 * \defgroup uiparch Architecture specific uIP functions
3 * @{
5 * The functions in the architecture specific module implement the IP
6 * check sum and 32-bit additions.
8 * The IP checksum calculation is the most computationally expensive
9 * operation in the TCP/IP stack and it therefore pays off to
10 * implement this in efficient assembler. The purpose of the uip-arch
11 * module is to let the checksum functions to be implemented in
12 * architecture specific assembler.
16 /**
17 * \file
18 * Declarations of architecture specific functions.
19 * \author Adam Dunkels <adam@dunkels.com>
23 * Copyright (c) 2001, Adam Dunkels.
24 * All rights reserved.
26 * Redistribution and use in source and binary forms, with or without
27 * modification, are permitted provided that the following conditions
28 * are met:
29 * 1. Redistributions of source code must retain the above copyright
30 * notice, this list of conditions and the following disclaimer.
31 * 2. Redistributions in binary form must reproduce the above copyright
32 * notice, this list of conditions and the following disclaimer in the
33 * documentation and/or other materials provided with the distribution.
34 * 3. The name of the author may not be used to endorse or promote
35 * products derived from this software without specific prior
36 * written permission.
38 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
39 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
40 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
41 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
42 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
43 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
44 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
45 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
46 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
47 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
48 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50 * This file is part of the uIP TCP/IP stack.
55 #ifndef __UIP_ARCH_H__
56 #define __UIP_ARCH_H__
58 #include "uip.h"
60 #define UIP_MIN(x,y) (x)<(y)?(x):(y)
62 #define MEM_ALIGNMENT 4
63 #define MEM_ALIGN(mem) ((void*)(((u32_t)(mem)+MEM_ALIGNMENT-1)&~(u32_t)(MEM_ALIGNMENT-1)))
64 #define MEM_ALIGN_SIZE(size) (((size)+MEM_ALIGNMENT-1)&~(u32_t)(MEM_ALIGNMENT-1))
66 #define PACK_STRUCT_STRUCT __attribute__((packed))
67 #define PACK_STRUCT_FIELD(x) x
68 #define PACK_STRUCT_BEGIN
69 #define PACK_STRUCT_END
71 #ifndef htons
72 #define htons(x) (x)
73 #endif
74 #ifndef ntohs
75 #define ntohs(x) (x)
76 #endif
77 #ifndef htonl
78 #define htonl(x) (x)
79 #endif
80 #ifndef ntohl
81 #define ntohl(x) (x)
82 #endif
84 struct uip_pbuf;
85 struct uip_ip_addr;
87 /**
88 * Calculate the Internet checksum over a buffer.
90 * The Internet checksum is the one's complement of the one's
91 * complement sum of all 16-bit words in the buffer.
93 * See RFC1071.
95 * \note This function is not called in the current version of uIP,
96 * but future versions might make use of it.
98 * \param buf A pointer to the buffer over which the checksum is to be
99 * computed.
101 * \param len The length of the buffer over which the checksum is to
102 * be computed.
104 * \return The Internet checksum of the buffer.
106 u16_t uip_chksum(u16_t *buf, u32_t len);
109 * Calculate the IP header checksum of the packet header in uip_buf.
111 * The IP header checksum is the Internet checksum of the 20 bytes of
112 * the IP header.
114 * \return The IP header checksum of the IP header in the uip_buf
115 * buffer.
117 u16_t uip_ipchksum(void *dataptr,u16_t len);
119 u16_t uip_ipchksum_pbuf(struct uip_pbuf *p);
122 * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
124 * The TCP checksum is the Internet checksum of data contents of the
125 * TCP segment, and a pseudo-header as defined in RFC793.
127 * \note The uip_appdata pointer that points to the packet data may
128 * point anywhere in memory, so it is not possible to simply calculate
129 * the Internet checksum of the contents of the uip_buf buffer.
131 * \return The TCP checksum of the TCP segment in uip_buf and pointed
132 * to by uip_appdata.
134 u16_t uip_chksum_pseudo(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t proto,u16_t proto_len);
138 extern void tcpip_tmr_needed();
139 #define tcp_tmr_needed tcpip_tmr_needed
141 #if UIP_LIBC_MEMFUNCREPLACE
142 static __inline__ void uip_memcpy(void *dest,const void *src,s32_t len)
144 u8_t *dest0 = (u8_t*)dest;
145 u8_t *src0 = (u8_t*)src;
147 while(len--) {
148 *dest0++ = *src0++;
152 static __inline__ void uip_memset(void *dest,s32_t c,s32_t len)
154 u8_t *dest0 = (u8_t*)dest;
156 while(len--) {
157 *dest0++ = (s8_t)c;
161 #define UIP_MEMCPY uip_memcpy
162 #define UIP_MEMSET uip_memset
163 #else
164 #define UIP_MEMCPY memcpy
165 #define UIP_MEMSET memset
166 #endif
168 /** @} */
170 #endif /* __UIP_ARCH_H__ */