Chameleon

Chameleon Svn Source Tree

Root/branches/slice/trunkM/i386/libsaio/pci_setup.c

1#include "libsaio.h"
2#include "boot.h"
3#include "bootstruct.h"
4#include "pci.h"
5#include "gma.h"
6#include "nvidia.h"
7#include "modules.h"
8
9#define DEBUG_PCI 1
10
11#if DEBUG_PCI
12#define DBG(x...) msglog(x)
13#else
14#define DBG(x...)
15#endif
16
17extern bool setup_ati_devprop(pci_dt_t *ati_dev);
18extern void set_eth_builtin(pci_dt_t *eth_dev);
19extern void notify_usb_dev(pci_dt_t *pci_dev);
20extern void force_enable_hpet(pci_dt_t *lpc_dev);
21
22extern pci_dt_t *dram_controller_dev;
23
24void setup_pci_devs(pci_dt_t *pci_dt)
25{
26char *devicepath;
27bool do_eth_devprop, do_gfx_devprop, do_enable_hpet;
28pci_dt_t *current = pci_dt;
29
30do_eth_devprop = do_gfx_devprop = do_enable_hpet = false;
31
32getBoolForKey(kEthernetBuiltIn, &do_eth_devprop, &bootInfo->chameleonConfig);
33getBoolForKey(kGraphicsEnabler, &do_gfx_devprop, &bootInfo->chameleonConfig);
34getBoolForKey(kForceHPET, &do_enable_hpet, &bootInfo->chameleonConfig);
35
36while (current)
37{
38devicepath = get_pci_dev_path(current);
39
40switch (current->class_id)
41{
42case PCI_CLASS_BRIDGE_HOST:
43DBG("Setup BRIDGE_HOST \n");
44if (current->dev.addr == PCIADDR(0, 0, 0))
45dram_controller_dev = current;
46break;
47
48case PCI_CLASS_NETWORK_ETHERNET:
49DBG("Setup ETHERNET %s enabled\n", do_eth_devprop?"":"no");
50if (do_eth_devprop)
51set_eth_builtin(current);
52break;
53
54case PCI_CLASS_DISPLAY_VGA:
55DBG("GraphicsEnabler %s enabled\n", do_gfx_devprop?"":"no");
56if (do_gfx_devprop)
57switch (current->vendor_id)
58{
59case PCI_VENDOR_ID_ATI:
60setup_ati_devprop(current);
61break;
62
63case PCI_VENDOR_ID_INTEL:
64setup_gma_devprop(current);
65break;
66
67case PCI_VENDOR_ID_NVIDIA:
68setup_nvidia_devprop(current);
69break;
70}
71break;
72
73case PCI_CLASS_SERIAL_USB:
74DBG("USB fix \n");
75notify_usb_dev(current);
76break;
77
78case PCI_CLASS_BRIDGE_ISA:
79DBG("Force HPET %s enabled\n", do_enable_hpet?"":"no");
80if (do_enable_hpet)
81force_enable_hpet(current);
82break;
83}
84
85execute_hook("PCIDevice", current, NULL, NULL, NULL);
86DBG("setup_pci_devs current devID=%08x\n", current->device_id);
87setup_pci_devs(current->children);
88DBG("setup_pci_devs children devID=%08x\n", current->device_id);
89current = current->next;
90}
91}
92

Archive Download this file

Revision: 1194