os/kernelhwsrv/kernel/eka/include/e32rom.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32\include\e32rom.h
sl@0
    15
// 
sl@0
    16
// WARNING: This file contains some APIs which are internal and are subject
sl@0
    17
//          to change without notice. Such APIs should therefore not be used
sl@0
    18
//          outside the Kernel and Hardware Services package.
sl@0
    19
//
sl@0
    20
sl@0
    21
#ifndef __E32ROM_H__
sl@0
    22
#define __E32ROM_H__
sl@0
    23
#include <e32cmn.h>
sl@0
    24
#include <e32def_private.h>
sl@0
    25
sl@0
    26
//
sl@0
    27
sl@0
    28
#ifndef __SECURITY_INFO_DEFINED__
sl@0
    29
#define __SECURITY_INFO_DEFINED__
sl@0
    30
/**
sl@0
    31
@internalTechnology
sl@0
    32
*/
sl@0
    33
//This struct must be identical in size and offset to the one in e32cmn.h
sl@0
    34
//Functions need not be duplicated.  But must be same structurally.
sl@0
    35
struct SCapabilitySet
sl@0
    36
	{
sl@0
    37
	enum {ENCapW=2};
sl@0
    38
	TUint32 iCaps[ENCapW];
sl@0
    39
	inline const TUint32& operator[] (TInt aIndex) const { return iCaps[aIndex]; }
sl@0
    40
	inline TUint32& operator[] (TInt aIndex) { return iCaps[aIndex]; }
sl@0
    41
	};
sl@0
    42
sl@0
    43
/**
sl@0
    44
@internalTechnology
sl@0
    45
*/
sl@0
    46
//This struct must be identical in size and offset to the one in e32cmn.h
sl@0
    47
//Functions need not be duplicated.  But must be same structurally.
sl@0
    48
struct SSecurityInfo
sl@0
    49
	{
sl@0
    50
	TUint32	iSecureId;
sl@0
    51
	TUint32	iVendorId;
sl@0
    52
	SCapabilitySet iCaps;	
sl@0
    53
	};
sl@0
    54
#endif
sl@0
    55
sl@0
    56
/**
sl@0
    57
@internalTechnology
sl@0
    58
@prototype
sl@0
    59
*/
sl@0
    60
struct SDemandPagingConfig
sl@0
    61
	{
sl@0
    62
	TUint16 iMinPages;
sl@0
    63
	TUint16 iMaxPages;
sl@0
    64
	TUint16 iYoungOldRatio;
sl@0
    65
	TUint16 iSpare[3];		// iSpare[0:1] are used for emulated rom paging, 
sl@0
    66
							// iSpare[2] is used for the old to oldest ratio.
sl@0
    67
	};
sl@0
    68
sl@0
    69
/**
sl@0
    70
@internalTechnology
sl@0
    71
@prototype
sl@0
    72
*/
sl@0
    73
struct SRomPageInfo
sl@0
    74
	{
sl@0
    75
	enum TAttributes
sl@0
    76
		{
sl@0
    77
		EPageable = 1<<0
sl@0
    78
		};
sl@0
    79
	enum TCompression  // todo: compression type not exclusive to rom pages
sl@0
    80
		{
sl@0
    81
		ENoCompression,
sl@0
    82
		EBytePair,
sl@0
    83
		};
sl@0
    84
	TUint32 iDataStart;
sl@0
    85
	TUint16 iDataSize;
sl@0
    86
	TUint8  iCompressionType;
sl@0
    87
	TUint8  iPagingAttributes;
sl@0
    88
	};
sl@0
    89
sl@0
    90
/**
sl@0
    91
@publishedPartner
sl@0
    92
@released
sl@0
    93
sl@0
    94
Defines the size of the header for a ROM image.
sl@0
    95
sl@0
    96
@see TRomHeader
sl@0
    97
*/
sl@0
    98
const TUint KRomHeaderSize=0x200;
sl@0
    99
//
sl@0
   100
sl@0
   101
sl@0
   102
/**
sl@0
   103
@publishedPartner
sl@0
   104
@released
sl@0
   105
sl@0
   106
The format of the header for a ROM image.
sl@0
   107
sl@0
   108
This is retained as part of the ROM image.
sl@0
   109
It is generated by the rombuild tool, and is used by the Bootstrap and
sl@0
   110
the kernel.
sl@0
   111
*/
sl@0
   112
