Lines Matching refs:priv
92 u16 (*read) (struct w5300_priv *priv, u16 addr);
93 void (*write)(struct w5300_priv *priv, u16 addr, u16 data);
116 static inline u16 w5300_read_direct(struct w5300_priv *priv, u16 addr) in w5300_read_direct() argument
118 return ioread16(priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); in w5300_read_direct()
121 static inline void w5300_write_direct(struct w5300_priv *priv, in w5300_write_direct() argument
124 iowrite16(data, priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); in w5300_write_direct()
138 static u16 w5300_read_indirect(struct w5300_priv *priv, u16 addr) in w5300_read_indirect() argument
143 spin_lock_irqsave(&priv->reg_lock, flags); in w5300_read_indirect()
144 w5300_write_direct(priv, W5300_IDM_AR, addr); in w5300_read_indirect()
146 data = w5300_read_direct(priv, W5300_IDM_DR); in w5300_read_indirect()
147 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5300_read_indirect()
152 static void w5300_write_indirect(struct w5300_priv *priv, u16 addr, u16 data) in w5300_write_indirect() argument
156 spin_lock_irqsave(&priv->reg_lock, flags); in w5300_write_indirect()
157 w5300_write_direct(priv, W5300_IDM_AR, addr); in w5300_write_indirect()
159 w5300_write_direct(priv, W5300_IDM_DR, data); in w5300_write_indirect()
161 spin_unlock_irqrestore(&priv->reg_lock, flags); in w5300_write_indirect()
173 #define w5300_read priv->read
174 #define w5300_write priv->write
177 static u32 w5300_read32(struct w5300_priv *priv, u16 addr) in w5300_read32() argument
180 data = w5300_read(priv, addr) << 16; in w5300_read32()
181 data |= w5300_read(priv, addr + 2); in w5300_read32()
185 static void w5300_write32(struct w5300_priv *priv, u16 addr, u32 data) in w5300_write32() argument
187 w5300_write(priv, addr, data >> 16); in w5300_write32()
188 w5300_write(priv, addr + 2, data); in w5300_write32()
191 static int w5300_command(struct w5300_priv *priv, u16 cmd) in w5300_command() argument
195 w5300_write(priv, W5300_S0_CR, cmd); in w5300_command()
198 while (w5300_read(priv, W5300_S0_CR) != 0) { in w5300_command()
207 static void w5300_read_frame(struct w5300_priv *priv, u8 *buf, int len) in w5300_read_frame() argument
213 fifo = w5300_read(priv, W5300_S0_RX_FIFO); in w5300_read_frame()
217 fifo = w5300_read(priv, W5300_S0_RX_FIFO); in w5300_read_frame()
218 fifo = w5300_read(priv, W5300_S0_RX_FIFO); in w5300_read_frame()
221 static void w5300_write_frame(struct w5300_priv *priv, u8 *buf, int len) in w5300_write_frame() argument
229 w5300_write(priv, W5300_S0_TX_FIFO, fifo); in w5300_write_frame()
231 w5300_write32(priv, W5300_S0_TX_WRSR, len); in w5300_write_frame()
234 static void w5300_write_macaddr(struct w5300_priv *priv) in w5300_write_macaddr() argument
236 struct net_device *ndev = priv->ndev; in w5300_write_macaddr()
237 w5300_write32(priv, W5300_SHARL, in w5300_write_macaddr()
242 w5300_write(priv, W5300_SHARH, in w5300_write_macaddr()
248 static void w5300_hw_reset(struct w5300_priv *priv) in w5300_hw_reset() argument
250 w5300_write_direct(priv, W5300_MR, MR_RST); in w5300_hw_reset()
253 w5300_write_direct(priv, W5300_MR, priv->indirect ? in w5300_hw_reset()
257 w5300_write(priv, W5300_IMR, 0); in w5300_hw_reset()
258 w5300_write_macaddr(priv); in w5300_hw_reset()
263 w5300_write32(priv, W5300_RMSRL, 64 << 24); in w5300_hw_reset()
264 w5300_write32(priv, W5300_RMSRH, 0); in w5300_hw_reset()
265 w5300_write32(priv, W5300_TMSRL, 64 << 24); in w5300_hw_reset()
266 w5300_write32(priv, W5300_TMSRH, 0); in w5300_hw_reset()
267 w5300_write(priv, W5300_MTYPE, 0x00ff); in w5300_hw_reset()
271 static void w5300_hw_start(struct w5300_priv *priv) in w5300_hw_start() argument
273 w5300_write(priv, W5300_S0_MR, priv->promisc ? in w5300_hw_start()
276 w5300_command(priv, S0_CR_OPEN); in w5300_hw_start()
277 w5300_write(priv, W5300_S0_IMR, S0_IR_RECV | S0_IR_SENDOK); in w5300_hw_start()
278 w5300_write(priv, W5300_IMR, IR_S0); in w5300_hw_start()
282 static void w5300_hw_close(struct w5300_priv *priv) in w5300_hw_close() argument
284 w5300_write(priv, W5300_IMR, 0); in w5300_hw_close()
286 w5300_command(priv, S0_CR_CLOSE); in w5300_hw_close()
306 struct w5300_priv *priv = netdev_priv(ndev); in w5300_get_link() local
308 if (gpio_is_valid(priv->link_gpio)) in w5300_get_link()
309 return !!gpio_get_value(priv->link_gpio); in w5300_get_link()
316 struct w5300_priv *priv = netdev_priv(ndev); in w5300_get_msglevel() local
318 return priv->msg_enable; in w5300_get_msglevel()
323 struct w5300_priv *priv = netdev_priv(ndev); in w5300_set_msglevel() local
325 priv->msg_enable = value; in w5300_set_msglevel()
336 struct w5300_priv *priv = netdev_priv(ndev); in w5300_get_regs() local
349 data = w5300_read(priv, addr); in w5300_get_regs()
359 struct w5300_priv *priv = netdev_priv(ndev); in w5300_tx_timeout() local
362 w5300_hw_reset(priv); in w5300_tx_timeout()
363 w5300_hw_start(priv); in w5300_tx_timeout()
371 struct w5300_priv *priv = netdev_priv(ndev); in w5300_start_tx() local
375 w5300_write_frame(priv, skb->data, skb->len); in w5300_start_tx()
380 netif_dbg(priv, tx_queued, ndev, "tx queued\n"); in w5300_start_tx()
382 w5300_command(priv, S0_CR_SEND); in w5300_start_tx()
389 struct w5300_priv *priv = container_of(napi, struct w5300_priv, napi); in w5300_napi_poll() local
390 struct net_device *ndev = priv->ndev; in w5300_napi_poll()
396 u32 rx_fifo_len = w5300_read32(priv, W5300_S0_RX_RSR); in w5300_napi_poll()
400 rx_len = w5300_read(priv, W5300_S0_RX_FIFO); in w5300_napi_poll()
406 w5300_read(priv, W5300_S0_RX_FIFO); in w5300_napi_poll()
412 w5300_read_frame(priv, skb->data, rx_len); in w5300_napi_poll()
422 w5300_write(priv, W5300_IMR, IR_S0); in w5300_napi_poll()
432 struct w5300_priv *priv = netdev_priv(ndev); in w5300_interrupt() local
434 int ir = w5300_read(priv, W5300_S0_IR); in w5300_interrupt()
437 w5300_write(priv, W5300_S0_IR, ir); in w5300_interrupt()
441 netif_dbg(priv, tx_done, ndev, "tx done\n"); in w5300_interrupt()
446 if (napi_schedule_prep(&priv->napi)) { in w5300_interrupt()
447 w5300_write(priv, W5300_IMR, 0); in w5300_interrupt()
449 __napi_schedule(&priv->napi); in w5300_interrupt()
459 struct w5300_priv *priv = netdev_priv(ndev); in w5300_detect_link() local
462 if (gpio_get_value(priv->link_gpio) != 0) { in w5300_detect_link()
463 netif_info(priv, link, ndev, "link is up\n"); in w5300_detect_link()
466 netif_info(priv, link, ndev, "link is down\n"); in w5300_detect_link()
476 struct w5300_priv *priv = netdev_priv(ndev); in w5300_set_rx_mode() local
479 if (priv->promisc != set_promisc) { in w5300_set_rx_mode()
480 priv->promisc = set_promisc; in w5300_set_rx_mode()
481 w5300_hw_start(priv); in w5300_set_rx_mode()
487 struct w5300_priv *priv = netdev_priv(ndev); in w5300_set_macaddr() local
493 w5300_write_macaddr(priv); in w5300_set_macaddr()
499 struct w5300_priv *priv = netdev_priv(ndev); in w5300_open() local
501 netif_info(priv, ifup, ndev, "enabling\n"); in w5300_open()
502 w5300_hw_start(priv); in w5300_open()
503 napi_enable(&priv->napi); in w5300_open()
505 if (!gpio_is_valid(priv->link_gpio) || in w5300_open()
506 gpio_get_value(priv->link_gpio) != 0) in w5300_open()
513 struct w5300_priv *priv = netdev_priv(ndev); in w5300_stop() local
515 netif_info(priv, ifdown, ndev, "shutting down\n"); in w5300_stop()
516 w5300_hw_close(priv); in w5300_stop()
519 napi_disable(&priv->napi); in w5300_stop()
547 struct w5300_priv *priv = netdev_priv(ndev); in w5300_hw_probe() local
561 priv->base = devm_ioremap_resource(&pdev->dev, mem); in w5300_hw_probe()
562 if (IS_ERR(priv->base)) in w5300_hw_probe()
563 return PTR_ERR(priv->base); in w5300_hw_probe()
567 spin_lock_init(&priv->reg_lock); in w5300_hw_probe()
568 priv->indirect = mem_size < W5300_BUS_DIRECT_SIZE; in w5300_hw_probe()
569 if (priv->indirect) { in w5300_hw_probe()
570 priv->read = w5300_read_indirect; in w5300_hw_probe()
571 priv->write = w5300_write_indirect; in w5300_hw_probe()
573 priv->read = w5300_read_direct; in w5300_hw_probe()
574 priv->write = w5300_write_direct; in w5300_hw_probe()
577 w5300_hw_reset(priv); in w5300_hw_probe()
578 if (w5300_read(priv, W5300_IDR) != IDR_W5300) in w5300_hw_probe()
588 priv->irq = irq; in w5300_hw_probe()
590 priv->link_gpio = data ? data->link_gpio : -EINVAL; in w5300_hw_probe()
591 if (gpio_is_valid(priv->link_gpio)) { in w5300_hw_probe()
596 priv->link_irq = gpio_to_irq(priv->link_gpio); in w5300_hw_probe()
597 if (request_any_context_irq(priv->link_irq, w5300_detect_link, in w5300_hw_probe()
599 link_name, priv->ndev) < 0) in w5300_hw_probe()
600 priv->link_gpio = -EINVAL; in w5300_hw_probe()
609 struct w5300_priv *priv; in w5300_probe() local
613 ndev = alloc_etherdev(sizeof(*priv)); in w5300_probe()
618 priv = netdev_priv(ndev); in w5300_probe()
619 priv->ndev = ndev; in w5300_probe()
624 netif_napi_add(ndev, &priv->napi, w5300_napi_poll, 16); in w5300_probe()
651 struct w5300_priv *priv = netdev_priv(ndev); in w5300_remove() local
653 w5300_hw_reset(priv); in w5300_remove()
654 free_irq(priv->irq, ndev); in w5300_remove()
655 if (gpio_is_valid(priv->link_gpio)) in w5300_remove()
656 free_irq(priv->link_irq, ndev); in w5300_remove()
668 struct w5300_priv *priv = netdev_priv(ndev); in w5300_suspend() local
674 w5300_hw_close(priv); in w5300_suspend()
683 struct w5300_priv *priv = netdev_priv(ndev); in w5300_resume() local
686 w5300_hw_reset(priv); in w5300_resume()
687 w5300_hw_start(priv); in w5300_resume()
690 if (!gpio_is_valid(priv->link_gpio) || in w5300_resume()
691 gpio_get_value(priv->link_gpio) != 0) in w5300_resume()