1/**
2 * \addtogroup common
3 * $Id: gigtypes.h 246063 2011-03-12 06:39:32Z rnuti $
4 */
5/*@{*/
6
7/***************************************************
8 * Header name: gigtypes.h
9 *
10 * Copyright 2006 Gigle Semiconductor as an unpublished work.
11 * All Rights Reserved.
12 *
13 *  The information contained herein is confidential
14 * property of Company. The user, copying, transfer or
15 * disclosure of such information is prohibited except
16 * by express written agreement with Company.
17 *
18 * First written on 13/07/2006 by I. Barrera
19 *
20 ***************************************************/
21/** \file gigtypes.h
22 *
23 * \brief This contains the definition of types
24 *
25 * Only general types that will be used for several
26 * modules must be defined here
27 *
28 **************************************************/
29
30/* FILE-CSTYLED */
31
32#ifndef GIGTYPES_H_
33#define GIGTYPES_H_
34
35/***************************************************
36 *                 Public Defines Section
37 ***************************************************/
38
39#define INIT_THROW
40
41/** \brief Boolean type */
42typedef enum {
43  GIG_FALSE = 0,    /**< Boolean false */
44  GIG_TRUE = 1      /**< Boolean true */
45} t_bool;
46
47/** \brief Number of possible Boolean values */
48#define GIG_N_SWITCH   (2)
49
50/** \brief Signed 8-bit integer */
51typedef   signed char  t_int8;
52
53/** \brief Unsigned 8-bit integer */
54typedef unsigned char  t_uint8;
55
56/** \brief Signed 16-bit integer */
57typedef   signed short t_int16;
58
59/** \brief Unsigned 16-bit integer */
60typedef unsigned short t_uint16;
61
62/** \brief Signed 32-bit integer */
63typedef   signed int   t_int32;
64
65/** \brief Unsigned 32-bit integer */
66typedef unsigned int   t_uint32;
67
68/** \brief Signed 64-bit integer */
69typedef   signed long long  t_int64;
70
71/** \brief Unsigned 64-bit integer */
72typedef unsigned long long  t_uint64;
73
74/** \brief type for names */
75typedef char* t_name ;
76
77/** \brief type for integer/pointer data */
78typedef long t_intptr ;
79
80/** \brief type for unsigned integer/pointer data */
81typedef unsigned long t_uintptr ;
82
83/** \brief Swap two bytes inside a half word */
84#define swap16(x) (              \
85  (t_uint16)(((t_uint16)(x) & 0xff) << 8 | ((t_uint16)(x) & 0xff00) >> 8)  \
86)
87
88/** \brief Swap four bytes inside a word */
89#define swap32(x) (              \
90    (t_uint32)(((t_uint32)(x) & 0xff) << 24 |        \
91    ((t_uint32)(x) & 0xff00) << 8 | ((t_uint32)(x) & 0xff0000) >> 8 |  \
92    ((t_uint32)(x) & 0xff000000) >> 24)    \
93)
94
95#define u__(n)  ((unsigned)(n))       /**< \internal */
96
97#define BIT(n)          (1U<<u__(n))  /**< \brief Return value with bit n */
98
99#define BIT_SET(y, mask) \
100  ((y) |=  u__(mask))                 /**< \brief Set given bits to 1   */
101
102#define BIT_CLEAR(y, mask) \
103  ((y) &= ~u__(mask))                 /**< \brief Clear given bits to 0 */
104
105#define BIT_FLIP(y, mask) \
106  ((y) ^=  u__(mask))                 /**< \brief Invert given bits     */
107
108/** \brief  Return bitmask with first n bits set to 1. E.g.
109 *          BITMASK(3) = 00000111
110 */
111#define BIT_MASK(len) (BIT(len)-1u)
112
113/** \brief  Assigns value to y filtered by mask. \a Important: y is evaluated
114 *          twice, once to read it's value and the other to write it.
115 */
116#define BM_SET(y,value,mask) ((y)=((y)&~(mask))|((value)&(mask)))
117
118
119#define BF_MASK(start, len) ( BIT_MASK(len) << (start) )
120#define BF_PREP(y, start, len) (((y) & BIT_MASK(len)) << (start))
121#define BF_GET(y, start, len) (((y)>>(start)) & BIT_MASK(len))
122#define BF_SET(y, x, start, len) (   (y) = ( (y) & ~BF_MASK(start, len) ) | BF_PREP(x, start, len)   )
123
124
125#define hex__(x)  (0x##x##UL)         /**< \internal */
126/** \internal */
127#define bin8__(x)  (                  \
128    ((x) & 0x0000000FUL ? BIT(0) : 0) \
129  | ((x) & 0x000000F0UL ? BIT(1) : 0) \
130  | ((x) & 0x00000F00UL ? BIT(2) : 0) \
131  | ((x) & 0x0000F000UL ? BIT(3) : 0) \
132  | ((x) & 0x000F0000UL ? BIT(4) : 0) \
133  | ((x) & 0x00F00000UL ? BIT(5) : 0) \
134  | ((x) & 0x0F000000UL ? BIT(6) : 0) \
135  | ((x) & 0xF0000000UL ? BIT(7) : 0))
136
137/** \brief Easy writing of 8 bit binary literals. eg.
138 *
139 *  BIN8(00110101)
140 */
141#define BIN8(a)         ((t_uint8)bin8__(hex__(a)))
142
143/** \brief Easy writing of 16 bit binary literals. eg.
144 *
145 *  BIN16(00110101,00101111)
146 */
147#define BIN16(a,b)      ((t_uint16)BIN8(a) << 8 | BIN8(b))
148
149/** \brief Easy writing of 32 bit binary literals. eg.
150 *
151 *  BIN32(00110101,00101111,10101001,00001111)
152 */
153#define BIN32(a,b,c,d)  ((t_uint32)BIN16(a,b) << 16 | BIN16(c,d))
154
155#else /*GIGTYPES_H_*/
156#error "Header file __GIGTYPE_H__ has already been included!"
157#endif /*GIGTYPES_H_*/
158
159/*@}*/
160