class TRomHeader
sl@0
   113
	{
sl@0
   114
public:
sl@0
   115
	enum { KDefaultDebugPort = -1 };
sl@0
   116
	enum { KNumTraceMask = 8 };  // this is also defined in e23const.h
sl@0
   117
sl@0
   118
__ASSERT_COMPILE(KNumTraceMask==KNumTraceMaskWords);
sl@0
   119
sl@0
   120
public:
sl@0
   121
    /**
sl@0
   122
    Reserved for a small amount of Bootstrap code, if required.
sl@0
   123
    The first 4 bytes of the binary image typically contains
sl@0
   124
    a branch instruction which jumps to code at offset 0x100.
sl@0
   125
    */
sl@0
   126
	TUint8 iJump[124]; 
sl@0
   127
	
sl@0
   128
	                                     
sl@0
   129
    /**
sl@0
   130
    The restart vector.
sl@0
   131
    */	                                     
sl@0
   132
	TLinAddr iRestartVector;
sl@0
   133
	
sl@0
   134
	
sl@0
   135
	/**
sl@0
   136
	The date and time that the ROM image was built, in microseconds.
sl@0
   137
	*/
sl@0
   138
	TInt64 iTime;
sl@0
   139
	
sl@0
   140
	
sl@0
   141
	/**
sl@0
   142
	The high order 32 bits of the ROM image build date & time.
sl@0
   143
	*/
sl@0
   144
	TUint32 iTimeHi;
sl@0
   145
	
sl@0
   146
	
sl@0
   147
	/**
sl@0
   148
	The virtual address of the base of the ROM.
sl@0
   149
	*/
sl@0
   150
	TLinAddr iRomBase;
sl@0
   151
	
sl@0
   152
	
sl@0
   153
	/**
sl@0
   154
	The size of the ROM image, in bytes.
sl@0
   155
	
sl@0
   156
	This includes the second section for sectioned ROMs.
sl@0
   157
	*/
sl@0
   158
	TUint32 iRomSize;
sl@0
   159
	
sl@0
   160
	
sl@0
   161
	/**
sl@0
   162
	The virtual address of the TRomRootDirectoryList structure.
sl@0
   163
sl@0
   164
    @see TRomRootDirectoryList 
sl@0
   165
	*/
sl@0
   166
	TLinAddr iRomRootDirectoryList;
sl@0
   167
	
sl@0
   168
	
sl@0
   169
	/**
sl@0
   170
	The virtual address of kernel data, when in RAM.
sl@0
   171
	*/
sl@0
   172
	TLinAddr iKernDataAddress;
sl@0
   173
	
sl@0
   174
	
sl@0
   175
	/**
sl@0
   176
	The virtual address of the top of the kernel region, when in RAM.
sl@0
   177
	*/
sl@0
   178
	TLinAddr iKernelLimit;
sl@0
   179
	
sl@0
   180
	
sl@0
   181
	/**
sl@0
   182
	The virtual address of the primarys ROM file image header.
sl@0
   183
sl@0
   184
    @see TRomImageHeader 
sl@0
   185
	*/
sl@0
   186
	TLinAddr iPrimaryFile;
sl@0
   187
	
sl@0
   188
	
sl@0
   189
	/**
sl@0
   190
	The virtual address of the secondarys ROM file image header.
sl@0
   191
	
sl@0
   192
	@see TRomImageHeader 
sl@0
   193
	*/
sl@0
   194
	TLinAddr iSecondaryFile;
sl@0
   195
	
sl@0
   196
	
sl@0
   197
	/**
sl@0
   198
	A computed constant that causes the 32-bit checksum of the image to equal
sl@0
   199
	the value specified by the "romchecksum" keyword.
sl@0
   200
	*/
sl@0
   201
	TUint iCheckSum;
sl@0
   202
	
sl@0
   203
	
sl@0
   204
	/**
sl@0
   205
	A unique number identifying the hardware for which this ROM image
sl@0
   206
	has been built.
sl@0
   207
sl@0
   208
    Note that this is only used for testing purposes.
sl@0
   209
	*/
sl@0
   210
	TUint32 iHardware;
sl@0
   211
	
sl@0
   212
	
sl@0
   213
	/**
sl@0
   214
	A bitmask identifying which of the languages are supported by the ROM image,
sl@0
   215
	as specified by the "languages" keyword.
sl@0
   216
sl@0
   217
    Note that this is only used for testing purposes.
sl@0
   218
	*/
sl@0
   219
	TInt64 iLanguage;
sl@0
   220
	
sl@0
   221
	
sl@0
   222
	/**
sl@0
   223
	Contains the flags that define the security options in force.
sl@0
   224
	
sl@0
   225
	@see TKernelConfigFlags
sl@0
   226
	*/
sl@0
   227
	TUint32 iKernelConfigFlags;
sl@0
   228
sl@0
   229
	/**
sl@0
   230
	The virtual address of the TRomExceptionSearchTable structure.
sl@0
   231
sl@0
   232
	@see TRomExceptionSearchTable
sl@0
   233
	*/
sl@0
   234
	TLinAddr iRomExceptionSearchTable;
sl@0
   235
	
sl@0
   236
	/**
sl@0
   237
	Current size of ROM header (Previously iUnused3)
sl@0
   238
	If value is 0x69966996 then header size = 0x100
sl@0
   239
	*/
sl@0
   240
	TUint32 iRomHeaderSize;
sl@0
   241
	
sl@0
   242
	
sl@0
   243
	/**
sl@0
   244
	The virtual address of the ROM section header, if the ROM is sectioned.
sl@0
   245
	
sl@0
   246
	@see TRomSectionHeader
sl@0
   247
	*/
sl@0
   248
	TLinAddr iRomSectionHeader;
sl@0
   249
	
sl@0
   250
	
sl@0
   251
	/**
sl@0
   252
	The total supervisor data size, i.e. the amount of memory mapped for
sl@0
   253
	the kernel data chunk.
sl@0
   254
	*/
sl@0
   255
	TInt iTotalSvDataSize;
sl@0
   256
	
sl@0
   257
	
sl@0
   258
	/**
sl@0
   259
	The virtual address of the TRomEntry for the Variant file.
sl@0
   260
	
sl@0
   261
	@see TRomEntry
sl@0
   262
	*/
sl@0
   263
	TLinAddr iVariantFile;
sl@0
   264
sl@0
   265
	
sl@0
   266
	/**
sl@0
   267
	The virtual address of TRomEntry for the first extension file, if it exists.
sl@0
   268
	
sl@0
   269
	If there is more than one extension, then the next extension field in
sl@0
   270
	the extensions TRomImageHeader points to the TRomEntry for
sl@0
   271
	that next extension.
sl@0
   272
	
sl@0
   273
    @see TRomImageHeader::iNextExtension
sl@0
   274
   	@see TRomImageHeader
sl@0
   275
	@see TRomEntry
sl@0
   276
	*/
sl@0
   277
	TLinAddr iExtensionFile;
sl@0
   278
	
sl@0
   279
	
sl@0
   280
	/**
sl@0
   281
	The virtual adress of the first area to be relocated into RAM, as defined
sl@0
   282
	using the "area" keyword.
sl@0
   283
	*/
sl@0
   284
	TLinAddr iRelocInfo;
sl@0
   285
	
sl@0
   286
	
sl@0
   287
	/**
sl@0
   288
	The old position of the kernel trace mask, see iTraceMask below
sl@0
   289
	*/
sl@0
   290
	TUint32  iOldTraceMask;		// The old location of the kernel tracemask
sl@0
   291
	
sl@0
   292
	
sl@0
   293
	/**
sl@0
   294
	The virtual address of the user data area.
sl@0
   295
	*/
sl@0
   296
	TLinAddr iUserDataAddress;	// non-MMU stuff
sl@0
   297
sl@0
   298
	
sl@0
   299
	/**
sl@0
   300
	The total size of the user data.
sl@0
   301
	*/
sl@0
   302
	TInt iTotalUserDataSize;	// non-MMU stuff
sl@0
   303
	
sl@0
   304
	
sl@0
   305
	/**
sl@0
   306
	A value that is interpreted by the Bootstrap and kernel as the debug port
sl@0
   307
	to be used.
sl@0
   308
	*/
sl@0
   309
	TUint32 iDebugPort;			// semantic is ASSP-specific
sl@0
   310
	
sl@0
   311
	
sl@0
   312
	/**
sl@0
   313
	The ROM version number.
sl@0
   314
	*/
sl@0
   315
	TVersion iVersion;
sl@0
   316
	
sl@0
   317
	
sl@0
   318
	/**
sl@0
   319
	The type of compression used for the image.
sl@0
   320
	
sl@0
   321
	This is a UID, or 0 if there is no compression.
sl@0
   322
	*/
sl@0
   323
	TUint32 iCompressionType;	// compression type used
sl@0
   324
	
sl@0
   325
	
sl@0
   326
	/**
sl@0
   327
	The size of the image after compression.
sl@0
   328
	*/
sl@0
   329
	TUint32 iCompressedSize;	// Size after compression
sl@0
   330
	
sl@0
   331
	
sl@0
   332
	/**
sl@0
   333
	The size of the image before compression.
sl@0
   334
	*/
sl@0
   335
	TUint32 iUncompressedSize;	// Size before compression
sl@0
   336
	
sl@0
   337
	
sl@0
   338
	/**
sl@0
   339
	*/
sl@0
   340
	TUint32 iDisabledCapabilities[2];   // 2==SSecurityInfo::ENCapW
sl@0
   341
sl@0
   342
sl@0
   343
	/**
sl@0
   344
	The initial value for the kernel trace masks.
sl@0
   345
	*/
sl@0
   346
	TUint32  iTraceMask[KNumTraceMask];  // The kernel debug trace masks
sl@0
   347
sl@0
   348
	/**
sl@0
   349
	Initial values for fast-trace filter.
sl@0
   350
	*/
sl@0
   351
	TUint32 iInitialBTraceFilter[8];
sl@0
   352
sl@0
   353
	/**
sl@0
   354
	Initial value for size of fast-trace buffer.
sl@0
   355
	*/
sl@0
   356
	TInt iInitialBTraceBuffer;
sl@0
   357
sl@0
   358
	/**
sl@0
   359
	Initial value for size of fast-trace mode.
sl@0
   360
	*/
sl@0
   361
	TInt iInitialBTraceMode;
sl@0
   362
sl@0
   363
	/**
sl@0
   364
	Offset, in bytes from ROM start, for the start of the pageable ROM area.
sl@0
   365
	*/
sl@0
   366
	TInt iPageableRomStart;
sl@0
   367
sl@0
   368
	/**
sl@0
   369
	Size, in bytes, of the pageable ROM area.
sl@0
   370
	*/
sl@0
   371
	TInt iPageableRomSize;
sl@0
   372
sl@0
   373
	/**
sl@0
   374
	Offset, in bytes from ROM start, for the page index. (Array of SRomPageInfo objects.)
sl@0
   375
	@internalTechnology
sl@0
   376
	@prototype
sl@0
   377
	*/
sl@0
   378
	TInt iRomPageIndex;
sl@0
   379
sl@0
   380
	/**
sl@0
   381
	@internalTechnology
sl@0
   382
	@prototype
sl@0
   383
	*/
sl@0
   384
	SDemandPagingConfig iDemandPagingConfig;
sl@0
   385
sl@0
   386
	/**
sl@0
   387
	Offset, in bytes from ROM start, for the start of compressed un-paged ROM area
sl@0
   388
	@internalTechnology
sl@0
   389
	@prototype
sl@0
   390
	*/
sl@0
   391
	TUint32 iCompressedUnpagedStart;
sl@0
   392
	
sl@0
   393
	
sl@0
   394
	/**
sl@0
   395
	Size, in bytes of the un-paged part of image after compression.
sl@0
   396
	@internalTechnology
sl@0
   397
	@prototype
sl@0
   398
	*/
sl@0
   399
	TUint32 iUnpagedCompressedSize;
sl@0
   400
	
sl@0
   401
	
sl@0
   402
	/**
sl@0
   403
	Size, in bytes of the un-paged part of image before compression.
sl@0
   404
	@internalTechnology
sl@0
   405
	@prototype
sl@0
   406
	*/
sl@0
   407
	TUint32 iUnpagedUncompressedSize;
sl@0
   408
	
sl@0
   409
	/**
sl@0
   410
	The virtual address at which the start of the HCR repository file is located in the unpaged part of the Core ROM Image.
sl@0
   411
	@internalTechnology
sl@0
   412
	@prototype
sl@0
   413
	*/
sl@0
   414
	TUint32 iHcrFileAddress;
sl@0
   415
	
sl@0
   416
	/**
sl@0
   417
	@internalComponent
sl@0
   418
	*/
sl@0
   419
	TUint32 iSpare[36];   // spare : force size to be correct
sl@0
   420
sl@0
   421
	};
