Chameleon

Chameleon Svn Source Tree

Root/trunk/i386/libsaio/pci_setup.c

1#include "libsaio.h"
2#include "boot.h"
3#include "bootstruct.h"
4#include "pci.h"
5#include "gma.h"
6#include "nvidia.h"
7#include "modules.h"
8
9
10extern bool setup_ati_devprop(pci_dt_t *ati_dev);
11extern void set_eth_builtin(pci_dt_t *eth_dev);
12extern void notify_usb_dev(pci_dt_t *pci_dev);
13extern void force_enable_hpet(pci_dt_t *lpc_dev);
14
15extern pci_dt_t *dram_controller_dev;
16
17void setup_pci_devs(pci_dt_t *pci_dt)
18{
19char *devicepath;
20bool doit, do_eth_devprop, do_gfx_devprop, do_enable_hpet;
21pci_dt_t *current = pci_dt;
22
23do_eth_devprop = do_gfx_devprop = do_enable_hpet = false;
24
25getBoolForKey(kEthernetBuiltIn, &do_eth_devprop, &bootInfo->chameleonConfig);
26getBoolForKey(kGraphicsEnabler, &do_gfx_devprop, &bootInfo->chameleonConfig);
27getBoolForKey(kForceHPET, &do_enable_hpet, &bootInfo->chameleonConfig);
28
29while (current)
30{
31devicepath = get_pci_dev_path(current);
32
33switch (current->class_id)
34{
35case PCI_CLASS_BRIDGE_HOST:
36if (current->dev.addr == PCIADDR(0, 0, 0))
37{
38dram_controller_dev = current;
39}
40break;
41
42case PCI_CLASS_NETWORK_ETHERNET:
43if (do_eth_devprop)
44set_eth_builtin(current);
45break;
46
47case PCI_CLASS_DISPLAY_VGA:
48if (do_gfx_devprop)
49{
50switch (current->vendor_id)
51{
52case PCI_VENDOR_ID_ATI:
53if (getBoolForKey(kSkipAtiGfx, &doit, &bootInfo->chameleonConfig) && doit)
54{
55verbose("Skip ATi/AMD gfx device!\n");
56}
57else
58{
59setup_ati_devprop(current);
60}
61break;
62
63case PCI_VENDOR_ID_INTEL:
64if (getBoolForKey(kSkipIntelGfx, &doit, &bootInfo->chameleonConfig) && doit)
65{
66verbose("Skip Intel gfx device!\n");
67}
68else
69{
70setup_gma_devprop(current);
71}
72break;
73
74case PCI_VENDOR_ID_NVIDIA:
75if (getBoolForKey(kSkipNvidiaGfx, &doit, &bootInfo->chameleonConfig) && doit)
76{
77verbose("Skip Nvidia gfx device!\n");
78}
79else
80{
81setup_nvidia_devprop(current);
82}
83break;
84}
85}
86break;
87
88case PCI_CLASS_SERIAL_USB:
89notify_usb_dev(current);
90break;
91
92case PCI_CLASS_BRIDGE_ISA:
93if (do_enable_hpet)
94force_enable_hpet(current);
95break;
96}
97
98execute_hook("PCIDevice", current, NULL, NULL, NULL);
99
100setup_pci_devs(current->children);
101current = current->next;
102}
103}
104

Archive Download this file

Revision: 2262