/*------------------------------------------------------------------------------*/
/* TOPPERS/ASP Windows Debug Environment                                        */
/* Copyright (C) 2010-2013 Cores Co., Ltd. Japan                                */
/*------------------------------------------------------------------------------*/
/* $Id: v850ecreg.h 115 2013-02-11 02:13:05Z nagasima $ */

#ifndef V850ECRegH
#define V850ECRegH

#include "target_stddef.h"

#define MIICTL			((uint8_t *)0xFFFFFBE0)		/* イーサネット・コントロール・レジスタ */
#define MIICTL_MIIEN	0x01

#define MACC1			((uint32_t *)0x002E0000)	/* MAC設定レジスタ1 R/W 00000000H */
#define MACC1_SRXEN		0x00000200					/* 受信イネーブル */
#define MACC1_CRCEN		0x00000008					/* CRC付加 */
#define MACC1_PADEN		0x00000004					/* PAD付加 */
#define MACC1_FULLD		0x00000002					/* 全二重イネーブル */

#define MACC2			((uint32_t *)0x002E0004)	/* MAC設定レジスタ2 R/W 00000000H */
#define MACC2_MCRST		0x00000400					/* MAC制御部ソフトウエア・リセット */
#define MACC2_RFRST		0x00000200					/* 受信ブロック・ソフトウエア・リセット */
#define MACC2_TFRST		0x00000100					/* 送信ブロック・ソフトウエア・リセット */

#define IPGT			((uint32_t *)0x002E0008)	/* Back-to-Back IPGレジスタ R/W 00000013H */
#define IPGR			((uint32_t *)0x002E000C)	/* NON Back-to-Back IPGレジスタ R/W 00000E13H */
#define CLRT			((uint32_t *)0x002E0010)	/* コリジョン・レジスタ R/W 0000380FH */
#define LMAX			((uint32_t *)0x002E0014)	/* 最大パケット長レジスタ R/W 00000600H */
#define LSA1			((uint32_t *)0x002E0054)	/* ステーション・アドレス・レジスタ1 R/W 00000000H */
#define LSA2			((uint32_t *)0x002E0058)	/* ステーション・アドレス・レジスタ2 R/W 00000000H */
#define PTVR			((uint32_t *)0x002E005C)	/* ポーズ・タイマ値リード・レジスタ R 00000000H */
#define VLTP			((uint32_t *)0x002E0064)	/* VLANタイプ・レジスタ R/W 00000000H */

#define MIIC			((uint32_t *)0x002E0080)	/* MIIコンフィギュレ−ション・レジスタ R/W 00000000H */
#define MIIC_MIRST		0x00008000					/* シリアル・マネジメント・インタフェース・ブロック・ソフトウエア・リセット */
#define MIIC_CLKS_50MHZ	0x00000008					/* MDCの分周比設定 50 MHz以下（20分周） */

#define MCMD			((uint32_t *)0x002E0094)	/* MIIコマンド・レジスタ W 00000000H */
#define MADR			((uint32_t *)0x002E0098)	/* MIIアドレス・レジスタ R/W 00000000H */
#define MWTD			((uint32_t *)0x002E009C)	/* MIIライト・データ・レジスタ R/W 00000000H */
#define MRDD			((uint32_t *)0x002E00A0)	/* MIIリード・データ・レジスタ R/W 00000000H */
#define MIND			((uint32_t *)0x002E00A4)	/* MIIインジケータ・レジスタ R 00000000H */

#define AFR				((uint32_t *)0x002E00C8)	/* アドレス・フィルタ・レジスタ R/W 00000000H */
#define AFR_ABC			0x00000001					/* ブロードキャスト受信 */

