source: rtems/bsps/include/umon/tfs.h @ 2afb22b

5
Last change on this file since 2afb22b 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 100644
File size: 7.5 KB
Line 
1/**
2 *  @file
3 *
4 *  @ingroup shared_tfs
5 *
6 *  @brief Header file for TFS transactions, used by both application and
7 *  monnitor.
8 */
9
10/*  Based upon code from MicroMonitor 1.17 from http://www.umonfw.com/
11 *  which includes this notice:
12 *
13 **************************************************************************
14 *  General notice:
15 *  This code is part of a boot-monitor package developed as a generic base
16 *  platform for embedded system designs.  As such, it is likely to be
17 *  distributed to various projects beyond the control of the original
18 *  author.  Please notify the author of any enhancements made or bugs found
19 *  so that all may benefit from the changes.  In addition, notification back
20 *  to the author will allow the new user to pick up changes that may have
21 *  been made by other users after this version of the code was distributed.
22 *
23 *  Note1: the majority of this code was edited with 4-space tabs.
24 *  Note2: as more and more contributions are accepted, the term "author"
25 *         is becoming a mis-representation of credit.
26 *
27 *  Original author:    Ed Sutter
28 *  Email:              esutter@alcatel-lucent.com
29 *  Phone:              908-582-2351
30 **************************************************************************
31 *
32 *  Ed Sutter has been informed that this code is being used in RTEMS.
33 *
34 *  This code was reformatted by Joel Sherrill from OAR Corporation and
35 *  Fernando Nicodemos <fgnicodemos@terra.com.br> from NCB - Sistemas
36 *  Embarcados Ltda. (Brazil) to be more compliant with RTEMS coding
37 *  standards and to eliminate C++ style comments.
38 */
39
40#ifndef _tfs_h
41#define _tfs_h
42
43/**
44 *  @defgroup shared_tfs TFS Support
45 *
46 *  @ingroup shared_umon
47 *
48 *  @brief TFS Support Package
49 */
50
51#define TFSINFOSIZE             23              /* Max size of info string (mod4-1). */
52
53#ifndef TFSNAMESIZE                             /* This specifies the maximum size of a file */
54#define TFSNAMESIZE             23              /* name that can be used in TFS. */
55#endif                                                  /* This MUST be some value mod4 - 1. */
56
57#ifndef TFS_CHANGELOG_FILE              /* Information used for change-log */
58#define TFS_CHANGELOG_SIZE      0       /* facility within tfs. */
59#define TFS_CHANGELOG_FILE      ".tfschlog"
60#endif
61
62#ifndef SYMFILE                                 /* This specifies the default filename */
63#define SYMFILE         "symtbl"        /* used by the monitor for the symbol */
64#endif                                                  /* table. */
65
66#define MINUSRLEVEL             0               /* Minimum user level supported. */
67#define MAXUSRLEVEL             3               /* Maximum user level supported. */
68
69#ifndef TFS_RESERVED
70#define TFS_RESERVED    4               /* Number of "reserved" entries (ulong) */
71#endif                                                  /* in the TFS header. */
72
73
74/* Flags: */
75#define TFS_EXEC        0x00000001      /* 'e': Executable script. */
76#define TFS_BRUN        0x00000002      /* 'b': To be executed at boot. */
77#define TFS_QRYBRUN     0x00000004      /* 'B': To be executed at boot if */
78                                                                /*      query passes. */
79#define TFS_SYMLINK     0x00000008      /* 'l': Symbolic link file. */
80#define TFS_EBIN        0x00000010      /* 'E': Executable binary (coff/elf/a.out). */
81#define TFS_CPRS        0x00000040      /* 'c': File is compressed. */
82#define TFS_IPMOD       0x00000080      /* 'i': File is in-place modifiable. */
83#define TFS_UNREAD      0x00000100      /* 'u': File is not even readable if the */
84                                                                /*              user-level requirement is not met; */
85                                                                /*              else, it is read-only. */
86#define TFS_ULVLMSK     0x00000600      /*      User level mask defines 4 access levels: */
87#define TFS_ULVL0       0x00000000      /* '0'  level 0 */
88#define TFS_ULVL1       0x00000200      /* '1'  level 1 */
89#define TFS_ULVL2       0x00000400      /* '2'  level 2 */
90#define TFS_ULVL3       0x00000600      /* '3'  level 3 */
91#define TFS_NSTALE      0x00000800      /* File is NOT stale, invisible to user.
92                                                                 * When this bit is clear, the file is
93                                                                 * considered stale (see notes in tfsadd()).
94                                                                 * See notes in tfsclose() for this.
95                                                                 */
96#define TFS_ACTIVE      0x00008000      /* Used to indicate that file is not deleted. */
97
98#define TFS_ULVLMAX     TFS_ULVL3
99#define TFS_USRLVL(f)   ((f->flags & TFS_ULVLMSK) >> 9)
100
101/* Open modes */
102#define TFS_RDONLY              0x00010000      /* File is opened for reading. */
103#define TFS_CREATE              0x00020000      /* File is to be created. Error if file */
104                                                                        /* with the same name already exists. */
105#define TFS_APPEND              0x00040000      /* Append to existing file.  If OR'ed */
106                                                                        /* with TFS_CREATE, then create if */
107                                                                        /* necessary. */
108#define TFS_ALLFFS              0x00080000      /* File is created with all FFs. */
109#define TFS_CREATERM    0x00100000      /* File is to be created. If file with */
110                                                                        /* same name already exists, then allow */
111                                                                        /* tfsadd() to remove it if necessary. */
112
113/* The function tfsrunrc() will search through the current file set and */
114/* if the file defined by TFS_RCFILE exists, it will be executed. */
115/* If this file exists, it will NOT be run by tfsrunboot(). */
116#define TFS_RCFILE              "monrc"
117
118/* Requests that can be made to tfsctrl(): */
119#define TFS_ERRMSG              1
120#define TFS_MEMUSE              2
121#define TFS_MEMDEAD             3
122#define TFS_DEFRAG              4
123#define TFS_TELL                5
124#define TFS_UNOPEN              7
125#define TFS_FATOB               8
126#define TFS_FBTOA               9
127#define TFS_MEMAVAIL    10
128#define TFS_TIMEFUNCS   11
129#define TFS_DOCOMMAND   12
130#define TFS_INITDEV             13
131#define TFS_CHECKDEV    14
132#define TFS_DEFRAGDEV   15
133#define TFS_DEFRAGOFF   16
134#define TFS_DEFRAGON    17
135#define TFS_HEADROOM    18
136#define TFS_FCOUNT              19
137
138/* struct tfshdr:
139 *      It is in FLASH as part of the file system to record the attributes of
140 *      the file at the time of creation.
141 */
142struct tfshdr {
143        unsigned short  hdrsize;                /* Size of this header.                                 */
144        unsigned short  hdrvrsn;                /* Header version #.                                    */
145        long    filsize;                                /* Size of the file.                                    */
146        long    flags;                                  /* Flags describing the file.                   */
147        unsigned long filcrc;                   /* 32 bit CRC of file.                                  */
148        unsigned long hdrcrc;                   /* 32 bit CRC of the header.                    */
149        unsigned long   modtime;                /* Time when file was last modified.    */
150        struct  tfshdr  *next;                  /* Pointer to next file in list.                */
151        char    name[TFSNAMESIZE+1];    /* Name of file.                                                */
152        char    info[TFSINFOSIZE+1];    /* Miscellaneous info field.                    */
153#if TFS_RESERVED
154        unsigned long   rsvd[TFS_RESERVED];
155#endif
156};
157
158#define TFSHDRSIZ       sizeof(struct tfshdr)
159
160/* TFS error returns. */
161#define TFS_OKAY                                0
162#define TFSERR_NOFILE                   -1
163#define TFSERR_NOSLOT                   -2
164#define TFSERR_EOF                              -3
165#define TFSERR_BADARG                   -4
166#define TFSERR_NOTEXEC                  -5
167#define TFSERR_BADCRC                   -6
168#define TFSERR_FILEEXISTS               -7
169#define TFSERR_FLASHFAILURE             -8
170#define TFSERR_WRITEMAX                 -9
171#define TFSERR_RDONLY                   -10
172#define TFSERR_BADFD                    -11
173#define TFSERR_BADHDR                   -12
174#define TFSERR_CORRUPT                  -13
175#define TFSERR_MEMFAIL                  -14
176#define TFSERR_NOTIPMOD                 -16
177#define TFSERR_MUTEXFAILURE             -17
178#define TFSERR_FLASHFULL                -18
179#define TFSERR_USERDENIED               -19
180#define TFSERR_NAMETOOBIG               -20
181#define TFSERR_FILEINUSE                -21
182#define TFSERR_NOTCPRS                  -22
183#define TFSERR_NOTAVAILABLE             -23
184#define TFSERR_BADFLAG                  -24
185#define TFSERR_CLEANOFF                 -25
186#define TFSERR_FLAKEYSOURCE             -26
187#define TFSERR_BADEXTENSION             -27
188#define TFSERR_MIN                              -100
189
190/* TFS seek options. */
191#define TFS_BEGIN               1
192#define TFS_CURRENT             2
193#define TFS_END                 3
194
195/* Macros: */
196#define TFS_DELETED(fp)         (!((fp)->flags & TFS_ACTIVE))
197#define TFS_FILEEXISTS(fp)      ((fp)->flags & TFS_ACTIVE)
198#define TFS_ISCPRS(fp)          ((fp)->flags & TFS_CPRS)
199#define TFS_ISEXEC(fp)          ((fp)->flags & TFS_EXEC)
200#define TFS_ISBOOT(fp)          ((fp)->flags & TFS_BRUN)
201#define TFS_ISLINK(fp)          ((fp)->flags & TFS_SYMLINK)
202#define TFS_STALE(fp)           (!((fp)->flags & TFS_NSTALE))
203#define TFS_FLAGS(fp)           ((fp)->flags)
204#define TFS_NAME(fp)            ((fp)->name)
205#define TFS_SIZE(fp)            ((fp)->filsize)
206#define TFS_TIME(fp)            ((fp)->modtime)
207#define TFS_INFO(fp)            ((fp)->info)
208#define TFS_NEXT(fp)            ((fp)->next)
209#define TFS_CRC(fp)                     ((fp)->filcrc)
210#define TFS_ENTRY(fp)           ((fp)->entry)
211#define TFS_BASE(fp)            ((char *)(fp)+(fp)->hdrsize)
212
213typedef struct tfshdr TFILE;
214#endif
Note: See TracBrowser for help on using the repository browser.