• Home
  • Raw
  • Download

Lines Matching refs:priv

201 static inline u32 *ethoc_reg(struct ethoc *priv, size_t offset)  in ethoc_reg()  argument
203 return priv->iobase + offset; in ethoc_reg()
206 static inline u32 ethoc_read(struct ethoc *priv, size_t offset) in ethoc_read() argument
208 return readl(ethoc_reg(priv, offset)); in ethoc_read()
211 static inline void ethoc_write(struct ethoc *priv, size_t offset, u32 data) in ethoc_write() argument
213 writel(data, ethoc_reg(priv, offset)); in ethoc_write()
216 static inline void ethoc_read_bd(struct ethoc *priv, int index, in ethoc_read_bd() argument
220 bd->stat = ethoc_read(priv, offset + 0); in ethoc_read_bd()
221 bd->addr = ethoc_read(priv, offset + 4); in ethoc_read_bd()
224 static inline void ethoc_write_bd(struct ethoc *priv, int index, in ethoc_write_bd() argument
228 ethoc_write(priv, offset + 0, bd->stat); in ethoc_write_bd()
229 ethoc_write(priv, offset + 4, bd->addr); in ethoc_write_bd()
232 static int ethoc_write_hwaddr_common(struct ethoc *priv, u8 *mac) in ethoc_write_hwaddr_common() argument
234 ethoc_write(priv, MAC_ADDR0, (mac[2] << 24) | (mac[3] << 16) | in ethoc_write_hwaddr_common()
236 ethoc_write(priv, MAC_ADDR1, (mac[0] << 8) | (mac[1] << 0)); in ethoc_write_hwaddr_common()
240 static inline void ethoc_ack_irq(struct ethoc *priv, u32 mask) in ethoc_ack_irq() argument
242 ethoc_write(priv, INT_SOURCE, mask); in ethoc_ack_irq()
245 static inline void ethoc_enable_rx_and_tx(struct ethoc *priv) in ethoc_enable_rx_and_tx() argument
247 u32 mode = ethoc_read(priv, MODER); in ethoc_enable_rx_and_tx()
249 ethoc_write(priv, MODER, mode); in ethoc_enable_rx_and_tx()
252 static inline void ethoc_disable_rx_and_tx(struct ethoc *priv) in ethoc_disable_rx_and_tx() argument
254 u32 mode = ethoc_read(priv, MODER); in ethoc_disable_rx_and_tx()
256 ethoc_write(priv, MODER, mode); in ethoc_disable_rx_and_tx()
259 static int ethoc_init_ring(struct ethoc *priv) in ethoc_init_ring() argument
262 phys_addr_t addr = priv->packet_phys; in ethoc_init_ring()
265 priv->cur_tx = 0; in ethoc_init_ring()
266 priv->dty_tx = 0; in ethoc_init_ring()
267 priv->cur_rx = 0; in ethoc_init_ring()
273 for (i = 0; i < priv->num_tx; i++) { in ethoc_init_ring()
278 if (i == priv->num_tx - 1) in ethoc_init_ring()
281 ethoc_write_bd(priv, i, &bd); in ethoc_init_ring()
286 for (i = 0; i < priv->num_rx; i++) { in ethoc_init_ring()
293 if (i == priv->num_rx - 1) in ethoc_init_ring()
298 ethoc_write_bd(priv, priv->num_tx + i, &bd); in ethoc_init_ring()
304 static int ethoc_reset(struct ethoc *priv) in ethoc_reset() argument
310 ethoc_disable_rx_and_tx(priv); in ethoc_reset()
315 mode = ethoc_read(priv, MODER); in ethoc_reset()
317 ethoc_write(priv, MODER, mode); in ethoc_reset()
320 mode = ethoc_read(priv, MODER); in ethoc_reset()
322 ethoc_write(priv, MODER, mode); in ethoc_reset()
323 ethoc_write(priv, IPGT, 0x15); in ethoc_reset()
325 ethoc_ack_irq(priv, INT_MASK_ALL); in ethoc_reset()
326 ethoc_enable_rx_and_tx(priv); in ethoc_reset()
330 static int ethoc_init_common(struct ethoc *priv) in ethoc_init_common() argument
334 priv->num_tx = 1; in ethoc_init_common()
335 priv->num_rx = PKTBUFSRX; in ethoc_init_common()
336 ethoc_write(priv, TX_BD_NUM, priv->num_tx); in ethoc_init_common()
337 ethoc_init_ring(priv); in ethoc_init_common()
338 ethoc_reset(priv); in ethoc_init_common()
341 ret = phy_startup(priv->phydev); in ethoc_init_common()
344 priv->phydev->dev->name); in ethoc_init_common()
351 static void ethoc_stop_common(struct ethoc *priv) in ethoc_stop_common() argument
353 ethoc_disable_rx_and_tx(priv); in ethoc_stop_common()
355 phy_shutdown(priv->phydev); in ethoc_stop_common()
394 static int ethoc_rx_common(struct ethoc *priv, uchar **packetp) in ethoc_rx_common() argument
397 u32 i = priv->cur_rx % priv->num_rx; in ethoc_rx_common()
398 u32 entry = priv->num_tx + i; in ethoc_rx_common()
400 ethoc_read_bd(priv, entry, &bd); in ethoc_rx_common()
405 __func__, priv->cur_rx, bd.stat); in ethoc_rx_common()
410 if (priv->packet) in ethoc_rx_common()
411 *packetp = priv->packet + entry * PKTSIZE_ALIGN; in ethoc_rx_common()
420 static int ethoc_is_new_packet_received(struct ethoc *priv) in ethoc_is_new_packet_received() argument
424 pending = ethoc_read(priv, INT_SOURCE); in ethoc_is_new_packet_received()
425 ethoc_ack_irq(priv, pending); in ethoc_is_new_packet_received()
453 static void ethoc_tx(struct ethoc *priv) in ethoc_tx() argument
455 u32 entry = priv->dty_tx % priv->num_tx; in ethoc_tx()
458 ethoc_read_bd(priv, entry, &bd); in ethoc_tx()
463 static int ethoc_send_common(struct ethoc *priv, void *packet, int length) in ethoc_send_common() argument
470 entry = priv->cur_tx % priv->num_tx; in ethoc_send_common()
471 ethoc_read_bd(priv, entry, &bd); in ethoc_send_common()
477 if (priv->packet) { in ethoc_send_common()
478 void *p = priv->packet + entry * PKTSIZE_ALIGN; in ethoc_send_common()
488 ethoc_write_bd(priv, entry, &bd); in ethoc_send_common()
492 ethoc_write_bd(priv, entry, &bd); in ethoc_send_common()
497 pending = ethoc_read(priv, INT_SOURCE); in ethoc_send_common()
498 ethoc_ack_irq(priv, pending & ~INT_MASK_RX); in ethoc_send_common()
503 ethoc_tx(priv); in ethoc_send_common()
516 static int ethoc_free_pkt_common(struct ethoc *priv) in ethoc_free_pkt_common() argument
519 u32 i = priv->cur_rx % priv->num_rx; in ethoc_free_pkt_common()
520 u32 entry = priv->num_tx + i; in ethoc_free_pkt_common()
523 ethoc_read_bd(priv, entry, &bd); in ethoc_free_pkt_common()
525 if (priv->packet) in ethoc_free_pkt_common()
526 src = priv->packet + entry * PKTSIZE_ALIGN; in ethoc_free_pkt_common()
534 ethoc_write_bd(priv, entry, &bd); in ethoc_free_pkt_common()
535 priv->cur_rx++; in ethoc_free_pkt_common()
544 struct ethoc *priv = bus->priv; in ethoc_mdio_read() local
547 ethoc_write(priv, MIIADDRESS, MIIADDRESS_ADDR(addr, reg)); in ethoc_mdio_read()
548 ethoc_write(priv, MIICOMMAND, MIICOMMAND_READ); in ethoc_mdio_read()
550 rc = wait_for_bit_le32(ethoc_reg(priv, MIISTATUS), in ethoc_mdio_read()
554 u32 data = ethoc_read(priv, MIIRX_DATA); in ethoc_mdio_read()
557 ethoc_write(priv, MIICOMMAND, 0); in ethoc_mdio_read()
566 struct ethoc *priv = bus->priv; in ethoc_mdio_write() local
569 ethoc_write(priv, MIIADDRESS, MIIADDRESS_ADDR(addr, reg)); in ethoc_mdio_write()
570 ethoc_write(priv, MIITX_DATA, val); in ethoc_mdio_write()
571 ethoc_write(priv, MIICOMMAND, MIICOMMAND_WRITE); in ethoc_mdio_write()
573 rc = wait_for_bit_le32(ethoc_reg(priv, MIISTATUS), in ethoc_mdio_write()
578 ethoc_write(priv, MIICOMMAND, 0); in ethoc_mdio_write()
583 static int ethoc_mdio_init(const char *name, struct ethoc *priv) in ethoc_mdio_init() argument
596 bus->priv = priv; in ethoc_mdio_init()
602 priv->bus = miiphy_get_dev_by_name(name); in ethoc_mdio_init()
606 static int ethoc_phy_init(struct ethoc *priv, void *dev) in ethoc_phy_init() argument
615 phydev = phy_find_by_mask(priv->bus, mask, PHY_INTERFACE_MODE_MII); in ethoc_phy_init()
624 priv->phydev = phydev; in ethoc_phy_init()
632 static inline int ethoc_mdio_init(const char *name, struct ethoc *priv) in ethoc_mdio_init() argument
637 static inline int ethoc_phy_init(struct ethoc *priv, void *dev) in ethoc_phy_init() argument
649 struct ethoc *priv = dev_get_priv(dev); in ethoc_write_hwaddr() local
652 return ethoc_write_hwaddr_common(priv, mac); in ethoc_write_hwaddr()
667 struct ethoc *priv = dev_get_priv(dev); in ethoc_recv() local
670 if (!ethoc_is_new_packet_received(priv)) in ethoc_recv()
673 return ethoc_rx_common(priv, packetp); in ethoc_recv()
701 struct ethoc *priv = dev_get_priv(dev); in ethoc_probe() local
703 priv->iobase = ioremap(pdata->eth_pdata.iobase, ETHOC_IOSIZE); in ethoc_probe()
705 priv->packet_phys = pdata->packet_base; in ethoc_probe()
706 priv->packet = ioremap(pdata->packet_base, in ethoc_probe()
710 ethoc_mdio_init(dev->name, priv); in ethoc_probe()
711 ethoc_phy_init(priv, dev); in ethoc_probe()
718 struct ethoc *priv = dev_get_priv(dev); in ethoc_remove() local
721 free(priv->phydev); in ethoc_remove()
722 mdio_unregister(priv->bus); in ethoc_remove()
723 mdio_free(priv->bus); in ethoc_remove()
725 iounmap(priv->iobase); in ethoc_remove()
759 struct ethoc *priv = (struct ethoc *)dev->priv; in ethoc_init() local
761 return ethoc_init_common(priv); in ethoc_init()
766 struct ethoc *priv = (struct ethoc *)dev->priv; in ethoc_write_hwaddr() local
769 return ethoc_write_hwaddr_common(priv, mac); in ethoc_write_hwaddr()
774 return ethoc_send_common(dev->priv, packet, length); in ethoc_send()
779 ethoc_disable_rx_and_tx(dev->priv); in ethoc_halt()
784 struct ethoc *priv = (struct ethoc *)dev->priv; in ethoc_recv() local
787 if (!ethoc_is_new_packet_received(priv)) in ethoc_recv()
792 int size = ethoc_rx_common(priv, &packetp); in ethoc_recv()
798 ethoc_free_pkt_common(priv); in ethoc_recv()
805 struct ethoc *priv; in ethoc_initialize() local
808 priv = malloc(sizeof(*priv)); in ethoc_initialize()
809 if (!priv) in ethoc_initialize()
813 free(priv); in ethoc_initialize()
818 dev->priv = priv; in ethoc_initialize()
826 priv->iobase = ioremap(dev->iobase, ETHOC_IOSIZE); in ethoc_initialize()
830 ethoc_mdio_init(dev->name, priv); in ethoc_initialize()
831 ethoc_phy_init(priv, dev); in ethoc_initialize()