diff options
author | Martin Burnicki <martin.burnicki@meinberg.de> | 2011-07-20 12:00:00 +0200 |
---|---|---|
committer | Martin Burnicki <martin.burnicki@meinberg.de> | 2011-07-20 12:00:00 +0200 |
commit | 9fd30c3e28e55927b786f742fee14b3a03c8cd32 (patch) | |
tree | ed774e5c82c81ae2950aff637ec16cf6397b7051 | |
parent | 8cbbf5d5604c305f9839ce573c49fbfd33f816ab (diff) | |
download | mbgtools-nbsd-9fd30c3e28e55927b786f742fee14b3a03c8cd32.tar.gz mbgtools-nbsd-9fd30c3e28e55927b786f742fee14b3a03c8cd32.zip |
Update files from mbgtools-nbsd-dev-2011-07-20.tar.gzmbgtools-nbsd-dev-2011-07-20
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 |