Patches b03c1b through 3f00b5
[barrelfish] / usr / skb / programs / device_db.pl
1 :- local struct(pci_driver(
2     binary,             % Name of driver binary
3     supported_cards,    % List of cards this binary supports
4     core_hint,          % Preferred core to start the driver
5     interrupt_load,     % Expected Interrupt load
6     platforms           % List of architectures the driver runs on
7 )).
8
9 :- local struct(cpu_driver(
10     binary,             % Name of driver binary
11     platforms           % List of architectures the driver runs on
12 )).
13
14 :- local struct(bus_driver(
15     binary,             % Name of driver binary
16     core_hint,          % Preferred core to start the driver
17     platforms           % List of architectures the driver runs on
18 )).
19
20 :- local struct(pci_card(
21     vendor,             % PCI Vendor ID
22     device,             % PCI Device ID
23     function,
24     subvendor,
25     subdevice
26 )).
27
28
29 %
30 % Driver entries
31 %
32
33 pci_driver{
34     binary: "e1000n",
35     supported_cards:
36     [ pci_card{ vendor: 16'8086, device: 16'107d, function: _, subvendor: _, subdevice: _ },
37       pci_card{ vendor: 16'8086, device: 16'1096, function: _, subvendor: _, subdevice: _ },
38       pci_card{ vendor: 16'8086, device: 16'100e, function: _, subvendor: _, subdevice: _ },
39       pci_card{ vendor: 16'8086, device: 16'10d3, function: _, subvendor: _, subdevice: _ },
40       pci_card{ vendor: 16'8086, device: 16'10c9, function: _, subvendor: _, subdevice: _ },
41       pci_card{ vendor: 16'8086, device: 16'10a7, function: _, subvendor: _, subdevice: _ } ],
42     core_hint: 0,
43     interrupt_load: 0.75,
44     platforms: ['x86_64', 'x86_32']
45 }.
46
47 pci_driver{
48     binary: "rtl8029",
49     supported_cards:
50     [ pci_card{ vendor: 16'10ec, device: 16'8029, function: _, subvendor: _, subdevice: _ } ],
51     core_hint: 0,
52     interrupt_load: 0.5,
53     platforms: ['x86_64', 'x86_32']
54 }.
55
56 pci_driver{
57     binary: "ahcid",
58     supported_cards:
59     [ pci_card{ vendor: 16'8086, device: 16'2922, function: _, subvendor: _, subdevice: _ },
60       pci_card{ vendor: 16'8086, device: 16'3a22, function: _, subvendor: _, subdevice: _ },
61       pci_card{ vendor: 16'1002, device: 16'4390, function: _, subvendor: _, subdevice: _ } ],
62     core_hint: 0,
63     interrupt_load: 0.5,
64     platforms: ['x86_64', 'x86_32']
65 }.
66
67 cpu_driver{
68     binary: "cpu",
69     platforms: ['x86_64', 'x86_32']
70 }.
71
72 bus_driver{
73     binary: "ioapic",
74     core_hint: 0,
75     platforms: ['x86_64', 'x86_32']
76 }.
77
78 pci_driver{
79     binary: "xeon_phi",
80     supported_cards:
81     [ pci_card{ vendor: 16'8086, device: 16'225e, function: _, subvendor: _, subdevice: _ } ],
82     core_hint: 0,
83     interrupt_load: 0.5,
84     platforms: ['x86_64']
85 }.
86
87 %
88 % Driver selection logic
89 %
90
91 find_pci_driver(PciInfo, DriverInfo) :-
92     PciInfo = pci_card{vendor:VId, device: DId, function: Fun, subvendor: SVId,
93                         subdevice: SDId},
94     pci_driver{binary: Binary, supported_cards: Cards, core_hint: Core, 
95                interrupt_load: IRQLoad, platforms: Platforms},
96     member(PciInfo, Cards), % TODO: Find best match or rely on order how facts are added
97     !,
98     % TODO: Core Selection based on PCI Info, core_hint, irqload, platforms, 
99     %  (+ may need to pass bus number here as well?)
100     DriverInfo = driver(Core, Binary).
101
102 find_cpu_driver(ApicId, DriverInfo) :-
103     cpu_driver{binary: Binary, platforms: Platforms},
104     % TODO: In future use ApicId to select cpu driver that has listed the correct 
105     % platform
106     DriverInfo = driver(Binary).
107
108 find_ioapic_driver(IOApicId, DriverInfo) :-
109     bus_driver{binary: Binary, core_hint: Core, platforms: Platforms},
110     % TODO: Select appropriate Core based on core_hint, platform, ioapic id
111     DriverInfo = driver(Core, Binary).
112