Lines Matching refs:priv
92 u8 (*read)(struct w5100_priv *priv, u16 addr);
93 void (*write)(struct w5100_priv *priv, u16 addr, u8 data);
94 u16 (*read16)(struct w5100_priv *priv, u16 addr);
95 void (*write16)(struct w5100_priv *priv, u16 addr, u16 data);
96 void (*readbuf)(struct w5100_priv *priv, u16 addr, u8 *buf, int len);
97 void (*writebuf)(struct w5100_priv *priv, u16 addr, u8 *buf, int len);
120 static inline u8 w5100_read_direct(struct w5100_priv *priv, u16 addr) in w5100_read_direct() argument
122 return ioread8(priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); in w5100_read_direct()
125 static inline void w5100_write_direct(struct w5100_priv *priv, in w5100_write_direct() argument
128 iowrite8(data, priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); in w5100_write_direct()
131 static u16 w5100_read16_direct(struct w5100_priv *priv, u16 addr) in w5100_read16_direct() argument
134 data = w5100_read_direct(priv, addr) << 8; in w5100_read16_direct()
135 data |= w5100_read_direct(priv, addr + 1); in w5100_read16_direct()
139 static void w5100_write16_direct(struct w5100_priv *priv, u16 addr, u16 data) in w5100_write16_direct() argument
141 w5100_write_direct(priv, addr, data >> 8); in w5100_write16_direct()
142 w5100_write_direct(priv, addr + 1, data); in w5100_write16_direct()
145 static void w5100_readbuf_direct(struct w5100_priv *priv, in w5100_readbuf_direct() argument
154 *buf++ = w5100_read_direct(priv, addr); in w5100_readbuf_direct()
158 static void w5100_writebuf_direct(struct w5100_priv *priv, in w5100_writebuf_direct() argument
167 w5100_write_direct(priv, addr, *buf++); in w5100_writebuf_direct()
182 static u8 w5100_read_indirect(struct w5100_priv *priv, u16 addr) in w5100_read_indirect() argument
187 spin_lock_irqsave(&priv->reg_lock, flags); in w5100_read_indirect()
188 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_read_indirect()
190 data = w5100_read_direct(priv, W5100_IDM_DR); in w5100_read_indirect()
191 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5100_read_indirect()
196 static void w5100_write_indirect(struct w5100_priv *priv, u16 addr, u8 data) in w5100_write_indirect() argument
200 spin_lock_irqsave(&priv->reg_lock, flags); in w5100_write_indirect()
201 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_write_indirect()
203 w5100_write_direct(priv, W5100_IDM_DR, data); in w5100_write_indirect()
205 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5100_write_indirect()
208 static u16 w5100_read16_indirect(struct w5100_priv *priv, u16 addr) in w5100_read16_indirect() argument
213 spin_lock_irqsave(&priv->reg_lock, flags); in w5100_read16_indirect()
214 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_read16_indirect()
216 data = w5100_read_direct(priv, W5100_IDM_DR) << 8; in w5100_read16_indirect()
217 data |= w5100_read_direct(priv, W5100_IDM_DR); in w5100_read16_indirect()
218 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5100_read16_indirect()
223 static void w5100_write16_indirect(struct w5100_priv *priv, u16 addr, u16 data) in w5100_write16_indirect() argument
227 spin_lock_irqsave(&priv->reg_lock, flags); in w5100_write16_indirect()
228 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_write16_indirect()
230 w5100_write_direct(priv, W5100_IDM_DR, data >> 8); in w5100_write16_indirect()
231 w5100_write_direct(priv, W5100_IDM_DR, data); in w5100_write16_indirect()
233 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5100_write16_indirect()
236 static void w5100_readbuf_indirect(struct w5100_priv *priv, in w5100_readbuf_indirect() argument
243 spin_lock_irqsave(&priv->reg_lock, flags); in w5100_readbuf_indirect()
244 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_readbuf_indirect()
250 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_readbuf_indirect()
253 *buf++ = w5100_read_direct(priv, W5100_IDM_DR); in w5100_readbuf_indirect()
256 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5100_readbuf_indirect()
259 static void w5100_writebuf_indirect(struct w5100_priv *priv, in w5100_writebuf_indirect() argument
266 spin_lock_irqsave(&priv->reg_lock, flags); in w5100_writebuf_indirect()
267 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_writebuf_indirect()
273 w5100_write16_direct(priv, W5100_IDM_AR, addr); in w5100_writebuf_indirect()
276 w5100_write_direct(priv, W5100_IDM_DR, *buf++); in w5100_writebuf_indirect()
279 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5100_writebuf_indirect()
299 #define w5100_read priv->read
300 #define w5100_write priv->write
301 #define w5100_read16 priv->read16
302 #define w5100_write16 priv->write16
303 #define w5100_readbuf priv->readbuf
304 #define w5100_writebuf priv->writebuf
307 static int w5100_command(struct w5100_priv *priv, u16 cmd) in w5100_command() argument
311 w5100_write(priv, W5100_S0_CR, cmd); in w5100_command()
314 while (w5100_read(priv, W5100_S0_CR) != 0) { in w5100_command()
323 static void w5100_write_macaddr(struct w5100_priv *priv) in w5100_write_macaddr() argument
325 struct net_device *ndev = priv->ndev; in w5100_write_macaddr()
329 w5100_write(priv, W5100_SHAR + i, ndev->dev_addr[i]); in w5100_write_macaddr()
333 static void w5100_hw_reset(struct w5100_priv *priv) in w5100_hw_reset() argument
335 w5100_write_direct(priv, W5100_MR, MR_RST); in w5100_hw_reset()
338 w5100_write_direct(priv, W5100_MR, priv->indirect ? in w5100_hw_reset()
342 w5100_write(priv, W5100_IMR, 0); in w5100_hw_reset()
343 w5100_write_macaddr(priv); in w5100_hw_reset()
348 w5100_write(priv, W5100_RMSR, 0x03); in w5100_hw_reset()
349 w5100_write(priv, W5100_TMSR, 0x03); in w5100_hw_reset()
353 static void w5100_hw_start(struct w5100_priv *priv) in w5100_hw_start() argument
355 w5100_write(priv, W5100_S0_MR, priv->promisc ? in w5100_hw_start()
358 w5100_command(priv, S0_CR_OPEN); in w5100_hw_start()
359 w5100_write(priv, W5100_IMR, IR_S0); in w5100_hw_start()
363 static void w5100_hw_close(struct w5100_priv *priv) in w5100_hw_close() argument
365 w5100_write(priv, W5100_IMR, 0); in w5100_hw_close()
367 w5100_command(priv, S0_CR_CLOSE); in w5100_hw_close()
387 struct w5100_priv *priv = netdev_priv(ndev); in w5100_get_link() local
389 if (gpio_is_valid(priv->link_gpio)) in w5100_get_link()
390 return !!gpio_get_value(priv->link_gpio); in w5100_get_link()
397 struct w5100_priv *priv = netdev_priv(ndev); in w5100_get_msglevel() local
399 return priv->msg_enable; in w5100_get_msglevel()
404 struct w5100_priv *priv = netdev_priv(ndev); in w5100_set_msglevel() local
406 priv->msg_enable = value; in w5100_set_msglevel()
417 struct w5100_priv *priv = netdev_priv(ndev); in w5100_get_regs() local
423 *buf++ = w5100_read(priv, W5100_COMMON_REGS + i); in w5100_get_regs()
425 *buf++ = w5100_read(priv, W5100_S0_REGS + i); in w5100_get_regs()
430 struct w5100_priv *priv = netdev_priv(ndev); in w5100_tx_timeout() local
433 w5100_hw_reset(priv); in w5100_tx_timeout()
434 w5100_hw_start(priv); in w5100_tx_timeout()
442 struct w5100_priv *priv = netdev_priv(ndev); in w5100_start_tx() local
447 offset = w5100_read16(priv, W5100_S0_TX_WR); in w5100_start_tx()
448 w5100_writebuf(priv, offset, skb->data, skb->len); in w5100_start_tx()
449 w5100_write16(priv, W5100_S0_TX_WR, offset + skb->len); in w5100_start_tx()
455 w5100_command(priv, S0_CR_SEND); in w5100_start_tx()
462 struct w5100_priv *priv = container_of(napi, struct w5100_priv, napi); in w5100_napi_poll() local
463 struct net_device *ndev = priv->ndev; in w5100_napi_poll()
471 u16 rx_buf_len = w5100_read16(priv, W5100_S0_RX_RSR); in w5100_napi_poll()
475 offset = w5100_read16(priv, W5100_S0_RX_RD); in w5100_napi_poll()
476 w5100_readbuf(priv, offset, header, 2); in w5100_napi_poll()
481 w5100_write16(priv, W5100_S0_RX_RD, in w5100_napi_poll()
483 w5100_command(priv, S0_CR_RECV); in w5100_napi_poll()
489 w5100_readbuf(priv, offset + 2, skb->data, rx_len); in w5100_napi_poll()
490 w5100_write16(priv, W5100_S0_RX_RD, offset + 2 + rx_len); in w5100_napi_poll()
492 w5100_command(priv, S0_CR_RECV); in w5100_napi_poll()
502 w5100_write(priv, W5100_IMR, IR_S0); in w5100_napi_poll()
512 struct w5100_priv *priv = netdev_priv(ndev); in w5100_interrupt() local
514 int ir = w5100_read(priv, W5100_S0_IR); in w5100_interrupt()
517 w5100_write(priv, W5100_S0_IR, ir); in w5100_interrupt()
521 netif_dbg(priv, tx_done, ndev, "tx done\n"); in w5100_interrupt()
526 if (napi_schedule_prep(&priv->napi)) { in w5100_interrupt()
527 w5100_write(priv, W5100_IMR, 0); in w5100_interrupt()
529 __napi_schedule(&priv->napi); in w5100_interrupt()
539 struct w5100_priv *priv = netdev_priv(ndev); in w5100_detect_link() local
542 if (gpio_get_value(priv->link_gpio) != 0) { in w5100_detect_link()
543 netif_info(priv, link, ndev, "link is up\n"); in w5100_detect_link()
546 netif_info(priv, link, ndev, "link is down\n"); in w5100_detect_link()
556 struct w5100_priv *priv = netdev_priv(ndev); in w5100_set_rx_mode() local
559 if (priv->promisc != set_promisc) { in w5100_set_rx_mode()
560 priv->promisc = set_promisc; in w5100_set_rx_mode()
561 w5100_hw_start(priv); in w5100_set_rx_mode()
567 struct w5100_priv *priv = netdev_priv(ndev); in w5100_set_macaddr() local
573 w5100_write_macaddr(priv); in w5100_set_macaddr()
579 struct w5100_priv *priv = netdev_priv(ndev); in w5100_open() local
581 netif_info(priv, ifup, ndev, "enabling\n"); in w5100_open()
582 w5100_hw_start(priv); in w5100_open()
583 napi_enable(&priv->napi); in w5100_open()
585 if (!gpio_is_valid(priv->link_gpio) || in w5100_open()
586 gpio_get_value(priv->link_gpio) != 0) in w5100_open()
593 struct w5100_priv *priv = netdev_priv(ndev); in w5100_stop() local
595 netif_info(priv, ifdown, ndev, "shutting down\n"); in w5100_stop()
596 w5100_hw_close(priv); in w5100_stop()
599 napi_disable(&priv->napi); in w5100_stop()
627 struct w5100_priv *priv = netdev_priv(ndev); in w5100_hw_probe() local
641 priv->base = devm_ioremap_resource(&pdev->dev, mem); in w5100_hw_probe()
642 if (IS_ERR(priv->base)) in w5100_hw_probe()
643 return PTR_ERR(priv->base); in w5100_hw_probe()
647 spin_lock_init(&priv->reg_lock); in w5100_hw_probe()
648 priv->indirect = mem_size < W5100_BUS_DIRECT_SIZE; in w5100_hw_probe()
649 if (priv->indirect) { in w5100_hw_probe()
650 priv->read = w5100_read_indirect; in w5100_hw_probe()
651 priv->write = w5100_write_indirect; in w5100_hw_probe()
652 priv->read16 = w5100_read16_indirect; in w5100_hw_probe()
653 priv->write16 = w5100_write16_indirect; in w5100_hw_probe()
654 priv->readbuf = w5100_readbuf_indirect; in w5100_hw_probe()
655 priv->writebuf = w5100_writebuf_indirect; in w5100_hw_probe()
657 priv->read = w5100_read_direct; in w5100_hw_probe()
658 priv->write = w5100_write_direct; in w5100_hw_probe()
659 priv->read16 = w5100_read16_direct; in w5100_hw_probe()
660 priv->write16 = w5100_write16_direct; in w5100_hw_probe()
661 priv->readbuf = w5100_readbuf_direct; in w5100_hw_probe()
662 priv->writebuf = w5100_writebuf_direct; in w5100_hw_probe()
665 w5100_hw_reset(priv); in w5100_hw_probe()
666 if (w5100_read16(priv, W5100_RTR) != RTR_DEFAULT) in w5100_hw_probe()
676 priv->irq = irq; in w5100_hw_probe()
678 priv->link_gpio = data ? data->link_gpio : -EINVAL; in w5100_hw_probe()
679 if (gpio_is_valid(priv->link_gpio)) { in w5100_hw_probe()
684 priv->link_irq = gpio_to_irq(priv->link_gpio); in w5100_hw_probe()
685 if (request_any_context_irq(priv->link_irq, w5100_detect_link, in w5100_hw_probe()
687 link_name, priv->ndev) < 0) in w5100_hw_probe()
688 priv->link_gpio = -EINVAL; in w5100_hw_probe()
697 struct w5100_priv *priv; in w5100_probe() local
701 ndev = alloc_etherdev(sizeof(*priv)); in w5100_probe()
706 priv = netdev_priv(ndev); in w5100_probe()
707 priv->ndev = ndev; in w5100_probe()
712 netif_napi_add(ndev, &priv->napi, w5100_napi_poll, 16); in w5100_probe()
739 struct w5100_priv *priv = netdev_priv(ndev); in w5100_remove() local
741 w5100_hw_reset(priv); in w5100_remove()
742 free_irq(priv->irq, ndev); in w5100_remove()
743 if (gpio_is_valid(priv->link_gpio)) in w5100_remove()
744 free_irq(priv->link_irq, ndev); in w5100_remove()
756 struct w5100_priv *priv = netdev_priv(ndev); in w5100_suspend() local
762 w5100_hw_close(priv); in w5100_suspend()
771 struct w5100_priv *priv = netdev_priv(ndev); in w5100_resume() local
774 w5100_hw_reset(priv); in w5100_resume()
775 w5100_hw_start(priv); in w5100_resume()
778 if (!gpio_is_valid(priv->link_gpio) || in w5100_resume()
779 gpio_get_value(priv->link_gpio) != 0) in w5100_resume()