[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

libpciaccess: Changes to 'upstream-unstable'



 COPYING                  |    2 
 Makefile.am              |    2 
 configure.ac             |   74 +--
 include/pciaccess.h      |   22 -
 scanpci/scanpci.c        |   33 +
 src/Doxyfile             | 1016 +++++++++++++++++++++++------------------------
 src/Makefile.am          |    4 
 src/common_bridge.c      |   10 
 src/common_capability.c  |   10 
 src/common_device_name.c |   28 -
 src/common_init.c        |   12 
 src/common_interface.c   |   92 +++-
 src/common_io.c          |    2 
 src/common_iterator.c    |   30 -
 src/freebsd_pci.c        |   14 
 src/linux_devmem.c       |   18 
 src/linux_devmem.h       |    2 
 src/linux_sysfs.c        |  116 ++++-
 src/netbsd_pci.c         |    2 
 src/pciaccess_private.h  |   14 
 src/solx_devfs.c         |  151 ++++--
 21 files changed, 911 insertions(+), 743 deletions(-)

New commits:
commit 78eed07d599ff9e30c075aa7c8d1795e125ffc4b
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date:   Wed Nov 9 09:27:49 2011 -0800

    configure.ac: Bump to 0.12.902
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/configure.ac b/configure.ac
index d622961..d63ad25 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 
 # Initialize Autoconf
 AC_PREREQ([2.60])
-AC_INIT([libpciaccess],[0.12.901],
+AC_INIT([libpciaccess],[0.12.902],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=libpciaccess],[libpciaccess])
 AC_CONFIG_SRCDIR([Makefile.am])
 AC_CONFIG_HEADERS([config.h])

commit cbb3c63affc1792ade0433691aa67f0edad52b0b
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date:   Wed Nov 9 09:46:30 2011 -0800

    Fix some -Wformat errors in scanpci
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/scanpci/scanpci.c b/scanpci/scanpci.c
index 219c814..1f5f8bd 100644
--- a/scanpci/scanpci.c
+++ b/scanpci/scanpci.c
@@ -29,6 +29,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <inttypes.h>
 
 #ifdef HAVE_ERR_H
 #include <err.h>
@@ -51,19 +52,19 @@
 static void
 print_pci_bridge( const struct pci_bridge_info * info )
 {
-    printf( "  Bus: primary=%02x, secondary=%02x, subordinate=%02x, "
-	    "sec-latency=%u\n",
+    printf( "  Bus: primary=%02"PRIx8", secondary=%02"PRIx8", subordinate=%02"PRIx8", "
+	    "sec-latency=%"PRIu8"\n",
 	    info->primary_bus,
 	    info->secondary_bus,
 	    info->subordinate_bus,
 	    info->secondary_latency_timer );
-    printf( "  I/O behind bridge: %08x-%08x\n",
+    printf( "  I/O behind bridge: %08"PRIx32"-%08"PRIx32"\n",
 	    info->io_base,
 	    info->io_limit );
-    printf( "  Memory behind bridge: %08x-%08x\n",
+    printf( "  Memory behind bridge: %08"PRIx32"-%08"PRIx32"\n",
 	    info->mem_base,
 	    info->mem_limit );
-    printf( "  Prefetchable memory behind bridge: %08llx-%08llx\n",
+    printf( "  Prefetchable memory behind bridge: %08"PRIx64"-%08"PRIx64"\n",
 	    info->prefetch_mem_base,
 	    info->prefetch_mem_limit );
 }
@@ -150,7 +151,7 @@ print_pci_device( struct pci_device * dev, int verbose )
 	pci_device_probe( dev );
 	for ( i = 0 ; i < 6 ; i++ ) {
 	    if ( dev->regions[i].base_addr != 0 ) {
-		printf( "  BASE%u     0x%08x SIZE %d  %s",
+		printf( "  BASE%u     0x%08"PRIxPTR" SIZE %zu  %s",
 			i,
 			(intptr_t) dev->regions[i].base_addr,
 			(size_t) dev->regions[i].size,

commit a0a53a67c91c698007dcac3e7aba27c999c4f6ed
Author: Nithin Nayak Sujir <nsujir@broadcom.com>
Date:   Mon Oct 24 12:15:15 2011 -0700

    libpciaccess: close mtrr fd on pci_cleanup
    
    Since the fd is not closed, calling pci_system_init and
    pci_system_cleanup more than 1024 times results in "too many files open"
    error.
    
    Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c
index d5ba66a..09e7138 100644
--- a/src/linux_sysfs.c
+++ b/src/linux_sysfs.c
@@ -889,8 +889,18 @@ pci_device_linux_sysfs_unmap_legacy(struct pci_device *dev, void *addr, pciaddr_
     return munmap(addr, size);
 }
 
+
+static void
+pci_system_linux_destroy(void)
+{
+#ifdef HAVE_MTRR
+	if (pci_sys->mtrr_fd != -1)
+		close(pci_sys->mtrr_fd);
+#endif
+}
+
 static const struct pci_system_methods linux_sysfs_methods = {
-    .destroy = NULL,
+    .destroy = pci_system_linux_destroy,
     .destroy_device = NULL,
     .read_rom = pci_device_linux_sysfs_read_rom,
     .probe = pci_device_linux_sysfs_probe,

commit 803bf3aa28de0f1260e479e2036159d4fead0a87
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Tue Oct 4 21:46:05 2011 -0700

    Solaris: Give better error on realloc failure
    
    commit a18460b385ae03 converted from a fixed maximum number of devices
    to dynamically growing the list via realloc, but didn't update the
    error message shown on failure.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Reviewed-by: Dirk Wallenstein <halsmit@t-online.de>
    Reviewed-by: Mark Kettenis <kettenis@openbsd.org>

diff --git a/src/solx_devfs.c b/src/solx_devfs.c
index d47a846..ea91479 100644
--- a/src/solx_devfs.c
+++ b/src/solx_devfs.c
@@ -454,8 +454,9 @@ probe_dev(nexus_t *nexus, pcitool_reg_t *prg_p, probe_info_t *pinfo)
 			new_num_elems * sizeof (struct pci_device_private));
 		if (new_devs == NULL) {
 		    (void) fprintf(stderr,
-			           "Maximum number of PCI devices found,"
-			           " discarding additional devices\n");
+			           "Error allocating memory for PCI devices:"
+				   " %s\n discarding additional devices\n",
+				   strerror(errno));
 		    return (rval);
 		}
 		(void) memset(&new_devs[pinfo->num_devices], 0,

commit af4478c52c960bee08209293aa14b784ac30dc05
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date:   Tue Oct 11 10:22:49 2011 -0700

    linux sysfs: Fix read-write access in map_legacy
    
    O_RDONLY | O_WRONLY != O_RDWR
    
    ><
    
    Reported-by: Javier Pello <javier.pello@urjc.es>
    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c
index 876abb1..d5ba66a 100644
--- a/src/linux_sysfs.c
+++ b/src/linux_sysfs.c
@@ -851,7 +851,7 @@ pci_device_linux_sysfs_map_legacy(struct pci_device *dev, pciaddr_t base,
     int ret=0;
 
     if (map_flags & PCI_DEV_MAP_FLAG_WRITABLE) {
-	flags |= O_WRONLY;
+	flags = O_RDWR; /* O_RDWR != O_WRONLY | O_RDONLY */;
 	prot |= PROT_WRITE;
     }
 

commit b9c5ce8083be53ea017bd15a63b173b4476fff23
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date:   Sun Oct 9 03:53:05 2011 -0700

    scanpci: Build fix for systems without <err.h>
    
    https://bugs.freedesktop.org/show_bug.cgi?id=31133
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/configure.ac b/configure.ac
index 476a4bf..d622961 100644
--- a/configure.ac
+++ b/configure.ac
@@ -106,6 +106,8 @@ AM_CONDITIONAL(GNU, [test "x$gnu" = xyes])
 
 AC_SYS_LARGEFILE
 
+AC_CHECK_HEADERS([err.h])
+
 AC_CHECK_HEADER([asm/mtrr.h], [have_mtrr_h="yes"], [have_mtrr_h="no"])
 
 if test "x$have_mtrr_h" = xyes; then
diff --git a/scanpci/scanpci.c b/scanpci/scanpci.c
index 36ecf04..219c814 100644
--- a/scanpci/scanpci.c
+++ b/scanpci/scanpci.c
@@ -22,11 +22,29 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
-#include <err.h>
 #include <unistd.h>
 
+#ifdef HAVE_ERR_H
+#include <err.h>
+#else
+# include <errno.h>
+# include <string.h>
+# define err(exitcode, format, args...) \
+   errx(exitcode, format ": %s", ## args, strerror(errno))
+# define errx(exitcode, format, args...) \
+   { warnx(format, ## args); exit(exitcode); }
+# define warn(format, args...) \
+   warnx(format ": %s", ## args, strerror(errno))
+# define warnx(format, args...) \
+   fprintf(stderr, format "\n", ## args)
+#endif
+
 #include "pciaccess.h"
 
 

commit 30e9ec91107791835d722f99498d659dec048922
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date:   Fri Oct 7 11:57:26 2011 -0700

    configure.ac: Bump version to 0.12.901
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/configure.ac b/configure.ac
index caaf358..476a4bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 
 # Initialize Autoconf
 AC_PREREQ([2.60])
-AC_INIT([libpciaccess],[0.12.1],
+AC_INIT([libpciaccess],[0.12.901],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=libpciaccess],[libpciaccess])
 AC_CONFIG_SRCDIR([Makefile.am])
 AC_CONFIG_HEADERS([config.h])

commit 12dbf6d2d346cfe7ba8b2a1697c56af3f9876be7
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date:   Fri Oct 7 11:56:06 2011 -0700

    Update library version to reflect new API
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index 6f50ade..6757a6f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -70,4 +70,4 @@ libpciaccess_la_SOURCES = common_bridge.c \
 
 libpciaccess_la_LIBADD = $(PCIACCESS_LIBS)
 
-libpciaccess_la_LDFLAGS = -version-number 0:10:8 -no-undefined
+libpciaccess_la_LDFLAGS = -version-number 0:11:0 -no-undefined

commit 58e87933b3286f33cdeedd3a6b21f4ea795bea47
Author: Adam Jackson <ajax@redhat.com>
Date:   Tue May 10 17:56:35 2011 -0400

    linux: Implement map_legacy
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c
index 0ed6862..876abb1 100644
--- a/src/linux_sysfs.c
+++ b/src/linux_sysfs.c
@@ -840,6 +840,55 @@ pci_device_linux_sysfs_write8(struct pci_io_handle *handle, uint32_t port,
     pwrite(handle->fd, &data, 1, port + handle->base);
 }
 
+static int
+pci_device_linux_sysfs_map_legacy(struct pci_device *dev, pciaddr_t base,
+				  pciaddr_t size, unsigned map_flags, void **addr)
+{
+    char name[PATH_MAX];
+    int flags = O_RDONLY;
+    int prot = PROT_READ;
+    int fd;
+    int ret=0;
+
+    if (map_flags & PCI_DEV_MAP_FLAG_WRITABLE) {
+	flags |= O_WRONLY;
+	prot |= PROT_WRITE;
+    }
+
+    /* First check if there's a legacy memory method for the device */
+    while (dev) {
+	snprintf(name, PATH_MAX, "/sys/class/pci_bus/%04x:%02x/legacy_mem",
+		 dev->domain, dev->bus);
+
+	fd = open(name, flags);
+	if (fd >= 0)
+	    break;
+
+	dev = pci_device_get_parent_bridge(dev);
+    }
+
+    /* If not, /dev/mem is the best we can do */
+    if (!dev)
+	fd = open("/dev/mem", flags);
+
+    if (fd < 0)
+	return errno;
+
+    *addr = mmap(NULL, size, prot, MAP_SHARED, fd, base);
+    if (*addr == MAP_FAILED) {
+	ret = errno;
+    }
+
+    close(fd);
+    return ret;
+}
+
+static int
+pci_device_linux_sysfs_unmap_legacy(struct pci_device *dev, void *addr, pciaddr_t size)
+{
+    return munmap(addr, size);
+}
+
 static const struct pci_system_methods linux_sysfs_methods = {
     .destroy = NULL,
     .destroy_device = NULL,
@@ -865,4 +914,7 @@ static const struct pci_system_methods linux_sysfs_methods = {
     .write32 = pci_device_linux_sysfs_write32,
     .write16 = pci_device_linux_sysfs_write16,
     .write8 = pci_device_linux_sysfs_write8,
+
+    .map_legacy = pci_device_linux_sysfs_map_legacy,
+    .unmap_legacy = pci_device_linux_sysfs_unmap_legacy,
 };

commit 8cc9a8fe57adfb52abaa90a8a2ac2316de8eb898
Author: Adam Jackson <ajax@redhat.com>
Date:   Tue May 10 17:56:34 2011 -0400

    Add map_legacy interface
    
    This allows platforms to hand back mmaps of the low 1M (ISA) address
    space on a per-domain basis.
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/include/pciaccess.h b/include/pciaccess.h
index 00ae6de..c457424 100644
--- a/include/pciaccess.h
+++ b/include/pciaccess.h
@@ -526,4 +526,12 @@ void pci_io_write32(struct pci_io_handle *handle, uint32_t reg, uint32_t data);
 void pci_io_write16(struct pci_io_handle *handle, uint32_t reg, uint16_t data);
 void pci_io_write8(struct pci_io_handle *handle, uint32_t reg, uint8_t data);
 
+/*
+ * Legacy memory access
+ */
+
+int pci_device_map_legacy(struct pci_device *dev, pciaddr_t base,
+			  pciaddr_t size, unsigned map_flags, void **addr);
+int pci_device_unmap_legacy(struct pci_device *dev, void *addr, pciaddr_t size);
+
 #endif /* PCIACCESS_H */
diff --git a/src/common_interface.c b/src/common_interface.c
index 94a0d21..6dccf8e 100644
--- a/src/common_interface.c
+++ b/src/common_interface.c
@@ -654,3 +654,47 @@ pci_device_enable(struct pci_device *dev)
     if (pci_sys->methods->enable)
 	pci_sys->methods->enable(dev);
 }
+
+/**
+ * Map the legacy memory space for the PCI domain containing \c dev.
+ *
+ * \param dev          Device whose memory region is to be mapped.
+ * \param base         Base address of the range to be mapped.
+ * \param size         Size of the range to be mapped.
+ * \param map_flags    Flag bits controlling how the mapping is accessed.
+ * \param addr         Location to store the mapped address.
+ *
+ * \returns
+ * Zero on success or an \c errno value on failure.
+ */
+int
+pci_device_map_legacy(struct pci_device *dev, pciaddr_t base, pciaddr_t size,
+		      unsigned map_flags, void **addr)
+{
+    if (base > 0x100000 || base + size > 0x100000)
+	return EINVAL;
+
+    if (!pci_sys->methods->map_legacy)
+	return ENOSYS;
+
+    return pci_sys->methods->map_legacy(dev, base, size, map_flags, addr);
+}
+
+/**
+ * Unmap the legacy memory space for the PCI domain containing \c dev.
+ *
+ * \param dev          Device whose memory region is to be unmapped.
+ * \param addr         Location of the mapped address.
+ * \param size         Size of the range to be unmapped.
+ *
+ * \returns
+ * Zero on success or an \c errno value on failure.
+ */
+int
+pci_device_unmap_legacy(struct pci_device *dev, void *addr, pciaddr_t size)
+{
+    if (!pci_sys->methods->unmap_legacy)
+	return ENOSYS;
+
+    return pci_sys->methods->unmap_legacy(dev, addr, size);
+}
diff --git a/src/pciaccess_private.h b/src/pciaccess_private.h
index beaeaa7..1653b8b 100644
--- a/src/pciaccess_private.h
+++ b/src/pciaccess_private.h
@@ -77,6 +77,10 @@ struct pci_system_methods {
     void (*write16)( struct pci_io_handle *handle, uint32_t reg,
 		     uint16_t data );
     void (*write8)( struct pci_io_handle *handle, uint32_t reg, uint8_t data );
+
+    int (*map_legacy)(struct pci_device *dev, pciaddr_t base, pciaddr_t size,
+		      unsigned map_flags, void **addr);
+    int (*unmap_legacy)(struct pci_device *dev, void *addr, pciaddr_t size);
 };
 
 struct pci_device_mapping {

commit e1a0240a3d6840b497845680c2bf6753415ba20f
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Fri Sep 16 22:11:38 2011 -0700

    Strip trailing whitespace
    
    Performed with: find * -type f | xargs perl -i -p -e 's{[ \t]+$}{}'
    git diff -w & git diff -b show no diffs from this change
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

diff --git a/Makefile.am b/Makefile.am
index a285275..fc47966 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-# 
+#
 # (C) Copyright IBM Corporation 2006
 # All Rights Reserved.
 #
diff --git a/configure.ac b/configure.ac
index 3c5ab56..caaf358 100644
--- a/configure.ac
+++ b/configure.ac
@@ -122,7 +122,7 @@ AC_CHECK_MEMBER([struct pci_io.pi_sel.pc_domain],
 
 AC_SUBST(PCIACCESS_CFLAGS)
 AC_SUBST(PCIACCESS_LIBS)
-		  
+
 AC_CONFIG_FILES([Makefile
 		include/Makefile
 		man/Makefile
diff --git a/include/pciaccess.h b/include/pciaccess.h
index 88515e2..00ae6de 100644
--- a/include/pciaccess.h
+++ b/include/pciaccess.h
@@ -50,7 +50,7 @@
 
 /**
  * \file pciaccess.h
- * 
+ *
  * \author Ian Romanick <idr@us.ibm.com>
  */
 
@@ -62,7 +62,7 @@
 #if __GNUC__ >= 3
 #define __deprecated __attribute__((deprecated))
 #else
-#define __deprecated 
+#define __deprecated
 #endif
 
 typedef uint64_t pciaddr_t;
@@ -193,7 +193,7 @@ int pci_device_cfg_write_bits(struct pci_device *dev, uint32_t mask,
 struct pci_id_match {
     /**
      * \name Device / vendor matching controls
-     * 
+     *
      * Control the search based on the device, vendor, subdevice, or subvendor
      * IDs.  Setting any of these fields to \c PCI_MATCH_ANY will cause the
      * field to not be used in the comparison.
@@ -208,7 +208,7 @@ struct pci_id_match {
 
     /**
      * \name Device class matching controls
-     * 
+     *
      */
     /*@{*/
     uint32_t    device_class;
@@ -261,7 +261,7 @@ struct pci_mem_region {
      * This address is really only useful to other devices in the same
      * domain.  It's probably \b not the address applications will ever
      * use.
-     * 
+     *
      * \warning
      * Most (all?) platform back-ends leave this field unset.
      */
@@ -270,7 +270,7 @@ struct pci_mem_region {
 
     /**
      * Base physical address of the region from the CPU's point of view.
-     * 
+     *
      * This address is typically passed to \c pci_device_map_range to create
      * a mapping of the region to the CPU's virtual address space.
      */
@@ -468,7 +468,7 @@ struct pci_pcmcia_bridge_info {
     uint8_t    card_bus;
     uint8_t    subordinate_bus;
     uint8_t    cardbus_latency_timer;
-    
+
     uint16_t    secondary_status;
     uint16_t    bridge_control;
 
diff --git a/src/Doxyfile b/src/Doxyfile
index 87a4123..1185875 100644
--- a/src/Doxyfile
+++ b/src/Doxyfile
@@ -14,198 +14,198 @@
 # Project related configuration options
 #---------------------------------------------------------------------------
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
 # by quotes) that should identify the project.
 
 PROJECT_NAME           = libpciaccess
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = 
+PROJECT_NUMBER         =
 
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = 
+OUTPUT_DIRECTORY       =
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
 # otherwise cause performance problems for the file system.
 
 CREATE_SUBDIRS         = NO
 
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
-# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
-# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
-# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
 # Swedish, and Ukrainian.
 
 OUTPUT_LANGUAGE        = English
 
-# This tag can be used to specify the encoding used in the generated output. 
-# The encoding is not always determined by the language that is chosen, 
-# but also whether or not the output is meant for Windows or non-Windows users. 
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
-# forces the Windows encoding (this is the default for the Windows binary), 
-# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
 # all platforms other than Windows).
 
 USE_WINDOWS_ENCODING   = NO
 
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
 # Set to NO to disable this.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
 
 REPEAT_BRIEF           = YES
 
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
 # "represents" "a" "an" "the"
 
-ABBREVIATE_BRIEF       = 
+ABBREVIATE_BRIEF       =
 
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
 # description.
 
 ALWAYS_DETAILED_SEC    = NO
 
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
 # operators of the base classes will not be shown.
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
 # to NO the shortest path that makes the file name unique will be used.
 
 FULL_PATH_NAMES        = YES
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
 # path to strip.
 
-STRIP_FROM_PATH        = 
+STRIP_FROM_PATH        =
 
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
 # are normally passed to the compiler using the -I flag.
 
-STRIP_FROM_INC_PATH    = 
+STRIP_FROM_INC_PATH    =
 
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like the Qt-style comments (thus requiring an 
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
 # explicit @brief command for a brief description.
 
 JAVADOC_AUTOBRIEF      = NO
 
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
 # description. Set this tag to YES if you prefer the old behaviour instead.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
 # will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
+# If set to NO, the detailed description appears after the member
 # documentation.
 
 DETAILS_AT_TOP         = NO
 
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
 # re-implements.
 
 INHERIT_DOCS           = YES
 
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
 # be part of the file/class/namespace that contains it.
 
 SEPARATE_MEMBER_PAGES  = NO
 
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
 # Doxygen uses this value to replace tabs by spaces in code fragments.
 
 TAB_SIZE               = 8
 
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
 # You can put \n's in the value part of an alias to insert newlines.
 
-ALIASES                = 
+ALIASES                =
 
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
 # of all members will be omitted, etc.
 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
-# only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
 # will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
 # the \nosubgrouping command.
 
 SUBGROUPING            = YES
@@ -214,326 +214,326 @@ SUBGROUPING            = YES
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
 EXTRACT_ALL            = NO
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
 
 EXTRACT_PRIVATE        = NO
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
 EXTRACT_STATIC         = NO
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
 # If set to NO only classes defined in header files are included.
 
 EXTRACT_LOCAL_CLASSES  = YES
 
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
 # If set to NO (the default) only methods in the interface are included.
 
 EXTRACT_LOCAL_METHODS  = NO
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
 # This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_MEMBERS     = NO
 
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
 # overviews. This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
 # documentation.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
 # function's detailed documentation block.
 
 HIDE_IN_BODY_DOCS      = NO
 
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
 # Set it to YES to include the internal documentation.
 
 INTERNAL_DOCS          = NO
 
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
 
 CASE_SENSE_NAMES       = YES
 
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
 # documentation. If set to YES the scope will be hidden.
 
 HIDE_SCOPE_NAMES       = NO
 
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
 # of that file.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.


Reply to: