1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     nwmeth.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 
17 #ifndef NN_NETWORK_NWMETH_H
18 #define NN_NETWORK_NWMETH_H
19 
20 #include <nnet.h>
21 #include <nnet/nnet_ext.h>
22 
23 #ifdef  __cplusplus
24 extern "C" {
25 #endif
26 
27 /*---------------------------------------------------------------------------*
28  * Definitions
29  *---------------------------------------------------------------------------*/
30 #define NWMETH_DEVICE_1               0           /* Only 1 interface can be used with this driver */
31 
32 #define NWMETH_USE_MBUF               1
33 
34 #define NWMETH_VENDOR_NINTENDO        0x0000
35 #define NWMETH_COMMON_CONF_VERSION    0x1100
36 #define NWMETH_INS_CONF_VERSION       0x2100
37 
38 /* Please see man pages for details
39 
40  */
41 #define NWMETH_ERROR_BASE                          0xffff9000
42 #define NWMETH_ERROR_CODE(code)                    ((s32)(NWMETH_ERROR_BASE | (code)))
43 enum
44 {
45     NWMETH_ERR_PARAM = NWMETH_ERROR_CODE(1),            /* Parameter error */
46     NWMETH_ERR_INIT = NWMETH_ERROR_CODE(2),             /* Cannot run because it is in initialized state */
47     NWMETH_ERR_FINISH = NWMETH_ERROR_CODE(3),           /* Cannot run because it is in terminated state */
48     NWMETH_ERR_CONFVER = NWMETH_ERROR_CODE(4),          /* Setting version error */
49     NWMETH_ERR_STATE = NWMETH_ERROR_CODE(5),            /* State error */
50     NWMETH_ERR_EXIST = NWMETH_ERROR_CODE(6),            /* Already created */
51     NWMETH_ERR_NOMEM = NWMETH_ERROR_CODE(7),            /* Insufficient memory */
52     NWMETH_ERR_TIMEOUT = NWMETH_ERROR_CODE(8),          /* timeout */
53     NWMETH_ERR_IO = NWMETH_ERROR_CODE(9),
54     NWMETH_ERR_NONE = 0                                 /* Normal end */
55 };
56 
57 /* Please see man pages for details
58 
59  */
60 #define NWMETH_MEM_BASE                            0x00050000
61 #define NWMETH_MEM_NAME(name)                    ((s32)(NWMETH_MEM_BASE | (name)))
62 enum
63 {
64     NWMETH_MEM_INSTANCE = NWMETH_MEM_NAME(1)
65 };
66 
67 /* Please see man pages for details
68 
69  */
70 enum
71 {
72     NWMETH_STATE_INIT = 0,        /* Initial state */
73     NWMETH_STATE_ACTIVE,          /* Connection completed state */
74     NWMETH_STATE_DESTROY,
75     NWMETH_STATE_ABORT            /* Connection completed state */
76 };
77 
78 /*---------------------------------------------------------------------------*
79  * Types/Declarations
80  *---------------------------------------------------------------------------*/
81 
82 /* Please see man pages for details
83 
84  */
85 #define NWMETH_UPPER_NUM            2                       /* Number of upper layers   */
86 #define NWMETH_RXFRAME_BUFFUR_COUNT 16                      /* Size of queue to pass to upper layers */
87 #define NWMETH_STACK_SIZE           4096
88 
89 #define NWMETH_PROTOCOL_ENTRY_MAX   16
90 
91 typedef struct NWMETHQueuePair
92 {
93     NOSMessageQueue mq;                                     /* Receive queue for upper layers */
94     NOSMessage      msg[NWMETH_RXFRAME_BUFFUR_COUNT];       /* Receive queue instance for upper layers */
95 } NWMETHQueuePair;
96 
97 typedef struct NWMETHInstance
98 {
99     NNETInstance        netIns;                             /* Instance information common to all layers */
100     NNETProtocolList    protocolList;
101 
102     NWMETHQueuePair     upper_mq[NWMETH_UPPER_NUM];          /* Receive queue for upper layers */
103     s32 upper_ins_count;
104 
105     s32 state;
106 
107     u8  macaddr[NNET_ETH_ALEN];                             /* Local MAC address */
108     u16 pad;
109 
110     u8  sendBuf[NNET_MAX_SEND_LEN];                         /* Send buffer */
111     u8  recvBuf[NNET_MAX_RECV_LEN];
112     NOSThread   thread;
113     NOSThreadId threadId;
114     u8 stack[NWMETH_STACK_SIZE];
115 
116 } NWMETHInstance;
117 
118 /*
119     Get NNETInstance from WCM instance
120 */
NWMETH_GetNNETInstance(NWMETHInstance * pNwmIns)121 static inline NNETInstance* NWMETH_GetNNETInstance(NWMETHInstance* pNwmIns)
122 {
123     return &pNwmIns->netIns;
124 }
125 
126 /*
127     Get WCM instance from NNETInstance
128 */
NWMETH_GetNWMETHInstance(NNETInstance * pNetIns)129 static inline NWMETHInstance* NWMETH_GetNWMETHInstance(NNETInstance* pNetIns)
130 {
131     return (NWMETHInstance*)pNetIns;
132 }
133 
134 /*---------------------------------------------------------------------------*
135  * Function Prototypes
136  *---------------------------------------------------------------------------*/
137 /* nwmeth_Main.cpp */
138 void* NWMETHi_Alloc(u32 name, u32 size, u32 align);
139 void  NWMETHi_Free(u32 name, void* ptr);
140 
141 s32 NWMETH_Init(const NNETAllocator* allocator);
142 s32 NWMETH_Finish(void);
143 s32 NWMETH_GetMacAddr(NNETInstance* ins, u8* macaddr);
144 
145 void NWMETHi_HandleFrame(NWMETHInstance* pNwmIns, NOSMessageBuf* mbuf);
146 void NWMETHi_HandleFrameRaw(NWMETHInstance* pNwmIns, const u8* pFrame, int len);
147 
148 /* nwmeth_Direct.cpp */
149 s32 NWMETH_CreateInsDirect(NWMETHInstance** pNwmEth);
150 s32 NWMETH_DestroyInsDirect(NWMETHInstance* pNwmEth);
151 s32 NWMETH_GetUpperDirectAPI(NNETEthernetAPI* pEtherAPI, NWMETHInstance* pNwmEth);
152 
153 /* nwmeth_Ipc.cpp */
154 s32 NWMETH_CreateIns(NWMETHInstance** pNwmEth);
155 s32 NWMETH_DestroyIns(NWMETHInstance* pNwmEth);
156 s32 NWMETH_GetUpperAPI(NNETEthernetAPI* pEtherAPI, NWMETHInstance* pNwmEth);
157 
158 
159 #ifdef  __cplusplus
160 }
161 #endif
162 
163 /* NN_NETWORK_NWMETH_H */
164 #endif
165