Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Enoch/i386/libsaio/pci_setup.c

1#include "libsaio.h"
2#include "boot.h"
3#include "bootstruct.h"
4#include "pci.h"
5#include "modules.h"
6
7extern bool setup_ati_devprop(pci_dt_t *ati_dev);
8extern bool setup_nvidia_devprop(pci_dt_t *nvda_dev);
9extern bool setup_gma_devprop(pci_dt_t *gma_dev);
10extern bool setup_hda_devprop(pci_dt_t *hda_dev);
11extern void setup_eth_builtin(pci_dt_t *eth_dev);
12extern void setup_wifi_airport(pci_dt_t *wifi_dev);
13extern bool set_usb_devprop(pci_dt_t *usb_dev);
14extern void notify_usb_dev(pci_dt_t *pci_dev);
15extern void force_enable_hpet(pci_dt_t *lpc_dev);
16extern pci_dt_t *dram_controller_dev;
17
18void setup_pci_devs(pci_dt_t *pci_dt)
19{
20char *devicepath;
21bool doit, do_eth_devprop, do_wifi_devprop, do_usb_devprop, do_gfx_devprop, do_enable_hpet, do_hda_devprop = false;
22pci_dt_t *current = pci_dt;
23
24getBoolForKey(kEthernetBuiltIn, &do_eth_devprop, &bootInfo->chameleonConfig);
25getBoolForKey(kEnableWifi, &do_wifi_devprop, &bootInfo->chameleonConfig);
26getBoolForKey(kGraphicsEnabler, &do_gfx_devprop, &bootInfo->chameleonConfig);
27getBoolForKey(kUsbInject, &do_usb_devprop, &bootInfo->chameleonConfig);
28getBoolForKey(kHDAEnabler, &do_hda_devprop, &bootInfo->chameleonConfig);
29getBoolForKey(kForceHPET, &do_enable_hpet, &bootInfo->chameleonConfig);
30
31while (current)
32{
33devicepath = get_pci_dev_path(current);
34
35switch (current->class_id)
36{
37case PCI_CLASS_BRIDGE_HOST:
38//DBG("Setup BRIDGE_HOST \n");
39if (current->dev.addr == PCIADDR(0, 0, 0))
40{
41dram_controller_dev = current;
42}
43break;
44
45case PCI_CLASS_NETWORK_ETHERNET:
46//DBG("Setup ETHERNET %s enabled\n", do_eth_devprop?"":"no");
47if (do_eth_devprop)
48{
49setup_eth_builtin(current);
50}
51break;
52
53case PCI_CLASS_NETWORK_OTHER:
54//DBG("Setup WIRELESS %s enabled\n", do_wifi_devprop?"":"no");
55if (do_wifi_devprop)
56{
57setup_wifi_airport(current);
58}
59break;
60
61case PCI_CLASS_DISPLAY_VGA:
62//DBG("GraphicsEnabler %s enabled\n", do_gfx_devprop?"":"no");
63if (do_gfx_devprop)
64{
65switch (current->vendor_id)
66{
67case PCI_VENDOR_ID_ATI:
68if (getBoolForKey(kSkipAtiGfx, &doit, &bootInfo->chameleonConfig) && doit)
69{
70verbose("Skip ATi/AMD gfx device!\n");
71}
72else
73{
74setup_ati_devprop(current);
75}
76break;
77
78case PCI_VENDOR_ID_INTEL:
79if (getBoolForKey(kSkipIntelGfx, &doit, &bootInfo->chameleonConfig) && doit)
80{
81verbose("Skip Intel gfx device!\n");
82}
83else
84{
85setup_gma_devprop(current);
86}
87break;
88
89case PCI_VENDOR_ID_NVIDIA:
90if (getBoolForKey(kSkipNvidiaGfx, &doit, &bootInfo->chameleonConfig) && doit)
91{
92verbose("Skip Nvidia gfx device!\n");
93}
94else
95{
96setup_nvidia_devprop(current);
97}
98break;
99}
100}
101break;
102
103case PCI_CLASS_MULTIMEDIA_AUDIO_DEV:
104//DBG("Setup HDEF %s enabled\n", do_hda_devprop?"":"no");
105if (do_hda_devprop)
106{
107setup_hda_devprop(current);
108}
109break;
110
111case PCI_CLASS_SERIAL_USB:
112//DBG("USB fix \n");
113notify_usb_dev(current);
114 /*if (do_usb_devprop)
115{
116set_usb_devprop(current);
117}*/
118break;
119
120case PCI_CLASS_BRIDGE_ISA:
121//DBG("Force HPET %s enabled\n", do_enable_hpet?"":"no");
122if (do_enable_hpet)
123{
124force_enable_hpet(current);
125}
126break;
127}
128
129execute_hook("PCIDevice", current, NULL, NULL, NULL);
130//DBG("setup_pci_devs current devID=%08x\n", current->device_id);
131setup_pci_devs(current->children);
132current = current->next;
133}
134}
135

Archive Download this file

Revision: 2473