blob: 1db7e66ab4ec76a8ab2ead605e03b22e9be1091c [file] [log] [blame]
/*
* Copyright 2017, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the GNU General Public License version 2. Note that NO WARRANTY is provided.
* See "LICENSE_GPLv2.txt" for details.
*
* @TAG(DATA61_GPL)
*/
#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;
/* Debug */
void enet_dump_regs(struct enet* enet);
void enet_clear_mib(struct enet* enet);
void enet_print_mib(struct enet* enet);
struct desc_data {
uint32_t tx_phys;
uint32_t rx_phys;
uint32_t rx_bufsize;
};
struct enet * enet_init(struct desc_data desc_data, ps_io_ops_t *io_ops);
/* 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);
int enet_enabled(struct enet* enet);
void enet_disable(struct enet* enet);
void enet_set_mac(struct enet* enet, unsigned char* mac);
void enet_get_mac(struct enet* enet, unsigned char* mac);
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_print_state(struct enet * enet);
void enet_prom_enable(struct enet * enet);
void enet_prom_disable(struct enet * enet);