17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19 #include <linux/module.h>
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
24 #include <linux/slab.h>
26 #include <linux/pci.h>
27 #include <linux/netdevice.h>
32 #include <linux/bitops.h>
34 #include <asm/uaccess.h>
36 #ifdef CONFIG_NET_POLL_CONTROLLER
44 #define xw32(reg, val) iowrite32(val, ioaddr + (reg))
45 #define xr32(reg) ioread32(ioaddr + (reg))
46 #define xr8(reg) ioread8(ioaddr + (reg))
68 #define PCI_POWERMGMT 0x40
72 #define NUMDESCRIPTORS 4
108 static void xircom_remove(
struct pci_dev *pdev);
115 #ifdef CONFIG_NET_POLL_CONTROLLER
149 .id_table = xircom_pci_table,
150 .probe = xircom_probe,
155 #if defined DEBUG && DEBUG > 1
156 static void print_binary(
unsigned int number)
162 for (i=31;i>=0;i--) {
175 .ndo_open = xircom_open,
176 .ndo_stop = xircom_close,
177 .ndo_start_xmit = xircom_start_xmit,
181 #ifdef CONFIG_NET_POLL_CONTROLLER
182 .ndo_poll_controller = xircom_poll_controller,
199 unsigned short tmp16;
214 pci_read_config_word (pdev,
PCI_STATUS, &tmp16);
215 pci_write_config_word (pdev,
PCI_STATUS,tmp16);
219 pr_err(
"%s: failed to allocate io-region\n", __func__);
233 private = netdev_priv(dev);
237 &private->rx_dma_handle,
239 if (private->rx_buffer ==
NULL) {
240 pr_err(
"%s: no memory for rx buffer\n", __func__);
244 &private->tx_dma_handle,
246 if (private->tx_buffer ==
NULL) {
247 pr_err(
"%s: no memory for tx buffer\n", __func__);
255 private->pdev =
pdev;
258 private->ioaddr = pci_iomap(pdev, 0, 0);
259 if (!private->ioaddr)
264 initialize_card(
private);
265 read_mac_address(
private);
266 setup_descriptors(
private);
269 pci_set_drvdata(pdev, dev);
273 pr_err(
"%s: netdevice registration failed\n", __func__);
277 netdev_info(dev,
"Xircom cardbus revision %i at irq %i\n",
281 transceiver_voodoo(
private);
284 activate_transmitter(
private);
285 activate_receiver(
private);
286 spin_unlock_irqrestore(&private->lock,flags);
288 trigger_receive(
private);
295 pci_set_drvdata(pdev,
NULL);
317 struct net_device *dev = pci_get_drvdata(pdev);
323 pci_set_drvdata(pdev,
NULL);
331 static irqreturn_t xircom_interrupt(
int irq,
void *dev_instance)
339 spin_lock(&card->
lock);
342 #if defined DEBUG && DEBUG > 1
343 print_binary(status);
344 pr_debug(
"tx status 0x%08x 0x%08x\n",
346 pr_debug(
"rx status 0x%08x 0x%08x\n",
350 if (status == 0 || status == 0xffffffff) {
351 spin_unlock(&card->
lock);
355 if (link_status_changed(card)) {
359 netdev_info(dev,
"Link is %d mbit\n", newlink);
368 status |= 0xffffffff;
374 investigate_write_descriptor(dev,card,i,bufferoffsets[i]);
376 investigate_read_descriptor(dev,card,i,bufferoffsets[i]);
378 spin_unlock(&card->
lock);
390 card = netdev_priv(dev);
395 investigate_write_descriptor(dev,card,desc,bufferoffsets[desc]);
398 nextdescriptor = (card->
transmit_used +1) % (NUMDESCRIPTORS);
407 skb_copy_from_linear_data(skb,
408 &(card->
tx_buffer[bufferoffsets[desc] / 4]),
414 if (desc == NUMDESCRIPTORS - 1)
424 trigger_transmit(card);
427 netif_stop_queue(dev);
430 spin_unlock_irqrestore(&card->
lock,flags);
435 netif_stop_queue(dev);
436 spin_unlock_irqrestore(&card->
lock,flags);
437 trigger_transmit(card);
445 static int xircom_open(
struct net_device *dev)
448 const int irq = xp->
pdev->irq;
451 netdev_info(dev,
"xircom cardbus adaptor found, using irq %i\n", irq);
462 static int xircom_close(
struct net_device *dev)
467 card = netdev_priv(dev);
468 netif_stop_queue(dev);
473 disable_all_interrupts(card);
476 deactivate_receiver(card);
477 deactivate_transmitter(card);
479 remove_descriptors(card);
481 spin_unlock_irqrestore(&card->
lock,flags);
491 #ifdef CONFIG_NET_POLL_CONTROLLER
492 static void xircom_poll_controller(
struct net_device *dev)
495 const int irq = xp->
pdev->irq;
498 xircom_interrupt(irq, dev);
529 disable_all_interrupts(card);
530 deactivate_receiver(card);
531 deactivate_transmitter(card);
533 spin_unlock_irqrestore(&card->
lock, flags);
584 if (i == NUMDESCRIPTORS - 1)
610 if (i == NUMDESCRIPTORS - 1)
653 if (!(val & (1 << 27)))
713 if ((val&2) && (receive_active(card)))
721 while (counter > 0) {
722 if (!receive_active(card))
728 netdev_err(card->
dev,
"Receiver failed to deactivate\n");
738 while (counter > 0) {
739 if (receive_active(card))
745 netdev_err(card->
dev,
746 "Receiver failed to re-activate\n");
768 while (counter > 0) {
769 if (!receive_active(card))
775 netdev_err(card->
dev,
"Receiver failed to deactivate\n");
800 if ((val&(1<<13)) && (transmit_active(card)))
803 val = val & ~(1 << 13);
807 while (counter > 0) {
808 if (!transmit_active(card))
814 netdev_err(card->
dev,
815 "Transmitter failed to deactivate\n");
820 val = val | (1 << 13);
825 while (counter > 0) {
826 if (transmit_active(card))
832 netdev_err(card->
dev,
833 "Transmitter failed to re-activate\n");
855 while (counter > 0) {
856 if (!transmit_active(card))
862 netdev_err(card->
dev,
863 "Transmitter failed to deactivate\n");
873 static void enable_transmit_interrupt(
struct xircom_private *card)
895 val = val | (1 << 6);
910 val = val | (1 << 27);
961 val = val | (1 << 6);
983 if (!(val & (1 << 2)))
986 if (!(val & (1 << 1)))
1006 unsigned long flags;
1013 for (i = 0x100; i < 0x1f7; i += link + 2) {
1024 if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) {
1027 for (j = 0; j < 6; j++) {
1032 }
else if (link == 0) {
1036 spin_unlock_irqrestore(&card->
lock, flags);
1049 unsigned long flags;
1054 setup_descriptors(card);
1065 spin_unlock_irqrestore(&card->
lock, flags);
1067 netif_start_queue(card->
dev);
1073 unsigned long flags;
1079 setup_descriptors(card);
1084 enable_link_interrupt(card);
1085 enable_transmit_interrupt(card);
1086 enable_receive_interrupt(card);
1087 enable_common_interrupts(card);
1088 enable_promisc(card);
1092 investigate_read_descriptor(card->
dev,card,i,bufferoffsets[i]);
1095 spin_unlock_irqrestore(&card->
lock, flags);
1096 trigger_receive(card);
1097 trigger_transmit(card);
1098 netif_start_queue(card->
dev);
1104 int descnr,
unsigned int bufferoffset)
1114 short pkt_len = ((status >> 16) & 0x7ff) - 4;
1118 if (pkt_len > 1518) {
1119 netdev_err(dev,
"Packet length %i is bogus\n", pkt_len);
1123 skb = netdev_alloc_skb(dev, pkt_len + 2);
1125 dev->
stats.rx_dropped++;
1128 skb_reserve(skb, 2);
1129 skb_copy_to_linear_data(skb,
1135 dev->
stats.rx_packets++;
1141 trigger_receive(card);
1148 investigate_write_descriptor(
struct net_device *dev,
1150 int descnr,
unsigned int bufferoffset)
1156 if (status & 0x8000) {
1157 pr_err(
"Major transmit error status %x\n", status);
1159 netif_wake_queue (dev);
1169 if (status & (1 << 8))
1170 dev->
stats.collisions++;
1172 netif_wake_queue (dev);
1173 dev->
stats.tx_packets++;
1177 static int __init xircom_init(
void)
1179 return pci_register_driver(&xircom_ops);
1182 static void __exit xircom_exit(
void)