#define HT1				((uint32_t *)0x002E00CC)	/* HASHテーブル・レジスタ1 R/W 00000000H */
#define HT2				((uint32_t *)0x002E00D0)	/* HASHテーブル・レジスタ2 R/W 00000000H */
#define CAR1			((uint32_t *)0x002E00DC)	/* キャリー・レジスタ1 R/W 00000000H */
#define CAR2			((uint32_t *)0x002E00E0)	/* キャリー・レジスタ2 R/W 00000000H */
#define CAM1			((uint32_t *)0x002E0130)	/* キャリー・マスク・レジスタ1 R/W 00000000H */
#define CAM2			((uint32_t *)0x002E0134)	/* キャリー・マスク・レジスタ2 R/W 00000000H */
#define RBYT			((uint32_t *)0x002E0140)	/* 受信バイト・カウンタ R/W 00000000H */
#define RPKT			((uint32_t *)0x002E0144)	/* 受信パケット・カウンタ R/W 00000000H */
#define RFCS			((uint32_t *)0x002E0148)	/* 受信FCSエラー・フレーム・カウンタ R/W 00000000H */
#define RMCA			((uint32_t *)0x002E014C)	/* 受信マルチキャスト・パケット・カウンタ R/W 00000000H */
#define RBCA			((uint32_t *)0x002E0150)	/* 受信ブロードキャスト・パケット・カウンタ R/W 00000000H */
#define RXCF			((uint32_t *)0x002E0154)	/* 受信コントロール・フレーム・パケット・カウンタ R/W 00000000H */
#define RXPF			((uint32_t *)0x002E0158)	/* 受信ポーズ・フレーム・パケット・カウンタ R/W 00000000H */
#define RXUO			((uint32_t *)0x002E015C)	/* 受信未定義コントロール・パケット・カウンタ R/W 00000000H */
#define RALN			((uint32_t *)0x002E0160)	/* 受信アライメント・エラー・カウンタ R/W 00000000H */
#define RFLR			((uint32_t *)0x002E0164)	/* 受信フレーム長エラー・カウンタ R/W 00000000H */
#define RCDE			((uint32_t *)0x002E0168)	/* 受信コード・エラー・カウンタ R/W 00000000H */
#define RFCR			((uint32_t *)0x002E016C)	/* 受信False Carrier カウンタ R/W 00000000H */
#define RUND			((uint32_t *)0x002E0170)	/* 受信アンダサイズ・パケット・カウンタ R/W 00000000H */
#define ROVR			((uint32_t *)0x002E0174)	/* 受信オーバサイズ・パケット・カウンタ R/W 00000000H */
#define RFRG			((uint32_t *)0x002E0178)	/* 受信フラグメント・カウンタ R/W 00000000H */
#define RJBR			((uint32_t *)0x002E017C)	/* 受信ジャバー・カウンタ R/W 00000000H */
#define R64				((uint32_t *)0x002E0180)	/* 受信64バイト・フレーム・カウンタ R/W 00000000H */
#define R127			((uint32_t *)0x002E0184)	/* 受信65-127バイト・フレーム・カウンタ R/W 00000000H */
#define R255			((uint32_t *)0x002E0188)	/* 受信128-255バイト・フレーム・カウンタ R/W 00000000H */
#define R511			((uint32_t *)0x002E018C)	/* 受信256-511バイト・フレーム・カウンタ R/W 00000000H */
#define R1K				((uint32_t *)0x002E0190)	/* 受信512-1023バイト・フレーム・カウンタ R/W 00000000H */
#define RMAX			((uint32_t *)0x002E0194)	/* 受信1024-RMAXバイト・フレーム・カウンタ R/W 00000000H */
#define RVBT			((uint32_t *)0x002E0198)	/* 受信有効バイト・カウンタ R/W 00000000H */
#define TBYT			((uint32_t *)0x002E01C0)	/* 送信バイト・カウンタ R/W 00000000H */
#define TPKT			((uint32_t *)0x002E01C4)	/* 送信パケット・カウンタ R/W 00000000H */
#define TFCS			((uint32_t *)0x002E01C8)	/* 送信FCSエラー・フレーム・カウンタ R/W 00000000H */
#define TMCA			((uint32_t *)0x002E01CC)	/* 送信マルチキャスト・パケット・カウンタ R/W 00000000H */
#define TBCA			((uint32_t *)0x002E01D0)	/* 送信ブロードキャスト・パケット・カウンタ R/W 00000000H */
#define TUCA			((uint32_t *)0x002E01D4)	/* 送信ユニキャスト・パケット・カウンタ R/W 00000000H */
#define TXPF			((uint32_t *)0x002E01D8)	/* 送信ポーズ・コントロール・フレーム・カウンタ R/W 00000000H */
#define TDFR			((uint32_t *)0x002E01DC)	/* 送信遅延パケット・カウンタ R/W 00000000H */
#define TXDF			((uint32_t *)0x002E01E0)	/* 送信過剰遅延パケット・カウンタ R/W 00000000H */
#define TSCL			((uint32_t *)0x002E01E4)	/* 送信シングル・コリジョン・パケット・カウンタ R/W 00000000H */
#define TMCL			((uint32_t *)0x002E01E8)	/* 送信マルチプル・コリジョン・パケット・カウンタ R/W 00000000H */
#define TLCL			((uint32_t *)0x002E01EC)	/* 送信レイト・コリジョン・パケット・カウンタ R/W 00000000H */
#define TXCL			((uint32_t *)0x002E01F0)	/* 送信過剰コリジョン・パケット・カウンタ R/W 00000000H */
#define TNCL			((uint32_t *)0x002E01F4)	/* 送信トータル・コリジョン・カウンタ R/W 00000000H */
#define TCSE			((uint32_t *)0x002E01F8)	/* 送信キャリア・センス・エラー・カウンタ R/W 00000000H */
#define TIME			((uint32_t *)0x002E01FC)	/* MAC内部エラー・カウンタ R/W 00000000H */

