Chameleon

Chameleon Svn Source Tree

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

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

Archive Download this file

Revision: HEAD