sl@0
   422
sl@0
   423
__ASSERT_COMPILE(sizeof(TRomHeader)==KRomHeaderSize);
sl@0
   424
__ASSERT_COMPILE(SCapabilitySet::ENCapW==2); // TRomHeader::iDisabledCapabilities has hard coded 2 because h2inc.pl does not parse scoped identifiers
sl@0
   425
sl@0
   426
sl@0
   427
sl@0
   428
sl@0
   429
/**
sl@0
   430
@publishedPartner
sl@0
   431
@released
sl@0
   432
sl@0
   433
Contains information about a root directory.
sl@0
   434
sl@0
   435
A variable number of these are contained in a TRomRootDirectoryList structure.
sl@0
   436
sl@0
   437
@see TRomRootDirectoryList
sl@0
   438
*/
sl@0
   439
class TRootDirInfo
sl@0
   440
	{
sl@0
   441
public:
sl@0
   442
    /**
sl@0
   443
    The hardware variant for this root directory entry.
sl@0
   444
    */
sl@0
   445
	TUint iHardwareVariant;
sl@0
   446
	
sl@0
   447
	
sl@0
   448
	/**
sl@0
   449
	The virtual address of the root directory.
sl@0
   450
	
sl@0
   451
	@see TRomDir
sl@0
   452
	*/
sl@0
   453
	TLinAddr iAddressLin;
sl@0
   454
	};
sl@0
   455
sl@0
   456
sl@0
   457
sl@0
   458
sl@0
   459
/**
sl@0
   460
@publishedPartner
sl@0
   461
@released
sl@0
   462
sl@0
   463
A structure that allows you to find the root directories for each hardware
sl@0
   464
Variant supported by the ROM.
sl@0
   465
sl@0
   466
Usually, there is only one Variant and one root directory. However, a ROM can
sl@0
   467
have multiple root directories and directory trees, one for each hardware Variant
sl@0
   468
supported by the ROM. This ensures that the file server only sees the files
sl@0
   469
that are relevant to the hardware on which it is running. In this case, there
sl@0
   470
are multiple entries in the table describing each root directory.
sl@0
   471
*/
sl@0
   472
class TRomRootDirectoryList
sl@0
   473
	{
sl@0
   474
public:
sl@0
   475
    /**
sl@0
   476
    The number of root directory entries.
sl@0
   477
    */
sl@0
   478
	TInt iNumRootDirs;
sl@0
   479
	
sl@0
   480
	
sl@0
   481
	/**
sl@0
   482
	The root directory entries.
sl@0
   483
sl@0
   484
    The number of entries is defined by iNumRootDirs.
sl@0
   485
	*/
sl@0
   486
	TRootDirInfo iRootDir[1];
sl@0
   487
	};
