With older models of the Meinberg PCI cards, the data registers of the card were only accessible via an I/O address space.
With newer card types, however, the same registers are also accessible via a memory-mapped address space.
Register access via the memory-mapped address space is a little bit faster than access via the I/O address space,
so the kernel driver mbgclock
normally accesses a card via the memory mapped registers, if the card supports this.
If for some reason I/O access should be done preferably even though a card supports memory mapped access, there is an option to force the kernel driver to access the card via the I/O address space instead of the memory-mapped registers.
Please note, however, that the special timestamp registers used by some specific API calls to read pure timestamps very quickly are only accessible via the memory-mapped address space, so these API calls are not affected by this setting.
The particular way to force I/O access depends on the operating system.
On Windows, I/O access can be forced via a registry parameter for the mbgclock
kernel module.
Run the regedit
program and navigate to the path that contains information related to the mbgclock
kernel module:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\
Then create a new registry key Parameters
, and a new registry value of type DWORD with name Force I/O Access
below the new key.
Set the value of Force I/O Access
to 1
to enable the option, or set it to 0
(or delete the entry) to disable it.
Alternatively, here are some files that simplify the procedure:
Use this file to enable force I/O access mode:
Use this file to disable force I/O access mode:
Download the appropríate file, and in the file explorer, just click on the downloaded file and accept the suggestion to install registry setting.
Please note the option is only checked when the mbgclock
kernel driver is loaded,
e.g. when all Meinberg devices are first disabled and then re-enabled in the Windows device manager,
or when the system is boots.
If the option becomes effective, a corresponding log message from source mbgclock
is added
to the System Eventlog
, which can be inspected by the Windows event viewer (eventvwr.exe).
On Linux, I/O access can be forced by using a command line parameter when the kernel driver is loaded, i.e.:
modprobe mbgclock force_io_access=1
If the driver is loaded automatically at boot time, the command line parameter force_io_access=1
has to be specified in a configuration file in /etc/modprobe.d/
, which probably needs to be created.
For example, create a file /etc/modprobe.d/99-mbgclock.conf
using your favorite text editor,
and add the line:
options mbgclock force_io_access=1
Alternatively, the driver package can be built with the option compiled in, so it is not necessary
to specify the command line option or create a configuration file:
make clean; make FORCE_IO_ACCESS=1
Please note the option is only checked when the mbgclock
kernel driver is loaded,
e.g. if it is manually unloaded and reloaded, or when the system boots.
If the option becomes effective, a corresponding log message can be found
in the output of the dmesg
command, e.g. dmesg | grep mbgclock
, and
subsequently in the system logs, e.g. /var/log/messages
, /var/log/syslog
,
or the output of the journalctl
command on systems using systemd
.
On *BSD, if the driver version is current enough to support this, the Force I/O Access
option
can be compiled in when the driver package is built:
make clean; make FORCE_IO_ACCESS=1
Please note the option is only checked when the mbgclock
kernel driver is loaded,
e.g. if it is manually unloaded and reloaded, or when the system boots.
If the option becomes effective, a corresponding log message can be found
in the output of the dmesg
command, e.g. dmesg | grep mbgclock
,
and subsequently in the system logs, e.g. /var/log/messages
.
— Martin Burnicki martin.burnicki@meinberg.de, last updated 2020-11-05