Free (GPLv2) TCP/IP stack developed by TASS Belgium

Dependents:   lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pico_config.h Source File

pico_config.h

00001 /*********************************************************************
00002    PicoTCP. Copyright (c) 2012-2015 Altran Intelligent Systems. Some rights reserved.
00003    See LICENSE and COPYING for usage.
00004 
00005  *********************************************************************/
00006 #include "pico_defines.h"
00007 #ifndef INCLUDE_PICO_CONFIG
00008 #define INCLUDE_PICO_CONFIG
00009 #ifndef __KERNEL__
00010 #include <stdint.h>
00011 #include <stdlib.h>
00012 #include <string.h>
00013 #else
00014 #include <linux/types.h>
00015 #endif
00016 
00017 #if defined __IAR_SYSTEMS_ICC__ || defined ATOP
00018 #   define PACKED_STRUCT_DEF __packed struct
00019 #   define PEDANTIC_STRUCT_DEF __packed struct
00020 #   define PACKED_UNION_DEF  __packed union
00021 #   define WEAK
00022 #elif defined __WATCOMC__
00023 #   define PACKED_STRUCT_DEF   _Packed struct
00024 #   define PEDANTIC_STRUCT_DEF struct
00025 #   define PACKED_UNION_DEF    _Packed union
00026 #   define WEAK
00027 #else
00028 #   define PACKED_STRUCT_DEF struct __attribute__((packed))
00029 #   define PEDANTIC_STRUCT_DEF struct
00030 #   define PACKED_UNION_DEF  union   /* Sane compilers do not require packed unions */
00031 #   define WEAK __attribute__((weak))
00032 #   ifdef __GNUC__
00033 #       define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
00034 #       if ((GCC_VERSION >= 40800))
00035 #           define BYTESWAP_GCC
00036 #       endif
00037 #   endif
00038 #endif
00039 
00040 #ifdef PICO_BIGENDIAN
00041 
00042 # define PICO_IDETH_IPV4 0x0800
00043 # define PICO_IDETH_ARP 0x0806
00044 # define PICO_IDETH_IPV6 0x86DD
00045 
00046 # define PICO_ARP_REQUEST 0x0001
00047 # define PICO_ARP_REPLY   0x0002
00048 # define PICO_ARP_HTYPE_ETH 0x0001
00049 
00050 #define short_be(x) (x)
00051 #define long_be(x) (x)
00052 #define long_long_be(x) (x)
00053 
00054 static inline uint16_t short_from(void *_p)
00055 {
00056     unsigned char *p = (unsigned char *)_p;
00057     uint16_t r, p0, p1;
00058     p0 = p[0];
00059     p1 = p[1];
00060     r = (p0 << 8) + p1;
00061     return r;
00062 }
00063 
00064 static inline uint32_t long_from(void *_p)
00065 {
00066     unsigned char *p = (unsigned char *)_p;
00067     uint32_t r, p0, p1, p2, p3;
00068     p0 = p[0];
00069     p1 = p[1];
00070     p2 = p[2];
00071     p3 = p[3];
00072     r = (p0 << 24) + (p1 << 16) + (p2 << 8) + p3;
00073     return r;
00074 }
00075 
00076 #else
00077 
00078 static inline uint16_t short_from(void *_p)
00079 {
00080     unsigned char *p = (unsigned char *)_p;
00081     uint16_t r, _p0, _p1;
00082     _p0 = p[0];
00083     _p1 = p[1];
00084     r = (uint16_t)((_p1 << 8u) + _p0);
00085     return r;
00086 }
00087 
00088 static inline uint32_t long_from(void *_p)
00089 {
00090     unsigned char *p = (unsigned char *)_p;
00091     uint32_t r, _p0, _p1, _p2, _p3;
00092     _p0 = p[0];
00093     _p1 = p[1];
00094     _p2 = p[2];
00095     _p3 = p[3];
00096     r = (_p3 << 24) + (_p2 << 16) + (_p1 << 8) + _p0;
00097     return r;
00098 }
00099 
00100 
00101 # define PICO_IDETH_IPV4 0x0008
00102 # define PICO_IDETH_ARP 0x0608
00103 # define PICO_IDETH_IPV6 0xDD86
00104 
00105 # define PICO_ARP_REQUEST 0x0100
00106 # define PICO_ARP_REPLY   0x0200
00107 # define PICO_ARP_HTYPE_ETH 0x0100
00108 
00109 #   ifndef BYTESWAP_GCC
00110 static inline uint16_t short_be(uint16_t le)
00111 {
00112     return (uint16_t)(((le & 0xFFu) << 8) | ((le >> 8u) & 0xFFu));
00113 }
00114 
00115 static inline uint32_t long_be(uint32_t le)
00116 {
00117     uint8_t *b = (uint8_t *)&le;
00118     uint32_t be = 0;
00119     uint32_t b0, b1, b2;
00120     b0 = b[0];
00121     b1 = b[1];
00122     b2 = b[2];
00123     be = b[3] + (b2 << 8) + (b1 << 16) + (b0 << 24);
00124     return be;
00125 }
00126 static inline uint64_t long_long_be(uint64_t le)
00127 {
00128     uint8_t *b = (uint8_t *)&le;
00129     uint64_t be = 0;
00130     uint64_t b0, b1, b2, b3, b4, b5, b6;
00131     b0 = b[0];
00132     b1 = b[1];
00133     b2 = b[2];
00134     b3 = b[3];
00135     b4 = b[4];
00136     b5 = b[5];
00137     b6 = b[6];
00138     be = b[7] + (b6 << 8) + (b5 << 16) + (b4 << 24) + (b3 << 32) + (b2 << 40) + (b1 << 48) + (b0 << 56);
00139     return be;
00140 }
00141 #   else
00142 /*
00143    extern uint32_t __builtin_bswap32(uint32_t);
00144    extern uint16_t __builtin_bswap16(uint16_t);
00145    extern uint64_t __builtin_bswap64(uint64_t);
00146  */
00147 
00148 static inline uint32_t long_be(uint32_t le)
00149 {
00150     return (uint32_t)__builtin_bswap32(le);
00151 }
00152 
00153 static inline uint16_t short_be(uint16_t le)
00154 {
00155     return (uint16_t)__builtin_bswap16(le);
00156 }
00157 
00158 static inline uint64_t long_long_be(uint64_t le)
00159 {
00160     return (uint64_t)__builtin_bswap64(le);
00161 }
00162 
00163 #   endif /* BYTESWAP_GCC */
00164 #endif
00165 
00166 
00167 /* Mockables */
00168 #if defined UNIT_TEST
00169 #   define MOCKABLE __attribute__((weak))
00170 #else
00171 #   define MOCKABLE
00172 #endif
00173 
00174 #include "pico_constants.h"
00175 #include "pico_mm.h"
00176 
00177 #define IGNORE_PARAMETER(x)  ((void)x)
00178 
00179 #define PICO_MEM_DEFAULT_SLAB_SIZE 1600
00180 #define PICO_MEM_PAGE_SIZE 4096
00181 #define PICO_MEM_PAGE_LIFETIME 100
00182 #define PICO_MIN_HEAP_SIZE 600
00183 #define PICO_MIN_SLAB_SIZE 1200
00184 #define PICO_MAX_SLAB_SIZE 1600
00185 #define PICO_MEM_MINIMUM_OBJECT_SIZE 4
00186 
00187 
00188 /*** *** *** *** *** *** ***
00189  *** PLATFORM SPECIFIC   ***
00190  *** *** *** *** *** *** ***/
00191 #if defined PICO_PORT_CUSTOM
00192 # include "pico_port.h"
00193 #elif defined CORTEX_M4_HARDFLOAT
00194 # include "arch/pico_cortex_m.h"
00195 #elif defined CORTEX_M4_SOFTFLOAT
00196 # include "arch/pico_cortex_m.h"
00197 #elif defined CORTEX_M3
00198 # include "arch/pico_cortex_m.h"
00199 #elif defined PIC24
00200 # include "arch/pico_pic24.h"
00201 #elif defined MSP430
00202 # include "arch/pico_msp430.h"
00203 #elif defined MBED_TEST
00204 # include "arch/pico_mbed.h"
00205 #elif defined AVR
00206 # include "arch/pico_avr.h"
00207 #elif defined ARM9
00208 # include "arch/pico_arm9.h"
00209 #elif defined ESP8266
00210 # include "arch/pico_esp8266.h"
00211 #elif defined MT7681
00212 # include "arch/pico_generic_gcc.h"
00213 #elif defined FAULTY
00214 # include "../test/pico_faulty.h"
00215 #elif defined ARCHNONE
00216 # include "arch/pico_none.h"
00217 #elif defined GENERIC
00218 # include "arch/pico_generic_gcc.h"
00219 #elif defined __KERNEL__
00220 # include "arch/pico_linux.h"
00221 /* #elif defined ... */
00222 #else
00223 # include "arch/pico_posix.h"
00224 #endif
00225 
00226 #ifdef PICO_SUPPORT_MM
00227 #define PICO_ZALLOC(x) pico_mem_zalloc(x)
00228 #define PICO_FREE(x) pico_mem_free(x)
00229 #else
00230 #define PICO_ZALLOC(x) pico_zalloc(x)
00231 #define PICO_FREE(x) pico_free(x)
00232 #endif  /* PICO_SUPPORT_MM */
00233 
00234 #endif