/*
 *  Atheros AR71xx SoC device definitions
 *
 *  Copyright (C) 2008-2012 Gabor Juhos <juhosg@openwrt.org>
 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License version 2 as published
 *  by the Free Software Foundation.
 */

#ifndef _ATH79_DEV_ETH_H
#define _ATH79_DEV_ETH_H

#include <asm/mach-ath79/ag71xx_platform.h>

struct platform_device;

extern unsigned char ath79_mac_base[] __initdata;
void ath79_parse_mac_addr(char *mac_str);
void ath79_init_mac(unsigned char *dst, const unsigned char *src,
		    int offset);
void ath79_init_local_mac(unsigned char *dst, const unsigned char *src);

struct ath79_eth_pll_data {
	u32	pll_10;
	u32	pll_100;
	u32	pll_1000;
};

extern struct ath79_eth_pll_data ath79_eth0_pll_data;
extern struct ath79_eth_pll_data ath79_eth1_pll_data;

extern struct ag71xx_platform_data ath79_eth0_data;
extern struct ag71xx_platform_data ath79_eth1_data;
extern struct platform_device ath79_eth0_device;
extern struct platform_device ath79_eth1_device;
void ath79_register_eth(unsigned int id);
void ath79_init_eth_pdata(unsigned int id);

extern struct ag71xx_switch_platform_data ath79_switch_data;

extern struct platform_device ath79_mdio0_device;
extern struct platform_device ath79_mdio1_device;
extern struct ag71xx_mdio_platform_data ath79_mdio0_data;
extern struct ag71xx_mdio_platform_data ath79_mdio1_data;
void ath79_register_mdio(unsigned int id, u32 phy_mask);
void ath79_init_mdio_pdata(unsigned int id, u32 phy_mask);

void ath79_setup_ar933x_phy4_switch(bool mac, bool mdio);
void ath79_setup_ar934x_eth_cfg(u32 mask);

#endif /* _ATH79_DEV_ETH_H */