sl@0
   488
sl@0
   489
sl@0
   490
sl@0
   491
sl@0
   492
/**
sl@0
   493
@publishedPartner
sl@0
   494
@released
sl@0
   495
sl@0
   496
The format of a ROM section header.
sl@0
   497
*/
sl@0
   498
class TRomSectionHeader
sl@0
   499
	{
sl@0
   500
public:
sl@0
   501
sl@0
   502
    /**
sl@0
   503
    The ROM version number.
sl@0
   504
    */
sl@0
   505
	TVersion iVersion;
sl@0
   506
	
sl@0
   507
	
sl@0
   508
	/**
sl@0
   509
	A computed constant that causes the 32-bit checksum of the upper
sl@0
   510
	section to equal zero.
sl@0
   511
sl@0
   512
	Upper sections checksum to zero so that the overall ROM checksum in
sl@0
   513
	the TRomHeader is unaffected by changes to this section.
sl@0
   514
	
sl@0
   515
	@see TRomHeader
sl@0
   516
	*/
sl@0
   517
	TUint iCheckSum;
sl@0
   518
	
sl@0
   519
	
sl@0
   520
	/**
sl@0
   521
	The date and time that the ROM image was built, in microseconds.
sl@0
   522
	*/
sl@0
   523
	TInt64 iTime;
sl@0
   524
sl@0
   525
	
sl@0
   526
	/**
sl@0
   527
	A bitmask identifying which of the languages are supported by the ROM image,
sl@0
   528
	as specified by the "languages" keyword.
sl@0
   529
    */
sl@0
   530
	TInt64 iLanguage;
sl@0
   531
	};
sl@0
   532
//
sl@0
   533
sl@0
   534
sl@0
   535
sl@0
   536
sl@0
   537
/**
sl@0
   538
@publishedPartner
sl@0
   539
@released
sl@0
   540
sl@0
   541
A structure that describes a file or a directory.
sl@0
   542
*/
sl@0
   543
class TRomEntry
sl@0
   544
	{
sl@0
   545
public:
sl@0
   546
    
sl@0
   547
     
sl@0
   548
    /**
sl@0
   549
    The size of the file.
sl@0
   550
    */
sl@0
   551
	TInt iSize;
sl@0
   552
	
sl@0
   553
	
sl@0
   554
	/**
sl@0
   555
	The virtual address of the file, or of a TRomDir structure if this entry
sl@0
   556
	describes another directory.
sl@0
   557
	
sl@0
   558
	@see TRomDir
sl@0
   559
	*/
sl@0
   560
	TUint32 iAddressLin;
sl@0
   561
sl@0
   562
sl@0
   563
	/**
sl@0
   564
	Attributes.
sl@0
   565
	*/
sl@0
   566
	TUint8 iAtt;
sl@0
   567
sl@0
   568
sl@0
   569
	/**
sl@0
   570
	The length of the file or directory name.
sl@0
   571
	*/
sl@0
   572
	TUint8 iNameLength;
sl@0
   573
sl@0
   574
sl@0
   575
	/**
sl@0
   576
	A variable length field containing the file or directory name.
sl@0
   577
	*/
sl@0
   578
	TUint8 iName[2];
sl@0
   579
	};
sl@0
   580
sl@0
   581
sl@0
   582
sl@0
   583
sl@0
   584
/**
sl@0
   585
@publishedPartner
sl@0
   586
@released
sl@0
   587
sl@0
   588
The size of the fixed part of a TRomEntry structure.
sl@0
   589
*/
sl@0
   590
const TInt KRomEntrySize=(sizeof(TRomEntry)-2);
sl@0
   591
sl@0
   592
sl@0
   593
sl@0
   594
sl@0
   595
//
sl@0
   596
class TRomDirSortInfo;
sl@0
   597
sl@0
   598
/**
sl@0
   599
@publishedPartner
sl@0
   600
@released
sl@0
   601
sl@0
   602
A structure that describes the first part of a ROM directory.
sl@0
   603
sl@0
   604
This part of a ROM directory is a sequence of variable length entries,
sl@0
   605
each describing a file or a subdirectory, in the order that the members
sl@0
   606
were specified in the original obey file; the variable length entries are
sl@0
   607
the TRomEntry structures that follow the iSize member.
sl@0
   608
sl@0
   609
This part of the ROM directory is followed by a structure defined
sl@0
   610
by TRomDirSortInfo, which contains a pair of sorted tables suitable for
sl@0
   611
a binary search.
sl@0
   612
sl@0
   613
@see TRomDirSortInfo
sl@0
   614
*/
sl@0
   615
class TRomDir
sl@0
   616
	{
sl@0
   617
public:
sl@0
   618
	inline const TRomDirSortInfo* SortInfo() const;
sl@0
   619
	inline const TRomEntry* SortedEntry(TInt aIndex) const;
sl@0
   620
	inline TInt SubDirCount() const;
sl@0
   621
	inline TInt FileCount() const;
sl@0
   622
	inline TInt EntryCount() const;
sl@0
   623
	TInt BinarySearch(const TDesC& aName, TInt aLengthLimit, TInt aMode, TBool aDir) const;
sl@0
   624
	const TRomDir* FindLeafDir(const TDesC& aPath) const;
sl@0
   625
public:
sl@0
   626
sl@0
   627
    /**
sl@0
   628
    The number of bytes occupied by the set of TRomEntry structures
sl@0
   629
    that follow this field.
sl@0
   630
    
sl@0
   631
    @see TRomDir::iEntry
sl@0
   632
    */
sl@0
   633
	TInt iSize;
sl@0
   634
sl@0
   635
	
sl@0
   636
	/**
sl@0
   637
	A variable number of entries, each of which describes a file or a directory.
sl@0
   638
	
sl@0
   639
	Each entry is 4-byte aligned, and may have padding to ensure that the entry
sl@0
   640
	is 4-bye aligned.
sl@0
   641
	*/
sl@0
   642
	TRomEntry iEntry;
sl@0
   643
	};
sl@0
   644
sl@0
   645
sl@0
   646
sl@0
   647
sl@0
   648
/**
sl@0
   649
@publishedPartner
sl@0
   650
@released
sl@0
   651
sl@0
   652
A structure that describes the second part of a ROM directory.
sl@0
   653
sl@0
   654
It contains a pair of sorted tables suitable for
sl@0
   655
a binary search. The sorted tables contain unsigned 16-bit scaled offsets,
sl@0
   656
which point to the start of the corresponding TRomEntry in the TRomDir.
sl@0
   657
sl@0
   658
@see TRomDir
sl@0
   659
*/
sl@0
   660
