21c9a571bafe072ebcda0f91bd0e0765ed94892a
[openafs.git] / src / WINNT / afsd / cm_memmap.h
1 /*
2  * Copyright 2004, Secure Endpoints Inc.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef CM_MEMMAP_H
11 #define CM_MEMMAP_H 1
12
13 #define CM_CONFIG_DATA_MAGIC            ('A' | 'F'<<8 | 'S'<<16 | 'D'<<24)
14
15 typedef struct cm_config_data {
16     afs_uint32          size;
17     afs_uint32          magic;
18     CHAR *              baseAddress;
19
20     afs_uint32          stats;
21     afs_uint32          chunkSize;
22     afs_uint32          blockSize;
23     afs_uint64          bufferSize;
24     afs_uint32          cacheType;
25     afs_uint32          dirty;
26
27     cm_volume_t *       volumeBaseAddress;
28     cm_cell_t   *       cellBaseAddress; 
29     cm_aclent_t *       aclBaseAddress;
30     cm_scache_t *       scacheBaseAddress;
31     cm_nc_t     *       dnlcBaseAddress;
32     cm_buf_t    *       bufHeaderBaseAddress;
33     char *              bufDataBaseAddress;
34     char *              bufEndOfData;
35
36     cm_volume_t *       allVolumesp;
37     afs_uint32          currentVolumes;
38     afs_uint32          maxVolumes;
39
40     cm_cell_t   *       allCellsp;
41     afs_uint32          currentCells;
42     afs_uint32          maxCells;
43
44     cm_volume_t *       rootVolumep;
45     cm_cell_t   *       rootCellp;
46     cm_fid_t            rootFid;
47     cm_scache_t *       rootSCachep;
48     cm_scache_t         fakeSCache;
49     afs_uint64          fakeDirVersion;
50
51     cm_aclent_t *       aclLRUp;
52     cm_aclent_t *       aclLRUEndp;
53
54     cm_scache_t **      scacheHashTablep;
55     afs_uint32          scacheHashTableSize;
56
57     cm_scache_t *       allSCachesp;
58     afs_uint32          currentSCaches;
59     afs_uint32          maxSCaches;
60     cm_scache_t *       scacheLRUFirstp;
61     cm_scache_t *       scacheLRULastp;
62
63     cm_cell_t   **      cellNameHashTablep;
64     cm_cell_t   **      cellIDHashTablep;
65     afs_uint32          cellHashTableSize;
66
67     cm_volume_t **      volumeNameHashTablep;
68     cm_volume_t **      volumeRWIDHashTablep;
69     cm_volume_t **      volumeROIDHashTablep;
70     cm_volume_t **      volumeBKIDHashTablep;
71     afs_uint32          volumeHashTableSize;
72     cm_volume_t *       volumeLRUFirstp;
73     cm_volume_t *       volumeLRULastp;
74
75     cm_nc_t     *       ncfreelist;
76     cm_nc_t     *       nameCache;
77     cm_nc_t     **      nameHash; 
78
79     cm_buf_t    *       buf_freeListp;
80     cm_buf_t    *       buf_freeListEndp;
81     cm_buf_t    *       buf_dirtyListp;
82     cm_buf_t    *       buf_dirtyListEndp;
83     cm_buf_t    **      buf_scacheHashTablepp;
84     cm_buf_t    **      buf_fileHashTablepp;
85     cm_buf_t    *       buf_allp;
86     afs_uint64          buf_nbuffers;
87     afs_uint32          buf_blockSize;
88     afs_uint32          buf_hashSize;
89     afs_uint64          buf_nOrigBuffers;
90     afs_uint64          buf_reservedBufs;
91     afs_uint64          buf_maxReservedBufs;
92     afs_uint64          buf_reserveWaiting;
93
94     time_t              mountRootGen;
95     afsUUID             Uuid;
96     DWORD               volSerialNumber;
97     CHAR                Sid[6 * sizeof(DWORD)];
98 } cm_config_data_t;
99
100 extern cm_config_data_t cm_data;
101
102 afs_uint64 GranularityAdjustment(afs_uint64 size);
103 afs_uint64 ComputeSizeOfConfigData(void);
104 afs_uint64 ComputeSizeOfVolumes(DWORD maxvols);
105 afs_uint64 ComputeSizeOfCells(DWORD maxcells);
106 afs_uint64 ComputeSizeOfACLCache(DWORD stats);
107 afs_uint64 ComputeSizeOfSCache(DWORD stats);
108 afs_uint64 ComputeSizeOfSCacheHT(DWORD stats);
109 afs_uint64 ComputeSizeOfDNLCache(void);
110 afs_uint64 ComputeSizeOfDataBuffers(afs_uint64 cacheBlocks, DWORD blockSize);
111 afs_uint64 ComputeSizeOfDataHT(afs_uint64 cacheBlocks);
112 afs_uint64 ComputeSizeOfDataHeaders(afs_uint64 cacheBlocks);
113 afs_uint64 ComputeSizeOfMappingFile(DWORD stats, DWORD maxVols, DWORD maxCells, DWORD chunkSize, afs_uint64 cacheBlocks, DWORD blockSize);
114 PSECURITY_ATTRIBUTES CreateCacheFileSA();
115 VOID  FreeCacheFileSA(PSECURITY_ATTRIBUTES psa);
116 int   cm_ShutdownMappedMemory(void);
117 int   cm_ValidateMappedMemory(char * cachePath);
118 int   cm_InitMappedMemory(DWORD virtualCache, char * cachePath, DWORD stats, DWORD chunkSize, afs_uint64 cacheBlocks, afs_uint32 blockSize);
119 #endif /* CM_MEMMAP_H */