aos/include/arch/cc.h
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

136 lines
3.2 KiB
C

/**
* \file
* \brief lwIP architecture configuration file for Barrelfish.
*/
/*
* Copyright (c) 2007, 2008, 2011, 2012, ETH Zurich.
* All rights reserved.
*
* This file is distributed under the terms in the attached LICENSE file.
* If you do not find this file, copies can be found by writing to:
* ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
*/
#ifndef CC_H
#define CC_H
#include <string.h>
#include <stdint.h>
#include <machine/endian.h>
/* Define platform endianness */
#ifndef BYTE_ORDER
#define BYTE_ORDER LITTLE_ENDIAN
#endif /* BYTE_ORDER */
typedef uint8_t u8_t;
typedef int8_t s8_t;
typedef uint16_t u16_t;
typedef int16_t s16_t;
typedef uint32_t u32_t;
typedef int32_t s32_t;
typedef uintptr_t mem_ptr_t;
// (sn)printf() format strings for integer types
#define U16_F "hu"
#define S16_F "hd"
#define X16_F "hx"
#define U32_F "u"
#define S32_F "d"
#define X32_F "x"
/* Compiler hints for packing structures */
#if __GNUC__ >= 4
/* GCC 4.1 doesn't like '__attribute__((packed))' after a field declaration */
#define PACK_STRUCT_FIELD(x) x
#define PACK_STRUCT_STRUCT __attribute__((packed))
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_END
#else
#define PACK_STRUCT_FIELD(x) x __attribute__((packed))
#define PACK_STRUCT_STRUCT __attribute__((packed))
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_END
#endif /* __GNUC__ */
#define INLINE inline
#include <stdio.h>
#include <stdlib.h>
#define LWIP_PLATFORM_DIAG(x) do {printf x;} while(0)
#define LWIP_PLATFORM_ASSERT(x) do {printf("Assertion \"%s\" failed at line %d in %s\n", \
x, __LINE__, __FILE__); fflush(NULL); abort();} while(0)
// Declare [nh]to[nh][ls]() in this header, so we don't depend on liblwip.a
// when using them.
#define LWIP_PLATFORM_BYTESWAP 1
// Use optimized version if available
#ifdef __htonl
#define LWIP_PLATFORM_HTONS(x) __htons(x)
#define LWIP_PLATFORM_HTONL(x) __htonl(x)
#define LWIP_PLATFORM_NTOHS(x) __ntohs(x)
#define LWIP_PLATFORM_NTOHL(x) __ntohl(x)
#else
/**
* Convert an u16_t from host- to network byte order.
*
* @param n u16_t in host byte order
* @return n in network byte order
*/
static inline u16_t barrelfish_htons(u16_t n)
{
return ((n & 0xff) << 8) | ((n & 0xff00) >> 8);
}
/**
* Convert an u16_t from network- to host byte order.
*
* @param n u16_t in network byte order
* @return n in host byte order
*/
static inline u16_t barrelfish_ntohs(u16_t n)
{
return barrelfish_htons(n);
}
/**
* Convert an u32_t from host- to network byte order.
*
* @param n u32_t in host byte order
* @return n in network byte order
*/
static inline u32_t barrelfish_htonl(u32_t n)
{
return ((n & 0xff) << 24) |
((n & 0xff00) << 8) |
((n & 0xff0000UL) >> 8) | ((n & 0xff000000UL) >> 24);
}
/**
* Convert an u32_t from network- to host byte order.
*
* @param n u32_t in network byte order
* @return n in host byte order
*/
static inline u32_t barrelfish_ntohl(u32_t n)
{
return barrelfish_htonl(n);
}
#define LWIP_PLATFORM_HTONS(x) barrelfish_htons(x)
#define LWIP_PLATFORM_HTONL(x) barrelfish_htonl(x)
#define LWIP_PLATFORM_NTOHS(x) barrelfish_ntohs(x)
#define LWIP_PLATFORM_NTOHL(x) barrelfish_ntohl(x)
#endif
#endif