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

Archive Download this file

Revision: 2685