Lines Matching refs:dev

115 static int net_open(struct net_device *dev);
116 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev);
118 static void set_multicast_list(struct net_device *dev);
119 static void net_rx(struct net_device *dev);
120 static int net_close(struct net_device *dev);
121 static struct net_device_stats *net_get_stats(struct net_device *dev);
122 static int set_mac_address(struct net_device *dev, void *addr);
126 readreg_io(struct net_device *dev, int portno) in readreg_io() argument
128 nubus_writew(swab16(portno), dev->base_addr + ADD_PORT); in readreg_io()
129 return swab16(nubus_readw(dev->base_addr + DATA_PORT)); in readreg_io()
133 writereg_io(struct net_device *dev, int portno, int value) in writereg_io() argument
135 nubus_writew(swab16(portno), dev->base_addr + ADD_PORT); in writereg_io()
136 nubus_writew(swab16(value), dev->base_addr + DATA_PORT); in writereg_io()
141 readreg(struct net_device *dev, int portno) in readreg() argument
143 return swab16(nubus_readw(dev->mem_start + portno)); in readreg()
147 writereg(struct net_device *dev, int portno, int value) in writereg() argument
149 nubus_writew(swab16(value), dev->mem_start + portno); in writereg()
166 struct net_device *dev; in mac89x0_device_probe() local
175 dev = alloc_etherdev(sizeof(struct net_local)); in mac89x0_device_probe()
176 if (!dev) in mac89x0_device_probe()
204 SET_NETDEV_DEV(dev, &pdev->dev); in mac89x0_device_probe()
207 lp = netdev_priv(dev); in mac89x0_device_probe()
212 dev->base_addr = ioaddr; in mac89x0_device_probe()
213 dev->mem_start = (unsigned long) in mac89x0_device_probe()
215 dev->mem_end = dev->mem_start + 0x1000; in mac89x0_device_probe()
218 writereg_io(dev, PP_BusCTL, MEMORY_ON); in mac89x0_device_probe()
221 rev_type = readreg(dev, PRODUCT_ID_ADD); in mac89x0_device_probe()
233 netif_dbg(lp, drv, dev, "%s", version); in mac89x0_device_probe()
238 lp->chip_revision, dev->base_addr); in mac89x0_device_probe()
241 if ((readreg(dev, PP_SelfST) & (EEPROM_PRESENT | EEPROM_OK)) == 0) { in mac89x0_device_probe()
249 unsigned short s = readreg(dev, PP_IA + i); in mac89x0_device_probe()
253 eth_hw_addr_set(dev, addr); in mac89x0_device_probe()
256 dev->irq = SLOT2IRQ(slot); in mac89x0_device_probe()
260 pr_info("MAC %pM, IRQ %d\n", dev->dev_addr, dev->irq); in mac89x0_device_probe()
262 dev->netdev_ops = &mac89x0_netdev_ops; in mac89x0_device_probe()
264 err = register_netdev(dev); in mac89x0_device_probe()
268 platform_set_drvdata(pdev, dev); in mac89x0_device_probe()
271 nubus_writew(0, dev->base_addr + ADD_PORT); in mac89x0_device_probe()
273 free_netdev(dev); in mac89x0_device_probe()
285 net_open(struct net_device *dev) in net_open() argument
287 struct net_local *lp = netdev_priv(dev); in net_open()
291 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) & ~ENABLE_IRQ); in net_open()
294 if (request_irq(dev->irq, net_interrupt, 0, "cs89x0", dev)) in net_open()
299 writereg(dev, PP_CS8900_ISAINT, 0); in net_open()
301 writereg(dev, PP_CS8920_ISAINT, 0); in net_open()
305 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8)); in net_open()
308 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON); in net_open()
312 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT); in net_open()
316 writereg(dev, PP_RxCFG, lp->curr_rx_cfg); in net_open()
318 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL | in net_open()
321 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL | in net_open()
325 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) | ENABLE_IRQ); in net_open()
326 netif_start_queue(dev); in net_open()
331 net_send_packet(struct sk_buff *skb, struct net_device *dev) in net_send_packet() argument
333 struct net_local *lp = netdev_priv(dev); in net_send_packet()
336 netif_dbg(lp, tx_queued, dev, "sent %d byte packet of type %x\n", in net_send_packet()
344 netif_stop_queue(dev); in net_send_packet()
347 writereg(dev, PP_TxCMD, lp->send_cmd); in net_send_packet()
348 writereg(dev, PP_TxLength, skb->len); in net_send_packet()
351 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) { in net_send_packet()
359 skb_copy_from_linear_data(skb, (void *)(dev->mem_start + PP_TxFrame), in net_send_packet()
372 struct net_device *dev = dev_id; in net_interrupt() local
376 ioaddr = dev->base_addr; in net_interrupt()
377 lp = netdev_priv(dev); in net_interrupt()
386 while ((status = swab16(nubus_readw(dev->base_addr + ISQ_PORT)))) { in net_interrupt()
387 netif_dbg(lp, intr, dev, "status=%04x\n", status); in net_interrupt()
391 net_rx(dev); in net_interrupt()
394 dev->stats.tx_packets++; in net_interrupt()
395 netif_wake_queue(dev); in net_interrupt()
397 dev->stats.tx_errors++; in net_interrupt()
399 dev->stats.tx_carrier_errors++; in net_interrupt()
401 dev->stats.tx_heartbeat_errors++; in net_interrupt()
403 dev->stats.tx_window_errors++; in net_interrupt()
405 dev->stats.tx_aborted_errors++; in net_interrupt()
414 netif_wake_queue(dev); in net_interrupt()
417 netif_dbg(lp, tx_err, dev, "transmit underrun\n"); in net_interrupt()
424 dev->stats.rx_missed_errors += (status >> 6); in net_interrupt()
427 dev->stats.collisions += (status >> 6); in net_interrupt()
436 net_rx(struct net_device *dev) in net_rx() argument
438 struct net_local *lp = netdev_priv(dev); in net_rx()
442 status = readreg(dev, PP_RxStatus); in net_rx()
444 dev->stats.rx_errors++; in net_rx()
446 dev->stats.rx_length_errors++; in net_rx()
448 dev->stats.rx_length_errors++; in net_rx()
452 dev->stats.rx_crc_errors++; in net_rx()
454 dev->stats.rx_frame_errors++; in net_rx()
458 length = readreg(dev, PP_RxLength); in net_rx()
462 dev->stats.rx_dropped++; in net_rx()
467 skb_copy_to_linear_data(skb, (void *)(dev->mem_start + PP_RxFrame), in net_rx()
470 netif_dbg(lp, rx_status, dev, "received %d byte packet of type %x\n", in net_rx()
474 skb->protocol=eth_type_trans(skb,dev); in net_rx()
476 dev->stats.rx_packets++; in net_rx()
477 dev->stats.rx_bytes += length; in net_rx()
482 net_close(struct net_device *dev) in net_close() argument
485 writereg(dev, PP_RxCFG, 0); in net_close()
486 writereg(dev, PP_TxCFG, 0); in net_close()
487 writereg(dev, PP_BufCFG, 0); in net_close()
488 writereg(dev, PP_BusCTL, 0); in net_close()
490 netif_stop_queue(dev); in net_close()
492 free_irq(dev->irq, dev); in net_close()
503 net_get_stats(struct net_device *dev) in net_get_stats() argument
509 dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6); in net_get_stats()
510 dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6); in net_get_stats()
513 return &dev->stats; in net_get_stats()
516 static void set_multicast_list(struct net_device *dev) in set_multicast_list() argument
518 struct net_local *lp = netdev_priv(dev); in set_multicast_list()
520 if(dev->flags&IFF_PROMISC) in set_multicast_list()
523 } else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev)) { in set_multicast_list()
531 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode); in set_multicast_list()
534 writereg(dev, PP_RxCFG, lp->curr_rx_cfg | in set_multicast_list()
539 static int set_mac_address(struct net_device *dev, void *addr) in set_mac_address() argument
547 eth_hw_addr_set(dev, saddr->sa_data); in set_mac_address()
548 netdev_info(dev, "Setting MAC address to %pM\n", dev->dev_addr); in set_mac_address()
552 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8)); in set_mac_address()
561 struct net_device *dev = platform_get_drvdata(pdev); in mac89x0_device_remove() local
563 unregister_netdev(dev); in mac89x0_device_remove()
564 nubus_writew(0, dev->base_addr + ADD_PORT); in mac89x0_device_remove()
565 free_netdev(dev); in mac89x0_device_remove()