2 * JMicron JMC2x0 series PCIe Ethernet Linux Device Driver
4 * Copyright 2008 JMicron Technology Corporation
5 * http://www.jmicron.com/
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 * TODO before release:
24 * 1. Use sk_buff for dma buffer with pci_map_single,
25 * and handle scattered sk_buffs (Reduce memory copy)
26 * 2. Try setting 64bit DMA with pci_set[_consistent]_dma_mask
27 * and set netdev feature flag.
28 * 3. Implement Power Managemt related functions.
29 * 4. Implement checksum offloading, VLAN offloading,
30 * TCP Segement offloading.
31 * 5. Implement Jumboframe.
32 * 6. Implement NAPI option for user.
33 * 7. Implement MSI / MSI-X.
35 * 9. Implement QoS according to "priority" attribute in sk_buff
36 * with 8 TX priority queue provided by hardware.
37 * 10.Cleanup/re-orginize code, performence tuneing(alignment etc...).
40 #include <linux/module.h>
41 #include <linux/kernel.h>
42 #include <linux/pci.h>
43 #include <linux/netdevice.h>
44 #include <linux/etherdevice.h>
45 #include <linux/ethtool.h>
46 #include <linux/mii.h>
47 #include <linux/crc32.h>
50 static int jme_mdio_read(struct net_device *netdev, int phy, int reg)
52 struct jme_adapter *jme = netdev_priv(netdev);
55 jwrite32(jme, JME_SMI, SMI_OP_REQ |
60 for (i = JME_PHY_TIMEOUT; i > 0; --i) {
62 if (((val = jread32(jme, JME_SMI)) & SMI_OP_REQ) == 0)
67 dprintk("phy read timeout : %d\n", reg);
71 return ((val & SMI_DATA_MASK) >> SMI_DATA_SHIFT);
74 static void jme_mdio_write(struct net_device *netdev, int phy, int reg, int val)
76 struct jme_adapter *jme = netdev_priv(netdev);
79 jwrite32(jme, JME_SMI, SMI_OP_WRITE | SMI_OP_REQ |
80 ((val << SMI_DATA_SHIFT) & SMI_DATA_MASK) |
81 smi_phy_addr(phy) | smi_reg_addr(reg));
84 for (i = JME_PHY_TIMEOUT; i > 0; --i)
87 if (((val = jread32(jme, JME_SMI)) & SMI_OP_REQ) == 0)
92 dprintk("phy write timeout : %d\n", reg);
97 static void jme_reset_mac_processor(struct jme_adapter *jme)
101 val = jread32(jme, JME_GHC);
103 jwrite32(jme, JME_GHC, val);
106 jwrite32(jme, JME_GHC, val);
107 jwrite32(jme, JME_RXMCHT, 0x00000000);
108 jwrite32(jme, JME_RXMCHT+4, 0x00000000);
109 jwrite32(jme, JME_WFODP, 0);
110 jwrite32(jme, JME_WFOI, 0);
113 __always_inline static void jme_clear_pm(struct jme_adapter *jme)
115 jwrite32(jme, JME_PMCS, 0xFFFF0000);
118 static int jme_reload_eeprom(struct jme_adapter *jme)
123 val = jread32(jme, JME_SMBCSR);
125 if(val & SMBCSR_EEPROMD)
128 jwrite32(jme, JME_SMBCSR, val);
129 val |= SMBCSR_RELOAD;
130 jwrite32(jme, JME_SMBCSR, val);
133 for (i = JME_SMB_TIMEOUT; i > 0; --i)
136 if ((jread32(jme, JME_SMBCSR) & SMBCSR_RELOAD) == 0)
141 dprintk("eeprom reload timeout\n");
151 __always_inline static void jme_load_macaddr(struct net_device *netdev)
153 struct jme_adapter *jme = netdev_priv(netdev);
154 unsigned char macaddr[6];
157 val = jread32(jme, JME_RXUMA);
158 macaddr[0] = (val >> 0) & 0xFF;
159 macaddr[1] = (val >> 8) & 0xFF;
160 macaddr[2] = (val >> 16) & 0xFF;
161 macaddr[3] = (val >> 24) & 0xFF;
162 val = jread32(jme, JME_RXUMA+4);
163 macaddr[4] = (val >> 0) & 0xFF;
164 macaddr[5] = (val >> 8) & 0xFF;
165 memcpy(netdev->dev_addr, macaddr, 6);
168 __always_inline static void jme_start_irq(struct jme_adapter *jme)
173 jwrite32(jme, JME_IENS, INTR_ENABLE);
176 __always_inline static void jme_stop_irq(struct jme_adapter *jme)
181 jwrite32(jme, JME_IENC, INTR_ENABLE);
184 __always_inline static void jme_check_link(struct net_device *netdev)
186 struct jme_adapter *jme = netdev_priv(netdev);
187 __u32 phylink, ghc, cnt = JME_AUTONEG_TIMEOUT;
190 phylink = jread32(jme, JME_PHY_LINK);
192 if (phylink & PHY_LINK_UP) {
194 * Keep polling for autoneg complete
196 while(!(phylink & PHY_LINK_AUTONEG_COMPLETE) && --cnt > 0) {
198 phylink = jread32(jme, JME_PHY_LINK);
202 printk(KERN_ERR "Waiting autoneg timeout.\n");
204 switch(phylink & PHY_LINK_SPEED_MASK) {
205 case PHY_LINK_SPEED_10M:
207 strcpy(linkmsg, "10 Mbps, ");
209 case PHY_LINK_SPEED_100M:
210 ghc = GHC_SPEED_100M;
211 strcpy(linkmsg, "100 Mbps, ");
213 case PHY_LINK_SPEED_1000M:
214 ghc = GHC_SPEED_1000M;
215 strcpy(linkmsg, "1000 Mbps, ");
221 ghc |= (phylink & PHY_LINK_DUPLEX) ? GHC_DPX : 0;
222 jwrite32(jme, JME_GHC, ghc);
223 strcat(linkmsg, (phylink &PHY_LINK_DUPLEX) ?
227 if(phylink & PHY_LINK_DUPLEX)
228 jwrite32(jme, JME_TXMCS, TXMCS_DEFAULT);
230 jwrite32(jme, JME_TXMCS, TXMCS_DEFAULT |
235 jprintk("Link is up at %s.\n", linkmsg);
236 netif_carrier_on(netdev);
239 jprintk("Link is down.\n");
240 netif_carrier_off(netdev);
244 __always_inline static void jme_set_new_txdesc(struct jme_adapter *jme,
245 int i, int framesize)
247 struct jme_ring *txring = jme->txring;
248 struct TxDesc* txdesc = txring->desc;
250 memset(txdesc + i, 0, TX_DESC_SIZE);
251 txdesc[i].desc1.bufaddr = cpu_to_le32(ALIGN(txring->buf_dma[i], 8));
252 txdesc[i].desc1.datalen = cpu_to_le16(TX_BUF_SIZE);
253 txdesc[i].desc1.pktsize = cpu_to_le16(framesize);
255 * Set OWN bit at final.
256 * When kernel transmit faster than NIC last packet sent,
257 * and NIC tring to send this descriptor before we tell
258 * it to start sending this TX queue.
259 * Other fields are already filled correctly.
262 txdesc[i].desc1.flags = TXFLAG_OWN | TXFLAG_INT;
264 dprintk("TX Ring Buf Address(%08x,%08x,%d).\n",
266 (txdesc[i].all[12] << 0) |
267 (txdesc[i].all[13] << 8) |
268 (txdesc[i].all[14] << 16) |
269 (txdesc[i].all[15] << 24),
270 (txdesc[i].all[4] << 0) |
271 (txdesc[i].all[5] << 8));
276 __always_inline static int jme_setup_tx_resources(struct jme_adapter *jme)
279 struct jme_ring *txring = &(jme->txring[0]);
281 txring->alloc = dma_alloc_coherent(&(jme->pdev->dev),
291 txring->desc = (void*)ALIGN((unsigned long)(txring->alloc), 16);
292 txring->dma = ALIGN(txring->dmaalloc, 16);
293 txring->next_to_use = 0;
294 txring->next_to_clean = 0;
296 dprintk("TX Ring Base Address(%08x,%08x).\n",
301 * Initiallize Transmit Descriptors
303 memset(txring->alloc, 0, TX_RING_ALLOC_SIZE);
304 for(i = 0 ; i < RING_DESC_NR ; ++i) {
305 txring->buf_virt[i] = dma_alloc_coherent(&(jme->pdev->dev),
307 &(txring->buf_dma[i]),
309 if(!txring->buf_virt[i])
314 * Cleanup allocated memories when error
316 if(i != RING_DESC_NR) {
317 for(--i ; i >= 0 ; --i) {
318 dma_free_coherent(&(jme->pdev->dev),
323 dma_free_coherent(&(jme->pdev->dev),
327 txring->alloc = NULL;
329 txring->dmaalloc = 0;
338 __always_inline static void jme_free_tx_resources(struct jme_adapter *jme)
341 struct jme_ring *txring = &(jme->txring[0]);
344 for(i = 0 ; i < RING_DESC_NR ; ++i) {
345 if(txring->buf_virt[i]) {
346 dma_free_coherent(&(jme->pdev->dev),
353 dma_free_coherent(&(jme->pdev->dev),
357 txring->alloc = NULL;
359 txring->dmaalloc = 0;
362 txring->next_to_use = 0;
363 txring->next_to_clean = 0;
367 __always_inline static void jme_enable_tx_engine(struct jme_adapter *jme)
372 jwrite32(jme, JME_TXCS, TXCS_DEFAULT | TXCS_SELECT_QUEUE0);
375 * Setup TX Queue 0 DMA Bass Address
377 jwrite32(jme, JME_TXDBA, jme->txring[0].dma);
378 jwrite32(jme, JME_TXNDA, jme->txring[0].dma);
381 * Setup TX Descptor Count
383 jwrite32(jme, JME_TXQDC, RING_DESC_NR);
389 jwrite32(jme, JME_TXCS, TXCS_DEFAULT |
395 __always_inline static void jme_disable_tx_engine(struct jme_adapter *jme)
403 jwrite32(jme, JME_TXCS, TXCS_DEFAULT);
405 val = jread32(jme, JME_TXCS);
406 for(i = JME_TX_DISABLE_TIMEOUT ; (val & TXCS_ENABLE) && i > 0 ; --i)
409 val = jread32(jme, JME_TXCS);
413 printk(KERN_ERR "Disable TX engine timeout.\n");
418 __always_inline static void jme_set_clean_rxdesc(struct jme_adapter *jme,
421 struct jme_ring *rxring = jme->rxring;
422 struct RxDesc* rxdesc = rxring->desc;
424 memset(rxdesc + i, 0, RX_DESC_SIZE);
425 rxdesc[i].desc1.bufaddrl = cpu_to_le32(ALIGN(rxring->buf_dma[i], 8));
426 rxdesc[i].desc1.datalen = cpu_to_le16(RX_BUF_SIZE);
428 rxdesc[i].desc1.flags = RXFLAG_OWN | RXFLAG_INT;
430 #ifdef RX_QUEUE_DEBUG
431 dprintk("RX Ring Buf Address(%08x,%08x,%d).\n",
433 (rxdesc[i].all[12] << 0) |
434 (rxdesc[i].all[13] << 8) |
435 (rxdesc[i].all[14] << 16) |
436 (rxdesc[i].all[15] << 24),
437 (rxdesc[i].all[4] << 0) |
438 (rxdesc[i].all[5] << 8));
443 __always_inline static int jme_setup_rx_resources(struct jme_adapter *jme)
446 struct jme_ring *rxring = &(jme->rxring[0]);
448 rxring->alloc = dma_alloc_coherent(&(jme->pdev->dev),
458 rxring->desc = (void*)ALIGN((unsigned long)(rxring->alloc), 16);
459 rxring->dma = ALIGN(rxring->dmaalloc, 16);
460 rxring->next_to_use = 0;
461 rxring->next_to_clean = 0;
463 #ifdef RX_QUEUE_DEBUG
464 dprintk("RX Ring Base Address(%08x,%08x).\n",
470 * Initiallize Receive Descriptors
472 for(i = 0 ; i < RING_DESC_NR ; ++i) {
473 rxring->buf_virt[i] = dma_alloc_coherent(&(jme->pdev->dev),
475 &(rxring->buf_dma[i]),
477 if(!rxring->buf_virt[i])
480 jme_set_clean_rxdesc(jme, i);
484 * Cleanup allocated memories when error
486 if(i != RING_DESC_NR) {
487 for(--i ; i >= 0 ; --i) {
488 dma_free_coherent(&(jme->pdev->dev),
493 dma_free_coherent(&(jme->pdev->dev),
497 rxring->alloc = NULL;
499 rxring->dmaalloc = 0;
507 __always_inline static void jme_free_rx_resources(struct jme_adapter *jme)
510 struct jme_ring *rxring = &(jme->rxring[0]);
513 for(i = 0 ; i < RING_DESC_NR ; ++i) {
514 if(rxring->buf_virt[i]) {
515 dma_free_coherent(&(jme->pdev->dev),
522 dma_free_coherent(&(jme->pdev->dev),
526 rxring->alloc = NULL;
528 rxring->dmaalloc = 0;
531 rxring->next_to_use = 0;
532 rxring->next_to_clean = 0;
535 __always_inline static void jme_enable_rx_engine(struct jme_adapter *jme)
540 * Setup RX DMA Bass Address
542 jwrite32(jme, JME_RXDBA, jme->rxring[0].dma);
543 jwrite32(jme, JME_RXNDA, jme->rxring[0].dma);
546 * Setup RX Descptor Count
548 jwrite32(jme, JME_RXQDC, RING_DESC_NR);
551 * Setup Unicast Filter
553 jme_set_multi(jme->dev);
559 val = jread32(jme, JME_RXCS);
560 val |= RXCS_ENABLE | RXCS_QST;
561 jwrite32(jme, JME_RXCS, val);
564 __always_inline static void jme_disable_rx_engine(struct jme_adapter *jme)
572 val = jread32(jme, JME_RXCS);
574 jwrite32(jme, JME_RXCS, val);
576 val = jread32(jme, JME_RXCS);
577 for(i = JME_RX_DISABLE_TIMEOUT ; (val & RXCS_ENABLE) && i > 0 ; --i)
580 val = jread32(jme, JME_RXCS);
584 printk(KERN_ERR "Disable RX engine timeout.\n");
588 __always_inline static void jme_process_tx_complete(struct net_device *netdev)
591 * Clear sk_buff here in the future
592 * (Allowing NIC directly DMA with sk_buff kernel requested to send)
596 __always_inline static void jme_process_receive(struct net_device *netdev)
598 struct jme_adapter *jme = netdev_priv(netdev);
599 struct jme_ring *rxring = &(jme->rxring[0]);
600 struct RxDesc *rxdesc;
604 int framesize, desccnt;
607 * Assume that one descriptor per frame,
608 * Should be fixed in the future
609 * (or not? If buffer already large enough to store entire packet.)
612 rxdesc = rxring->desc;
614 spin_lock(&jme->recv_lock);
615 i = start = rxring->next_to_clean;
617 * Decide how many descriptors need to be processed
618 * We have to process entire queue in worst case
620 for(cnt = 0 ; cnt < RING_DESC_NR ; ++cnt)
622 if(rxdesc[i].descwb.flags & RXWBFLAG_OWN) {
623 rxring->next_to_clean = i;
627 if(unlikely(++i == RING_DESC_NR))
630 spin_unlock(&jme->recv_lock);
633 * Process descriptors independently accross cpu
634 * --- save for multiple cpu handling
636 for( i = start ; cnt-- ; ) {
638 * Pass received packet to kernel
640 rxbuf = (void*)ALIGN((unsigned long)(rxring->buf_virt[i]), 8);
641 desccnt = rxdesc[i].descwb.desccnt & RXWBDCNT_DCNT;
642 framesize = le16_to_cpu(rxdesc[i].descwb.framesize);
643 skb = dev_alloc_skb(framesize);
645 printk(KERN_ERR PFX "Out of memory.\n");
646 ++(netdev->stats.rx_dropped);
649 skb_put(skb, framesize);
650 skb_copy_to_linear_data(skb, rxbuf, framesize);
651 skb->protocol = eth_type_trans(skb, netdev);
654 netdev->last_rx = jiffies;
655 netdev->stats.rx_bytes += framesize;
656 ++(netdev->stats.rx_packets);
659 dprintk("DESCCNT: %u, FSIZE: %u, ADDRH: %08x, "
660 "ADDRL: %08x, FLAGS: %04x, STAT: %02x, "
661 "DST:%02x:%02x:%02x:%02x:%02x:%02x, "
665 le32_to_cpu(rxdesc[i].dw[2]),
666 le32_to_cpu(rxdesc[i].dw[3]),
667 le16_to_cpu(rxdesc[i].descwb.flags),
668 rxdesc[i].descwb.stat,
669 rxbuf[0], rxbuf[1], rxbuf[2],
670 rxbuf[3], rxbuf[4], rxbuf[5],
671 ether_crc(ETH_ALEN, rxbuf) & 0x3F);
675 * Cleanup descriptor for next receive
677 jme_set_clean_rxdesc(jme, i);
679 if(unlikely(++i == RING_DESC_NR))
685 static irqreturn_t jme_intr(int irq, void *dev_id)
687 struct net_device *netdev = dev_id;
688 struct jme_adapter *jme = netdev_priv(netdev);
689 irqreturn_t rc = IRQ_HANDLED;
690 __u32 intrstat = jread32(jme, JME_IEVE);
691 #ifdef RX_QUEUE_DEBUG
697 * Don't disable interrupt, the driver should be
698 * working fine with multiple interrupt handling
699 * at the same time. (When Multi-core CPU)
703 * Temporary disable all Interrupts From Our NIC
705 jwrite32(jme, JME_IENC, INTR_ENABLE);
709 dprintk("Interrupt received(%08x).\n", intrstat);
713 * Check if it's really an interrupt for us
714 * and if the device still exist
716 if((intrstat & INTR_ENABLE) == 0 || intrstat == ~0) {
721 if(intrstat & INTR_LINKCH) {
723 * Process Link status change event
725 jme_check_link(netdev);
728 * Write 1 clear Link status change Interrupt
730 jwrite32(jme, JME_IEVE, INTR_LINKCH);
733 if(intrstat & INTR_RX0) {
737 jme_process_receive(netdev);
740 * Write 1 clear Interrupt
742 jwrite32(jme, JME_IEVE, INTR_RX0);
744 dprintk("Received From Queue 0.\n");
746 #ifdef RX_QUEUE_DEBUG
747 //Poll out the Receive Queue Next Descriptor Address/Status
748 val = jread32(jme, JME_RXCS);
750 jwrite32(jme, JME_RXCS, val);
752 val = jread32(jme, JME_RXNDA);
753 dprintk("NEXT_RX_DESC.(%08x)\n", val);
758 if(intrstat & INTR_RX0EMP) {
760 * Write 1 clear Interrupt
762 jwrite32(jme, JME_IEVE, INTR_RX0EMP);
764 dprintk("Received Queue 0 is running-out.\n");
767 if(intrstat & INTR_TX0) {
771 jme_process_tx_complete(netdev);
774 * Write 1 clear Interrupt
776 jwrite32(jme, JME_IEVE, INTR_TX0);
778 dprintk("Queue 0 transmit complete.\n");
785 * Re-enable interrupts
788 jwrite32(jme, JME_IENS, INTR_ENABLE);
793 static int jme_open(struct net_device *netdev)
795 struct jme_adapter *jme = netdev_priv(netdev);
798 CHECK_AND_GOTO(request_irq(jme->pdev->irq, jme_intr, IRQF_SHARED,
799 netdev->name, netdev),
801 "Requesting IRQ error.")
803 CHECK_AND_GOTO(jme_setup_rx_resources(jme),
805 "Error allocating resources for RX.")
807 CHECK_AND_GOTO(jme_setup_tx_resources(jme),
808 err_out_free_rx_resources,
809 "Error allocating resources for TX.")
811 jme_reset_mac_processor(jme);
812 jme_check_link(netdev);
814 jme_enable_rx_engine(jme);
815 jme_enable_tx_engine(jme);
816 netif_start_queue(netdev);
820 err_out_free_rx_resources:
821 jme_free_rx_resources(jme);
823 free_irq(jme->pdev->irq, jme->dev);
825 netif_stop_queue(netdev);
826 netif_carrier_off(netdev);
830 static int jme_close(struct net_device *netdev)
832 struct jme_adapter *jme = netdev_priv(netdev);
834 netif_stop_queue(netdev);
835 netif_carrier_off(netdev);
838 free_irq(jme->pdev->irq, jme->dev);
840 jme_disable_rx_engine(jme);
841 jme_disable_tx_engine(jme);
842 jme_free_rx_resources(jme);
843 jme_free_tx_resources(jme);
848 static int jme_start_xmit(struct sk_buff *skb, struct net_device *netdev)
850 struct jme_adapter *jme = netdev_priv(netdev);
851 struct jme_ring *txring = &(jme->txring[0]);
852 struct TxDesc *txdesc = txring->desc;
857 * Check if transmit queue is already full
858 * and take one descriptor to use
860 spin_lock(&jme->xmit_lock);
861 idx = txring->next_to_use;
862 if(unlikely(txdesc[idx].desc1.flags & TXFLAG_OWN)) {
863 spin_unlock(&jme->xmit_lock);
864 return NETDEV_TX_BUSY;
866 if(unlikely(++(txring->next_to_use) == RING_DESC_NR))
867 txring->next_to_use = 0;
868 spin_unlock(&jme->xmit_lock);
872 * Fill up TX descriptors
874 skb_copy_from_linear_data(skb,
875 (void*)ALIGN((unsigned long)(txring->buf_virt[idx]), 8),
877 jme_set_new_txdesc(jme, idx, skb->len);
880 * Since still using copy now. we could free it here.
885 * Tell MAC HW to send
887 jwrite32(jme, JME_TXCS, TXCS_QUEUE0S |
892 netdev->stats.tx_bytes += skb->len;
893 ++(netdev->stats.tx_packets);
894 netdev->trans_start = jiffies;
899 static int jme_set_macaddr(struct net_device *netdev, void *p)
901 struct jme_adapter *jme = netdev_priv(netdev);
902 struct sockaddr *addr = p;
905 if(netif_running(netdev))
908 spin_lock(&jme->macaddr_lock);
909 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
911 val = addr->sa_data[3] << 24 |
912 addr->sa_data[2] << 16 |
913 addr->sa_data[1] << 8 |
915 jwrite32(jme, JME_RXUMA, val);
916 val = addr->sa_data[5] << 8 |
918 jwrite32(jme, JME_RXUMA+4, val);
919 spin_unlock(&jme->macaddr_lock);
924 static void jme_set_multi(struct net_device *netdev)
926 struct jme_adapter *jme = netdev_priv(netdev);
932 spin_lock(&jme->macaddr_lock);
933 val = RXMCS_BRDFRAME | RXMCS_UNIFRAME;
935 if (netdev->flags & IFF_PROMISC)
936 val |= RXMCS_ALLFRAME;
937 else if (netdev->flags & IFF_ALLMULTI)
938 val |= RXMCS_ALLMULFRAME;
939 else if(netdev->flags & IFF_MULTICAST) {
940 struct dev_mc_list *mclist;
943 val |= RXMCS_MULFRAME | RXMCS_MULFILTERED;
944 for (i = 0, mclist = netdev->mc_list;
945 mclist && i < netdev->mc_count;
946 ++i, mclist = mclist->next) {
947 bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3F;
948 mc_hash[bit_nr >> 5] |= 1 << (bit_nr & 0x1F);
949 dprintk("Adding MCAddr: "
950 "%02x:%02x:%02x:%02x:%02x:%02x (%d)\n",
960 jwrite32(jme, JME_RXMCHT, mc_hash[0]);
961 jwrite32(jme, JME_RXMCHT+4, mc_hash[1]);
966 jwrite32(jme, JME_RXMCS, val);
967 spin_unlock(&jme->macaddr_lock);
969 dprintk("RX Mode changed: %08x\n", val);
972 static int jme_change_mtu(struct net_device *dev, int new_mtu)
975 * Do not support MTU change for now.
980 static void jme_get_drvinfo(struct net_device *netdev,
981 struct ethtool_drvinfo *info)
983 struct jme_adapter *jme = netdev_priv(netdev);
985 strcpy(info->driver, DRV_NAME);
986 strcpy(info->version, DRV_VERSION);
987 strcpy(info->bus_info, pci_name(jme->pdev));
990 static int jme_get_settings(struct net_device *netdev,
991 struct ethtool_cmd *ecmd)
993 struct jme_adapter *jme = netdev_priv(netdev);
995 spin_lock(&jme->phy_lock);
996 rc = mii_ethtool_gset(&(jme->mii_if), ecmd);
997 spin_unlock(&jme->phy_lock);
1001 static int jme_set_settings(struct net_device *netdev,
1002 struct ethtool_cmd *ecmd)
1004 struct jme_adapter *jme = netdev_priv(netdev);
1006 spin_lock(&jme->phy_lock);
1007 rc = mii_ethtool_sset(&(jme->mii_if), ecmd);
1008 spin_unlock(&jme->phy_lock);
1012 static u32 jme_get_link(struct net_device *netdev) {
1013 struct jme_adapter *jme = netdev_priv(netdev);
1014 return jread32(jme, JME_PHY_LINK) & PHY_LINK_UP;
1017 static const struct ethtool_ops jme_ethtool_ops = {
1018 .get_drvinfo = jme_get_drvinfo,
1019 .get_settings = jme_get_settings,
1020 .set_settings = jme_set_settings,
1021 .get_link = jme_get_link,
1024 static int __devinit jme_init_one(struct pci_dev *pdev,
1025 const struct pci_device_id *ent)
1028 struct net_device *netdev;
1029 struct jme_adapter *jme;
1030 DECLARE_MAC_BUF(mac);
1033 * set up PCI device basics
1035 CHECK_AND_GOTO(pci_enable_device(pdev),
1037 "Cannot enable PCI device.")
1039 CHECK_AND_GOTO(!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM),
1040 err_out_disable_pdev,
1041 "No PCI resource region found.")
1043 CHECK_AND_GOTO(pci_request_regions(pdev, DRV_NAME),
1044 err_out_disable_pdev,
1045 "Cannot obtain PCI resource region.")
1047 pci_set_master(pdev);
1050 * alloc and init net device
1052 netdev = alloc_etherdev(sizeof(struct jme_adapter));
1054 CHECK_VAR = -ENOMEM;
1055 goto err_out_disable_pdev;
1057 netdev->open = jme_open;
1058 netdev->stop = jme_close;
1059 netdev->hard_start_xmit = jme_start_xmit;
1060 netdev->irq = pdev->irq;
1061 netdev->set_mac_address = jme_set_macaddr;
1062 netdev->set_multicast_list = jme_set_multi;
1063 netdev->change_mtu = jme_change_mtu;
1064 netdev->ethtool_ops = &jme_ethtool_ops;
1066 SET_NETDEV_DEV(netdev, &pdev->dev);
1067 pci_set_drvdata(pdev, netdev);
1072 jme = netdev_priv(netdev);
1075 jme->regs = ioremap(pci_resource_start(pdev, 0),
1076 pci_resource_len(pdev, 0));
1079 goto err_out_free_netdev;
1081 spin_lock_init(&jme->xmit_lock);
1082 spin_lock_init(&jme->recv_lock);
1083 spin_lock_init(&jme->macaddr_lock);
1084 spin_lock_init(&jme->phy_lock);
1085 jme->mii_if.dev = netdev;
1086 jme->mii_if.phy_id = 1;
1087 jme->mii_if.supports_gmii = 1;
1088 jme->mii_if.mdio_read = jme_mdio_read;
1089 jme->mii_if.mdio_write = jme_mdio_write;
1092 * Reset MAC processor and reload EEPROM for MAC Address
1095 jme_reset_mac_processor(jme);
1096 CHECK_AND_GOTO(jme_reload_eeprom(jme),
1098 "Rload eeprom for reading MAC Address error.");
1099 jme_load_macaddr(netdev);
1103 * Tell stack that we are not ready to work until open()
1105 netif_carrier_off(netdev);
1106 netif_stop_queue(netdev);
1111 CHECK_AND_GOTO(register_netdev(netdev),
1113 "Cannot register net device.")
1115 printk(KERN_INFO "%s: JMC250 gigabit eth at %llx, %s, IRQ %d\n",
1117 (unsigned long long) pci_resource_start(pdev, 0),
1118 print_mac(mac, netdev->dev_addr),
1121 pci_set_drvdata(pdev, netdev);
1127 err_out_free_netdev:
1128 pci_set_drvdata(pdev, NULL);
1129 free_netdev(netdev);
1130 err_out_disable_pdev:
1131 pci_disable_device(pdev);
1132 pci_set_drvdata(pdev, NULL);
1137 static void __devexit jme_remove_one(struct pci_dev *pdev)
1139 struct net_device *netdev = pci_get_drvdata(pdev);
1140 struct jme_adapter *jme = netdev_priv(netdev);
1142 unregister_netdev(netdev);
1144 pci_set_drvdata(pdev, NULL);
1145 free_netdev(netdev);
1146 pci_release_regions(pdev);
1147 pci_disable_device(pdev);
1151 static struct pci_device_id jme_pci_tbl[] = {
1152 { PCI_VDEVICE(JMICRON, 0x250) },
1156 static struct pci_driver jme_driver = {
1158 .id_table = jme_pci_tbl,
1159 .probe = jme_init_one,
1160 .remove = __devexit_p(jme_remove_one),
1163 .suspend = jme_suspend,
1164 .resume = jme_resume,
1165 #endif /* CONFIG_PM */
1169 static int __init jme_init_module(void)
1171 printk(KERN_INFO "jme: JMicron JMC250 gigabit ethernet "
1172 "driver version %s\n", DRV_VERSION);
1173 return pci_register_driver(&jme_driver);
1176 static void __exit jme_cleanup_module(void)
1178 pci_unregister_driver(&jme_driver);
1181 module_init(jme_init_module);
1182 module_exit(jme_cleanup_module);
1184 MODULE_AUTHOR("David Tseng <cooldavid@cooldavid.org>");
1185 MODULE_DESCRIPTION("JMicron JMC2x0 PCI Express Ethernet driver");
1186 MODULE_LICENSE("GPL");
1187 MODULE_VERSION(DRV_VERSION);
1188 MODULE_DEVICE_TABLE(pci, jme_pci_tbl);