source: azure_iot_hub_f767zi/trunk/asp_baseplatform/pdic/stm32f7xx/emac.h@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 7.8 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2008-2011 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2015-2019 by TOPPERS PROJECT Educational Working Group.
9 *
10 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * @(#) $Id$
40 */
41/*
42 *
43 * STMicroelectronics EMACデバイスドライバの外部宣言
44 *
45 */
46
47#ifndef _EMAC_H_
48#define _EMAC_H_
49
50#ifdef __cplusplus
51 extern "C" {
52#endif
53
54/*
55 * MACポート定義
56 */
57#define MAC1_PORTID 1
58#define NUM_MACPORT 1
59#define MACDEF_PORTID MAC1_PORTID
60
61/*
62 * MAC EVENT定義
63 */
64#define PHY_EVENT_DETECT (1<<0)
65#define SEND_EVENT_DETECT (1<<1)
66#define RECV_EVENT_DETECT (1<<2)
67#define RESET_EVNT_DETECT (1<<7)
68
69/*
70 * ETHERNETアドレス長
71 */
72#define ADLEN_ETHER 6
73#define ETHER_HDR_SIZE ((ADLEN_ETHER*2)+2)
74
75/*
76 * LINK設定定義
77 */
78#define EMAC_LINK_CONNECT 0x00080000
79#define EMAC_LINK_AUTONEGO 0x00010000
80#define EMAC_DUPLEX_HALF 0x00000000 /* HALF DUPLEX */
81#define EMAC_DUPLEX_FULL 0x00000100 /* FULL DUPLEX */
82#define EMAC_DUPLEX_MASK EMAC_DUPLEX_FULL /* DUPLEX MASK */
83
84#define EMAC_SPEED_MASK 0x000000FF /* LINK SPEED MASK */
85#define EMAC_SPEED_10BASE 0x00000003 /* LINK SPEED 10BASE */
86#define EMAC_SPEED_100BASE 0x00000004 /* LINK SPEED 100BASE */
87#define EMAC_SPEED_1000BASE 0x00000005 /* LINK SPEED 1000BASE */
88
89#define EMAC_LINK_10BASE2 0x00000001 /* 10Base2 */
90#define EMAC_LINK_10BASE5 0x00000002 /* 10Base5 */
91#define EMAC_LINK_10BASE_HALF (EMAC_SPEED_10BASE | EMAC_DUPLEX_HALF)
92#define EMAC_LINK_10BASE_FULL (EMAC_SPEED_10BASE | EMAC_DUPLEX_FULL)
93#define EMAC_LINK_100BASE_HALF (EMAC_SPEED_100BASE | EMAC_DUPLEX_HALF)
94#define EMAC_LINK_100BASE_FULL (EMAC_SPEED_100BASE | EMAC_DUPLEX_FULL)
95#define EMAC_LINK_1000BASE_HALF (EMAC_SPEED_1000BASE | EMAC_DUPLEX_HALF)
96#define EMAC_LINK_1000BASE_FULL (EMAC_SPEED_1000BASE | EMAC_DUPLEX_FULL)
97
98#define LINK_SPEED_OF_YOUR_NETIF_IN_BPS 100000000
99
100/*
101 * DESCRIPTOR定義
102 */
103#define NUM_RX_DESC 8 /* 受信キューの個数 */
104#define NUM_TX_DESC 8 /* 送信キューの個数 */
105#define EMAC_DATA_ATTRIBUTE (section(".ethDataSection"))
106
107/*
108 * DESCRIPTOR COMMON定義
109 */
110#define DESC_TXRX_STATUS 0
111#define DESC_TXRX_CONTROL 1
112#define DESC_TXRX_BUFFER 2
113#define DESC_TXRX_NEXT 3
114#define DESC_TXRX_EXTSTATUS 4
115#define DESC_TXRX_TIMESTAMPLOW 6
116#define DESC_TXRX_TIMESTAMPHIGH 7
117#define DESC_TXRX_SIZE 8
118#define EMAC_QUE_SIZE (DESC_TXRX_SIZE * 4)
119
120/*
121 * EMACコンフュギュレーション構造体定義
122 */
123typedef struct
124{
125 uint32_t paketbufsize; /* EMAC パケットバッファサイズ */
126 uint32_t rxquecount; /* EMAC 受信ディスクリプタサイズ */
127 uint32_t txquecount; /* EMAC 送信ディスクリプタサイズ */
128 void *quebuffer; /* EMAC ディスクリプタ先頭アドレス */
129 void *databuffer; /* EMAC データ領域先頭アドレス */
130 ID semid; /* EMAC 通信用セマフォ値 */
131}EMAC_Init_t;
132
133/*
134 * EMACハンドラ定義
135 */
136typedef struct EMAC_Handle EMAC_Handle_t;
137struct EMAC_Handle {
138 uint32_t base;
139 EMAC_Init_t Init;
140 uint8_t tx_wait;
141 uint8_t intno;
142 uint8_t macid;
143 uint8_t phy_addr;
144 uint32_t phy_features;
145 uint32_t linkvalue;
146
147 volatile uint32_t *tx_top_desc;
148 volatile uint32_t *tx_cur_desc;
149 volatile uint32_t *rx_top_desc;
150 volatile uint32_t *rx_cur_desc;
151 void (*emacevent)(EMAC_Handle_t *hmac, int, uint32_t);
152 void (*phy_opt_init)(EMAC_Handle_t *hmac);
153
154 uint32_t ifShortPkts;
155 uint32_t mmc_tx_irq_n;
156 uint32_t mmc_rx_irq_n;
157 uint32_t mmc_rx_csum_offload_irq_n;
158 uint32_t irq_receive_pmt_irq_n;
159 uint32_t irq_tx_path_in_lpi_mode_n;
160 uint32_t irq_tx_path_exit_lpi_mode_n;
161 uint32_t irq_rx_path_in_lpi_mode_n;
162 uint32_t irq_rx_path_exit_lpi_mode_n;
163
164 uint32_t normal_irq_n;
165 uint32_t fatal_bus_error_irq;
166 uint32_t tx_undeflow_irq;
167 uint32_t tx_jabber_irq;
168 uint32_t tx_early_irq;
169 uint32_t tx_process_stopped_irq;
170 uint32_t rx_normal_irq_n;
171 uint32_t rx_early_irq;
172 uint32_t rx_overflow_irq;
173 uint32_t rx_buf_unav_irq;
174 uint32_t rx_process_stopped_irq;
175 uint32_t rx_watchdog_irq;
176};
177
178/*
179 * LWIP用パケットバッファ構造体
180 */
181struct emac_pkt {
182 struct emac_pkt *next; /* next pbuf chain */
183 void *payload; /* pointer to the data buffer */
184 uint16_t tot_len; /* total length of this buffer and all next buffers in chain */
185 uint16_t len; /* length of this buffer */
186};
187
188
189extern EMAC_Handle_t *emac_init(ID portid, EMAC_Init_t *ini);
190extern ER emac_deinit(EMAC_Handle_t *hmac);
191extern ER emac_send(EMAC_Handle_t *hmac, struct emac_pkt *pktp);
192extern int emac_recv_length(EMAC_Handle_t *hmac);
193extern ER emac_recv(EMAC_Handle_t *hmac, struct emac_pkt *pktp);
194extern ER emac_start(EMAC_Handle_t *hmac, uint32_t link_mode);
195extern ER emac_stop(EMAC_Handle_t *hmac, int disable);
196extern uint32_t emac_link_detect(EMAC_Handle_t *hmac);
197extern ER emac_link_mode_set(EMAC_Handle_t *hmac, uint32_t link_detect);
198extern ER emac_reset(EMAC_Handle_t *hmac, uint8_t *mac_addr);
199extern void emac_hps_isr(intptr_t exinf);
200
201#ifdef __cplusplus
202}
203#endif
204
205#endif /* _EMAC_H_ */
206
Note: See TracBrowser for help on using the repository browser.