提交 4bf1f33b 编写于 作者: M Matthias Bolte

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.
上级 2c5ded6e
...@@ -27,7 +27,7 @@ my %groupheaders = ( ...@@ -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" ...@@ -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>)) { ...@@ -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>)) { ...@@ -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) { ...@@ -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;
$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} = {}; $groups{$ingrp}->{drivers}->{$impl} = {};
} }
} }
...@@ -206,7 +218,7 @@ foreach my $src (@srcs) { ...@@ -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) ...@@ -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,9 +122,10 @@ void nodeDeviceUnlock(virDeviceMonitorStatePtr driver) ...@@ -122,9 +122,10 @@ void nodeDeviceUnlock(virDeviceMonitorStatePtr driver)
virMutexUnlock(&driver->lock); virMutexUnlock(&driver->lock);
} }
static int nodeNumOfDevices(virConnectPtr conn, int
const char *cap, nodeNumOfDevices(virConnectPtr conn,
unsigned int flags ATTRIBUTE_UNUSED) const char *cap,
unsigned int flags ATTRIBUTE_UNUSED)
{ {
virDeviceMonitorStatePtr driver = conn->devMonPrivateData; virDeviceMonitorStatePtr driver = conn->devMonPrivateData;
int ndevs = 0; int ndevs = 0;
...@@ -143,7 +144,7 @@ static int nodeNumOfDevices(virConnectPtr conn, ...@@ -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, ...@@ -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,8 +252,9 @@ out: ...@@ -251,8 +252,9 @@ out:
} }
static char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, char *
unsigned int flags ATTRIBUTE_UNUSED) nodeDeviceGetXMLDesc(virNodeDevicePtr dev,
unsigned int flags ATTRIBUTE_UNUSED)
{ {
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
virNodeDeviceObjPtr obj; virNodeDeviceObjPtr obj;
...@@ -281,7 +283,8 @@ cleanup: ...@@ -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: ...@@ -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: ...@@ -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) ...@@ -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: ...@@ -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: ...@@ -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); ...@@ -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); ...@@ -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) ...@@ -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) ...@@ -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;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册