Chameleon

Chameleon Svn Source Tree

Root/branches/Chimera/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 do_eth_devprop, do_gfx_devprop, do_enable_hpet, do_hda_devprop, do_igp_devprop;
25pci_dt_t *current = pci_dt;
26
27do_eth_devprop = do_gfx_devprop = do_igp_devprop = do_hda_devprop = do_enable_hpet = false;
28
29getBoolForKey(kEthernetBuiltIn, &do_eth_devprop, &bootInfo->chameleonConfig);
30getBoolForKey(kGraphicsEnabler, &do_gfx_devprop, &bootInfo->chameleonConfig);
31 getBoolForKey(kIGPEnabler, &do_igp_devprop, &bootInfo->chameleonConfig); //MacMan Chimera IGP enabler
32getBoolForKey(kHDAEnabler, &do_hda_devprop, &bootInfo->chameleonConfig);
33getBoolForKey(kForceHPET, &do_enable_hpet, &bootInfo->chameleonConfig);
34
35while (current)
36{
37devicepath = get_pci_dev_path(current);
38
39switch (current->class_id)
40{
41case PCI_CLASS_BRIDGE_HOST:
42if (current->dev.addr == PCIADDR(0, 0, 0))
43{
44dram_controller_dev = current;
45}
46break;
47
48case PCI_CLASS_NETWORK_ETHERNET:
49if (do_eth_devprop)
50{
51set_eth_builtin(current);
52}
53break;
54
55case PCI_CLASS_DISPLAY_VGA:
56 switch (current->vendor_id)
57{
58case PCI_VENDOR_ID_ATI:
59 if (do_gfx_devprop){
60 setup_ati_devprop(current);
61 }
62break;
63
64case PCI_VENDOR_ID_INTEL:
65 if (do_gfx_devprop || do_igp_devprop){
66 setup_gma_devprop(current);
67 }
68break;
69
70case PCI_VENDOR_ID_NVIDIA:
71 if (do_gfx_devprop){
72 setup_nvidia_devprop(current);
73 }
74break;
75}
76 break;
77
78case PCI_CLASS_MULTIMEDIA_AUDIO_DEV:
79if (do_hda_devprop)
80{
81setup_hda_devprop(current);
82}
83break;
84
85case PCI_CLASS_SERIAL_USB:
86notify_usb_dev(current);
87break;
88
89case PCI_CLASS_BRIDGE_ISA:
90if (do_enable_hpet)
91{
92force_enable_hpet(current);
93}
94break;
95}
96
97execute_hook("PCIDevice", current, NULL, NULL, NULL);
98
99setup_pci_devs(current->children);
100current = current->next;
101}
102}
103

Archive Download this file

Revision: 2403