1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     nnet.h
4 
5   Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 /* Please see man pages for details
17 
18  */
19 
20 #ifndef NN_NET_COMPATIBLE_NNET_NNET_H_
21 #define NN_NET_COMPATIBLE_NNET_NNET_H_
22 
23 #include <nn/net/compatible/nos.h>            /* for NOS*** */
24 
25 #ifdef  __cplusplus
26 extern "C" {
27 #endif
28 
29 /*---------------------------------------------------------------------------*
30  * Definitions
31  *---------------------------------------------------------------------------*/
32 
33 #define NNET_ERROR_BASE                          0xfff70000
34 #define NNET_ERROR_CODE(code)                    ((s32)(NNET_ERROR_BASE|(code)))
35 
36 /* Please see man pages for details
37 
38  */
39 enum {
40     NNET_ERR_PARAM        = NNET_ERROR_CODE(1),     /* Please see man pages for details */
41     NNET_ERR_EXIST        = NNET_ERROR_CODE(2),     /* Please see man pages for details */
42     NNET_ERR_NOMEM        = NNET_ERROR_CODE(3),     /* Please see man pages for details */
43     NNET_ERR_RECEIVE      = NNET_ERROR_CODE(4),     /* Please see man pages for details */
44     NNET_ERR_SEND         = NNET_ERROR_CODE(5),     /* Please see man pages for details */
45     NNET_ERR_RESOURCE     = NNET_ERROR_CODE(6),     /* Please see man pages for details */
46     NNET_ERR_CANCEL       = NNET_ERROR_CODE(7),     /* Please see man pages for details */
47     NNET_ERR_BUSY         = NNET_ERROR_CODE(8),     /* Please see man pages for details */
48     NNET_ERR_STATE        = NNET_ERROR_CODE(9),     /* Please see man pages for details */
49     NNET_ERR_NONE         = 0                       /* Please see man pages for details */
50 };
51 
52 /*---------------------------------------------------------------------------*
53  * Types/Declarations
54  *---------------------------------------------------------------------------*/
55 #define NNET_TMO_WAITFOREVER    (-1L)   /* Infinite wait */
56 
57 #define NNET_ETH_ALEN       6       /* MAC address length */
58 #define NNET_IP_ALEN        4       /* IPv4 address length */
59 
60 #define NNET_MIN(a, b)   (((a) < (b)) ? (a) : (b))    /* Please see man pages for details */
61 #define NNET_MAX(a, b)   (((a) > (b)) ? (a) : (b))    /* Please see man pages for details */
62 
63 
64 /* Please see man pages for details
65 
66  */
67 typedef struct NNETAllocator {
68     void*    (* alloc) (u32 name, u32 size, u32 align); /* Please see man pages for details */
69     void     (* free) (u32 name, void* ptr);            /* Please see man pages for details */
70 } NNETAllocator;
71 
72 /* Please see man pages for details
73 
74  */
75 typedef struct NNETInstance {
76     struct NNETInstance *lower_ins; /* Please see man pages for details */
77     s32 (* startup) (struct NNETInstance *ins, s32 timeout);    /* Please see man pages for details */
78     s32 (* cleanup) (struct NNETInstance *ins, s32 timeout);    /* Please see man pages for details */
79     s32 (* abort)   (struct NNETInstance *ins);                 /* Please see man pages for details */
80 } NNETInstance;
81 
82 /* Please see man pages for details
83 
84  */
85 typedef struct NNETConfig {
86     u8 addr[NNET_IP_ALEN];      /* Please see man pages for details */
87     u8 gateway[NNET_IP_ALEN];   /* Please see man pages for details */
88     u8 dns1[NNET_IP_ALEN];      /* Please see man pages for details */
89     u8 dns2[NNET_IP_ALEN];      /* Please see man pages for details */
90     s32 mtu;                    /* Please see man pages for details */
91 } NNETConfig;
92 
93 
94 #define NNET_L2TYPE_ETHERNET    1   /* Please see man pages for details */
95 #define NNET_L2TYPE_PPP         2   /* Please see man pages for details */
96 
97 /* Please see man pages for details
98 
99  */
100 typedef struct NNETEthernetAPI {
101     NNETInstance *ins;
102     s32 (* eth_send) (NNETInstance *ins, u8 *dstMAC, NOSMessageBuf *mbuf);           /* Please see man pages for details */
103     s32 (* eth_receive) (NNETInstance *ins, u32 receive_id, NOSMessageBuf **mbuf);   /* Please see man pages for details */
104     s32 (* eth_setupper) (NNETInstance *ins, NNETInstance *upper_ins, u32 *receive_id, u16 list[]); /* Please see man pages for details */
105     s32 (* eth_clearupper) (NNETInstance *ins, NNETInstance *upper_ins);             /* Please see man pages for details */
106     u8  eth_type;                                                                    /* Please see man pages for details */
107     s32 (* eth_getmacaddr) (NNETInstance *ins, u8 *mac);                             /* Please see man pages for details */
108     s32 (* eth_setmulticast) (NNETInstance *ins, u8 *mac);                           /* Please see man pages for details */
109     s32 (* eth_clearmulticast) (NNETInstance *ins, u8 *mac);                         /* Please see man pages for details */
110     s32 (* eth_cancel_receive) (NNETInstance *ins, u32 receive_id);                  /* Please see man pages for details */
111     s32 (* eth_getconfig) (NNETInstance *ins, NNETConfig *config);                   /* Please see man pages for details */
112 } NNETEthernetAPI;
113 
114 
115 /* Please see man pages for details
116 
117  */
118 typedef struct NNETPPPAPI {
119     NNETInstance *ins;
120     s32 (* ppp_send) (NNETInstance *ins, NOSMessageBuf *mbuf);                       /* Please see man pages for details */
121     s32 (* ppp_receive) (NNETInstance *ins, NOSMessageBuf **mbuf);                   /* Please see man pages for details */
122     s32 (* ppp_setupper) (NNETInstance *ins, NNETInstance *upper_ins);               /* Please see man pages for details */
123     s32 (* ppp_clearupper) (NNETInstance *ins, NNETInstance *upper_ins);             /* Please see man pages for details */
124     s32 (* ppp_cancel_receive) (NNETInstance *ins);                                  /* Please see man pages for details */
125 } NNETPPPAPI;
126 
127 /*---------------------------------------------------------------------------*
128  * Function Prototypes
129  *---------------------------------------------------------------------------*/
130 extern NNETInstance *NNET_GetBottomIF(const NNETInstance *upper_ins);
131 extern NNETInstance *NNET_GetUpperIFByTop(const NNETInstance *top_ins, const NNETInstance *low_ins);
132 extern NNETInstance *NNET_GetLowerIF(NNETInstance *upper_ins);
133 extern s32 NNET_StartupIF(NNETInstance *ins, s32 timeout);
134 extern s32 NNET_CleanupIF(NNETInstance *ins, s32 timeout);
135 extern s32 NNET_AbortIF(NNETInstance *ins);
136 
137 #ifdef NNET_BIG_ENDIAN
138 #define NNET_Swp2( _d )  d
139 #else
140 #define NNET_Swp2( _d )  ((u16)((((_d)>>8)&0x00FF)|(((_d)<<8)&0xFF00)))
141 #endif
142 extern u16 NNET_Get2( const void* ptr );
143 extern u16 NNET_Set2( void* ptr, u16 dat );
144 extern u16 NNET_And2( void* ptr, u16 dat );
145 extern u16 NNET_Orr2( void* ptr, u16 dat );
146 extern u16 NNET_Inc2( void* ptr );
147 extern u16 NNET_Dec2( void* ptr );
148 extern u16 NNET_Sub2( void* ptr, u16 dat );
149 
150 extern u32 NNET_Get4( const void* ptr );
151 extern u32 NNET_Get4( const void* ptr );
152 extern u32 NNET_Set4( void* ptr, u32 dat );
153 extern u32 NNET_Inc4( void* ptr );
154 extern u32 NNET_Add4( void* ptr, u32 dat );
155 
156 #include <nn/net/compatible/nnet/nnet_ring.h>
157 
158 
159 /*
160     Definitions for debugging
161 */
162 #include <nn/net/compatible/ndebug.h>
163 
164 #ifdef NDEBUG_ENABLE
165 
166 #define NNET_DBGASSERT(cond)  NDEBUG_Assert(cond)
167 
168 #else  /* NDEBUG_ENABLE */
169 
170 #define NNET_DBGASSERT(cond)
171 
172 #endif  /* NDEBUG_ENABLE */
173 
174 
175 #ifdef NDEBUG_PRINT_ENABLE
176 
177 extern u32 ndebug_mask_nnet;
178 
179 #define NNET_DBGREPORT(level, log)         \
180     do {                                  \
181         if( level & ndebug_mask_nnet ) {   \
182             NDEBUG_Printf ("[NNET] ");    \
183             NDEBUG_Printf log;            \
184             NDEBUG_Printf ("\n");         \
185         }                                 \
186     } while (0)
187 
188 #define NNET_DBGFUNC(level, func)          \
189     do {                                  \
190         if( level & ndebug_mask_nnet ) {   \
191             func;                         \
192         }                                 \
193     } while (0)
194 
195 #else /* NDEBUG_PRINT_ENABLE */
196 
197 #define NNET_DBGREPORT(level, log)
198 #define NNET_DBGFUNC(level, func)
199 
200 #endif /* NDEBUG_PRINT_ENABLE */
201 
202 
203 #ifdef  __cplusplus
204 }
205 #endif
206 
207 /* NN_NET_COMPATIBLE_NNET_NNET_H_ */
208 #endif
209