cpu.h 6.0 KB
Newer Older
J
Jiri Denemark 已提交
1 2 3
/*
 * cpu.h: internal functions for CPU manipulation
 *
4
 * Copyright (C) 2009-2010, 2013 Red Hat, Inc.
J
Jiri Denemark 已提交
5 6 7 8 9 10 11 12 13 14 15 16
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with this library.  If not, see
O
Osier Yang 已提交
18
 * <http://www.gnu.org/licenses/>.
J
Jiri Denemark 已提交
19 20 21 22 23 24
 *
 * Authors:
 *      Jiri Denemark <jdenemar@redhat.com>
 */

#ifndef __VIR_CPU_H__
25
# define __VIR_CPU_H__
J
Jiri Denemark 已提交
26

27
# include "virerror.h"
28
# include "datatypes.h"
29
# include "virarch.h"
30 31
# include "conf/cpu_conf.h"
# include "cpu_x86_data.h"
32
# include "cpu_ppc64_data.h"
J
Jiri Denemark 已提交
33 34


J
Jiri Denemark 已提交
35
typedef struct _virCPUData virCPUData;
36
typedef virCPUData *virCPUDataPtr;
J
Jiri Denemark 已提交
37 38 39
struct _virCPUData {
    virArch arch;
    union {
40
        virCPUx86Data x86;
41
        virCPUppc64Data ppc64;
J
Jiri Denemark 已提交
42 43
        /* generic driver needs no data */
    } data;
J
Jiri Denemark 已提交
44 45 46 47 48
};


typedef virCPUCompareResult
(*cpuArchCompare)   (virCPUDefPtr host,
49 50
                     virCPUDefPtr cpu,
                     bool failIncompatible);
J
Jiri Denemark 已提交
51 52 53

typedef int
(*cpuArchDecode)    (virCPUDefPtr cpu,
54
                     const virCPUData *data,
55
                     const char **models,
56
                     unsigned int nmodels,
57 58
                     const char *preferred,
                     unsigned int flags);
J
Jiri Denemark 已提交
59 60

typedef int
J
Jiri Denemark 已提交
61
(*cpuArchEncode)    (virArch arch,
62
                     const virCPUDef *cpu,
63 64 65 66 67 68
                     virCPUDataPtr *forced,
                     virCPUDataPtr *required,
                     virCPUDataPtr *optional,
                     virCPUDataPtr *disabled,
                     virCPUDataPtr *forbidden,
                     virCPUDataPtr *vendor);
J
Jiri Denemark 已提交
69 70

typedef void
71
(*cpuArchDataFree)  (virCPUDataPtr data);
J
Jiri Denemark 已提交
72

73
typedef virCPUDataPtr
74
(*cpuArchNodeData)  (virArch arch);
J
Jiri Denemark 已提交
75 76 77 78

typedef virCPUCompareResult
(*cpuArchGuestData) (virCPUDefPtr host,
                     virCPUDefPtr guest,
79
                     virCPUDataPtr *data,
80
                     char **message);
J
Jiri Denemark 已提交
81

82 83 84 85
typedef virCPUDefPtr
(*cpuArchBaseline)  (virCPUDefPtr *cpus,
                     unsigned int ncpus,
                     const char **models,
86 87
                     unsigned int nmodels,
                     unsigned int flags);
88

89
typedef int
J
Jiri Denemark 已提交
90 91
(*virCPUArchUpdate)(virCPUDefPtr guest,
                    const virCPUDef *host);
92

D
Daniel P. Berrange 已提交
93
typedef int
94 95
(*virCPUArchDataCheckFeature)(const virCPUData *data,
                              const char *feature);
D
Daniel P. Berrange 已提交
96

97 98 99 100
typedef char *
(*cpuArchDataFormat)(const virCPUData *data);

typedef virCPUDataPtr
101
(*cpuArchDataParse) (xmlXPathContextPtr ctxt);
J
Jiri Denemark 已提交
102

103 104 105
typedef int
(*cpuArchGetModels) (char ***models);

J
Jiri Denemark 已提交
106 107 108 109 110
typedef int
(*virCPUArchTranslate)(virCPUDefPtr cpu,
                       const char **models,
                       unsigned int nmodels);

