Chameleon

Chameleon Svn Source Tree

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

Archive Download this file

Revision: HEAD