mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-04-26 15:14:42 +00:00
docs: Make hvsupport.pl pick up the host device drivers
Annotate the ESX device driver dummy. Refactor the udev and hal device driver strcuts to match the common annotation pattern.
This commit is contained in:
parent
2c5ded6e82
commit
4bf1f33b7e
@ -27,7 +27,7 @@ my %groupheaders = (
|
|||||||
my @srcs;
|
my @srcs;
|
||||||
find({
|
find({
|
||||||
wanted => sub {
|
wanted => sub {
|
||||||
if (m!$srcdir/.*/\w+_(driver|tmpl)\.c$!) {
|
if (m!$srcdir/.*/\w+_(driver|tmpl|monitor|hal|udev)\.c$!) {
|
||||||
push @srcs, $_ if $_ !~ /vbox_driver\.c/;
|
push @srcs, $_ if $_ !~ /vbox_driver\.c/;
|
||||||
}
|
}
|
||||||
}, no_chdir => 1}, $srcdir);
|
}, no_chdir => 1}, $srcdir);
|
||||||
@ -142,7 +142,7 @@ open FILE, "<$drivertable"
|
|||||||
my %groups;
|
my %groups;
|
||||||
my $ingrp;
|
my $ingrp;
|
||||||
while (defined($line = <FILE>)) {
|
while (defined($line = <FILE>)) {
|
||||||
if ($line =~ /struct _(vir\w*Driver)/) {
|
if ($line =~ /struct _(vir\w*(?:Driver|Monitor))/) {
|
||||||
my $grp = $1;
|
my $grp = $1;
|
||||||
if ($grp ne "virStateDriver" &&
|
if ($grp ne "virStateDriver" &&
|
||||||
$grp ne "virStreamDriver") {
|
$grp ne "virStreamDriver") {
|
||||||
@ -150,7 +150,7 @@ while (defined($line = <FILE>)) {
|
|||||||
$groups{$ingrp} = { apis => {}, drivers => {} };
|
$groups{$ingrp} = { apis => {}, drivers => {} };
|
||||||
}
|
}
|
||||||
} elsif ($ingrp) {
|
} elsif ($ingrp) {
|
||||||
if ($line =~ /^\s*virDrv(\w+)\s+(\w+);\s*$/) {
|
if ($line =~ /^\s*vir(?:Drv|DevMon)(\w+)\s+(\w+);\s*$/) {
|
||||||
my $field = $2;
|
my $field = $2;
|
||||||
my $name = $1;
|
my $name = $1;
|
||||||
|
|
||||||
@ -159,6 +159,8 @@ while (defined($line = <FILE>)) {
|
|||||||
$api = "vir$name";
|
$api = "vir$name";
|
||||||
} elsif (exists $apis{"virConnect$name"}) {
|
} elsif (exists $apis{"virConnect$name"}) {
|
||||||
$api = "virConnect$name";
|
$api = "virConnect$name";
|
||||||
|
} elsif (exists $apis{"virNode$name"}) {
|
||||||
|
$api = "virNode$name";
|
||||||
} else {
|
} else {
|
||||||
die "driver $name does not have a public API";
|
die "driver $name does not have a public API";
|
||||||
}
|
}
|
||||||
@ -188,7 +190,17 @@ foreach my $src (@srcs) {
|
|||||||
$line =~ /^\s*(?:static\s+)?$grp\s+NAME\(\w+\)\s*=\s*{/) {
|
$line =~ /^\s*(?:static\s+)?$grp\s+NAME\(\w+\)\s*=\s*{/) {
|
||||||
$ingrp = $grp;
|
$ingrp = $grp;
|
||||||
$impl = $src;
|
$impl = $src;
|
||||||
|
|
||||||
|
if ($impl =~ m,.*/node_device_(\w+)\.c,) {
|
||||||
|
$impl = $1;
|
||||||
|
} else {
|
||||||
$impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,;
|
$impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($groups{$ingrp}->{drivers}->{$impl}) {
|
||||||
|
die "Group $ingrp already contains $impl";
|
||||||
|
}
|
||||||
|
|
||||||
$groups{$ingrp}->{drivers}->{$impl} = {};
|
$groups{$ingrp}->{drivers}->{$impl} = {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,7 +218,7 @@ foreach my $src (@srcs) {
|
|||||||
die "Driver method for $api is NULL in $src" if $meth eq "NULL";
|
die "Driver method for $api is NULL in $src" if $meth eq "NULL";
|
||||||
|
|
||||||
if (!exists($groups{$ingrp}->{apis}->{$api})) {
|
if (!exists($groups{$ingrp}->{apis}->{$api})) {
|
||||||
die "Found unexpected driver $api in $ingrp\n";
|
die "Found unexpected method $api in $ingrp\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$groups{$ingrp}->{drivers}->{$impl}->{$api} = $vers;
|
$groups{$ingrp}->{drivers}->{$impl}->{$api} = $vers;
|
||||||
|
@ -66,18 +66,9 @@ esxDeviceClose(virConnectPtr conn)
|
|||||||
|
|
||||||
|
|
||||||
static virDeviceMonitor esxDeviceMonitor = {
|
static virDeviceMonitor esxDeviceMonitor = {
|
||||||
"ESX", /* name */
|
.name = "ESX",
|
||||||
esxDeviceOpen, /* open */
|
.open = esxDeviceOpen, /* 0.7.6 */
|
||||||
esxDeviceClose, /* close */
|
.close = esxDeviceClose, /* 0.7.6 */
|
||||||
NULL, /* numOfDevices */
|
|
||||||
NULL, /* listDevices */
|
|
||||||
NULL, /* deviceLookupByName */
|
|
||||||
NULL, /* deviceGetXMLDesc */
|
|
||||||
NULL, /* deviceGetParent */
|
|
||||||
NULL, /* deviceNumOfCaps */
|
|
||||||
NULL, /* deviceListCaps */
|
|
||||||
NULL, /* deviceCreateXML */
|
|
||||||
NULL, /* deviceDestroy */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,7 +122,8 @@ void nodeDeviceUnlock(virDeviceMonitorStatePtr driver)
|
|||||||
virMutexUnlock(&driver->lock);
|
virMutexUnlock(&driver->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nodeNumOfDevices(virConnectPtr conn,
|
int
|
||||||
|
nodeNumOfDevices(virConnectPtr conn,
|
||||||
const char *cap,
|
const char *cap,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
@ -143,7 +144,7 @@ static int nodeNumOfDevices(virConnectPtr conn,
|
|||||||
return ndevs;
|
return ndevs;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
nodeListDevices(virConnectPtr conn,
|
nodeListDevices(virConnectPtr conn,
|
||||||
const char *cap,
|
const char *cap,
|
||||||
char **const names, int maxnames,
|
char **const names, int maxnames,
|
||||||
@ -179,8 +180,8 @@ nodeListDevices(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn,
|
virNodeDevicePtr
|
||||||
const char *name)
|
nodeDeviceLookupByName(virConnectPtr conn, const char *name)
|
||||||
{
|
{
|
||||||
virDeviceMonitorStatePtr driver = conn->devMonPrivateData;
|
virDeviceMonitorStatePtr driver = conn->devMonPrivateData;
|
||||||
virNodeDeviceObjPtr obj;
|
virNodeDeviceObjPtr obj;
|
||||||
@ -251,7 +252,8 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev,
|
char *
|
||||||
|
nodeDeviceGetXMLDesc(virNodeDevicePtr dev,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
||||||
@ -281,7 +283,8 @@ cleanup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char *nodeDeviceGetParent(virNodeDevicePtr dev)
|
char *
|
||||||
|
nodeDeviceGetParent(virNodeDevicePtr dev)
|
||||||
{
|
{
|
||||||
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
||||||
virNodeDeviceObjPtr obj;
|
virNodeDeviceObjPtr obj;
|
||||||
@ -314,7 +317,8 @@ cleanup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int nodeDeviceNumOfCaps(virNodeDevicePtr dev)
|
int
|
||||||
|
nodeDeviceNumOfCaps(virNodeDevicePtr dev)
|
||||||
{
|
{
|
||||||
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
||||||
virNodeDeviceObjPtr obj;
|
virNodeDeviceObjPtr obj;
|
||||||
@ -344,7 +348,7 @@ cleanup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
int
|
||||||
nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
|
nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
|
||||||
{
|
{
|
||||||
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
|
||||||
@ -538,7 +542,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn)
|
|||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
static virNodeDevicePtr
|
virNodeDevicePtr
|
||||||
nodeDeviceCreateXML(virConnectPtr conn,
|
nodeDeviceCreateXML(virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags ATTRIBUTE_UNUSED)
|
||||||
@ -591,7 +595,7 @@ cleanup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
int
|
||||||
nodeDeviceDestroy(virNodeDevicePtr dev)
|
nodeDeviceDestroy(virNodeDevicePtr dev)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
@ -651,21 +655,6 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void registerCommonNodeFuncs(virDeviceMonitorPtr driver)
|
|
||||||
{
|
|
||||||
driver->numOfDevices = nodeNumOfDevices;
|
|
||||||
driver->listDevices = nodeListDevices;
|
|
||||||
driver->deviceLookupByName = nodeDeviceLookupByName;
|
|
||||||
driver->deviceGetXMLDesc = nodeDeviceGetXMLDesc;
|
|
||||||
driver->deviceGetParent = nodeDeviceGetParent;
|
|
||||||
driver->deviceNumOfCaps = nodeDeviceNumOfCaps;
|
|
||||||
driver->deviceListCaps = nodeDeviceListCaps;
|
|
||||||
driver->deviceCreateXML = nodeDeviceCreateXML;
|
|
||||||
driver->deviceDestroy = nodeDeviceDestroy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int nodedevRegister(void) {
|
int nodedevRegister(void) {
|
||||||
#if defined(HAVE_HAL) && defined(HAVE_UDEV)
|
#if defined(HAVE_HAL) && defined(HAVE_UDEV)
|
||||||
/* Register only one of these two - they conflict */
|
/* Register only one of these two - they conflict */
|
||||||
|
@ -53,8 +53,6 @@ int udevNodeRegister(void);
|
|||||||
void nodeDeviceLock(virDeviceMonitorStatePtr driver);
|
void nodeDeviceLock(virDeviceMonitorStatePtr driver);
|
||||||
void nodeDeviceUnlock(virDeviceMonitorStatePtr driver);
|
void nodeDeviceUnlock(virDeviceMonitorStatePtr driver);
|
||||||
|
|
||||||
void registerCommonNodeFuncs(virDeviceMonitorPtr mon);
|
|
||||||
|
|
||||||
int nodedevRegister(void);
|
int nodedevRegister(void);
|
||||||
|
|
||||||
# ifdef __linux__
|
# ifdef __linux__
|
||||||
@ -86,4 +84,16 @@ int read_wwn_linux(int host, const char *file, char **wwn);
|
|||||||
|
|
||||||
# endif /* __linux__ */
|
# endif /* __linux__ */
|
||||||
|
|
||||||
|
int nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags);
|
||||||
|
int nodeListDevices(virConnectPtr conn, const char *cap, char **const names,
|
||||||
|
int maxnames, unsigned int flags);
|
||||||
|
virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn, const char *name);
|
||||||
|
char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, unsigned int flags);
|
||||||
|
char *nodeDeviceGetParent(virNodeDevicePtr dev);
|
||||||
|
int nodeDeviceNumOfCaps(virNodeDevicePtr dev);
|
||||||
|
int nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames);
|
||||||
|
virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn,
|
||||||
|
const char *xmlDesc, unsigned int flags);
|
||||||
|
int nodeDeviceDestroy(virNodeDevicePtr dev);
|
||||||
|
|
||||||
#endif /* __VIR_NODE_DEVICE_H__ */
|
#endif /* __VIR_NODE_DEVICE_H__ */
|
||||||
|
@ -881,22 +881,30 @@ static int halNodeDrvClose(virConnectPtr conn ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
static virDeviceMonitor halDeviceMonitor = {
|
static virDeviceMonitor halDeviceMonitor = {
|
||||||
.name = "halDeviceMonitor",
|
.name = "halDeviceMonitor",
|
||||||
.open = halNodeDrvOpen,
|
.open = halNodeDrvOpen, /* 0.5.0 */
|
||||||
.close = halNodeDrvClose,
|
.close = halNodeDrvClose, /* 0.5.0 */
|
||||||
|
.numOfDevices = nodeNumOfDevices, /* 0.5.0 */
|
||||||
|
.listDevices = nodeListDevices, /* 0.5.0 */
|
||||||
|
.deviceLookupByName = nodeDeviceLookupByName, /* 0.5.0 */
|
||||||
|
.deviceGetXMLDesc = nodeDeviceGetXMLDesc, /* 0.5.0 */
|
||||||
|
.deviceGetParent = nodeDeviceGetParent, /* 0.5.0 */
|
||||||
|
.deviceNumOfCaps = nodeDeviceNumOfCaps, /* 0.5.0 */
|
||||||
|
.deviceListCaps = nodeDeviceListCaps, /* 0.5.0 */
|
||||||
|
.deviceCreateXML = nodeDeviceCreateXML, /* 0.6.5 */
|
||||||
|
.deviceDestroy = nodeDeviceDestroy, /* 0.6.5 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static virStateDriver halStateDriver = {
|
static virStateDriver halStateDriver = {
|
||||||
.name = "HAL",
|
.name = "HAL",
|
||||||
.initialize = halDeviceMonitorStartup,
|
.initialize = halDeviceMonitorStartup, /* 0.5.0 */
|
||||||
.cleanup = halDeviceMonitorShutdown,
|
.cleanup = halDeviceMonitorShutdown, /* 0.5.0 */
|
||||||
.reload = halDeviceMonitorReload,
|
.reload = halDeviceMonitorReload, /* 0.5.0 */
|
||||||
.active = halDeviceMonitorActive,
|
.active = halDeviceMonitorActive, /* 0.5.0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
int halNodeRegister(void)
|
int halNodeRegister(void)
|
||||||
{
|
{
|
||||||
registerCommonNodeFuncs(&halDeviceMonitor);
|
|
||||||
if (virRegisterDeviceMonitor(&halDeviceMonitor) < 0)
|
if (virRegisterDeviceMonitor(&halDeviceMonitor) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return virRegisterStateDriver(&halStateDriver);
|
return virRegisterStateDriver(&halStateDriver);
|
||||||
|
@ -1741,23 +1741,31 @@ static int udevNodeDrvClose(virConnectPtr conn)
|
|||||||
|
|
||||||
static virDeviceMonitor udevDeviceMonitor = {
|
static virDeviceMonitor udevDeviceMonitor = {
|
||||||
.name = "udevDeviceMonitor",
|
.name = "udevDeviceMonitor",
|
||||||
.open = udevNodeDrvOpen,
|
.open = udevNodeDrvOpen, /* 0.7.3 */
|
||||||
.close = udevNodeDrvClose,
|
.close = udevNodeDrvClose, /* 0.7.3 */
|
||||||
|
.numOfDevices = nodeNumOfDevices, /* 0.7.3 */
|
||||||
|
.listDevices = nodeListDevices, /* 0.7.3 */
|
||||||
|
.deviceLookupByName = nodeDeviceLookupByName, /* 0.7.3 */
|
||||||
|
.deviceGetXMLDesc = nodeDeviceGetXMLDesc, /* 0.7.3 */
|
||||||
|
.deviceGetParent = nodeDeviceGetParent, /* 0.7.3 */
|
||||||
|
.deviceNumOfCaps = nodeDeviceNumOfCaps, /* 0.7.3 */
|
||||||
|
.deviceListCaps = nodeDeviceListCaps, /* 0.7.3 */
|
||||||
|
.deviceCreateXML = nodeDeviceCreateXML, /* 0.7.3 */
|
||||||
|
.deviceDestroy = nodeDeviceDestroy, /* 0.7.3 */
|
||||||
};
|
};
|
||||||
|
|
||||||
static virStateDriver udevStateDriver = {
|
static virStateDriver udevStateDriver = {
|
||||||
.name = "udev",
|
.name = "udev",
|
||||||
.initialize = udevDeviceMonitorStartup,
|
.initialize = udevDeviceMonitorStartup, /* 0.7.3 */
|
||||||
.cleanup = udevDeviceMonitorShutdown,
|
.cleanup = udevDeviceMonitorShutdown, /* 0.7.3 */
|
||||||
.reload = udevDeviceMonitorReload,
|
.reload = udevDeviceMonitorReload, /* 0.7.3 */
|
||||||
.active = udevDeviceMonitorActive,
|
.active = udevDeviceMonitorActive, /* 0.7.3 */
|
||||||
};
|
};
|
||||||
|
|
||||||
int udevNodeRegister(void)
|
int udevNodeRegister(void)
|
||||||
{
|
{
|
||||||
VIR_DEBUG("Registering udev node device backend");
|
VIR_DEBUG("Registering udev node device backend");
|
||||||
|
|
||||||
registerCommonNodeFuncs(&udevDeviceMonitor);
|
|
||||||
if (virRegisterDeviceMonitor(&udevDeviceMonitor) < 0) {
|
if (virRegisterDeviceMonitor(&udevDeviceMonitor) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user