Convert PCI Drivers Attachments to be Table Driven
Student: Lakhan Kamireddy (<lakhanshiva@gmail.com>)
Mentors:
Warner Losh (<imp@freebsd.org>)
Chuck Tuffli (<chuck@freebsd.org>)
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
http://bsdimp.blogspot.in/2016/01/details-on-coming-automatic-module.html