Ultibo API
C/C++ API for Ultibo Core
Loading...
Searching...
No Matches
genet.h
Go to the documentation of this file.
1/*
2 * This file is part of the Ultibo project, https://ultibo.org/
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (c) 2026 Garry Wood <garry@softoz.com.au>
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 */
26#ifndef _ULTIBO_GENET_H
27#define _ULTIBO_GENET_H
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#include "ultibo/threads.h"
34#include "ultibo/network.h"
35
37#define GENET_NETWORK_DESCRIPTION "Broadcom GENET (Gigabit Ethernet) controller"
38
39#define GENET_MAX_TX_ENTRIES SIZE_256
40#define GENET_MAX_RX_ENTRIES SIZE_512
41
42#define GENET_MAX_PACKET_SIZE 2048
43
45#define GENET_V1 1
46#define GENET_V2 2
47#define GENET_V3 3
48#define GENET_V4 4
49#define GENET_V5 5
50
52#define GENET_TOTAL_DESC 256
53
55#define GENET_DESC_INDEX 16
56
59#define GENET_ETH_BRCM_TAG_LEN 6
60#define GENET_ETH_PAD 8
61#define GENET_ETH_MAX_MTU_SIZE (ETHERNET_MTU + ETHERNET_HEADER_SIZE + ETHERNET_VLAN_SIZE + GENET_ETH_BRCM_TAG_LEN + ETHERNET_CRC_SIZE + GENET_ETH_PAD)
62
64#define GENET_Q0_PRIORITY 0
65
67#define CLEAR_ALL_HFB 0xFF
68
70#define DMA_MAX_BURST_LENGTH 0x08
71#define DMA_FC_THRESH_HI (GENET_TOTAL_DESC >> 4)
72#define DMA_FC_THRESH_LO 5
73
75#define STATUS_RX_EXT_MASK 0x1FFFFF
76#define STATUS_RX_CSUM_MASK 0xFFFF
77#define STATUS_RX_CSUM_OK 0x10000
78#define STATUS_RX_CSUM_FR 0x20000
79#define STATUS_RX_PROTO_TCP 0
80#define STATUS_RX_PROTO_UDP 1
81#define STATUS_RX_PROTO_ICMP 2
82#define STATUS_RX_PROTO_OTHER 3
83#define STATUS_RX_PROTO_MASK 3
84#define STATUS_RX_PROTO_SHIFT 18
85#define STATUS_FILTER_INDEX_MASK 0xFFFF
86
88#define STATUS_TX_CSUM_START_MASK 0x7FFF
89#define STATUS_TX_CSUM_START_SHIFT 16
90#define STATUS_TX_CSUM_PROTO_UDP 0x8000
91#define STATUS_TX_CSUM_OFFSET_MASK 0x7FFF
92#define STATUS_TX_CSUM_LV 0x80000000
93
95#define DMA_DESC_LENGTH_STATUS 0x00
96#define DMA_DESC_ADDRESS_LO 0x04
97#define DMA_DESC_ADDRESS_HI 0x08
98
100#define UMAC_HD_BKP_CTRL 0x004
101#define HD_FC_EN (1 << 0)
102#define HD_FC_BKOFF_OK (1 << 1)
103#define IPG_CONFIG_RX_SHIFT 2
104#define IPG_CONFIG_RX_MASK 0x1F
105
106#define UMAC_CMD 0x008
107#define CMD_TX_EN (1 << 0)
108#define CMD_RX_EN (1 << 1)
109#define UMAC_SPEED_10 0
110#define UMAC_SPEED_100 1
111#define UMAC_SPEED_1000 2
112#define UMAC_SPEED_2500 3
113#define CMD_SPEED_SHIFT 2
114#define CMD_SPEED_MASK 3
115#define CMD_PROMISC (1 << 4)
116#define CMD_PAD_EN (1 << 5)
117#define CMD_CRC_FWD (1 << 6)
118#define CMD_PAUSE_FWD (1 << 7)
119#define CMD_RX_PAUSE_IGNORE (1 << 8)
120#define CMD_TX_ADDR_INS (1 << 9)
121#define CMD_HD_EN (1 << 10)
122#define CMD_SW_RESET (1 << 13)
123#define CMD_LCL_LOOP_EN (1 << 15)
124#define CMD_AUTO_CONFIG (1 << 22)
125#define CMD_CNTL_FRM_EN (1 << 23)
126#define CMD_NO_LEN_CHK (1 << 24)
127#define CMD_RMT_LOOP_EN (1 << 25)
128#define CMD_PRBL_EN (1 << 27)
129#define CMD_TX_PAUSE_IGNORE (1 << 28)
130#define CMD_TX_RX_EN (1 << 29)
131#define CMD_RUNT_FILTER_DIS (1 << 30)
132
133#define UMAC_MAC0 0x00C
134#define UMAC_MAC1 0x010
135#define UMAC_MAX_FRAME_LEN 0x014
136
137#define UMAC_MODE 0x44
138#define MODE_LINK_STATUS (1 << 5)
139
140#define UMAC_EEE_CTRL 0x064
141#define EN_LPI_RX_PAUSE (1 << 0)
142#define EN_LPI_TX_PFC (1 << 1)
143#define EN_LPI_TX_PAUSE (1 << 2)
144#define EEE_EN (1 << 3)
145#define RX_FIFO_CHECK (1 << 4)
146#define EEE_TX_CLK_DIS (1 << 5)
147#define DIS_EEE_10M (1 << 6)
148#define LP_IDLE_PREDICTION_MODE (1 << 7)
149
150#define UMAC_EEE_LPI_TIMER 0x068
151#define UMAC_EEE_WAKE_TIMER 0x06C
152#define UMAC_EEE_REF_COUNT 0x070
153#define EEE_REFERENCE_COUNT_MASK 0xffff
154
155#define UMAC_TX_FLUSH 0x334
156
157#define UMAC_MIB_START 0x400
158
159#define UMAC_MDIO_CMD 0x614
160#define MDIO_START_BUSY (1 << 29)
161#define MDIO_READ_FAIL (1 << 28)
162#define MDIO_RD (2 << 26)
163#define MDIO_WR (1 << 26)
164#define MDIO_PMD_SHIFT 21
165#define MDIO_PMD_MASK 0x1F
166#define MDIO_REG_SHIFT 16
167#define MDIO_REG_MASK 0x1F
168
169#define UMAC_RBUF_OVFL_CNT_V1 0x61C
170#define RBUF_OVFL_CNT_V2 0x80
171#define RBUF_OVFL_CNT_V3PLUS 0x94
172
173#define UMAC_MPD_CTRL 0x620
174#define MPD_EN (1 << 0)
175#define MPD_PW_EN (1 << 27)
176#define MPD_MSEQ_LEN_SHIFT 16
177#define MPD_MSEQ_LEN_MASK 0xFF
178
179#define UMAC_MPD_PW_MS 0x624
180#define UMAC_MPD_PW_LS 0x628
181#define UMAC_RBUF_ERR_CNT_V1 0x634
182#define RBUF_ERR_CNT_V2 0x84
183#define RBUF_ERR_CNT_V3PLUS 0x98
184#define UMAC_MDF_ERR_CNT 0x638
185#define UMAC_MDF_CTRL 0x650
186#define UMAC_MDF_ADDR 0x654
187#define UMAC_MIB_CTRL 0x580
188#define MIB_RESET_RX (1 << 0)
189#define MIB_RESET_RUNT (1 << 1)
190#define MIB_RESET_TX (1 << 2)
191
193#define RBUF_CTRL 0x00
194#define RBUF_64B_EN (1 << 0)
195#define RBUF_ALIGN_2B (1 << 1)
196#define RBUF_BAD_DIS (1 << 2)
197
198#define RBUF_STATUS 0x0C
199#define RBUF_STATUS_WOL (1 << 0)
200#define RBUF_STATUS_MPD_INTR_ACTIVE (1 << 1)
201#define RBUF_STATUS_ACPI_INTR_ACTIVE (1 << 2)
202
203#define RBUF_CHK_CTRL 0x14
204#define RBUF_RXCHK_EN (1 << 0)
205#define RBUF_SKIP_FCS (1 << 4)
206
207#define RBUF_ENERGY_CTRL 0x9c
208#define RBUF_EEE_EN (1 << 0)
209#define RBUF_PM_EN (1 << 1)
210
211#define RBUF_TBUF_SIZE_CTRL 0xb4
212
214#define RBUF_HFB_CTRL_V1 0x38
215#define RBUF_HFB_FILTER_EN_SHIFT 16
216#define RBUF_HFB_FILTER_EN_MASK 0xffff0000
217#define RBUF_HFB_EN (1 << 0)
218#define RBUF_HFB_256B (1 << 1)
219#define RBUF_ACPI_EN (1 << 2)
220
221#define RBUF_HFB_LEN_V1 0x3C
222#define RBUF_FLTR_LEN_MASK 0xFF
223#define RBUF_FLTR_LEN_SHIFT 8
224
226#define TBUF_CTRL 0x00
227#define TBUF_BP_MC 0x0C
228#define TBUF_ENERGY_CTRL 0x14
229#define TBUF_EEE_EN (1 << 0)
230#define TBUF_PM_EN (1 << 1)
231
232#define TBUF_CTRL_V1 0x80
233#define TBUF_BP_MC_V1 0xA0
234
236#define HFB_CTRL 0x00
237#define HFB_FLT_ENABLE_V3PLUS 0x04
238#define HFB_FLT_LEN_V2 0x04
239#define HFB_FLT_LEN_V3PLUS 0x1C
240
242#define INTRL2_CPU_STAT 0x00
243#define INTRL2_CPU_SET 0x04
244#define INTRL2_CPU_CLEAR 0x08
245#define INTRL2_CPU_MASK_STATUS 0x0C
246#define INTRL2_CPU_MASK_SET 0x10
247#define INTRL2_CPU_MASK_CLEAR 0x14
248
250#define UMAC_IRQ0_SCB (1 << 0)
251#define UMAC_IRQ0_EPHY (1 << 1)
252#define UMAC_IRQ0_PHY_DET_R (1 << 2)
253#define UMAC_IRQ0_PHY_DET_F (1 << 3)
254#define UMAC_IRQ0_LINK_UP (1 << 4)
255#define UMAC_IRQ0_LINK_DOWN (1 << 5)
256#define UMAC_IRQ0_LINK_EVENT (UMAC_IRQ0_LINK_UP | UMAC_IRQ0_LINK_DOWN)
257#define UMAC_IRQ0_UMAC (1 << 6)
258#define UMAC_IRQ0_UMAC_TSV (1 << 7)
259#define UMAC_IRQ0_TBUF_UNDERRUN (1 << 8)
260#define UMAC_IRQ0_RBUF_OVERFLOW (1 << 9)
261#define UMAC_IRQ0_HFB_SM (1 << 10)
262#define UMAC_IRQ0_HFB_MM (1 << 11)
263#define UMAC_IRQ0_MPD_R (1 << 12)
264#define UMAC_IRQ0_RXDMA_MBDONE (1 << 13)
265#define UMAC_IRQ0_RXDMA_PDONE (1 << 14)
266#define UMAC_IRQ0_RXDMA_BDONE (1 << 15)
267#define UMAC_IRQ0_RXDMA_DONE UMAC_IRQ0_RXDMA_MBDONE
268#define UMAC_IRQ0_TXDMA_MBDONE (1 << 16)
269#define UMAC_IRQ0_TXDMA_PDONE (1 << 17)
270#define UMAC_IRQ0_TXDMA_BDONE (1 << 18)
271#define UMAC_IRQ0_TXDMA_DONE UMAC_IRQ0_TXDMA_MBDONE
272
274#define UMAC_IRQ0_MDIO_DONE (1 << 23)
275#define UMAC_IRQ0_MDIO_ERROR (1 << 24)
276
278#define UMAC_IRQ1_TX_INTR_MASK 0xFFFF
279#define UMAC_IRQ1_RX_INTR_MASK 0xFFFF
280#define UMAC_IRQ1_RX_INTR_SHIFT 16
281
283#define GENET_SYS_OFF 0x0000
284#define GENET_GR_BRIDGE_OFF 0x0040
285#define GENET_EXT_OFF 0x0080
286#define GENET_INTRL2_0_OFF 0x0200
287#define GENET_INTRL2_1_OFF 0x0240
288#define GENET_RBUF_OFF 0x0300
289#define GENET_UMAC_OFF 0x0800
290
292#define SYS_REV_CTRL 0x00
293#define SYS_PORT_CTRL 0x04
294#define PORT_MODE_INT_EPHY 0
295#define PORT_MODE_INT_GPHY 1
296#define PORT_MODE_EXT_EPHY 2
297#define PORT_MODE_EXT_GPHY 3
298#define PORT_MODE_EXT_RVMII_25 (4 | (1 << 4))
299#define PORT_MODE_EXT_RVMII_50 4
300#define LED_ACT_SOURCE_MAC (1 << 9)
301
302#define SYS_RBUF_FLUSH_CTRL 0x08
303#define SYS_TBUF_FLUSH_CTRL 0x0C
304#define RBUF_FLUSH_CTRL_V1 0x04
305
307#define EXT_EXT_PWR_MGMT 0x00
308#define EXT_PWR_DOWN_BIAS (1 << 0)
309#define EXT_PWR_DOWN_DLL (1 << 1)
310#define EXT_PWR_DOWN_PHY (1 << 2)
311#define EXT_PWR_DN_EN_LD (1 << 3)
312#define EXT_ENERGY_DET (1 << 4)
313#define EXT_IDDQ_FROM_PHY (1 << 5)
314#define EXT_IDDQ_GLBL_PWR (1 << 7)
315#define EXT_PHY_RESET (1 << 8)
316#define EXT_ENERGY_DET_MASK (1 << 12)
317#define EXT_PWR_DOWN_PHY_TX (1 << 16)
318#define EXT_PWR_DOWN_PHY_RX (1 << 17)
319#define EXT_PWR_DOWN_PHY_SD (1 << 18)
320#define EXT_PWR_DOWN_PHY_RD (1 << 19)
321#define EXT_PWR_DOWN_PHY_EN (1 << 20)
322
323#define EXT_RGMII_OOB_CTRL 0x0C
324#define RGMII_MODE_EN_V123 (1 << 0)
325#define RGMII_LINK (1 << 4)
326#define OOB_DISABLE (1 << 5)
327#define RGMII_MODE_EN (1 << 6)
328#define ID_MODE_DIS (1 << 16)
329
330#define EXT_GPHY_CTRL 0x1C
331#define EXT_CFG_IDDQ_BIAS (1 << 0)
332#define EXT_CFG_PWR_DOWN (1 << 1)
333#define EXT_CK25_DIS (1 << 4)
334#define EXT_GPHY_RESET (1 << 5)
335
337#define DMA_RING_SIZE 0x40
338#define DMA_RINGS_SIZE (DMA_RING_SIZE * (GENET_DESC_INDEX + 1))
339
341#define DMA_RW_POINTER_MASK 0x1FF
342#define DMA_P_INDEX_DISCARD_CNT_MASK 0xFFFF
343#define DMA_P_INDEX_DISCARD_CNT_SHIFT 16
344#define DMA_BUFFER_DONE_CNT_MASK 0xFFFF
345#define DMA_BUFFER_DONE_CNT_SHIFT 16
346#define DMA_P_INDEX_MASK 0xFFFF
347#define DMA_C_INDEX_MASK 0xFFFF
348
350#define DMA_RING_SIZE_MASK 0xFFFF
351#define DMA_RING_SIZE_SHIFT 16
352#define DMA_RING_BUFFER_SIZE_MASK 0xFFFF
353
355#define DMA_INTR_THRESHOLD_MASK 0x01FF
356
358#define DMA_XON_THREHOLD_MASK 0xFFFF
359#define DMA_XOFF_THRESHOLD_MASK 0xFFFF
360#define DMA_XOFF_THRESHOLD_SHIFT 16
361
363#define DMA_FLOW_PERIOD_MASK 0xFFFF
364#define DMA_MAX_PKT_SIZE_MASK 0xFFFF
365#define DMA_MAX_PKT_SIZE_SHIFT 16
366
368#define DMA_EN (1 << 0)
369#define DMA_RING_BUF_EN_SHIFT 0x01
370#define DMA_RING_BUF_EN_MASK 0xFFFF
371#define DMA_TSB_SWAP_EN (1 << 20)
372
374#define DMA_DISABLED (1 << 0)
375#define DMA_DESC_RAM_INIT_BUSY (1 << 1)
376
378#define DMA_SCB_BURST_SIZE_MASK 0x1F
379
381#define DMA_ACTIVITY_VECTOR_MASK 0x1FFFF
382
384#define DMA_BACKPRESSURE_MASK 0x1FFFF
385#define DMA_PFC_ENABLE (1 << 31)
386
388#define DMA_BACKPRESSURE_STATUS_MASK 0x1FFFF
389
391#define DMA_LITTLE_ENDIAN_MODE (1 << 0)
392#define DMA_REGISTER_MODE (1 << 1)
393
395#define DMA_TIMEOUT_MASK 0xFFFF
396#define DMA_TIMEOUT_VAL 5000
397
399#define DMA_RATE_LIMIT_EN_MASK 0xFFFF
400
402#define DMA_ARBITER_MODE_MASK 0x03
403#define DMA_RING_BUF_PRIORITY_MASK 0x1F
404#define DMA_RING_BUF_PRIORITY_SHIFT 5
405#define DMA_RATE_ADJ_MASK 0xFF
406
408#define DMA_BUFLENGTH_MASK 0x0fff
409#define DMA_BUFLENGTH_SHIFT 16
410#define DMA_OWN 0x8000
411#define DMA_EOP 0x4000
412#define DMA_SOP 0x2000
413#define DMA_WRAP 0x1000
414
416#define DMA_TX_UNDERRUN 0x0200
417#define DMA_TX_APPEND_CRC 0x0040
418#define DMA_TX_OW_CRC 0x0020
419#define DMA_TX_DO_CSUM 0x0010
420#define DMA_TX_QTAG_SHIFT 7
421
423#define DMA_RX_CHK_V3PLUS 0x8000
424#define DMA_RX_CHK_V12 0x1000
425#define DMA_RX_BRDCAST 0x0040
426#define DMA_RX_MULT 0x0020
427#define DMA_RX_LG 0x0010
428#define DMA_RX_NO 0x0008
429#define DMA_RX_RXER 0x0004
430#define DMA_RX_CRC_ERROR 0x0002
431#define DMA_RX_OV 0x0001
432#define DMA_RX_FI_MASK 0x001F
433#define DMA_RX_FI_SHIFT 0x0007
434#define DMA_DESC_ALLOC_MASK 0x00FF
435
436#define DMA_ARBITER_RR 0x00
437#define DMA_ARBITER_WRR 0x01
438#define DMA_ARBITER_SP 0x02
439
441#define GENET_POWER_CABLE_SENSE 0
442#define GENET_POWER_PASSIVE 1
443#define GENET_POWER_WOL_MAGIC 2
444
446#define GENET_HAS_40BITS (1 << 0)
447#define GENET_HAS_EXT (1 << 1)
448#define GENET_HAS_MDIO_INTR (1 << 2)
449#define GENET_HAS_MOCA_LINK_DET (1 << 3)
450
452#define DMA_RING_CFG 0
453#define DMA_CTRL 1
454#define DMA_STATUS 2
455#define DMA_SCB_BURST_SIZE 3
456#define DMA_ARB_CTRL 4
457#define DMA_PRIORITY_0 5
458#define DMA_PRIORITY_1 6
459#define DMA_PRIORITY_2 7
460#define DMA_INDEX2RING_0 8
461#define DMA_INDEX2RING_1 9
462#define DMA_INDEX2RING_2 10
463#define DMA_INDEX2RING_3 11
464#define DMA_INDEX2RING_4 12
465#define DMA_INDEX2RING_5 13
466#define DMA_INDEX2RING_6 14
467#define DMA_INDEX2RING_7 15
468#define DMA_RING0_TIMEOUT 16
469#define DMA_RING1_TIMEOUT 17
470#define DMA_RING2_TIMEOUT 18
471#define DMA_RING3_TIMEOUT 19
472#define DMA_RING4_TIMEOUT 20
473#define DMA_RING5_TIMEOUT 21
474#define DMA_RING6_TIMEOUT 22
475#define DMA_RING7_TIMEOUT 23
476#define DMA_RING8_TIMEOUT 24
477#define DMA_RING9_TIMEOUT 25
478#define DMA_RING10_TIMEOUT 26
479#define DMA_RING11_TIMEOUT 27
480#define DMA_RING12_TIMEOUT 28
481#define DMA_RING13_TIMEOUT 29
482#define DMA_RING14_TIMEOUT 30
483#define DMA_RING15_TIMEOUT 31
484#define DMA_RING16_TIMEOUT 32
485
488#define TDMA_READ_PTR 0
489#define RDMA_WRITE_PTR TDMA_READ_PTR
490#define TDMA_READ_PTR_HI 1
491#define RDMA_WRITE_PTR_HI TDMA_READ_PTR_HI
492#define TDMA_CONS_INDEX 2
493#define RDMA_PROD_INDEX TDMA_CONS_INDEX
494#define TDMA_PROD_INDEX 3
495#define RDMA_CONS_INDEX TDMA_PROD_INDEX
496#define DMA_RING_BUF_SIZE 4
497#define DMA_START_ADDR 5
498#define DMA_START_ADDR_HI 6
499#define DMA_END_ADDR 7
500#define DMA_END_ADDR_HI 8
501#define DMA_MBUF_DONE_THRESH 9
502#define TDMA_FLOW_PERIOD 10
503#define RDMA_XON_XOFF_THRESH TDMA_FLOW_PERIOD
504#define TDMA_WRITE_PTR 11
505#define RDMA_READ_PTR TDMA_WRITE_PTR
506#define TDMA_WRITE_PTR_HI 12
507#define RDMA_READ_PTR_HI TDMA_WRITE_PTR_HI
508
510#define MDIO_CMD 0x00
520
521#define MDIO_CFG 0x04
522#define MDIO_C22 (1 << 0)
523#define MDIO_C45 0
524#define MDIO_CLK_DIV_SHIFT 4
525#define MDIO_CLK_DIV_MASK 0x3F
526#define MDIO_SUPP_PREAMBLE (1 << 12)
527
529#define PHY_ID_BCM50610 0x0143bd60
530#define PHY_ID_BCM50610M 0x0143bd70
531#define PHY_ID_BCM5241 0x0143bc30
532#define PHY_ID_BCMAC131 0x0143bc70
533#define PHY_ID_BCM5481 0x0143bca0
534#define PHY_ID_BCM5395 0x0143bcf0
535#define PHY_ID_BCM54810 0x03625d00
536#define PHY_ID_BCM5482 0x0143bcb0
537#define PHY_ID_BCM5411 0x00206070
538#define PHY_ID_BCM5421 0x002060e0
539#define PHY_ID_BCM54210E 0x600d84a0
540#define PHY_ID_BCM5464 0x002060b0
541#define PHY_ID_BCM5461 0x002060c0
542#define PHY_ID_BCM54612E 0x03625e60
543#define PHY_ID_BCM54616S 0x03625d10
544#define PHY_ID_BCM57780 0x03625d90
545#define PHY_ID_BCM89610 0x03625cd0
546
547#define PHY_ID_BCM7250 0xae025280
548#define PHY_ID_BCM7255 0xae025120
549#define PHY_ID_BCM7260 0xae025190
550#define PHY_ID_BCM7268 0xae025090
551#define PHY_ID_BCM7271 0xae0253b0
552#define PHY_ID_BCM7278 0xae0251a0
553#define PHY_ID_BCM7364 0xae025260
554#define PHY_ID_BCM7366 0x600d8490
555#define PHY_ID_BCM7346 0x600d8650
556#define PHY_ID_BCM7362 0x600d84b0
557#define PHY_ID_BCM7425 0x600d86b0
558#define PHY_ID_BCM7429 0x600d8730
559#define PHY_ID_BCM7435 0x600d8750
560#define PHY_ID_BCM74371 0xae0252e0
561#define PHY_ID_BCM7439 0x600d8480
562#define PHY_ID_BCM7439_2 0xae025080
563#define PHY_ID_BCM7445 0x600d8510
564
565#define PHY_ID_BCM_CYGNUS 0xae025200
566#define PHY_ID_BCM_OMEGA 0xae025100
567
568#define PHY_ID_MASK 0xfffffff0
569
571#define PHY_BCM_FLAGS_MODE_COPPER 0x00000001
572#define PHY_BCM_FLAGS_MODE_1000BX 0x00000002
573#define PHY_BCM_FLAGS_INTF_SGMII 0x00000010
574#define PHY_BCM_FLAGS_INTF_XAUI 0x00000020
575#define PHY_BRCM_WIRESPEED_ENABLE 0x00000100
576#define PHY_BRCM_AUTO_PWRDWN_ENABLE 0x00000200
577#define PHY_BRCM_RX_REFCLK_UNUSED 0x00000400
578#define PHY_BRCM_STD_IBND_DISABLE 0x00000800
579#define PHY_BRCM_EXT_IBND_RX_ENABLE 0x00001000
580#define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00002000
581#define PHY_BRCM_CLEAR_RGMII_MODE 0x00004000
582#define PHY_BRCM_DIS_TXCRXC_NOENRGY 0x00008000
583#define PHY_BRCM_EN_MASTER_MODE 0x00010000
584
586#define MII_BCM54XX_ECR 0x10
587#define MII_BCM54XX_ECR_IM 0x1000
588#define MII_BCM54XX_ECR_IF 0x0800
589
590#define MII_BCM54XX_ESR 0x11
591#define MII_BCM54XX_ESR_IS 0x1000
592
593#define MII_BCM54XX_EXP_DATA 0x15
594#define MII_BCM54XX_EXP_SEL 0x17
595#define MII_BCM54XX_EXP_SEL_SSD 0x0e00
596#define MII_BCM54XX_EXP_SEL_ER 0x0f00
597#define MII_BCM54XX_EXP_SEL_ETC 0x0d00
598
599#define MII_BCM54XX_AUX_CTL 0x18
600#define MII_BCM54XX_ISR 0x1a
601#define MII_BCM54XX_IMR 0x1b
602#define MII_BCM54XX_INT_CRCERR 0x0001
603#define MII_BCM54XX_INT_LINK 0x0002
604#define MII_BCM54XX_INT_SPEED 0x0004
605#define MII_BCM54XX_INT_DUPLEX 0x0008
606#define MII_BCM54XX_INT_LRS 0x0010
607#define MII_BCM54XX_INT_RRS 0x0020
608#define MII_BCM54XX_INT_SSERR 0x0040
609#define MII_BCM54XX_INT_UHCD 0x0080
610#define MII_BCM54XX_INT_NHCD 0x0100
611#define MII_BCM54XX_INT_NHCDL 0x0200
612#define MII_BCM54XX_INT_ANPR 0x0400
613#define MII_BCM54XX_INT_LC 0x0800
614#define MII_BCM54XX_INT_HC 0x1000
615#define MII_BCM54XX_INT_MDIX 0x2000
616#define MII_BCM54XX_INT_PSERR 0x4000
617
618#define MII_BCM54XX_SHD 0x1c
619#define MII_BCM54XX_SHD_WRITE 0x8000
620
622#define MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL 0x00
623#define MII_BCM54XX_AUXCTL_ACTL_TX_6DB 0x0400
624#define MII_BCM54XX_AUXCTL_ACTL_SMDSP_ENA 0x0800
625
626#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC 0x07
627#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC_WIRESPEED_EN 0x0010
628#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN 0x0100
629#define MII_BCM54XX_AUXCTL_MISC_FORCE_AMDIX 0x0200
630#define MII_BCM54XX_AUXCTL_MISC_WREN 0x8000
631
632#define MII_BCM54XX_AUXCTL_SHDWSEL_READ_SHIFT 12
633#define MII_BCM54XX_AUXCTL_SHDWSEL_MASK 0x0007
634
636#define BCM_LED_SRC_LINKSPD1 0x0
637#define BCM_LED_SRC_LINKSPD2 0x1
638#define BCM_LED_SRC_XMITLED 0x2
639#define BCM_LED_SRC_ACTIVITYLED 0x3
640#define BCM_LED_SRC_FDXLED 0x4
641#define BCM_LED_SRC_SLAVE 0x5
642#define BCM_LED_SRC_INTR 0x6
643#define BCM_LED_SRC_QUALITY 0x7
644#define BCM_LED_SRC_RCVLED 0x8
645#define BCM_LED_SRC_WIRESPEED 0x9
646#define BCM_LED_SRC_MULTICOLOR1 0xa
647#define BCM_LED_SRC_OPENSHORT 0xb
648#define BCM_LED_SRC_OFF 0xe
649#define BCM_LED_SRC_ON 0xf
650
652#define BCM_EXP_MULTICOLOR (MII_BCM54XX_EXP_SEL_ER + 0x04)
653#define BCM_LED_MULTICOLOR_IN_PHASE 1 << 8
654#define BCM_LED_MULTICOLOR_LINK_ACT 0x0
655#define BCM_LED_MULTICOLOR_SPEED 0x1
656#define BCM_LED_MULTICOLOR_ACT_FLASH 0x2
657#define BCM_LED_MULTICOLOR_FDX 0x3
658#define BCM_LED_MULTICOLOR_OFF 0x4
659#define BCM_LED_MULTICOLOR_ON 0x5
660#define BCM_LED_MULTICOLOR_ALT 0x6
661#define BCM_LED_MULTICOLOR_FLASH 0x7
662#define BCM_LED_MULTICOLOR_LINK 0x8
663#define BCM_LED_MULTICOLOR_ACT 0x9
664#define BCM_LED_MULTICOLOR_PROGRAM 0xa
665
669#define BCM54XX_SHD_SCR2 0x04
670#define BCM54XX_SHD_SCR2_WSPD_RTRY_DIS 0x100
671#define BCM54XX_SHD_SCR2_WSPD_RTRY_LMT_SHIFT 2
672#define BCM54XX_SHD_SCR2_WSPD_RTRY_LMT_OFFSET 2
673#define BCM54XX_SHD_SCR2_WSPD_RTRY_LMT_MASK 0x7
674
676#define BCM54XX_SHD_SCR3 0x05
677#define BCM54XX_SHD_SCR3_DEF_CLK125 0x0001
678#define BCM54XX_SHD_SCR3_DLLAPD_DIS 0x0002
679#define BCM54XX_SHD_SCR3_TRDDAPD 0x0004
680
682#define BCM54XX_SHD_APD 0x0a
683#define BCM_APD_CLR_MASK 0xFE9F
684#define BCM54XX_SHD_APD_EN 0x0020
685#define BCM_NO_ANEG_APD_EN 0x0060
686#define BCM_APD_SINGLELP_EN 0x0100
687
688#define BCM5482_SHD_LEDS1 0x0d
689#define BCM54XX_SHD_RGMII_MODE 0x0b
690#define BCM5482_SHD_SSD 0x14
691#define BCM5482_SHD_SSD_LEDM 0x0008
692#define BCM5482_SHD_SSD_EN 0x0001
693#define BCM5482_SHD_MODE 0x1f
694#define BCM5482_SHD_MODE_1000BX 0x0001
695
697#define MII_BCM54XX_EXP_AADJ1CH0 0x001f
698#define MII_BCM54XX_EXP_AADJ1CH0_SWP_ABCD_OEN 0x0200
699#define MII_BCM54XX_EXP_AADJ1CH0_SWSEL_THPF 0x0100
700#define MII_BCM54XX_EXP_AADJ1CH3 0x601f
701#define MII_BCM54XX_EXP_AADJ1CH3_ADCCKADJ 0x0002
702#define MII_BCM54XX_EXP_EXP08 0x0F08
703#define MII_BCM54XX_EXP_EXP08_RJCT_2MHZ 0x0001
704#define MII_BCM54XX_EXP_EXP08_EARLY_DAC_WAKE 0x0200
705#define MII_BCM54XX_EXP_EXP75 0x0f75
706#define MII_BCM54XX_EXP_EXP75_VDACCTRL 0x003c
707#define MII_BCM54XX_EXP_EXP75_CM_OSC 0x0001
708#define MII_BCM54XX_EXP_EXP96 0x0f96
709#define MII_BCM54XX_EXP_EXP96_MYST 0x0010
710#define MII_BCM54XX_EXP_EXP97 0x0f97
711#define MII_BCM54XX_EXP_EXP97_MYST 0x0c0c
712
714#define BCM5482_SSD_1000BX_CTL 0x00
715#define BCM5482_SSD_1000BX_CTL_PWRDOWN 0x0800
716#define BCM5482_SSD_SGMII_SLAVE 0x15
717#define BCM5482_SSD_SGMII_SLAVE_EN 0x0002
718#define BCM5482_SSD_SGMII_SLAVE_AD 0x0001
719
721#define BCM54810_EXP_BROADREACH_LRE_MISC_CTL (MII_BCM54XX_EXP_SEL_ER + 0x90)
722#define BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN (1 << 0)
723#define BCM54810_SHD_CLK_CTL 0x3
724#define BCM54810_SHD_CLK_CTL_GTXCLK_EN (1 << 9)
725
727#define BCM54612E_EXP_SPARE0 (MII_BCM54XX_EXP_SEL_ETC + 0x34)
728#define BCM54612E_LED4_CLK125OUT_EN (1 << 1)
729
732
740
741
743
746
749
765
766
768
771
774
793
794
796
799
802
804{
805 // Network Properties
807 // Driver Properties
808 uint32_t irq0;
809 uint32_t irq1;
810 void *address;
811 uint32_t mdiooffset;
813 uint32_t version;
814 uint32_t phyrevision;
818 uint32_t irqstatus;
819 uint32_t pendingcount;
822 // Hardware Parameters (Version specific)
823 uint32_t txqueues;
825 uint32_t rxqueues;
831 uint32_t qtagmask;
833 uint32_t hfboffset;
834 uint32_t hfbregoffset;
835 uint32_t rxdmaoffset;
836 uint32_t txdmaoffset;
838 uint32_t flags;
841 // DMA Parameters (Version specific)
848 // PHY Parameters
849 uint32_t phyid;
850 uint32_t phyaddr;
851 uint32_t phymode;
852 uint32_t phyflags;
855 int32_t link;
856 int32_t speed;
857 int32_t duplex;
858 int32_t pause;
859 int32_t oldlink;
860 int32_t oldspeed;
861 int32_t oldduplex;
862 int32_t oldpause;
863 // RX/TX Parameters
868 // Statistics Properties
869 uint32_t interruptcount;
870};
871
872
875{
876 uint32_t lengthstatus;
877 uint32_t extendedstatus;
878 uint32_t rxchecksum;
879 uint32_t unused1[9];
880 uint32_t txcheckusminfo;
881 uint32_t unused2[3];
882};
883
884
887
890
892
901NETWORK_DEVICE * STDCALL genet_network_create(size_t address, uint32_t mdiooffset, uint32_t irq0, uint32_t irq1);
902
909
910#ifdef __cplusplus
911}
912#endif
913
914#endif // _ULTIBO_GENET_H
NETWORK_DEVICE *STDCALL genet_network_create(size_t address, uint32_t mdiooffset, uint32_t irq0, uint32_t irq1)
Create and register a new GENET Network device which can be accessed using the Network API.
uint32_t STDCALL genet_network_destroy(NETWORK_DEVICE *network)
Close, deregister and destroy a GENET Network device created by this driver.
GENET_CONTROL_BLOCK GENET_CONTROL_BLOCKS[GENET_TOTAL_DESC]
Definition genet.h:742
struct _GENET_STATUS64 GENET_STATUS64
Definition genet.h:873
void STDCALL(* genet_rx_ring_int_disable_proc)(GENET_NETWORK *network, GENET_RX_RING *ring)
Definition genet.h:748
#define TDMA_READ_PTR
Definition genet.h:488
void STDCALL genet_init(void)
GENET_RX_RING GENET_RX_RINGS[GENET_DESC_INDEX+1]
Definition genet.h:767
#define GENET_TOTAL_DESC
Definition genet.h:52
struct _GENET_CONTROL_BLOCK GENET_CONTROL_BLOCK
Definition genet.h:734
GENET_TX_RING GENET_TX_RINGS[GENET_DESC_INDEX+1]
Definition genet.h:795
uint8_t GENET_DMA_RING_REGISTERS[TDMA_READ_PTR - TDMA_WRITE_PTR_HI+1]
Definition genet.h:801
#define DMA_RING_CFG
Definition genet.h:452
void STDCALL(* genet_tx_ring_int_enable_proc)(GENET_NETWORK *network, GENET_TX_RING *ring)
Definition genet.h:772
struct _GENET_RX_RING GENET_RX_RING
Definition genet.h:745
#define GENET_DESC_INDEX
Definition genet.h:55
struct _GENET_TX_RING GENET_TX_RING
Definition genet.h:770
#define DMA_RING16_TIMEOUT
Definition genet.h:484
void STDCALL(* genet_tx_ring_int_disable_proc)(GENET_NETWORK *network, GENET_TX_RING *ring)
Definition genet.h:773
void STDCALL(* genet_rx_ring_int_enable_proc)(GENET_NETWORK *network, GENET_RX_RING *ring)
Definition genet.h:747
#define TDMA_WRITE_PTR_HI
Definition genet.h:506
struct _GENET_NETWORK GENET_NETWORK
Definition genet.h:731
uint8_t GENET_DMA_REGISTERS[DMA_RING_CFG - DMA_RING16_TIMEOUT+1]
Definition genet.h:798
int32_t LONGBOOL
Compatibility with FPC LongBool type (4 bytes).
Definition globaltypes.h:56
#define STDCALL
Definition globaltypes.h:45
HANDLE SPIN_HANDLE
Definition globaltypes.h:104
HANDLE WORKER_HANDLE
Definition globaltypes.h:120
HANDLE TIMER_HANDLE
Definition globaltypes.h:119
struct _NETWORK_ENTRY NETWORK_ENTRY
Definition network.h:503
struct _NETWORK_DEVICE NETWORK_DEVICE
Definition network.h:543
Definition genet.h:736
size_t descriptoraddress
Definition genet.h:737
NETWORK_ENTRY * entry
Definition genet.h:738
Definition genet.h:804
int32_t link
0 = Down / 1 = Up
Definition genet.h:855
uint32_t txqueues
Definition genet.h:823
LONGBOOL phyexternal
Definition genet.h:854
uint32_t irq1
Definition genet.h:809
LONGBOOL rxchecksumenable
True if RX checksum is enabled.
Definition genet.h:816
uint32_t phyaddr
PHY Bus Address.
Definition genet.h:850
uint32_t mdiooffset
Definition genet.h:811
uint32_t dmarxcheckbit
Definition genet.h:842
int32_t oldspeed
Definition genet.h:860
uint32_t txdmaoffset
Definition genet.h:836
int32_t speed
10/100/1000 Mbps
Definition genet.h:856
NETWORK_DEVICE network
Definition genet.h:806
uint32_t hfbregoffset
Definition genet.h:834
int32_t oldpause
Definition genet.h:862
uint32_t phyid
PHY Identifier.
Definition genet.h:849
uint32_t interruptcount
Number of interrupt requests received by the device.
Definition genet.h:869
uint32_t backpressureenableshift
Definition genet.h:827
uint32_t phyrevision
PHY revision (GENET_V1..GENETV4 devices only).
Definition genet.h:814
uint32_t rxqueues
Definition genet.h:825
uint32_t phyflags
PHY Flags.
Definition genet.h:852
TIMER_HANDLE statustimer
Timer for status change detection.
Definition genet.h:821
uint32_t hfboffset
Definition genet.h:833
SPIN_HANDLE lock
Device lock (Differs from lock in Network device) (Spin lock due to use by interrupt handler).
Definition genet.h:812
GENET_CONTROL_BLOCKS * rxcontrolblocks
Definition genet.h:866
uint32_t txbufferoffset
Definition genet.h:832
GENET_DMA_REGISTERS dmaregisters
Definition genet.h:846
uint32_t wordsperdescriptor
Definition genet.h:837
uint32_t flags
Definition genet.h:838
uint32_t backpressuremask
Definition genet.h:828
int32_t pause
Definition genet.h:858
uint32_t qtagmask
Definition genet.h:831
int32_t oldduplex
Definition genet.h:861
uint32_t pendingcount
Number of worker requests pending for this network.
Definition genet.h:819
GENET_CONTROL_BLOCKS * txcontrolblocks
Definition genet.h:867
LONGBOOL crcforwardenable
True if CRC forwarding is enabled.
Definition genet.h:817
uint32_t hfbfiltersize
Definition genet.h:830
GENET_RX_RINGS rxrings
Definition genet.h:864
GENET_DMA_RING_REGISTERS dmaringregisters
Definition genet.h:847
void * address
Device register base address.
Definition genet.h:810
int32_t duplex
0 = Half / 1 = Full
Definition genet.h:857
uint32_t dmadescriptorsize
Definition genet.h:845
uint32_t rxdmaregoffset
Definition genet.h:843
THREAD_ID waiterthread
Thread waiting for pending requests to complete (for network close).
Definition genet.h:820
LONGBOOL phyinternal
Definition genet.h:853
uint32_t txdmaregoffset
Definition genet.h:844
uint32_t version
Device version (GENET_V1..GENETV5).
Definition genet.h:813
uint32_t phymode
PHY Interface Mode.
Definition genet.h:851
LONGBOOL status64enable
True if 64 byte RX/TX status block is enabled (for hardware checksum etc).
Definition genet.h:815
int32_t oldlink
Definition genet.h:859
uint32_t q16rxdescriptorcount
Definition genet.h:840
uint32_t q16txdescriptorcount
Definition genet.h:839
uint32_t rxdmaoffset
Definition genet.h:835
uint32_t rxdescriptorsperqueue
Definition genet.h:826
uint32_t txdescriptorsperqueue
Definition genet.h:824
uint32_t hfbfiltercount
Definition genet.h:829
uint32_t irqstatus
Non TX/RX interrupts forwarded to worker thread for servicing.
Definition genet.h:818
GENET_TX_RINGS txrings
Definition genet.h:865
uint32_t irq0
Definition genet.h:808
Definition genet.h:751
uint32_t read
RX ring read pointer.
Definition genet.h:757
genet_rx_ring_int_enable_proc intenable
Definition genet.h:762
uint32_t first
RX ring initial CB ptr.
Definition genet.h:758
GENET_NETWORK * network
The owner of this RX ring.
Definition genet.h:752
uint32_t olddiscards
Definition genet.h:760
GENET_CONTROL_BLOCKS * controlblocks
RX ring buffer control block.
Definition genet.h:761
uint32_t index
RX ring index.
Definition genet.h:754
uint32_t size
RX ring size.
Definition genet.h:755
uint32_t consumer
RX last consumer index.
Definition genet.h:756
genet_rx_ring_int_disable_proc intdisable
Definition genet.h:763
uint32_t last
RX ring end CB ptr.
Definition genet.h:759
WORKER_HANDLE worker
Handle of worker currently servicing RX ring.
Definition genet.h:753
Definition genet.h:875
uint32_t unused1[9]
Unused.
Definition genet.h:879
uint32_t rxchecksum
Partial RX checksum.
Definition genet.h:878
uint32_t lengthstatus
Length and peripheral status.
Definition genet.h:876
uint32_t extendedstatus
Extended status.
Definition genet.h:877
uint32_t txcheckusminfo
TX checksum info.
Definition genet.h:880
uint32_t unused2[3]
Unused.
Definition genet.h:881
Definition genet.h:776
uint32_t clean
TX ring clean pointer.
Definition genet.h:782
uint32_t first
TX ring initial CB ptr.
Definition genet.h:787
GENET_NETWORK * network
The owner of this TX ring.
Definition genet.h:777
uint32_t queue
TX queue index.
Definition genet.h:780
genet_tx_ring_int_enable_proc intenable
Definition genet.h:790
uint32_t producer
TX ring producer index SW copy.
Definition genet.h:786
genet_tx_ring_int_disable_proc intdisable
Definition genet.h:791
GENET_CONTROL_BLOCKS * controlblocks
TX ring buffer control block.
Definition genet.h:789
uint32_t index
TX ring index.
Definition genet.h:779
uint32_t size
TX ring size.
Definition genet.h:781
uint32_t free
TX number of free descriptors.
Definition genet.h:784
uint32_t write
TX ring write pointer SW copy.
Definition genet.h:785
uint32_t consumer
TX last consumer index.
Definition genet.h:783
uint32_t last
TX ring end CB ptr.
Definition genet.h:788
WORKER_HANDLE worker
Handle of worker currently servicing TX ring.
Definition genet.h:778
HANDLE THREAD_ID
Type for Thread-IDs.
Definition system.h:63