/*---------------------------------------------------------------------------* Project: Horizon File: hioeth.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 12449 $ *---------------------------------------------------------------------------*/ #ifndef NN_NETWORK_HIOETH_H #define NN_NETWORK_HIOETH_H #include #include #ifdef __cplusplus extern "C" { #endif /*---------------------------------------------------------------------------* * Definitions *---------------------------------------------------------------------------*/ #define HIOETH_DEVICE_1 0 /* このドライバで扱えるI/Fは1つだけ */ #define HIOETH_VENDOR_NINTENDO 0x0000 #define HIOETH_COMMON_CONF_VERSION 0x1100 #define HIOETH_INS_CONF_VERSION 0x2100 /** * エラーコード */ #define HIOETH_ERROR_BASE 0xffff9000 #define HIOETH_ERROR_CODE(code) ((s32)(HIOETH_ERROR_BASE | (code))) enum { HIOETH_ERR_PARAM = HIOETH_ERROR_CODE(1), /* パラメータエラー */ HIOETH_ERR_INIT = HIOETH_ERROR_CODE(2), /* 初期状態のため実行不可 */ HIOETH_ERR_FINISH = HIOETH_ERROR_CODE(3), /* 終了状態のため実行不可 */ HIOETH_ERR_CONFVER = HIOETH_ERROR_CODE(4), /* 設定のバージョンエラー */ HIOETH_ERR_STATE = HIOETH_ERROR_CODE(5), /* ステートエラー */ HIOETH_ERR_EXIST = HIOETH_ERROR_CODE(6), /* 既に作成済み */ HIOETH_ERR_NOMEM = HIOETH_ERROR_CODE(7), /* メモリ不足 */ HIOETH_ERR_TIMEOUT = HIOETH_ERROR_CODE(8), /* タイムアウト */ HIOETH_ERR_IO = HIOETH_ERROR_CODE(8), HIOETH_ERR_NONE = 0 /* 正常終了 */ }; /** * メモリ */ #define HIOETH_MEM_BASE 0x00050000 #define HIOETH_MEM_NAME(name) ((s32)(HIOETH_MEM_BASE | (name))) enum { HIOETH_MEM_INSTANCE = HIOETH_MEM_NAME(1) }; /** * ステート */ enum { HIOETH_STATE_INIT = 0, /* 初期状態 */ HIOETH_STATE_ACTIVE, /* 接続完了状態 */ HIOETH_STATE_DESTROY, HIOETH_STATE_ABORT /* 接続完了状態 */ }; /*---------------------------------------------------------------------------* * Types/Declarations *---------------------------------------------------------------------------*/ /** * インスタンス */ #define HIOETH_UPPER_NUM 2 /* 上位のレイヤ数 */ #define HIOETH_MQ_NUM 16 /* 上位へ渡すキューのサイズ */ #define HIOETH_MAX_SEND_LEN 1600 #define HIOETH_MAX_RECV_LEN 1600 #define HIOETH_STACK_SIZE 4096 typedef struct HIOETHQueuePair { NOSMessageQueue mq; /* 上位用の受信キュー */ NOSMessage msg[HIOETH_MQ_NUM]; /* 上位用の受信キュー実体 */ } HIOETHQueuePair; typedef struct HIOETHInstance { NNETInstance netIns; /* 全レイヤ共通に持っているインスタンス情報 */ NNETProtocolList protocolList; HIOETHQueuePair upper_mq[HIOETH_UPPER_NUM]; /* 上位用の受信キュー */ s32 upper_ins_count; s32 state; s32 handleHostToTarget; s32 handleTargetToHost; u8 macaddr[NNET_ETH_ALEN]; /* 自MACアドレス */ u16 pad; u8 sendBuf[HIOETH_MAX_SEND_LEN]; /* 送信バッファ */ u8 recvBuf[HIOETH_MAX_RECV_LEN]; u32 recvBufPos; NOSThread thread; NOSThreadId threadId; u8 stack[HIOETH_STACK_SIZE]; } HIOETHInstance; /* WCMのインスタンスからNNETInstanceを取得する */ static inline NNETInstance* HIOETH_GetNNETInstance(HIOETHInstance* pHioIns) { return &pHioIns->netIns; } /* NNETInstanceからWCMのインスタンスを取得する */ static inline HIOETHInstance* HIOETH_GetHIOETHInstance(NNETInstance* pNetIns) { return (HIOETHInstance*)pNetIns; } /*---------------------------------------------------------------------------* * Function Prototypes *---------------------------------------------------------------------------*/ /* HIOETH_main.c */ extern s32 HIOETH_Init(const NNETAllocator* allocator); extern s32 HIOETH_Finish(void); extern s32 HIOETH_StartupIns(NNETInstance* ins, s32 timeout); extern s32 HIOETH_CleanupIns(NNETInstance* ins, s32 timeout); extern s32 HIOETH_AbortIns(NNETInstance* ins); extern s32 HIOETH_CreateIns(HIOETHInstance** peth_ins); extern s32 HIOETH_DestroyIns(HIOETHInstance* peth_ins); extern s32 HIOETH_GetStateIns(HIOETHInstance* peth_ins); extern s32 HIOETH_GetUpperAPI(NNETEthernetAPI* wcm_api, HIOETHInstance* peth_ins); extern s32 HIOETH_SetUpper(NNETInstance * ins, NNETInstance * upper_ins, u32* receive_id, u16 entry[]); extern s32 HIOETH_ClearUpper(NNETInstance* ins, NNETInstance* upper_ins); extern s32 HIOETH_GetMacAddr(NNETInstance* ins, u8* macaddr); extern s32 HIOETH_SetMulticastAddr(NNETInstance* ins, u8* macaddr); extern s32 HIOETH_ClearMulticastAddr(NNETInstance* ins, u8* macaddr); extern s32 HIOETH_Send(NNETInstance* ins, u8* dstMAC, NOSMessageBuf* mbuf); extern s32 HIOETH_Receive(NNETInstance* ins, u32 receive_id, NOSMessageBuf** mbuf); extern s32 HIOETH_CancelReceive(NNETInstance* ins, u32 receive_id); #ifdef __cplusplus } #endif /* NN_NETWORK_HIOETH_H */ #endif