summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/shared/umon/tfs.h
blob: 8ccc57ac709dc32373b081bcd1b8abc47d22dadb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/*
 *  tfs.h - Header file for TFS transactions, used by both application and
 *  monnitor.
 *
 *  Based upon code from MicroMonitor 1.17 from http://www.umonfw.com/
 *  which includes this notice:
 *
 **************************************************************************
 *  General notice:
 *  This code is part of a boot-monitor package developed as a generic base
 *  platform for embedded system designs.  As such, it is likely to be
 *  distributed to various projects beyond the control of the original
 *  author.  Please notify the author of any enhancements made or bugs found
 *  so that all may benefit from the changes.  In addition, notification back
 *  to the author will allow the new user to pick up changes that may have
 *  been made by other users after this version of the code was distributed.
 *
 *  Note1: the majority of this code was edited with 4-space tabs.
 *  Note2: as more and more contributions are accepted, the term "author"
 *         is becoming a mis-representation of credit.
 *
 *  Original author:    Ed Sutter
 *  Email:              esutter@alcatel-lucent.com
 *  Phone:              908-582-2351
 **************************************************************************
 *
 *  Ed Sutter has been informed that this code is being used in RTEMS.
 *
 *  This code was reformatted by Joel Sherrill from OAR Corporation and
 *  Fernando Nicodemos <fgnicodemos@terra.com.br> from NCB - Sistemas
 *  Embarcados Ltda. (Brazil) to be more compliant with RTEMS coding
 *  standards and to eliminate C++ style comments.
 *
 *  $Id$
 */

#ifndef _tfs_h
#define _tfs_h

#define TFSINFOSIZE		23		/* Max size of info string (mod4-1). */

#ifndef TFSNAMESIZE				/* This specifies the maximum size of a file */
#define TFSNAMESIZE		23		/* name that can be used in TFS. */
#endif							/* This MUST be some value mod4 - 1. */

#ifndef TFS_CHANGELOG_FILE		/* Information used for change-log */
#define TFS_CHANGELOG_SIZE	0	/* facility within tfs. */
#define TFS_CHANGELOG_FILE	".tfschlog"
#endif

#ifndef SYMFILE					/* This specifies the default filename */
#define SYMFILE		"symtbl"	/* used by the monitor for the symbol */
#endif							/* table. */

#define MINUSRLEVEL		0		/* Minimum user level supported. */
#define MAXUSRLEVEL		3		/* Maximum user level supported. */

#ifndef TFS_RESERVED
#define TFS_RESERVED	4		/* Number of "reserved" entries (ulong) */
#endif							/* in the TFS header. */


/* Flags: */
#define TFS_EXEC	0x00000001	/* 'e': Executable script. */
#define TFS_BRUN	0x00000002	/* 'b': To be executed at boot. */
#define TFS_QRYBRUN	0x00000004	/* 'B': To be executed at boot if */
								/*      query passes. */
#define TFS_SYMLINK	0x00000008	/* 'l': Symbolic link file. */
#define TFS_EBIN	0x00000010	/* 'E': Executable binary (coff/elf/a.out). */
#define TFS_CPRS	0x00000040	/* 'c': File is compressed. */
#define TFS_IPMOD	0x00000080	/* 'i': File is in-place modifiable. */
#define TFS_UNREAD	0x00000100	/* 'u':	File is not even readable if the */
								/*		user-level requirement is not met; */
								/*		else, it is read-only. */
#define TFS_ULVLMSK	0x00000600	/*	User level mask defines 4 access levels: */
#define TFS_ULVL0	0x00000000	/* '0'	level 0 */
#define TFS_ULVL1	0x00000200	/* '1'	level 1 */
#define TFS_ULVL2	0x00000400	/* '2'	level 2 */
#define TFS_ULVL3	0x00000600	/* '3'	level 3 */
#define TFS_NSTALE	0x00000800	/* File is NOT stale, invisible to user.
								 * When this bit is clear, the file is
								 * considered stale (see notes in tfsadd()).
								 * See notes in tfsclose() for this.
								 */
#define TFS_ACTIVE	0x00008000	/* Used to indicate that file is not deleted. */

#define TFS_ULVLMAX	TFS_ULVL3
#define TFS_USRLVL(f)	((f->flags & TFS_ULVLMSK) >> 9)

/* Open modes */
#define	TFS_RDONLY		0x00010000	/* File is opened for reading. */
#define	TFS_CREATE		0x00020000	/* File is to be created. Error if file */
									/* with the same name already exists. */
#define	TFS_APPEND		0x00040000	/* Append to existing file.  If OR'ed */
									/* with TFS_CREATE, then create if */
									/* necessary. */
#define	TFS_ALLFFS		0x00080000	/* File is created with all FFs. */
#define	TFS_CREATERM	0x00100000	/* File is to be created. If file with */
									/* same name already exists, then allow */
									/* tfsadd() to remove it if necessary. */

