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 set_eth_builtin(pci_dt_t *eth_dev);
22extern void notify_usb_dev(pci_dt_t *pci_dev);
23extern void force_enable_hpet(pci_dt_t *lpc_dev);
24
25extern pci_dt_t *dram_controller_dev;
26
27void setup_pci_devs(pci_dt_t *pci_dt)
28{
29char *devicepath;
30bool doit, do_eth_devprop, do_gfx_devprop, do_enable_hpet, do_hda_devprop;
31pci_dt_t *current = pci_dt;
32
33do_eth_devprop = do_gfx_devprop = do_enable_hpet = do_hda_devprop = false;
34
35getBoolForKey(kEthernetBuiltIn, &do_eth_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{
58set_eth_builtin(current);
59}
60break; // PCI_CLASS_NETWORK_ETHERNET
61
62case PCI_CLASS_DISPLAY_VGA:
63DBG("GraphicsEnabler %s enabled\n", do_gfx_devprop? "is":"is not");
64if (do_gfx_devprop)
65{
66switch (current->vendor_id)
67{
68case PCI_VENDOR_ID_ATI:
69if (getBoolForKey(kSkipAtiGfx, &doit, &bootInfo->chameleonConfig) && doit)
70{
71verbose("Skip ATi/AMD gfx device!\n");
72}
73else
74{
75setup_ati_devprop(current);
76}
77break; // PCI_VENDOR_ID_ATI
78
79case PCI_VENDOR_ID_INTEL:
80if (getBoolForKey(kSkipIntelGfx, &doit, &bootInfo->chameleonConfig) && doit)
81{
82verbose("Skip Intel gfx device!\n");
83}
84else
85{
86setup_gma_devprop(current);
87}
88break; // PCI_VENDOR_ID_INTEL
89
90case PCI_VENDOR_ID_NVIDIA:
91if (getBoolForKey(kSkipNvidiaGfx, &doit, &bootInfo->chameleonConfig) && doit)
92{
93verbose("Skip Nvidia gfx device!\n");
94}
95else
96{
97setup_nvidia_devprop(current);
98}
99break; // PCI_VENDOR_ID_NVIDIA
100
101default:
102break;
103}
104}
105break; // PCI_CLASS_DISPLAY_VGA
106
107case PCI_CLASS_MULTIMEDIA_AUDIO_DEV:
108DBG("Setup HDEF %s enabled\n", do_hda_devprop? "is":"is not");
109if (do_hda_devprop)
110{
111setup_hda_devprop(current);
112}
113break; // PCI_CLASS_MULTIMEDIA_AUDIO_DEV
114
115case PCI_CLASS_SERIAL_USB:
116DBG("USB\n");
117notify_usb_dev(current);
118break; // PCI_CLASS_SERIAL_USB
119
120case PCI_CLASS_BRIDGE_ISA:
121DBG("Force HPET %s enabled\n", do_enable_hpet? "is":"is not");
122if (do_enable_hpet)
123{
124force_enable_hpet(current);
125}
126break; // PCI_CLASS_BRIDGE_ISA
127
128}
129
130execute_hook("PCIDevice", current, NULL, NULL, NULL);
131DBG("setup_pci_devs current device ID = [%04x:%04x]\n", current->vendor_id, current->device_id);
132setup_pci_devs(current->children);
133current = current->next;
134}
135}
136

Archive Download this file

Revision: 2677