summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Burnicki <martin.burnicki@meinberg.de>2011-03-31 12:01:00 +0200
committerMartin Burnicki <martin.burnicki@meinberg.de>2011-03-31 12:01:00 +0200
commitb8272501b2c9b27da0f190342267d85d7bd0ea25 (patch)
treeff707f78961ee60d012c02f0d0f615b89fe59b03
parent32e528bfb571217125374caba02edfe37d5045f0 (diff)
downloadmbgtools-nbsd-b8272501b2c9b27da0f190342267d85d7bd0ea25.tar.gz
mbgtools-nbsd-b8272501b2c9b27da0f190342267d85d7bd0ea25.zip
Update files from mbgtools-nbsd-dev-2011-03-31.tar.gzmbgtools-nbsd-dev-2011-03-31
-rwxr-xr-x[-rw-r--r--]src/external/bsd/meinberg/Makefile0
-rwxr-xr-x[-rw-r--r--]src/external/bsd/meinberg/Makefile.inc0
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbgclock/Makefile48
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbgclock/Makefile.nbsd48
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbgclock/mbgdrvr.c725
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/macioctl.h99
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c28
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h18
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgerror.h10
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h2
-rwxr-xr-xsrc/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h8
-rwxr-xr-x[-rw-r--r--]src/external/bsd/meinberg/mbgclock/Makefile0
-rwxr-xr-x[-rw-r--r--]src/external/bsd/meinberg/mbgclock/Makefile.kmod6
-rwxr-xr-x[-rw-r--r--]src/external/bsd/meinberg/mbgclock/files.mbgclock2
-rwxr-xr-x[-rw-r--r--]src/external/bsd/meinberg/mbgclock/mbgclock_main.c100
-rw-r--r--src/sys/dev/pci/files.pci.diff16
-rw-r--r--src/sys/dev/pci/pcidevs.diff47
l---------src/sys/external/bsd/meinberg1
18 files changed, 217 insertions, 941 deletions
diff --git a/src/external/bsd/meinberg/Makefile b/src/external/bsd/meinberg/Makefile
index 346d99a..346d99a 100644..100755
--- a/src/external/bsd/meinberg/Makefile
+++ b/src/external/bsd/meinberg/Makefile
diff --git a/src/external/bsd/meinberg/Makefile.inc b/src/external/bsd/meinberg/Makefile.inc
index f169b5c..f169b5c 100644..100755
--- a/src/external/bsd/meinberg/Makefile.inc
+++ b/src/external/bsd/meinberg/Makefile.inc
diff --git a/src/external/bsd/meinberg/dist/mbgclock/Makefile b/src/external/bsd/meinberg/dist/mbgclock/Makefile
deleted file mode 100755
index 7dd2450..0000000
--- a/src/external/bsd/meinberg/dist/mbgclock/Makefile
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#########################################################################
-#
-# $Id: Makefile 1.1.1.4 2011/02/03 14:10:39 martin TEST martin $
-#
-# Description:
-# Makefile for mbgclock driver to support Meinberg bus level
-# devices under FreeBSD.
-#
-# -----------------------------------------------------------------------
-# $Log: Makefile $
-# Revision 1.1.1.4 2011/02/03 14:10:39 martin
-# Revision 1.1.1.3 2011/01/26 17:38:58 martin
-# Add support for DEBUG build.
-# Revision 1.1.1.2 2011/01/26 16:36:37 martin
-# Enabled all required source files.
-# Revision 1.1.1.1 2011/01/26 14:12:02 martin
-# Started modifications to build mbgclock.
-# Revision 1.1 2011/01/26 13:56:32 martin
-# Initial skeleton based on FreeBSD's mypci.c sample program by Murray Stokely.
-#
-#########################################################################
-
-KMOD= mbgclock
-
-MBGLIB= ../mbglib
-MBGLIB_COMMON= $(MBGLIB)/common
-MBGLIB_BSD= $(MBGLIB)/bsd
-
-.PATH: $(MBGLIB_COMMON) $(MBGLIB_BSD)
-
-CFLAGS= -I$(MBGLIB_COMMON) -I$(MBGLIB_BSD)
-
-.ifdef DEBUG
-CFLAGS+= -D DEBUG=$(DEBUG)
-.endif
-
-SRCS= mbgdrvr.c
-SRCS+= pcpsdrvr.c
-SRCS+= identdec.c
-SRCS+= rsrc_bsd.c
-SRCS+= device_if.h bus_if.h pci_if.h
-
-CLEANFILES= *~
-CLEANFILES+= machine
-CLEANFILES+= @
-
-.include <bsd.kmod.mk>
diff --git a/src/external/bsd/meinberg/dist/mbgclock/Makefile.nbsd b/src/external/bsd/meinberg/dist/mbgclock/Makefile.nbsd
deleted file mode 100755
index 7dd2450..0000000
--- a/src/external/bsd/meinberg/dist/mbgclock/Makefile.nbsd
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#########################################################################
-#
-# $Id: Makefile 1.1.1.4 2011/02/03 14:10:39 martin TEST martin $
-#
-# Description:
-# Makefile for mbgclock driver to support Meinberg bus level
-# devices under FreeBSD.
-#
-# -----------------------------------------------------------------------
-# $Log: Makefile $
-# Revision 1.1.1.4 2011/02/03 14:10:39 martin
-# Revision 1.1.1.3 2011/01/26 17:38:58 martin
-# Add support for DEBUG build.
-# Revision 1.1.1.2 2011/01/26 16:36:37 martin
-# Enabled all required source files.
-# Revision 1.1.1.1 2011/01/26 14:12:02 martin
-# Started modifications to build mbgclock.
-# Revision 1.1 2011/01/26 13:56:32 martin
-# Initial skeleton based on FreeBSD's mypci.c sample program by Murray Stokely.
-#
-#########################################################################
-
-KMOD= mbgclock
-
-MBGLIB= ../mbglib
-MBGLIB_COMMON= $(MBGLIB)/common
-MBGLIB_BSD= $(MBGLIB)/bsd
-
-.PATH: $(MBGLIB_COMMON) $(MBGLIB_BSD)
-
-CFLAGS= -I$(MBGLIB_COMMON) -I$(MBGLIB_BSD)
-
-.ifdef DEBUG
-CFLAGS+= -D DEBUG=$(DEBUG)
-.endif
-
-SRCS= mbgdrvr.c
-SRCS+= pcpsdrvr.c
-SRCS+= identdec.c
-SRCS+= rsrc_bsd.c
-SRCS+= device_if.h bus_if.h pci_if.h
-
-CLEANFILES= *~
-CLEANFILES+= machine
-CLEANFILES+= @
-
-.include <bsd.kmod.mk>
diff --git a/src/external/bsd/meinberg/dist/mbgclock/mbgdrvr.c b/src/external/bsd/meinberg/dist/mbgclock/mbgdrvr.c
deleted file mode 100755
index e2f968c..0000000
--- a/src/external/bsd/meinberg/dist/mbgclock/mbgdrvr.c
+++ /dev/null
@@ -1,725 +0,0 @@
-
-/**************************************************************************
- *
- * $Id: mbgdrvr.c 1.1.1.11.1.3 2011/03/25 11:06:27 martin TRASH martin $
- *
- * Description:
- * Main file for for mbgclock driver to support Meinberg bus level
- * devices under FreeBSD.
- *
- * The binary is a loadable module called mbgclock which implements
- * /dev/mbgclock* devices.
- *
- * Based on FreeBSD's mypci.c sample program by Murray Stokely.
- *
- * -----------------------------------------------------------------------
- * $Log: mbgdrvr.c $
- * Revision 1.1.1.11.1.3 2011/03/25 11:06:27 martin
- * Fixed typo.
- * Revision 1.1.1.11.1.2 2011/03/23 16:49:53 martin
- * Syntax fix.
- * Revision 1.1.1.11.1.1 2011/03/22 12:09:16 martin
- * Started to support NetBSD.
- * Revision 1.1.1.11 2011/02/04 14:44:19 martin
- * Revision 1.1.1.10 2011/02/02 12:33:52 martin
- * Revision 1.1.1.9 2011/02/01 17:11:38 martin
- * Revision 1.1.1.8 2011/02/01 14:49:42 martin
- * Revision 1.1.1.7 2011/02/01 12:12:17 martin
- * Revision 1.1.1.6 2011/01/31 17:28:56 martin
- * Modified resource handling.
- * Revision 1.1.1.5 2011/01/28 09:31:21 martin
- * Fixed debug/non-debug build.
- * Revision 1.1.1.4 2011/01/27 15:15:23 martin
- * Loads and unloads properly. Calls pcps_start_device() which
- * properly reads some data from a card.
- * Revision 1.1.1.3 2011/01/26 16:37:18 martin
- * Ioctl support compiled in.
- * Revision 1.1.1.2 2011/01/26 15:05:53 martin
- * Revision 1.1.1.1 2011/01/26 14:34:33 martin
- * Started modifications to build mbgclock.
- * Revision 1.1 2011/01/26 13:56:32 martin
- * Initial skeleton based on FreeBSD's mypci.c sample program by Murray Stokely.
- *
- **************************************************************************/
-
-#include <pcpsdrvr.h>
-#include <mbgddmsg.h>
-
-#include <sys/param.h> /* defines used in kernel.h */
-#include <sys/module.h>
-#include <sys/systm.h>
-#include <sys/errno.h>
-#include <sys/kernel.h> /* types used in module initialization */
-#include <sys/conf.h> /* cdevsw struct */
-#include <sys/uio.h> /* uio struct */
-#include <sys/malloc.h>
-#include <sys/bus.h> /* structs, prototypes for pci bus stuff */
-
-#if defined( MBG_TGT_FREEBSD )
- #include <sys/rman.h>
-#endif
-
-#include <dev/pci/pcivar.h> /* For pci_get macros! */
-#include <dev/pci/pcireg.h>
-
-
-
-#if 1 //##++ move this elsewhere!
-
-#define REV_NUM 0x100
-#define REV_NUM_STR "1.00"
-
-#define MBG_COPYRIGHT "(c) Meinberg 2011"
-
-#define MBG_DRVR_NAME "mbgclock"
-#define MBGCLK_NAME "mbgclk"
-#define MBGNTP_NAME "mbgntp"
-
-const char pcps_driver_name[] = MBG_DRVR_NAME;
-
-static MBG_DBG_DATA mbg_dbg_data;
-static MBG_DBG_PORT mbg_dbg_port = 0x378 + 0; //##++
-static PCPS_IO_ADDR_MAPPED mbg_dbg_port_mapped; //##++
-
-static PCPS_DRVR_INFO drvr_info = { REV_NUM, 0, MBG_DRVR_NAME " radio clock driver" };
-
-#if defined( DEBUG )
-int debug = DEBUG;
-#endif
-
-MALLOC_DEFINE( M_MBGCLOCK, "short desc", "long desc" );
-
-#include <macioctl.h>
-
-#endif
-
-
-
-/* The softc holds our per-instance data. */
-struct mbgclock_softc
-{
- device_t device;
- struct cdev *cdev;
- PCPS_DDEV *pddev;
-};
-
-
-/* Function prototypes */
-#if defined( MBG_TGT_NETBSD )
- static int mbgclock_open( dev_t, int, int, struct proc * );
- static int mbgclock_close( dev_t, int, int, struct proc * );
- static int mbgclock_read( dev_t dev, struct uio *, int );
-#else // FreeBSD
- static d_open_t mbgclock_open;
- static d_close_t mbgclock_close;
- static d_read_t mbgclock_read;
- static d_write_t mbgclock_write;
- static d_ioctl_t mbgclock_ioctl;
-#endif
-
-
-/* Character device entry points */
-
-static struct cdevsw mbgclock_cdevsw =
-{
-#if defined( MBG_TGT_NETBSD )
-
-#if 0 //##+++++++
- .d_open = mbgclock_open,
- .d_close = mbgclock_close,
- .d_read = mbgclock_read,
- .d_write = mbgclock_write,
- .d_ioctl = mbgclock_ioctl,
- .d_name = "mbgclock"
-#endif
-
-#else // FreeBSD
- .d_version = D_VERSION,
- .d_open = mbgclock_open,
- .d_close = mbgclock_close,
- .d_read = mbgclock_read,
- .d_write = mbgclock_write,
- .d_ioctl = mbgclock_ioctl,
- .d_name = "mbgclock"
-#endif
-};
-
-
-
-static __mbg_inline
-void set_dev_connected( PCPS_DDEV *pddev, int state )
-{
- _mbgddmsg_4( MBG_DBG_DETAIL, "%s: setting dev %s_%s connected state to %i",
- pcps_driver_name, _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ),
- state );
- atomic_store_rel_int( &pddev->connected, state );
-
-} // set_dev_connected
-
-
-
-/*
- * In the cdevsw routines, we find our softc by using the si_drv1 member
- * of struct cdev. We set this variable to point to our softc in our
- * attach routine when we create the /dev entry.
- */
-#if defined( MBG_TGT_NETBSD )
-
-#if 0 //##++++
-int
-mbgclock_open( dev_t, int, int, struct proc * )
-{
-} // mbgclock_open
-#endif
-
-#else // FreeBSD
-
-int
-mbgclock_open( struct cdev *dev, int oflags, int devtype, d_thread_t *td )
-{
- struct mbgclock_softc *psc = dev->si_drv1;
- PCPS_DDEV *pddev = psc->pddev;
-
- _mbgddmsg_3( MBG_DBG_INFO, "%s: dev %s_%s opened successfully.", pcps_driver_name,
- _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
-
- atomic_add_int( &pddev->open_count, 1 );
-
- return 0;
-
-} // mbgclock_open
-
-#endif
-
-
-#if defined( MBG_TGT_NETBSD )
-
-#else // FreeBSD
-
-int
-mbgclock_close( struct cdev *dev, int fflag, int devtype, d_thread_t *td )
-{
- struct mbgclock_softc *psc = dev->si_drv1;
- PCPS_DDEV *pddev = psc->pddev;
-
- atomic_subtract_int( &pddev->open_count, 1 );
-
- _mbgddmsg_3( MBG_DBG_INFO, "%s: dev %s_%s closed.", pcps_driver_name,
- _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
-
- return 0;
-
-} // mbgclock_close
-
-#endif
-
-
-#if defined( MBG_TGT_NETBSD )
-
-#else // FreeBSD
-
-int
-mbgclock_read( struct cdev *dev, struct uio *uio, int ioflag )
-{
- #if defined( DEBUG )
- struct mbgclock_softc *psc = dev->si_drv1;
- PCPS_DDEV *pddev = psc->pddev;
-
- _mbgddmsg_4( MBG_DBG_INFO, "%s: dev %s_%s asked to read %li bytes",
- pcps_driver_name, _pcps_ddev_type_name( pddev ),
- _pcps_ddev_sernum( pddev ), (long) uio->uio_resid );
- #endif
-
- return 0;
-
-} // mbgclock_read
-
-#endif
-
-
-#if defined( MBG_TGT_NETBSD )
-
-#else // FreeBSD
-
-int
-mbgclock_write( struct cdev *dev, struct uio *uio, int ioflag )
-{
- #if defined( DEBUG )
- struct mbgclock_softc *psc = dev->si_drv1;
- PCPS_DDEV *pddev = psc->pddev;
-
- _mbgddmsg_4( MBG_DBG_INFO, "%s: dev %s_%s asked to write %li bytes",
- pcps_driver_name, _pcps_ddev_type_name( pddev ),
- _pcps_ddev_sernum( pddev ), (long) uio->uio_resid );
- #endif
-
- return 0;
-
-} // mbgclock_write
-
-#endif
-
-
-
-#if defined( MBG_TGT_NETBSD ) //##++++++++++++
-
-// Below there are some dummy declarations to make the IOCTL handler
-// for FreeBSD *compile* without errors under NetBSD.
-// This is mainly to see if ioctl_switch() compiles without errors.
-
-#define caddr_t void *
-
-struct thread
-{
- int dummy;
-};
-
-#endif
-
-int
-mbgclock_ioctl( struct cdev *dev, u_long cmd, caddr_t data,
- int32_t flag, struct thread *td )
-{
-#if defined( MBG_TGT_NETBSD )
- struct mbgclock_softc *psc = NULL; //##++++ dummy, just to avoid build error
-#else // FreeBSD
- struct mbgclock_softc *psc = dev->si_drv1;
-#endif
- PCPS_DDEV *pddev = psc->pddev;
- int rc;
-
- rc = ioctl_switch( pddev, cmd, (void *) data, (void *) data );
-
- // On success we return quickly.
-
- if ( rc == MBG_SUCCESS )
- {
- _mbgddmsg_5( MBG_DBG_INFO, "%s: %p IOCTL 0x%02lX: success, dev %s_%s",
- pcps_driver_name, dev, cmd, _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
- goto out;
- }
-
-
- // An error has occurred.
- // Generate an appropriate debug/error message
- // and return an error status.
-
- switch ( rc )
- {
- case MBG_ERR_INV_DEV_REQUEST:
- _mbgddmsg_6( MBG_DBG_WARN, "%s: %p ioctl 0x%02lX: invalid cmd %04lX, dev %s_%s",
- pcps_driver_name, dev, cmd, IOCBASECMD( cmd ),
- _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
- rc = -EINVAL;
- break;
-
-
- case MBG_ERR_NOT_SUPP_BY_DEV:
- _mbgddmsg_5( MBG_DBG_WARN, "%s: %p ioctl 0x%02lX: not supported by dev %s_%s",
- pcps_driver_name, dev, cmd, _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
- rc = -EIO;
- break;
-
-
- case MBG_ERR_NO_MEM:
- _mbgddmsg_5( MBG_DBG_WARN, "%s: %p ioctl 0x%02lX: unable to allocate buffer for dev %s_%s",
- pcps_driver_name, dev, cmd, _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
- rc = -EFAULT;
- break;
-
-
- case MBG_ERR_IRQ_UNSAFE:
- _mbgddmsg_5( MBG_DBG_DETAIL, "%s: %p ioctl 0x%02lX: busy since unsafe IRQ enabled, dev %s_%s",
- pcps_driver_name, dev, cmd, _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
- rc = -EBUSY;
- break;
-
-
- default: // any access error code returned by the low level routine
- // or copying from or to user space
- _mbgddmsg_6( MBG_DBG_WARN, "%s: %p ioctl 0x%02lX: error %i accessing dev %s_%s",
- pcps_driver_name, dev, cmd, rc, _pcps_ddev_type_name( pddev ), _pcps_ddev_sernum( pddev ) );
- rc = -EFAULT;
-
- } // switch error rc
-
-
-out:
- return rc;
-
-} // mbgclock_ioctl
-
-
-
-/* PCI Support Functions */
-
-static void
-mbg_deallocate_resource( device_t device, BSD_RSRC_INFO *p_ri, int type )
-{
- if ( p_ri->res )
- {
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- bus_deactivate_resource( device, type,
- p_ri->rid, p_ri->res );
- bus_release_resource( device, type,
- p_ri->rid, p_ri->res );
-#endif
- p_ri->res = NULL;
- }
-
-} // mbg_deallocate_resource
-
-
-
-/*
- * deallocate resources
- */
-static void
-mbg_dealloc_rsrcs( device_t device )
-{
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- struct mbgclock_softc *psc = device_get_softc( device );
- PCPS_DDEV *pddev = psc->pddev;
- PCPS_RSRC_INFO *prsrci = &pddev->rsrc_info;
- int i;
-
-// mbg_deallocate_resource( device, &prsrci->irq.bsd, SYS_RES_IRQ );
-
- for ( i = 0; i < N_PCPS_MEM_RSRC; i++ )
- mbg_deallocate_resource( device, &prsrci->mem[i].bsd, SYS_RES_MEMORY );
-
- for ( i = 0; i < N_PCPS_PORT_RSRC; i++ )
- mbg_deallocate_resource( device, &prsrci->port[i].bsd, SYS_RES_IOPORT );
-#endif
-
-} // mbg_dealloc_rsrcs
-
-
-
-static void
-mbg_alloc_rsrc( device_t device, int rid, BSD_RSRC_INFO *p_ri, int type, int flags )
-{
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- p_ri->rid = rid;
-
- p_ri->res = bus_alloc_resource_any( device, type, &p_ri->rid, flags );
-
- if ( p_ri->res )
- {
- p_ri->bst = rman_get_bustag( p_ri->res );
- p_ri->bsh = rman_get_bushandle( p_ri->res );
- }
-#endif
-
-} // mbg_alloc_rsrc
-
-
-
-static void
-mbg_alloc_rsrcs( device_t device )
-{
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- struct mbgclock_softc *psc = device_get_softc( device );
- PCPS_DDEV *pddev = psc->pddev;
- PCPS_RSRC_INFO *prsrci = &pddev->rsrc_info;
- BSD_RSRC_INFO ri;
- int bar;
-
-// _mbgddmsg_3( MBG_DBG_INIT_DEV, "%s: alloc I/O range %i: PCI device 0x%04X:0x%04X supported",
-// pcps_driver_name, vend_id, dev_id );
-
- for ( bar = 0; bar < 5; bar ++ )
- {
- int rid = PCIR_BAR( bar );
-
- if ( prsrci->num_rsrc_io < N_PCPS_PORT_RSRC )
- {
- mbg_alloc_rsrc( device, rid, &ri, SYS_RES_IOPORT, RF_ACTIVE );
-
- if ( ri.res )
- {
- prsrci->port[prsrci->num_rsrc_io].bsd = ri;
- pcps_add_rsrc_io( pddev, rman_get_start( ri.res ), rman_get_size( ri.res ) );
- continue;
- }
- }
-
- if ( prsrci->num_rsrc_mem < N_PCPS_MEM_RSRC )
- {
- mbg_alloc_rsrc( device, rid, &ri, SYS_RES_MEMORY, RF_ACTIVE );
-
- if ( ri.res )
- {
- prsrci->mem[prsrci->num_rsrc_mem].bsd = ri;
- pcps_add_rsrc_mem( pddev, rman_get_start( ri.res ), rman_get_size( ri.res ) );
- continue;
- }
- }
- }
-
-
- // single IRQ resource
-#if 0 // currently not used / required
- mbg_alloc_rsrc( device, 0, &ri, SYS_RES_IRQ, RF_SHAREABLE | RF_ACTIVE );
-
- if ( ri.res )
- {
- prsrci->port[prsrci->num_rsrc_irq].bsd = ri;
- pcps_add_rsrc_irq( pddev, rman_get_start( ri.res ) );
- }
-#endif
-
-#endif
-
-} // mbg_alloc_rsrcs
-
-
-
-/*
- * Probe: compare the device ID of this device against the IDs that this driver
- * supports. If there is a match, set the description and return success.
- */
-static int
-mbgclock_probe( device_t device )
-{
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- uint16_t vend_id = pci_get_vendor( device );
- uint16_t dev_id = pci_get_device( device );
- PCPS_DEV_TYPE *pdt;
-
-
- if ( vend_id != PCI_VENDOR_MEINBERG )
- goto fail;
-
- pdt = pcps_get_dev_type( PCPS_BUS_PCI, dev_id );
-
- if ( pdt == NULL )
- goto fail;
-
- device_set_desc( device, pdt->name );
-
- _mbgddmsg_3( MBG_DBG_INIT_DEV, "%s: probe: PCI device 0x%04X:0x%04X supported",
- pcps_driver_name, vend_id, dev_id );
-
- return BUS_PROBE_DEFAULT;
-
-
-fail:
- _mbgddmsg_3( MBG_DBG_INIT_DEV, "%s: probe: PCI device 0x%04X:0x%04X not supported",
- pcps_driver_name, vend_id, dev_id );
- return ENXIO;
-
-#endif
-
-} // mbgclock_probe
-
-
-
-/*
- * Attach function is only called if the probe is successful.
- */
-static int
-mbgclock_attach( device_t device )
-{
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- uint16_t dev_id = pci_get_device( device );
- struct mbgclock_softc *psc = device_get_softc( device );
- int rc;
-
- _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: attach for device 0x%04X",
- pcps_driver_name, dev_id );
-
- psc->pddev = pcps_alloc_ddev();
-
- if ( psc->pddev == NULL )
- {
- _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: attach device 0x%04X: pcps_alloc_ddev() failed",
- pcps_driver_name, dev_id );
- rc = ENOMEM;
- goto fail;
- }
-
-
- rc = pcps_init_ddev( psc->pddev, PCPS_BUS_PCI, dev_id );
-
- if ( rc != PCPS_SUCCESS )
- {
- _mbgddmsg_3( MBG_DBG_INIT_DEV, "%s: attach device 0x%04X: pcps_init_ddev() failed, rc: %i",
- pcps_driver_name, dev_id, rc );
- rc = ENXIO;
- goto fail;
- }
-
-
- //##++++++ rc = pci_enable_device( dev );
-
-
- mbg_alloc_rsrcs( device );
-
- //##++++++ rc = pcps_start_device( pddev, device->bus->number, device->devfn );
- rc = pcps_start_device( psc->pddev, 0, 0 );
-
- if ( rc != PCPS_SUCCESS )
- {
- _mbgddmsg_3( MBG_DBG_INIT_DEV, "%s: attach device 0x%04X: pcps_start_device() failed, rc: %i",
- pcps_driver_name, dev_id, rc );
- rc = ENXIO;
- goto fail;
- }
-
-
- set_dev_connected( psc->pddev, 1 );
-
- /* Initialize our softc. */
- psc->device = device;
- /*
- * Create a /dev entry for this device. The kernel will assign us
- * a major number automatically. We use the unit number of this
- * device as the minor number and name the character device
- * "mbgclock<unit>".
- */
- psc->cdev = make_dev( &mbgclock_cdevsw, device_get_unit( device ),
- UID_ROOT, GID_WHEEL, 0600, "mbgclock%u", device_get_unit( device ) );
-
- psc->cdev->si_drv1 = psc;
-
- _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: device 0x%04X attached successfully",
- pcps_driver_name, dev_id );
-
- return 0;
-
-
-fail:
- mbg_dealloc_rsrcs( device );
-
- if ( psc->pddev )
- pcps_free_ddev( psc->pddev );
-
- _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: failed to attach device 0x%04X",
- pcps_driver_name, dev_id );
- return rc;
-#endif
-
-} // mbgclock_attach
-
-
-
-/*
- * Detach device.
- */
-static int
-mbgclock_detach( device_t device )
-{
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
- #if defined( DEBUG )
- uint16_t dev_id = pci_get_device( device );
- #endif
- struct mbgclock_softc *psc;
- PCPS_DDEV *pddev;
-
- _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: detach for device 0x%04X",
- pcps_driver_name, dev_id );
-
- /* Teardown the state in our softc created in our attach routine. */
- psc = device_get_softc( device );
- pddev = psc->pddev;
-
- set_dev_connected( pddev, 0 );
-
-// pcps_free_ddev( pddev ); //##++++++ should wait for outstanding requests
-
- mbg_dealloc_rsrcs( device );
-
- destroy_dev( psc->cdev );
-
- _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: device 0x%04X detached",
- pcps_driver_name, dev_id );
-#endif
-
- return 0;
-
-} // mbgclock_detach
-
-
-
-/*
- * Called during system shutdown after sync.
- */
-static int
-mbgclock_shutdown( device_t device )
-{
- printf( "mbgclock shutdown!\n" );
-
- return 0;
-
-} // mbgclock_shutdown
-
-
-
-/*
- * Device suspend routine.
- */
-static int
-mbgclock_suspend( device_t device )
-{
- printf( "mbgclock suspend!\n" );
-
- return 0;
-
-} // mbgclock_suspend
-
-
-
-/*
- * Device resume routine.
- */
-static int
-mbgclock_resume( device_t device )
-{
- printf( "mbgclock resume!\n" );
-
- return 0;
-
-} // mbgclock_resume
-
-
-
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
-static device_method_t mbgclock_methods[] =
-{
- /* Device interface */
- DEVMETHOD( device_probe, mbgclock_probe ),
- DEVMETHOD( device_attach, mbgclock_attach ),
- DEVMETHOD( device_detach, mbgclock_detach ),
- DEVMETHOD( device_shutdown, mbgclock_shutdown ),
- DEVMETHOD( device_suspend, mbgclock_suspend ),
- DEVMETHOD( device_resume, mbgclock_resume ),
- { 0, 0 }
-};
-#endif
-
-
-#if defined( MBG_TGT_NETBSD )
- //##++++++
-#else // FreeBSD
-static devclass_t mbgclock_devclass;
-
-DEFINE_CLASS_0( mbgclock, mbgclock_driver, mbgclock_methods, sizeof( struct mbgclock_softc ) );
-DRIVER_MODULE( mbgclock, pci, mbgclock_driver, mbgclock_devclass, 0, 0 );
-#endif
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/macioctl.h b/src/external/bsd/meinberg/dist/mbglib/common/macioctl.h
index fb85639..c3c8a75 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.13 2011/03/23 16:50:30 martin TRASH martin $
+ * $Id: macioctl.h 1.33.1.16.1.1 2011/03/31 15:27:06 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -11,6 +11,15 @@
*
* -----------------------------------------------------------------------
* $Log: macioctl.h $
+ * Revision 1.33.1.16.1.1 2011/03/31 15:27:06 martin
+ * Conditionally trying to read directly to the IOCTL buffer.
+ * Revision 1.33.1.16 2011/03/31 10:57:00 martin
+ * Revision 1.33.1.15 2011/03/31 07:32:09 martin
+ *
+ * --- Added comments --- martin [2011/03/31 10:41:58Z]
+ * This version is the same as 1.33.1.12.
+ * Revision 1.33.1.14 2011/03/31 07:16:34 martin
+ * Changes by Frank Kardel: Don't require copyin/copyout under NetBSD.
* Revision 1.33.1.13 2011/03/23 16:50:30 martin
* Support NetBSD beside FreeBSD.
* Revision 1.33.1.12 2011/03/21 16:25:23 martin
@@ -230,7 +239,9 @@ typedef struct
#define _io_unmap_mapped_mem_address( _pddev, _pin ) \
_nop_macro_fnc()
-#elif defined( MBG_TGT_FREEBSD )
+ #define USE_COPY_KERNEL_USER 1
+
+#elif defined( MBG_TGT_BSD )
#include <sys/malloc.h>
@@ -252,36 +263,6 @@ typedef struct
#define _io_unmap_mapped_mem_address( _pddev, _pin ) \
goto err_inval
-#elif defined( MBG_TGT_NETBSD )
-
- #include <sys/malloc.h>
-
- #define _pcps_iob( _type, _s ) _type _s
- #define _pcps_iob_arr( _type, _s, n ) _type _s[_n]
-
- int
- copyin(const void *uaddr, void *kaddr, size_t len); // to from user to kernel
-
- int
- copyout(const void *kaddr, void *uaddr, size_t len); // from kernel to user
-
- #define _pcps_iob_to_pout_size( _type, _iob, _pout, _size ) \
- if ( copyout( (_type *)(_pout), &(_iob), _size ) ) \
- goto err_to_user;
-
- #define _pcps_iob_from_pin_size( _type, _iob, _pin, _size ) \
- if ( copyin( &(_iob), (_type *) (_pin), _size ) ) \
- goto err_from_user;
-
- #define _io_wait_pcps_sec_change( _pddev, _cmd, _type, _pout ) \
- goto err_inval
-
- #define _io_get_mapped_mem_address( _pddev, _pout ) \
- goto err_inval
-
- #define _io_unmap_mapped_mem_address( _pddev, _pin ) \
- goto err_inval
-
#elif defined( MBG_TGT_WIN32 )
#define _pcps_iob( _type, _s ) _type _s
@@ -380,6 +361,36 @@ typedef struct
}
+#if 1 //##+++++
+ #define _pcps_iob_x( _type, _s ) _nop_macro_fnc()
+ #define _iob_addr( _s, _pout ) _pout
+ #define _pcps_iob_to_pout_x( _type, _s, _pout ) _nop_macro_fnc()
+#else
+ #define _pcps_iob_x( _type, _s ) _pcps_iob( _type, _s )
+ #define _iob_addr( _s, _pout ) &(_s)
+ #define _pcps_iob_to_pout_x( _type, _s, _pout ) _pcps_iob_to_pout( _type, _s, _pout )
+#endif
+
+// Read a data structure from a clock device.
+// Check the return code and if no error occurred,
+// copy the data to the caller's memory space.
+#define _io_read_var_x( _pddev, _cmd, _type, _pout ) \
+{ \
+ _pcps_iob_x( _type, _s ); \
+ \
+ _pcps_sem_inc_safe( _pddev ); \
+ rc = _pcps_read( (_pddev), (_cmd), \
+ _iob_addr( _s, _pout ), sizeof( _type ) ); \
+ _pcps_sem_dec( _pddev ); \
+ \
+ if ( rc != MBG_SUCCESS ) \
+ goto err_access; \
+ \
+ _pcps_iob_to_pout_x( _type, _s, _pout ); \
+}
+
+
+
// Retrieve a data structure from the caller's
// memory space, write it to a clock device and
// check the return code.
@@ -883,8 +894,8 @@ int ioctl_switch( PCPS_DDEV *pddev, int ioctl_code,
case IOCTL_GET_PCPS_TIME:
- _io_read_var( pddev, PCPS_GIVE_TIME_NOCLEAR,
- PCPS_TIME, pout );
+ _io_read_var_x( pddev, PCPS_GIVE_TIME_NOCLEAR,
+ PCPS_TIME, pout );
break;
@@ -1576,30 +1587,30 @@ int ioctl_switch( PCPS_DDEV *pddev, int ioctl_code,
case IOCTL_GET_FAST_HR_TIMESTAMP_CYCLES:
{
- _pcps_iob( PCPS_TIME_STAMP_CYCLES, _s );
+ _pcps_iob_x( PCPS_TIME_STAMP_CYCLES, b );
if ( !_pcps_ddev_has_fast_hr_timestamp( pddev ) )
goto err_support;
- do_get_fast_hr_timestamp_cycles_safe( pddev, &_s );
+ do_get_fast_hr_timestamp_cycles_safe( pddev, _iob_addr( b, pout ) );
rc = MBG_SUCCESS;
- _pcps_iob_to_pout( PCPS_TIME_STAMP_CYCLES, _s, pout );
+ _pcps_iob_to_pout_x( PCPS_TIME_STAMP_CYCLES, b, pout );
}
break;
case IOCTL_GET_FAST_HR_TIMESTAMP:
{
- _pcps_iob( PCPS_TIME_STAMP, _s );
+ _pcps_iob_x( PCPS_TIME_STAMP, b );
if ( !_pcps_ddev_has_fast_hr_timestamp( pddev ) )
goto err_support;
- do_get_fast_hr_timestamp_safe( pddev, &_s );
+ do_get_fast_hr_timestamp_safe( pddev, _iob_addr( b, pout ) );
rc = MBG_SUCCESS;
- _pcps_iob_to_pout( PCPS_TIME_STAMP, _s, pout );
+ _pcps_iob_to_pout_x( PCPS_TIME_STAMP, b, pout );
}
break;
@@ -1866,15 +1877,15 @@ err_access:
return rc; // return the rc from the low level routine
-#if defined( MBG_TGT_LINUX ) || defined( MBG_TGT_NETBSD )
+#if defined( USE_COPY_KERNEL_USER )
err_to_user:
- return -EFAULT;
+ return MBG_ERR_COPY_TO_USER;
err_from_user:
- return -EFAULT;
+ return MBG_ERR_COPY_FROM_USER;
-#endif // defined( MBG_TGT_LINUX )
+#endif // defined( USE_COPY_KERNEL_USER )
} // ioctl_switch
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c b/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.c
index e4f8c8b..e210f22 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.15 2011/02/16 10:15:13 martin TRASH martin(2011.02.16.10.15.13) $
+ * $Id: mbgdevio.c 1.35.1.16 2011/03/31 13:18:46 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,6 +10,8 @@
*
* -----------------------------------------------------------------------
* $Log: mbgdevio.c $
+ * Revision 1.35.1.16 2011/03/31 13:18:46 martin
+ * Coding style.
* Revision 1.35.1.15 2011/02/16 10:15:13 martin
* Revision 1.35.1.14 2011/02/15 14:24:55Z martin
* Revision 1.35.1.13 2011/02/15 11:21:47 daniel
@@ -2299,8 +2301,8 @@ _MBG_API_ATTR int _MBG_API mbg_dev_has_irig_ctrl_bits( MBG_DEV_HANDLE dh, int *p
@see mbg_dev_has_irig_ctrl_bits()
*/
-_MBG_API_ATTR int _MBG_API mbg_get_irig_ctrl_bits( MBG_DEV_HANDLE dh,
- MBG_IRIG_CTRL_BITS *p )
+_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 );
@@ -2346,8 +2348,8 @@ _MBG_API_ATTR int _MBG_API mbg_dev_has_raw_irig_data( MBG_DEV_HANDLE dh, int *p)
@see mbg_dev_has_raw_irig_data()
@see mbg_get_raw_irig_data_on_sec_change()
*/
-_MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data( MBG_DEV_HANDLE dh,
- MBG_RAW_IRIG_DATA *p )
+_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 );
@@ -2376,8 +2378,8 @@ _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data( MBG_DEV_HANDLE dh,
@see mbg_dev_has_raw_irig_data()
@see mbg_get_raw_irig_data()
*/
-_MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data_on_sec_change( MBG_DEV_HANDLE dh,
- MBG_RAW_IRIG_DATA *p )
+_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;
@@ -2432,8 +2434,8 @@ _MBG_API_ATTR int _MBG_API mbg_dev_has_irig_time( MBG_DEV_HANDLE dh, int *p )
@see mbg_dev_has_irig_time()
*/
-_MBG_API_ATTR int _MBG_API mbg_get_irig_time( MBG_DEV_HANDLE dh,
- PCPS_IRIG_TIME *p )
+_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 );
@@ -4201,8 +4203,8 @@ _MBG_API_ATTR int _MBG_API mbg_dev_has_fast_hr_timestamp( MBG_DEV_HANDLE dh, int
@see mbg_get_fast_hr_timestamp_comp()
@see mbg_get_fast_hr_timestamp()
*/
-_MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp_cycles( MBG_DEV_HANDLE dh,
- PCPS_TIME_STAMP_CYCLES *p )
+_MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp_cycles( MBG_DEV_HANDLE dh,
+ PCPS_TIME_STAMP_CYCLES *p )
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
@@ -4279,8 +4281,8 @@ _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp_comp( MBG_DEV_HANDLE dh,
@see mbg_get_fast_hr_timestamp_comp()
@see mbg_get_fast_hr_timestamp_cycles()
*/
-_MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp( MBG_DEV_HANDLE dh,
- PCPS_TIME_STAMP *p )
+_MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp( MBG_DEV_HANDLE dh,
+ PCPS_TIME_STAMP *p )
{
#if defined( _MBGIOCTL_H )
_mbgdevio_vars();
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h b/src/external/bsd/meinberg/dist/mbglib/common/mbgdevio.h
index d1910e7..b79ab8d 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.13 2011/02/15 14:26:22 martin TRASH martin(2011.02.16.09.52.26) $
+ * $Id: mbgdevio.h 1.39.1.14 2011/03/31 13:20:55 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,7 +10,9 @@
*
* -----------------------------------------------------------------------
* $Log: mbgdevio.h $
- * Revision 1.39.1.13 2011/02/15 14:26:22 martin
+ * Revision 1.39.1.14 2011/03/31 13:20:55 martin
+ * Updated function prototypes.
+ * Revision 1.39.1.13 2011/02/15 14:26:22Z martin
* Revision 1.39.1.12 2011/02/15 11:22:29 daniel
* Updated function prototypes to support PTP unicast configuration
* Revision 1.39.1.11 2011/02/02 12:21:39Z martin
@@ -1162,7 +1164,7 @@ extern "C" {
@see mbg_dev_has_irig_ctrl_bits()
*/
- _MBG_API_ATTR int _MBG_API mbg_get_irig_ctrl_bits( MBG_DEV_HANDLE dh, MBG_IRIG_CTRL_BITS *p ) ;
+ _MBG_API_ATTR int _MBG_API mbg_get_irig_ctrl_bits( MBG_DEV_HANDLE dh, MBG_IRIG_CTRL_BITS *p ) ;
/**
Check if a specific device supports the mbg_get_raw_irig_data() call.
@@ -1191,7 +1193,7 @@ extern "C" {
@see mbg_dev_has_raw_irig_data()
@see mbg_get_raw_irig_data_on_sec_change()
*/
- _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data( MBG_DEV_HANDLE dh, MBG_RAW_IRIG_DATA *p ) ;
+ _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data( MBG_DEV_HANDLE dh, MBG_RAW_IRIG_DATA *p ) ;
/**
Read a ::MBG_RAW_IRIG_DATA type just after a second change which contains all data
@@ -1210,7 +1212,7 @@ extern "C" {
@see mbg_dev_has_raw_irig_data()
@see mbg_get_raw_irig_data()
*/
- _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data_on_sec_change( MBG_DEV_HANDLE dh, MBG_RAW_IRIG_DATA *p ) ;
+ _MBG_API_ATTR int _MBG_API mbg_get_raw_irig_data_on_sec_change( MBG_DEV_HANDLE dh, MBG_RAW_IRIG_DATA *p ) ;
/**
Check if a specific device supports the mbg_get_irig_time() call.
@@ -1239,7 +1241,7 @@ extern "C" {
@see mbg_dev_has_irig_time()
*/
- _MBG_API_ATTR int _MBG_API mbg_get_irig_time( MBG_DEV_HANDLE dh, PCPS_IRIG_TIME *p ) ;
+ _MBG_API_ATTR int _MBG_API mbg_get_irig_time( MBG_DEV_HANDLE dh, PCPS_IRIG_TIME *p ) ;
/**
Clear the card's on-board time capture FIFO buffer.
@@ -2115,7 +2117,7 @@ extern "C" {
@see mbg_get_fast_hr_timestamp_comp()
@see mbg_get_fast_hr_timestamp()
*/
- _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp_cycles( MBG_DEV_HANDLE dh, PCPS_TIME_STAMP_CYCLES *p ) ;
+ _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp_cycles( MBG_DEV_HANDLE dh, PCPS_TIME_STAMP_CYCLES *p ) ;
/**
Read a high resolution ::PCPS_TIME_STAMP via memory mapped access,
@@ -2151,7 +2153,7 @@ extern "C" {
@see mbg_get_fast_hr_timestamp_comp()
@see mbg_get_fast_hr_timestamp_cycles()
*/
- _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp( MBG_DEV_HANDLE dh, PCPS_TIME_STAMP *p ) ;
+ _MBG_API_ATTR int _MBG_API mbg_get_fast_hr_timestamp( MBG_DEV_HANDLE dh, PCPS_TIME_STAMP *p ) ;
/**
Check if a specific device is a GPS receiver.
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgerror.h b/src/external/bsd/meinberg/dist/mbglib/common/mbgerror.h
index f51c61d..869b7b2 100755
--- a/src/external/bsd/meinberg/dist/mbglib/common/mbgerror.h
+++ b/src/external/bsd/meinberg/dist/mbglib/common/mbgerror.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbgerror.h 1.4 2008/12/05 13:28:50 martin REL_M $
+ * $Id: mbgerror.h 1.5 2011/03/31 10:56:17 martin TRASH $
* $Name: $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
@@ -12,6 +12,8 @@
*
* -----------------------------------------------------------------------
* $Log: mbgerror.h $
+ * Revision 1.5 2011/03/31 10:56:17 martin
+ * Added MBG_ERR_COPY_TO_USER and MBG_ERR_COPY_FROM_USER.
* Revision 1.4 2008/12/05 13:28:50 martin
* Added new code MBG_ERR_IRQ_UNSAFE.
* Revision 1.3 2008/02/26 14:50:14Z daniel
@@ -101,11 +103,15 @@
#define MBG_ERR_IRQ_UNSAFE -38 /**< The enabled IRQs are unsafe with this firmware/ASIC version */
-// Codes used with DOS TSRs only:
+// Legacy codes used with DOS TSRs only:
#define MBG_ERR_INV_INTNO -40 /**< Invalid interrupt number */
#define MBG_ERR_NO_DRIVER -41 /**< A driver could not be found */
#define MBG_ERR_DRV_VERSION -42 /**< The driver is too old */
+
+#define MBG_ERR_COPY_TO_USER -43 /**< kernel driver failed to copy data from kernel to user space */
+#define MBG_ERR_COPY_FROM_USER -44 /**< kernel driver failed to copy data from use to kernel space */
+
/** @} */ // endgroup
// Depending on the operating system, the codes above have to be converted before
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h b/src/external/bsd/meinberg/dist/mbglib/common/mbgioctl.h
index e4f94f0..bf9776b 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.2 2011/03/22 11:19:46 martin TRASH $
+ * $Id: mbgioctl.h 1.24.1.2 2011/03/22 11:19:46 martin TRASH martin $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
diff --git a/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h b/src/external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.h
index 61e4091..36de1da 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.21 2011/03/28 09:53:52 martin TRASH martin $
+ * $Id: pcpsdrvr.h 1.41.1.22 2011/03/31 10:35:57 martin TRASH $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,7 +10,9 @@
*
* -----------------------------------------------------------------------
* $Log: pcpsdrvr.h $
- * Revision 1.41.1.21 2011/03/28 09:53:52 martin
+ * 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
* Modifications for NetBSD from Frank Kardel.
* Revision 1.41.1.20 2011/03/25 11:11:44 martin
* Optionally support timespec for sys time (USE_TIMESPEC).
@@ -534,7 +536,7 @@
#elif defined( MBG_TGT_WIN32 )
#define _pcps_kmalloc( _sz ) ExAllocatePool( PagedPool, _sz )
- #define _pcps_kfree( _p, , _sz ) ExFreePool( _p )
+ #define _pcps_kfree( _p, _sz ) ExFreePool( _p )
#define MBG_SPINLOCK KSPIN_LOCK
#define _pcps_spin_lock_init( _spl ) KeInitializeSpinLock( _spl )
diff --git a/src/external/bsd/meinberg/mbgclock/Makefile b/src/external/bsd/meinberg/mbgclock/Makefile
index 85ad982..85ad982 100644..100755
--- a/src/external/bsd/meinberg/mbgclock/Makefile
+++ b/src/external/bsd/meinberg/mbgclock/Makefile
diff --git a/src/external/bsd/meinberg/mbgclock/Makefile.kmod b/src/external/bsd/meinberg/mbgclock/Makefile.kmod
index ab1d577..7d64394 100644..100755
--- a/src/external/bsd/meinberg/mbgclock/Makefile.kmod
+++ b/src/external/bsd/meinberg/mbgclock/Makefile.kmod
@@ -7,9 +7,9 @@
MKMAN=no
KMOD= mbgclock
-SRCS= mbgclockdrvr.c
-SRCS+= pcpsdrvr.c
-SRCS+= identdec.c
+SRCS= mbgclock_main.c
+SRCS+= pcpsdrvr.c
+SRCS+= identdec.c
SRCS+= rsrc_bsd.c
.if defined(MKMODULAR) && (${MKMODULAR}!="no")
diff --git a/src/external/bsd/meinberg/mbgclock/files.mbgclock b/src/external/bsd/meinberg/mbgclock/files.mbgclock
index 3a9f782..94310bc 100644..100755
--- a/src/external/bsd/meinberg/mbgclock/files.mbgclock
+++ b/src/external/bsd/meinberg/mbgclock/files.mbgclock
@@ -5,7 +5,7 @@ attach mbgclock at pci
file external/bsd/meinberg/dist/mbglib/bsd/rsrc_bsd.c mbgclock
file external/bsd/meinberg/dist/mbglib/common/identdec.c mbgclock
file external/bsd/meinberg/dist/mbglib/common/pcpsdrvr.c mbgclock
-file external/bsd/meinberg/mbgclock/mbgclockdrvr.c mbgclock
+file external/bsd/meinberg/mbgclock/mbgclock_main.c mbgclock
makeoptions mbgclock CPPFLAGS+="-I$S/external/bsd/meinberg/dist/mbglib/common"
makeoptions mbgclock CPPFLAGS+="-I$S/external/bsd/meinberg/dist/mbglib/bsd"
diff --git a/src/external/bsd/meinberg/mbgclock/mbgclock_main.c b/src/external/bsd/meinberg/mbgclock/mbgclock_main.c
index fd32411..166bbf0 100644..100755
--- a/src/external/bsd/meinberg/mbgclock/mbgclock_main.c
+++ b/src/external/bsd/meinberg/mbgclock/mbgclock_main.c
@@ -1,5 +1,5 @@
/*
- * $Header$
+ * $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 $
*
* NetBSD Meinberg mbgclock driver, Frank Kardel
*
@@ -273,7 +273,7 @@ mbgclock_lkmentry(struct lkm_table *lkmtp, int cmd, int ver)
/* PCI Support Functions */
static void
-mbg_deallocate_resource( device_t device, BSD_RSRC_INFO *p_ri)
+mbg_deallocate_resource( BSD_RSRC_INFO *p_ri )
{
if ( p_ri->valid )
{
@@ -286,50 +286,56 @@ mbg_deallocate_resource( device_t device, BSD_RSRC_INFO *p_ri)
* deallocate resources
*/
static void
-mbg_dealloc_rsrcs( device_t device )
+mbg_dealloc_rsrcs( struct mbgclock_softc *psc )
{
- struct mbgclock_softc *psc = device_private( device );
- PCPS_DDEV *pddev = psc->pddev;
- PCPS_RSRC_INFO *prsrci = &pddev->rsrc_info;
- int i;
+ PCPS_DDEV *pddev = psc->pddev;
/* mbg_deallocate_resource( device, &prsrci->irq.bsd, SYS_RES_IRQ ); */
- for ( i = 0; i < N_PCPS_MEM_RSRC; i++ )
- mbg_deallocate_resource( device, &prsrci->mem[i].bsd);
+ if ( pddev != NULL )
+ {
+ PCPS_RSRC_INFO *prsrci = &pddev->rsrc_info;
+ int i;
- for ( i = 0; i < N_PCPS_PORT_RSRC; i++ )
- mbg_deallocate_resource( device, &prsrci->port[i].bsd);
+ for ( i = 0; i < N_PCPS_MEM_RSRC; i++ )
+ mbg_deallocate_resource( &prsrci->mem[i].bsd );
+ for ( i = 0; i < N_PCPS_PORT_RSRC; i++ )
+ mbg_deallocate_resource( &prsrci->port[i].bsd );
+ }
}
static void
-mbg_alloc_rsrc( device_t device, int reg, BSD_RSRC_INFO *p_ri, int type )
+mbg_alloc_rsrc( struct mbgclock_softc *psc , int reg, BSD_RSRC_INFO *p_ri, int type )
{
- struct mbgclock_softc *psc = device_private(device);
-
p_ri->reg = reg;
p_ri->type = type;
- if (!pci_mapreg_map(&psc->pa, reg, type, 0, //##++ BUS_SPACE_MAP_LINEAR ?
- &p_ri->bst, &p_ri->bsh, &p_ri->base, &p_ri->size))
+ if (!pci_mapreg_map(&psc->pa, reg, type, 0,
+ &p_ri->bst, &p_ri->bsh,
+ &p_ri->base, &p_ri->size))
{
p_ri->valid = 1;
} else {
p_ri->valid = 0;
}
- /* bus_space_vaddr() */
}
static void
-mbg_alloc_rsrcs( device_t device )
+mbg_alloc_rsrcs( struct mbgclock_softc *psc )
{
- struct mbgclock_softc *psc = device_private( device );
PCPS_DDEV *pddev = psc->pddev;
PCPS_RSRC_INFO *prsrci = &pddev->rsrc_info;
BSD_RSRC_INFO ri;
int bar;
+ /* clear valid flags */
+ for ( bar = 0; bar < prsrci->num_rsrc_io; bar ++)
+ prsrci->port[bar].bsd.valid = 0;
+
+ for ( bar = 0; bar < prsrci->num_rsrc_mem; bar ++)
+ prsrci->mem[bar].bsd.valid = 0;
+
for ( bar = 0; bar < 6; bar ++ )
{
int type;
@@ -345,19 +351,12 @@ mbg_alloc_rsrcs( device_t device )
case PCI_MAPREG_TYPE_IO:
if ( prsrci->num_rsrc_io < N_PCPS_PORT_RSRC )
{
- mbg_alloc_rsrc( device, reg, &ri, type );
+ mbg_alloc_rsrc( psc, reg, &ri, type );
if ( ri.valid )
{
prsrci->port[prsrci->num_rsrc_io].bsd = ri;
-#if 1 //##++
pcps_add_rsrc_io( pddev, ri.base, ri.size );
-#else
- pcps_add_rsrc_io( pddev,
- (MBG_MEM_ADDR)bus_space_vaddr(ri.bst,
- ri.bsh),
- (ulong)ri.size );
-#endif
continue;
}
else
@@ -382,7 +381,7 @@ mbg_alloc_rsrcs( device_t device )
/* case PCI_MAPREG_TYPE_ROM: currently same as above */
if ( prsrci->num_rsrc_mem < N_PCPS_MEM_RSRC )
{
- mbg_alloc_rsrc( device, reg, &ri, type );
+ mbg_alloc_rsrc( psc, reg, &ri, type );
if ( ri.valid )
{
@@ -489,7 +488,7 @@ mbgclock_attach(struct device *parent, struct device *self, void *aux)
goto fail;
}
- mbg_alloc_rsrcs( self );
+ mbg_alloc_rsrcs( psc );
rc = pcps_start_device( psc->pddev, 0, 0 );
@@ -509,9 +508,9 @@ mbgclock_attach(struct device *parent, struct device *self, void *aux)
return;
fail:
- mbg_dealloc_rsrcs( self );
+ mbg_dealloc_rsrcs( psc );
- if ( psc->pddev )
+ if ( psc->pddev != NULL )
pcps_free_ddev( psc->pddev );
_mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: failed to attach device 0x%04X",
@@ -522,26 +521,37 @@ fail:
static int
mbgclock_detach(struct device *self, int flags)
{
- /* int error; */
- /* struct vnd_softc *sc = device_private(self); */
+ struct mbgclock_softc *psc = device_private(self);
+ uint16_t dev_id;
+
DPRINTF(DB_FOLLOW, ("mbgclock_detach(0x%p, 0x%x)\n", self, flags));
- pmf_device_deregister(self);
+ if (psc == NULL)
+ return ENXIO;
- return 0;
-}
+ dev_id = PCI_PRODUCT(psc->pa.pa_id);
+
+ _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: detach for device 0x%04X",
+ pcps_driver_name, dev_id );
+
+ /* 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;
+
+ _mbgddmsg_2( MBG_DBG_INIT_DEV, "%s: device 0x%04X detached",
+ pcps_driver_name, dev_id );
+
+ pmf_device_deregister(self);
-#if 0
-static int
-mbgclock_activate(struct device *self, enum devact act)
-{
- /* struct mbgclock_softc *sc; */
- /* int error = 0; */
- DPRINTF(DB_FOLLOW, ("mbgclock_activate(0x%"PRIx64", %d)\n", dev, (int)act));
-
return 0;
}
-#endif
/*------- driver -------*/
diff --git a/src/sys/dev/pci/files.pci.diff b/src/sys/dev/pci/files.pci.diff
new file mode 100644
index 0000000..3871edb
--- /dev/null
+++ b/src/sys/dev/pci/files.pci.diff
@@ -0,0 +1,16 @@
+Index: files.pci
+===================================================================
+RCS file: /cvsroot/src/sys/dev/pci/files.pci,v
+retrieving revision 1.339
+diff -u -r1.339 files.pci
+--- files.pci 23 Feb 2011 00:35:29 -0000 1.339
++++ files.pci 27 Mar 2011 16:13:06 -0000
+@@ -1042,3 +1042,8 @@
+ device vte: ether, ifnet, arp, mii, mii_phy
+ attach vte at pci
+ file dev/pci/if_vte.c vte
++
++#
++# Meinberg radio clocks
++#
++include "external/bsd/meinberg/mbgclock/files.mbgclock"
diff --git a/src/sys/dev/pci/pcidevs.diff b/src/sys/dev/pci/pcidevs.diff
new file mode 100644
index 0000000..d5ecaff
--- /dev/null
+++ b/src/sys/dev/pci/pcidevs.diff
@@ -0,0 +1,47 @@
+Index: pcidevs
+===================================================================
+RCS file: /cvsroot/src/sys/dev/pci/pcidevs,v
+retrieving revision 1.1066
+diff -u -r1.1066 pcidevs
+--- pcidevs 25 Feb 2011 01:36:18 -0000 1.1066
++++ pcidevs 27 Mar 2011 16:12:26 -0000
+@@ -546,6 +546,7 @@
+ vendor SIIG 0x131f Siig
+ vendor DOMEX 0x134a Domex
+ vendor QUATECH 0x135c Quatech
++vendor MEINBERG 0x1360 Meinberg Funkuhren
+ vendor LMC 0x1376 LAN Media
+ vendor NETGEAR 0x1385 Netgear
+ vendor MOXA 0x1393 Moxa Technologies
+@@ -3047,6 +3048,31 @@
+ /* KTI products - XXX better descriptions */
+ product KTI NE2KETHER 0x3000 Ethernet
+
++/* Meinberg Funkuhren Products */
++product MEINBERG PCI32 0x0101 DCF77 PCI32
++product MEINBERG PCI509 0x0102 DCF77 PCI509
++product MEINBERG PCI510 0x0103 DCF77 PCI510
++product MEINBERG PCI511 0x0104 DCF77 PCI511
++product MEINBERG PEX511 0x0105 DCF77 PEX511
++
++product MEINBERG GPS167PCI 0x0201 GPS GPS167PCI
++product MEINBERG GPS168PCI 0x0202 GPS GPS168PCI
++product MEINBERG GPS169PCI 0x0203 GPS GPS169PCI
++product MEINBERG GPS170PCI 0x0204 GPS GPS170PCI
++product MEINBERG GPS170PEX 0x0205 GPS GPS170PEX
++product MEINBERG GPS180PEX 0x0206 GPS GPS180PEX
++
++product MEINBERG TCR510PCI 0x0301 IRIG TCR510PCI
++product MEINBERG TCR167PCI 0x0302 IRIG TCR167PCI
++product MEINBERG TCR511PCI 0x0303 IRIG TCR511PCI
++product MEINBERG TCR511PEX 0x0304 IRIG TCR511PEX
++product MEINBERG TCR170PEX 0x0305 IRIG TCR170PEX
++product MEINBERG TCR180PEX 0x0306 IRIG TCR180PEX
++
++product MEINBERG PTP280PEX 0x0501 PTP PTP280PEX
++
++product MEINBERG FRC511PEX 0x0601 FRC FRC511PEX
++
+ /* LAN Media */
+ product LMC HSSI 0x0003 HSSI Interface
+ product LMC DS3 0x0004 DS3 Interface
diff --git a/src/sys/external/bsd/meinberg b/src/sys/external/bsd/meinberg
new file mode 120000
index 0000000..39b5e46
--- /dev/null
+++ b/src/sys/external/bsd/meinberg
@@ -0,0 +1 @@
+../../../external/bsd/meinberg \ No newline at end of file