summaryrefslogtreecommitdiffstats
path: root/sys/pci/if_xl.c
Commit message (Collapse)AuthorAgeFilesLines
* Change callers of mtx_init() to pass in an appropriate lock type name. Injhb2002-04-041-1/+2
| | | | | | | most cases NULL is passed, but in some cases such as network driver locks (which use the MTX_NETWORK_LOCK macro) and UMA zone locks, a name is used. Tested on: i386, alpha, sparc64
* Remove __P.alfred2002-03-201-56/+54
|
* Fix a problem where stats overflow interrupts would causesilby2001-12-171-1/+1
| | | | | | | | | | a major slowdown, and re-enable stats overflow interrupts. For future reference, the bug was in our code, and not some bug in the 3com chips. Reviewed by: wpaul MFC after: 2 days
* Remove printf's on mbuf/cluster allocation failures. There are nowluigi2001-12-141-6/+1
| | | | | | | equivalent and less dangerous (rate limited) messages in the mbuf allocation code. MFC after: 3 days
* Add suspend/resume hooks to this driver; necessary to overcomeguido2001-12-051-0/+38
| | | | | | problems on HP Omnibook 500. MFC after: 1 week
* Implement TCP/IP checksum off-loading on send for the 3c905B and lateralc2001-10-221-1/+12
| | | | generation cards.
* Implement TCP/IP checksum off-loading on receive. Announcealc2001-09-231-3/+21
| | | | | | rxcsum capabilities. Reviewed by: wpaul
* Add support for the 3c656B cardbus adapter. This is one half of awpaul2001-08-281-5/+20
| | | | | | | | | | | dual function card. It needs pretty much the same flags as the 656C, except that it seems to need both the INVERT_MII_PWR and INVERT_LED_PWR flags set. Tested with cardbus in -current as of today. Also added support for the 3c656, which looks to be the same as the 656B, except it doesn't need the EEPROM_8BIT flag. I think. This one is untested, but the added support should not break any of the other cards.
* Pacify users who get all bent out of shape when they see the "xl%d: commandwpaul2001-07-271-2/+7
| | | | | | | | | | | never completed" message. The RX reset takes longer complete than it used to, a lot longer in fact than xl_wait() is prepared to wait. When we do the RX reset in xl_reset(), this cases xl_wait() to time out and whine. We wait a little extra time now after the RX reset, which should silence the warning. Thanks to obrien for finally getting me a box with a NIC that causes this problem for me to tinker with.
* Apply patch supplied by Jonathan Chen: use the correct arguments towpaul2001-07-091-2/+2
| | | | | pci_enable_io(). We need to use SYS_RES_IOPORT/SYS_RES_MEMORY instead of PCIM_CMD_PORTEN/PCIM_CMD_MEMEN.
* Grrr. Fix PR 27742 correctly this time. (At least I got -stable right.)wpaul2001-06-011-11/+2
|
* Close PR #27742: allow the xl driver to receive VLAN tagged frames bywpaul2001-05-311-2/+14
| | | | | | | | | | | | | | | setting the 'max packet size' register in window 3. This only works for cards based on the cyclone or newer chipsets (i.e. it won't work with the original 3c905/boomerang cards). There is a trick which will work with the boomerang, which is to turn on the 'large packets ok' bit in the MAC control register, however this lets the chip accept any frame up to 4K in length, which is larger than the mbuf cluster buffers we use to receive frames. If somebody sends us such a frame and the chip DMAs it to us, it could write past the end of the cluster buffer and clobber something. PR: kern/27742
* Big round of minor updates:wpaul2001-02-211-3/+3
| | | | | | | | | | | | | | - Use pci_get_powerstate()/pci_set_powerstate() in all the other drivers that need them so we don't have to fiddle with the PCI power management registers directly. - Use pci_enable_busmaster()/pci_enable_io() to turn on busmastering and PIO/memory mapped accesses. - Add support to the RealTek driver for the D-Link DFE-530TX+ which has a RealTek 8139 with its own PCI ID. (Submitted by Jason Wright) - Have the SiS 900/National DP83815 driver be sure to disable PME mode in sis_reset(). This apparently fixes a problem on some motherboards where the DP83815 chip fails to receive packets. (Submitted by Chuck McCrobie <mccrobie@cablespeed.com>)
* Convert if_multiaddrs from LIST to TAILQ so that it can be traversedphk2001-02-061-2/+2
| | | | | | backwards in the three drivers which want to do that. Reviewed by: mikeh
* Use LIST_FOREACH() to traverse ifp->if_multiaddrs list, instead ofphk2001-02-031-4/+2
| | | | | | | <sys/queue.h> implementation details. Created with: /usr/sbin/sed Reviewed with: /sbin/md5
* Implement MTX_RECURSE flag for mtx_init().bmilekic2001-01-191-1/+1
| | | | | | | | | | | | | | | | | | | All calls to mtx_init() for mutexes that recurse must now include the MTX_RECURSE bit in the flag argument variable. This change is in preparation for an upcoming (further) mutex API cleanup. The witness code will call panic() if a lock is found to recurse but the MTX_RECURSE bit was not set during the lock's initialization. The old MTX_RECURSE "state" bit (in mtx_lock) has been renamed to MTX_RECURSED, which is more appropriate given its meaning. The following locks have been made "recursive," thus far: eventhandler, Giant, callout, sched_lock, possibly some others declared in the architecture-specific code, all of the network card driver locks in pci/, as well as some other locks in dev/ stuff that I've found to be recursive. Reviewed by: jhb
* Use pci_get_powerstate()/pci_set_powerstate() which now exists in thewpaul2000-12-181-23/+19
| | | | | | | | PCI code. This saves each driver from having to grovel around looking for the right registers to twiddle. I should eventually convert the other PCI drivers to do this; for now, these three are ones which I know need power state handling.
* Initialize/grab the mutex earlier in the attach phase, so thatwpaul2000-12-041-3/+3
| | | | | bailing out to the fail: label where we release/destroy the mutex will work without exploding.
* Add device ID for the 3c565C card. I followed exactly the 3c575c, butimp2000-12-011-1/+8
| | | | | further tweaks may be necessary down the road. This does nothing with the serial side of the card.
* add support for 3Com 3c575TX Fast Etherlink XL.sanpei2000-11-021-1/+6
| | | | | | | Device information for 3C575-TX is from NetBSD, sys/dev/cardbus/if_ex_cardbus.c file. Reviewed by: wpaul, imp
* Add support for cardbus card's chips. This will make the 3c575 cardsimp2000-10-161-5/+30
| | | | | | work once the rest of the cardbus infrastructure has been committed. Submitted by: Jonathan Chen <jon@spook.org>
* When wierdreset flag is set, turn on the DISADVFD flag when we resetimp2000-10-161-1/+2
| | | | | | | | | rather than all the flags. This prevents setting being read from ROM, which is a problem. If this breaks anything, it will only break the 3C556B cards minipci cards, which mainly exist at rpi as far as rpi has been able to tell. Submitted by: Louis Gerbarg <gerbal@rpi.edu>
* Remove an errant splimp() that I missed when I went through this driverwpaul2000-10-161-3/+0
| | | | the first time.
* Fix one instance of XL_LOCK() that should have been XL_UNLOCK(). Afterwpaul2000-10-151-1/+1
| | | | | doing this so many times, I guess I was entitled to at least one typo. Thanks to all who spotted this.
* Remove unneeded #include <machine/clock.h>phk2000-10-151-1/+0
|
* Use device_get_nameunit(dev) as the mutex string when callingwpaul2000-10-131-1/+1
| | | | | mtx_init() instead of hard-coded string constant. Also remember to do the mutex changes to the ste driver, which I forgot in the first commit.
* First round of converting network drivers from spls to mutexes. Thiswpaul2000-10-131-23/+62
| | | | | | | | takes care of all the 10/100 and gigE PCI drivers that I've done. Next will be the wireless drivers, then the USB ones. I may pick up some stragglers along the way. I'm sort of playing this by ear: if anyone spots any places where I've screwed up horribly, please let me know.
* Add support for the 3Com 556 and 556B mini-pci adapters used on somewpaul2000-08-281-9/+76
| | | | | | | laptops. I've checked that this still works with the other cards and it works with the 3c556 that I have access to, but I want to check that it works with the 556B mentioned in PR #20878 before I close out the PR and merge to -stable.
* Make all Ethernet drivers attach using ether_ifattach() and detach usingarchie2000-07-131-6/+3
| | | | | | | | | ether_ifdetach(). The former consolidates the operations of if_attach(), ng_ether_attach(), and bpfattach(). The latter consolidates the corresponding detach operations. Reviewed by: julian, freebsd-net
* Use the correct register name. s/PCI_COMMAND_STATUS_REG/PCIR_COMMAND/peter2000-05-281-3/+3
|
* Move code to handle BPF and bridging for incoming Ethernet packets outarchie2000-05-141-37/+0
| | | | | | | | | | | | | | | of the individual drivers and into the common routine ether_input(). Also, remove the (incomplete) hack for matching ethernet headers in the ip_fw code. The good news: net result of 1016 lines removed, and this should make bridging now work with *all* Ethernet drivers. The bad news: it's nearly impossible to test every driver, especially for bridging, and I was unable to get much testing help on the mailing lists. Reviewed by: freebsd-net
* Depend on miibus.peter2000-04-291-0/+2
| | | | | | | | Note that if_aue doesn't strictly depend on usb because it uses the method interface for calls rather than using internal symbols, and because it's a child driver of usb and therefore will not try and do anything unless the parent usb code is loaded at some point. if_aue does strictly depend on miibus as it will fail to link if it is missing.
* Close PR# 15986: issue an RX reset command when initializing the interface,wpaul2000-01-091-0/+4
| | | | | | | but only for those cards that don't use miibus (i.e. all the 10mbps only cards, and the 100baseFX card). PR: kern/15986
* It appears that under certain circumstances that I still can't quite pinwpaul2000-01-031-1/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | down, the dc driver and receiver can fall out of sync with one another, resulting in a condition where the chip continues to receive packets but the driver never notices. Normally, the receive handler checks each descriptor starting from the current producer index to see if the chip has relinquished ownership, indicating that a packet has been received. The driver hands the packet off to ether_input() and then prepares the descriptor to receive another frame before moving on to the next descriptor in the ring. But sometimes, the chip appears to skip a descriptor. This leaves the driver testing the status word in a descriptor that never gets updated. The driver still gets "RX done" interrupts but never advances further into the RX ring, until the ring fills up and the chip interrupts again to signal an error condition. Sometimes, the driver will remain in this desynchronized state, resulting in spotty performance until the interface is reset. Fortunately, it's fairly simple to detect this condition: if we call the rxeof routine but the number of received packets doesn't increase, we suspect that there could be a problem. In this case, we call a new routine called dc_rx_resync(), which scans ahead in the RX ring to see if there's a frame waiting for us somewhere beyond that the driver thinks is the current producer index. If it finds one, it bumps up the index and calls the rxeof handler again to snarf up the packet and bring the driver back in sync with the chip. (It may actually do this several times in the event that there's more than one "hole" in the ring.) So far the only card supported by if_dc which has exhibited this problem is a LinkSys LNE100TX v2.0 (82c115 PNIC II), and it only seems to happen on one particular system, however the fix is general enough and has low enough overhead that we may as well apply it for all supported chipsets. I also implemented the same fix for the 3Com xl driver, which is apparently vulnerable to the same problem. Problem originally noted and patch tested by: Matt Dillon
* Update the xl driver to recognize yet another 3c905B/3c905C class NIC:wpaul1999-12-161-0/+4
| | | | | | | | | | | | | | | | | the 3c450-TX HomeConnect. Like the 3cSOHO100-TX OfficeConnect, this NIC uses the same ASIC as the 3c905B/3c905C but is targeted for a particular market segment (home users). It is somewhat less expensive than the 3c905B/3c905C ($49, according to the 3Com web site), comes with its own custom driver kit and is bundled with various goofy Windows software packages designed to demonstrate the niftyness of home networking (networked game demos, etc...). Changes are: - Add PCI ID to list in if_xlreg.h. - Update xl_devs table in if_xl.c. - Update xl_choose_xcvr() to consider the HomeConnect the same as all the other 10baseT/100baseTX cards.
* Small tweak: just reset the transmit block instead of doing a global resetwpaul1999-10-251-2/+2
| | | | | in xl_init(). This achieves the effect that I wanted without totally resetting the chip.
* Make some small tweaks:wpaul1999-10-141-4/+26
| | | | | | | | | | | | - When setting/clearing promisc mode, just update the filter, don't reset the whole interface. - Call xl_init() in xl_ifmedia_upd() when setting miibus media modes. This fixes a problem with the 3c905B-COMBO where switching from 10base5/AUI or 10base2/BNC to a 10/100 mode doesn't always work right. - Attempt to reset the interface in xl_init() so that we know we're getting the receive and transmit rings reset properly.
* Change contigmalloc() lower memory bound from 1MB to 0 to improvewpaul1999-09-251-1/+1
| | | | | | | chances of allocations succeeding on systems with small amounts of RAM. Pointed out by: bde
* As suggested by phk, unconditionalize BPF support in these drivers. Sincewpaul1999-09-231-14/+0
| | | | | | | there are stubs compiled into the kernel if BPF support is not enabled, there aren't any problems with unresolved symbols. The modules in /modules are compiled with BPF support enabled anyway, so the most this will do is bloat GENERIC a little.
* Tweak these for what I hope is the last time: change the DRIVER_MODULE()wpaul1999-09-221-1/+1
| | | | | | | | | | declaration for the interface driver from "foo" to "if_foo" but leave the declaration for the miibus attached to the interface driver alone. This lets the internal module name be "if_foo" while still allowing the miibus instances to attach to "foo." This should allow ifconfig to autoload driver modules again without breaking the miibus attach.
* Close PR #13665. I managed to figure out the problem, no thanks to thewpaul1999-09-201-16/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | submitter, who *still* hasn't bothered to answer me back. The thing which the submitter completely failed to mention is that his 3c900B-TPO card has the transceiver selection in the EEPROM set to "auto." You can tweak the setting using the 3C90XCFG.EXE utility that 3Com provides with the card. I'm not sure if it's supposed to default to auto or if the user fiddled with it. Currently, the xl driver only does autoselection for 10/100 NICs (i.e. those with NWAY autonegotiation capabilities). For the 10baseT, 10base5, 10base2, 10baseFL and 100baseFX cards, the driver sets the default media to whatever the EEPROM transceiver selector says. The problem is that the "auto" selection is mistakenly identified as "10/100 NWAY autoselection mode" and this is not handled correctly: the default media ends up being chosen as 100baseTX, which doesn't work because we've only added 10baseT media types to the ifmedia word. This leads to a panic in ifmedia_set() (something else which the submitter never bothered to mention). A workaround for this is to re-run the 3C90XCFG.EXE utility and change the transceiver selection to something besides "auto." I have also patched the driver to watch for the "auto" setting in the non-miibus case and select a reasonable default based on the card type instead of falling through to 100baseTX and exploding. PR: misc/13665
* Un-do the changes to the DRIVER_MODULE() declarations in these drivers.wpaul1999-09-201-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This whole idea isn't going to work until somebody makes the bus/kld code smarter. The idea here is to change the module's internal name from "foo" to "if_foo" so that ifconfig can tell a network driver from a non-network one. However doing this doesn't work correctly no matter how you slice it. For everything to work, you have to change the name in both the driver_t struct and the DRIVER_MODULE() declaration. The problems are: - If you change the name in both places, then the kernel thinks that the device's name is now "if_foo", so you get things like: if_foo0: <FOO ethernet> irq foo at device foo on pcifoo if_foo0: Ethernet address: foo:foo:foo:foo:foo:foo This is bogus. Now the device name doesn't agree with the logical interface name. There's no reason for this, and it violates the principle of least astonishment. - If you leave the name in the driver_t struct as "foo" and only change the names in the DRIVER_MODULE() declaration to "if_foo" then attaching drivers to child devices doesn't work because the names don't agree. This breaks miibus: drivers that need to have miibuses and PHY drivers attached never get them. In other words: damned if you do, damned if you don't. This needs to be thought through some more. Since the drivers that use miibus are broken, I have to change these all back in order to make them work again. Yes this will stop ifconfig from being able to demand load driver modules. On the whole, I'd rather have that than having the drivers not work at all.
* Grrr. Okay, changing the devnames was a bad idea. Put them back the waywpaul1999-09-201-1/+1
| | | | they were.
* Fix the strings in the driver_t structs so that they match the new nameswpaul1999-09-201-1/+1
| | | | in the DRIVER_MODULES() declarations. *sigh*
* Goofed and didn't change the second DRIVER_MODULE() linking these withobrien1999-09-201-1/+1
| | | | | | the miibus. Noticed by: wpaul
* Change the name we register with DRIVER_MODULE() to include the leadingobrien1999-09-201-1/+1
| | | | | | "if_". Reviewed by: msmith, wpaul
* Add an alternate transmit strategy for 3c90xB adapters based on the transmitwpaul1999-09-201-71/+292
| | | | | | | | | | | | | | | strategy used in the 3Com Linux driver. The new strategy is to use transmit descriptor polling -- that is, the NIC polls the descriptors to see when new packets are available for transmission. The advantage to the new scheme is that no register accesses are needed in the transmit routine. The old scheme requires several register accesses to stall the TX engine, update the TX DMA list pointer register, then unstall the TX engine. Hopefully the new scheme will provide improved transmit performance with less CPU overhead. This only affects the 3c90xB or 3c90xC cards, not the 3c90x cards. This means the original 3c900 and 3c905 cards are unaffected. Newer cards include the 3c900B series, the 3c905B, 3c980, 3c980B, 3c905C and 3c905C, and the 3cSOHO100-TX OfficeConnect.
* Dangit: mispelled TORNADO in one place.wpaul1999-09-151-1/+1
|
* 3Com has produced their own Linux driver for the 3c90x/3c90xB series cards.wpaul1999-09-151-3/+8
| | | | | | | | It's GPL'ed of course, but looking over it tonight I learned of Yet Another Fast EtherLink XL Adapter: the 3c980C server adapter. This is basically an updated version of the 3c980 that uses the Tornado ASIC instead of the earlier Hurricane ASIC. The only change here is to add the new PCI device ID (0x9805) and corresponding table entries.
* Add a pointer to "controller miibus0" for people who will not read thepeter1999-09-081-0/+1
| | | | | commit messages or GENERIC and insist on running -CURRENT. It probably won't work, but it's worth a try.
OpenPOWER on IntegriCloud