blob: 78de2e7f01592b06d697677b168dd2d54b70be13 [file] [log] [blame]
/*
* MDIO used to interact with the PHY when using GMII/MII
*/
#ifndef _TITAN_MDIO_H
#define _TITAN_MDIO_H
#include <linux/netdevice.h>
#include <linux/tqueue.h>
#include <linux/delay.h>
#include "titan_ge.h"
#define TITAN_GE_MDIO_ERROR (-9000)
#define TITAN_GE_MDIO_GOOD 0
#define TITAN_GE_MDIO_BASE TITAN_GE_BASE
#define TITAN_GE_MDIO_READ(offset) *(volatile u32 *)(TITAN_GE_MDIO_BASE + offset)
#define TITAN_GE_MDIO_WRITE(offset, data) \
*(volatile u32 *)(TITAN_GE_MDIO_BASE + offset) = data
/* GMII specific registers */
#define TITAN_GE_MARVEL_PHY_ID 0x00
#define TITAN_PHY_AUTONEG_ADV 0x04
#define TITAN_PHY_LP_ABILITY 0x05
#define TITAN_GE_MDIO_MII_CTRL 0x09
#define TITAN_GE_MDIO_MII_EXTENDED 0x0f
#define TITAN_GE_MDIO_PHY_CTRL 0x10
#define TITAN_GE_MDIO_PHY_STATUS 0x11
#define TITAN_GE_MDIO_PHY_IE 0x12
#define TITAN_GE_MDIO_PHY_IS 0x13
#define TITAN_GE_MDIO_PHY_LED 0x18
#define TITAN_GE_MDIO_PHY_LED_OVER 0x19
#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */
/*
* MDIO Config Structure
*/
typedef struct
{
unsigned int clka;
int mdio_spre;
int mdio_mode;
} titan_ge_mdio_config;
/*
* Function Prototypes
*/
int titan_ge_mdio_setup(titan_ge_mdio_config *);
int titan_ge_mdio_inaddrs(int, int);
int titan_ge_mdio_read(int, int, unsigned int *);
int titan_ge_mdio_write(int, int, unsigned int);
#endif /* _TITAN_MDIO_H */