/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2015 Freescale Semiconductor
 */

#ifndef __LDPAA_WRIOP_H
#define __LDPAA_WRIOP_H

 #include <phy.h>

enum wriop_port {
	WRIOP1_DPMAC1 = 1,
	WRIOP1_DPMAC2,
	WRIOP1_DPMAC3,
	WRIOP1_DPMAC4,
	WRIOP1_DPMAC5,
	WRIOP1_DPMAC6,
	WRIOP1_DPMAC7,
	WRIOP1_DPMAC8,
	WRIOP1_DPMAC9,
	WRIOP1_DPMAC10,
	WRIOP1_DPMAC11,
	WRIOP1_DPMAC12,
	WRIOP1_DPMAC13,
	WRIOP1_DPMAC14,
	WRIOP1_DPMAC15,
	WRIOP1_DPMAC16,
	WRIOP1_DPMAC17,
	WRIOP1_DPMAC18,
	WRIOP1_DPMAC19,
	WRIOP1_DPMAC20,
	WRIOP1_DPMAC21,
	WRIOP1_DPMAC22,
	WRIOP1_DPMAC23,
	WRIOP1_DPMAC24,
	NUM_WRIOP_PORTS,
};

struct wriop_dpmac_info {
	u8 enabled;
	u8 id;
	u8 board_mux;
	int phy_addr;
	void *phy_regs;
	phy_interface_t enet_if;
	struct phy_device *phydev;
	struct mii_dev *bus;
};

extern struct wriop_dpmac_info dpmac_info[NUM_WRIOP_PORTS];

#define DEFAULT_WRIOP_MDIO1_NAME "FSL_MDIO0"
#define DEFAULT_WRIOP_MDIO2_NAME "FSL_MDIO1"

void wriop_init_dpmac(int, int, int);
void wriop_disable_dpmac(int);
void wriop_enable_dpmac(int);
u8 wriop_is_enabled_dpmac(int dpmac_id);
void wriop_set_mdio(int, struct mii_dev *);
struct mii_dev *wriop_get_mdio(int);
void wriop_set_phy_address(int, int);
int wriop_get_phy_address(int);
void wriop_set_phy_dev(int, struct phy_device *);
struct phy_device *wriop_get_phy_dev(int);
phy_interface_t wriop_get_enet_if(int);

void wriop_dpmac_disable(int);
void wriop_dpmac_enable(int);
phy_interface_t wriop_dpmac_enet_if(int, int);
void wriop_init_dpmac_qsgmii(int, int);
void wriop_init_rgmii(void);
void wriop_init_dpmac_enet_if(int , phy_interface_t);
#endif	/* __LDPAA_WRIOP_H */