class TRomDirSortInfo
sl@0
   661
	{
sl@0
   662
public:
sl@0
   663
sl@0
   664
	/**
sl@0
   665
    The number of subdirectories in this directory.
sl@0
   666
	*/
sl@0
   667
	TUint16	iSubDirCount;		// number of subdirectories in this directory
sl@0
   668
	
sl@0
   669
	
sl@0
   670
	/**
sl@0
   671
	The number of files in this directory.
sl@0
   672
	*/
sl@0
   673
	TUint16 iFileCount;			// number of non-directory files in this directory
sl@0
   674
	
sl@0
   675
	
sl@0
   676
	/**
sl@0
   677
	The two sorted tables:
sl@0
   678
	
sl@0
   679
	1. First one is a table of 16-bit scaled offsets to the directory entries.
sl@0
   680
	
sl@0
   681
	2. Second one is a table of 16-bit scaled ofsets to the file entries.
sl@0
   682
	   This table starts at offset 2*iSubDirCount from the start of the first table.
sl@0
   683
	   
sl@0
   684
	If the offset is X, then the corresponding TRomEntry is at address:
sl@0
   685
	@code
sl@0
   686
	4*X +(char*)address of the first TRomEntry
sl@0
   687
	@endcode
sl@0
   688
	For example, the first entry is at offset zero.
sl@0
   689
	
sl@0
   690
	The entries are sorted in the order of the UTF-8 representation of
sl@0
   691
	the names in a case insensitive way (compare the C function stricmp()).
sl@0
   692
	In effect, this folds upper and lowercase ASCII characters but leaves all
sl@0
   693
	other Unicode characters unchanged.
sl@0
   694
	*/
sl@0
   695
	TUint16 iEntryOffset[1];	// offsets of each entry from TRomDir::iEntry; extend
sl@0
   696
								// order of offsets is directories first, then files, lexicographic order within each group
sl@0
   697
	};
sl@0
   698
sl@0
   699
sl@0
   700
/**
sl@0
   701
Gets a pointer to the start of the second part of the ROM directory,
sl@0
   702
as described by the TRomDirSortInfo structure.
sl@0
   703
sl@0
   704
@return The pointer to the start of the second part of the ROM directory.
sl@0
   705
*/
sl@0
   706
inline const TRomDirSortInfo* TRomDir::SortInfo() const
sl@0
   707
	{ return (const TRomDirSortInfo*)( ((TLinAddr)&iEntry) + ( (iSize+sizeof(TUint32)-1) &~ (sizeof(TUint32)-1) )); }
sl@0
   708
sl@0
   709
sl@0
   710
sl@0
   711
sl@0
   712
/**
sl@0
   713
Gets the TRomEntry corresponding to the file or directory located at
sl@0
   714
the specified index position within the sorted tables.
sl@0
   715
sl@0
   716
@param aIndex The index of the entry within the sorted tables.
sl@0
   717
              Note that for the purpose of this function, the two tables
sl@0
   718
              are treated as one single table.
sl@0
   719
              
sl@0
   720
@return The required TRomEntry              
sl@0
   721
*/
sl@0
   722
inline const TRomEntry* TRomDir::SortedEntry(TInt aIndex) const
sl@0
   723
	{
sl@0
   724
	const TRomDirSortInfo* s = SortInfo();
sl@0
   725
	return (const TRomEntry*)(((TLinAddr)&iEntry) + s->iEntryOffset[aIndex] * sizeof(TUint32));
sl@0
   726
	}
sl@0
   727
sl@0
   728
sl@0
   729
sl@0
   730
sl@0
   731
/**
sl@0
   732
Gets the number of subdirectories in the directory.
sl@0
   733
sl@0
   734
@return The number of subdirectories.
sl@0
   735
*/
sl@0
   736
inline TInt TRomDir::SubDirCount() const
sl@0
   737
	{ return SortInfo()->iSubDirCount; }
sl@0
   738
sl@0
   739
	
sl@0
   740
	
sl@0
   741
	
sl@0
   742
/**
sl@0
   743
Gets the number of files in the directory.
sl@0
   744
sl@0
   745
@return The number of files.
sl@0
   746
*/	
sl@0
   747
inline TInt TRomDir::FileCount() const
sl@0
   748
	{ return SortInfo()->iFileCount; }
sl@0
   749
sl@0
   750
sl@0
   751
sl@0
   752
sl@0
   753
/**
sl@0
   754
Gets the total number of files and subdirectories in the directory.
sl@0
   755
sl@0
   756
@return The total number of files and subdirectories.
sl@0
   757
*/	
sl@0
   758
inline TInt TRomDir::EntryCount() const
sl@0
   759
	{
sl@0
   760
	const TRomDirSortInfo* s = SortInfo();
sl@0
   761
	return s->iSubDirCount + s->iFileCount;
sl@0
   762
	}
sl@0
   763
sl@0
   764
sl@0
   765
sl@0
   766
sl@0
   767
//
sl@0
   768
// Header of ROM image files under the new scheme. (dlls & exes)
sl@0
   769
//
sl@0
   770
/**
sl@0
   771
@publishedPartner
sl@0
   772
@released
sl@0
   773
*/
sl@0
   774
const TUint32 KRomImageFlagPrimary			=0x80000000u;
sl@0
   775
sl@0
   776
/**
sl@0
   777
@publishedPartner
sl@0
   778
@released
sl@0
   779
*/
sl@0
   780
const TUint32 KRomImageFlagVariant			=0x40000000u;
sl@0
   781
sl@0
   782
/**
sl@0
   783
@publishedPartner
sl@0
   784
@released
sl@0
   785
*/
sl@0
   786
const TUint32 KRomImageFlagExtension		=0x20000000u;
sl@0
   787
sl@0
   788
/**
sl@0
   789
@publishedPartner
sl@0
   790
@released
sl@0
   791
*/
sl@0
   792
const TUint32 KRomImageFlagDevice			=0x10000000u;
sl@0
   793
sl@0
   794
/**
sl@0
   795
@publishedPartner
sl@0
   796
@released
sl@0
   797
*/
sl@0
   798
const TUint32 KRomImageFlagsKernelMask		=0xf0000000u;
sl@0
   799
sl@0
   800
/**
sl@0
   801
@publishedPartner
sl@0
   802
@released
sl@0
   803
*/
sl@0
   804
const TUint32 KRomImageFlagSecondary		=0x08000000u;
sl@0
   805
sl@0
   806
/**
sl@0
   807
@publishedPartner
sl@0
   808
@released
sl@0
   809
*/
sl@0
   810
const TUint32 KRomImageFlagData				=0x04000000u;	// image has data and is not extension or variant
sl@0
   811
sl@0
   812
/**
sl@0
   813
@publishedPartner
sl@0
   814
@released
sl@0
   815
*/
sl@0
   816
