summaryrefslogtreecommitdiffstats
path: root/src/havegetune.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-11-10 15:31:03 +0100
committerDaniel Baumann <daniel@debian.org>2024-11-10 15:31:03 +0100
commit2b16d0d8a6bead5bcc2125b890bf1a13d19602dc (patch)
treeb67952daab2d78e87c103ed10ece33ad6a9a2167 /src/havegetune.h
parentInitial commit. (diff)
downloadhaveged-2b16d0d8a6bead5bcc2125b890bf1a13d19602dc.tar.xz
haveged-2b16d0d8a6bead5bcc2125b890bf1a13d19602dc.zip
Adding upstream version 1.9.14.upstream/1.9.14
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'src/havegetune.h')
-rw-r--r--src/havegetune.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/havegetune.h b/src/havegetune.h
new file mode 100644
index 0000000..5283a0b
--- /dev/null
+++ b/src/havegetune.h
@@ -0,0 +1,121 @@
+/**
+ ** Simple entropy harvester based upon the havege RNG
+ **
+ ** Copyright 2018-2021 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