1
0
Fork 0
haveged/src/havegetune.h
Daniel Baumann 363454abff
Merging upstream version 1.9.19 (Closes: #999811, #1078052):
- haveged can be run as an application if also running as a daemon (Closes: #998382).

Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-05 13:12:32 +01:00

121 lines
4.5 KiB
C

/**
** Simple entropy harvester based upon the havege RNG
**
** Copyright 2018-2022 Jirka Hladky hladky DOT jiri AT gmail DOT com
** Copyright 2009-2014 Gary Wuertz gary@issiweb.com
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef HAVEGETUNE_H
#define HAVEGETUNE_H
#include "havegecollect.h"
/**
* Some systems supply a maximum
*/
#ifndef FILENAME_MAX
#define FILENAME_MAX 256 /* Max path length */
#endif
/**
* Limits
*/
#define MAX_BIT_IDX (256/BITS_PER_H_UINT) /* Size of resource bitmaps */
#define MAX_CACHES 8 /* Max cache types */
#define MAX_CPUS 8 /* Max cpu types */
/**
* Object used to represent a set of objects
*/
typedef struct {
H_UINT bits[MAX_BIT_IDX];
int msw;
H_UINT source;
} TOPO_MAP;
/**
* Cache instance
*/
typedef struct {
TOPO_MAP cpuMap; /* what cpus have this cache */
H_UINT type; /* 'I'nstruction, 'D'ata, 'U'nified, 'T'race */
H_UINT level; /* 0-15................ */
H_UINT size; /* size in KB */
} CACHE_INST;
/**
* Sources for CACHE_INST TOPO_MAP
*/
#define SRC_DEFAULT 0x00001
#define SRC_PARAM 0x00002
#define SRC_CPUID_AMD6 0x00004
#define SRC_CPUID_AMD5 0x00008
#define SRC_CPUID_INTEL2 0x00010
#define SRC_CPUID_INTEL4 0x00020
#define SRC_VFS_INDEX 0x00040
/**
* CPU instance
*/
typedef struct {
TOPO_MAP cpuMap; /* what cpus have this config */
H_UINT signature; /* processor signature */
H_UINT flags;
H_UINT maxFn;
H_UINT maxFnx;
char vendor[16];
} CPU_INST;
/**
* Sources for CPU_INST TOPO_MAP
*/
#define SRC_CPUID_PRESENT 0x00100
#define SRC_CPUID_HT 0x00200
#define SRC_CPUID_AMD 0x00400
#define SRC_CPUID_AMD8 0x00800
#define SRC_CPUID_LEAFB 0x01000
#define SRC_CPUID_LEAF4 0x02000
#define SRC_VFS_STATUS 0x04000
#define SRC_VFS_ONLINE 0x08000
#define SRC_VFS_CPUINFO 0x10000
#define SRC_VFS_CPUDIR 0x20000
/**
* Size of representation fields
*/
#define SZ_BUILDREP 32
#define SZ_CPUREP 64
#define SZ_CACHEREP 32
/**
* The result of tuning
*/
typedef struct {
char *procfs; /* where proc is mounted */
char *sysfs; /* where sys is mounted */
char buildOpts[SZ_BUILDREP]; /* build options */
char cpuOpts[SZ_CPUREP]; /* cpu options */
char icacheOpts[SZ_CACHEREP]; /* icache options */
char dcacheOpts[SZ_CACHEREP]; /* dcache options */
TOPO_MAP pAllowed; /* allowed processors */
TOPO_MAP pOnline; /* processors online */
TOPO_MAP pCpuInfo; /* processors with info */
TOPO_MAP pCacheInfo; /* processors with cache info */
TOPO_MAP mAllowed; /* allowed memory */
H_UINT a_cpu; /* suggested cpu */
H_UINT i_tune; /* suggested i cache value */
H_UINT d_tune; /* suggested d cache value */
int ctCpu; /* number of cpu types */
int ctCache; /* number of cache items */
CPU_INST cpus[MAX_CPUS]; /* cpu instances */
CACHE_INST caches[MAX_CACHES+2]; /* cache instances */
} HOST_CFG;
/**
* Tuning interface
*/
void havege_tune(HOST_CFG *env, H_PARAMS *params);
#endif