const TUint32 KRomImageFlagDataInit			=0x02000000u;	// image or non-EXE dependencies would require data initialisation
sl@0
   817
sl@0
   818
/**
sl@0
   819
@publishedPartner
sl@0
   820
@released
sl@0
   821
*/
sl@0
   822
const TUint32 KRomImageFlagDataPresent		=0x01000000u;	// image or any dependencies have data
sl@0
   823
sl@0
   824
/**
sl@0
   825
@publishedPartner
sl@0
   826
@released
sl@0
   827
*/
sl@0
   828
const TUint32 KRomImageFlagExeInTree		=0x00800000u;	// image depends on EXE
sl@0
   829
sl@0
   830
/**
sl@0
   831
@publishedPartner
sl@0
   832
@released
sl@0
   833
*/
sl@0
   834
const TUint32 KRomImageFlagDll				=0x00000001u;
sl@0
   835
sl@0
   836
/**
sl@0
   837
@publishedPartner
sl@0
   838
@released
sl@0
   839
*/
sl@0
   840
const TUint32 KRomImageFlagFixedAddressExe	=0x00000004u;
sl@0
   841
sl@0
   842
/**
sl@0
   843
@publishedPartner
sl@0
   844
@released
sl@0
   845
*/
sl@0
   846
const TUint32 KRomImageABIMask				=0x00000018u;
sl@0
   847
sl@0
   848
/**
sl@0
   849
@publishedPartner
sl@0
   850
@released
sl@0
   851
*/
sl@0
   852
const TUint32 KRomImageABI_GCC98r2			=0x00000000u;	// for ARM
sl@0
   853
sl@0
   854
/**
sl@0
   855
@publishedPartner
sl@0
   856
@released
sl@0
   857
*/
sl@0
   858
const TUint32 KRomImageABI_EABI				=0x00000008u;	// for ARM
sl@0
   859
sl@0
   860
/**
sl@0
   861
@publishedPartner
sl@0
   862
@released
sl@0
   863
*/
sl@0
   864
const TUint32 KRomImageEptMask				=0x000000e0u;	// entry point type
sl@0
   865
sl@0
   866
/**
sl@0
   867
@publishedPartner
sl@0
   868
@released
sl@0
   869
*/
sl@0
   870
const TInt	  KRomImageEptShift				=5;
sl@0
   871
sl@0
   872
/**
sl@0
   873
@publishedPartner
sl@0
   874
@released
sl@0
   875
*/
sl@0
   876
const TUint32 KRomImageEpt_Eka1				=0x00000000u;
sl@0
   877
sl@0
   878
/**
sl@0
   879
@publishedPartner
sl@0
   880
@released
sl@0
   881
*/
sl@0
   882
const TUint32 KRomImageEpt_Eka2				=0x00000020u;
sl@0
   883
sl@0
   884
/**
sl@0
   885
Flag to indicate the image should not be code paged.
sl@0
   886
@internalTechnology
sl@0
   887
@released
sl@0
   888
*/
sl@0
   889
const TUint KRomImageFlagCodeUnpaged			=0x00000100u;
sl@0
   890
sl@0
   891
sl@0
   892
/**
sl@0
   893
Flag to indicate the image should be code paged.
sl@0
   894
@internalTechnology
sl@0
   895
@released
sl@0
   896
*/
sl@0
   897
const TUint KRomImageFlagCodePaged				=0x00000200u;
sl@0
   898
sl@0
   899
sl@0
   900
/**
sl@0
   901
@internalTechnology
sl@0
   902
@released
sl@0
   903
Flag to indicate when named symbol export data present in image
sl@0
   904
*/
sl@0
   905
const TUint KRomImageNmdExpData				=0x00000400u;
sl@0
   906
sl@0
   907
/**
sl@0
   908
@internalTechnology
sl@0
   909
@released
sl@0
   910
Flag to indicate debuggability of this image.
sl@0
   911
*/
sl@0
   912
const TUint KRomImageDebuggable				=0x00000800u;
sl@0
   913
sl@0
   914
/**
sl@0
   915
Flag to indicate the image will default to not be data paged,
sl@0
   916
this can be overridden when creating chunks, threads and user heaps.
sl@0
   917
@internalTechnology
sl@0
   918
@released
sl@0
   919
*/
sl@0
   920
const TUint KRomImageFlagDataUnpaged			= 0x00001000u;
sl@0
   921
sl@0
   922
/**
sl@0
   923
Flag to indicate the image will default to be data paged,
sl@0
   924
this can be overridden when creating chunks, threads and user heaps.
sl@0
   925
@internalTechnology
sl@0
   926
@released
sl@0
   927
*/
sl@0
   928
const TUint KRomImageFlagDataPaged			= 0x00002000u;
sl@0
   929
sl@0
   930
/**
sl@0
   931
Mask for the data paging flag bits.
sl@0
   932
@internalTechnology
sl@0
   933
@released
sl@0
   934
*/
sl@0
   935
const TUint KRomImageDataPagingMask	= KRomImageFlagDataUnpaged | KRomImageFlagDataPaged;
sl@0
   936
sl@0
   937
/**
sl@0
   938
@released
sl@0
   939
Flag to indicate SMP safety of this image.
sl@0
   940
*/
sl@0
   941
const TUint KRomImageSMPSafe			=0x00004000u;
sl@0
   942
sl@0
   943
class TDllRefTable;
sl@0
   944
sl@0
   945
/**
sl@0
   946
@publishedPartner
sl@0
   947
@released
sl@0
   948
sl@0
   949
The format of the header for a ROM file image.
sl@0
   950
sl@0
   951
The structure of a file image is based on the native image file format,
sl@0
   952
but this can be compressed in the ROM image, as the relocation information
sl@0
   953
and the .idata section are discarded once the file is fixed up.
sl@0
   954
sl@0
   955
The Import Address Table (IAT) is also removed and each reference to
sl@0
   956
an IAT entry is converted into a reference to the associated Export Directory
sl@0
   957
entry in the corresponding DLL.
sl@0
   958
sl@0
   959
ROM file images have the following sections:
sl@0
   960
sl@0
   961
@code
sl@0
   962
The header (as described by this structure)
sl@0
   963
.text  - code
sl@0
   964
.rdata - constant (read-only) data
sl@0
   965
.edata - the export directory
sl@0
   966
.data  - initialised data that is copied to RAM when the executable runs.
sl@0
   967
The DLL reference table (a TDllRefTable structure), which is a list of DLLs
sl@0
   968
used by the executable.
sl@0
   969
@endcode
sl@0
   970
sl@0
   971
@see TRomImageHeader::iDllRefTable
sl@0
   972
@see TDllRefTable
sl@0
   973
*/
sl@0
   974
