#ifndef __BACKPORT_LINUX_PHY_H
#define __BACKPORT_LINUX_PHY_H
#include_next <linux/phy.h>
#include <linux/compiler.h>
#include <linux/version.h>

#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0))
#define phy_connect(dev, bus_id, handler, interface) \
	phy_connect(dev, bus_id, handler, 0, interface)
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0))
#define phydev_name LINUX_BACKPORT(phydev_name)
static inline const char *phydev_name(const struct phy_device *phydev)
{
	return dev_name(&phydev->dev);
}

#define mdiobus_is_registered_device LINUX_BACKPORT(mdiobus_is_registered_device)
static inline bool mdiobus_is_registered_device(struct mii_bus *bus, int addr)
{
	return bus->phy_map[addr];
}

#define phy_attached_print LINUX_BACKPORT(phy_attached_print)
void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
	__printf(2, 3);
#define phy_attached_info LINUX_BACKPORT(phy_attached_info)
void phy_attached_info(struct phy_device *phydev);

static inline int backport_mdiobus_register(struct mii_bus *bus)
{
	bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
	if (!bus->irq) {
		pr_err("mii_bus irq allocation failed\n");
		return -ENOMEM;
	}

	memset(bus->irq, PHY_POLL, sizeof(int) * PHY_MAX_ADDR);

/* in kernel 4.3 a #define for mdiobus_register is added to the kernel. */
#ifndef mdiobus_register
	return mdiobus_register(bus);
#else
	return __mdiobus_register(bus, THIS_MODULE);
#endif
}
#ifdef mdiobus_register
#undef mdiobus_register
#endif
#define mdiobus_register LINUX_BACKPORT(mdiobus_register)

static inline void backport_mdiobus_unregister(struct mii_bus *bus)
{
	kfree(bus->irq);
	mdiobus_unregister(bus);
}
#define mdiobus_unregister LINUX_BACKPORT(mdiobus_unregister)
#endif /* < 4.5 */

#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0))
#define phydev_get_addr LINUX_BACKPORT(phydev_get_addr)
static inline int phydev_get_addr(struct phy_device *phydev)
{
	return phydev->addr;
}
#else
#define phydev_get_addr LINUX_BACKPORT(phydev_get_addr)
static inline int phydev_get_addr(struct phy_device *phydev)
{
	return phydev->mdio.addr;
}
#endif

#endif /* __BACKPORT_LINUX_PHY_H */
