1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-23 21:34:54 +03: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:
Matthias Bolte 2011-06-04 23:24:54 +02:00
parent 2c5ded6e82
commit 4bf1f33b7e
6 changed files with 79 additions and 61 deletions

View File

@ -27,7 +27,7 @@ my %groupheaders = (
my @srcs;
find({
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/;
}
}, no_chdir => 1}, $srcdir);
@ -142,7 +142,7 @@ open FILE, "<$drivertable"
my %groups;
my $ingrp;
while (defined($line = <FILE>)) {
if ($line =~ /struct _(vir\w*Driver)/) {
if ($line =~ /struct _(vir\w*(?:Driver|Monitor))/) {
my $grp = $1;
if ($grp ne "virStateDriver" &&
$grp ne "virStreamDriver") {
@ -150,7 +150,7 @@ while (defined($line = <FILE>)) {
$groups{$ingrp} = { apis => {}, drivers => {} };
}
} elsif ($ingrp) {
if ($line =~ /^\s*virDrv(\w+)\s+(\w+);\s*$/) {
if ($line =~ /^\s*vir(?:Drv|DevMon)(\w+)\s+(\w+);\s*$/) {
my $field = $2;
my $name = $1;
@ -159,6 +159,8 @@ while (defined($line = <FILE>)) {
$api = "vir$name";
} elsif (exists $apis{"virConnect$name"}) {
$api = "virConnect$name";
} elsif (exists $apis{"virNode$name"}) {
$api = "virNode$name";
} else {
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*{/) {
$ingrp = $grp;
$impl = $src;
$impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,;
if ($impl =~ m,.*/node_device_(\w+)\.c,) {
$impl = $1;
} else {
$impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,;
}
if ($groups{$ingrp}->{drivers}->{$impl}) {
die "Group $ingrp already contains $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";
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;

View File

@ -66,18 +66,9 @@ esxDeviceClose(virConnectPtr conn)
static virDeviceMonitor esxDeviceMonitor = {
"ESX", /* name */
esxDeviceOpen, /* open */
esxDeviceClose, /* close */
NULL, /* numOfDevices */
NULL, /* listDevices */
NULL, /* deviceLookupByName */
NULL, /* deviceGetXMLDesc */
NULL, /* deviceGetParent */
NULL, /* deviceNumOfCaps */
NULL, /* deviceListCaps */
NULL, /* deviceCreateXML */
NULL, /* deviceDestroy */
.name = "ESX",
.open = esxDeviceOpen, /* 0.7.6 */
.close = esxDeviceClose, /* 0.7.6 */
};

View File

@ -122,9 +122,10 @@ void nodeDeviceUnlock(virDeviceMonitorStatePtr driver)
virMutexUnlock(&driver->lock);
}
static int nodeNumOfDevices(virConnectPtr conn,
const char *cap,
unsigned int flags ATTRIBUTE_UNUSED)
int
nodeNumOfDevices(virConnectPtr conn,
const char *cap,
unsigned int flags ATTRIBUTE_UNUSED)
{
virDeviceMonitorStatePtr driver = conn->devMonPrivateData;
int ndevs = 0;
@ -143,7 +144,7 @@ static int nodeNumOfDevices(virConnectPtr conn,
return ndevs;
}
static int
int
nodeListDevices(virConnectPtr conn,
const char *cap,
char **const names, int maxnames,
@ -179,8 +180,8 @@ nodeListDevices(virConnectPtr conn,
}
static virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn,
const char *name)
virNodeDevicePtr
nodeDeviceLookupByName(virConnectPtr conn, const char *name)
{
virDeviceMonitorStatePtr driver = conn->devMonPrivateData;
virNodeDeviceObjPtr obj;
@ -251,8 +252,9 @@ out:
}
static char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev,
unsigned int flags ATTRIBUTE_UNUSED)
char *
nodeDeviceGetXMLDesc(virNodeDevicePtr dev,
unsigned int flags ATTRIBUTE_UNUSED)
{
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
virNodeDeviceObjPtr obj;
@ -281,7 +283,8 @@ cleanup:
}
static char *nodeDeviceGetParent(virNodeDevicePtr dev)
char *
nodeDeviceGetParent(virNodeDevicePtr dev)
{
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
virNodeDeviceObjPtr obj;
@ -314,7 +317,8 @@ cleanup:
}
static int nodeDeviceNumOfCaps(virNodeDevicePtr dev)
int
nodeDeviceNumOfCaps(virNodeDevicePtr dev)
{
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
virNodeDeviceObjPtr obj;
@ -344,7 +348,7 @@ cleanup:
}
static int
int
nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
{
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
@ -538,7 +542,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn)
return dev;
}
static virNodeDevicePtr
virNodeDevicePtr
nodeDeviceCreateXML(virConnectPtr conn,
const char *xmlDesc,
unsigned int flags ATTRIBUTE_UNUSED)
@ -591,7 +595,7 @@ cleanup:
}
static int
int
nodeDeviceDestroy(virNodeDevicePtr dev)
{
int ret = -1;
@ -651,21 +655,6 @@ out:
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) {
#if defined(HAVE_HAL) && defined(HAVE_UDEV)
/* Register only one of these two - they conflict */

View File

@ -53,8 +53,6 @@ int udevNodeRegister(void);
void nodeDeviceLock(virDeviceMonitorStatePtr driver);
void nodeDeviceUnlock(virDeviceMonitorStatePtr driver);
void registerCommonNodeFuncs(virDeviceMonitorPtr mon);
int nodedevRegister(void);
# ifdef __linux__
@ -86,4 +84,16 @@ int read_wwn_linux(int host, const char *file, char **wwn);
# 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__ */

View File

@ -881,22 +881,30 @@ static int halNodeDrvClose(virConnectPtr conn ATTRIBUTE_UNUSED)
static virDeviceMonitor halDeviceMonitor = {
.name = "halDeviceMonitor",
.open = halNodeDrvOpen,
.close = halNodeDrvClose,
.open = halNodeDrvOpen, /* 0.5.0 */
.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 = {
.name = "HAL",
.initialize = halDeviceMonitorStartup,
.cleanup = halDeviceMonitorShutdown,
.reload = halDeviceMonitorReload,
.active = halDeviceMonitorActive,
.initialize = halDeviceMonitorStartup, /* 0.5.0 */
.cleanup = halDeviceMonitorShutdown, /* 0.5.0 */
.reload = halDeviceMonitorReload, /* 0.5.0 */
.active = halDeviceMonitorActive, /* 0.5.0 */
};
int halNodeRegister(void)
{
registerCommonNodeFuncs(&halDeviceMonitor);
if (virRegisterDeviceMonitor(&halDeviceMonitor) < 0)
return -1;
return virRegisterStateDriver(&halStateDriver);

View File

@ -1741,23 +1741,31 @@ static int udevNodeDrvClose(virConnectPtr conn)
static virDeviceMonitor udevDeviceMonitor = {
.name = "udevDeviceMonitor",
.open = udevNodeDrvOpen,
.close = udevNodeDrvClose,
.open = udevNodeDrvOpen, /* 0.7.3 */
.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 = {
.name = "udev",
.initialize = udevDeviceMonitorStartup,
.cleanup = udevDeviceMonitorShutdown,
.reload = udevDeviceMonitorReload,
.active = udevDeviceMonitorActive,
.initialize = udevDeviceMonitorStartup, /* 0.7.3 */
.cleanup = udevDeviceMonitorShutdown, /* 0.7.3 */
.reload = udevDeviceMonitorReload, /* 0.7.3 */
.active = udevDeviceMonitorActive, /* 0.7.3 */
};
int udevNodeRegister(void)
{
VIR_DEBUG("Registering udev node device backend");
registerCommonNodeFuncs(&udevDeviceMonitor);
if (virRegisterDeviceMonitor(&udevDeviceMonitor) < 0) {
return -1;
}