class TRomImageHeader
sl@0
   975
	{
sl@0
   976
public:
sl@0
   977
sl@0
   978
    /**
sl@0
   979
    The UID1 for the file.
sl@0
   980
    
sl@0
   981
    @see TUidType
sl@0
   982
    */
sl@0
   983
	TUint32	iUid1;
sl@0
   984
sl@0
   985
	
sl@0
   986
    /**
sl@0
   987
    The UID2 for the file.
sl@0
   988
sl@0
   989
    @see TUidType
sl@0
   990
    */
sl@0
   991
	TUint32	iUid2;
sl@0
   992
sl@0
   993
	
sl@0
   994
    /**
sl@0
   995
    The UID3 for the file.
sl@0
   996
sl@0
   997
    @see TUidType
sl@0
   998
    */
sl@0
   999
	TUint32	iUid3;
sl@0
  1000
	
sl@0
  1001
	
sl@0
  1002
	/**
sl@0
  1003
	The checksum of the UIDs
sl@0
  1004
	*/
sl@0
  1005
	TUint32	iUidChecksum;
sl@0
  1006
	
sl@0
  1007
	
sl@0
  1008
	/**
sl@0
  1009
	The entrypoint of this executable, i.e. the offset within this file.
sl@0
  1010
	*/
sl@0
  1011
	TUint32 iEntryPoint;
sl@0
  1012
	
sl@0
  1013
	
sl@0
  1014
	/**
sl@0
  1015
	This executables code address.
sl@0
  1016
	*/
sl@0
  1017
	TUint32 iCodeAddress;
sl@0
  1018
sl@0
  1019
sl@0
  1020
	/**
sl@0
  1021
	This executables data address.
sl@0
  1022
	*/
sl@0
  1023
	TUint32 iDataAddress;
sl@0
  1024
sl@0
  1025
	
sl@0
  1026
	/**
sl@0
  1027
	The size of the code.
sl@0
  1028
	
sl@0
  1029
	This includes the size of the constant data.
sl@0
  1030
	*/
sl@0
  1031
	TInt iCodeSize;
sl@0
  1032
	
sl@0
  1033
	
sl@0
  1034
	/**
sl@0
  1035
	The size of the executable code.
sl@0
  1036
	
sl@0
  1037
	This is the value of (iCodeSize - the size of the constant data).
sl@0
  1038
	*/
sl@0
  1039
	TInt iTextSize;
sl@0
  1040
	
sl@0
  1041
	
sl@0
  1042
	/**
sl@0
  1043
	The data size.
sl@0
  1044
	*/
sl@0
  1045
	TInt iDataSize;
sl@0
  1046
	
sl@0
  1047
	
sl@0
  1048
	/**
sl@0
  1049
	The size of the .bss (the zero-filled data)
sl@0
  1050
	*/
sl@0
  1051
	TInt iBssSize;
sl@0
  1052
	
sl@0
  1053
	
sl@0
  1054
	/**
sl@0
  1055
	The minimum size of the heap.
sl@0
  1056
	*/
sl@0
  1057
	TInt iHeapSizeMin;
sl@0
  1058
	
sl@0
  1059
	
sl@0
  1060
	/**
sl@0
  1061
	The maximum size of the heap.
sl@0
  1062
	*/
sl@0
  1063
	TInt iHeapSizeMax;
sl@0
  1064
	
sl@0
  1065
	
sl@0
  1066
	/**
sl@0
  1067
	The size of the stack.
sl@0
  1068
	*/
sl@0
  1069
	TInt iStackSize;
sl@0
  1070
	
sl@0
  1071
	
sl@0
  1072
	/**
sl@0
  1073
	The address of the DLL reference table.
sl@0
  1074
	
sl@0
  1075
	@see TDllRefTable
sl@0
  1076
	*/
sl@0
  1077
	TDllRefTable* iDllRefTable;
sl@0
  1078
	
sl@0
  1079
	
sl@0
  1080
	/**
sl@0
  1081
	The number of functions exported by this executable.
sl@0
  1082
	*/
sl@0
  1083
	TInt iExportDirCount;
sl@0
  1084
	
sl@0
  1085
	
sl@0
  1086
	/**
sl@0
  1087
	The address of the export directory, which is a simple list of functions
sl@0
  1088
	that can be indexed by ordinal.
sl@0
  1089
	*/
sl@0
  1090
	TUint32 iExportDir;
sl@0
  1091
	
sl@0
  1092
	
sl@0
  1093
	/**
sl@0
  1094
	Security information, details of which are internal to Symbian.
sl@0
  1095
	*/
sl@0
  1096
	SSecurityInfo iS;
sl@0
  1097
	
sl@0
  1098
	
sl@0
  1099
	/**
sl@0
  1100
	The version number of the tools used to generate this file image.
sl@0
  1101
	*/
sl@0
  1102
	TVersion iToolsVersion;
sl@0
  1103
	
sl@0
  1104
	
sl@0
  1105
	/**
sl@0
  1106
	Flags field.
sl@0
  1107
	*/
sl@0
  1108
	TUint32 iFlags;
sl@0
  1109
	
sl@0
  1110
	
sl@0
  1111
	/**
sl@0
  1112
	The priority of the process.
sl@0
  1113
	*/
sl@0
  1114
	TProcessPriority iPriority;
sl@0
  1115
	
sl@0
  1116
	
sl@0
  1117
	/**
sl@0
  1118
	The virtual base address of the data and .bss, where the process expects
sl@0
  1119
	its data chunk to be when it runs.
sl@0
  1120
	*/
sl@0
  1121
	TUint32 iDataBssLinearBase;
sl@0
  1122
	
sl@0
  1123
	
sl@0
  1124
	/**
sl@0
  1125
	The address of the TRomEntry for the next extension file.
sl@0
  1126
	
sl@0
  1127
	This field is only used if there is more than one extension.
sl@0
  1128
	The first extension is found using the TRomHeader.
sl@0
  1129
	
sl@0
  1130
	@see TRomEntry
sl@0
  1131
	@see TRomHeader
sl@0
  1132
	*/
sl@0
  1133
	TLinAddr iNextExtension;
sl@0
  1134
	
sl@0
  1135
	
sl@0
  1136
	/**
sl@0
  1137
	A number denoting the hardware Variant.
sl@0
  1138
	
sl@0
  1139
	It is used to determine whether this executable can run
sl@0
  1140
	on a given system.
sl@0
  1141
	*/
sl@0
  1142
	TUint32 iHardwareVariant;
sl@0
  1143
	
sl@0
  1144
	
sl@0
  1145
	/**
sl@0
  1146
	The total data size, including space reserved for DLLs
sl@0
  1147
	*/
sl@0
  1148
	TInt iTotalDataSize;	// data+bss + space reserved for DLLs
sl@0
  1149
	
sl@0
  1150
	
sl@0
  1151
	/**
sl@0
  1152
	The module version.
sl@0
  1153
	*/
sl@0
  1154
	TUint32 iModuleVersion;
sl@0
  1155
sl@0
  1156
	/**
sl@0
  1157
	The address of the Exception Descriptor if present.
sl@0
  1158
	0 if no Exception descriptor
sl@0
  1159
	*/
sl@0
  1160
	TLinAddr iExceptionDescriptor;
sl@0
  1161
	};	
