/*
 * 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);
