cpu.h 5.7 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_ppc_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;
J
Jiri Denemark 已提交
41 42 43
        struct cpuPPCData ppc;
        /* 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 90
typedef int
(*cpuArchUpdate)    (virCPUDefPtr guest,
91
                     const virCPUDef *host);
92

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

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

typedef virCPUDataPtr
(*cpuArchDataParse) (const char *xmlStr);
J
Jiri Denemark 已提交
102 103 104

struct cpuArchDriver {
    const char *name;
105
    const virArch *arch;
J
Jiri Denemark 已提交
106 107 108 109 110 111 112
    unsigned int narch;
    cpuArchCompare      compare;
    cpuArchDecode       decode;
    cpuArchEncode       encode;
    cpuArchDataFree     free;
    cpuArchNodeData     nodeData;
    cpuArchGuestData    guestData;
113
    cpuArchBaseline     baseline;
114
    cpuArchUpdate       update;
D
Daniel P. Berrange 已提交
115
    cpuArchHasFeature    hasFeature;
116 117
    cpuArchDataFormat   dataFormat;
    cpuArchDataParse    dataParse;
J
Jiri Denemark 已提交
118 119 120 121
};


extern virCPUCompareResult
122
cpuCompareXML(virCPUDefPtr host,
123 124
              const char *xml,
              bool failIncompatible)
125
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
126 127

extern virCPUCompareResult
128
cpuCompare  (virCPUDefPtr host,
129 130
             virCPUDefPtr cpu,
             bool failIncompatible)
131
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
132 133

extern int
134
cpuDecode   (virCPUDefPtr cpu,
135
             const virCPUData *data,
136
             const char **models,
137
             unsigned int nmodels,
138 139
             const char *preferred)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
140 141

extern int
142
cpuEncode   (virArch arch,
143
             const virCPUDef *cpu,
144 145 146 147 148
             virCPUDataPtr *forced,
             virCPUDataPtr *required,
             virCPUDataPtr *optional,
             virCPUDataPtr *disabled,
             virCPUDataPtr *forbidden,
149 150
             virCPUDataPtr *vendor)
    ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
151 152

extern void
J
Jiri Denemark 已提交
153
cpuDataFree (virCPUDataPtr data);
J
Jiri Denemark 已提交
154

155
extern virCPUDataPtr
156
cpuNodeData (virArch arch);
J
Jiri Denemark 已提交
157 158

extern virCPUCompareResult
159
cpuGuestData(virCPUDefPtr host,
J
Jiri Denemark 已提交
160
             virCPUDefPtr guest,
161
             virCPUDataPtr *data,
162 163
             char **msg)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Jiri Denemark 已提交
164

165 166 167 168
extern char *
cpuBaselineXML(const char **xmlCPUs,
               unsigned int ncpus,
               const char **models,
169 170
               unsigned int nmodels,
               unsigned int flags);
171 172 173 174 175

extern virCPUDefPtr
cpuBaseline (virCPUDefPtr *cpus,
             unsigned int ncpus,
             const char **models,
176
             unsigned int nmodels,
177 178
             unsigned int flags)
    ATTRIBUTE_NONNULL(1);
179

180 181
extern int
cpuUpdate   (virCPUDefPtr guest,
182 183
             const virCPUDef *host)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
184

D
Daniel P. Berrange 已提交
185
extern int
186
cpuHasFeature(const virCPUData *data,
187 188
              const char *feature)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
D
Daniel P. Berrange 已提交
189 190


191 192 193
bool
cpuModelIsAllowed(const char *model,
                  const char **models,
194 195
                  unsigned int nmodels)
    ATTRIBUTE_NONNULL(1);
196

197
extern int
198 199
cpuGetModels(const char *arch, char ***models)
    ATTRIBUTE_NONNULL(1);
200

201 202 203
/* cpuDataFormat and cpuDataParse are implemented for unit tests only and
 * have no real-life usage
 */
204 205
char *cpuDataFormat(const virCPUData *data)
    ATTRIBUTE_NONNULL(1);
206
virCPUDataPtr cpuDataParse(virArch arch,
207 208
                           const char *xmlStr)
    ATTRIBUTE_NONNULL(2);
209

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