#define MFFCONT			((uint32_t *)0x002E0200)	/* FIFOコントローラ・コントロール・レジスタ R/W 00000000H */
#define MFFCONT_RXSDMA	0x00008000
#define MFFCONT_APS		0x00000800
#define MFFCONT_APL		0x00000400
#define MFFCONT_RXEN	0x00000100					/* 受信イネーブル */
#define MFFCONT_TXEN	0x00000001					/* 送信イネーブル */

#define RSTCNT			((uint32_t *)0x002E0204)	/* ソフト・リセット制御レジスタ R/W 00000000H */
#define RSTCNT_SFTRST	0x00000001					/* ソフトウエア・リセット */

#define FLOWTHRESH		((uint32_t *)0x002E0218)	/* フロー制御閾値レジスタ R/W 06000200H */
#define PAUSETM			((uint32_t *)0x002E021C)	/* ポーズ・タイマ値レジスタ R/W 7FFFFFFFH */

#define RXERSEL			((uint32_t *)0x002E0220)	/* 受信エラー選択レジスタ R/W 00000001H */
#define RXERSEL_RLENE	0x80000000					/* 受信パケット・レングス・エラー */
#define RXERSEL_VLAN	0x40000000					/* VLANパケット受信 */
#define RXERSEL_USOP	0x20000000					/* 未定義オペコード・コントロール・パケット受信 */
#define RXERSEL_RPCF	0x10000000					/* ポーズ・コントロール・パケット受信 */
#define RXERSEL_RCFR	0x08000000					/* コントロール・パケット受信 */
#define RXERSEL_DBNB	0x04000000					/* ドリブル・ニブルを含むパケットの受信 */
#define RXERSEL_RLOR	0x00400000					/* レングス・フィールドが，1500を越えるパケットの受信 */
#define RXERSEL_RLER	0x00200000					/* レングス・フィールドが，データ・フィールド長と不一致 */
#define RXERSEL_RCRCE	0x00100000					/* CRCエラー */
#define RXERSEL_RXER	0x00080000					/* RXER検出 */
#define RXERSEL_CEPS	0x00040000					/* False Carrier検出 */
#define RXERSEL_REPS	0x00020000					/* プリアンブル+SFDまでのパケット，あるいはデータ部が1ニブル */
#define RXERSEL_PAIG	0x00010000					/*   */
#define RXERSEL_TXRX	0x00000002					/* MACが受信中のコリジョン発生を検出した場合 */
#define RXERSEL_DVCF	0x00000001					/* MACが受信したパケットが有効なコントロール・パケットであると判断した場合 */

#define TXSTMONI1		((uint32_t *)0x002E0230)	/* 送信ステータス・モニタ1レジスタ R 00000000H */
#define TXSTMONI2		((uint32_t *)0x002E0234)	/* 送信ステータス・モニタ2レジスタ R 00000000H */
#define TXFINF1			((uint32_t *)0x002E0238)	/* 送信ステータス1レジスタ R 00000800H */
#define TXFINF2			((uint32_t *)0x002E023C)	/* 送信ステータス2レジスタ R 00000001H */
#define RXSTMONI		((uint32_t *)0x002E0240)	/* 受信ステータス・モニタ・レジスタ R 00000000H */
#define RXFINF1			((uint32_t *)0x002E0244)	/* 受信ステータス1レジスタ R 00000000H */
#define RXFINF2			((uint32_t *)0x002E0248)	/* 受信ステータス2レジスタ R 00000800H */
#define RXFINF3			((uint32_t *)0x002E024C)	/* 受信ステータス3レジスタ R 00000001H */

