Lines Matching refs:dev
124 extern void reset_chip(struct net_device *dev);
126 static int net_open(struct net_device *dev);
127 static int net_send_packet(struct sk_buff *skb, struct net_device *dev);
129 static void set_multicast_list(struct net_device *dev);
130 static void net_rx(struct net_device *dev);
131 static int net_close(struct net_device *dev);
132 static struct net_device_stats *net_get_stats(struct net_device *dev);
133 static int set_mac_address(struct net_device *dev, void *addr);
137 #define tx_done(dev) 1 argument
141 readreg_io(struct net_device *dev, int portno) in readreg_io() argument
143 nubus_writew(swab16(portno), dev->base_addr + ADD_PORT); in readreg_io()
144 return swab16(nubus_readw(dev->base_addr + DATA_PORT)); in readreg_io()
148 writereg_io(struct net_device *dev, int portno, int value) in writereg_io() argument
150 nubus_writew(swab16(portno), dev->base_addr + ADD_PORT); in writereg_io()
151 nubus_writew(swab16(value), dev->base_addr + DATA_PORT); in writereg_io()
156 readreg(struct net_device *dev, int portno) in readreg() argument
158 return swab16(nubus_readw(dev->mem_start + portno)); in readreg()
162 writereg(struct net_device *dev, int portno, int value) in writereg() argument
164 nubus_writew(swab16(value), dev->mem_start + portno); in writereg()
182 struct net_device *dev; in mac89x0_probe() local
195 dev = alloc_etherdev(sizeof(struct net_local)); in mac89x0_probe()
196 if (!dev) in mac89x0_probe()
200 sprintf(dev->name, "eth%d", unit); in mac89x0_probe()
201 netdev_boot_setup_check(dev); in mac89x0_probe()
233 lp = netdev_priv(dev); in mac89x0_probe()
236 dev->base_addr = ioaddr; in mac89x0_probe()
237 dev->mem_start = (unsigned long) in mac89x0_probe()
239 dev->mem_end = dev->mem_start + 0x1000; in mac89x0_probe()
242 writereg_io(dev, PP_BusCTL, MEMORY_ON); in mac89x0_probe()
245 rev_type = readreg(dev, PRODUCT_ID_ADD); in mac89x0_probe()
261 dev->name, in mac89x0_probe()
265 dev->base_addr); in mac89x0_probe()
268 if ((readreg(dev, PP_SelfST) & (EEPROM_PRESENT | EEPROM_OK)) == 0) { in mac89x0_probe()
274 unsigned short s = readreg(dev, PP_IA + i); in mac89x0_probe()
275 dev->dev_addr[i] = s >> 8; in mac89x0_probe()
276 dev->dev_addr[i+1] = s & 0xff; in mac89x0_probe()
280 dev->irq = SLOT2IRQ(slot); in mac89x0_probe()
284 printk(" IRQ %d ADDR %pM\n", dev->irq, dev->dev_addr); in mac89x0_probe()
286 dev->netdev_ops = &mac89x0_netdev_ops; in mac89x0_probe()
288 err = register_netdev(dev); in mac89x0_probe()
293 nubus_writew(0, dev->base_addr + ADD_PORT); in mac89x0_probe()
295 free_netdev(dev); in mac89x0_probe()
301 void __init reset_chip(struct net_device *dev)
305 writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
312 while( (readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
325 net_open(struct net_device *dev) in net_open() argument
327 struct net_local *lp = netdev_priv(dev); in net_open()
331 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) & ~ENABLE_IRQ); in net_open()
334 if (request_irq(dev->irq, net_interrupt, 0, "cs89x0", dev)) in net_open()
339 writereg(dev, PP_CS8900_ISAINT, 0); in net_open()
341 writereg(dev, PP_CS8920_ISAINT, 0); in net_open()
345 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8)); in net_open()
348 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON); in net_open()
352 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT); in net_open()
356 writereg(dev, PP_RxCFG, lp->curr_rx_cfg); in net_open()
358 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL | in net_open()
361 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL | in net_open()
365 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) | ENABLE_IRQ); in net_open()
366 netif_start_queue(dev); in net_open()
371 net_send_packet(struct sk_buff *skb, struct net_device *dev) in net_send_packet() argument
373 struct net_local *lp = netdev_priv(dev); in net_send_packet()
378 dev->name, skb->len, in net_send_packet()
386 netif_stop_queue(dev); in net_send_packet()
389 writereg(dev, PP_TxCMD, lp->send_cmd); in net_send_packet()
390 writereg(dev, PP_TxLength, skb->len); in net_send_packet()
393 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) { in net_send_packet()
401 skb_copy_from_linear_data(skb, (void *)(dev->mem_start + PP_TxFrame), in net_send_packet()
414 struct net_device *dev = dev_id; in net_interrupt() local
418 if (dev == NULL) { in net_interrupt()
423 ioaddr = dev->base_addr; in net_interrupt()
424 lp = netdev_priv(dev); in net_interrupt()
433 while ((status = swab16(nubus_readw(dev->base_addr + ISQ_PORT)))) { in net_interrupt()
434 if (net_debug > 4)printk("%s: event=%04x\n", dev->name, status); in net_interrupt()
438 net_rx(dev); in net_interrupt()
441 dev->stats.tx_packets++; in net_interrupt()
442 netif_wake_queue(dev); in net_interrupt()
444 dev->stats.tx_errors++; in net_interrupt()
446 dev->stats.tx_carrier_errors++; in net_interrupt()
448 dev->stats.tx_heartbeat_errors++; in net_interrupt()
450 dev->stats.tx_window_errors++; in net_interrupt()
452 dev->stats.tx_aborted_errors++; in net_interrupt()
461 netif_wake_queue(dev); in net_interrupt()
464 if (net_debug > 0) printk("%s: transmit underrun\n", dev->name); in net_interrupt()
471 dev->stats.rx_missed_errors += (status >> 6); in net_interrupt()
474 dev->stats.collisions += (status >> 6); in net_interrupt()
483 net_rx(struct net_device *dev) in net_rx() argument
488 status = readreg(dev, PP_RxStatus); in net_rx()
490 dev->stats.rx_errors++; in net_rx()
492 dev->stats.rx_length_errors++; in net_rx()
494 dev->stats.rx_length_errors++; in net_rx()
498 dev->stats.rx_crc_errors++; in net_rx()
500 dev->stats.rx_frame_errors++; in net_rx()
504 length = readreg(dev, PP_RxLength); in net_rx()
508 printk("%s: Memory squeeze, dropping packet.\n", dev->name); in net_rx()
509 dev->stats.rx_dropped++; in net_rx()
514 skb_copy_to_linear_data(skb, (void *)(dev->mem_start + PP_RxFrame), in net_rx()
518 dev->name, length, in net_rx()
522 skb->protocol=eth_type_trans(skb,dev); in net_rx()
524 dev->stats.rx_packets++; in net_rx()
525 dev->stats.rx_bytes += length; in net_rx()
530 net_close(struct net_device *dev) in net_close() argument
533 writereg(dev, PP_RxCFG, 0); in net_close()
534 writereg(dev, PP_TxCFG, 0); in net_close()
535 writereg(dev, PP_BufCFG, 0); in net_close()
536 writereg(dev, PP_BusCTL, 0); in net_close()
538 netif_stop_queue(dev); in net_close()
540 free_irq(dev->irq, dev); in net_close()
551 net_get_stats(struct net_device *dev) in net_get_stats() argument
557 dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6); in net_get_stats()
558 dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6); in net_get_stats()
561 return &dev->stats; in net_get_stats()
564 static void set_multicast_list(struct net_device *dev) in set_multicast_list() argument
566 struct net_local *lp = netdev_priv(dev); in set_multicast_list()
568 if(dev->flags&IFF_PROMISC) in set_multicast_list()
571 } else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev)) { in set_multicast_list()
579 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode); in set_multicast_list()
582 writereg(dev, PP_RxCFG, lp->curr_rx_cfg | in set_multicast_list()
587 static int set_mac_address(struct net_device *dev, void *addr) in set_mac_address() argument
595 memcpy(dev->dev_addr, saddr->sa_data, ETH_ALEN); in set_mac_address()
596 printk("%s: Setting MAC address to %pM\n", dev->name, dev->dev_addr); in set_mac_address()
600 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8)); in set_mac_address()