aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/mach-default
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/mach-default')
-rw-r--r--arch/i386/mach-default/Makefile5
-rw-r--r--arch/i386/mach-default/setup.c106
-rw-r--r--arch/i386/mach-default/topology.c98
3 files changed, 209 insertions, 0 deletions
diff --git a/arch/i386/mach-default/Makefile b/arch/i386/mach-default/Makefile
new file mode 100644
index 000000000000..e95bb0237921
--- /dev/null
+++ b/arch/i386/mach-default/Makefile
@@ -0,0 +1,5 @@
1#
2# Makefile for the linux kernel.
3#
4
5obj-y := setup.o topology.o
diff --git a/arch/i386/mach-default/setup.c b/arch/i386/mach-default/setup.c
new file mode 100644
index 000000000000..0aa08eaa8932
--- /dev/null
+++ b/arch/i386/mach-default/setup.c
@@ -0,0 +1,106 @@
1/*
2 * Machine specific setup for generic
3 */
4
5#include <linux/config.h>
6#include <linux/smp.h>
7#include <linux/init.h>
8#include <linux/irq.h>
9#include <linux/interrupt.h>
10#include <asm/acpi.h>
11#include <asm/arch_hooks.h>
12
13/**
14 * pre_intr_init_hook - initialisation prior to setting up interrupt vectors
15 *
16 * Description:
17 * Perform any necessary interrupt initialisation prior to setting up
18 * the "ordinary" interrupt call gates. For legacy reasons, the ISA
19 * interrupts should be initialised here if the machine emulates a PC
20 * in any way.
21 **/
22void __init pre_intr_init_hook(void)
23{
24 init_ISA_irqs();
25}
26
27/*
28 * IRQ2 is cascade interrupt to second interrupt controller
29 */
30static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
31
32/**
33 * intr_init_hook - post gate setup interrupt initialisation
34 *
35 * Description:
36 * Fill in any interrupts that may have been left out by the general
37 * init_IRQ() routine. interrupts having to do with the machine rather
38 * than the devices on the I/O bus (like APIC interrupts in intel MP
39 * systems) are started here.
40 **/
41void __init intr_init_hook(void)
42{
43#ifdef CONFIG_X86_LOCAL_APIC
44 apic_intr_init();
45#endif
46
47 if (!acpi_ioapic)
48 setup_irq(2, &irq2);
49}
50
51/**
52 * pre_setup_arch_hook - hook called prior to any setup_arch() execution
53 *
54 * Description:
55 * generally used to activate any machine specific identification
56 * routines that may be needed before setup_arch() runs. On VISWS
57 * this is used to get the board revision and type.
58 **/
59void __init pre_setup_arch_hook(void)
60{
61}
62
63/**
64 * trap_init_hook - initialise system specific traps
65 *
66 * Description:
67 * Called as the final act of trap_init(). Used in VISWS to initialise
68 * the various board specific APIC traps.
69 **/
70void __init trap_init_hook(void)
71{
72}
73
74static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL};
75
76/**
77 * time_init_hook - do any specific initialisations for the system timer.
78 *
79 * Description:
80 * Must plug the system timer interrupt source at HZ into the IRQ listed
81 * in irq_vectors.h:TIMER_IRQ
82 **/
83void __init time_init_hook(void)
84{
85 setup_irq(0, &irq0);
86}
87
88#ifdef CONFIG_MCA
89/**
90 * mca_nmi_hook - hook into MCA specific NMI chain
91 *
92 * Description:
93 * The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources
94 * along the MCA bus. Use this to hook into that chain if you will need
95 * it.
96 **/
97void __init mca_nmi_hook(void)
98{
99 /* If I recall correctly, there's a whole bunch of other things that
100 * we can do to check for NMI problems, but that's all I know about
101 * at the moment.
102 */
103
104 printk("NMI generated from unknown source!\n");
105}
106#endif
diff --git a/arch/i386/mach-default/topology.c b/arch/i386/mach-default/topology.c
new file mode 100644
index 000000000000..5b3e8817dae8
--- /dev/null
+++ b/arch/i386/mach-default/topology.c
@@ -0,0 +1,98 @@
1/*
2 * arch/i386/mach-generic/topology.c - Populate driverfs with topology information
3 *
4 * Written by: Matthew Dobson, IBM Corporation
5 * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
6 *
7 * Copyright (C) 2002, IBM Corp.
8 *
9 * All rights reserved.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
19 * NON INFRINGEMENT. See the GNU General Public License for more
20 * details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 *
26 * Send feedback to <colpatch@us.ibm.com>
27 */
28#include <linux/init.h>
29#include <linux/smp.h>
30#include <linux/nodemask.h>
31#include <asm/cpu.h>
32
33static struct i386_cpu cpu_devices[NR_CPUS];
34
35int arch_register_cpu(int num){
36 struct node *parent = NULL;
37
38#ifdef CONFIG_NUMA
39 int node = cpu_to_node(num);
40 if (node_online(node))
41 parent = &node_devices[node].node;
42#endif /* CONFIG_NUMA */
43
44 return register_cpu(&cpu_devices[num].cpu, num, parent);
45}
46
47#ifdef CONFIG_HOTPLUG_CPU
48
49void arch_unregister_cpu(int num) {
50 struct node *parent = NULL;
51
52#ifdef CONFIG_NUMA
53 int node = cpu_to_node(num);
54 if (node_online(node))
55 parent = &node_devices[node].node;
56#endif /* CONFIG_NUMA */
57
58 return unregister_cpu(&cpu_devices[num].cpu, parent);
59}
60EXPORT_SYMBOL(arch_register_cpu);
61EXPORT_SYMBOL(arch_unregister_cpu);
62#endif /*CONFIG_HOTPLUG_CPU*/
63
64
65
66#ifdef CONFIG_NUMA
67#include <linux/mmzone.h>
68#include <asm/node.h>
69
70struct i386_node node_devices[MAX_NUMNODES];
71
72static int __init topology_init(void)
73{
74 int i;
75
76 for (i = 0; i < MAX_NUMNODES; i++) {
77 if (node_online(i))
78 arch_register_node(i);
79 }
80 for (i = 0; i < NR_CPUS; i++)
81 if (cpu_possible(i)) arch_register_cpu(i);
82 return 0;
83}
84
85#else /* !CONFIG_NUMA */
86
87static int __init topology_init(void)
88{
89 int i;
90
91 for (i = 0; i < NR_CPUS; i++)
92 if (cpu_possible(i)) arch_register_cpu(i);
93 return 0;
94}
95
96#endif /* CONFIG_NUMA */
97
98subsys_initcall(topology_init);