J
Jiri Denemark 已提交
111 112
struct cpuArchDriver {
    const char *name;
113
    const virArch *arch;
J
Jiri Denemark 已提交
114 115 116 117 118 119 120
    unsigned int narch;
    cpuArchCompare      compare;
    cpuArchDecode       decode;
    cpuArchEncode       encode;
    cpuArchDataFree     free;
    cpuArchNodeData     nodeData;
    cpuArchGuestData    guestData;
121
    cpuArchBaseline     baseline;
J
Jiri Denemark 已提交
122
    virCPUArchUpdate    update;
123
    virCPUArchDataCheckFeature dataCheckFeature;
124 125
    cpuArchDataFormat   dataFormat;
    cpuArchDataParse    dataParse;
126
    cpuArchGetModels    getModels;
J
Jiri Denemark 已提交
127
    virCPUArchTranslate translate;
J
Jiri Denemark 已提交
128 129 130
};


131
virCPUCompareResult
132
cpuCompareXML(virCPUDefPtr host,
133 134
              const char *xml,
              bool failIncompatible)
135
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
136

137
virCPUCompareResult
138
cpuCompare  (virCPUDefPtr host,
139 140
             virCPUDefPtr cpu,
             bool failIncompatible)
141
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
142

143
int
144
cpuDecode   (virCPUDefPtr cpu,
145
             const virCPUData *data,
146
             const char **models,
147
             unsigned int nmodels,
148 149
             const char *preferred)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
150

151
int
152
cpuEncode   (virArch arch,
153
             const virCPUDef *cpu,
154 155 156 157 158
             virCPUDataPtr *forced,
             virCPUDataPtr *required,
             virCPUDataPtr *optional,
             virCPUDataPtr *disabled,
             virCPUDataPtr *forbidden,
159 160
             virCPUDataPtr *vendor)
    ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
161

162
void
J
Jiri Denemark 已提交
163
cpuDataFree (virCPUDataPtr data);
J
Jiri Denemark 已提交
164

165
virCPUDataPtr
166
cpuNodeData (virArch arch);
J
Jiri Denemark 已提交
167

168
virCPUCompareResult
169
cpuGuestData(virCPUDefPtr host,
J
Jiri Denemark 已提交
170
             virCPUDefPtr guest,
171
             virCPUDataPtr *data,
172 173
             char **msg)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
174

175
char *
176 177 178
cpuBaselineXML(const char **xmlCPUs,
               unsigned int ncpus,
               const char **models,
179 180
               unsigned int nmodels,
               unsigned int flags);
181

182
virCPUDefPtr
183 184 185
cpuBaseline (virCPUDefPtr *cpus,
             unsigned int ncpus,
             const char **models,
186
             unsigned int nmodels,
187 188
             unsigned int flags)
    ATTRIBUTE_NONNULL(1);
189

190
int
J
Jiri Denemark 已提交
191 192
virCPUUpdate(virArch arch,
             virCPUDefPtr guest,
193
             const virCPUDef *host)
J
Jiri Denemark 已提交
194
    ATTRIBUTE_NONNULL(2);
195

196
int
197 198
virCPUDataCheckFeature(const virCPUData *data,
                       const char *feature)
199
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
D
Daniel P. Berrange 已提交
200 201


202 203 204
bool
cpuModelIsAllowed(const char *model,
                  const char **models,
205 206
                  unsigned int nmodels)
    ATTRIBUTE_NONNULL(1);
207

208
int
J
Jiri Denemark 已提交
209
cpuGetModels(virArch arch, char ***models);
210

J
Jiri Denemark 已提交
211 212 213 214 215 216 217 218
int
virCPUTranslate(virArch arch,
                virCPUDefPtr cpu,
                char **models,
                unsigned int nmodels)
    ATTRIBUTE_NONNULL(2);


219 220 221
/* cpuDataFormat and cpuDataParse are implemented for unit tests only and
 * have no real-life usage
 */
222 223
char *cpuDataFormat(const virCPUData *data)
    ATTRIBUTE_NONNULL(1);
224 225
virCPUDataPtr cpuDataParse(const char *xmlStr)
    ATTRIBUTE_NONNULL(1);
226

J
Jiri Denemark 已提交
227
#endif /* __VIR_CPU_H__ */