Lines Matching defs:card

47 /* IO registers on the card, offsets */
113 static void xircom_up(struct xircom_private *card);
118 static void investigate_read_descriptor(struct net_device *dev,struct xircom_private *card, int descnr, unsigned int bufferoffset);
119 static void investigate_write_descriptor(struct net_device *dev, struct xircom_private *card, int descnr, unsigned int bufferoffset);
120 static void read_mac_address(struct xircom_private *card);
121 static void transceiver_voodoo(struct xircom_private *card);
122 static void initialize_card(struct xircom_private *card);
123 static void trigger_transmit(struct xircom_private *card);
124 static void trigger_receive(struct xircom_private *card);
125 static void setup_descriptors(struct xircom_private *card);
126 static void remove_descriptors(struct xircom_private *card);
127 static int link_status_changed(struct xircom_private *card);
128 static void activate_receiver(struct xircom_private *card);
129 static void deactivate_receiver(struct xircom_private *card);
130 static void activate_transmitter(struct xircom_private *card);
131 static void deactivate_transmitter(struct xircom_private *card);
132 static void enable_transmit_interrupt(struct xircom_private *card);
133 static void enable_receive_interrupt(struct xircom_private *card);
134 static void enable_link_interrupt(struct xircom_private *card);
135 static void disable_all_interrupts(struct xircom_private *card);
136 static int link_status(struct xircom_private *card);
187 TODO: Send 1 or 2 "dummy" packets here as the card seems to discard the
312 struct xircom_private *card = netdev_priv(dev);
316 pci_iounmap(pdev, card->ioaddr);
317 dma_free_coherent(d, 8192, card->tx_buffer, card->tx_dma_handle);
318 dma_free_coherent(d, 8192, card->rx_buffer, card->rx_dma_handle);
327 struct xircom_private *card = netdev_priv(dev);
328 void __iomem *ioaddr = card->ioaddr;
332 spin_lock(&card->lock);
338 card->tx_buffer[0], card->tx_buffer[4]);
340 card->rx_buffer[0], card->rx_buffer[4]);
344 spin_unlock(&card->lock);
348 if (link_status_changed(card)) {
351 newlink = link_status(card);
367 investigate_write_descriptor(dev,card,i,bufferoffsets[i]);
369 investigate_read_descriptor(dev,card,i,bufferoffsets[i]);
371 spin_unlock(&card->lock);
378 struct xircom_private *card;
383 card = netdev_priv(dev);
384 spin_lock_irqsave(&card->lock,flags);
388 investigate_write_descriptor(dev,card,desc,bufferoffsets[desc]);
391 nextdescriptor = (card->transmit_used +1) % (NUMDESCRIPTORS);
392 desc = card->transmit_used;
395 if (card->tx_buffer[4*desc]==0) {
396 /* Copy the packet data; zero the memory first as the card
399 memset(&card->tx_buffer[bufferoffsets[desc]/4],0,1536);
401 &(card->tx_buffer[bufferoffsets[desc] / 4]),
406 card->tx_buffer[4*desc+1] = cpu_to_le32(skb->len);
408 card->tx_buffer[4*desc+1] |= cpu_to_le32(1<<25);
410 card->tx_buffer[4*desc+1] |= cpu_to_le32(0xF0000000);
412 card->tx_skb[desc] = skb;
415 /* This gives the descriptor to the card */
416 card->tx_buffer[4*desc] = cpu_to_le32(0x80000000);
417 trigger_transmit(card);
418 if (card->tx_buffer[nextdescriptor*4] & cpu_to_le32(0x8000000)) {
422 card->transmit_used = nextdescriptor;
423 spin_unlock_irqrestore(&card->lock,flags);
429 spin_unlock_irqrestore(&card->lock,flags);
430 trigger_transmit(card);
457 struct xircom_private *card;
460 card = netdev_priv(dev);
464 spin_lock_irqsave(&card->lock,flags);
466 disable_all_interrupts(card);
469 deactivate_receiver(card);
470 deactivate_transmitter(card);
472 remove_descriptors(card);
474 spin_unlock_irqrestore(&card->lock,flags);
476 card->open = 0;
477 free_irq(card->pdev->irq, dev);
497 static void initialize_card(struct xircom_private *card)
499 void __iomem *ioaddr = card->ioaddr;
503 spin_lock_irqsave(&card->lock, flags);
505 /* First: reset the card */
510 udelay(100); /* give the card some time to reset */
522 disable_all_interrupts(card);
523 deactivate_receiver(card);
524 deactivate_transmitter(card);
526 spin_unlock_irqrestore(&card->lock, flags);
530 trigger_transmit causes the card to check for frames to be transmitted.
535 static void trigger_transmit(struct xircom_private *card)
537 void __iomem *ioaddr = card->ioaddr;
543 trigger_receive causes the card to check for empty frames in the
549 static void trigger_receive(struct xircom_private *card)
551 void __iomem *ioaddr = card->ioaddr;
558 descriptors and programs the addresses into the card.
560 static void setup_descriptors(struct xircom_private *card)
562 void __iomem *ioaddr = card->ioaddr;
566 BUG_ON(card->rx_buffer == NULL);
567 BUG_ON(card->tx_buffer == NULL);
570 memset(card->rx_buffer, 0, 128); /* clear the descriptors */
573 /* Rx Descr0: It's empty, let the card own it, no errors -> 0x80000000 */
574 card->rx_buffer[i*4 + 0] = cpu_to_le32(0x80000000);
576 card->rx_buffer[i*4 + 1] = cpu_to_le32(1536);
578 card->rx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
583 address = card->rx_dma_handle;
584 card->rx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
586 card->rx_buffer[i*4 + 3] = 0;
590 /* Write the receive descriptor ring address to the card */
591 address = card->rx_dma_handle;
596 memset(card->tx_buffer, 0, 128); /* clear the descriptors */
600 card->tx_buffer[i*4 + 0] = 0x00000000;
602 card->tx_buffer[i*4 + 1] = cpu_to_le32(1536);
604 card->tx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
608 address = card->tx_dma_handle;
609 card->tx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
611 card->tx_buffer[i*4 + 3] = 0;
615 /* wite the transmit descriptor ring to the card */
616 address = card->tx_dma_handle;
621 remove_descriptors informs the card the descriptors are no longer
622 valid by setting the address in the card to 0x00.
624 static void remove_descriptors(struct xircom_private *card)
626 void __iomem *ioaddr = card->ioaddr;
635 link_status_changed returns 1 if the card has indicated that
640 static int link_status_changed(struct xircom_private *card)
642 void __iomem *ioaddr = card->ioaddr;
659 transmit_active returns 1 if the transmitter on the card is
662 static int transmit_active(struct xircom_private *card)
664 void __iomem *ioaddr = card->ioaddr;
673 receive_active returns 1 if the receiver on the card is
676 static int receive_active(struct xircom_private *card)
678 void __iomem *ioaddr = card->ioaddr;
687 activate_receiver enables the receiver on the card.
696 static void activate_receiver(struct xircom_private *card)
698 void __iomem *ioaddr = card->ioaddr;
706 if ((val&2) && (receive_active(card)))
715 if (!receive_active(card))
721 netdev_err(card->dev, "Receiver failed to deactivate\n");
729 /* now wait for the card to activate again */
732 if (receive_active(card))
738 netdev_err(card->dev,
744 deactivate_receiver disables the receiver on the card.
750 static void deactivate_receiver(struct xircom_private *card)
752 void __iomem *ioaddr = card->ioaddr;
762 if (!receive_active(card))
768 netdev_err(card->dev, "Receiver failed to deactivate\n");
774 activate_transmitter enables the transmitter on the card.
783 static void activate_transmitter(struct xircom_private *card)
785 void __iomem *ioaddr = card->ioaddr;
793 if ((val&(1<<13)) && (transmit_active(card)))
801 if (!transmit_active(card))
807 netdev_err(card->dev,
816 /* now wait for the card to activate again */
819 if (transmit_active(card))
825 netdev_err(card->dev,
831 deactivate_transmitter disables the transmitter on the card.
837 static void deactivate_transmitter(struct xircom_private *card)
839 void __iomem *ioaddr = card->ioaddr;
849 if (!transmit_active(card))
855 netdev_err(card->dev,
866 static void enable_transmit_interrupt(struct xircom_private *card)
868 void __iomem *ioaddr = card->ioaddr;
882 static void enable_receive_interrupt(struct xircom_private *card)
884 void __iomem *ioaddr = card->ioaddr;
897 static void enable_link_interrupt(struct xircom_private *card)
899 void __iomem *ioaddr = card->ioaddr;
914 static void disable_all_interrupts(struct xircom_private *card)
916 void __iomem *ioaddr = card->ioaddr;
926 static void enable_common_interrupts(struct xircom_private *card)
928 void __iomem *ioaddr = card->ioaddr;
948 static int enable_promisc(struct xircom_private *card)
950 void __iomem *ioaddr = card->ioaddr;
968 static int link_status(struct xircom_private *card)
970 void __iomem *ioaddr = card->ioaddr;
996 static void read_mac_address(struct xircom_private *card)
998 void __iomem *ioaddr = card->ioaddr;
1003 spin_lock_irqsave(&card->lock, flags);
1025 eth_hw_addr_set(card->dev, addr);
1031 spin_unlock_irqrestore(&card->lock, flags);
1032 pr_debug(" %pM\n", card->dev->dev_addr);
1041 static void transceiver_voodoo(struct xircom_private *card)
1043 void __iomem *ioaddr = card->ioaddr;
1047 pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1049 setup_descriptors(card);
1051 spin_lock_irqsave(&card->lock, flags);
1060 spin_unlock_irqrestore(&card->lock, flags);
1062 netif_start_queue(card->dev);
1066 static void xircom_up(struct xircom_private *card)
1072 pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1074 setup_descriptors(card);
1076 spin_lock_irqsave(&card->lock, flags);
1079 enable_link_interrupt(card);
1080 enable_transmit_interrupt(card);
1081 enable_receive_interrupt(card);
1082 enable_common_interrupts(card);
1083 enable_promisc(card);
1085 /* The card can have received packets already, read them away now */
1087 investigate_read_descriptor(card->dev,card,i,bufferoffsets[i]);
1090 spin_unlock_irqrestore(&card->lock, flags);
1091 trigger_receive(card);
1092 trigger_transmit(card);
1093 netif_start_queue(card->dev);
1098 investigate_read_descriptor(struct net_device *dev, struct xircom_private *card,
1103 status = le32_to_cpu(card->rx_buffer[4*descnr]);
1125 &card->rx_buffer[bufferoffset / 4],
1134 /* give the buffer back to the card */
1135 card->rx_buffer[4*descnr] = cpu_to_le32(0x80000000);
1136 trigger_receive(card);
1144 struct xircom_private *card,
1149 status = le32_to_cpu(card->tx_buffer[4*descnr]);
1153 card->tx_buffer[4*descnr] = 0;
1158 if (card->tx_skb[descnr]!=NULL) {
1159 dev->stats.tx_bytes += card->tx_skb[descnr]->len;
1160 dev_kfree_skb_irq(card->tx_skb[descnr]);
1162 card->tx_skb[descnr] = NULL;
1166 card->tx_buffer[4*descnr] = 0; /* descriptor is free again */