/*
 * Xilinx xps_ll_temac ethernet driver for u-boot
 *
 * MDIO bus access interface
 *
 * Copyright (C) 2011 - 2012 Stephan Linz <linz@li-pro.net>
 * Copyright (C) 2008 - 2011 Michal Simek <monstr@monstr.eu>
 * Copyright (C) 2008 - 2011 PetaLogix
 *
 * Based on Yoshio Kashiwagi kashiwagi@co-nss.co.jp driver
 * Copyright (C) 2008 Nissin Systems Co.,Ltd.
 * March 2008 created
 *
 * SPDX-License-Identifier:	GPL-2.0+
 *
 * [0]: http://www.xilinx.com/support/documentation
 *
 * [S]:	[0]/ip_documentation/xps_ll_temac.pdf
 * [A]:	[0]/application_notes/xapp1041.pdf
 */
#ifndef _XILINX_LL_TEMAC_MDIO_
#define _XILINX_LL_TEMAC_MDIO_

#include <net.h>
#include <miiphy.h>

#include <asm/types.h>
#include <asm/byteorder.h>

#include "xilinx_ll_temac.h"

int ll_temac_local_mdio_read(struct temac_reg *regs, int addr, int devad,
				int regnum);
void ll_temac_local_mdio_write(struct temac_reg *regs, int addr, int devad,
				int regnum, u16 value);

int ll_temac_phy_read(struct mii_dev *bus, int addr, int devad, int regnum);
int ll_temac_phy_write(struct mii_dev *bus, int addr, int devad, int regnum,
			u16 value);

int ll_temac_phy_addr(struct mii_dev *bus);

struct ll_temac_mdio_info {
	struct temac_reg *regs;
	char *name;
};

int xilinx_ll_temac_mdio_initialize(bd_t *bis, struct ll_temac_mdio_info *info);

#endif /* _XILINX_LL_TEMAC_MDIO_ */