/* The function tfsrunrc() will search through the current file set and */
/* if the file defined by TFS_RCFILE exists, it will be executed. */
/* If this file exists, it will NOT be run by tfsrunboot(). */
#define TFS_RCFILE		"monrc"

/* Requests that can be made to tfsctrl(): */
#define	TFS_ERRMSG		1
#define	TFS_MEMUSE		2
#define	TFS_MEMDEAD		3
#define	TFS_DEFRAG		4
#define	TFS_TELL		5
#define	TFS_UNOPEN		7
#define	TFS_FATOB		8
#define	TFS_FBTOA		9
#define	TFS_MEMAVAIL	10
#define	TFS_TIMEFUNCS	11
#define	TFS_DOCOMMAND	12
#define	TFS_INITDEV		13
#define	TFS_CHECKDEV	14
#define	TFS_DEFRAGDEV	15
#define	TFS_DEFRAGOFF	16
#define	TFS_DEFRAGON	17
#define	TFS_HEADROOM	18
#define	TFS_FCOUNT		19

/* struct tfshdr:
 *	It is in FLASH as part of the file system to record the attributes of
 *	the file at the time of creation.
 */
struct tfshdr {
	unsigned short	hdrsize;		/* Size of this header.					*/
	unsigned short	hdrvrsn;		/* Header version #.					*/
	long	filsize;				/* Size of the file.					*/
	long	flags;					/* Flags describing the file.			*/
	unsigned long filcrc; 			/* 32 bit CRC of file.					*/
	unsigned long hdrcrc;			/* 32 bit CRC of the header.			*/
	unsigned long	modtime;		/* Time when file was last modified.	*/
	struct	tfshdr	*next;			/* Pointer to next file in list.		*/
	char	name[TFSNAMESIZE+1];	/* Name of file.						*/
	char	info[TFSINFOSIZE+1];	/* Miscellaneous info field.			*/
#if TFS_RESERVED
	unsigned long	rsvd[TFS_RESERVED];
#endif
};

#define TFSHDRSIZ	sizeof(struct tfshdr)

/* TFS error returns. */
#define TFS_OKAY				0
#define TFSERR_NOFILE			-1
#define TFSERR_NOSLOT			-2
#define TFSERR_EOF				-3
#define TFSERR_BADARG			-4
#define TFSERR_NOTEXEC			-5
#define TFSERR_BADCRC			-6
#define TFSERR_FILEEXISTS		-7
#define TFSERR_FLASHFAILURE		-8
#define TFSERR_WRITEMAX			-9
#define TFSERR_RDONLY			-10
#define TFSERR_BADFD			-11
#define TFSERR_BADHDR			-12
#define TFSERR_CORRUPT			-13
#define TFSERR_MEMFAIL			-14
#define TFSERR_NOTIPMOD			-16
#define TFSERR_MUTEXFAILURE		-17
#define TFSERR_FLASHFULL		-18
#define TFSERR_USERDENIED		-19
#define TFSERR_NAMETOOBIG		-20
#define TFSERR_FILEINUSE		-21
#define TFSERR_NOTCPRS			-22
#define TFSERR_NOTAVAILABLE		-23
#define TFSERR_BADFLAG			-24
#define TFSERR_CLEANOFF			-25
#define TFSERR_FLAKEYSOURCE		-26
#define TFSERR_BADEXTENSION		-27
#define TFSERR_MIN				-100

/* TFS seek options. */
#define TFS_BEGIN		1
#define TFS_CURRENT		2
#define TFS_END			3

/* Macros: */
#define TFS_DELETED(fp)		(!((fp)->flags & TFS_ACTIVE))
#define TFS_FILEEXISTS(fp)	((fp)->flags & TFS_ACTIVE)
#define TFS_ISCPRS(fp)		((fp)->flags & TFS_CPRS)
#define TFS_ISEXEC(fp)		((fp)->flags & TFS_EXEC)
#define TFS_ISBOOT(fp)		((fp)->flags & TFS_BRUN)
#define TFS_ISLINK(fp)		((fp)->flags & TFS_SYMLINK)
#define TFS_STALE(fp) 		(!((fp)->flags & TFS_NSTALE))
#define TFS_FLAGS(fp)		((fp)->flags)
#define TFS_NAME(fp)		((fp)->name)
#define TFS_SIZE(fp)		((fp)->filsize)
#define TFS_TIME(fp)		((fp)->modtime)
#define TFS_INFO(fp)		((fp)->info)
#define TFS_NEXT(fp)		((fp)->next)
#define TFS_CRC(fp)			((fp)->filcrc)
#define TFS_ENTRY(fp)		((fp)->entry)
#define TFS_BASE(fp)		((char *)(fp)+(fp)->hdrsize)

typedef struct tfshdr TFILE;
#endif