====== Convert PCI Drivers Attachments to be Table Driven ====== * **Student:** Lakhan Kamireddy () * **Mentors:** * Warner Losh () * Chuck Tuffli () ---- ===== Project description ===== The purpose of this project is to convert all PCI Drivers attachments to be table driven. The devmatch infrastructure gives us a way to match up hardware with kernel modules that implement drivers that claim the hardware. The drivers need some modification before devmatch can use them. Specifically, they need to have their device ID scans done via a table and that table needs to be decorated with PNP_INFO tag so the compiler and kld_xref extract the metadata that devmatch needs to do this job. ===== Approach to solving the problem ===== Work will be needed to move the in-line code to tables, some of the tables lookups may be moved to standardized routines. Trimming GENERIC to show that converted drivers work is also required. ===== Deliverables ===== There are about 243 such pci drivers. The plan is to convert a significant portion of them and maintain a documentation of the conversion. ==== Deliverables for the first evaluation ==== * A set of 30-40 drivers to be converted and decorated with PNP_INFO ==== Deliverables for the second evaluation ==== * Converting 2/3 of the drivers and decorating with PNP_INFO (On an average about 10-12 every week) ==== Deliverables for the final evaluation ==== * Converting all the drivers and automated tests for them ===== Milestones ===== * End of community bonding period: * Preliminary wiki page created ✔ * Development environment set up ✔ * Learn what drivers are using PCI ✔ * May 14: Start of coding * Make a list of PCI drivers present (Partly done) ✔ * Convert 5 easy, 2 medium/hard drivers ✔ * Convert another batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * June 11-15: Phase 1 Evaluations * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Update to use PCI_MATCH macro in a batch of 5 easy and 2 medium/hard drivers ✔ * Update to use PCI_MATCH macro in next batch of 5 easy and 2 medium/hard drivers ✔ * July 9-13: Phase 2 Evaluations * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * Convert next batch of 5 easy and 2 medium/hard drivers ✔ * August 6-14: End of coding * Document PCI_* macros ✔ * PCI_PNP_INFO * PCI_DEV * PCI_SUBDEV * PCI_DEVID * PCI_VID * PCI_SUBVID * August 14-21 16:00 UTC: Final Evaluations ===== Test Plan ===== As there a lot of the drivers, the testing needs to be automated in some way. ===== Progress of conversion ===== ^ Sno ^^ PCI Driver name ^^ Category ^^ Status ^^ | 1 || puc || trivial || Done ✔ || | 2 || bce || trivial || Done ✔ || | 3 || xl || trivial || Done ✔ || | 4 || ed || trivial || Done ✔ || | 5 || aac || trivial || Done ✔ || | 6 || ncr || hard || Done ✔ || | 7 || ath || hard || Done ✔ || | 8 || aacraid || trivial || Done ✔ || | 9 || ahci || trivial || Done ✔ || | 10 || an || trivial || Done ✔ || | 11 || bwn || medium || Done ✔ || | 12 || bwi || trivial || Done ✔ || | 13 || ale || trivial || Done ✔ || | 14 || amr || trivial || Done ✔ || | 15 || age || trivial || Done ✔ || | 16 || ae || trivial || Done ✔ || | 17 || alc || trivial || Done ✔ || | 18 || amdsmb || medium || In progress || | 19 || bfe || trivial || Done ✔ || | 20 || bge || trivial || Done ✔ || | 21 || ce || medium || Done ✔ || | 22 || dpt || medium || Done ✔ || | 23 || dc || trivial || Done ✔ || | 24 || ciss || trivial || Done ✔ || | 25 || ccp || trivial || Done ✔ || | 26 || cp || medium || Done ✔ || | 27 || cas || trivial || In progress || | 28 || ena || trivial || Done ✔ || | 29 || cy || medium || In progress || | 30 || esp || medium || Done ✔ || | 31 || bktr || hard || Done ✔ || | 32 || em || trivial || Done ✔ || | 33 || igb || trivial || Done ✔ || | 34 || cxgb || trivial || In progress || | 35 || fxp || trivial || Done ✔ || | 36 || gem || trivial || In progress || | 37 || glxsb || medium || Done ✔ || | 38 || grackle_hb || medium || Done ✔ || | 39 || hme || medium || Done ✔ || | 40 || hptio || hard || In progress || | 41 || arcmsr || hard || Done ✔ || | 42 || hifn || trivial || Done ✔ || | 43 || bt || trivial || Done ✔ || | 44 || snd_emu10k1 (emu_pci) || medium || Done ✔ || | 45 || emujoy || medium || Done ✔ || | 46 || ebus || medium || Done ✔ || | 47 || cbb || trivial || In progress || | 48 || de || medium || Done ✔ || | 49 || fixup_pci || trivial || Done ✔ || | 50 || imcsmb || medium || Done ✔ || | 51 || isab || medium || In progress || | 52 || ignore || trivial || Done ✔ || | 53 || ix || trivial || In progress || | 54 || ixv || trivial || In progress || | 55 || ixgbe || trivial || Done ✔ || | 56 || ips || medium || Done ✔ || | 57 || iwm || trivial || Done ✔ || | 58 || iir || trivial || Done ✔ || | 59 || et || trivial || Done ✔ || | 60 || ipw || trivial || Done ✔ || | 61 || ismt || medium || Done ✔ || | 62 || iicoc || medium || Done ✔ || | 63 || ipmi || medium || Done ✔ || | 64 || isp || hard || Done ✔ || | 65 || isci || medium || Done ✔ || | 66 || ixl || trivial || Done ✔ || | 67 || ixlv || trivial || Done ✔ || | 68 || iwn || trivial || Done ✔ || | 69 || iwi || medium || Done ✔ || | 70 || ioat || trivial || Done ✔ || | 71 || ida || trivial || Done ✔ || | 72 || le || medium || Done ✔ || | 73 || lio || medium || Done ✔ || | 74 || mpr || trivial || Done ✔ || | 75 || mvs || trivial || Done ✔ || | 76 || my || trivial || Done ✔ || | 77 || mly || trivial || Done ✔ || | 78 || mps || trivial || Done ✔ || | 79 || mskc || medium || Done ✔ || | 80 || mn || medium || Done ✔ || | 81 || mrsas || hard || Done ✔ || | 82 || mxge || medium || Done ✔ || | 83 || mfi || trivial || Done ✔ || | 84 || malo || medium || Done ✔ || | 85 || mwl || medium || Done ✔ || | 86 || nfsmb || medium || Done ✔ || | 87 || nge || medium || Done ✔ || | 88 || ntb_hw_plx || medium || Done ✔ || | 89 || ntb_hw_intel || trivial || Done ✔ || | 90 || nlmsec || trivial || Done ✔ || | 91 || nlmrsa || trivial || Done ✔ || | 92 || nfe || hard || Done ✔ || | 93 || nvme || trivial || Done ✔ || | 94 || ndis || trivial || Won't do || | 95 || ocs || medium || In progress || | 96 || ohci || hard || In progress || | 97 || pcibios || medium || In progress || | 98 || pcib || medium || Done ✔ || | 99 || qla || medium || Done ✔ || | 100 || qla80xx || medium || Done ✔ || | 101 || ql || medium || Done ✔ || | 102 || piix || medium || Done ✔ || | 103 || rp || medium || Done ✔ || | 104 || oce || trivial || Done ✔ || | 105 || re || hard || Done ✔ || | 106 || ppc || medium || Done ✔ || | 107 || pmspcv || ambiguous || Won't do || | 108 || ral || trivial || Done ✔ || | 109 || re || trivial || Done ✔ || | 109 || rl || trivial || Done ✔ || | 110 || pcn || trivial || Done ✔ || | 111 || pstpci || medium || Done ✔ || | 112 || sge || medium || Done ✔ || | 113 || sis || medium || Done ✔ || | 114 || ste || medium || Done ✔ || ===== The Code ===== https://github.com/bsdimp/freebsd/tree/lakhan-pnpinfo https://github.com/bsdimp/freebsd/tree/lakhan-pnpinfo-3 ===== Documentation ===== https://www.freebsd.org/cgi/man.cgi?query=PCI_PNP_INFO&manpath=FreeBSD+12-current https://www.freebsd.org/cgi/man.cgi?query=PCI_DEV&manpath=FreeBSD+12-current https://www.freebsd.org/cgi/man.cgi?query=PCI_SUBDEV&manpath=FreeBSD+12-current https://www.freebsd.org/cgi/man.cgi?query=PCI_VID&manpath=FreeBSD+12-current https://www.freebsd.org/cgi/man.cgi?query=PCI_DEVID&manpath=FreeBSD+12-current https://www.freebsd.org/cgi/man.cgi?query=PCI_SUBVID&manpath=FreeBSD+12-current Note: Documentation links will appear broken until the code is merged into the master branch, please be patient. ===== Phabricator Reviews ===== https://reviews.freebsd.org/D16612 https://reviews.freebsd.org/D16540 https://reviews.freebsd.org/D16363 https://reviews.freebsd.org/D16253 https://reviews.freebsd.org/D16233 https://reviews.freebsd.org/D15999 https://reviews.freebsd.org/D15996 https://reviews.freebsd.org/D15995 https://reviews.freebsd.org/D15979 ===== Useful links ===== https://www.bsdcan.org/2018/schedule/events/934.en.html [[/AutoLoad]] http://bsdimp.blogspot.in/2016/01/details-on-coming-automatic-module.html