sl@0
  1162
	
sl@0
  1163
	
sl@0
  1164
	
sl@0
  1165
	
sl@0
  1166
//
sl@0
  1167
// Header for extension ROMs
sl@0
  1168
// Equivalent to TRomHeader
sl@0
  1169
//
sl@0
  1170
sl@0
  1171
/**
sl@0
  1172
@publishedPartner
sl@0
  1173
@released
sl@0
  1174
sl@0
  1175
The format of a ROM extension header.
sl@0
  1176
*/
sl@0
  1177
class TExtensionRomHeader
sl@0
  1178
	{	
sl@0
  1179
public:
sl@0
  1180
    
sl@0
  1181
    /**
sl@0
  1182
    The extension ROM image version number.
sl@0
  1183
    */
sl@0
  1184
	TVersion iVersion;
sl@0
  1185
	
sl@0
  1186
	
sl@0
  1187
	/**
sl@0
  1188
	The virtual address of the base of the extension ROM.
sl@0
  1189
	*/
sl@0
  1190
	TLinAddr iRomBase;
sl@0
  1191
	
sl@0
  1192
	
sl@0
  1193
	/**
sl@0
  1194
	The size of the extension ROM image.
sl@0
  1195
	*/
sl@0
  1196
	TUint32 iRomSize;
sl@0
  1197
	
sl@0
  1198
	
sl@0
  1199
	/**
sl@0
  1200
	The virtual address of the TRomRootDirList structure for
sl@0
  1201
	the combined kernel+extension ROM image.
sl@0
  1202
	
sl@0
  1203
	@see TRomRootDirList
sl@0
  1204
	*/
sl@0
  1205
	TLinAddr iRomRootDirectoryList;
sl@0
  1206
	
sl@0
  1207
	
sl@0
  1208
	/**
sl@0
  1209
	The date and time that the extension ROM image was built, in microseconds.
sl@0
  1210
	*/
sl@0
  1211
	TInt64 iTime;
sl@0
  1212
	
sl@0
  1213
	
sl@0
  1214
	/**
sl@0
  1215
	The extension ROM image checksum
sl@0
  1216
	*/
sl@0
  1217
	TUint iCheckSum;
sl@0
  1218
sl@0
  1219
sl@0
  1220
	//
sl@0
  1221
	/**
sl@0
  1222
	Copy of the kernel ROM image version number.
sl@0
  1223
	*/
sl@0
  1224
	TVersion iKernelVersion;
sl@0
  1225
	
sl@0
  1226
	
sl@0
  1227
	/**
sl@0
  1228
	Copy of the kernel ROM image build date & time.
sl@0
  1229
	*/
sl@0
  1230
	TInt64 iKernelTime;
sl@0
  1231
	
sl@0
  1232
	
sl@0
  1233
	/**
sl@0
  1234
	Copy of the kernel ROM image checksum.
sl@0
  1235
	*/
sl@0
  1236
	TUint iKernelCheckSum;
sl@0
  1237
	//
sl@0
  1238
sl@0
  1239
sl@0
  1240
	/**
sl@0
  1241
	The type of compression used for the image.
sl@0
  1242
	
sl@0
  1243
	This is a UID, or 0 if there is no compression.
sl@0
  1244
	*/
sl@0
  1245
	TUint32 iCompressionType;	// compression type used
sl@0
  1246
	
sl@0
  1247
	
sl@0
  1248
	/**
sl@0
  1249
	The size of the image after compression.
sl@0
  1250
	*/
sl@0
  1251
	TUint32 iCompressedSize;	// Size after compression
sl@0
  1252
	
sl@0
  1253
	
sl@0
  1254
	/**
sl@0
  1255
	The size of the image before compression.
sl@0
  1256
	*/
sl@0
  1257
	TUint32 iUncompressedSize;	// Size before compression
sl@0
  1258
	
sl@0
  1259
	
sl@0
  1260
	/**
sl@0
  1261
	The virtual address of the TRomExceptionSearchTable structure.
sl@0
  1262
sl@0
  1263
	@see TRomExceptionSearchTable
sl@0
  1264
	*/
sl@0
  1265
	TLinAddr iRomExceptionSearchTable;
sl@0
  1266
sl@0
  1267
	
sl@0
  1268
	/**
sl@0
  1269
	Reserved for future use.
sl@0
  1270
	*/
sl@0
  1271
	TUint32 iPad[32-15]; // sizeof(TExtensionRomHeader)=128
sl@0
  1272
	};
sl@0
  1273
sl@0
  1274
sl@0
  1275
sl@0
  1276
sl@0
  1277
sl@0
  1278
/**
sl@0
  1279
@publishedPartner
sl@0
  1280
@released
sl@0
  1281
sl@0
  1282
A list of DLLs that an executable needs in order to run.
sl@0
  1283
sl@0
  1284
Each DLL referenced in this list has a pointer to a TRomImageHeader structure
sl@0
  1285
that describes that DLL. This allows the DLL loader to search
sl@0
  1286
a dependency chain, and ensure that all required DLLs are loaded.
sl@0
  1287
sl@0
  1288
@see TRomImageHeader
sl@0
  1289
*/
sl@0
  1290
class TDllRefTable
sl@0
  1291
	{
sl@0
  1292
public:
sl@0
  1293
sl@0
  1294
    /**
sl@0
  1295
    Flags field.
sl@0
  1296
    */
sl@0
  1297
	TUint16 iFlags;
sl@0
  1298
	
sl@0
  1299
	
sl@0
  1300
	/**
sl@0
  1301
	The number of referenced DLLs in this list.
sl@0
  1302
	*/
sl@0
  1303
	TUint16 iNumberOfEntries;
sl@0
  1304
	
sl@0
  1305
	
sl@0
  1306
	/**
sl@0
  1307
	A set of pointers to the TRomImageHeader structures for each referenced DLL.
sl@0
  1308
	*/
sl@0
  1309
	TRomImageHeader* iEntry[1];
sl@0
  1310
	};
sl@0
  1311
sl@0
  1312
#endif
sl@0
  1313