Lines Matching +full:0 +full:x5a000
78 static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */
105 static int rx_copybreak /* = 0 */;
172 module_param(max_interrupt_work, int, 0);
173 module_param(mtu, int, 0);
174 module_param(debug, int, 0);
175 module_param(rx_copybreak, int, 0);
176 module_param(intr_latency, int, 0);
177 module_param(small_frames, int, 0);
178 module_param(enable_hw_cksum, int, 0);
181 MODULE_PARM_DESC(debug, "Debug level (0-6)");
184 MODULE_PARM_DESC(small_frames, "Maximum size of receive frames that bypass interrupt latency (0,64,…
185 MODULE_PARM_DESC(enable_hw_cksum, "Enable/disable hardware cksum support (0/1)");
216 For transmit this driver uses type 0/1 transmit descriptors (depending
277 CH_6915 = 0,
281 { PCI_VDEVICE(ADAPTEC, 0x6915), CH_6915 },
282 { 0, }
304 PCIDeviceConfig=0x50040, GenCtrl=0x50070, IntrTimerCtrl=0x50074,
305 IntrClear=0x50080, IntrStatus=0x50084, IntrEnable=0x50088,
306 MIICtrl=0x52000, TxStationAddr=0x50120, EEPROMCtrl=0x51000,
307 GPIOCtrl=0x5008C, TxDescCtrl=0x50090,
308 TxRingPtr=0x50098, HiPriTxRingPtr=0x50094, /* Low and High priority. */
309 TxRingHiAddr=0x5009C, /* 64 bit address extension. */
310 TxProducerIdx=0x500A0, TxConsumerIdx=0x500A4,
311 TxThreshold=0x500B0,
312 CompletionHiAddr=0x500B4, TxCompletionAddr=0x500B8,
313 RxCompletionAddr=0x500BC, RxCompletionQ2Addr=0x500C0,
314 CompletionQConsumerIdx=0x500C4, RxDMACtrl=0x500D0,
315 RxDescQCtrl=0x500D4, RxDescQHiAddr=0x500DC, RxDescQAddr=0x500E0,
316 RxDescQIdx=0x500E8, RxDMAStatus=0x500F0, RxFilterMode=0x500F4,
317 TxMode=0x55000, VlanType=0x55064,
318 PerfFilterTable=0x56000, HashTable=0x56100,
319 TxGfpMem=0x58000, RxGfpMem=0x5a000,
328 IntrLinkChange=0xf0000000, IntrStatsMax=0x08000000,
329 IntrAbnormalSummary=0x02000000, IntrGeneralTimer=0x01000000,
330 IntrSoftware=0x800000, IntrRxComplQ1Low=0x400000,
331 IntrTxComplQLow=0x200000, IntrPCI=0x100000,
332 IntrDMAErr=0x080000, IntrTxDataLow=0x040000,
333 IntrRxComplQ2Low=0x020000, IntrRxDescQ1Low=0x010000,
334 IntrNormalSummary=0x8000, IntrTxDone=0x4000,
335 IntrTxDMADone=0x2000, IntrTxEmpty=0x1000,
336 IntrEarlyRxQ2=0x0800, IntrEarlyRxQ1=0x0400,
337 IntrRxQ2Done=0x0200, IntrRxQ1Done=0x0100,
338 IntrRxGFPDead=0x80, IntrRxDescQ2Low=0x40,
339 IntrNoTxCsum=0x20, IntrTxBadID=0x10,
340 IntrHiPriTxBadID=0x08, IntrRxGfp=0x04,
341 IntrTxGfp=0x02, IntrPCIPad=0x01,
345 IntrNormalMask=0xff00, IntrAbnormalMask=0x3ff00fe,
350 AcceptBroadcast=0x04, AcceptAllMulticast=0x02, AcceptAll=0x01,
351 AcceptMulticast=0x10, PerfectFilter=0x40, HashFilter=0x30,
352 PerfectFilterVlan=0x80, MinVLANPrio=0xE000, VlanMode=0x0200,
353 WakeupOnGFP=0x0800,
358 MiiSoftReset=0x8000, MIILoopback=0x4000,
359 TxFlowEnable=0x0800, RxFlowEnable=0x0400,
360 PadEnable=0x04, FullDuplex=0x02, HugeFrame=0x01,
365 TxDescSpaceUnlim=0x00, TxDescSpace32=0x10, TxDescSpace64=0x20,
366 TxDescSpace128=0x30, TxDescSpace256=0x40,
367 TxDescType0=0x00, TxDescType1=0x01, TxDescType2=0x02,
368 TxDescType3=0x03, TxDescType4=0x04,
369 TxNoDMACompletion=0x08,
370 TxDescQAddr64bit=0x80, TxDescQAddr32bit=0,
377 RxBufferLenShift=16, RxMinDescrThreshShift=0,
378 RxPrefetchMode=0x8000, RxVariableQ=0x2000,
379 Rx2048QEntries=0x4000, Rx256QEntries=0,
380 RxDescAddr64bit=0x1000, RxDescAddr32bit=0,
381 RxDescQAddr64bit=0x0100, RxDescQAddr32bit=0,
382 RxDescSpace4=0x000, RxDescSpace8=0x100,
383 RxDescSpace16=0x200, RxDescSpace32=0x300,
384 RxDescSpace64=0x400, RxDescSpace128=0x500,
385 RxConsumerWrEn=0x80,
390 RxReportBadFrames=0x80000000, RxDMAShortFrames=0x40000000,
391 RxDMABadFrames=0x20000000, RxDMACrcErrorFrames=0x10000000,
392 RxDMAControlFrame=0x08000000, RxDMAPauseFrame=0x04000000,
393 RxChecksumIgnore=0, RxChecksumRejectTCPUDP=0x02000000,
394 RxChecksumRejectTCPOnly=0x01000000,
395 RxCompletionQ2Enable=0x800000,
396 RxDMAQ2Disable=0, RxDMAQ2FPOnly=0x100000,
397 RxDMAQ2SmallPkt=0x200000, RxDMAQ2HighPrio=0x300000,
398 RxDMAQ2NonIP=0x400000,
399 RxUseBackupQueue=0x080000, RxDMACRC=0x040000,
401 RxBurstSizeShift=0,
406 RxComplQAddr64bit=0x80, RxComplQAddr32bit=0,
407 RxComplProducerWrEn=0x40,
408 RxComplType0=0x00, RxComplType1=0x10,
409 RxComplType2=0x20, RxComplType3=0x30,
410 RxComplThreshShift=0,
415 TxComplQAddr64bit=0x80, TxComplQAddr32bit=0,
416 TxComplProducerWrEn=0x40,
417 TxComplIntrStatus=0x20,
418 CommonQueueMode=0x10,
419 TxComplThreshShift=0,
424 RxEnable=0x05, TxEnable=0x0a,
425 RxGFPEnable=0x10, TxGFPEnable=0x20,
430 Timer10X=0x800, EnableIntrMasking=0x60, SmallFrameBypass=0x100,
431 SmallFrame64=0, SmallFrame128=0x200, SmallFrame256=0x400, SmallFrame512=0x600,
432 IntrLatencyMask=0x1f,
475 RxOK=0x20000000, RxFIFOErr=0x10000000, RxBufQ2=0x08000000,
501 TxDescID=0xB0000000,
502 TxCRCEn=0x01000000, TxDescIntr=0x08000000,
503 TxRingWrap=0x04000000, TxCalTCP=0x02000000,
507 #if 0
601 return 0; in netdev_vlan_rx_add_vid()
616 return 0; in netdev_vlan_rx_kill_vid()
653 ioaddr = pci_resource_start(pdev, 0); in starfire_init_one()
654 io_size = pci_resource_len(pdev, 0); in starfire_init_one()
655 if (!ioaddr || ((pci_resource_flags(pdev, 0) & IORESOURCE_MEM) == 0)) { in starfire_init_one()
699 for (i = 0; i < 6; i++) in starfire_init_one()
705 for (i = 0; i < 0x20; i++) in starfire_init_one()
714 writel(0, base + TxMode); in starfire_init_one()
719 while (--boguscnt > 0) { in starfire_init_one()
721 if ((readl(base + PCIDeviceConfig) & 1) == 0) in starfire_init_one()
724 if (boguscnt == 0) in starfire_init_one()
740 np->mii_if.phy_id_mask = 0x1f; in starfire_init_one()
741 np->mii_if.reg_num_mask = 0x1f; in starfire_init_one()
751 if (small_frames > 0) { in starfire_init_one()
788 int phy, phy_idx = 0; in starfire_init_one()
790 for (phy = 0; phy < 32 && phy_idx < PHY_CNT; phy++) { in starfire_init_one()
794 while (--boguscnt > 0) in starfire_init_one()
795 if ((mdio_read(dev, phy, MII_BMCR) & BMCR_RESET) == 0) in starfire_init_one()
797 if (boguscnt == 0) { in starfire_init_one()
802 if (mii_status != 0) { in starfire_init_one()
813 if (np->phy_cnt > 0) in starfire_init_one()
814 np->mii_if.phy_id = np->phys[0]; in starfire_init_one()
816 memset(&np->mii_if, 0, sizeof(np->mii_if)); in starfire_init_one()
821 return 0; in starfire_init_one()
842 } while ((result & 0xC0000000) != 0x80000000 && --boguscnt > 0); in mdio_read()
843 if (boguscnt == 0) in mdio_read()
844 return 0; in mdio_read()
845 if ((result & 0xffff) == 0xffff) in mdio_read()
846 return 0; in mdio_read()
847 return result & 0xffff; in mdio_read()
878 writel(0, ioaddr + GenCtrl); in netdev_open()
914 (0 << RxMinDescrThreshShift) | in netdev_open()
923 (0 << RxEarlyIntThreshShift) | in netdev_open()
930 (0 << TxPadLenShift) | in netdev_open()
945 (0 << RxComplThreshShift), in netdev_open()
952 for (i = 0; i < 6; i++) in netdev_open()
956 writew(0, ioaddr + PerfFilterTable); in netdev_open()
957 writew(0, ioaddr + PerfFilterTable + 4); in netdev_open()
958 writew(0, ioaddr + PerfFilterTable + 8); in netdev_open()
964 writew(be16_to_cpu(eaddrs[0]), setup_frm); setup_frm += 8; in netdev_open()
986 np->mii_if.advertising = mdio_read(dev, np->phys[0], MII_ADVERTISE); in netdev_open()
990 writel(0x0f00ff00, ioaddr + GPIOCtrl); in netdev_open()
998 writel(0x00800000 | readl(ioaddr + PCIDeviceConfig), in netdev_open()
1030 fw_rx_data = (const __be32 *)&fw_rx->data[0]; in netdev_open()
1031 fw_tx_data = (const __be32 *)&fw_tx->data[0]; in netdev_open()
1036 for (i = 0; i < rx_size; i++) in netdev_open()
1038 for (i = 0; i < tx_size; i++) in netdev_open()
1068 mdio_write(dev, np->phys[0], MII_ADVERTISE, np->mii_if.advertising); in check_duplex()
1069 mdio_write(dev, np->phys[0], MII_BMCR, BMCR_RESET); in check_duplex()
1071 while (--silly_count && mdio_read(dev, np->phys[0], MII_BMCR) & BMCR_RESET) in check_duplex()
1078 reg0 = mdio_read(dev, np->phys[0], MII_BMCR); in check_duplex()
1093 mdio_write(dev, np->phys[0], MII_BMCR, reg0); in check_duplex()
1132 np->cur_rx = np->cur_tx = np->reap_tx = 0; in init_ring()
1133 np->dirty_rx = np->dirty_tx = np->rx_done = np->tx_done = 0; in init_ring()
1138 for (i = 0; i < RX_RING_SIZE; i++) { in init_ring()
1160 np->rx_ring[i].rxaddr = 0; in init_ring()
1162 np->rx_info[i].mapping = 0; in init_ring()
1168 for (i = 0; i < DONE_Q_SIZE; i++) { in init_ring()
1169 np->rx_done_q[i].status = 0; in init_ring()
1170 np->tx_done_q[i].status = 0; in init_ring()
1173 for (i = 0; i < TX_RING_SIZE; i++) in init_ring()
1174 memset(&np->tx_info[i], 0, sizeof(np->tx_info[i])); in init_ring()
1204 for (i = 0; i < skb_num_frags(skb); i++) { in start_tx()
1205 int wrap_ring = 0; in start_tx()
1208 if (i == 0) { in start_tx()
1217 np->reap_tx = 0; in start_tx()
1252 entry = 0; in start_tx()
1259 if (np->cur_tx % (TX_RING_SIZE / 2) == 0) in start_tx()
1280 if (i > 0) { in start_tx()
1284 np->tx_info[entry].mapping = 0; in start_tx()
1309 int handled = 0; in intr_handler()
1318 if (intr_status == 0 || intr_status == (u32) -1) in intr_handler()
1354 while ((tx_status = le32_to_cpu(np->tx_done_q[np->tx_done].status)) != 0) { in intr_handler()
1358 if ((tx_status & 0xe0000000) == 0xa0000000) { in intr_handler()
1360 } else if ((tx_status & 0xe0000000) == 0x80000000) { in intr_handler()
1361 u16 entry = (tx_status & 0x7fff) / sizeof(starfire_tx_desc); in intr_handler()
1368 np->tx_info[entry].mapping = 0; in intr_handler()
1373 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { in intr_handler()
1385 np->tx_done_q[np->tx_done].status = 0; in intr_handler()
1408 if (--boguscnt < 0) { in intr_handler()
1432 int retcode = 0; in __netdev_rx()
1435 while ((desc_status = le32_to_cpu(np->rx_done_q[np->rx_done].status)) != 0) { in __netdev_rx()
1453 if (*quota <= 0) { /* out of rx quota */ in __netdev_rx()
1460 entry = (desc_status >> 16) & 0x7ff; in __netdev_rx()
1484 np->rx_info[entry].mapping = 0; in __netdev_rx()
1500 if (le16_to_cpu(desc->status2) & 0x0100) { in __netdev_rx()
1513 else if (le16_to_cpu(desc->status2) & 0x0040) { in __netdev_rx()
1519 if (le16_to_cpu(desc->status2) & 0x0200) { in __netdev_rx()
1534 desc->status = 0; in __netdev_rx()
1538 if (*quota == 0) { /* out of rx quota */ in __netdev_rx()
1590 for (; np->cur_rx - np->dirty_rx > 0; np->dirty_rx++) { in refill_rx_ring()
1611 if (entry >= 0) in refill_rx_ring()
1625 mdio_read(dev, np->phys[0], MII_BMCR); in netdev_media_change()
1626 mdio_read(dev, np->phys[0], MII_BMSR); in netdev_media_change()
1628 reg0 = mdio_read(dev, np->phys[0], MII_BMCR); in netdev_media_change()
1629 reg1 = mdio_read(dev, np->phys[0], MII_BMSR); in netdev_media_change()
1635 reg4 = mdio_read(dev, np->phys[0], MII_ADVERTISE); in netdev_media_change()
1636 reg5 = mdio_read(dev, np->phys[0], MII_LPA); in netdev_media_change()
1642 np->mii_if.full_duplex = 0; in netdev_media_change()
1644 np->speed100 = 0; in netdev_media_change()
1647 np->speed100 = 0; in netdev_media_change()
1648 np->mii_if.full_duplex = 0; in netdev_media_change()
1655 np->speed100 = 0; in netdev_media_change()
1659 np->mii_if.full_duplex = 0; in netdev_media_change()
1724 dev->stats.tx_bytes = readl(ioaddr + 0x57010); in get_stats()
1725 dev->stats.rx_bytes = readl(ioaddr + 0x57044); in get_stats()
1726 dev->stats.tx_packets = readl(ioaddr + 0x57000); in get_stats()
1728 readl(ioaddr + 0x57024) + readl(ioaddr + 0x57028); in get_stats()
1729 dev->stats.tx_window_errors = readl(ioaddr + 0x57018); in get_stats()
1731 readl(ioaddr + 0x57004) + readl(ioaddr + 0x57008); in get_stats()
1735 writew(0, ioaddr + RxDMAStatus); in get_stats()
1736 dev->stats.rx_crc_errors = readl(ioaddr + 0x5703C); in get_stats()
1737 dev->stats.rx_frame_errors = readl(ioaddr + 0x57040); in get_stats()
1738 dev->stats.rx_length_errors = readl(ioaddr + 0x57058); in get_stats()
1739 dev->stats.rx_missed_errors = readl(ioaddr + 0x5707C); in get_stats()
1750 int vlan_count = 0; in set_vlan_mode()
1762 writew(0, filter_addr); in set_vlan_mode()
1797 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 8; in set_rx_mode()
1802 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; in set_rx_mode()
1813 memset(mc_filter, 0, sizeof(mc_filter)); in set_rx_mode()
1826 writew(be16_to_cpu(eaddrs[0]), filter_addr); filter_addr += 4; in set_rx_mode()
1830 for (filter_addr = ioaddr + HashTable, i = 0; i < 32; filter_addr+= 16, i++) in set_rx_mode()
1841 return 0; in check_if_running()
1858 return 0; in get_link_ksettings()
1919 if ((cmd == SIOCSMIIREG) && (data->phy_id == np->phys[0])) in netdev_ioctl()
1944 writel(0, ioaddr + IntrEnable); in netdev_close()
1947 writel(0, ioaddr + GenCtrl); in netdev_close()
1953 for (i = 0; i < 8 /* TX_RING_SIZE is huge! */; i++) in netdev_close()
1961 for (i = 0; i < 8 /* RX_RING_SIZE */; i++) { in netdev_close()
1970 for (i = 0; i < RX_RING_SIZE; i++) { in netdev_close()
1971 np->rx_ring[i].rxaddr = cpu_to_dma(0xBADF00D0); /* An invalid address. */ in netdev_close()
1979 np->rx_info[i].mapping = 0; in netdev_close()
1981 for (i = 0; i < TX_RING_SIZE; i++) { in netdev_close()
1987 np->tx_info[i].mapping = 0; in netdev_close()
1992 return 0; in netdev_close()
2004 return 0; in starfire_suspend()
2016 return 0; in starfire_resume()