cbdma: add support for Intel CBDMA/IOAT
authorAditya Basu <mitthu@google.com>
Sat, 17 Aug 2019 01:51:56 +0000 (21:51 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 19 Aug 2019 16:39:09 +0000 (12:39 -0400)
commit2d6cf1053146d6c31d14a0edd140cfb415a117bc
tree205651ae328af66d9bb4440cf4b54d2a3b227500
parenteefe7883c7f600f4e0c30cba14b205b7942a53d2
cbdma: add support for Intel CBDMA/IOAT

* Creates #cbdma device and a minimal hierarchy with files:
    ktest - run the self-test
    stats - dump register values and driver information
    reset - write 1 to reset the cbdma
    iommu - turn on/off IOMMU support

* Search through all PCI devices and looks for the following devices.
If any device is found, then only a single function is registered.
    * Vendor ID: 0x8086, Device ID: 0x2021 (Skylake)
    * Vendor ID: 0x8086, Device ID: 0x2f20 (Haswell)
* If no cbdma device is found then the device will not attach (bind).

* The PCI bar registers pages are re-mapped with nocache
* A desc chain is populated which describes the DMA transfers
* On MSI interrupts, the driver acks the interrupts and re-enables
interrupts

* User-Space CDMA (ucbdma)
    * desc addresses are converted to kaddr and issued (IOMMU = off)
    * desc addresses are not-converted to kaddr (IOMMU = on)

Signed-off-by: Aditya Basu <mitthu@google.com>
[minor formatting touchups]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/Kbuild
kern/drivers/dev/cbdma.c [new file with mode: 0644]
kern/include/cbdma_regs.h [new file with mode: 0644]