Date: Tue, 10 Dec 2002 10:27:31 -0500 (EST) From: Robert Watson <rwatson@FreeBSD.org> To: arch@FreeBSD.org Subject: busdma support in various device drivers Message-ID: <Pine.NEB.3.96L.1021210101643.62186A-100000@fledge.watson.org>
next in thread | raw e-mail | index | archive | help
One of the post-5.0 development goals will be to complete integration of busdma support into FreeBSD (as well as MFC it as required). For those unfamiliar with busdma, it provides an architecture-independent abstraction for handling virtual address space and DMA transfer setup, and is required to maintain drivers across multiple platforms in a scalable manner. Generally speaking, drivers written to use the proper newbus and busdma abstractions appear to work almost "out of the box" across various architectures, whereas drivers not designed in this manner may not even compile. For us to properly support PAE (>4gb memory) on i386, as well as sparc64, ppc, etc, properly, we really need push relevant device drivers in the direction of using these abstractions. Up until recently, we didn't have sufficient busdma primitives to usefully convert network interface drivers; Sam Leffler's integration of the OpenBSD crypto acceleration framework and device drivers has provided those primitives (they may have originated in NetBSD before hitting OpenBSD?). In any case, as we continue to stabilize and improve portability of the 5.x branch, this is a necessary step. At some point in the future, presumably we will mandate that new drivers entering the system use the correct abstractions, but in the mean time we have a lot to take care of. Attached below, please find the results of a rapid fire audit of src/sys/dev for use of DMA and non-portable interactions with VM for the purposes of DMA setup. In general, the use of the folowing routines connotes a non-portable use of VM: vtophys() kvtop() There are a number of drivers that are already mostly converted to busmda, but perform some direct calls to these functions for various reasons. They should be low-hanging fruit in a conversion effort. I haven't had a chance to review some of the other common locations for drivers, such as src/sys/pci, but will attempt to get to that sometime over the next few weeks. Some drivers, particularly dated ISA drivers, are probably not worth the conversion effort. However, we have a large number of mainstream network interface drivers, and to a lesser extent storage drivers, that do need to be attended to. The plan of attack I'd like to take is for driver maintainers to perform the conversions on their own drivers, and then for maintainer-less drivers to be addressed as staffing and needs permit. If you're interested in grabbing ownership of a driver for conversion, feel free to drop me an e-mail, or just update the entry for the driver on the status web page, which may be found at: http://www.FreeBSD.org/projects/busdma/ In addition, if you aware of other drivers that will require conversion, please also let me know or update the page. While reviewing drivers, it may also make sense to review for 64-bit safety. Thanks, Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert@fledge.watson.org Network Associates Laboratories Platform Support Status +------------------------------------------------------------------------+ | Task | Responsible | Last | Status | Details | | | | updated | | | |---------+----------------+-------------+----------+--------------------| | alpha | | | In | | | | | | progress | | |---------+----------------+-------------+----------+--------------------| | ia64 | | | Not done | | |---------+----------------+-------------+----------+--------------------| | i386 | Sam Leffler | December 9, | Done | Fully supported. | | | | 2002 | | | |---------+----------------+-------------+----------+--------------------| | powerpc | | | Not done | | |---------+----------------+-------------+----------+--------------------| | | | December 9, | In | Mbuf busdma | | sparc64 | Maxime Henrion | 2002 | progress | interfaces not yet | | | | | | implemented. | +------------------------------------------------------------------------+ Network Interface Driver Status +------------------------------------------------------------------------+ | Task | Responsible | Last updated | Status | Notes | |--------+----------------+--------------+-------------+-----------------| | if_ar | | | Not done | kvtop() | |--------+----------------+--------------+-------------+-----------------| | if_bge | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_cs | | | Not done | | |--------+----------------+--------------+-------------+-----------------| | if_dc | | | Not done | | |--------+----------------+--------------+-------------+-----------------| | if_ed | | | Not done | kvtop() | |--------+----------------+--------------+-------------+-----------------| | if_em | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_en | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_fxp | Maxime Henrion | December 9, | In progress | vtophys() | | | | 2002 | | | |--------+----------------+--------------+-------------+-----------------| | if_fwe | | | Not done | | |--------+----------------+--------------+-------------+-----------------| | if_gem | Thomas Moestl | December 9, | In progress | Uses old busdma | | | | 2002 | | interface. | |--------+----------------+--------------+-------------+-----------------| | if_gx | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_hme | Thomas Moestl | December 9, | In progress | Uses old busdma | | | | 2002 | | interface. | |--------+----------------+--------------+-------------+-----------------| | if_idt | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_ie | | | Not done | kvtop() | |--------+----------------+--------------+-------------+-----------------| | if_lge | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_lmc | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_lnc | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_my | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_nge | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | | | | | mostly busdma, | | if_pdq | | | Not done | except for | | | | | | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_rl | Bill Paul | December 9, | Done | | | | | 2002 | | | |--------+----------------+--------------+-------------+-----------------| | if_sis | Bill Paul | December 9, | Done | | | | | 2002 | | | |--------+----------------+--------------+-------------+-----------------| | if_sr | | | Not done | vtophys() | |--------+----------------+--------------+-------------+-----------------| | if_ti | | | Not done | | |--------+----------------+--------------+-------------+-----------------| | if_tx | | | Not done | | |--------+----------------+--------------+-------------+-----------------| | if_txp | | | Not done | | |--------+----------------+--------------+-------------+-----------------| | if_xl | Maxime Henrion | December 9, | In progress | | | | | 2002 | | | +------------------------------------------------------------------------+ Storage Device Driver Status +------------------------------------------------------------------------+ | Task | Responsible | Last | Status | Notes | | | | updated | | | |----------+-------------+-------------+-----------+---------------------| | aac | | December 9, | Done | Not 64-bit-safe | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | aha | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | adv | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | ahb | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | aic7xxx | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | amr | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | asr | | | Not done | vtophys() | |----------+-------------+-------------+-----------+---------------------| | ata | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | buslogic | | | Not done | vtophys() | |----------+-------------+-------------+-----------+---------------------| | ciss | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | dpt | | | Not done | vtophys() | |----------+-------------+-------------+-----------+---------------------| | ida | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | iir | | | Not done | vtophys() | |----------+-------------+-------------+-----------+---------------------| | isp | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | mlx | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | mly | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | mpt | | December 9, | Done | | | | | 2002 | | | |----------+-------------+-------------+-----------+---------------------| | pst | | | Not done | vtophys() | |----------+-------------+-------------+-----------+---------------------| | | | December 9, | | At least, it looks | | stg | | 2002 | Done | like it may well | | | | | | be. | |----------+-------------+-------------+-----------+---------------------| | sym | | | Not done | vtophys() | |----------+-------------+-------------+-----------+---------------------| | trm | Olivier | December 9, | In | vtophys() | | | Houchard | 2002 | progress | | |----------+-------------+-------------+-----------+---------------------| | twe | | December 9, | Done | | | | | 2002 | | | +------------------------------------------------------------------------+ Miscellaneous Device Driver Status +------------------------------------------------------------------------+ | Task | Responsible | Last updated | Status | Notes | |----------+-------------+--------------+----------+---------------------| | bktr | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | ct | | | Not done | | |----------+-------------+--------------+----------+---------------------| | cs | | | Not done | | |----------+-------------+--------------+----------+---------------------| | digi | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | drm | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | exca | Warner Losh | December 9, | Done | | | | | 2002 | | | |----------+-------------+--------------+----------+---------------------| | fb | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | firewire | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | hea | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | hfa | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | hifn | Sam Leffler | December 9, | Done | | | | | 2002 | | | |----------+-------------+--------------+----------+---------------------| | musycc | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | ubsec | Sam Leffler | December 9, | Done | vtophys() is used | | | | 2002 | | in debugging printf | |----------+-------------+--------------+----------+---------------------| | usb | | | Not done | vtophys() | |----------+-------------+--------------+----------+---------------------| | wds | | December 9, | Done | vtophys() | | | | 2002 | | | +------------------------------------------------------------------------+ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1021210101643.62186A-100000>