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

Archive Download this file

Revision: 2587