source: mainline/generic/src/cpu/cpu.c@ 7257021e

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 7257021e was b45c443, checked in by Josef Cejka <malyzelenyhnus@…>, 19 years ago

Kernel doxygen comments updated.

  • Property mode set to 100644
File size: 3.0 KB
Line 
1 /*
2 * Copyright (C) 2001-2004 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @defgroup cpu CPU
30 * @ingroup kernel
31 * @{
32 * @}
33 */
34
35 /** @addtogroup genericcpu generic
36 * @ingroup cpu
37 * @{
38 */
39
40/**
41 * @file
42 * @brief CPU subsystem initialization and listing.
43 */
44
45#include <cpu.h>
46#include <arch.h>
47#include <arch/cpu.h>
48#include <mm/slab.h>
49#include <mm/page.h>
50#include <mm/frame.h>
51#include <arch/types.h>
52#include <config.h>
53#include <panic.h>
54#include <typedefs.h>
55#include <memstr.h>
56#include <adt/list.h>
57#include <print.h>
58
59cpu_t *cpus;
60
61/** Initialize CPUs
62 *
63 * Initialize kernel CPUs support.
64 *
65 */
66void cpu_init(void) {
67 int i, j;
68
69 #ifdef CONFIG_SMP
70 if (config.cpu_active == 1) {
71 #endif /* CONFIG_SMP */
72 cpus = (cpu_t *) malloc(sizeof(cpu_t) * config.cpu_count,
73 FRAME_ATOMIC);
74 if (!cpus)
75 panic("malloc/cpus");
76
77 /* initialize everything */
78 memsetb((__address) cpus, sizeof(cpu_t) * config.cpu_count, 0);
79
80 for (i=0; i < config.cpu_count; i++) {
81 cpus[i].stack = (__u8 *) PA2KA(PFN2ADDR(frame_alloc(STACK_FRAMES, FRAME_KA | FRAME_PANIC)));
82
83 cpus[i].id = i;
84
85 spinlock_initialize(&cpus[i].lock, "cpu_t.lock");
86
87 for (j = 0; j < RQ_COUNT; j++) {
88 spinlock_initialize(&cpus[i].rq[j].lock, "rq_t.lock");
89 list_initialize(&cpus[i].rq[j].rq_head);
90 }
91 }
92
93 #ifdef CONFIG_SMP
94 }
95 #endif /* CONFIG_SMP */
96
97 CPU = &cpus[config.cpu_active-1];
98
99 CPU->active = 1;
100 CPU->tlb_active = 1;
101
102 cpu_identify();
103 cpu_arch_init();
104}
105
106/** List all processors. */
107void cpu_list(void)
108{
109 int i;
110
111 for (i = 0; i < config.cpu_count; i++) {
112 if (cpus[i].active)
113 cpu_print_report(&cpus[i]);
114 else
115 printf("cpu%d: not active\n", i);
116 }
117}
118
119 /** @}
120 */
121
Note: See TracBrowser for help on using the repository browser.