From b8272501b2c9b27da0f190342267d85d7bd0ea25 Mon Sep 17 00:00:00 2001 From: Martin Burnicki Date: Thu, 31 Mar 2011 12:01:00 +0200 Subject: Update files from mbgtools-nbsd-dev-2011-03-31.tar.gz --- src/external/bsd/meinberg/Makefile | 0 src/external/bsd/meinberg/Makefile.inc | 0 src/external/bsd/meinberg/dist/mbgclock/Makefile | 48 -- .../bsd/meinberg/dist/mbgclock/Makefile.nbsd | 48 -- src/external/bsd/meinberg/dist/mbgclock/mbgdrvr.c | 725 --------------------- .../bsd/meinberg/dist/mbglib/common/macioctl.h | 99 +-- .../bsd/meinberg/dist/mbglib/common/mbgdevio.c | 28 +- .../bsd/meinberg/dist/mbglib/common/mbgdevio.h | 18 +- .../bsd/meinberg/dist/mbglib/common/mbgerror.h | 10 +- .../bsd/meinberg/dist/mbglib/common/mbgioctl.h | 2 +- .../bsd/meinberg/dist/mbglib/common/pcpsdrvr.h | 8 +- src/external/bsd/meinberg/mbgclock/Makefile | 0 src/external/bsd/meinberg/mbgclock/Makefile.kmod | 6 +- src/external/bsd/meinberg/mbgclock/files.mbgclock | 2 +- src/external/bsd/meinberg/mbgclock/mbgclock_main.c | 100 +-- src/sys/dev/pci/files.pci.diff | 16 + src/sys/dev/pci/pcidevs.diff | 47 ++ src/sys/external/bsd/meinberg | 1 + 18 files changed, 217 insertions(+), 941 deletions(-) mode change 100644 => 100755 src/external/bsd/meinberg/Makefile mode change 100644 => 100755 src/external/bsd/meinberg/Makefile.inc delete mode 100755 src/external/bsd/meinberg/dist/mbgclock/Makefile delete mode 100755 src/external/bsd/meinberg/dist/mbgclock/Makefile.nbsd delete mode 100755 src/external/bsd/meinberg/dist/mbgclock/mbgdrvr.c mode change 100644 => 100755 src/external/bsd/meinberg/mbgclock/Makefile mode change 100644 => 100755 src/external/bsd/meinberg/mbgclock/Makefile.kmod mode change 100644 => 100755 src/external/bsd/meinberg/mbgclock/files.mbgclock mode change 100644 => 100755 src/external/bsd/meinberg/mbgclock/mbgclock_main.c create mode 100644 src/sys/dev/pci/files.pci.diff create mode 100644 src/sys/dev/pci/pcidevs.diff create mode 120000 src/sys/external/bsd/meinberg diff --git a/src/external/bsd/meinberg/Makefile b/src/external/bsd/meinberg/Makefile old mode 100644 new mode 100755 diff --git a/src/external/bsd/meinberg/Makefile.inc b/src/external/bsd/meinberg/Makefile.inc old mode 100644 new mode 100755 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 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 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 -#include - -#include /* defines used in kernel.h */ -#include -#include -#include -#include /* types used in module initialization */ -#include /* cdevsw struct */ -#include /* uio struct */ -#include -#include /* structs, prototypes for pci bus stuff */ - -#if defined( MBG_TGT_FREEBSD ) - #include -#endif - -#include /* For pci_get macros! */ -#include - - - -#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 - -#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". - */ - 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 @@ -252,36 +263,6 @@ typedef struct #define _io_unmap_mapped_mem_address( _pddev, _pin ) \ goto err_inval -#elif defined( MBG_TGT_NETBSD ) - - #include - - #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 old mode 100644 new mode 100755 diff --git a/src/external/bsd/meinberg/mbgclock/Makefile.kmod b/src/external/bsd/meinberg/mbgclock/Makefile.kmod old mode 100644 new mode 100755 index ab1d577..7d64394 --- 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 old mode 100644 new mode 100755 index 3a9f782..94310bc --- 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 old mode 100644 new mode 100755 index fd32411..166bbf0 --- 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 -- cgit v1.2.3