In computing, busdma, bus_dma and bus_space is a set of application programming interfaces designed to help make device drivers less dependent on platform-specific code, thereby allowing the host operating system to be more easily ported to new computer hardware.
[1][2] This is accomplished by having abstractions for direct memory access (DMA) mapping across popular machine-independent computer buses like PCI, which are used on distinct architectures from IA-32 (NetBSD/i386) to DEC Alpha (NetBSD/alpha).
[1]: §1.2 Thus the rationale of busdma is to facilitate maximum code reuse across a wide range of platforms.
[1]: §5 Circa 2006, bus and DMA abstractions made it possible for NetBSD to support 50 hardware platforms and 14 CPU architectures out of a single source tree, compared to the forking model used by Linux ports.
Both NetBSD and OpenBSD have additional "bus_space" APIs[4] that have been amalgamated into the version of busdma incorporated into FreeBSD.