source: rtems/c/src/lib/libcpu/powerpc/shared/include/cpuIdent.h @ a762dc2

4.115
Last change on this file since a762dc2 was a762dc2, checked in by Sebastian Huber <sebastian.huber@…>, on 01/23/12 at 10:19:22

Support for MPC5643L.

Rework of the start sequence to reduce the amount assembler code and to
support configuration tables which may be provided by the application.

  • Property mode set to 100644
File size: 3.6 KB
Line 
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.com/license/LICENSE.
12 *
13 *  $Id$
14 */
15
16#ifndef _LIBCPU_CPUIDENT_H
17#define _LIBCPU_CPUIDENT_H
18
19#include <stdbool.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#ifndef ASM
26typedef enum
27{
28  PPC_601 = 0x1,
29  PPC_5XX = 0x2,
30  PPC_603 = 0x3,
31  PPC_604 = 0x4,
32  PPC_603e = 0x6,
33  PPC_603ev = 0x7,
34  PPC_750 = 0x8,
35  PPC_604e = 0x9,
36  PPC_604r = 0xA,
37  PPC_7400 = 0xC,
38  PPC_405  = 0x2001,
39  PPC_405EX = 0x1291,   /* + 405EXr */
40  PPC_405GP = 0x4011,   /* + 405CR */
41  PPC_405GPr = 0x5091,
42  PPC_405EZ = 0x4151,
43  PPC_405EP = 0x5121,
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_603le = 0x8082, /* 603le core, in MGT5100 and MPC5200 */
56  PPC_e300c1  = 0x8083, /* e300c1  core, in MPC83xx*/
57  PPC_e300c2  = 0x8084, /* e300c2  core */
58  PPC_e300c3  = 0x8085, /* e300c3  core */
59  PPC_e200z0  = 0x8170,
60  PPC_e200z1  = 0x8140,
61  PPC_e200z4  = 0x8155,
62  PPC_e200z6  = 0x8110,
63  PPC_e200z7  = 0x8160,
64  PPC_PSIM    = 0xfffe,  /* GDB PowerPC simulator -- fake version */
65  PPC_UNKNOWN = 0xffff
66} ppc_cpu_id_t;
67
68/* Bitfield of for identifying features or groups of cpu flavors.
69 * DO NOT USE DIRECTLY (as implementation may change)
70 * only use the 'ppc_is_xxx() / ppc_has_xxx()' macros/inlines
71 * below.
72 */
73
74typedef struct {
75        unsigned has_altivec            : 1;
76        unsigned has_fpu                        : 1;
77        unsigned has_hw_ptbl_lkup       : 1;
78#define PPC_BOOKE_405   1       /* almost like booke but with some significant differences */
79#define PPC_BOOKE_STD   2
80#define PPC_BOOKE_E500  3       /* bookE with extensions */
81        unsigned is_bookE                       : 2;
82        unsigned has_16byte_clne        : 1;
83        unsigned is_60x             : 1;
84        unsigned has_8_bats                     : 1;
85        unsigned has_epic           : 1;
86        unsigned has_shadowed_gprs  : 1;
87} ppc_feature_t;
88
89extern ppc_feature_t   current_ppc_features;
90extern ppc_cpu_id_t current_ppc_cpu;
91
92typedef unsigned short ppc_cpu_revision_t;
93
94extern ppc_cpu_id_t get_ppc_cpu_type (void);
95extern const char *get_ppc_cpu_type_name(ppc_cpu_id_t cpu);
96extern ppc_cpu_revision_t get_ppc_cpu_revision (void);
97extern ppc_cpu_revision_t current_ppc_revision;
98
99/* PUBLIC ACCESS ROUTINES */
100#define _PPC_FEAT_DECL(x) \
101static inline unsigned ppc_cpu_##x(void) { \
102  if ( PPC_UNKNOWN == current_ppc_cpu ) \
103    get_ppc_cpu_type(); \
104  return current_ppc_features.x; \
105}
106
107_PPC_FEAT_DECL(has_altivec)
108/* has_fpu not implemented yet */
109_PPC_FEAT_DECL(has_hw_ptbl_lkup)
110_PPC_FEAT_DECL(is_bookE)
111_PPC_FEAT_DECL(is_60x)
112_PPC_FEAT_DECL(has_8_bats)
113_PPC_FEAT_DECL(has_epic)
114_PPC_FEAT_DECL(has_shadowed_gprs)
115
116#undef _PPC_FEAT_DECL
117
118static inline ppc_cpu_id_t ppc_cpu_current(void)
119{
120        return current_ppc_cpu;
121}
122
123static inline bool ppc_cpu_is_e200(void)
124{
125        return ppc_cpu_current() == PPC_e200z0
126                || ppc_cpu_current() == PPC_e200z1
127                || ppc_cpu_current() == PPC_e200z6;
128}
129
130static inline bool ppc_cpu_is_e300(void)
131{
132        return ppc_cpu_current() == PPC_e300c1
133                || ppc_cpu_current() == PPC_e300c2
134                || ppc_cpu_current() == PPC_e300c3;
135}
136
137static inline bool ppc_cpu_is_e500(void)
138{
139        return ppc_cpu_current() == PPC_8540
140                || ppc_cpu_current() == PPC_e500v2;
141}
142
143static inline bool ppc_cpu_is(ppc_cpu_id_t cpu)
144{
145        return ppc_cpu_current() == cpu;
146}
147
148#endif /* ASM */
149
150#ifdef __cplusplus
151}
152#endif
153
154#endif
Note: See TracBrowser for help on using the repository browser.