summaryrefslogtreecommitdiffstats
path: root/sys/pci/if_tlreg.h
Commit message (Collapse)AuthorAgeFilesLines
* Whitespace nits.ru2006-09-151-1/+1
|
* Consistently use if_printf() only in interface methods: if_start,glebius2006-09-151-0/+1
| | | | | | | | | | if_ioctl, if_watchdog, etc, or in functions that are used by these methods only. In all other cases use device_printf(). This also fixes several panics, when if_printf() is called before softc->ifp was initialized. Submitted by: Alex Lyashkov <umka sevcity.net>
* Remove various bits of conditional Alpha code and fixup a few comments.jhb2006-05-121-5/+0
|
* - Fixup locking and mark MPSAFE.jhb2005-09-151-1/+1
| | | | | | | | - Use callout_init_mtx() and static callouts rather than timeout(). - m_getcl() in one place to simplify the code. Tested by: Gavin Atkinson gavin dot atkinson at ury dot york dot ac dot uk MFC after: 1 week
* Stop embedding struct ifnet at the top of driver softcs. Instead thebrooks2005-06-101-1/+1
| | | | | | | | | | | | | | | | | | | | struct ifnet or the layer 2 common structure it was embedded in have been replaced with a struct ifnet pointer to be filled by a call to the new function, if_alloc(). The layer 2 common structure is also allocated via if_alloc() based on the interface type. It is hung off the new struct ifnet member, if_l2com. This change removes the size of these structures from the kernel ABI and will allow us to better manage them as interfaces come and go. Other changes of note: - Struct arpcom is no longer referenced in normal interface code. Instead the Ethernet address is accessed via the IFP2ENADDR() macro. To enforce this ac_enaddr has been renamed to _ac_enaddr. - The second argument to ether_ifattach is now always the mac address from driver private storage rather than sometimes being ac_enaddr. Reviewed by: sobomax, sam
* /* -> /*- for license, minor formatting changesimp2005-01-071-1/+1
|
* Drop the driver lock around calls to if_input to avoid a LOR whensam2003-11-141-0/+1
| | | | | | | | the packets are immediately returned for sending (e.g. when bridging or packet forwarding). There are more efficient ways to do this but for now use the least intrusive approach. Reviewed by: imp, rwatson
* Use if_printf(ifp, "blah") and device_printf(dev, "blah") instead ofbrooks2002-10-211-1/+0
| | | | | printf("%s%d: blah", ifp->if_name, ifp->if_xname). This eliminates the need to store the unit number in the softc.
* Change and clean the mutex lock interface.bmilekic2001-02-091-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mtx_enter(lock, type) becomes: mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks) mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized) similarily, for releasing a lock, we now have: mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN. We change the caller interface for the two different types of locks because the semantics are entirely different for each case, and this makes it explicitly clear and, at the same time, it rids us of the extra `type' argument. The enter->lock and exit->unlock change has been made with the idea that we're "locking data" and not "entering locked code" in mind. Further, remove all additional "flags" previously passed to the lock acquire/release routines with the exception of two: MTX_QUIET and MTX_NOSWITCH The functionality of these flags is preserved and they can be passed to the lock/unlock routines by calling the corresponding wrappers: mtx_{lock, unlock}_flags(lock, flag(s)) and mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN locks, respectively. Re-inline some lock acq/rel code; in the sleep lock case, we only inline the _obtain_lock()s in order to ensure that the inlined code fits into a cache line. In the spin lock case, we inline recursion and actually only perform a function call if we need to spin. This change has been made with the idea that we generally tend to avoid spin locks and that also the spin locks that we do have and are heavily used (i.e. sched_lock) do recurse, and therefore in an effort to reduce function call overhead for some architectures (such as alpha), we inline recursion for this case. Create a new malloc type for the witness code and retire from using the M_DEV type. The new type is called M_WITNESS and is only declared if WITNESS is enabled. Begin cleaning up some machdep/mutex.h code - specifically updated the "optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently need those. Finally, caught up to the interface changes in all sys code. Contributors: jake, jhb, jasone (in no particular order)
* First round of converting network drivers from spls to mutexes. Thiswpaul2000-10-131-0/+4
| | | | | | | | 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.
* Make some small performance tweaks to the tl driver. This should hopefullywpaul1999-09-191-3/+30
| | | | | | | close PR #13757, however I'm waiting on user feedback before declaring the PR officially closed. Among other things, this improves UDP transmit performance, and tx underruns are now detected and the TX start threshold adjusted accordingly.
* $Id$ -> $FreeBSD$peter1999-08-281-1/+1
|
* Convert the ThunderLAN driver to miibus. This took me a while because Iwpaul1999-08-271-254/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | had to get the ML 6692 PHY driver working correctly, which is harder than it sounds. "Bitrate" ThunderLAN devices should still be supported (i.e the older 10Mbps Netflex 3/P, which use the TNETE110 chip that has no MII support). The ThunderLAN has an internal PHY which makes things a little complicated, but these are the basic rules: - For devices with just the ThunderLAN, the internal PHY is used to provide 10baseT, and 10base5/10baseT support. Autonegotiation will work, but only with 10baseT links. The only thing that really gets negotiated is whether the link is full or half duplex. - For devices with the ThunderLAN and an external 10/100 PHY (like the Compaq Netelligent 100Mbps cards, or the internal Netflex 3/P with 100Mbps upgrade daughter card), the external PHY is used for 10baseT and 100baseTX modes. The internal PHY is still used to support 10base5/10base2, though you have to select them manual with ifconfig. - For devices with the ThunderLAN and the ML6692 PHY, both the internal and external PHYs are used, though it will appear as though the 6692 PHY will be used to support 10baseT and 100baseTX modes. In reality, the internal PHY will be used for 10baseT, but this fact will be hidden from the user. The 10base5/10base2 modes can also be selected manually as with above.
* Dangit. Somehow the pmap_kextract hack for alpha snuck back into thesewpaul1999-07-231-3/+2
| | | | | | files. Change them back to alpha_XXX_dmamap(). Pointed out by: Andrew Gallatin
* Convert the ThunderLAN driver to newbus. Also add splimp() protection towpaul1999-07-221-1/+4
| | | | tl_stats_update().
* Insert ifmedia_set() that I forgot and put in the vtophys() hack forwpaul1999-03-311-1/+7
| | | | | | the alpha. Now the ThunderLAN driver works on the alpha (both my sample cards check out.) Update the alpha GENERIC config to include ThunderLAN driver now that I've tested it.
* Various updates for the ThunderLAN driver:wpaul1999-03-301-37/+24
| | | | | | | | | | | | | | | | | | | - When trying to map ports, if mapping TL_PCI_LOIO or TL_PCI_LOMEM fails, try mapping the other one. Apparently, some ThunderLAN parts swap these two registers while others don't. - Add support for bitrate (non-MII) PHYs. If no MII-based PHY is found, program the chip for bitrate mode. This is required for the TNETE110 part, which doesn't have MII support. (It's also obsolete, but there are still some people out there who have them.) With this change and the change above, the Compaq Netflex-3/P 10baseT/BNC board works correctly. (Thanks to Matthew Dodd for getting me one of these cards.) - Convert to bus_space_foo() for register accesses. - Add changes to support FreeBSD/Alpha. I still have to actually test this in my Alpha box so I'm not going to update /sys/alpha/conf/GENERIC yet.
* Increase the size of the tx and rx rings from 10 to 20 descriptorswpaul1998-10-311-4/+4
| | | | | | | | | and increase the tx interrupt threshold to 4. This fixes performance problems on slower systems. Also fix a mind-o in the rx ring init routine: I used the TX constant instead of the RX. This isn't a problem as long as the rings are the same size, but if they aren't hijinx will ensue.
* Overhaul the ThunderLAN driver. This update includes the followingwpaul1998-09-231-230/+131
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | changes: - Cleaned up register access macros so that they work like the XL driver macros (you can switch from PIO to memory-mapped mode using a single #define -- default is still memory mapped mode). The old 'struct overlayed onto the memory mapped register space' cruft has been removed. - Improved multicast filter code. The ThunderLAN has four entry perfect filter table in addition to the 64-bit hash table: we need one of the perfect filter entries for the station address, but we can use the other three for multicast filtering. We arrange to put the first three multicast group addresses in the perfect filter slots so that commonly joined groups like the all hosts group and the all routers group can be filtered without using up bits in the hash table. Note: in FreeBSD 3.0, multicast groups are stored in a doubly linked list, however new entries are added at the head of the list (thereby pushing existing entries down towards the tail). We want to update the filter starting from the oldest entry to the newest since the all hosts group is always joined first. This means we really want to start from the tail of the list, not the head, but to find the tail we first have to traverse the list all the way to the end and then add entries working backwards. This is a bit of a kludge and could be inefficient if the list is long. - Cleaned up autonegotiation code: tl_autoneg() wasn't always setting modes correctly. - Cleaned up ifmedia update and status routines as well. - Added tl_hardreset() routine to initialize the internal PHY according to the ThunderLAN manual. - Did away with the kludge where PHYs were treated as separate logical interfaces. This didn't really work, especially in the case of the newer Olicom 2326 adapters which use a Micro Linear ML6692 PHY which provides only 100Mbps support, relying on the internal PHY for 10Mbps support (both PHYs share the RJ45 port, with the 6692 doing all the autonegotiation work). This kludge resulted from my misunderstanding of the operation of the Compaq Netelligent Dual Port card (the tlan manual mentions multiple channels, but in a different context; this got me a little confused). The driver has been reported to work correctly with the dual port card. - Added dio_getbit/dio_setbit/dio_read/dio_write functions which carefully set the ThunderLAN's indirectly accessed internal registers. This makes the EEPROM reading code more reliable. Hopefully I won't have to touch this again before 3.0 goes out the door. I plan to import the 2.2.x version sometime this week. Approved-by: jkh
* Updates for the ThunderLAN driver:wpaul1998-08-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - probe for PHYs by checking the BMSR (phy status) register instead of the vendor ID register. - fix the autonegotiation routine so that it figures out the autonegotiated modes correctly. - add tweaks to support the Olicom OC-2326 now that I've actually had a chance to test one o Olicom appears to encode the ethernet address in the EEPROM in 16-bit chunks in network byte order. If we detect an Olicom card (based on the PCI vendor ID), byte-swap the station address accordingly. XXX The Linux driver does not do this. I find this odd since the README from the Linux driver indicates that patches to support the Olicom cards came from somebody at Olicom; you'd think if anyone would get that right, it'd be them. Regardless, I accepted the word of the disgnoatic program that came bundled with the card as gospel and fixed the attach routine to make the station address match what it says. o The version of the 2326 card that I got for testing is a strange beast: the card does not look like the picture on the box in which it was packed. For one thing, the picture shows what looks like an external NS 83840A PHY, but the actual card doesn't have one. The card has a TNETE100APCM chip, which appears to have not only the usual internal tlan 10Mbps PHY at MII address 32, but also a 10/100 PHY at MII address 0. Curiously, this PHY's vendor and device ID registers always return 0x0000. I suspect that this is a mutant version of the ThunderLAN chip with 100Mbps support. This combination behaves a little strangely and required the following changes: - The internal PHY has to be enabled in tl_softreset(). - The internal PHY doesn't seem to come to life after detecting the 100Mbps PHY unless it's reset twice. - If you want to use 100Mbps modes, you have to isolate the internal PHY. - If you want to use 10Mbps modes, you have to un-isolate the internal PHY. The latter two changes are handled at the end of tl_init(): if the PHY vendor ID is 0x0000 (which should not be possible if we have a real external PHY), then tl_init() forces the internal PHY's BMCR register to the proper values.
* Declare pointers to CSR register space to be volatile. This seems towpaul1998-07-131-9/+106
| | | | | | | | | | | | | | | | | | | | | | | | cure the problems I was having with interrupts not being acknowledged on time. This fixes a problem I observed where starting two ping -f processes at 10Mbps would cause an adapter check due to TX GO commands being issued before TXEOC interrupts were being acked. Also fix a small problem with tl_start(): the mechanism I was using to queue new packets onto the TX chain was bogus. Change adapter check handler so that it resets card state after tl_softreset() is stored. Moved all EEPROM-related macro definitions into if_tlreg.h. Don't allow an autoneg session to start until after the TX queue has been drained, and don't transmit anything until after the autoneg session is complete. Also add support for two more Compaq ThunderLAN-based cards, and three cards from Olicom which also use the ThunderLAN chip. The only thing different about the Olicom cards is that they store the station address at a different location within the EEPROM.
* Remove 2.2.x compatibility code and #ifdefs. Once the shakedown periodwpaul1998-05-221-4/+1
| | | | | | | | | | | in -current is over, I'll put a 2.2.x specific version in the RELENG_2_2 branch. If somebody wants a 2.2 version of this driver now, they can check out the previous version from CVS or ask me via e-mail. Gee people, I didn't mean to stir up such a controversy. I just wanted to make sure I could get this thing to work with both kernel versions and didn't want to have to maintain two separate copies. All ya hadda do was ask. :)
* Don't use __FreeBSD_version explicitly - none of the otherjkh1998-05-211-2/+2
| | | | | | drivers here do and it also blows up in building GENERIC during a release build if you try and include <osreldate.h> (which shot my SNAP dead - argh!). Use __FreeBSD__ instead.
* Add Texas Instruments TNET100 'ThunderLAN' PCI NIC driver to the tree.wpaul1998-05-211-0/+826
This driver supports the following cards/integrated ethernet controllers: Compaq Netelligent 10, Compaq Netelligent 10/100, Compaq Netelligent 10/100, Compaq Netelligent 10/100 Proliant, Compaq Netelligent 10/100 Dual Port, Compaq NetFlex-3/P Integrated, Compaq NetFlex-3/P Integrated, Compaq NetFlex 3/P w/ BNC, Compaq Deskpro 4000 5233MMX. It should also support Texas Instruments NICs that use the ThunderLAN chip, though I don't have any to test. If you've got a card that uses the ThunderLAN chip but isn't listed in the PCI vendor/product list in if_tl.c, try adding it and see what happens. The driver supports any MII compliant PHY at 10 or 100Mbps speeds in full or half duplex. (Those I've personally tested are the National Semiconductor DP83840A (Prosignia server), the Level 1 LXT970 (Deskpro desktop), and the ThunderLAN's internal 10baseT PHY.) Autonegotiation, hardware multicast filtering, BPF and ifmedia support are included. This chip is pretty fast; Prosignia servers with NCR SCSI, ThunderLAN ethernet and FreeBSD make for a nice combination.
OpenPOWER on IntegriCloud