#define FSTATUS			((uint32_t *)0x002E0250)	/* FIFOステータス割り込みレジスタ R 00000000H */
#define FSTATUS_MASK	((uint32_t *)0x002E0254)	/* FIFOステータス割り込みマスク・レジスタ R/W 01011FFFH */
#define FSTATUS_MASK_TACOF	0x01000000				/* TXABTCNTレジスタ（TX ABORT COUNT）がオーバフロー */
#define FSTATUS_MASK_RACOF	0x00010000				/* RXABTCNTレジスタ（RX ABORT COUNT）がオーバフロー */
#define FSTATUS_MASK_TSUP	0x00001000				/* Tx Status Update */
#define FSTATUS_MASK_TFNRTY	0x00000800				/* 送信FIFO Abort（送信FIFO Not Retry） */
#define FSTATUS_MASK_TFWE	0x00000400				/* 送信FIFO書き込みエラー */
#define FSTATUS_MASK_RFFE	0x00000080				/* 受信FIFO Flag Error */
#define FSTATUS_MASK_RSUP	0x00000040				/* 受信ステータス・モニタ・レジスタ（RXSTMONI）が更新 */
#define FSTATUS_MASK_RFWE	0x00000010				/* 受信FIFO Write Error */
#define FSTATUS_MASK_RFOF	0x00000008				/* 受信FIFOがオーバフロー */
#define FSTATUS_MASK_RFFLW	0x00000002				/* 受信FIFOの容量が，FLOWTHRESH.FLOWTHRの設定値以上になった */
#define FSTATUS_MASK_RFZP	0x00000001				/* 受信FIFOの容量が，FLOWTHRESH.ZPTHRの設定値以上になった */

#define TXSTATUS		((uint32_t *)0x002E0258)	/* 送信ステータス割り込みレジスタ R 00000000H */
#define TXSTATUS_MASK	((uint32_t *)0x002E025C)	/* 送信テータス割り込みマスク・レジスタ R/W 000101FFH */
#define TXSTATUS_MASK_TAB	0x00010000				/* 送信アボートが発生 */
#define TXSTATUS_MASK_TGNT	0x00000080				/* LMAXを越える長さのパケットを送信 */
#define TXSTATUS_MASK_LCOL	0x00000040				/* レイト・コリジョンを検出 */
#define TXSTATUS_MASK_ECOL	0x00000020				/* 最大衝突回数を越える衝突が発生 */
#define TXSTATUS_MASK_TEDFR	0x00000010				/* 過剰送信遅延を検出 */
#define TXSTATUS_MASK_TDFR	0x00000008				/* 送信遅延が発生 */
#define TXSTATUS_MASK_TFLOR	0x00000004				/* レングス・フィールドが1500より大きい */
#define TXSTATUS_MASK_TFLER	0x00000002				/* レングス・フィールドがデータ・フィールド長と不一致 */
#define TXSTATUS_MASK_TCRCE	0x00000001				/* CRCエラー */

#define RXSTATUS		((uint32_t *)0x002E0260)	/* 受信ステータス割り込みレジスタ R 00000000H */
#define RXSTATUS_MASK	((uint32_t *)0x002E0264)	/* 受信ステータス割り込みマスク・レジスタ R/W 00007FFFH */
#define RXSTATUS_MASK_RLENE	0x00004000				/* 受信パケット・レングス・エラー */
#define RXSTATUS_MASK_VLAN	0x00002000				/* VLANパケット受信 */
#define RXSTATUS_MASK_USOP	0x00001000				/* 未定義オペコード・コントロール・パケット受信 */
#define RXSTATUS_MASK_RPCF	0x00000800				/* ポーズ・コントロール・パケット受信 */
#define RXSTATUS_MASK_RCFR	0x00000400				/* コントロール・パケット受信 */
#define RXSTATUS_MASK_DBNB	0x00000200				/* ドリブル・ニブルを含むパケットの受信 */
#define RXSTATUS_MASK_RLOR	0x00000100				/* レングス・フィールドが，1500を越えるパケットの受信 */
#define RXSTATUS_MASK_RLER	0x00000080				/* レングス・フィールドが，データ・フィールド長と不一致 */
#define RXSTATUS_MASK_RCRCE	0x00000040				/* 受信CRCエラー */
#define RXSTATUS_MASK_RXER	0x00000020				/* RXERを検出 */
#define RXSTATUS_MASK_CEPS	0x00000010				/* False Carrier検出 */
#define RXSTATUS_MASK_REPS	0x00000008				/* プリアンブル+SFDまでのパケット，あるいはデータ部が1ニブル */
#define RXSTATUS_MASK_PAIG	0x00000004				/* 前回の受信後，次のいずれかに当てはまる条件が発生 */
#define RXSTATUS_MASK_TXRX	0x00000002				/* 半二重受信中（受信開始直後）に送信を開始（コリジョン発生） */
#define RXSTATUS_MASK_DVCF	0x00000001				/* 受信したパケットが有効（エラーを含まない）コントロール・パケットであった場合 */

