//==========================================================================
#include <pkgconf/system.h>
+#include <pkgconf/io_eth_drivers.h>
+#include <pkgconf/devs_eth_phy.h>
#include <cyg/infra/cyg_type.h>
-#include <cyg/infra/diag.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/drv_api.h>
{
cyg_uint32 retval;
int i, off;
- bool is_read = ((cmd & MII_Cmd) == MII_Read);
+ bool is_read = (cmd & MII_Cmd) == MII_Read;
// Set both bits as output
- (f->ops.bit_level_ops.set_dir)(1);
+ f->ops.bit_level_ops.set_dir(1);
// Preamble
for (i = 0; i < 32; i++) {
- (f->ops.bit_level_ops.set_clock)(0);
- (f->ops.bit_level_ops.set_data)(1);
+ f->ops.bit_level_ops.set_clock(0);
+ f->ops.bit_level_ops.set_data(1);
CYGACC_CALL_IF_DELAY_US(1);
- (f->ops.bit_level_ops.set_clock)(1);
+ f->ops.bit_level_ops.set_clock(1);
CYGACC_CALL_IF_DELAY_US(1);
}
// Command/data
for (i = 0, off = 31; i < (is_read ? 14 : 32); i++, --off) {
- (f->ops.bit_level_ops.set_clock)(0);
- (f->ops.bit_level_ops.set_data)((cmd >> off) & 0x00000001);
+ f->ops.bit_level_ops.set_clock(0);
+ f->ops.bit_level_ops.set_data((cmd >> off) & 0x00000001);
CYGACC_CALL_IF_DELAY_US(1);
- (f->ops.bit_level_ops.set_clock)(1);
+ f->ops.bit_level_ops.set_clock(1);
CYGACC_CALL_IF_DELAY_US(1);
}
if (is_read) {
retval >>= 16;
- (f->ops.bit_level_ops.set_clock)(0);
- (f->ops.bit_level_ops.set_dir)(0);
+ f->ops.bit_level_ops.set_clock(0);
+ f->ops.bit_level_ops.set_dir(0);
CYGACC_CALL_IF_DELAY_US(1);
- (f->ops.bit_level_ops.set_clock)(1);
+ f->ops.bit_level_ops.set_clock(1);
CYGACC_CALL_IF_DELAY_US(1);
- (f->ops.bit_level_ops.set_clock)(0);
+ f->ops.bit_level_ops.set_clock(0);
CYGACC_CALL_IF_DELAY_US(1);
for (i = 0, off = 15; i < 16; i++, off--) {
- (f->ops.bit_level_ops.set_clock)(1);
+ f->ops.bit_level_ops.set_clock(1);
retval <<= 1;
- retval |= (f->ops.bit_level_ops.get_data)();
+ retval |= f->ops.bit_level_ops.get_data();
CYGACC_CALL_IF_DELAY_US(1);
- (f->ops.bit_level_ops.set_clock)(0);
+ f->ops.bit_level_ops.set_clock(0);
CYGACC_CALL_IF_DELAY_US(1);
}
}
// Set both bits as output
- (f->ops.bit_level_ops.set_dir)(1);
+ f->ops.bit_level_ops.set_dir(1);
// Postamble
for (i = 0; i < 32; i++) {
- (f->ops.bit_level_ops.set_clock)(0);
- (f->ops.bit_level_ops.set_data)(1);
+ f->ops.bit_level_ops.set_clock(0);
+ f->ops.bit_level_ops.set_data(1);
CYGACC_CALL_IF_DELAY_US(1);
- (f->ops.bit_level_ops.set_clock)(1);
+ f->ops.bit_level_ops.set_clock(1);
CYGACC_CALL_IF_DELAY_US(1);
}
{
int addr;
unsigned short state;
- unsigned long id;
+ unsigned long id = 0;
struct _eth_phy_dev_entry *dev;
if (f->init_done) return true;
- (f->init)();
+ f->init();
// Scan to determine PHY address
f->init_done = true;
for (addr = 0; addr < 0x20; addr++) {
if (_eth_phy_read(f, PHY_ID1, addr, &state)) {
- if (state == 0xffff || state == 0x0000) {
- continue;
- }
- id = state << 16;
+ id = state << 16;
if (_eth_phy_read(f, PHY_ID2, addr, &state)) {
id |= state;
f->phy_addr = addr;
for (dev = __ETH_PHY_TAB__; dev != &__ETH_PHY_TAB_END__; dev++) {
if (dev->id == id) {
- diag_printf("PHY: %s\n", dev->name);
+ eth_phy_printf("PHY: %s\n", dev->name);
f->dev = dev;
return true;
}
}
- diag_printf("Unsupported PHY device - id: %08lx\n", id);
- //break; // Can't handle this PHY, but look for others!
}
}
}
+ if (addr >= 0x20) {
+ // Can't handle this PHY
+ eth_phy_printf("Unsupported PHY device - id: %lx\n", id);
+ }
f->init_done = false;
return false;
}
_eth_phy_reset(eth_phy_access_t *f)
{
if (!f->init_done) {
- diag_printf("PHY reset without init on PHY: %p\n", f);
+ eth_phy_printf("PHY reset without init on PHY: %p\n", f);
return;
}
- (f->init)();
+ f->init();
}
externC void
_eth_phy_write(eth_phy_access_t *f, int reg, int addr, unsigned short data)
{
if (!f->init_done) {
- diag_printf("PHY write without init on PHY: %p\n", f);
+ eth_phy_printf("PHY write without init on PHY: %p\n", f);
return;
}
if (f->ops_type == PHY_BIT_LEVEL_ACCESS_TYPE) {
phy_cmd(f, MII_Start | MII_Write | MII_Phy(addr) | MII_Reg(reg) | MII_TA | data);
} else {
- (f->ops.reg_level_ops.put_reg)(reg, addr, data);
+ f->ops.reg_level_ops.put_reg(reg, addr, data);
}
}
cyg_uint32 ret;
if (!f->init_done) {
- diag_printf("PHY read without init on PHY: %p\n", f);
+ eth_phy_printf("PHY read without init on PHY: %p\n", f);
return false;
}
if (f->ops_type == PHY_BIT_LEVEL_ACCESS_TYPE) {
*val = ret;
return true;
} else {
- return (f->ops.reg_level_ops.get_reg)(reg, addr, val);
+ return f->ops.reg_level_ops.get_reg(reg, addr, val);
}
}
int i;
if (!f->init_done) {
- diag_printf("PHY config without init on PHY: %p\n", f);
+ eth_phy_printf("PHY config without init on PHY: %p\n", f);
return 0;
}
_eth_phy_write(f, PHY_BMCR, f->phy_addr, PHY_BMCR_RESET);
for (i = 0; i < 5*100; i++) {
phy_ok = _eth_phy_read(f, PHY_BMCR, f->phy_addr, &phy_state);
- diag_printf("PHY: %04x\n", phy_state);
+ eth_phy_printf("PHY: %x\n", phy_state);
if (phy_ok && !(phy_state & PHY_BMCR_RESET)) break;
CYGACC_CALL_IF_DELAY_US(10000); // 10ms
}
if (!phy_ok || (phy_state & PHY_BMCR_RESET)) {
- diag_printf("PPC405: Can't get PHY unit to soft reset: %04x\n", phy_state);
+ eth_phy_printf("PPC405: Can't get PHY unit to soft reset: %x\n", phy_state);
return 0;
}
}
}
if (phy_timeout <= 0) {
- diag_printf("** PPC405 Warning: PHY LINK UP failed: %04x\n", phy_state);
+ eth_phy_printf("** PPC405 Warning: PHY LINK UP failed: %04x\n", phy_state);
return 0;
}
int state = 0;
if (!f->init_done) {
- diag_printf("PHY state without init on PHY: %p\n", f);
+ eth_phy_printf("PHY state without init on PHY: %p\n", f);
return 0;
}
- if ((f->dev->stat)(f, &state)) {
+ if (f->dev->stat(f, &state)) {
return state;
} else {
return 0;