aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/gem
Commit message (Collapse)AuthorAgeFilesLines
...
* Since if_gem is being touted as one of our more architecturallyPoul-Henning Kamp2007-05-043-195/+141
| | | | | | | | | | | | | | | | | | correct network drivers with respect to busmaster DMA, go over it with at duster to make other aspects of it a role model: Eliminate the pci specific softc, it serves no rational purpose. Use convenience resource allocation/deallocation functions to save code and errorhandling. Switch from bus_space_{read|write}_%u() to bus_{read|write}_%u() functions and forget about tags and handles, the resource will know about those, should they be needed. This also eliminates a number of inconsistently named local variables. Notes: svn path=/head/; revision=169269
* o break newbus api: add a new argument of type driver_filter_t toPaolo Pisati2007-02-231-1/+1
| | | | | | | | | | | | | | | | bus_setup_intr() o add an int return code to all fast handlers o retire INTR_FAST/IH_FAST For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current Reviewed by: many Approved by: re@ Notes: svn path=/head/; revision=166901
* - Use the gem_tick() callout instead of if_slowtimo() for drivingMarius Strobl2006-12-062-22/+25
| | | | | | | | | | | gem_watchdog() in order to avoid races accessing if_timer. While at it relax the watchdog a bit by reloading it in gem_tint() if there are still packets enqueued. - Don't bother to set if_mtu to ETHERMTU, ether_ifattach() does that. - Fix inconsistencies in prototypes. Notes: svn path=/head/; revision=164931
* add a newbus method for obtaining the bus's bus_dma_tag_t... This isJohn-Mark Gurney2006-09-031-3/+4
| | | | | | | | | | | | | | | | required by arches like sparc64 (not yet implemented) and sun4v where there are seperate IOMMU's for each PCI bus... For all other arches, it will end up returning NULL, which makes it a no-op... Convert a few drivers (the ones we've been working w/ on sun4v) to the new convection... Eventually all drivers will need to replace the parent tag of NULL, w/ bus_get_dma_tag(dev), though dev is usually different for each driver, and will require hand inspection... Reviewed by: scottl (earlier version) Notes: svn path=/head/; revision=161928
* add missed calls to bpf_peers_presentSam Leffler2006-06-021-2/+1
| | | | Notes: svn path=/head/; revision=159183
* Fix -Wundef warnings found when compiling i386 LINT, GENERIC andRuslan Ermilov2005-12-051-1/+1
| | | | | | | custom kernels. Notes: svn path=/head/; revision=153110
* - Store pointer to the link-level address right in "struct ifnet"Ruslan Ermilov2005-11-111-1/+1
| | | | | | | | | | | | | rather than in ifindex_table[]; all (except one) accesses are through ifp anyway. IF_LLADDR() works faster, and all (except one) ifaddr_byindex() users were converted to use ifp->if_addr. - Stop storing a (pointer to) Ethernet address in "struct arpcom", and drop the IFP2ENADDR() macro; all users have been converted to use IF_LLADDR() instead. Notes: svn path=/head/; revision=152315
* - In gem_ioctl() move the call to ether_ioctl() to the default case ofMarius Strobl2005-09-181-47/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | the switch statement in order to make this driver more like other Ethernet NIC drivers. - In gem_attach() call gem_stop() in addition to gem_reset() to make sure the chip actually is stopped and not just reset. - In gem_stop() also stop the gem_rint_timeout() callout in case the driver is compiled with GEM_RINT_TIMEOUT defined. Merge some locking improvements from hme(4): - Use callout_init_mtx() to close races between gem_stop() and gem_tick() as weel as gem_stop() and gem_rint() in case the driver is compiled with GEM_RINT_TIMEOUT defined. - Use the driver lock instead of Giant in a bus dma callback. - Lock the driver lock around mii operations. - Cleanup locking in gem_ioctl(). - Remove redundant assertions that the driver lock is not held in gem_attach() and gem_detach() since mtx_lock() will assert that already since the driver lock is not recursive. - Add callout_drain()'s to gem_detach() after calling gem_stop() to make sure that if softclock is running on another CPU and is blocked on our driver lock, we will wait until it has acquired the lock, seen that it was cancelled, dropped the lock, and awakened us so that we can safely destroy the mutex. Notes: svn path=/head/; revision=150285
* - Allow for VLAN-sized frames and set IFCAP_VLAN_MTU.Marius Strobl2005-08-281-8/+23
| | | | | | | | | | | | | | | | - On resume all registers have to be initialized again like after power-on so reset sc_inited in gem_suspend() in order get all of the registers set next time gem_init_regs() is called. - On at least some ERI and GEM revisions GEM_MAC_RX_OVERFLOW happen often due to a silicon bug and re-initializing is all we can do about these errors so make handling them non-verbose. - Remove a superfluous memset(3) call in gem_meminit(), all elements are initialized to 0 anyway. MFC after: 1 week Notes: svn path=/head/; revision=149552
* Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE andRobert Watson2005-08-091-8/+9
| | | | | | | | | | | | | | | | | IFF_DRV_RUNNING, as well as the move from ifnet.if_flags to ifnet.if_drv_flags. Device drivers are now responsible for synchronizing access to these flags, as they are in if_drv_flags. This helps prevent races between the network stack and device driver in maintaining the interface flags field. Many __FreeBSD__ and __FreeBSD_version checks maintained and continued; some less so. Reviewed by: pjd, bz MFC after: 7 days Notes: svn path=/head/; revision=148887
* Modify device drivers supporting multicast addresses to lock if_addr_mtxRobert Watson2005-08-031-0/+2
| | | | | | | | | | | over iteration of their multicast address lists when synchronizing the hardware address filter with the network stack-maintained list. Problem reported by: Ed Maste (emaste at phaedrus dot sandvine dot ca> MFC after: 1 week Notes: svn path=/head/; revision=148654
* Remove NOP spl*() calls and add locking (making gem(4) MPSAFE).Marius Strobl2005-07-243-35/+118
| | | | | | | | | Based on: hme(4) Reviewed by: yongari Tested on: powerpc(grehan), sparc64 Notes: svn path=/head/; revision=148369
* - Wrap the handler and associated code for collecting completed RXMarius Strobl2005-07-241-31/+23
| | | | | | | | | | | | | | | | | | | descriptors that are still marked owned in #ifdef GEM_RINT_TIMEOUT instead of #if 0 for convenience. - Remove stale code and comment about relying on the preset XIF config. - In case of a watchdog timeout call the init function instead of just the start function so the chip is properly reset. Merge from hme(4): - Convert to use bus_dmamap_load_mbuf_sg() for loading RX buffers. - Protect from a duplicate mbuf free panic in case the DMA engine hangs. Reviewed by: yongari Tested on: powerpc(grehan), sparc64 MFC after: 1 week Notes: svn path=/head/; revision=148368
* Stop the interface before detaching and freeing it, rather than after.Brooks Davis2005-06-121-1/+1
| | | | | | | Reported by: marius Notes: svn path=/head/; revision=147317
* Stop embedding struct ifnet at the top of driver softcs. Instead theBrooks Davis2005-06-103-15/+24
| | | | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=147256
* Use BUS_PROBE_DEFAULT for pci probe return valueWarner Losh2005-03-051-1/+1
| | | | Notes: svn path=/head/; revision=143161
* Start each of the license/copyright comments with /*-, minor shuffle of linesWarner Losh2005-01-063-3/+3
| | | | Notes: svn path=/head/; revision=139749
* Since if_gem doesn't contain locking or run with INTR_MPSAFE, markRobert Watson2004-08-131-1/+2
| | | | | | | the interface as IFF_NEEDSGIANT so if_start is run holding Giant. Notes: svn path=/head/; revision=133687
* - Remove a variable no longer used after the conversion to ether_crc32_le().Marius Strobl2004-06-101-4/+2
| | | | | | | | - While here, save on another one no longer really necessary after the conversion. Notes: svn path=/head/; revision=130288
* Replace handrolled CRC calculation with ether_crc32_[lb]e().Christian Weisgerber2004-06-091-17/+1
| | | | Notes: svn path=/head/; revision=130270
* Add missing <sys/module.h> includes currently relying on nested includePoul-Henning Kamp2004-06-032-0/+2
| | | | | | | in <sys/kernel.h> Notes: svn path=/head/; revision=130026
* We don't need to initialize if_output, ether_ifattach() does itMaxime Henrion2004-05-231-1/+0
| | | | | | | for us. Notes: svn path=/head/; revision=129616
* Clean up two printf()s that were on a line by themselves unintendedlyThomas Moestl2004-04-231-2/+2
| | | | | | | after the ethernet address printing was moved to common code. Notes: svn path=/head/; revision=128588
* Let ether_ifattach() announce our MAC address.Matthew N. Dodd2004-03-201-5/+0
| | | | | | | Submitted by: Marius Strobl <marius@alchemy.franken.de> Notes: svn path=/head/; revision=127238
* Convert callers to the new bus_alloc_resource_any(9) API.Nate Lawson2004-03-171-4/+4
| | | | | | | | Submitted by: Mark Santcroos <marks@ripe.net> Reviewed by: imp, dfr, bde Notes: svn path=/head/; revision=127135
* Add new Apple GEM PCI id.Peter Grehan2004-02-021-0/+1
| | | | Notes: svn path=/head/; revision=125313
* Properly initialize all members of the sentinel entry.David E. O'Brien2003-12-261-1/+1
| | | | Notes: svn path=/head/; revision=123851
* Replace the if_name and if_unit members of struct ifnet with new membersBrooks Davis2003-10-311-2/+2
| | | | | | | | | | | | | | | | if_xname, if_dname, and if_dunit. if_xname is the name of the interface and if_dname/unit are the driver name and instance. This change paves the way for interface renaming and enhanced pseudo device creation and configuration symantics. Approved By: re (in principle) Reviewed By: njl, imp Tested On: i386, amd64, sparc64 Obtained From: NetBSD (if_xname) Notes: svn path=/head/; revision=121816
* Preparatory commit to allow prototypes in ofw_machdep.h to containMarcel Moolenaar2003-09-021-0/+1
| | | | | | | | | | both newbus types and OFW types. This involves either including <machine/bus.h> or <dev/ofw/openfirm.h>. Reviewed by: jake, jmg, tmm Notes: svn path=/head/; revision=119696
* Use __FBSDID().David E. O'Brien2003-08-242-4/+7
| | | | | | | Also some minor style cleanups. Notes: svn path=/head/; revision=119418
* s=gem/foo=dev/gem/foo=Warner Losh2003-08-231-2/+2
| | | | Notes: svn path=/head/; revision=119355
* Mega busdma API commit.Scott Long2003-07-011-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add two new arguments to bus_dma_tag_create(): lockfunc and lockfuncarg. Lockfunc allows a driver to provide a function for managing its locking semantics while using busdma. At the moment, this is used for the asynchronous busdma_swi and callback mechanism. Two lockfunc implementations are provided: busdma_lock_mutex() performs standard mutex operations on the mutex that is specified from lockfuncarg. dftl_lock() is a panic implementation and is defaulted to when NULL, NULL are passed to bus_dma_tag_create(). The only time that NULL, NULL should ever be used is when the driver ensures that bus_dmamap_load() will not be deferred. Drivers that do not provide their own locking can pass busdma_lock_mutex,&Giant args in order to preserve the former behaviour. sparc64 and powerpc do not provide real busdma_swi functions, so this is largely a noop on those platforms. The busdma_swi on is64 is not properly locked yet, so warnings will be emitted on this platform when busdma callback deferrals happen. If anyone gets panics or warnings from dflt_lock() being called, please let me know right away. Reviewed by: tmm, gibbs Notes: svn path=/head/; revision=117126
* Some gem and hme hardware bogusly has the intpin register hardwired toThomas Moestl2003-07-011-3/+6
| | | | | | | | 0; detect this case and correct it. While being there, clean up nearby comments. Notes: svn path=/head/; revision=117116
* Miscellaneous fixes:Thomas Moestl2003-05-152-6/+59
| | | | | | | | | | | | | | | | | | | | - Fix compilation without GEM_DEBUG. - Do not #define GEM_DEBUG by default; it adds overhead (due to bzero()ing RX space) and is not needed any more, since the driver is quite stable now. - Fix watchdog timeouts when failing to load TX packets. - Do not forcibly limit the number of descriptors used for a packet to GEM_NTXSEGS, by passing this number to bus_dma_tag_create(). There is no requirement for a limit any lower than the total number of available descriptors, and the present limit caused network problems due to mbuf chains requiring more descriptors. GEM_NTXSEGS is still used to estimate the interrupt window size, for which we just need an estimate. Approved by: re (rwatson) Notes: svn path=/head/; revision=115030
* - Don't call pci_enable_io() in drivers (unless needed for resume).Matthew N. Dodd2003-04-161-1/+0
| | | | | | | | - Don't test memory/port status and emit an error message; the PCI bus code will do this now. Notes: svn path=/head/; revision=113545
* - Express hard dependencies on bus (pci, isa, pccard) andMatthew N. Dodd2003-04-151-1/+3
| | | | | | | | | | | network layer (ether). - Don't abuse module names to facilitate ifconfig module loading; such abuse isn't really needed. (And if we do need type information associated with a module then we should make it explicit and not use hacks.) Notes: svn path=/head/; revision=113506
* Back out M_* changes, per decision of the TRB.Warner Losh2003-02-191-1/+1
| | | | | | | Approved by: trb Notes: svn path=/head/; revision=111119
* Free resources when failing to set up the interrupt.Thomas Moestl2003-01-211-0/+1
| | | | Notes: svn path=/head/; revision=109650
* bus_dmamap_sync() overhaul:Thomas Moestl2003-01-212-22/+18
| | | | | | | | | | | | | | - Remove NetBSD-style or-ed together BUS_DMASYNC operations, in some cases relaxing the (intended) syncing operation a bit. - Stop pretending that that we can sync part of a dmamap: replace the GEM_CDTXSYNC and GEM_CDRXSYNC macros with GEM_CDSYNC to sync the complete control map, and combine syncs wherever possible to avoid the overhead. - Sync all maps before unloading them. - Remove a few syncs which should be unnecessary. Notes: svn path=/head/; revision=109648
* Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0.Alfred Perlstein2003-01-211-1/+1
| | | | | | | Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT. Notes: svn path=/head/; revision=109623
* Add detach, shutdown, suspend and resume methods. The latter two areThomas Moestl2003-01-083-42/+97
| | | | | | | not really tested, but are derived from the original NetBSD version. Notes: svn path=/head/; revision=108964
* - Convert to use bus_dmamap_load_mbuf().Thomas Moestl2003-01-062-397/+155
| | | | | | | | | - remove DPRINTF(), there is a CTR*() for any of them, and KTR is far more useful to debug this driver. - some cleanups; remove some unused code and definitions. Notes: svn path=/head/; revision=108832
* Catch up with sam's changes to network interfaces.Maxime Henrion2002-11-151-2/+1
| | | | Notes: svn path=/head/; revision=106950
* network interface driver changes:Sam Leffler2002-11-141-5/+3
| | | | | | | | | | | | | | | | | o don't strip the Ethernet header from inbound packets; pass packets up the stack intact (required significant changes to some drivers) o reference common definitions in net/ethernet.h (e.g. ETHER_ALIGN) o track ether_ifattach/ether_ifdetach API changes o track bpf changes (use BPF_TAP and BPF_MTAP) o track vlan changes (ifnet capabilities, revised processing scheme, etc.) o use if_input to pass packets "up" o call ether_ioctl for default handling of ioctls Reviewed by: many Approved by: re Notes: svn path=/head/; revision=106937
* Call bpf_mtap() on outgoing packets.Thomas Moestl2002-10-261-3/+6
| | | | Notes: svn path=/head/; revision=105982
* Fix warning.Jake Burkholder2002-07-241-0/+4
| | | | Notes: svn path=/head/; revision=100587
* Incorporate changes made to the NetBSD version of this driver.Benno Rice2002-07-104-87/+159
| | | | | | | | | | | | | | | | | - Remove some obsolete code (NetBSD gem.c r1.12) - Clean up how the local MAC address is programmed (NetBSD gem.c r1.13) - Make the driver work on PowerMacs with gigabit interfaces (NetBSD gem.c r1.14 and r1.15, gemreg.h r1.3 and r1.4, gemvar.h r1.6 and 1.7) - Suppress RX_MAC interrutps regarding the FRAME_COUNT register. (NetBSD gem.c r1.16 and r1.17) - Fix receiver lockups. (NetBSD gem.c r1.18, gemvar.h r1.8) - Distinguish between Apple and Sun variants (NetBSD if_gem_pci.c r1.9) Reviewed by: tmm Obtained from: NetBSD Notes: svn path=/head/; revision=99726
* Fully reset a gem on some error conditions; otherwise it would hang inThomas Moestl2002-05-241-0/+4
| | | | | | | | | about 1 of 10 cases. Proposed and tested by: phk Notes: svn path=/head/; revision=97240
* Move the new byte order function prototypes from <sys/param.h> toMike Barcroft2002-04-261-0/+1
| | | | | | | <sys/endian.h>. This puts us in line with NetBSD and OpenBSD. Notes: svn path=/head/; revision=95533
* In some cases, RX descriptors that are signalled to have been completedThomas Moestl2002-03-232-3/+26
| | | | | | | | | by the hardware are still marked as owned. Handle this by installing a timeout handler to collect this descriptor to avoid having received packets remain unhandled until the next one arrives. Notes: svn path=/head/; revision=93045