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 NNET_H 21 #define 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 /* NNET_H */ 208 #endif 209