diff options
author | Martin Burnicki <martin.burnicki@meinberg.de> | 2011-04-01 12:00:00 +0200 |
---|---|---|
committer | Martin Burnicki <martin.burnicki@meinberg.de> | 2011-04-01 12:00:00 +0200 |
commit | 8cfbcc7a4f20fa2d0bb34dabf646586830e0f9cc (patch) | |
tree | 41cabd06a37d2c1e71d25f7f6f431fccc8e2debf | |
parent | b8272501b2c9b27da0f190342267d85d7bd0ea25 (diff) | |
download | mbgtools-nbsd-8cfbcc7a4f20fa2d0bb34dabf646586830e0f9cc.tar.gz mbgtools-nbsd-8cfbcc7a4f20fa2d0bb34dabf646586830e0f9cc.zip |
Update files from mbgtools-nbsd-dev-2011-04-01.tar.gzmbgtools-nbsd-dev-2011-04-01
4 files changed, 77 insertions, 53 deletions
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/parmpcps.h b/src/external/bsd/meinberg/dist/mbglib/common/parmpcps.h index eafe487..7095d48 100755 --- a/src/external/bsd/meinberg/dist/mbglib/common/parmpcps.h +++ b/src/external/bsd/meinberg/dist/mbglib/common/parmpcps.h @@ -1,7 +1,7 @@ /************************************************************************** * - * $Id: parmpcps.h 1.6 2011/02/16 10:13:12 martin TEST $ + * $Id: parmpcps.h 1.7 2011/04/01 10:30:51 martin REL_M $ * * Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany * @@ -10,6 +10,8 @@ * * ----------------------------------------------------------------------- * $Log: parmpcps.h $ + * Revision 1.7 2011/04/01 10:30:51 martin + * Fixed macro syntax for _setup_default_receiver_info_dcf(). * Revision 1.6 2011/02/16 10:13:12 martin * Fixed macro syntax for _setup_default_receiver_info_pcps(). * Revision 1.5 2004/11/09 14:24:58Z martin @@ -102,7 +104,7 @@ extern "C" { * * Parameters: (RECEIVER_INFO *) _p */ -#define _setup_default_receiver_info_dcf( _p, _pdev ); \ +#define _setup_default_receiver_info_dcf( _p, _pdev ) \ do \ { \ memset( (_p), 0, sizeof( *(_p) ) ); \ @@ -115,7 +117,7 @@ do \ } while ( 0 ) -#define DEFAULT_MAX_STR_TYPE 2 //##++DEFAULT_N_STR_TYPE_GPS +#define DEFAULT_MAX_STR_TYPE 2 //##++ DEFAULT_N_STR_TYPE_GPS _ext STR_TYPE_INFO default_str_type_info[DEFAULT_MAX_STR_TYPE] #ifdef _DO_INIT diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c index a2d021f..d94d570 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.35.1.1 2011/03/28 09:52:16 martin TRASH martin $ + * $Id: pcpsdrvr.c 1.46.2.36 2011/04/01 10:38:00 martin TRASH $ * * Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany * @@ -61,8 +61,9 @@ * * ----------------------------------------------------------------------- * $Log: pcpsdrvr.c $ - * Revision 1.46.2.35.1.1 2011/03/28 09:52:16 martin - * Fixes for compiler warnings from Frank Kardel. + * Revision 1.46.2.36 2011/04/01 10:38:00 martin + * Modified mutex/spinlock initialization, and do deinitializaton. + * Fixed compiler warnings. * Revision 1.46.2.35 2011/03/25 11:10:34 martin * Optionally support timespec for sys time (USE_TIMESPEC). * Revision 1.46.2.34 2011/03/22 10:25:57 martin @@ -2172,8 +2173,14 @@ PCPS_DDEV *pcps_alloc_ddev( void ) #endif if ( pddev ) + { memset( pddev, 0, sizeof( *pddev ) ); + _pcps_mutex_init( &pddev->dev_mutex ); + _pcps_spin_lock_init( &pddev->mm_lock ); + _pcps_spin_lock_init( &pddev->irq_lock ); + } + return pddev; } // pcps_alloc_ddev @@ -2185,8 +2192,18 @@ void pcps_free_ddev( PCPS_DDEV *pddev ) { #if !_PCPS_STATIC_DEV_LIST if ( pddev ) + { + _pcps_mutex_destroy( &pddev->dev_mutex ); + _pcps_spin_lock_destroy( &pddev->mm_lock ); + _pcps_spin_lock_destroy( &pddev->irq_lock ); + _pcps_kfree( pddev, sizeof( *pddev ) ); + } #else + _pcps_mutex_destroy( &pddev->dev_mutex ); + _pcps_spin_lock_destroy( &pddev->mm_lock ); + _pcps_spin_lock_destroy( &pddev->irq_lock ); + memset( pddev, 0, sizeof( *pddev ) ); if ( n_ddevs ) @@ -2402,9 +2419,8 @@ int pcps_start_device( PCPS_DDEV *pddev, goto fail; } - _pcps_mutex_init( &pddev->dev_mutex ); - _pcps_spin_lock_init( &pddev->mm_lock ); - _pcps_spin_lock_init( &pddev->irq_lock ); + // mutexes / spinlocks have already been initialized + // when the *pddef has been allocated. switch ( _pcps_ddev_bus_flags( pddev ) ) { @@ -2929,11 +2945,9 @@ chip_setup_done: if ( _pcps_ddev_has_receiver_info( pddev ) ) { - int lrc; - - lrc = _pcps_read_gps_var( pddev, PC_GPS_RECEIVER_INFO, pddev->ri ); + rc = _pcps_read_gps_var( pddev, PC_GPS_RECEIVER_INFO, pddev->ri ); - if ( lrc == MBG_SUCCESS ) + if ( rc == MBG_SUCCESS ) { _mbg_swab_receiver_info( &rcvr_info ); goto check; @@ -2945,9 +2959,9 @@ chip_setup_done: if ( _pcps_ddev_is_gps( pddev ) ) _setup_default_receiver_info_gps( &pddev->ri ); - else { + else _setup_default_receiver_info_dcf( &pddev->ri, &pddev->dev ); - } + check: #if DEBUG_IO diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h index 36de1da..42d7526 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.22 2011/03/31 10:35:57 martin TRASH $ + * $Id: pcpsdrvr.h 1.41.1.23 2011/04/01 10:38:42 martin TRASH $ * * Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany * @@ -10,6 +10,8 @@ * * ----------------------------------------------------------------------- * $Log: pcpsdrvr.h $ + * Revision 1.41.1.23 2011/04/01 10:38:42 martin + * Support mutex/spinlock destroy. * Revision 1.41.1.22 2011/03/31 10:35:57 martin * Fixed a typo. * Revision 1.41.1.21 2011/03/28 09:53:52Z martin @@ -457,6 +459,9 @@ // We use native alignment for structures which are not accessed across system boundaries. +// Define some OS-specific primitives to alloc / free memory and handle +// mutexes and spinlocks in kernel space. + #if defined( MBG_TGT_LINUX ) #define _pcps_kmalloc( _sz ) kmalloc( _sz, GFP_ATOMIC ) @@ -464,12 +469,13 @@ #define MBG_SPINLOCK spinlock_t #define _pcps_spin_lock_init( _spl ) spin_lock_init( _spl ) - #define _pcps_spin_lock_deinit( _spl ) nop_macro_fnc() + #define _pcps_spin_lock_destroy( _spl ) _nop_macro_fnc() #define _pcps_spin_lock( _spl ) spin_lock( _spl ) #define _pcps_spin_unlock( _spl ) spin_unlock( _spl ) #define MBG_SYS_MUTEX struct semaphore #define _pcps_mutex_init( _pmtx ) sema_init( _pmtx, 1 ) + #define _pcps_mutex_destroy( _pmtx ) _nop_macro_fnc() // The special versions of _pcps_sem_inc() and _pcps_sem_dec() below // are only required to prevent interference with the IRQ handler @@ -498,55 +504,58 @@ // See "man 9 malloc" for details. MALLOC_DECLARE( M_MBGCLOCK ); - #define _pcps_kmalloc( _sz ) malloc( _sz, M_MBGCLOCK, M_NOWAIT | M_ZERO ) - #define _pcps_kfree( _p, _sv ) free( _p, M_MBGCLOCK ) + #define _pcps_kmalloc( _sz ) malloc( _sz, M_MBGCLOCK, M_NOWAIT | M_ZERO ) + #define _pcps_kfree( _p, _sv ) free( _p, M_MBGCLOCK ) - #define MBG_SPINLOCK struct mtx - #define _pcps_spin_lock_init( _spl ) mtx_init( _spl, "mbgclock_spin", NULL, MTX_SPIN ) - #define _pcps_spin_lock( _spl ) mtx_lock_spin( _spl ) - #define _pcps_spin_unlock( _spl ) mtx_unlock_spin( _spl ) + #define MBG_SPINLOCK struct mtx + #define _pcps_spin_lock_init( _spl ) mtx_init( _spl, "mbgclock_spin", NULL, MTX_SPIN ) + #define _pcps_spin_lock_destroy( _spl ) mtx_destroy( _spl ) + #define _pcps_spin_lock( _spl ) mtx_lock_spin( _spl ) + #define _pcps_spin_unlock( _spl ) mtx_unlock_spin( _spl ) - #define MBG_SYS_MUTEX struct mtx - #define _pcps_mutex_init( _pmtx ) mtx_init( _pmtx, "mbgclock_sema", NULL, MTX_DEF ) - #define _pcps_mutex_acquire( _pmtx ) mtx_lock( _pmtx ) - #define _pcps_mutex_release( _pmtx ) mtx_unlock( _pmtx ) + #define MBG_SYS_MUTEX struct mtx + #define _pcps_mutex_init( _pmtx ) mtx_init( _pmtx, "mbgclock_sema", NULL, MTX_DEF ) + #define _pcps_mutex_destroy( _pmtx ) mtx_destroy( _pmtx ) + #define _pcps_mutex_acquire( _pmtx ) mtx_lock( _pmtx ) + #define _pcps_mutex_release( _pmtx ) mtx_unlock( _pmtx ) #elif defined( MBG_TGT_NETBSD ) // For older NetBSD versions which do not suppport the calls // used below, see 'man 9 malloc'. - #define _pcps_kmalloc( _sz ) kmem_alloc( _sz, KM_NOSLEEP ) - #define _pcps_kfree( _p, _sz ) kmem_free( _p, _sz ) + #define _pcps_kmalloc( _sz ) kmem_alloc( _sz, KM_NOSLEEP ) + #define _pcps_kfree( _p, _sz ) kmem_free( _p, _sz ) // The API used below has been introduced in NetBSD 5.0 // For earlier NetBSD versions see 'man 9 lockinit'. #define MBG_SPINLOCK kmutex_t #define _pcps_spin_lock_init( _spl ) mutex_init( _spl, MUTEX_DEFAULT, IPL_HIGH ) - #define _pcps_spin_lock_deinit( _spl ) mutex_destroy( _spl ) + #define _pcps_spin_lock_destroy( _spl ) mutex_destroy( _spl ) #define _pcps_spin_lock( _spl ) mutex_spin_enter( _spl ) #define _pcps_spin_unlock( _spl ) mutex_spin_exit( _spl ) #define MBG_SYS_MUTEX kmutex_t #define _pcps_mutex_init( _pmtx ) mutex_init( _pmtx, MUTEX_DEFAULT, IPL_NONE ) - #define _pcps_mutex_deinit( _spl ) mutex_destroy( _spl ) + #define _pcps_mutex_destroy( _spl ) mutex_destroy( _spl ) #define _pcps_mutex_acquire( _pmtx ) mutex_enter( _pmtx ) #define _pcps_mutex_release( _pmtx ) mutex_exit( _pmtx ) #elif defined( MBG_TGT_WIN32 ) - #define _pcps_kmalloc( _sz ) ExAllocatePool( PagedPool, _sz ) - #define _pcps_kfree( _p, _sz ) ExFreePool( _p ) + #define _pcps_kmalloc( _sz ) ExAllocatePool( PagedPool, _sz ) + #define _pcps_kfree( _p, _sz ) ExFreePool( _p ) - #define MBG_SPINLOCK KSPIN_LOCK - #define _pcps_spin_lock_init( _spl ) KeInitializeSpinLock( _spl ) - #define _pcps_spin_lock( _spl ) KeAcquireSpinLockAtDpcLevel( _spl ) - #define _pcps_spin_unlock( _spl ) KeReleaseSpinLockFromDpcLevel( _spl ) + #define MBG_SPINLOCK KSPIN_LOCK + #define _pcps_spin_lock_init( _spl ) KeInitializeSpinLock( _spl ) + #define _pcps_spin_lock_destroy( _spl ) _nop_macro_fnc() + #define _pcps_spin_lock( _spl ) KeAcquireSpinLockAtDpcLevel( _spl ) + #define _pcps_spin_unlock( _spl ) KeReleaseSpinLockFromDpcLevel( _spl ) - #define MBG_SYS_MUTEX FAST_MUTEX - #define _pcps_mutex_init( _pmtx ) ExInitializeFastMutex( _pmtx ) - #define _pcps_mutex_acquire( _pmtx ) ExAcquireFastMutex( _pmtx ) - #define _pcps_mutex_release( _pmtx ) ExReleaseFastMutex( _pmtx ) + #define MBG_SYS_MUTEX FAST_MUTEX + #define _pcps_mutex_init( _pmtx ) ExInitializeFastMutex( _pmtx ) + #define _pcps_mutex_acquire( _pmtx ) ExAcquireFastMutex( _pmtx ) + #define _pcps_mutex_release( _pmtx ) ExReleaseFastMutex( _pmtx ) #endif @@ -563,20 +572,22 @@ // If the macros below have not yet been defined then define some dummies: -#if !defined( MBG_SYS_MUTEX ) +#if !defined( MBG_SPINLOCK ) - #define _pcps_mutex_init( _pmtx ) _nop_macro_fnc() - #define _pcps_mutex_acquire( _pmtx ) _nop_macro_fnc() - #define _pcps_mutex_release( _pmtx ) _nop_macro_fnc() + #define _pcps_spin_lock_init( _spl ) _nop_macro_fnc() + #define _pcps_spin_lock_destroy( _spl ) _nop_macro_fnc() + #define _pcps_spin_lock( _spl ) _nop_macro_fnc() + #define _pcps_spin_unlock( _spl ) _nop_macro_fnc() #endif -#if !defined( MBG_SPINLOCK ) +#if !defined( MBG_SYS_MUTEX ) - #define _pcps_spin_lock_init( _spl ) _nop_macro_fnc() - #define _pcps_spin_lock( _spl ) _nop_macro_fnc() - #define _pcps_spin_unlock( _spl ) _nop_macro_fnc() + #define _pcps_mutex_init( _pmtx ) _nop_macro_fnc() + #define _pcps_mutex_destroy( _pmtx ) _nop_macro_fnc() + #define _pcps_mutex_acquire( _pmtx ) _nop_macro_fnc() + #define _pcps_mutex_release( _pmtx ) _nop_macro_fnc() #endif diff --git a/src/external/bsd/meinberg/mbgclock/mbgclock_main.c b/src/external/bsd/meinberg/mbgclock/mbgclock_main.c index 166bbf0..ca9c4a3 100755 --- a/src/external/bsd/meinberg/mbgclock/mbgclock_main.c +++ b/src/external/bsd/meinberg/mbgclock/mbgclock_main.c @@ -1,5 +1,5 @@ /* - * $Header: /repository/clkdrv/bsd/netbsd/soft/mbgtools-nbsd/mbgclock/rcs/mbgclock_main.c 1.1.1.4 2011/03/31 07:21:03 martin TRASH martin $ + * $Header: /repository/clkdrv/bsd/netbsd/soft/mbgtools-nbsd/mbgclock/rcs/mbgclock_main.c 1.1.1.5 2011/04/01 12:54:09 martin TRASH $ * * NetBSD Meinberg mbgclock driver, Frank Kardel * @@ -537,11 +537,8 @@ mbgclock_detach(struct device *self, int flags) /* XXX insure not outstanding requests */ mbg_dealloc_rsrcs( psc ); - /* XXX mem leak on detach - if ( psc->pddev != NULL ) pcps_free_ddev( psc->pddev ); - */ psc->pddev = NULL; |