RTEMS 6.1-rc5
Loading...
Searching...
No Matches
cpuIdent.h
1/*
2 * Copyright (C) 1999 Eric Valette (valette@crf.canon.fr)
3 * Canon Centre Recherche France.
4 *
5 * Added MPC8260 Andy Dachs <a.dachs@sstl.co.uk>
6 * Surrey Satellite Technology Limited
7 *
8 *
9 * The license and distribution terms for this file may be
10 * found in the file LICENSE in this distribution or at
11 * http://www.rtems.org/license/LICENSE.
12 */
13
14#ifndef _LIBCPU_CPUIDENT_H
15#define _LIBCPU_CPUIDENT_H
16
17#include <stdbool.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23#ifndef ASM
24typedef enum
25{
26 PPC_601 = 0x1,
27 PPC_5XX = 0x2,
28 PPC_603 = 0x3,
29 PPC_604 = 0x4,
30 PPC_603e = 0x6,
31 PPC_603ev = 0x7,
32 PPC_750 = 0x8,
33 PPC_750_IBM = 0x7000,
34 PPC_604e = 0x9,
35 PPC_604r = 0xA,
36 PPC_7400 = 0xC,
37 PPC_405 = 0x2001, /* Xilinx Virtex-II Pro or -4 */
38 PPC_405EX = 0x1291, /* + 405EXr */
39 PPC_405GP = 0x4011, /* + 405CR */
40 PPC_405GPr = 0x5091,
41 PPC_405EZ = 0x4151,
42 PPC_405EP = 0x5121,
43 PPC_440 = 0x7ff2, /* Xilinx Virtex-5*/
44 PPC_7455 = 0x8001, /* Kate Feng */
45 PPC_7457 = 0x8002,
46 PPC_620 = 0x16,
47 PPC_860 = 0x50,
48 PPC_821 = PPC_860,
49 PPC_823 = PPC_860,
50 PPC_8260 = 0x81,
51 PPC_8240 = PPC_8260,
52 PPC_8245 = 0x8081,
53 PPC_8540 = 0x8020,
54 PPC_e500v2 = 0x8021,
55 PPC_e6500 = 0x8040,
56 PPC_603le = 0x8082, /* 603le core, in MGT5100 and MPC5200 */
57 PPC_e300c1 = 0x8083, /* e300c1 core, in MPC83xx*/
58 PPC_e300c2 = 0x8084, /* e300c2 core */
59 PPC_e300c3 = 0x8085, /* e300c3 core */
60 PPC_e200z0 = 0x8170,
61 PPC_e200z1 = 0x8140,
62 PPC_e200z4 = 0x8150,
63 PPC_e200z6 = 0x8110,
64 PPC_e200z7 = 0x8160,
65 PPC_PSIM = 0xfffe, /* GDB PowerPC simulator -- fake version */
66 PPC_UNKNOWN = 0xffff
67} ppc_cpu_id_t;
68
69/* Bitfield of for identifying features or groups of cpu flavors.
70 * DO NOT USE DIRECTLY (as implementation may change)
71 * only use the 'ppc_is_xxx() / ppc_has_xxx()' macros/inlines
72 * below.
73 */
74
75typedef struct {
76 unsigned has_altivec : 1;
77 unsigned has_fpu : 1;
78 unsigned has_hw_ptbl_lkup : 1;
79#define PPC_BOOKE_405 1 /* almost like booke but with some significant differences */
80#define PPC_BOOKE_STD 2
81#define PPC_BOOKE_E500 3 /* bookE with extensions */
82 unsigned is_bookE : 2;
83 unsigned has_16byte_clne : 1;
84 unsigned is_60x : 1;
85 unsigned has_8_bats : 1;
86 unsigned has_epic : 1;
87 unsigned has_shadowed_gprs : 1;
89
90extern ppc_feature_t current_ppc_features;
91extern ppc_cpu_id_t current_ppc_cpu;
92
93typedef unsigned short ppc_cpu_revision_t;
94
95extern ppc_cpu_id_t get_ppc_cpu_type (void);
96extern const char *get_ppc_cpu_type_name(ppc_cpu_id_t cpu);
97extern ppc_cpu_revision_t get_ppc_cpu_revision (void);
98extern ppc_cpu_revision_t current_ppc_revision;
99
100/* PUBLIC ACCESS ROUTINES */
101#define _PPC_FEAT_DECL(x) \
102static inline unsigned ppc_cpu_##x(void) { \
103 if ( PPC_UNKNOWN == current_ppc_cpu ) \
104 get_ppc_cpu_type(); \
105 return current_ppc_features.x; \
106}
107
108_PPC_FEAT_DECL(has_altivec)
109/* has_fpu not implemented yet */
110_PPC_FEAT_DECL(has_hw_ptbl_lkup)
111_PPC_FEAT_DECL(is_bookE)
112_PPC_FEAT_DECL(is_60x)
113_PPC_FEAT_DECL(has_8_bats)
114_PPC_FEAT_DECL(has_epic)
115_PPC_FEAT_DECL(has_shadowed_gprs)
116
117#undef _PPC_FEAT_DECL
118
119static inline ppc_cpu_id_t ppc_cpu_current(void)
120{
121 return current_ppc_cpu;
122}
123
124static inline bool ppc_cpu_is_e200(void)
125{
126 return (ppc_cpu_current() & 0xff80) == 0x8100;
127}
128
129static inline bool ppc_cpu_is_specific_e200(ppc_cpu_id_t id)
130{
131 return (ppc_cpu_current() & 0xfff0) == id;
132}
133
134static inline bool ppc_cpu_is_e300(void)
135{
136 return ppc_cpu_current() == PPC_e300c1
137 || ppc_cpu_current() == PPC_e300c2
138 || ppc_cpu_current() == PPC_e300c3;
139}
140
141static inline bool ppc_cpu_is_e500(void)
142{
143 return ppc_cpu_current() == PPC_8540
144 || ppc_cpu_current() == PPC_e500v2;
145}
146
147static inline bool ppc_cpu_is(ppc_cpu_id_t cpu)
148{
149 return ppc_cpu_current() == cpu;
150}
151
152#endif /* ASM */
153
154#ifdef __cplusplus
155}
156#endif
157
158#endif
Definition: cpuIdent.h:75