#define TXABTCNT		((uint32_t *)0x002E0270)	/* 送信アボート・カウンタ R/W 00000000H */
#define RXABTCNT		((uint32_t *)0x002E0274)	/* 受信アボート・カウンタ R/W 00000000H */
#define ETHMODE			((uint32_t *)0x002E0300)	/* コア・ファンクション制御レジスタ R/W 00000000H */
#define ETHMODE_RXS		0x00040000					/* 受信許可 */
#define ETHMODE_TXS		0x00020000					/* 送信許可 */

#define INTMS			((uint32_t *)0x002E0304)	/* 割り込み制御レジスタ R/W 07000700H */
#define INTMS_RBEMSK	0x04000000					/* RBEI割り込みマスク */
#define INTMS_RECMSK	0x02000000					/* RECI割り込みマスク */
#define INTMS_RXMSK		0x01000000					/* RXI割り込みマスク */
#define INTMS_RBEI		0x00040000					/* 受信データ・バッファ・アクセス・エラー割り込み */
#define INTMS_RECI		0x00020000					/* 受信（DMA）エンド・オブ・チェイン割り込み */
#define INTMS_RXI		0x00010000					/* パケット受信（DMA）完了の割り込み */
#define INTMS_TBEMSK	0x00000400					/* TBEI割り込みマスク */
#define INTMS_TECMSK	0x00000200					/* TECI割り込みマスク */
#define INTMS_TXMSK		0x00000100					/* TXI割り込みマスク */
#define INTMS_TBEI		0x00000004					/* 送信データ・バッファ・アクセス・エラー割り込み */
#define INTMS_TECI		0x00000002					/* 送信（DMA）エンド・オブ・チェイン割り込み */
#define INTMS_TXI		0x00000001					/* パケット送信（DMA）完了の割り込み */

#define TRANSCTL		((uint32_t *)0x002E0308)	/* 転送制御レジスタ R/W 00030000H */
#define TRANSCTL_RXEN_STA	0x02000000				/* 受信ステータス・ビット */
#define TRANSCTL_TXEN_STA	0x01000000				/* 送信ステータス・ビット */
#define TRANSCTL_RXEN	0x00020000					/* 受信イネーブル */
#define TRANSCTL_TXEN	0x00010000					/* 送信イネーブル */
#define TRANSCTL_RXCHKSMEN	0x00000001				/* 受信チェックサム付加機能のオン／オフ */

#define SFTRST			((uint32_t *)0x002E030C)	/* ソフトウエア・リセット制御レジスタ R/W 00000000H */
#define SFTRST_SFTRST	0x00000001					/* ソフトウエア・リセット */

#define DMACM			((uint32_t *)0x002E0310)	/* DMACモード制御レジスタ R/W 00000010H */
#define DMACM_SINGLE	0x00000000					/* シングル転送 */
#define DMACM_BURST4	0x00000300					/* 4ビート･インクリメント･バースト */
#define DMACM_BURST8	0x00000500					/* 8ビート･インクリメント･バースト */
#define DMACM_BURST16	0x00000700					/* 16ビート･インクリメント･バースト */

#define RXDP			((uint32_t *)0x002E0320)	/* 受信ディスクリプタ・ポインタ・レジスタ R/W FFFFFFFCH */
#define LSTRXDP			((uint32_t *)0x002E0324)	/* 最終受信ディスクリプタ・ポインタ・レジスタ R FFFFFFFCH */
#define TXDP			((uint32_t *)0x002E0328)	/* 送信ディスクリプタ・ポインタ・レジスタ R/W FFFFFFFCH */
#define LSTTXDP			((uint32_t *)0x002E032C)	/* 最終送信ディスクリプタ・ポインタ・レジスタ R FFFFFFFCH */

/* バッファ・ディスクリプタ */
typedef struct t_v850ec_desc {
	uint32_t	size : 16;
	uint32_t	status : 10;
	uint32_t	over : 1;
	uint32_t	rinfo : 1;
	uint32_t	error : 1;
	uint32_t	used : 1;
	uint32_t	last : 1;
	uint32_t	link : 1;
	uint8_t*	addr;
} T_V850EC_DESC;

#define IF_V850EC_RXBUF_PAGE_SIZE	1520
#define IF_V850EC_BUF_PAGE_COUNT	4

#endif /* V850ECRegH */
