The Portable Driver Architecture (PDA) is a microdriver library for programming Linux PCI drivers in the userspace.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.




Requirements for Linux:

- Installed GCC
- Installed libtool
- libpci and related headers (comes with pciutils)
- libkmod and related headers 
- libnuma and related headers (comes with numactl)
- Doxygen (if the documentation is needed)

./configure --help
./configure <options>
make install

cd patches/<operating system>/
make install

The PDA is documented with doxygen. Therefore Doxygen must be installed to get 
a full reference manual (tested with version 1.8.4).

make doc

Look into the subfolder doxygen/


- Linux between 2.6.29 and 3.19

5__Known Issues

- Older versions of libpci leak memory. It is therefore recommended to update
libpci to version 3.3.1 or newer. Otherwise the device description string might
not be available.


11.0.8 * Added DDMA

11.0.7 * Added feature for disabling device enumeration
       * Added feature for using DMA buffer as Posix-SHM replacement with low
       * Added feature for listing allocated DMA buffers
       * Removed aborts
       * Changed license to three clause BSD

10.2.6 * Maintenance release
       * Bugfixes and optimizations
       * Added locking for buffer allocation, freeing, and mapping
       * Added on-demand paging for DMA buffers

10.1.6 * Maintenance release
       * Fixed wrap mapping bug(s)
       * Fixed a couple of bugs in error handling
       * Enhanced valgrind compatibility
       * Tested support for Linux +3.19

10.0.6 * Added userspace buffer allocation
       * Removed obsolete DMA buffer direction specifier
       * Optimized udev scripts

9.1.5  * Fixed race conditions during buffer allocation
       * Tested support for Linux +3.18

9.0.5  * Added NUMA control support
       * Completed doxygen documentation
       * Fixed RPM libtool bug in build flow
       * Added automatic RPM config
       * Added --help option to configure script
       * Tested support for Linux +3.16
       * Tested support for Linux +3.17

8.1.4  * Added support for MSI interrupting
       * Added initial support for hotplug (virtual bars)

8.0.4  * Disabled auto vectorization 
       * Added non SSE based memcpy routines
       * Added non vectorizable getter and setter functions
       * Fixed interrupting bug which appeared in conjunction with pthreads
       * Started Doxygen documentation

8.0.3  * Fixed bug with buffer list handling
       * Fixed buffer size bug (return actually allocated instead of requested

8.0.2  * Added support for max payload size and max read request size
       * Added PDA debug version ignore for the CMake include
       * Fixed bug which caused crashing if user permissions were not
       * Tested support for Linux +3.15

7.4.1  * Fixed udev "google chrome" bug (udev rule was going wild)
       * Fixed buffer reallocation bug
       * Code cleanup of the linux kernel module

7.3.1  * Fixed rpmbuild support for kernel module
       * Fixed support for 64Bit BARs
       * Added support for executing as non-privileged user
       * Tested support for Linux +3.14

7.2.1  * Rpmbuild support (make rpm) for the uio_pci_dma kernel module

7.1.1  * Fixed sysfs path bug
       * Added rpmbuild capabilities (make rpm) to make dist
       * Cleaned kernel adapter code
       * Tested support for Linux +3.13

7.0.1  * Fixed page sorting bug
       * Fixed buffer indexing bug
       * Fixed support for Linux +3.12

6.1.1  * KMOD checking is only activated if libkmod is really installed. Issues 
         a big fat warning if used without KMOD.

6.0.1  * DMA buffer mapping without caching
       * Checks adapter version
       * PDA config can return PDA version now
       * Added separate PDAinit function
       * Added separate PDAfinalize function
       * Added function to check that the uses PDA has the right version (even 
         if it compiles)
       * PDA-Debug now usable from outside
       * Bug fixing
       * Works against Linux +3.9 +3.10

5.0.0  * SVN rev 529
       * Fixed buffer rediscover
       * Stabilized wrap mapping
       * Moved some set and get functions into macros
       * Revised buffer lookup
4.3.4  * Added license header

4.2.4  * Enhanced compatibility to Linux 2.6.29 - 3.8

4.1.4  * Added strict return code checking
       * Fixed test cases
       * Fixed warnings

4.0.4  * Added support for buffer wrap mapping ("overmapping"->
         Linux only)

4.0.3  * Added support for DMA (Linux only)
         * Buffer allocation
         * Scatter gather lists (with automatic merging)

3.0.2  * First tested version with support for:
         * Basic Address Registers
         * Interrupts

2.0.0  * Bug fixing (version 0.0.0 was broken).
         * BAR detection used the wrong bits (both libpci
           and config space)
         * Error handling prevented correct working in a
           couple of cases
         * All macros with arguments where broken (extra
           bracing was needed)
       * Added support for 64Bit BARs
       * Added code beautifier
       * Added get methods for device query
       * Added configure checks
       * Removed UIO device deletion (UIO is persistent

0.0.0  * Initial version.
       * Added basic support for Linux and UIO
       * Added BAR and IRQ handling