Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
sh
kernel
cpu
proc.c
Go to the documentation of this file.
1
#include <
linux/seq_file.h
>
2
#include <linux/kernel.h>
3
#include <linux/module.h>
4
#include <asm/machvec.h>
5
#include <asm/processor.h>
6
7
static
const
char
*cpu_name[] = {
8
[
CPU_SH7201
] =
"SH7201"
,
9
[
CPU_SH7203
] =
"SH7203"
, [
CPU_SH7263
] =
"SH7263"
,
10
[
CPU_SH7264
] =
"SH7264"
, [
CPU_SH7269
] =
"SH7269"
,
11
[
CPU_SH7206
] =
"SH7206"
, [
CPU_SH7619
] =
"SH7619"
,
12
[
CPU_SH7705
] =
"SH7705"
, [
CPU_SH7706
] =
"SH7706"
,
13
[
CPU_SH7707
] =
"SH7707"
, [
CPU_SH7708
] =
"SH7708"
,
14
[
CPU_SH7709
] =
"SH7709"
, [
CPU_SH7710
] =
"SH7710"
,
15
[
CPU_SH7712
] =
"SH7712"
, [
CPU_SH7720
] =
"SH7720"
,
16
[
CPU_SH7721
] =
"SH7721"
, [
CPU_SH7729
] =
"SH7729"
,
17
[
CPU_SH7750
] =
"SH7750"
, [
CPU_SH7750S
] =
"SH7750S"
,
18
[
CPU_SH7750R
] =
"SH7750R"
, [
CPU_SH7751
] =
"SH7751"
,
19
[
CPU_SH7751R
] =
"SH7751R"
, [
CPU_SH7760
] =
"SH7760"
,
20
[
CPU_SH4_202
] =
"SH4-202"
, [
CPU_SH4_501
] =
"SH4-501"
,
21
[
CPU_SH7763
] =
"SH7763"
, [
CPU_SH7770
] =
"SH7770"
,
22
[
CPU_SH7780
] =
"SH7780"
, [
CPU_SH7781
] =
"SH7781"
,
23
[
CPU_SH7343
] =
"SH7343"
, [
CPU_SH7785
] =
"SH7785"
,
24
[
CPU_SH7786
] =
"SH7786"
, [
CPU_SH7757
] =
"SH7757"
,
25
[
CPU_SH7722
] =
"SH7722"
, [
CPU_SHX3
] =
"SH-X3"
,
26
[
CPU_SH5_101
] =
"SH5-101"
, [
CPU_SH5_103
] =
"SH5-103"
,
27
[
CPU_MXG
] =
"MX-G"
, [
CPU_SH7723
] =
"SH7723"
,
28
[
CPU_SH7366
] =
"SH7366"
, [
CPU_SH7724
] =
"SH7724"
,
29
[
CPU_SH7372
] =
"SH7372"
, [
CPU_SH7734
] =
"SH7734"
,
30
[
CPU_SH_NONE
] =
"Unknown"
31
};
32
33
const
char
*
get_cpu_subtype
(
struct
sh_cpuinfo
*
c
)
34
{
35
return
cpu_name[c->
type
];
36
}
37
EXPORT_SYMBOL
(
get_cpu_subtype
);
38
39
#ifdef CONFIG_PROC_FS
40
/* Symbolic CPU flags, keep in sync with asm/cpu-features.h */
41
static
const
char
*cpu_flags[] = {
42
"none"
,
"fpu"
,
"p2flush"
,
"mmuassoc"
,
"dsp"
,
"perfctr"
,
43
"ptea"
,
"llsc"
,
"l2"
,
"op32"
,
"pteaex"
,
NULL
44
};
45
46
static
void
show_cpuflags(
struct
seq_file
*
m
,
struct
sh_cpuinfo
*
c
)
47
{
48
unsigned
long
i
;
49
50
seq_printf
(m,
"cpu flags\t:"
);
51
52
if
(!c->
flags
) {
53
seq_printf
(m,
" %s\n"
, cpu_flags[0]);
54
return
;
55
}
56
57
for
(i = 0; cpu_flags[
i
]; i++)
58
if
((c->
flags
& (1 << i)))
59
seq_printf
(m,
" %s"
, cpu_flags[i+1]);
60
61
seq_printf
(m,
"\n"
);
62
}
63
64
static
void
show_cacheinfo
(
struct
seq_file
*m,
const
char
*
type
,
65
struct
cache_info
info
)
66
{
67
unsigned
int
cache_size;
68
69
cache_size = info.
ways
* info.
sets
* info.
linesz
;
70
71
seq_printf
(m,
"%s size\t: %2dKiB (%d-way)\n"
,
72
type, cache_size >> 10, info.
ways
);
73
}
74
75
/*
76
* Get CPU information for use by the procfs.
77
*/
78
static
int
show_cpuinfo
(
struct
seq_file
*m,
void
*
v
)
79
{
80
struct
sh_cpuinfo
*c =
v
;
81
unsigned
int
cpu
= c -
cpu_data
;
82
83
if
(!
cpu_online
(cpu))
84
return
0;
85
86
if
(cpu == 0)
87
seq_printf
(m,
"machine\t\t: %s\n"
,
get_system_type
());
88
else
89
seq_printf
(m,
"\n"
);
90
91
seq_printf
(m,
"processor\t: %d\n"
, cpu);
92
seq_printf
(m,
"cpu family\t: %s\n"
, init_utsname()->
machine
);
93
seq_printf
(m,
"cpu type\t: %s\n"
,
get_cpu_subtype
(c));
94
if
(c->
cut_major
== -1)
95
seq_printf
(m,
"cut\t\t: unknown\n"
);
96
else
if
(c->
cut_minor
== -1)
97
seq_printf
(m,
"cut\t\t: %d.x\n"
, c->
cut_major
);
98
else
99
seq_printf
(m,
"cut\t\t: %d.%d\n"
, c->
cut_major
, c->
cut_minor
);
100
101
show_cpuflags(m, c);
102
103
seq_printf
(m,
"cache type\t: "
);
104
105
/*
106
* Check for what type of cache we have, we support both the
107
* unified cache on the SH-2 and SH-3, as well as the harvard
108
* style cache on the SH-4.
109
*/
110
if
(c->
icache
.flags &
SH_CACHE_COMBINED
) {
111
seq_printf
(m,
"unified\n"
);
112
show_cacheinfo
(m,
"cache"
, c->
icache
);
113
}
else
{
114
seq_printf
(m,
"split (harvard)\n"
);
115
show_cacheinfo
(m,
"icache"
, c->
icache
);
116
show_cacheinfo
(m,
"dcache"
, c->
dcache
);
117
}
118
119
/* Optional secondary cache */
120
if
(c->
flags
&
CPU_HAS_L2_CACHE
)
121
show_cacheinfo
(m,
"scache"
, c->
scache
);
122
123
seq_printf
(m,
"address sizes\t: %u bits physical\n"
, c->
phys_bits
);
124
125
seq_printf
(m,
"bogomips\t: %lu.%02lu\n"
,
126
c->
loops_per_jiffy
/(500000/
HZ
),
127
(c->
loops_per_jiffy
/(5000/
HZ
)) % 100);
128
129
return
0;
130
}
131
132
static
void
*
c_start
(
struct
seq_file
*m, loff_t *
pos
)
133
{
134
return
*pos <
NR_CPUS
? cpu_data + *pos :
NULL
;
135
}
136
static
void
*c_next(
struct
seq_file
*m,
void
*v, loff_t *
pos
)
137
{
138
++*
pos
;
139
return
c_start
(m, pos);
140
}
141
static
void
c_stop(
struct
seq_file
*m,
void
*v)
142
{
143
}
144
const
struct
seq_operations
cpuinfo_op
= {
145
.start =
c_start
,
146
.next = c_next,
147
.stop = c_stop,
148
.show =
show_cpuinfo
,
149
};
150
#endif
/* CONFIG_PROC_FS */
Generated on Thu Jan 10 2013 13:11:15 for Linux Kernel by
1.8.2