int at91rm9200_miidev_initialize(void) { #if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) mii_register("at91rm9200phy", at91rm9200_miidev_read, at91rm9200_miidev_write); #endif return 0; }
static int netx_eth_probe(struct device_d *dev) { struct eth_device *edev; struct netx_eth_priv *priv; struct netx_eth_platform_data *pdata; debug("netx_eth_probe()\n"); pdata = dev->platform_data; edev = xzalloc(sizeof(struct eth_device) + sizeof(struct netx_eth_priv)); dev->type_data = edev; edev->priv = (struct netx_priv *)(edev + 1); priv = edev->priv; priv->xcno = pdata->xcno; edev->init = netx_eth_init_dev; edev->open = netx_eth_open; edev->send = netx_eth_send; edev->recv = netx_eth_rx; edev->halt = netx_eth_halt; edev->get_ethaddr = netx_eth_get_ethaddr; edev->set_ethaddr = netx_eth_set_ethaddr; edev->parent = dev; priv->miidev.read = netx_miidev_read; priv->miidev.write = netx_miidev_write; priv->miidev.address = 0; priv->miidev.flags = 0; priv->miidev.parent = dev; netx_eth_init_phy(); mii_register(&priv->miidev); eth_register(edev); return 0; }
static int macb_probe(struct device_d *dev) { struct eth_device *edev; struct macb_device *macb; unsigned long macb_hz; u32 ncfgr; struct at91_ether_platform_data *pdata; #if defined(CONFIG_ARCH_AT91) struct clk *pclk; #endif if (!dev->platform_data) { printf("macb: no platform_data\n"); return -ENODEV; } pdata = dev->platform_data; edev = xzalloc(sizeof(struct eth_device) + sizeof(struct macb_device)); dev->type_data = edev; edev->priv = (struct macb_device *)(edev + 1); macb = edev->priv; edev->init = macb_init; edev->open = macb_open; edev->send = macb_send; edev->recv = macb_recv; edev->halt = macb_halt; edev->get_ethaddr = macb_get_ethaddr; edev->set_ethaddr = macb_set_ethaddr; macb->miidev.read = macb_phy_read; macb->miidev.write = macb_phy_write; macb->miidev.address = pdata->phy_addr; macb->miidev.flags = pdata->flags & AT91SAM_ETHER_FORCE_LINK ? MIIDEV_FORCE_LINK : 0; macb->miidev.edev = edev; macb->flags = pdata->flags; macb->rx_buffer = xmalloc(CFG_MACB_RX_BUFFER_SIZE); macb->rx_ring = xmalloc(CFG_MACB_RX_RING_SIZE * sizeof(struct macb_dma_desc)); macb->tx_ring = xmalloc(sizeof(struct macb_dma_desc)); macb->regs = (void *)dev->map_base; /* * Do some basic initialization so that we at least can talk * to the PHY */ #if defined(CONFIG_ARCH_AT91) pclk = clk_get(dev, "macb_clk"); clk_enable(pclk); macb_hz = clk_get_rate(pclk); #else macb_hz = get_macb_pclk_rate(0); #endif if (macb_hz < 20000000) ncfgr = MACB_BF(CLK, MACB_CLK_DIV8); else if (macb_hz < 40000000) ncfgr = MACB_BF(CLK, MACB_CLK_DIV16); else if (macb_hz < 80000000) ncfgr = MACB_BF(CLK, MACB_CLK_DIV32); else ncfgr = MACB_BF(CLK, MACB_CLK_DIV64); writel(ncfgr, macb->regs + MACB_NCFGR); mii_register(&macb->miidev); eth_register(edev); return 0; }