summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Burnicki <martin.burnicki@meinberg.de>2011-07-20 12:00:00 +0200
committerMartin Burnicki <martin.burnicki@meinberg.de>2011-07-20 12:00:00 +0200
commit9fd30c3e28e55927b786f742fee14b3a03c8cd32 (patch)
treeed774e5c82c81ae2950aff637ec16cf6397b7051
parent8cbbf5d5604c305f9839ce573c49fbfd33f816ab (diff)
downloadmbgtools-nbsd-9fd30c3e28e55927b786f742fee14b3a03c8cd32.tar.gz
mbgtools-nbsd-9fd30c3e28e55927b786f742fee14b3a03c8cd32.zip
Update files from mbgtools-nbsd-dev-2011-07-20.tar.gzmbgtools-nbsd-dev-2011-07-20
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbgctrl/mbgctrl.c26
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbgirigcfg/mbgirigcfg.c12
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/macioctl.h156
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c360
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h261
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h92
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgpccyc.h8
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/pcpsdefs.h60
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/pcpsdev.h43
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c87
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h65
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/words.h17
12 files changed, 800 insertions, 387 deletions
diff --git a/src/external/bsd/meinberg/dist/mbgctrl/mbgctrl.c b/src/external/bsd/meinberg/dist/mbgctrl/mbgctrl.c
index bfd7093..18e8644 100755
--- a/src/external/bsd/meinberg/dist/mbgctrl/mbgctrl.c
+++ b/src/external/bsd/meinberg/dist/mbgctrl/mbgctrl.c
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgctrl.c 1.22.1.7.1.22 2011/07/08 11:20:15 martin TRASH $
+ * $Id: mbgctrl.c 1.22.1.7.1.24 2011/07/19 15:49:42 martin TRASH $
*
* Description:
* Main file for mbgctrl program which sends commands and
@@ -9,6 +9,9 @@
*
* -----------------------------------------------------------------------
* $Log: mbgctrl.c $
+ * Revision 1.22.1.7.1.24 2011/07/19 15:49:42 martin
+ * Warn if trying to handle serial port cfg but no serial port is supported.
+ * Revision 1.22.1.7.1.23 2011/07/19 13:08:08 martin
* Revision 1.22.1.7.1.22 2011/07/08 11:20:15 martin
* More PTP stuff ...
* Revision 1.22.1.7.1.21 2011/07/08 09:04:46 martin
@@ -2310,16 +2313,21 @@ int check_cmd_line( int argc, char *argv[], MBG_DEV_HANDLE dh, const PCPS_DEV *p
if ( p_dev )
{
check_setup_receiver_info( dh, p_dev, p_ri );
- check_get_receiver_port_cfg( dh, p_rpcfg, p_dev, p_ri );
-
- if ( *cp != 0 )
+ if ( p_ri->n_com_ports )
{
- printf( "** Invalid parameter: %s\n", argv[i] );
- must_print_usage = 1;
- continue;
- }
+ check_get_receiver_port_cfg( dh, p_rpcfg, p_dev, p_ri );
+
+ if ( *cp != 0 )
+ {
+ printf( "** Invalid parameter: %s\n", argv[i] );
+ must_print_usage = 1;
+ continue;
+ }
- show_serial_settings( dh, p_rpcfg, p_ri );
+ show_serial_settings( dh, p_rpcfg, p_ri );
+ }
+ else
+ printf( "** This device does not provide a configurable COM port.\n" );
}
continue;
diff --git a/src/external/bsd/meinberg/dist/mbgirigcfg/mbgirigcfg.c b/src/external/bsd/meinberg/dist/mbgirigcfg/mbgirigcfg.c
index f09d5db..b55e3f9 100755
--- a/src/external/bsd/meinberg/dist/mbgirigcfg/mbgirigcfg.c
+++ b/src/external/bsd/meinberg/dist/mbgirigcfg/mbgirigcfg.c
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgirigcfg.c 1.10.1.11 2011/07/07 15:08:35 martin TRASH $
+ * $Id: mbgirigcfg.c 1.10.1.12 2011/07/19 12:59:06 martin TRASH $
*
* Description:
* Main file for the mbgirigcfg program which can be used to configure
@@ -10,6 +10,7 @@
*
* -----------------------------------------------------------------------
* $Log: mbgirigcfg.c $
+ * Revision 1.10.1.12 2011/07/19 12:59:06 martin
* Revision 1.10.1.11 2011/07/07 15:08:35 martin
* Removed obsolete code.
* Revision 1.10.1.10 2011/07/06 14:53:50 martin
@@ -618,7 +619,7 @@ void usage( void )
static /*HDR*/
int do_mbgirigcfg( MBG_DEV_HANDLE dh, const PCPS_DEV *p_dev )
{
- int rc;
+ int rc = MBG_SUCCESS;
cfg_err_rx = 0;
cfg_err_tx = 0;
@@ -629,6 +630,13 @@ int do_mbgirigcfg( MBG_DEV_HANDLE dh, const PCPS_DEV *p_dev )
rc = get_cfg( dh, p_dev );
+ if ( !_pcps_has_irig( p_dev ) )
+ {
+ printf( "** This device does not provide an IRIG input or output.\n" );
+ must_print_help_info = 1;
+ return rc;
+ }
+
check_cmd_line( glb_argc, glb_argv, p_dev );
if ( cfg_err_rx || cfg_err_tx )
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/macioctl.h b/src/external/bsd/meinberg/dist/mbglib/common/macioctl.h
index 9c09cdc..e3c0fbe 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/macioctl.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/macioctl.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: macioctl.h 1.33.1.23 2011/07/14 14:53:58 martin TRASH $
+ * $Id: macioctl.h 1.33.1.25 2011/07/20 15:48:22 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -11,6 +11,9 @@
*
* -----------------------------------------------------------------------
* $Log: macioctl.h $
+ * Revision 1.33.1.25 2011/07/20 15:48:22 martin
+ * Conditionally use older IOCTL request buffer structures.
+ * Revision 1.33.1.24 2011/07/19 12:52:05 martin
* Revision 1.33.1.23 2011/07/14 14:53:58 martin
* Modified generic IOCTL handling such that for calls requiring variable sizes
* a fixed request block containing input and output buffer pointers and sizes is
@@ -619,7 +622,13 @@ typedef union
TR_DISTANCE tr_distance;
PCPS_MAPPED_MEM mapped_mem;
- IOCTL_GENERIC_REQ req;
+
+ #if USE_IOCTL_GENERIC_REQ
+ IOCTL_GENERIC_REQ req;
+ #else
+ IOCTL_GENERIC_CTL ctl;
+ #endif
+
int i;
} IOCTL_BUFFER;
@@ -799,8 +808,13 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
MBG_PC_CYCLES cyc;
#endif
IOCTL_BUFFER iob;
- void *p_buff_in;
- void *p_buff_out;
+ #if USE_IOCTL_GENERIC_REQ
+ void *p_buff_in;
+ void *p_buff_out;
+ #else
+ IOCTL_GENERIC_BUFFER *p_buff;
+ int buffer_size;
+ #endif
uint8_t pcps_cmd;
int rc = MBG_SUCCESS;
@@ -1611,6 +1625,7 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
// Generic read/write operations which can do anything
case IOCTL_PCPS_GENERIC_READ:
+ #if USE_IOCTL_GENERIC_REQ
_iob_from_pin_var( iob.req, pin );
p_buff_out = _pcps_kmalloc( iob.req.out_sz );
@@ -1635,10 +1650,37 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
if ( rc != MBG_SUCCESS )
goto err_access;
+ #else
+
+ _iob_from_pin_var( iob.ctl, pin );
+ buffer_size = sizeof( iob.ctl ) + iob.ctl.data_size_out;
+ p_buff = _pcps_kmalloc( buffer_size );
+
+ if ( p_buff == NULL )
+ goto err_no_mem;
+
+ _pcps_sem_inc_safe( pddev );
+ rc = _pcps_read( pddev, (uint8_t) iob.ctl.info, p_buff->data,
+ (uint8_t) iob.ctl.data_size_out );
+ _pcps_sem_dec( pddev );
+
+ if ( rc == MBG_SUCCESS )
+ {
+ p_buff->ctl = iob.ctl;
+ _iob_to_pout( p_buff, pout, buffer_size ); //##+++++++ need to check this !!
+ }
+
+ _pcps_kfree( p_buff, buffer_size );
+
+ if ( rc != MBG_SUCCESS )
+ goto err_access;
+
+ #endif
break;
case IOCTL_PCPS_GENERIC_WRITE:
+ #if USE_IOCTL_GENERIC_REQ
_iob_from_pin_var( iob.req, pin );
p_buff_in = _pcps_kmalloc( iob.req.in_sz );
@@ -1662,10 +1704,33 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
if ( rc != MBG_SUCCESS )
goto err_access;
+ #else
+
+ _iob_from_pin_var( iob.ctl, pin );
+ buffer_size = sizeof( iob.ctl ) + iob.ctl.data_size_in;
+ p_buff = _pcps_kmalloc( buffer_size );
+
+ if ( p_buff == NULL )
+ goto err_no_mem;
+
+ _iob_from_pin( p_buff, pin, buffer_size );
+
+ _pcps_sem_inc_safe( pddev );
+ rc = pcps_write( pddev, (uint8_t) iob.ctl.info, p_buff->data,
+ (uint8_t) iob.ctl.data_size_in );
+ _pcps_sem_dec( pddev );
+
+ _pcps_kfree( p_buff, buffer_size );
+
+ if ( rc != MBG_SUCCESS )
+ goto err_access;
+
+ #endif
break;
case IOCTL_PCPS_GENERIC_READ_GPS:
+ #if USE_IOCTL_GENERIC_REQ
_iob_from_pin_var( iob.req, pin );
p_buff_out = _pcps_kmalloc( iob.req.out_sz );
@@ -1690,10 +1755,37 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
if ( rc != MBG_SUCCESS )
goto err_access;
+ #else
+
+ _iob_from_pin_var( iob.ctl, pin );
+ buffer_size = sizeof( iob.ctl ) + iob.ctl.data_size_out;
+ p_buff = _pcps_kmalloc( buffer_size );
+
+ if ( p_buff == NULL )
+ goto err_no_mem;
+
+ _pcps_sem_inc_safe( pddev );
+ rc = pcps_read_gps( pddev, (uint8_t) iob.ctl.info, p_buff->data,
+ (uint16_t) iob.ctl.data_size_out );
+ _pcps_sem_dec( pddev );
+
+ if ( rc == MBG_SUCCESS )
+ {
+ p_buff->ctl = iob.ctl;
+ _iob_to_pout( p_buff, pout, buffer_size ); //##+++++++ need to check this !!
+ }
+
+ _pcps_kfree( p_buff, buffer_size );
+
+ if ( rc != MBG_SUCCESS )
+ goto err_access;
+
+ #endif
break;
case IOCTL_PCPS_GENERIC_WRITE_GPS:
+ #if USE_IOCTL_GENERIC_REQ
_iob_from_pin_var( iob.req, pin );
p_buff_in = _pcps_kmalloc( iob.req.in_sz );
@@ -1717,10 +1809,33 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
if ( rc != MBG_SUCCESS )
goto err_access;
+ #else
+
+ _iob_from_pin_var( iob.ctl, pin );
+ buffer_size = sizeof( iob.ctl ) + iob.ctl.data_size_in;
+ p_buff = _pcps_kmalloc( buffer_size );
+
+ if ( p_buff == NULL )
+ goto err_no_mem;
+
+ _iob_from_pin( p_buff, pin, buffer_size );
+
+ _pcps_sem_inc_safe( pddev );
+ rc = pcps_write_gps( pddev, (uint8_t) iob.ctl.info, p_buff->data,
+ (uint8_t) iob.ctl.data_size_in );
+ _pcps_sem_dec( pddev );
+
+ _pcps_kfree( p_buff, buffer_size );
+
+ if ( rc != MBG_SUCCESS )
+ goto err_access;
+
+ #endif
break;
case IOCTL_PCPS_GENERIC_IO:
+ #if USE_IOCTL_GENERIC_REQ
_io_chk_cond( _pcps_ddev_has_generic_io( pddev ) );
_iob_from_pin_var( iob.req, pin );
@@ -1783,6 +1898,39 @@ int ioctl_switch( PCPS_DDEV *pddev, unsigned int ioctl_code,
if ( rc != MBG_SUCCESS )
goto err_access;
+ #else
+
+ _io_chk_cond( _pcps_ddev_has_generic_io( pddev ) );
+
+ _iob_from_pin_var( iob.ctl, pin );
+ buffer_size = sizeof( iob.ctl ) +
+ ( ( iob.ctl.data_size_in > iob.ctl.data_size_out ) ?
+ iob.ctl.data_size_in : iob.ctl.data_size_out );
+ p_buff = _pcps_kmalloc( buffer_size );
+
+ if ( p_buff == NULL )
+ goto err_no_mem;
+
+ _iob_from_pin( p_buff, pin, sizeof( p_buff->ctl ) + iob.ctl.data_size_in );
+
+ _pcps_sem_inc_safe( pddev );
+ rc = pcps_generic_io( pddev, (uint8_t) iob.ctl.info,
+ p_buff->data, (uint8_t) iob.ctl.data_size_in,
+ p_buff->data, (uint8_t) iob.ctl.data_size_out );
+ _pcps_sem_dec( pddev );
+
+ if ( rc == MBG_SUCCESS )
+ {
+ p_buff->ctl = iob.ctl;
+ _iob_to_pout( p_buff, pout, sizeof( p_buff->ctl ) + iob.ctl.data_size_out ); //##+++++++ need to check this !!
+ }
+
+ _pcps_kfree( p_buff, buffer_size );
+
+ if ( rc != MBG_SUCCESS )
+ goto err_access;
+
+ #endif
break;
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c b/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c
index 95fa744..fb04f1d 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c
+++ b/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgdevio.c 1.35.1.24 2011/07/14 14:54:00 martin TRASH $
+ * $Id: mbgdevio.c 1.35.1.25 2011/07/20 15:50:51 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,10 @@
*
* -----------------------------------------------------------------------
* $Log: mbgdevio.c $
+ * Revision 1.35.1.25 2011/07/20 15:50:51 martin
+ * Conditionally use older IOCTL request buffer structures.
+ * Moved some macros etc. to the .h file.
+ * Modified some macros.
* Revision 1.35.1.24 2011/07/14 14:54:00 martin
* Modified generic IOCTL handling such that for calls requiring variable sizes
* a fixed request block containing input and output buffer pointers and sizes is
@@ -271,12 +275,7 @@
#include <mbg_dpmi.h>
#endif
-#if defined( MBG_USE_KERNEL_DRIVER )
-
- #include <mbgioctl.h>
- #include <stddef.h>
-
-#else
+#if !defined( MBG_USE_KERNEL_DRIVER )
#include <pcpsdrvr.h>
#include <pci_asic.h>
@@ -314,60 +313,14 @@ typedef struct
#include <tchar.h>
#include <stdio.h>
- #define _mbgdevio_vars() \
- DWORD rc
-
- #define _mbgdevio_ret_val \
- rc
-
- #define _do_mbgdevio_io( _dh, _ioctl, _p, _in_sz, _out_sz ) \
- rc = do_mbgdevio_io( _dh, _ioctl, (LPVOID) _p, _in_sz, (LPVOID) _p, _out_sz )
-
- static __mbg_inline
- DWORD do_mbgdevio_io( MBG_DEV_HANDLE dh, int ioctl_code,
- const void *in_p, int in_sz, void *out_p, int out_sz )
- {
- DWORD ReturnedLength;
-
- if ( !DeviceIoControl( dh, ioctl_code,
- (LPVOID) in_p, in_sz, out_p, out_sz,
- &ReturnedLength,
- NULL
- ) )
- {
- DWORD rc = GetLastError();
-
- // do not report a USB device timeout error
- if ( rc != _mbg_err_to_os( MBG_ERR_USB_ACCESS ) )
- mbgsvctl_log_mbgdevio_error( ioctl_code, rc );
-
- return rc;
- }
-
- return MBG_SUCCESS;
-
- } // do_mbgdevio_io
-
#elif defined( MBG_TGT_UNIX )
- #include <mbgioctl.h>
-
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h> // sprintf()
- #include <sys/ioctl.h>
#include <sys/mman.h>
- #define _mbgdevio_vars() \
- int rc
-
- #define _mbgdevio_ret_val \
- ( ( rc < 0 ) ? rc : MBG_SUCCESS )
-
- #define _do_mbgdevio_io( _dh, _ioctl, _p, _insz, _outsz ) \
- rc = ioctl( _dh, _ioctl, _p )
-
#else // other target OSs which access the hardware directly
#if defined( MBG_TGT_QNX_NTO )
@@ -390,12 +343,6 @@ typedef struct
#define _pcps_write_gps_var_safe _pcps_write_gps_var
#endif
- #define _mbgdevio_vars() \
- int rc
-
- #define _mbgdevio_ret_val \
- rc
-
#define _mbgdevio_chk_cond( _cond ) \
{ \
if ( !(_cond) ) \
@@ -423,179 +370,46 @@ typedef struct
-// The code below depends on whether the target device is accessed via
-// IOCTLs to a device driver, or the hardware is accessed directly.
-
-#if defined( _MBGIOCTL_H ) // using IOCTL to access device driver
-
- #define _mbgdevio_read( _dh, _cmd, _ioctl, _p, _sz ) \
- _do_mbgdevio_io( _dh, _ioctl, _p, 0, _sz )
-
- #define _mbgdevio_write( _dh, _cmd, _ioctl, _p, _sz ) \
- _do_mbgdevio_io( _dh, _ioctl, _p, _sz, 0 )
-
- #define _mbgdevio_read_gps _mbgdevio_read
-
- #define _mbgdevio_write_gps _mbgdevio_write
-
-
- #define _mbgdevio_read_var( _dh, _cmd, _ioctl, _p ) \
- _mbgdevio_read( _dh, _cmd, _ioctl, _p, sizeof( *(_p) ) )
-
- #define _mbgdevio_write_var( _dh, _cmd, _ioctl, _p ) \
- _mbgdevio_write( _dh, _cmd, _ioctl, _p, sizeof( *(_p) ) )
-
- #define _mbgdevio_write_cmd( _dh, _cmd, _ioctl ) \
- _mbgdevio_write( _dh, _cmd, _ioctl, NULL, 0 )
-
- #define _mbgdevio_read_gps_var _mbgdevio_read_var
-
- #define _mbgdevio_write_gps_var _mbgdevio_write_var
-
-
- #define _mbgdevio_gen_read( _dh, _cmd, _p, _sz ) \
- rc = mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_READ, NULL, 0, _p, _sz )
-
- #define _mbgdevio_gen_write( _dh, _cmd, _p, _sz ) \
- rc = mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_WRITE, _p, _sz, NULL, 0 )
-
- #define _mbgdevio_gen_io( _dh, _type, _in_p, _in_sz, _out_p, _out_sz ) \
- rc = mbgdevio_do_gen_io( _dh, _type, IOCTL_PCPS_GENERIC_IO, _in_p, _in_sz, _out_p, _out_sz )
-
- #define _mbgdevio_gen_read_gps( _dh, _cmd, _p, _sz ) \
- rc = mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_READ_GPS, NULL, 0, _p, _sz )
-
- #define _mbgdevio_gen_write_gps( _dh, _cmd, _p, _sz ) \
- rc = mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_WRITE_GPS, _p, _sz, NULL, 0 )
-
-
- static // __mbg_inline
- int mbgdevio_do_gen_io( MBG_DEV_HANDLE dh, int info, unsigned int ioctl_code,
- const void *in_p, int in_sz,
- void *out_p, int out_sz )
- {
- int rc;
-
- #if _MBG_SUPP_VAR_ACC_SIZE
- #if defined( MBG_TGT_WIN32 )
- rc = do_mbgdevio_io( dh, ioctl_code, in_p, in_sz, out_p, out_sz );
- #else
- #error Generic IOCTL for var acc size needs to be defined
- #endif
- #else
- IOCTL_GENERIC_REQ req = { 0 };
-
- req.info = info;
- req.in_p = in_p;
- req.in_sz = in_sz;
- req.out_p = out_p;
- req.out_sz = out_sz;
-
- #if defined( MBG_TGT_UNIX )
- rc = ioctl( dh, ioctl_code, &req ); //##++++++++++++
- #else
- #error Generic IOCTL for fixed acc size needs to be defined
- #endif
- #endif
-
- return rc;
-
- } // mbgdevio_do_gen_io
-
-#else // accessing hardware device directly
-
- #define _mbgdevio_read( _dh, _cmd, _ioctl, _p, _sz ) \
- rc = pcps_read_safe( _dh, _cmd, _p, _sz )
-
- #define _mbgdevio_write( _dh, _cmd, _ioctl, _p, _sz ) \
- rc = pcps_write_safe( _dh, _cmd, _p, _sz )
-
- #define _mbgdevio_read_gps( _dh, _cmd, _ioctl, _p, _sz ) \
- rc = pcps_read_gps_safe( _dh, _cmd, _p, _sz )
-
- #define _mbgdevio_write_gps( _dh, _cmd, _ioctl, _p, _sz ) \
- rc = pcps_write_gps_safe( _dh, _cmd, _p, _sz )
-
-
- #define _mbgdevio_read_var( _dh, _cmd, _ioctl, _p ) \
- rc = _pcps_read_var_safe( _dh, _cmd, *(_p) )
-
- #define _mbgdevio_write_var( _dh, _cmd, _ioctl, _p ) \
- rc = _pcps_write_var_safe( _dh, _cmd, *(_p) )
-
- #define _mbgdevio_write_cmd( _dh, _cmd, _ioctl ) \
- rc = _pcps_write_byte_safe( _dh, _cmd );
-
- #define _mbgdevio_read_gps_var( _dh, _cmd, _ioctl, _p ) \
- rc = _pcps_read_gps_var_safe( _dh, _cmd, *(_p) )
-
- #define _mbgdevio_write_gps_var( _dh, _cmd, _ioctl, _p ) \
- rc = _pcps_write_gps_var_safe( _dh, _cmd, *(_p) )
-
-
- #define _mbgdevio_gen_read( _dh, _cmd, _p, _sz ) \
- _mbgdevio_read( _dh, _cmd, -1, _p, _sz )
-
- #define _mbgdevio_gen_write( _dh, _cmd, _p, _sz ) \
- _mbgdevio_write( _dh, _cmd, -1, _p, _sz )
-
- #define _mbgdevio_gen_io( _dh, _type, _in_p, _in_sz, _out_p, _out_sz ); \
- { \
- _mbgdevio_chk_cond( _pcps_ddev_has_generic_io( _dh ) ); \
- rc = pcps_generic_io( _dh, _type, _in_p, _in_sz, _out_p, _out_sz ); \
- }
-
- #define _mbgdevio_gen_read_gps( _dh, _cmd, _p, _sz ) \
- _mbgdevio_read_gps( _dh, _cmd, -1, _p, _sz )
-
- #define _mbgdevio_gen_write_gps( _dh, _cmd, _p, _sz ) \
- _mbgdevio_write_gps( _dh, _cmd, -1, _p, _sz )
-
-#endif
-
-
-
-
#define _mbgdevio_read_chk( _dh, _cmd, _ioctl, _p, _sz, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_read( _dh, _cmd, _ioctl, _p, _sz ); \
+ rc = _do_mbgdevio_read( _dh, _cmd, _ioctl, _p, _sz ); \
}
#define _mbgdevio_read_var_chk( _dh, _cmd, _ioctl, _p, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_read_var( _dh, _cmd, _ioctl, _p ); \
+ rc = _mbgdevio_read_var( _dh, _cmd, _ioctl, _p ); \
}
#define _mbgdevio_write_var_chk( _dh, _cmd, _ioctl, _p, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_write_var( _dh, _cmd, _ioctl, _p ); \
+ rc = _mbgdevio_write_var( _dh, _cmd, _ioctl, _p ); \
}
#define _mbgdevio_write_cmd_chk( _dh, _cmd, _ioctl, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_write_cmd( _dh, _cmd, _ioctl ); \
+ rc = _mbgdevio_write_cmd( _dh, _cmd, _ioctl ); \
}
#define _mbgdevio_read_gps_chk( _dh, _cmd, _ioctl, _p, _sz, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_read_gps( _dh, _cmd, _ioctl, _p, _sz ); \
+ rc = _do_mbgdevio_read_gps( _dh, _cmd, _ioctl, _p, _sz ); \
}
#define _mbgdevio_read_gps_var_chk( _dh, _cmd, _ioctl, _p, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_read_gps_var( _dh, _cmd, _ioctl, _p ); \
+ rc = _mbgdevio_read_gps_var( _dh, _cmd, _ioctl, _p ); \
}
#define _mbgdevio_write_gps_var_chk( _dh, _cmd, _ioctl, _p, _cond ) \
{ \
_mbgdevio_chk_cond( _cond ); \
- _mbgdevio_write_gps_var( _dh, _cmd, _ioctl, _p ); \
+ rc = _mbgdevio_write_gps_var( _dh, _cmd, _ioctl, _p ); \
}
@@ -604,7 +418,7 @@ typedef struct
#define _mbgdevio_query_cond( _dh, _cond, _ioctl, _p ) \
{ \
_mbgdevio_vars(); \
- _mbgdevio_read_var( _dh, -1, _ioctl, _p ); \
+ rc = _mbgdevio_read_var( _dh, -1, _ioctl, _p ); \
return _mbgdevio_ret_val; \
}
@@ -613,7 +427,7 @@ typedef struct
#define _mbgdevio_query_cond( _dh, _cond, _ioctl, _p ) \
{ \
*p = _cond( _dh ); \
- return MBG_SUCCESS; \
+ return MBG_SUCCESS; \
}
#define _mbgdevio_query_ri_cond( _dh, _cond, _ioctl, _p ) \
@@ -629,6 +443,41 @@ static MBG_DEVICE_INFO device_info_list[MBG_MAX_DEVICES];
+#if defined( MBG_TGT_WIN32 )
+
+// We don't move this as inline function to mbgdevio.h for now
+// since this function calls mbgsvctl_log_mbgdevio_error() which
+// is defined in mbgsvctl.h, and including mbgsvc.h from within
+// mbgdevio.h results in DLL import/export mismatches.
+
+/*HDR*/
+MBGDEVIO_RET_VAL do_mbg_ioctl( MBG_DEV_HANDLE dh, int ioctl_code,
+ const void *in_p, int in_sz, void *out_p, int out_sz )
+{
+ DWORD ReturnedLength;
+
+ if ( !DeviceIoControl( dh, ioctl_code,
+ (LPVOID) in_p, in_sz, out_p, out_sz,
+ &ReturnedLength,
+ NULL
+ ) )
+ {
+ DWORD rc = GetLastError();
+
+ // do not report a USB device timeout error
+ if ( rc != _mbg_err_to_os( MBG_ERR_USB_ACCESS ) )
+ mbgsvctl_log_mbgdevio_error( ioctl_code, rc );
+
+ return rc;
+ }
+
+ return MBG_SUCCESS;
+
+} // do_mbg_ioctl
+
+#endif // defined( MBG_TGT_WIN32 )
+
+
static /*HDR*/ //##++ make this public ?
int mbg_comp_hr_latency( PCPS_TIME_STAMP *ts,
@@ -1469,7 +1318,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_drvr_info( MBG_DEV_HANDLE dh, PCPS_DRVR_INFO
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_DRVR_INFO, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_DRVR_INFO, p );
return _mbgdevio_ret_val;
#else
#if defined( __BORLANDC__ )
@@ -1497,7 +1346,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_device_info( MBG_DEV_HANDLE dh, PCPS_DEV *p )
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_DEV, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_DEV, p );
// Endianess is converted inside the kernel driver, if necessary.
return _mbgdevio_ret_val;
#else
@@ -1524,7 +1373,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_status_port( MBG_DEV_HANDLE dh, PCPS_STATUS_P
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_STATUS_PORT, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_STATUS_PORT, p );
// No endianess conversion required.
return _mbgdevio_ret_val;
#else
@@ -1562,7 +1411,7 @@ _MBG_API_ATTR int _MBG_API mbg_generic_read( MBG_DEV_HANDLE dh, int cmd,
void *p, int size )
{
_mbgdevio_vars();
- _mbgdevio_gen_read( dh, cmd, p, size );
+ rc = _mbgdevio_gen_read( dh, cmd, p, size );
// No type information available, so endianess must be
// converted by the caller, if required.
return _mbgdevio_ret_val;
@@ -1599,7 +1448,7 @@ _MBG_API_ATTR int _MBG_API mbg_generic_read_gps( MBG_DEV_HANDLE dh, int cmd,
void *p, int size )
{
_mbgdevio_vars();
- _mbgdevio_gen_read_gps( dh, cmd, p, size );
+ rc = _mbgdevio_gen_read_gps( dh, cmd, p, size );
// No type information available, so endianess must be
// converted by the caller, if required.
return _mbgdevio_ret_val;
@@ -1635,7 +1484,7 @@ _MBG_API_ATTR int _MBG_API mbg_generic_write( MBG_DEV_HANDLE dh, int cmd,
_mbgdevio_vars();
// No type information available, so endianess must be
// converted by the caller, if required.
- _mbgdevio_gen_write( dh, cmd, p, size );
+ rc = _mbgdevio_gen_write( dh, cmd, p, size );
return _mbgdevio_ret_val;
} // mbg_generic_write
@@ -1672,7 +1521,7 @@ _MBG_API_ATTR int _MBG_API mbg_generic_write_gps( MBG_DEV_HANDLE dh, int cmd,
_mbgdevio_vars();
// No type information available, so endianess must be
// converted by the caller, if required.
- _mbgdevio_gen_write_gps( dh, cmd, p, size );
+ rc = _mbgdevio_gen_write_gps( dh, cmd, p, size );
return _mbgdevio_ret_val;
} // mbg_generic_write_gps
@@ -1700,9 +1549,16 @@ _MBG_API_ATTR int _MBG_API mbg_generic_io( MBG_DEV_HANDLE dh, int type,
void *out_p, int out_sz )
{
_mbgdevio_vars();
+
+ #if !defined( _MBGIOCTL_H )
+ // The hardware is accessed directly, so we must check
+ // here if this call is supported.
+ _mbgdevio_chk_cond( _pcps_ddev_has_generic_io( dh ) );
+ #endif
+
// No type information available, so endianess must be
// converted by the caller, if required.
- _mbgdevio_gen_io( dh, type, in_p, in_sz, out_p, out_sz );
+ rc = _mbgdevio_gen_io( dh, type, in_p, in_sz, out_p, out_sz );
return _mbgdevio_ret_val;
} // mbg_generic_io
@@ -1731,7 +1587,7 @@ _MBG_API_ATTR int _MBG_API mbg_generic_io( MBG_DEV_HANDLE dh, int type,
_MBG_API_ATTR int _MBG_API mbg_get_time( MBG_DEV_HANDLE dh, PCPS_TIME *p )
{
_mbgdevio_vars();
- _mbgdevio_read_var( dh, PCPS_GIVE_TIME, IOCTL_GET_PCPS_TIME, p );
+ rc = _mbgdevio_read_var( dh, PCPS_GIVE_TIME, IOCTL_GET_PCPS_TIME, p );
// No endianess conversion required.
return _mbgdevio_ret_val;
@@ -1819,7 +1675,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_time_sec_change( MBG_DEV_HANDLE dh, PCPS_TIME
{
#if defined( MBG_TGT_WIN32 )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_TIME_SEC_CHANGE, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_PCPS_TIME_SEC_CHANGE, p );
// No endianess conversion required.
return _mbgdevio_ret_val;
#else
@@ -1921,7 +1777,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_event_time( MBG_DEV_HANDLE dh, const PCPS_TIM
_MBG_API_ATTR int _MBG_API mbg_get_serial( MBG_DEV_HANDLE dh, PCPS_SERIAL *p )
{
_mbgdevio_vars();
- _mbgdevio_read_var( dh, PCPS_GET_SERIAL, IOCTL_GET_PCPS_SERIAL, p );
+ rc = _mbgdevio_read_var( dh, PCPS_GET_SERIAL, IOCTL_GET_PCPS_SERIAL, p );
// No endianess conversion required.
return _mbgdevio_ret_val;
@@ -1951,7 +1807,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_serial( MBG_DEV_HANDLE dh, const PCPS_SERIAL
{
_mbgdevio_vars();
// No endianess conversion required.
- _mbgdevio_write_var( dh, PCPS_SET_SERIAL, IOCTL_SET_PCPS_SERIAL, p );
+ rc = _mbgdevio_write_var( dh, PCPS_SET_SERIAL, IOCTL_SET_PCPS_SERIAL, p );
return _mbgdevio_ret_val;
} // mbg_set_serial
@@ -2322,7 +2178,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_irig_ctrl_bits( MBG_DEV_HANDLE dh,
MBG_IRIG_CTRL_BITS *p )
{
_mbgdevio_vars();
- _mbgdevio_read_var( dh, PCPS_GET_IRIG_CTRL_BITS, IOCTL_GET_IRIG_CTRL_BITS, p );
+ rc = _mbgdevio_read_var( dh, PCPS_GET_IRIG_CTRL_BITS, IOCTL_GET_IRIG_CTRL_BITS, p );
_mbg_swab_irig_ctrl_bits( p );
return _mbgdevio_ret_val;
@@ -2369,7 +2225,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data( MBG_DEV_HANDLE dh,
MBG_RAW_IRIG_DATA *p )
{
_mbgdevio_vars();
- _mbgdevio_read_var( dh, PCPS_GET_RAW_IRIG_DATA, IOCTL_GET_RAW_IRIG_DATA, p );
+ rc = _mbgdevio_read_var( dh, PCPS_GET_RAW_IRIG_DATA, IOCTL_GET_RAW_IRIG_DATA, p );
// No endianess conversion required.
return _mbgdevio_ret_val;
@@ -2398,17 +2254,13 @@ _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data( MBG_DEV_HANDLE dh,
_MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data_on_sec_change( MBG_DEV_HANDLE dh,
MBG_RAW_IRIG_DATA *p )
{
-
PCPS_TIME t;
-
_mbgdevio_vars();
- rc = mbg_get_time_sec_change( dh, &t);
+ rc = mbg_get_time_sec_change( dh, &t );
if ( rc == MBG_SUCCESS )
rc = mbg_get_raw_irig_data( dh, p );
- else
- return rc;
return _mbgdevio_ret_val;
@@ -2455,7 +2307,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_irig_time( MBG_DEV_HANDLE dh,
PCPS_IRIG_TIME *p )
{
_mbgdevio_vars();
- _mbgdevio_read_var( dh, PCPS_GIVE_IRIG_TIME, IOCTL_GET_IRIG_TIME, p );
+ rc = _mbgdevio_read_var( dh, PCPS_GIVE_IRIG_TIME, IOCTL_GET_IRIG_TIME, p );
_mbg_swab_pcps_irig_time( p );
return _mbgdevio_ret_val;
@@ -2578,7 +2430,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_ucap_event( MBG_DEV_HANDLE dh, PCPS_HR_TIME *
_MBG_API_ATTR int _MBG_API mbg_get_gps_tzdl( MBG_DEV_HANDLE dh, TZDL *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_TZDL, IOCTL_GET_GPS_TZDL, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_TZDL, IOCTL_GET_GPS_TZDL, p );
_mbg_swab_tzdl( p );
return _mbgdevio_ret_val;
@@ -2616,7 +2468,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_tzdl( MBG_DEV_HANDLE dh, const TZDL *p )
_mbg_swab_tzdl( &tmp );
p = &tmp;
#endif
- _mbgdevio_write_gps_var( dh, PC_GPS_TZDL, IOCTL_SET_GPS_TZDL, p );
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_TZDL, IOCTL_SET_GPS_TZDL, p );
return _mbgdevio_ret_val;
} // mbg_set_gps_tzdl
@@ -2645,7 +2497,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_tzdl( MBG_DEV_HANDLE dh, const TZDL *p )
_MBG_API_ATTR int _MBG_API mbg_get_gps_sw_rev( MBG_DEV_HANDLE dh, SW_REV *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_SW_REV, IOCTL_GET_GPS_SW_REV, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_SW_REV, IOCTL_GET_GPS_SW_REV, p );
_mbg_swab_sw_rev( p );
return _mbgdevio_ret_val;
@@ -2669,7 +2521,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_gps_sw_rev( MBG_DEV_HANDLE dh, SW_REV *p )
_MBG_API_ATTR int _MBG_API mbg_get_gps_bvar_stat( MBG_DEV_HANDLE dh, BVAR_STAT *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_BVAR_STAT, IOCTL_GET_GPS_BVAR_STAT, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_BVAR_STAT, IOCTL_GET_GPS_BVAR_STAT, p );
_mbg_swab_bvar_stat( p );
return _mbgdevio_ret_val;
@@ -2694,7 +2546,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_gps_bvar_stat( MBG_DEV_HANDLE dh, BVAR_STAT *
_MBG_API_ATTR int _MBG_API mbg_get_gps_time( MBG_DEV_HANDLE dh, TTM *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_TIME, IOCTL_GET_GPS_TIME, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_TIME, IOCTL_GET_GPS_TIME, p );
_mbg_swab_ttm( p );
return _mbgdevio_ret_val;
@@ -2722,7 +2574,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_time( MBG_DEV_HANDLE dh, const TTM *p )
_mbg_swab_ttm( &tmp );
p = &tmp;
#endif
- _mbgdevio_write_gps_var( dh, PC_GPS_TIME, IOCTL_SET_GPS_TIME, p );
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_TIME, IOCTL_SET_GPS_TIME, p );
return _mbgdevio_ret_val;
} // mbg_set_gps_time
@@ -2751,7 +2603,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_time( MBG_DEV_HANDLE dh, const TTM *p )
_MBG_API_ATTR int _MBG_API mbg_get_gps_port_parm( MBG_DEV_HANDLE dh, PORT_PARM *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_PORT_PARM, IOCTL_GET_GPS_PORT_PARM, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_PORT_PARM, IOCTL_GET_GPS_PORT_PARM, p );
_mbg_swab_port_parm( p );
return _mbgdevio_ret_val;
@@ -2786,7 +2638,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_port_parm( MBG_DEV_HANDLE dh, const PORT_
_mbg_swab_port_parm( &tmp );
p = &tmp;
#endif
- _mbgdevio_write_gps_var( dh, PC_GPS_PORT_PARM, IOCTL_SET_GPS_PORT_PARM, p );
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_PORT_PARM, IOCTL_SET_GPS_PORT_PARM, p );
return _mbgdevio_ret_val;
} // mbg_set_gps_port_parm
@@ -2811,7 +2663,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_port_parm( MBG_DEV_HANDLE dh, const PORT_
_MBG_API_ATTR int _MBG_API mbg_get_gps_ant_info( MBG_DEV_HANDLE dh, ANT_INFO *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_ANT_INFO, IOCTL_GET_GPS_ANT_INFO, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_ANT_INFO, IOCTL_GET_GPS_ANT_INFO, p );
_mbg_swab_ant_info( p );
return _mbgdevio_ret_val;
@@ -2842,7 +2694,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_gps_ant_info( MBG_DEV_HANDLE dh, ANT_INFO *p
_MBG_API_ATTR int _MBG_API mbg_get_gps_ucap( MBG_DEV_HANDLE dh, TTM *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_UCAP, IOCTL_GET_GPS_UCAP, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_UCAP, IOCTL_GET_GPS_UCAP, p );
_mbg_swab_ttm( p );
return _mbgdevio_ret_val;
@@ -2872,7 +2724,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_gps_ucap( MBG_DEV_HANDLE dh, TTM *p )
_MBG_API_ATTR int _MBG_API mbg_get_gps_enable_flags( MBG_DEV_HANDLE dh, ENABLE_FLAGS *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_ENABLE_FLAGS,
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_ENABLE_FLAGS,
IOCTL_GET_GPS_ENABLE_FLAGS, p );
_mbg_swab_enable_flags( p );
return _mbgdevio_ret_val;
@@ -2909,7 +2761,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_enable_flags( MBG_DEV_HANDLE dh,
_mbg_swab_enable_flags( &tmp );
p = &tmp;
#endif
- _mbgdevio_write_gps_var( dh, PC_GPS_ENABLE_FLAGS,
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_ENABLE_FLAGS,
IOCTL_SET_GPS_ENABLE_FLAGS, p );
return _mbgdevio_ret_val;
@@ -2935,7 +2787,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_enable_flags( MBG_DEV_HANDLE dh,
_MBG_API_ATTR int _MBG_API mbg_get_gps_stat_info( MBG_DEV_HANDLE dh, STAT_INFO *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_STAT_INFO, IOCTL_GET_GPS_STAT_INFO, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_STAT_INFO, IOCTL_GET_GPS_STAT_INFO, p );
_mbg_swab_stat_info( p );
return _mbgdevio_ret_val;
@@ -2964,7 +2816,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_cmd( MBG_DEV_HANDLE dh, const GPS_CMD *p
_mbg_swab_gps_cmd( &tmp );
p = &tmp;
#endif
- _mbgdevio_write_gps_var( dh, PC_GPS_CMD, IOCTL_SET_GPS_CMD, p );
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_CMD, IOCTL_SET_GPS_CMD, p );
return _mbgdevio_ret_val;
} // mbg_set_gps_cmd
@@ -2988,7 +2840,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_cmd( MBG_DEV_HANDLE dh, const GPS_CMD *p
_MBG_API_ATTR int _MBG_API mbg_get_gps_pos( MBG_DEV_HANDLE dh, POS *p )
{
_mbgdevio_vars();
- _mbgdevio_read_gps_var( dh, PC_GPS_POS, IOCTL_GET_GPS_POS, p );
+ rc = _mbgdevio_read_gps_var( dh, PC_GPS_POS, IOCTL_GET_GPS_POS, p );
swap_pos_doubles( p );
_mbg_swab_pos( p );
return _mbgdevio_ret_val;
@@ -3025,7 +2877,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_pos_xyz( MBG_DEV_HANDLE dh, const XYZ p )
_mbg_swab_double( &xyz[i] );
}
- _mbgdevio_write_gps_var( dh, PC_GPS_POS_XYZ, IOCTL_SET_GPS_POS_XYZ, xyz );
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_POS_XYZ, IOCTL_SET_GPS_POS_XYZ, xyz );
return _mbgdevio_ret_val;
} // mbg_set_gps_pos_xyz
@@ -3060,7 +2912,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_gps_pos_lla( MBG_DEV_HANDLE dh, const LLA p )
_mbg_swab_double( &lla[i] );
}
- _mbgdevio_write_gps_var( dh, PC_GPS_POS_LLA, IOCTL_SET_GPS_POS_LLA, lla );
+ rc = _mbgdevio_write_gps_var( dh, PC_GPS_POS_LLA, IOCTL_SET_GPS_POS_LLA, lla );
return _mbgdevio_ret_val;
} // mbg_set_gps_pos_lla
@@ -3196,8 +3048,8 @@ int _MBG_API mbg_get_gps_all_str_type_info( MBG_DEV_HANDLE dh,
// has been read from a device which really supports it, or
// a dummy structure has been setup.
if ( p_ri && ( p_ri->model_code != GPS_MODEL_UNKNOWN ) )
- _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_STR_TYPE_INFO, stii,
- p_ri->n_str_type * sizeof( stii[0] ) );
+ rc = _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_STR_TYPE_INFO, stii,
+ p_ri->n_str_type * sizeof( stii[0] ) );
else
return _mbg_err_to_os( MBG_ERR_NOT_SUPP_BY_DEV );
#endif
@@ -3255,8 +3107,8 @@ int _MBG_API mbg_get_gps_all_port_info( MBG_DEV_HANDLE dh,
// has been read from a device which really supports it, or
// a dummy structure has been set up.
if ( p_ri && ( p_ri->model_code != GPS_MODEL_UNKNOWN ) )
- _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_PORT_INFO, pii,
- p_ri->n_com_ports * sizeof( pii[0] ) );
+ rc = _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_PORT_INFO, pii,
+ p_ri->n_com_ports * sizeof( pii[0] ) );
else
return _mbg_err_to_os( MBG_ERR_NOT_SUPP_BY_DEV );
#endif
@@ -3601,7 +3453,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_asic_version( MBG_DEV_HANDLE dh, PCI_ASIC_VER
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_PCI_ASIC_VERSION, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_PCI_ASIC_VERSION, p );
return _mbgdevio_ret_val;
#else
if ( !_pcps_ddev_has_asic_version( dh ) )
@@ -3636,7 +3488,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_asic_features( MBG_DEV_HANDLE dh,
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_PCI_ASIC_FEATURES, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_PCI_ASIC_FEATURES, p );
return _mbgdevio_ret_val;
#else
if ( !_pcps_ddev_has_asic_features( dh ) )
@@ -3878,7 +3730,7 @@ _MBG_API_ATTR int _MBG_API mbg_set_utc_parm( MBG_DEV_HANDLE dh, UTC *p )
_MBG_API_ATTR int _MBG_API mbg_get_time_cycles( MBG_DEV_HANDLE dh, PCPS_TIME_CYCLES *p )
{
_mbgdevio_vars();
- _mbgdevio_read_var( dh, PCPS_GIVE_TIME, IOCTL_GET_PCPS_TIME_CYCLES, p );
+ rc = _mbgdevio_read_var( dh, PCPS_GIVE_TIME, IOCTL_GET_PCPS_TIME_CYCLES, p );
// No endianess conversion required.
#if !defined( _MBGIOCTL_H )
// only if not using IOCTLs
@@ -4225,7 +4077,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp_cycles( MBG_DEV_HANDLE dh,
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_FAST_HR_TIMESTAMP_CYCLES, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_FAST_HR_TIMESTAMP_CYCLES, p );
// native endianess, no need to swap bytes
return _mbgdevio_ret_val;
#else
@@ -4303,7 +4155,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp( MBG_DEV_HANDLE dh,
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_FAST_HR_TIMESTAMP, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_FAST_HR_TIMESTAMP, p );
// native endianess, no need to swap bytes
return _mbgdevio_ret_val;
#else
@@ -4927,8 +4779,8 @@ _MBG_API_ATTR int _MBG_API mbg_get_gps_all_pout_info( MBG_DEV_HANDLE dh,
// has been read from a device which really supports it, or
// a dummy structure has been setup.
if ( p_ri && ( p_ri->model_code != GPS_MODEL_UNKNOWN ) )
- _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_POUT_INFO, pii,
- p_ri->n_prg_out * sizeof( pii[0] ) );
+ rc = _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_POUT_INFO, pii,
+ p_ri->n_prg_out * sizeof( pii[0] ) );
else
return _mbg_err_to_os( MBG_ERR_NOT_SUPP_BY_DEV );
#endif
@@ -5036,7 +4888,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_irq_stat_info( MBG_DEV_HANDLE dh, PCPS_IRQ_ST
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_IRQ_STAT_INFO, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_IRQ_STAT_INFO, p );
// native endianess, no need to swap bytes
return _mbgdevio_ret_val;
#else
@@ -5384,8 +5236,8 @@ _MBG_API_ATTR int _MBG_API mbg_get_all_ptp_uc_master_info( MBG_DEV_HANDLE dh,
_pcps_ddev_has_ptp_unicast( dh ) );
#else
if ( p_umsl && p_umsl->n_supp_master )
- _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_PTP_UC_MASTER_INFO, pii,
- p_umsl->n_supp_master * sizeof( pii[0] ) );
+ rc = _mbgdevio_gen_read_gps( dh, PC_GPS_ALL_PTP_UC_MASTER_INFO, pii,
+ p_umsl->n_supp_master * sizeof( pii[0] ) );
else
return _mbg_err_to_os( MBG_ERR_NOT_SUPP_BY_DEV );
#endif
@@ -6286,7 +6138,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_default_cycles_frequency_from_dev( MBG_DEV_HA
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
- _mbgdevio_read_var( dh, -1, IOCTL_GET_CYCLES_FREQUENCY, p );
+ rc = _mbgdevio_read_var( dh, -1, IOCTL_GET_CYCLES_FREQUENCY, p );
// native endianess, no need to swap bytes
if ( rc != MBG_SUCCESS )
*p = 0;
@@ -6301,7 +6153,7 @@ _MBG_API_ATTR int _MBG_API mbg_get_default_cycles_frequency_from_dev( MBG_DEV_HA
if ( rc != MBG_SUCCESS )
goto done;
- if ( ( rc == MBG_SUCCESS ) && has_hr_time )
+ if ( has_hr_time )
{
PCPS_HR_TIME_CYCLES htc1;
PCPS_HR_TIME_CYCLES htc2;
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h b/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h
index 9dd3bf4..69cfd5c 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgdevio.h 1.39.1.18 2011/07/06 11:19:24 martin TRASH $
+ * $Id: mbgdevio.h 1.39.1.20 2011/07/20 15:52:22 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,11 @@
*
* -----------------------------------------------------------------------
* $Log: mbgdevio.h $
+ * Revision 1.39.1.20 2011/07/20 15:52:22 martin
+ * Conditionally use older IOCTL request buffer structures.
+ * Moved some macros here so they can be used by other modules.
+ * Modified some macros and definitions.
+ * Revision 1.39.1.19 2011/07/19 15:46:39 martin
* Revision 1.39.1.18 2011/07/06 11:19:24 martin
* Support reading CORR_INFO, and reading/writing TR_DISTANCE.
* Revision 1.39.1.17 2011/06/29 11:10:19 martin
@@ -187,7 +192,6 @@
#include <mbgerror.h>
#include <mbggeo.h>
#include <pcpsdev.h>
-#include <pcpsutil.h>
#include <pci_asic.h>
#include <use_pack.h>
#include <time.h>
@@ -216,6 +220,9 @@
#define MBG_USE_KERNEL_DRIVER 1
#include <windows.h>
+ #define MBGDEVIO_RET_VAL DWORD
+ #define _mbgdevio_cnv_ret_val( _v ) (_v)
+
#elif defined( MBG_TGT_LINUX )
#if !defined( MBGDEVIO_XHRT_API )
@@ -230,6 +237,7 @@
// as per default.
#define MBG_USE_KERNEL_DRIVER 1
+ #include <sys/ioctl.h>
#include <fcntl.h>
#if !defined( MBG_ARCH_ARM )
@@ -243,6 +251,7 @@
#elif defined( MBG_TGT_BSD )
#define MBG_USE_KERNEL_DRIVER 1
+ #include <sys/ioctl.h>
#include <fcntl.h>
#elif defined( MBG_TGT_OS2 )
@@ -264,6 +273,16 @@
#endif
+#if defined( MBG_USE_KERNEL_DRIVER )
+
+ #include <mbgioctl.h>
+
+ #include <stdlib.h>
+ #include <string.h>
+
+#endif
+
+
#if !defined( MBGDEVIO_XHRT_API )
#define MBGDEVIO_XHRT_API 0
#endif
@@ -315,6 +334,24 @@
#endif
+#if !defined( MBGDEVIO_RET_VAL )
+ #define MBGDEVIO_RET_VAL int
+#endif
+
+
+#if !defined( _mbgdevio_cnv_ret_val )
+ #define _mbgdevio_cnv_ret_val( _v ) \
+ ( ( (_v) < 0 ) ? (_v) : MBG_SUCCESS )
+#endif
+
+
+#define _mbgdevio_vars() \
+ MBGDEVIO_RET_VAL rc
+
+#define _mbgdevio_ret_val \
+ _mbgdevio_cnv_ret_val( rc )
+
+
/**
The type below is used to store a unique ID for a device which
@@ -489,20 +526,6 @@ typedef struct _MBG_DEVICENAME_LIST
-#define _mbg_generic_read_var( _dh, _cmd, _s ) \
- mbg_generic_read( _dh, _cmd, &(_s), sizeof( (_s) ) )
-
-#define _mbg_generic_write_var( _dh, _cmd, _s ) \
- mbg_generic_write( _dh, _cmd, &(_s), sizeof( (_s) ) )
-
-#define _mbg_generic_read_gps_var( _dh, _cmd, _s ) \
- mbg_generic_read_gps( _dh, _cmd, &(_s), sizeof( (_s) ) )
-
-#define _mbg_generic_write_gps_var( _dh, _cmd, _s ) \
- mbg_generic_write_gps( _dh, _cmd, &(_s), sizeof( (_s) ) )
-
-
-
/* function prototypes: */
#ifdef __cplusplus
@@ -514,6 +537,7 @@ extern "C" {
/* This section was generated automatically */
/* by MAKEHDR, do not remove the comments. */
+ MBGDEVIO_RET_VAL do_mbg_ioctl( MBG_DEV_HANDLE dh, int ioctl_code, const void *in_p, int in_sz, void *out_p, int out_sz ) ;
/**
Get the version number of the compiled mbgdevio library.
If the mbgdevio library is built as a DLL/shared object then
@@ -3178,6 +3202,211 @@ extern "C" {
#endif
+#if defined( MBG_TGT_WIN32 )
+
+ #define _do_mbg_ioctl( _dh, _ioctl, _p, _in_sz, _out_sz ) \
+ do_mbg_ioctl( _dh, _ioctl, (LPVOID) _p, _in_sz, (LPVOID) _p, _out_sz )
+
+#elif defined( MBG_TGT_UNIX )
+
+ #define _do_mbg_ioctl( _dh, _ioctl, _p, _in_sz, _out_sz ) \
+ ioctl( _dh, _ioctl, _p )
+
+#endif
+
+
+
+// The code below depends on whether the target device is accessed via
+// IOCTLs to a device driver, or the hardware is accessed directly.
+
+#if defined( _MBGIOCTL_H ) // using IOCTL to access device driver
+
+ static __mbg_inline
+ int mbgdevio_do_gen_io( MBG_DEV_HANDLE dh, int info, unsigned int ioctl_code,
+ const void *in_p, int in_sz,
+ void *out_p, int out_sz )
+ {
+ _mbgdevio_vars();
+
+ #if _MBG_SUPP_VAR_ACC_SIZE
+ info; // avoid "unused" warning
+
+ rc = do_mbg_ioctl( dh, ioctl_code, in_p, in_sz, out_p, out_sz ); //##++++ in_p / out_p vs. _do_mbg_ioctl()
+
+ #elif USE_IOCTL_GENERIC_REQ
+
+ IOCTL_GENERIC_REQ req = { 0 };
+
+ req.info = info;
+ req.in_p = in_p;
+ req.in_sz = in_sz;
+ req.out_p = out_p;
+ req.out_sz = out_sz;
+
+ rc = _do_mbg_ioctl( dh, ioctl_code, &req, sizeof( req ), 0 );
+
+ #else
+
+ IOCTL_GENERIC_BUFFER *p_buff;
+ int buff_size = sizeof( p_buff->ctl )
+ + ( ( in_sz > out_sz ) ? in_sz : out_sz );
+
+ p_buff = (IOCTL_GENERIC_BUFFER *) malloc( buff_size );
+
+ if ( p_buff == NULL )
+ return _mbg_err_to_os( MBG_ERR_NO_MEM );
+
+ p_buff->ctl.info = info;
+ p_buff->ctl.data_size_in = in_sz;
+ p_buff->ctl.data_size_out = out_sz;
+
+ if ( in_p )
+ memcpy( p_buff->data, in_p, in_sz );
+
+ rc = _do_mbg_ioctl( dh, ioctl_code, p_buff,
+ sizeof( IOCTL_GENERIC_CTL ) + in_sz,
+ sizeof( IOCTL_GENERIC_CTL ) + out_sz );
+
+ if ( out_p && ( rc == MBG_SUCCESS ) )
+ memcpy( out_p, p_buff->data, out_sz );
+
+ free( p_buff );
+
+ #endif
+
+ return _mbgdevio_ret_val;
+
+ } // mbgdevio_do_gen_io
+
+
+
+ #define _do_mbgdevio_read( _dh, _cmd, _ioctl, _p, _sz ) \
+ _do_mbg_ioctl( _dh, _ioctl, _p, 0, _sz )
+
+ #define _do_mbgdevio_write( _dh, _cmd, _ioctl, _p, _sz ) \
+ _do_mbg_ioctl( _dh, _ioctl, _p, _sz, 0 )
+
+ #define _do_mbgdevio_read_gps _do_mbgdevio_read
+
+ #define _do_mbgdevio_write_gps _do_mbgdevio_write
+
+
+
+ #define _mbgdevio_read_var( _dh, _cmd, _ioctl, _p ) \
+ _do_mbgdevio_read( _dh, _cmd, _ioctl, _p, sizeof( *(_p) ) )
+
+ #define _mbgdevio_write_var( _dh, _cmd, _ioctl, _p ) \
+ _do_mbgdevio_write( _dh, _cmd, _ioctl, _p, sizeof( *(_p) ) )
+
+ #define _mbgdevio_write_cmd( _dh, _cmd, _ioctl ) \
+ _do_mbgdevio_write( _dh, _cmd, _ioctl, NULL, 0 )
+
+ #define _mbgdevio_read_gps_var _mbgdevio_read_var
+
+ #define _mbgdevio_write_gps_var _mbgdevio_write_var
+
+
+ #define _mbgdevio_gen_read( _dh, _cmd, _p, _sz ) \
+ mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_READ, NULL, 0, _p, _sz )
+
+ #define _mbgdevio_gen_write( _dh, _cmd, _p, _sz ) \
+ mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_WRITE, _p, _sz, NULL, 0 )
+
+ #define _mbgdevio_gen_io( _dh, _type, _in_p, _in_sz, _out_p, _out_sz ) \
+ mbgdevio_do_gen_io( _dh, _type, IOCTL_PCPS_GENERIC_IO, _in_p, _in_sz, _out_p, _out_sz )
+
+ #define _mbgdevio_gen_read_gps( _dh, _cmd, _p, _sz ) \
+ mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_READ_GPS, NULL, 0, _p, _sz )
+
+ #define _mbgdevio_gen_write_gps( _dh, _cmd, _p, _sz ) \
+ mbgdevio_do_gen_io( _dh, _cmd, IOCTL_PCPS_GENERIC_WRITE_GPS, _p, _sz, NULL, 0 )
+
+
+#else // accessing hardware device directly
+
+ #define _mbgdevio_chk_cond( _cond ) \
+ { \
+ if ( !(_cond) ) \
+ return _mbg_err_to_os( MBG_ERR_NOT_SUPP_BY_DEV ); \
+ }
+
+ #define _mbgdevio_read( _dh, _cmd, _ioctl, _p, _sz ) \
+ pcps_read_safe( _dh, _cmd, _p, _sz )
+
+ #define _mbgdevio_write( _dh, _cmd, _ioctl, _p, _sz ) \
+ pcps_write_safe( _dh, _cmd, _p, _sz )
+
+ #define _do_mbgdevio_read_gps( _dh, _cmd, _ioctl, _p, _sz ) \
+ pcps_read_gps_safe( _dh, _cmd, _p, _sz )
+
+ #define _mbgdevio_write_gps( _dh, _cmd, _ioctl, _p, _sz ) \
+ pcps_write_gps_safe( _dh, _cmd, _p, _sz )
+
+
+
+//##+++++++++++++++++++
+ #define _mbgdevio_read_var( _dh, _cmd, _ioctl, _p ) \
+ _pcps_read_var_safe( _dh, _cmd, *(_p) )
+
+ #define _mbgdevio_write_var( _dh, _cmd, _ioctl, _p ) \
+ _pcps_write_var_safe( _dh, _cmd, *(_p) )
+
+ #define _mbgdevio_write_cmd( _dh, _cmd, _ioctl ) \
+ _pcps_write_byte_safe( _dh, _cmd );
+
+ #define _mbgdevio_read_gps_var( _dh, _cmd, _ioctl, _p ) \
+ _pcps_read_gps_var_safe( _dh, _cmd, *(_p) )
+
+ #define _mbgdevio_write_gps_var( _dh, _cmd, _ioctl, _p ) \
+ _pcps_write_gps_var_safe( _dh, _cmd, *(_p) )
+
+
+ #define _mbgdevio_gen_read( _dh, _cmd, _p, _sz ) \
+ _mbgdevio_read( _dh, _cmd, -1, _p, _sz )
+
+ #define _mbgdevio_gen_write( _dh, _cmd, _p, _sz ) \
+ _mbgdevio_write( _dh, _cmd, -1, _p, _sz )
+
+ #define _mbgdevio_gen_io( _dh, _type, _in_p, _in_sz, _out_p, _out_sz ) \
+ pcps_generic_io( _dh, _type, _in_p, _in_sz, _out_p, _out_sz );
+
+ #define _mbgdevio_gen_read_gps( _dh, _cmd, _p, _sz ) \
+ _do_mbgdevio_read_gps( _dh, _cmd, -1, _p, _sz )
+
+ #define _mbgdevio_gen_write_gps( _dh, _cmd, _p, _sz ) \
+ _mbgdevio_write_gps( _dh, _cmd, -1, _p, _sz )
+
+#endif
+
+
+
+#define _mbg_generic_read_var( _dh, _cmd, _s ) \
+ mbg_generic_read( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+#define _mbg_generic_write_var( _dh, _cmd, _s ) \
+ mbg_generic_write( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+#define _mbg_generic_read_gps_var( _dh, _cmd, _s ) \
+ mbg_generic_read_gps( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+#define _mbg_generic_write_gps_var( _dh, _cmd, _s ) \
+ mbg_generic_write_gps( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+
+
+#define _mbgdevio_gen_read_var( _dh, _cmd, _s ) \
+ _mbgdevio_gen_read( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+#define _mbgdevio_gen_write_var( _dh, _cmd, _s ) \
+ _mbgdevio_gen_write( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+#define _mbgdevio_gen_read_gps_var( _dh, _cmd, _s ) \
+ _mbgdevio_gen_read_gps( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+#define _mbgdevio_gen_write_gps_var( _dh, _cmd, _s ) \
+ _mbgdevio_gen_write_gps( _dh, _cmd, &(_s), sizeof( (_s) ) )
+
+
#if defined( MBG_TGT_WIN32 ) || defined( MBG_TGT_UNIX )
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h b/src/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h
index dd1ca4d..2dfb6a0 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgioctl.h 1.24.1.7 2011/07/15 14:50:11 martin TRASH $
+ * $Id: mbgioctl.h 1.24.1.10 2011/07/20 15:49:00 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,11 @@
*
* -----------------------------------------------------------------------
* $Log: mbgioctl.h $
+ * Revision 1.24.1.10 2011/07/20 15:49:00 martin
+ * Conditionally use older IOCTL request buffer structures.
+ * Revision 1.24.1.9 2011/07/19 12:31:59 martin
+ * Relaxed required priority level for generic read functions.
+ * Revision 1.24.1.8 2011/07/18 10:18:49 martin
* Revision 1.24.1.7 2011/07/15 14:50:11 martin
* Revision 1.24.1.6 2011/07/14 14:54:01 martin
* Modified generic IOCTL handling such that for calls requiring variable sizes
@@ -126,6 +131,7 @@
#include <mbg_tgt.h>
#include <mbggeo.h>
#include <pcpsdev.h>
+#include <pci_asic.h>
#define USE_DEBUG_PORT defined( MBG_ARCH_X86 )
@@ -230,18 +236,54 @@
// The structure below is used by the IOCTL_PCPS_GENERIC_... calls.
+#if defined( MBG_TGT_LINUX )
+ #if defined( MBG_ARCH_ARM ) || defined( MBG_ARCH_SPARC )
+ #define USE_IOCTL_GENERIC_REQ 0
+ #endif
+#endif
+
+#if !defined( USE_IOCTL_GENERIC_REQ )
+ #define USE_IOCTL_GENERIC_REQ 1
+#endif
+
+
+#if USE_IOCTL_GENERIC_REQ
+
// This does not yet work properly under Linux/Sparc where the kernel may be 64 bit
// while user space is 32 bit, which leads to different sizes for pointers and size_t.
typedef struct
{
- unsigned long info;
+ ulong info;
const void *in_p;
size_t in_sz;
void *out_p;
size_t out_sz;
+
} IOCTL_GENERIC_REQ;
+#define _MBG_IOG( _t, _n, _s ) _MBG_IOW( _t, _n, _s )
+
+#else
+
+// The structure below is used by the IOCTL_PCPS_GENERIC_... calls.
+typedef struct
+{
+ uint32_t info;
+ uint32_t data_size_in;
+ uint32_t data_size_out;
+} IOCTL_GENERIC_CTL;
+
+typedef struct
+{
+ IOCTL_GENERIC_CTL ctl;
+ uint8_t data[1];
+} IOCTL_GENERIC_BUFFER;
+
+#define _MBG_IOG( _t, _n, _s ) _MBG_IO( _t, _n )
+
+#endif
+
// read general driver info, device info, and status port
@@ -251,10 +293,10 @@ typedef struct
// Generic read/write operations. We define _MBG_IOW codes since these calls
// eventually pass a generic request structure IOCTL_GENERIC_REQ to the driver.
-#define IOCTL_PCPS_GENERIC_READ _MBG_IOW( IOTYPE, 0x03, IOCTL_GENERIC_REQ )
-#define IOCTL_PCPS_GENERIC_WRITE _MBG_IOW( IOTYPE, 0x04, IOCTL_GENERIC_REQ )
-#define IOCTL_PCPS_GENERIC_READ_GPS _MBG_IOW( IOTYPE, 0x05, IOCTL_GENERIC_REQ )
-#define IOCTL_PCPS_GENERIC_WRITE_GPS _MBG_IOW( IOTYPE, 0x06, IOCTL_GENERIC_REQ )
+#define IOCTL_PCPS_GENERIC_READ _MBG_IOG( IOTYPE, 0x03, IOCTL_GENERIC_REQ )
+#define IOCTL_PCPS_GENERIC_WRITE _MBG_IOG( IOTYPE, 0x04, IOCTL_GENERIC_REQ )
+#define IOCTL_PCPS_GENERIC_READ_GPS _MBG_IOG( IOTYPE, 0x05, IOCTL_GENERIC_REQ )
+#define IOCTL_PCPS_GENERIC_WRITE_GPS _MBG_IOG( IOTYPE, 0x06, IOCTL_GENERIC_REQ )
// normal direct read/write operations
#define IOCTL_GET_PCPS_TIME _MBG_IOR( IOTYPE, 0x10, PCPS_TIME )
@@ -326,8 +368,8 @@ typedef struct
#define IOCTL_SET_GPS_ANT_CABLE_LEN _MBG_IOW( IOTYPE, 0x38, ANT_CABLE_LEN )
#define IOCTL_GET_GPS_RECEIVER_INFO _MBG_IOR( IOTYPE, 0x39, RECEIVER_INFO )
-#define IOCTL_GET_GPS_ALL_STR_TYPE_INFO _MBG_IOW( IOTYPE, 0x3A, IOCTL_GENERIC_REQ ) // variable size
-#define IOCTL_GET_GPS_ALL_PORT_INFO _MBG_IOW( IOTYPE, 0x3B, IOCTL_GENERIC_REQ ) // variable size
+#define IOCTL_GET_GPS_ALL_STR_TYPE_INFO _MBG_IOG( IOTYPE, 0x3A, IOCTL_GENERIC_REQ ) // variable size
+#define IOCTL_GET_GPS_ALL_PORT_INFO _MBG_IOG( IOTYPE, 0x3B, IOCTL_GENERIC_REQ ) // variable size
#define IOCTL_SET_GPS_PORT_SETTINGS_IDX _MBG_IOW( IOTYPE, 0x3C, PORT_SETTINGS_IDX )
@@ -368,11 +410,11 @@ typedef struct
#define IOCTL_DEV_HAS_SYNTH _MBG_IOR( IOTYPE, 0x59, int )
#define IOCTL_DEV_HAS_GENERIC_IO _MBG_IOR( IOTYPE, 0x5A, int )
-#define IOCTL_PCPS_GENERIC_IO _MBG_IOW( IOTYPE, 0x5B, IOCTL_GENERIC_REQ )
+#define IOCTL_PCPS_GENERIC_IO _MBG_IOG( IOTYPE, 0x5B, IOCTL_GENERIC_REQ )
#define IOCTL_GET_SYNTH_STATE _MBG_IOR( IOTYPE, 0x5C, SYNTH_STATE )
-#define IOCTL_GET_GPS_ALL_POUT_INFO _MBG_IOW( IOTYPE, 0x5D, IOCTL_GENERIC_REQ ) // variable size
+#define IOCTL_GET_GPS_ALL_POUT_INFO _MBG_IOG( IOTYPE, 0x5D, IOCTL_GENERIC_REQ ) // variable size
#define IOCTL_SET_GPS_POUT_SETTINGS_IDX _MBG_IOW( IOTYPE, 0x5E, POUT_SETTINGS_IDX )
#define IOCTL_GET_MAPPED_MEM_ADDR _MBG_IOR( IOTYPE, 0x5F, PCPS_MAPPED_MEM )
@@ -428,7 +470,7 @@ typedef struct
#define IOCTL_DEV_HAS_PTP_UNICAST _MBG_IOR( IOTYPE, 0x84, int )
#define IOCTL_PTP_UC_MASTER_CFG_LIMITS _MBG_IOR( IOTYPE, 0x85, PTP_UC_MASTER_CFG_LIMITS )
-#define IOCTL_GET_ALL_PTP_UC_MASTER_INFO _MBG_IOW( IOTYPE, 0x86, IOCTL_GENERIC_REQ ) // variable size
+#define IOCTL_GET_ALL_PTP_UC_MASTER_INFO _MBG_IOG( IOTYPE, 0x86, IOCTL_GENERIC_REQ ) // variable size
#define IOCTL_SET_PTP_UC_MASTER_SETTINGS_IDX _MBG_IOW( IOTYPE, 0x87, PTP_UC_MASTER_SETTINGS_IDX )
#define IOCTL_DEV_HAS_PZF _MBG_IOR( IOTYPE, 0x88, int )
@@ -450,21 +492,12 @@ typedef struct
/**
- * @brief An element for a table of IOCTL codes and names.
- */
-typedef struct
-{
- ulong code;
- const char *name;
-} MBG_IOCTL_TABLE_ENTRY;
-
-
-/**
- * @brief An initializer for an array of MBG_IOCTL_TABLE_ENTRY elements.
+ * @brief An initializer for a table of IOCTL codes and associated names.
*
- * This can be useful for debugging.
+ * This can e.g. be assigned to an array of MBG_CODE_NAME_TABLE_ENTRY elements
+ * and may be helpful when debugging.
*/
-#define MBG_IOCTL_TABLE \
+#define MBG_IOCTL_CODE_TABLE \
{ \
{ IOCTL_GET_PCPS_DRVR_INFO, "IOCTL_GET_PCPS_DRVR_INFO" }, \
{ IOCTL_GET_PCPS_DEV, "IOCTL_GET_PCPS_DEV" }, \
@@ -645,7 +678,7 @@ enum
#if defined( __GNUC__ )
// Avoid "no previous prototype" with some gcc versions.
-__mbg_inline
+static __mbg_inline
int ioctl_get_required_privilege( ulong ioctl_code ) __attribute__((always_inline));
#endif
@@ -657,7 +690,7 @@ int ioctl_get_required_privilege( ulong ioctl_code ) __attribute__((always_inlin
* @return One of the enumerated privilege levels
* @return -1 for unknown IOCTL codes
*/
-__mbg_inline
+static __mbg_inline
int ioctl_get_required_privilege( ulong ioctl_code )
{
// To provide best maintainability the sequence of cases in ioctl_switch()
@@ -781,6 +814,9 @@ int ioctl_get_required_privilege( ulong ioctl_code )
case IOCTL_GET_RAW_IRIG_DATA:
case IOCTL_PTP_UC_MASTER_CFG_LIMITS:
case IOCTL_GET_TR_DISTANCE:
+ // generic read functions
+ case IOCTL_PCPS_GENERIC_READ:
+ case IOCTL_PCPS_GENERIC_READ_GPS:
#if _MBG_SUPP_VAR_ACC_SIZE
// These codes are only supported on target systems where a variable size of
// the IOCTL buffer can be specified in the IOCTL call. On other systems the
@@ -821,10 +857,8 @@ int ioctl_get_required_privilege( ulong ioctl_code )
case IOCTL_SET_GPS_TIME_SCALE_SETTINGS:
case IOCTL_SET_GPS_UTC_PARM:
case IOCTL_SET_GPS_CMD:
- // generic read/write operations can do anything
- case IOCTL_PCPS_GENERIC_READ:
+ // generic write operations can do anything
case IOCTL_PCPS_GENERIC_WRITE:
- case IOCTL_PCPS_GENERIC_READ_GPS:
case IOCTL_PCPS_GENERIC_WRITE_GPS:
case IOCTL_PCPS_GENERIC_IO:
return MBG_REQ_PRIVL_SYSTEM;
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgpccyc.h b/src/external/bsd/meinberg/dist/mbglib/common/mbgpccyc.h
index 3d8843c..7a47edf 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/mbgpccyc.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/mbgpccyc.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgpccyc.h 1.1.1.3 2011/07/13 09:44:49 martin TRASH $
+ * $Id: mbgpccyc.h 1.1.1.4 2011/07/20 15:58:53 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,8 @@
*
* -----------------------------------------------------------------------
* $Log: mbgpccyc.h $
+ * Revision 1.1.1.4 2011/07/20 15:58:53 martin
+ * Support cycles on IA64 only in kernel space.
* Revision 1.1.1.3 2011/07/13 09:44:49 martin
* Moved IA64 includes from pcpsdev.h to mbgpccyc.h.
* Revision 1.1.1.2 2011/07/06 13:23:36 martin
@@ -44,7 +46,7 @@
#endif
#if defined( MBG_TGT_LINUX )
- #if defined( MBG_ARCH_IA64 )
+ #if defined( MBG_ARCH_IA64 ) && defined( MBG_TGT_KERNEL )
#include <asm/ia64regs.h>
#include <asm/intel_intrin.h>
#endif
@@ -171,7 +173,7 @@ void mbg_get_pc_cycles( MBG_PC_CYCLES *p )
*p = get_cycles();
#define MBG_PC_CYCLES_SUPPORTED 1
- #elif defined( MBG_TGT_LINUX ) && defined( MBG_ARCH_IA64 )
+ #elif defined( MBG_TGT_LINUX ) && defined( MBG_ARCH_IA64 ) && defined( MBG_TGT_KERNEL )
unsigned long result = ia64_getreg( _IA64_REG_AR_ITC );
ia64_barrier();
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdefs.h b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdefs.h
index cd19071..e29d384 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdefs.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdefs.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: pcpsdefs.h 1.46.1.10 2011/07/06 11:21:38 martin TRASH $
+ * $Id: pcpsdefs.h 1.46.1.11 2011/07/18 10:19:28 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,8 @@
*
* -----------------------------------------------------------------------
* $Log: pcpsdefs.h $
+ * Revision 1.46.1.11 2011/07/18 10:19:28 martin
+ * Added an initializer for a table of GPS command code/names.
* Revision 1.46.1.10 2011/07/06 11:21:38 martin
* Added commands to read CORR_INFO, and read/write TR_DISTANCE.
* Added swab macros for CORR_INFO and TR_DISTANCE.
@@ -1287,6 +1289,61 @@ enum
PC_GPS_ASCII_MSG // -/- ASCII_MSG the GPS ASCII message
};
+/** @} group_gps_cmds_bus */
+
+
+
+/**
+ * @brief An initializer for a table of code/name entries of GPS commands.
+ *
+ * This can e.g. be assigned to an array of MBG_CODE_NAME_TABLE_ENTRY elements
+ * and may be helpful when debugging.
+ */
+#define MBG_PC_GPS_CMD_TABLE \
+{ \
+ { PC_GPS_TZDL, "PC_GPS_TZDL" }, \
+ { PC_GPS_SW_REV, "PC_GPS_SW_REV" }, \
+ { PC_GPS_BVAR_STAT, "PC_GPS_BVAR_STAT" }, \
+ { PC_GPS_TIME, "PC_GPS_TIME" }, \
+ { PC_GPS_POS_XYZ, "PC_GPS_POS_XYZ" }, \
+ { PC_GPS_POS_LLA, "PC_GPS_POS_LLA" }, \
+ { PC_GPS_PORT_PARM, "PC_GPS_PORT_PARM" }, \
+ { PC_GPS_ANT_INFO, "PC_GPS_ANT_INFO" }, \
+ { PC_GPS_UCAP, "PC_GPS_UCAP" }, \
+ { PC_GPS_ENABLE_FLAGS, "PC_GPS_ENABLE_FLAGS" }, \
+ { PC_GPS_STAT_INFO, "PC_GPS_STAT_INFO" }, \
+ { PC_GPS_CMD, "PC_GPS_CMD" }, \
+ { PC_GPS_IDENT, "PC_GPS_IDENT" }, \
+ { PC_GPS_POS, "PC_GPS_POS" }, \
+ { PC_GPS_ANT_CABLE_LEN, "PC_GPS_ANT_CABLE_LEN" }, \
+ { PC_GPS_RECEIVER_INFO, "PC_GPS_RECEIVER_INFO" }, \
+ { PC_GPS_ALL_STR_TYPE_INFO, "PC_GPS_ALL_STR_TYPE_INFO" }, \
+ { PC_GPS_ALL_PORT_INFO, "PC_GPS_ALL_PORT_INFO" }, \
+ { PC_GPS_PORT_SETTINGS_IDX, "PC_GPS_PORT_SETTINGS_IDX" }, \
+ { PC_GPS_ALL_POUT_INFO, "PC_GPS_ALL_POUT_INFO" }, \
+ { PC_GPS_POUT_SETTINGS_IDX, "PC_GPS_POUT_SETTINGS_IDX" }, \
+ { PC_GPS_TIME_SCALE, "PC_GPS_TIME_SCALE" }, \
+ { PC_GPS_LAN_IF_INFO, "PC_GPS_LAN_IF_INFO" }, \
+ { PC_GPS_IP4_STATE, "PC_GPS_IP4_STATE" }, \
+ { PC_GPS_IP4_SETTINGS, "PC_GPS_IP4_SETTINGS" }, \
+ { PC_GPS_PTP_STATE, "PC_GPS_PTP_STATE" }, \
+ { PC_GPS_PTP_CFG, "PC_GPS_PTP_CFG" }, \
+ { PC_GPS_PTP_UC_MASTER_CFG_LIMITS, "PC_GPS_PTP_UC_MASTER_CFG_LIMITS" }, \
+ { PC_GPS_ALL_PTP_UC_MASTER_INFO, "PC_GPS_ALL_PTP_UC_MASTER_INFO" }, \
+ { PC_GPS_PTP_UC_MASTER_SETTINGS_IDX, "PC_GPS_PTP_UC_MASTER_SETTINGS_IDX" }, \
+ { PC_GPS_GPIO_CFG_LIMITS, "PC_GPS_GPIO_CFG_LIMITS" }, \
+ { PC_GPS_ALL_GPIO_INFO, "PC_GPS_ALL_GPIO_INFO" }, \
+ { PC_GPS_GPIO_SETTINGS_IDX, "PC_GPS_GPIO_SETTINGS_IDX" }, \
+ { PC_GPS_CFGH, "PC_GPS_CFGH" }, \
+ { PC_GPS_ALM, "PC_GPS_ALM" }, \
+ { PC_GPS_EPH, "PC_GPS_EPH" }, \
+ { PC_GPS_UTC, "PC_GPS_UTC" }, \
+ { PC_GPS_IONO, "PC_GPS_IONO" }, \
+ { PC_GPS_ASCII_MSG, "PC_GPS_ASCII_MSG" }, \
+ { 0, NULL } \
+}
+
+
/** codes used with PC_GPS_CMD */
enum
@@ -1298,7 +1355,6 @@ enum
N_PC_GPS_CMD /**< no command, just the number of known commands */
};
-/** @} group_gps_cmds_bus */
// The type below can be used to store an unambiguous command code.
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdev.h b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdev.h
index 5da8d62..7598a6f 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdev.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdev.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: pcpsdev.h 1.49.1.51 2011/07/14 13:29:14 martin TRASH $
+ * $Id: pcpsdev.h 1.49.1.52 2011/07/19 10:41:48 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -17,6 +17,7 @@
*
* -----------------------------------------------------------------------
* $Log: pcpsdev.h $
+ * Revision 1.49.1.52 2011/07/19 10:41:48 martin
* Revision 1.49.1.51 2011/07/14 13:29:14 martin
* Revision 1.49.1.50 2011/07/13 09:44:53 martin
* Moved IA64 includes from pcpsdev.h to mbgpccyc.h.
@@ -1207,7 +1208,7 @@ enum
/* command PCPS_GIVE_TIME_NOCLEAR: */
// This is supported by all clocks but PC31/PS31 with
-// firmware versions before v3.0. If such a card shall
+// firmware versions before v3.0. If such a card shall
// be used then the firmware should be updated to the
// last recent version.
@@ -1249,12 +1250,14 @@ typedef struct
#define _pcps_is_lwr( _d ) ( _pcps_is_dcf( _d ) || _pcps_is_msf( _d ) || _pcps_is_wwvb( _d ) )
+// Generic bus types:
#define _pcps_is_isa( _d ) ( _pcps_bus_flags( _d ) & PCPS_BUS_ISA )
#define _pcps_is_mca( _d ) ( _pcps_bus_flags( _d ) & PCPS_BUS_MCA )
#define _pcps_is_pci( _d ) ( _pcps_bus_flags( _d ) & PCPS_BUS_PCI )
#define _pcps_is_usb( _d ) ( _pcps_bus_flags( _d ) & PCPS_BUS_USB )
-#define _pcps_is_usb_v2( _d ) ( _pcps_bus_flags( _d ) == PCPS_BUS_USB_V2 )
+// Special bus types:
+#define _pcps_is_usb_v2( _d ) ( _pcps_bus_flags( _d ) == PCPS_BUS_USB_V2 )
#define _pcps_is_pci_s5933( _d ) ( _pcps_bus_flags( _d ) == PCPS_BUS_PCI_S5933 )
#define _pcps_is_pci_s5920( _d ) ( _pcps_bus_flags( _d ) == PCPS_BUS_PCI_S5920 )
#define _pcps_is_pci_amcc( _d ) ( _pcps_is_pci_s5920( _d ) || _pcps_is_pci_s5933( _d ) )
@@ -1264,8 +1267,8 @@ typedef struct
// Access device configuration information:
-#define _pcps_bus_num( _d ) ( (_d)->cfg.bus_num )
-#define _pcps_slot_num( _d ) ( (_d)->cfg.slot_num )
+#define _pcps_bus_num( _d ) ( (_d)->cfg.bus_num )
+#define _pcps_slot_num( _d ) ( (_d)->cfg.slot_num )
#define _pcps_cfg_port_rsrc( _c, _n ) ( (_c)->port[_n] )
#define _pcps_port_rsrc( _d, _n ) _pcps_cfg_port_rsrc( &(_d)->cfg, (_n) )
@@ -1340,7 +1343,6 @@ typedef struct
#define _pcps_has_mod( _d ) \
( _pcps_is_dcf( _d ) || _pcps_is_msf( _d ) || _pcps_is_wwvb( _d ) )
-
#define _pcps_has_irig( _d ) \
( _pcps_is_irig_rx( _d ) || _pcps_has_irig_tx( _d ) )
@@ -1375,6 +1377,12 @@ typedef struct
#define _pcps_has_utc_parm( _d ) _pcps_has_feature( (_d), PCPS_HAS_UTC_PARM )
+#define _pcps_has_asic_version( _d ) ( _pcps_is_pci_asic( _d ) \
+ || _pcps_is_pci_pex8311( _d ) \
+ || _pcps_is_pci_mbgpex( _d ) )
+
+#define _pcps_has_asic_features( _d ) _pcps_has_asic_version( _d )
+
#define _pcps_has_fast_hr_timestamp( _d ) _pcps_has_feature( (_d), PCPS_HAS_FAST_HR_TSTAMP )
#define _pcps_has_lan_intf( _d ) _pcps_has_feature( (_d), PCPS_HAS_LAN_INTF )
@@ -1389,13 +1397,6 @@ typedef struct
#define _pcps_has_tr_distance( _d ) _pcps_has_pzf( _d )
-#define _pcps_has_asic_version( _d ) ( _pcps_is_pci_asic( _d ) \
- || _pcps_is_pci_pex8311( _d ) \
- || _pcps_is_pci_mbgpex( _d ) )
-
-#define _pcps_has_asic_features( _d ) _pcps_has_asic_version( _d )
-
-
// There are some versions of IRIG receiver cards which ignore the TFOM code
// of an incoming IRIG signal even if an IRIG code has been configured which
@@ -1413,6 +1414,22 @@ typedef struct
|| ( ( _pcps_type_num( _d ) == PCPS_TYPE_TCR170PEX ) && ( _pcps_fw_rev_num( _d ) <= 0x103 ) ) )
+// Some Meinberg PCI Express cards have a PCIe interface chip with an extra
+// PCI bridge built into the chip. Unfortunately there are some mainboards out there
+// which do not handle PCI resources behind this PCI bridge correctly. The symptom is
+// usually that both I/O address ranges of these cards get the same base address
+// assigned by the BIOS, and the efeect is that in this case a card is not accessible
+// properly, since both I/O ranges try to respond to the same I/O addresses.
+// As a consequence data read from the card is usually garbage.
+// The only known fix for this is a BIOS update for the mainboard which makes the
+// BIOS handle the card's resources properly.
+
+// The macro below can be used to test if both port base addresses assigned to a card
+// are identical, and thus the BIOS is probably faulty::
+#define _pcps_pci_cfg_err( _d ) \
+ ( _pcps_port_base( _d, 1 ) == _pcps_port_base( _d, 0 ) )
+
+
/**
The structure is used to return info
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c
index a143655..4b1856f 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c
+++ b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: pcpsdrvr.c 1.46.2.47 2011/07/11 12:49:44 martin TRASH daniel(2011.07.13.13.54.14) $
+ * $Id: pcpsdrvr.c 1.46.2.48 2011/07/19 12:48:10 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -63,6 +63,9 @@
*
* -----------------------------------------------------------------------
* $Log: pcpsdrvr.c $
+ * Revision 1.46.2.48 2011/07/19 12:48:10 martin
+ * Unified low level functions and use 16 bit types for buffer sizes.
+ * Cleanup.
* Revision 1.46.2.47 2011/07/11 12:49:44 martin
* Revision 1.46.2.46 2011/07/11 11:00:42Z martin
* Modified some debug code.
@@ -770,9 +773,9 @@ int pcps_wait_busy( PCPS_DDEV *pddev )
// not properly initialized, in order to avoid I/O access
// on unspecified ports.
-static /*HDR*/ /* type: PCPS_READ_FNC */
+static /*HDR*/ /* PCPS_READ_FNC */
short pcps_read_null( PCPS_DDEV *pddev, uint8_t cmd,
- uint8_t FAR *buffer, uint8_t count )
+ void FAR *buffer, uint16_t count )
{
return MBG_ERR_TIMEOUT;
@@ -784,10 +787,11 @@ short pcps_read_null( PCPS_DDEV *pddev, uint8_t cmd,
// The function below must be used to access a clock with
// standard ISA or micro channel bus.
-static /*HDR*/ /* type: PCPS_READ_FNC */
+static /*HDR*/ /* PCPS_READ_FNC */
short pcps_read_std( PCPS_DDEV *pddev, uint8_t cmd,
- uint8_t FAR *buffer, uint8_t count )
+ void FAR *buffer, uint16_t count )
{
+ uint8_t FAR *p = (uint8_t FAR *) buffer;
PCPS_IO_ADDR_MAPPED port = _pcps_ddev_io_base_mapped( pddev, 0 );
int i;
_pcps_irq_flags
@@ -810,11 +814,13 @@ short pcps_read_std( PCPS_DDEV *pddev, uint8_t cmd,
// no timeout: read bytes from the board's FIFO
for ( i = 0; i < count; i++ )
{
- *buffer++ = _mbg_inp8( pddev, 0, port );
+ *p = _mbg_inp8( pddev, 0, port );
#if DEBUG_IO
- _mbgddmsg_1( MBG_DBG_DETAIL, "pcps_read_std: %02X", buffer[i] );
+ _mbgddmsg_1( MBG_DBG_DETAIL, "pcps_read_std: %02X", *p );
#endif
+
+ p++;
}
return MBG_SUCCESS;
@@ -828,10 +834,11 @@ short pcps_read_std( PCPS_DDEV *pddev, uint8_t cmd,
// The function below must be used to access a clock with
// PCI bus and AMCC S5933 interface chip.
-static /*HDR*/ /* type: PCPS_READ_FNC */
+static /*HDR*/ /* PCPS_READ_FNC */
short pcps_read_amcc_s5933( PCPS_DDEV *pddev, uint8_t cmd,
- uint8_t FAR *buffer, uint8_t count )
+ void FAR *buffer, uint16_t count )
{
+ uint8_t FAR *p = (uint8_t FAR *) buffer;
PCPS_IO_ADDR_MAPPED port = _pcps_ddev_io_base_mapped( pddev, 0 );
int i;
_pcps_irq_flags
@@ -867,13 +874,13 @@ short pcps_read_amcc_s5933( PCPS_DDEV *pddev, uint8_t cmd,
if ( _mbg_inp16_to_cpu( pddev, 0, port + AMCC_OP_REG_MCSR ) & 0x20 )
return MBG_ERR_FIFO;
- buffer[i] = _mbg_inp8( pddev, 0, port + AMCC_OP_REG_FIFO + ( i % sizeof( uint32_t) ) );
+ p[i] = _mbg_inp8( pddev, 0, port + AMCC_OP_REG_FIFO + ( i % sizeof( uint32_t) ) );
#if DEBUG_IO
if ( ( cmd == PCPS_GIVE_FW_ID_1 ) || ( cmd == PCPS_GIVE_FW_ID_2 ) )
- _mbgddmsg_2( MBG_DBG_DETAIL, "pcps_read_amcc_s5933: %02X '%c'", buffer[i], buffer[i] );
+ _mbgddmsg_2( MBG_DBG_DETAIL, "pcps_read_amcc_s5933: %02X '%c'", p[i], p[i] );
else
- _mbgddmsg_1( MBG_DBG_DETAIL, "pcps_read_amcc_s5933: %02X", buffer[i] );
+ _mbgddmsg_1( MBG_DBG_DETAIL, "pcps_read_amcc_s5933: %02X", p[i] );
#endif
}
@@ -890,11 +897,11 @@ short pcps_read_amcc_s5933( PCPS_DDEV *pddev, uint8_t cmd,
// The function below must be used to access a clock with
// PCI bus and AMCC S5920 interface chip.
-static /*HDR*/ /* type: PCPS_READ_FNC */
+static /*HDR*/ /* PCPS_READ_FNC */
short pcps_read_amcc_s5920( PCPS_DDEV *pddev, uint8_t cmd,
- uint8_t FAR *buffer, uint8_t count )
+ void FAR *buffer, uint16_t count )
{
- uint8_t FAR *p = buffer;
+ uint8_t FAR *p = (uint8_t FAR *) buffer;
PCPS_IO_ADDR_MAPPED data_port = _pcps_ddev_io_base_mapped( pddev, 1 );
int i;
int dt_quot;
@@ -979,11 +986,11 @@ short pcps_read_amcc_s5920( PCPS_DDEV *pddev, uint8_t cmd,
// The function below must be used to access a clock with
// PCI bus and Meinberg PCI interface ASIC.
-static /*HDR*/ /* type: PCPS_READ_FNC */
+static /*HDR*/ /* PCPS_READ_FNC */
short pcps_read_asic( PCPS_DDEV *pddev, uint8_t cmd,
- uint8_t FAR *buffer, uint8_t count )
+ void FAR *buffer, uint16_t count )
{
- uint8_t FAR *p = buffer;
+ uint8_t FAR *p = (uint8_t FAR *) buffer;
PCPS_IO_ADDR_MAPPED data_port;
PCI_ASIC_REG ar;
int i;
@@ -1053,12 +1060,11 @@ short pcps_read_asic( PCPS_DDEV *pddev, uint8_t cmd,
#if _PCPS_USE_USB
-// The function below must be used to access a clock
-// connected via USB bus.
+// The function below must be used to access a device connected via USB.
-static /*HDR*/ /* type: PCPS_READ_FNC */
+static /*HDR*/ /* PCPS_READ_FNC */
short pcps_read_usb( PCPS_DDEV *pddev, uint8_t cmd,
- uint8_t FAR *buffer, uint8_t count )
+ void FAR *buffer, uint16_t count )
{
int actual_count = 0;
short rc;
@@ -1117,8 +1123,9 @@ short pcps_read_usb( PCPS_DDEV *pddev, uint8_t cmd,
else
usb_latency_cycles = cycles_diff - ( ( FrameNumberDiff - 1 ) * frame_length_cycles );
- #if DBG
- swprintf( pddev->wcs_msg, L"FD %d CD %I64u l %I64u fl %I64u", FrameNumberDiff, cycles_diff, usb_latency_cycles, frame_length_cycles );
+ #if defined( DEBUG )
+ swprintf( pddev->wcs_msg, L"FD %d CD %I64u l %I64u fl %I64u", FrameNumberDiff,
+ cycles_diff, usb_latency_cycles, frame_length_cycles );
_dbg_evt_msg( GlbDriverObject, pddev->wcs_msg );
#endif
}
@@ -1157,9 +1164,9 @@ short pcps_read_usb( PCPS_DDEV *pddev, uint8_t cmd,
* has been invalid
*-------------------------------------------------------------*/
-/*HDR*/
+/*HDR*/ /* PCPS_WRITE_FNC */
short pcps_write( PCPS_DDEV *pddev, uint8_t cmd,
- const void FAR *buffer, uint8_t count )
+ const void FAR *buffer, uint16_t count )
{
short rc;
@@ -1498,7 +1505,7 @@ short pcps_read_gps_block( PCPS_DDEV *pddev,
* MBG_ERR_NBYTES
*-------------------------------------------------------------*/
-/*HDR*/
+/*HDR*/ /* PCPS_READ_FNC */
short pcps_read_gps( PCPS_DDEV *pddev,
uint8_t data_type,
void FAR *buffer,
@@ -1569,7 +1576,7 @@ done:
* MBG_ERR_NBYTES
*-------------------------------------------------------------*/
-/*HDR*/
+/*HDR*/ /* PCPS_WRITE_FNC */
short pcps_write_gps( PCPS_DDEV *pddev,
uint8_t data_type,
const void FAR *buffer,
@@ -2749,7 +2756,7 @@ chip_setup_done:
pddev->status_port = _pcps_ddev_io_base_mapped( pddev, 0 ) + status_port_offs;
// Set up the resource list in pddev->dev.cfg which
- // isn't real required anymore, but just informational:
+ // isn't really required anymore, but just informational:
for ( i = 0; i < N_PCPS_PORT_RSRC; i++ )
{
@@ -2803,7 +2810,27 @@ chip_setup_done:
}
#endif
- // Make sure a PTP270PEX card has finished booting.
+ // There are some BIOSs out there which don't configure some PEX cards
+ // properly, and thus the cards can not be accessed properly.
+ // See note near the definition of _pcps_pci_cfg_err() for details.
+ if ( _pcps_ddev_pci_cfg_err( pddev ) )
+ {
+#if 0 //##+++++++++++++++++++++++++
+ #if defined( MBG_TGT_LINUX )
+ printk( KERN_WARNING "PTP270PEX startup delay: %li.%03li s\n",
+ dt / 1000, ( ( dt < 0 ) ? -dt : dt ) % 1000 );
+ #elif defined( MBG_TGT_BSD )
+ printf( "PTP270PEX startup delay: %li.%03li s\n",
+ dt / 1000, ( ( dt < 0 ) ? -dt : dt ) % 1000 );
+ #elif defined( MBG_TGT_WIN32 )
+ swprintf( wcs_msg, L"PTP270PEX startup delay: %li.%03li s",
+ dt / 1000, ( ( dt < 0 ) ? -dt : dt ) % 1000 );
+ _evt_msg( GlbDriverObject, wcs_msg );
+ #endif
+#endif
+ }
+
+ // Make sure a PTP270PEX card has finished booting.
if ( _pcps_ddev_dev_id( pddev ) == PCI_DEV_PTP270PEX )
check_uptime();
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h
index 40983c6..8f203c4 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: pcpsdrvr.h 1.41.1.33 2011/07/06 11:23:09 martin TRASH $
+ * $Id: pcpsdrvr.h 1.41.1.34 2011/07/19 12:48:39 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,9 @@
*
* -----------------------------------------------------------------------
* $Log: pcpsdrvr.h $
+ * Revision 1.41.1.34 2011/07/19 12:48:39 martin
+ * Updated function prototypes.
+ * Code cleanup.
* Revision 1.41.1.33 2011/07/06 11:23:09 martin
* Added macros _pcps_ddev_has_corr_info() and _pcps_ddev_has_tr_distance().
* Revision 1.41.1.32 2011/07/04 10:29:44 martin
@@ -479,6 +482,10 @@
// We use native alignment for structures which are not accessed across system boundaries.
+#ifdef __cplusplus
+extern "C" {
+#endif
+
// Define some OS-specific primitives to alloc / free memory and handle
// mutexes and spinlocks in kernel space.
@@ -758,15 +765,21 @@ typedef union
} PCPS_MM_LAYOUT;
+struct PCPS_DDEV_s;
+
+typedef short (*PCPS_READ_FNC)( struct PCPS_DDEV_s *pddev, uint8_t cmd, void FAR *buffer, uint16_t count );
+typedef short (*PCPS_WRITE_FNC)( struct PCPS_DDEV_s *pddev, uint8_t cmd, const void FAR *buffer, uint16_t count );
+typedef struct PCPS_DDEV_s *(*PCPS_DDEV_ALLOC_FNC)( void );
+typedef void (*PCPS_DDEV_CLEANUP_FNC)( struct PCPS_DDEV_s * );
+typedef int (*PCPS_DDEV_REGISTER_FNC)( struct PCPS_DDEV_s * );
+
typedef struct PCPS_DDEV_s
{
// the device info data
PCPS_DEV dev;
- // the read function to be used to access the clock
- short (*read)( struct PCPS_DDEV_s *pddev, uchar cmd,
- uchar FAR *buffer, uchar count );
+ PCPS_READ_FNC read;
PCPS_IO_ADDR_MAPPED status_port;
PCPS_IO_ADDR_MAPPED irq_enb_disb_port;
@@ -1030,12 +1043,14 @@ _ext const char *fw_id_ref[]
#define _pcps_ddev_is_lwr( _p ) _pcps_is_lwr( &(_p)->dev )
+// Generic bus types:
#define _pcps_ddev_is_isa( _p ) _pcps_is_isa( &(_p)->dev )
#define _pcps_ddev_is_mca( _p ) _pcps_is_mca( &(_p)->dev )
#define _pcps_ddev_is_pci( _p ) _pcps_is_pci( &(_p)->dev )
#define _pcps_ddev_is_usb( _p ) _pcps_is_usb( &(_p)->dev )
-#define _pcps_ddev_is_usb_v2( _p ) _pcps_is_usb_v2( &(_p)->dev )
+// Special bus types:
+#define _pcps_ddev_is_usb_v2( _p ) _pcps_is_usb_v2( &(_p)->dev )
#define _pcps_ddev_is_pci_s5933( _p ) _pcps_is_pci_s5933( &(_p)->dev )
#define _pcps_ddev_is_pci_s5920( _p ) _pcps_is_pci_s5920( &(_p)->dev )
#define _pcps_ddev_is_pci_amcc( _p ) _pcps_is_pci_amcc( &(_p)->dev )
@@ -1059,22 +1074,24 @@ _ext const char *fw_id_ref[]
#define _pcps_ddev_features( _p ) _pcps_features( &(_p)->dev )
#define _pcps_ddev_fw_id( _p ) _pcps_fw_id( &(_p)->dev )
#define _pcps_ddev_sernum( _p ) _pcps_sernum( &(_p)->dev )
+
#define _pcps_ddev_raw_asic_version( _p ) ( (_p)->raw_asic_version )
#define _pcps_ddev_asic_version( _p ) ( (_p)->asic_version )
// The macros below handle the device's err_flags.
+#define _pcps_ddev_chk_err_flags( _p, _msk ) \
+ _pcps_chk_err_flags( &(_p)->dev, _msk )
+
#define _pcps_ddev_set_err_flags( _p, _msk ) \
_pcps_set_err_flags( &(_p)->dev, _msk )
#define _pcps_ddev_clr_err_flags( _p, _msk ) \
_pcps_clr_err_flags( &(_p)->dev, _msk )
-#define _pcps_ddev_chk_err_flags( _p, _msk ) \
- _pcps_chk_err_flags( &(_p)->dev, _msk )
-
// Query whether a special feature is supported:
#define _pcps_ddev_has_feature( _p, _f ) _pcps_has_feature( &(_p)->dev, _f )
+
#define _pcps_ddev_can_set_time( _p ) _pcps_can_set_time( &(_p)->dev )
#define _pcps_ddev_has_serial( _p ) _pcps_has_serial( &(_p)->dev )
#define _pcps_ddev_has_sync_time( _p ) _pcps_has_sync_time( &(_p)->dev )
@@ -1106,7 +1123,6 @@ _ext const char *fw_id_ref[]
#define _pcps_ddev_has_mod( _p ) \
_pcps_has_mod( &(_p)->dev )
-
#define _pcps_ddev_has_irig( _p ) \
_pcps_has_irig( &(_p)->dev )
@@ -1125,12 +1141,12 @@ _ext const char *fw_id_ref[]
#define _pcps_ddev_has_opt_flags( _p ) \
_pcps_has_opt_flags( &(_p)->dev )
-#define _pcps_ddev_has_gps_data( _p ) \
- _pcps_has_gps_data( &(_p)->dev )
-
#define _pcps_ddev_has_gps_data_16( _p ) \
_pcps_has_gps_data_16( &(_p)->dev )
+#define _pcps_ddev_has_gps_data( _p ) \
+ _pcps_has_gps_data( &(_p)->dev )
+
#define _pcps_ddev_has_synth( _p ) \
_pcps_has_synth( &(_p)->dev )
@@ -1170,6 +1186,12 @@ _ext const char *fw_id_ref[]
#define _pcps_ddev_has_tr_distance( _p ) \
_pcps_has_tr_distance( &(_p)->dev )
+#define _pcps_ddev_incoming_tfom_ignored( _p ) \
+ _pcps_incoming_tfom_ignored( &(_p)->dev )
+
+#define _pcps_ddev_pci_cfg_err( _p ) \
+ _pcps_pci_cfg_err( &(_p)->dev )
+
// The macros below simplify read/write access to the clocks.
@@ -1369,26 +1391,21 @@ _ext const char *fw_id_ref[]
-
-/* function prototypes: */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef PCPS_DDEV *(*PCPS_DDEV_ALLOC_FNC)( void );
-typedef void (*PCPS_DDEV_CLEANUP_FNC)( PCPS_DDEV * );
-typedef int (*PCPS_DDEV_REGISTER_FNC)( PCPS_DDEV * );
-
/* ----- function prototypes begin ----- */
/* This section was generated automatically */
/* by MAKEHDR, do not remove the comments. */
- short pcps_write( PCPS_DDEV *pddev, uint8_t cmd, const void FAR *buffer, uint8_t count ) ;
+/* PCPS_WRITE_FNC */
+ short pcps_write( PCPS_DDEV *pddev, uint8_t cmd, const void FAR *buffer, uint16_t count ) ;
+
short pcps_generic_io( PCPS_DDEV *pddev, uint8_t type, const void FAR *in_buff, uint8_t in_cnt, void FAR *out_buff, uint8_t out_cnt ) ;
+/* PCPS_READ_FNC */
short pcps_read_gps( PCPS_DDEV *pddev, uint8_t data_type, void FAR *buffer, uint16_t buffer_size ) ;
+
+/* PCPS_WRITE_FNC */
short pcps_write_gps( PCPS_DDEV *pddev, uint8_t data_type, const void FAR *buffer, uint16_t buffer_size ) ;
+
short pcps_get_fw_id( PCPS_DDEV *pddev, PCPS_ID_STR FAR fw_id ) ;
short pcps_check_id( PCPS_DDEV *pddev, const char FAR *ref ) ;
short pcps_get_rev_num( char FAR *idstr ) ;
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/words.h b/src/external/bsd/meinberg/dist/mbglib/common/words.h
index ca272e1..7fff493 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/words.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/words.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: words.h 1.26 2011/04/06 10:23:03 martin TEST $
+ * $Id: words.h 1.27 2011/07/18 10:21:38 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,9 @@
*
* -----------------------------------------------------------------------
* $Log: words.h $
+ * Revision 1.27 2011/07/18 10:21:38 martin
+ * Added definition for MBG_CODE_NAME_TABLE_ENTRY which can
+ * be used to define tables assigning strings to numeric codes.
* Revision 1.26 2011/04/06 10:23:03 martin
* Added FBYTE_OF() and FWORD_OF() macros.
* Modifications required for *BSD.
@@ -332,6 +335,18 @@ typedef unsigned long dword;
#define _hilo_32( _x ) (_x)
#endif
+
+/**
+ * @brief A table entry which can be used to map codes to names.
+ */
+typedef struct
+{
+ ulong code;
+ const char *name;
+} MBG_CODE_NAME_TABLE_ENTRY;
+
+
+
/* End of header body */
#undef _ext