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
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_devdrop(pci_dt_t *eth_dev);
22extern void setup_wifi_devdrop(pci_dt_t *wifi_dev);
23
24extern void notify_usb_dev(pci_dt_t *pci_dev);
25extern void force_enable_hpet(pci_dt_t *lpc_dev);
26
27extern pci_dt_t *dram_controller_dev;
28
29void setup_pci_devs(pci_dt_t *pci_dt)
30{
31char *devicepath;
32
33bool do_gfx_devprop = false;
34bool do_skip_n_devprop = false;
35bool do_skip_a_devprop = false;
36bool do_skip_i_devprop = false;
37
38bool do_enable_hpet = false;
39bool do_hda_devprop = false;
40
41pci_dt_t *current = pci_dt;
42
43// GraphicsEnabler
44getBoolForKey(kGraphicsEnabler, &do_gfx_devprop, &bootInfo->chameleonConfig);
45
46// Skip keys
47getBoolForKey(kSkipNvidiaGfx, &do_skip_n_devprop, &bootInfo->chameleonConfig);
48getBoolForKey(kSkipAtiGfx, &do_skip_a_devprop, &bootInfo->chameleonConfig);
49getBoolForKey(kSkipIntelGfx, &do_skip_i_devprop, &bootInfo->chameleonConfig);
50
51//getBoolForKey(kUsbInject, &do_usb_devprop, &bootInfo->chameleonConfig);
52
53// HDAEnable
54getBoolForKey(kHDAEnabler, &do_hda_devprop, &bootInfo->chameleonConfig);
55
56// ForceHPET
57getBoolForKey(kForceHPET, &do_enable_hpet, &bootInfo->chameleonConfig);
58
59while (current)
60{
61devicepath = get_pci_dev_path(current);
62
63switch (current->class_id)
64{
65case PCI_CLASS_BRIDGE_HOST:
66DBG("Setup BRIDGE_HOST \n");
67if (current->dev.addr == PCIADDR(0, 0, 0))
68{
69dram_controller_dev = current;
70}
71break; // PCI_CLASS_BRIDGE_HOST
72
73case PCI_CLASS_NETWORK_ETHERNET:
74DBG("Setup ETHERNET %s enabled\n", do_eth_devprop? "is":"is not");
75verbose("[ ETHERNET DEVICE INFO ]\n");
76setup_eth_devdrop(current);
77verbose("\n");
78break; // PCI_CLASS_NETWORK_ETHERNET
79
80case PCI_CLASS_NETWORK_OTHER:
81DBG("Setup WIRELESS %s enabled\n", do_wifi_devprop? "is":"is not");
82verbose("[ WIRELESS DEVICE INFO ]\n");
83setup_wifi_devdrop(current);
84verbose("\n");
85break; // PCI_CLASS_NETWORK_OTHER
86
87case PCI_CLASS_DISPLAY_VGA:
88DBG("GraphicsEnabler %s enabled\n", do_gfx_devprop? "is":"is not");
89if (do_gfx_devprop)
90{
91switch (current->vendor_id)
92{
93case PCI_VENDOR_ID_ATI:
94if ( do_skip_a_devprop )
95{
96verbose("Skip ATi/AMD gfx device!\n");
97}
98else
99{
100verbose("[ ATi GFX DEVICE INFO ]\n");
101setup_ati_devprop(current);
102verbose("\n");
103}
104break; // PCI_VENDOR_ID_ATI
105
106case PCI_VENDOR_ID_INTEL:
107if ( do_skip_i_devprop )
108{
109verbose("Skip Intel gfx device!\n");
110}
111else
112{
113verbose("[ INTEL GMA DEVICE INFO ]\n");
114setup_gma_devprop(current);
115verbose("\n");
116}
117break; // PCI_VENDOR_ID_INTEL
118
119case PCI_VENDOR_ID_NVIDIA:
120if ( do_skip_n_devprop )
121{
122verbose("Skip Nvidia gfx device!\n");
123}
124else
125{
126verbose("[ NVIDIA GFX DEVICE INFO ]\n");
127setup_nvidia_devprop(current);
128verbose("\n");
129}
130break; // PCI_VENDOR_ID_NVIDIA
131
132default:
133break;
134}
135}
136break; // PCI_CLASS_DISPLAY_VGA
137
138case PCI_CLASS_MULTIMEDIA_AUDIO_DEV:
139DBG("Setup HDEF %s enabled\n", do_hda_devprop ? "is":"is not");
140if (do_hda_devprop)
141{
142verbose("[ AUDIO DEVICE INFO ]\n");
143setup_hda_devprop(current);
144verbose("\n");
145}
146break; // PCI_CLASS_MULTIMEDIA_AUDIO_DEV
147
148case PCI_CLASS_SERIAL_USB:
149DBG("USB\n");
150notify_usb_dev(current);
151//if (do_usb_devprop)
152//{
153//set_usb_devprop(current);
154//}
155break; // PCI_CLASS_SERIAL_USB
156
157case PCI_CLASS_SERIAL_FIREWIRE:
158DBG("FireWire\n");
159verbose("[ FIREWIRE DEVICE INFO ]\n");
160verbose("\tClass code: [%04X]\n\tFireWire device [%04x:%04x]-[%04x:%04x]\n\t%s\n",
161current->class_id,current->vendor_id, current->device_id,
162current->subsys_id.subsys.vendor_id,
163current->subsys_id.subsys.device_id, devicepath);
164//set_fwr_devdrop(current);
165verbose("\n");
166break; // PCI_CLASS_SERIAL_FIREWIRE
167
168case PCI_CLASS_BRIDGE_ISA:
169DBG("Force HPET %s enabled\n", do_enable_hpet ? "is":"is not");
170if (do_enable_hpet)
171{
172verbose("[ HPET ]\n");
173force_enable_hpet(current);
174verbose("\n");
175}
176break; // PCI_CLASS_BRIDGE_ISA
177
178}
179
180execute_hook("PCIDevice", current, NULL, NULL, NULL);
181DBG("setup_pci_devs current device ID = [%04x:%04x]\n", current->vendor_id, current->device_id);
182setup_pci_devs(current->children);
183current = current->next;
184}
185}
186

Archive Download this file

Revision: 2693