blob: d836fde414bb14030befa3ec060e307fa532e236 [file] [log] [blame]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
* Copyright 2020, HENSOLDT Cyber GmbH
*
* SPDX-License-Identifier: GPL-2.0-only
*/
#pragma once
#include <stdint.h>
#include <platsupport/io.h>
#define NETIRQ_BABR (1UL << 30) /* Babbling Receive Error */
#define NETIRQ_BABT (1UL << 29) /* Babbling Transmit Error */
#define NETIRQ_GRA (1UL << 28) /* Graceful Stop Complete */
#define NETIRQ_TXF (1UL << 27) /* Transmit Frame Interrupt */
#define NETIRQ_TXB (1UL << 26) /* Transmit Buffer Interrupt */
#define NETIRQ_RXF (1UL << 25) /* Receive Frame Interrupt */
#define NETIRQ_RXB (1UL << 24) /* Receive Buffer Interrupt */
#define NETIRQ_MII (1UL << 23) /* MII Interrupt */
#define NETIRQ_EBERR (1UL << 22) /* Ethernet bus error */
#define NETIRQ_LC (1UL << 21) /* Late Collision */
#define NETIRQ_RL (1UL << 20) /* Collision Retry Limit */
#define NETIRQ_UN (1UL << 19) /* Transmit FIFO Underrun */
#define NETIRQ_PLR (1UL << 18) /* Payload Receive Error */
#define NETIRQ_WAKEUP (1UL << 17) /* Node Wakeup Request Indication */
#define NETIRQ_TS_AVAIL (1UL << 16) /* Transmit Timestamp Available */
#define NETIRQ_TS_TIMER (1UL << 15) /* Timestamp Timer */
struct enet;
struct enet *enet_init(
void *mapped_peripheral,
uintptr_t tx_phys,
uintptr_t rx_phys,
size_t rx_bufsize,
uint64_t mac,
ps_io_ops_t *io_ops);
/* Debug */
void enet_dump_regs(struct enet *enet);
void enet_clear_mib(struct enet *enet);
void enet_print_mib(struct enet *enet);
void enet_print_state(struct enet *enet);
/* Read and write to the phy over the mdio interface */
int enet_mdio_read(struct enet *enet, uint16_t phy, uint16_t reg);
int enet_mdio_write(struct enet *enet, uint16_t phy, uint16_t reg, uint16_t data);
void enet_enable(struct enet *enet);
void enet_disable(struct enet *enet);
int enet_enabled(struct enet *enet);
void enet_set_mac(struct enet *enet, uint64_t mac);
uint64_t enet_get_mac(struct enet *enet);
void enet_set_speed(struct enet *enet, int speed, int full_duplex);
/* Clears ievents and returns the original value - before the clear */
uint32_t enet_clr_events(struct enet *enet, uint32_t clr_bits);
/* Sets the event mask */
void enet_enable_events(struct enet *enet, uint32_t mask_bits);
/* Returns the value of ievents */
uint32_t enet_get_events(struct enet *enet);
void enet_tx_enable(struct enet *enet);
int enet_tx_enabled(struct enet *enet);
void enet_rx_enable(struct enet *enet);
int enet_rx_enabled(struct enet *enet);
void enet_set_mdcclk(struct enet *enet, uint32_t fout);
uint32_t enet_get_mdcclk(struct enet *imx_eth);
void enet_prom_enable(struct enet *enet);
void enet_prom_disable(struct enet *enet);
void enet_crc_strip_enable(struct enet *enet);
void enet_crc_strip_disable(struct enet *enet);