source: rtems/bsps/powerpc/include/libcpu/cpuIdent.h @ abc2164

5
Last change on this file since abc2164 was 2afb22b, checked in by Chris Johns <chrisj@…>, on 12/23/17 at 07:18:56

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • Property mode set to 100755
File size: 3.7 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.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;
88} ppc_feature_t;
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
Note: See TracBrowser for help on using the repository browser.