mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-08-08 05:29:10 -04:00
373 lines
14 KiB
C
373 lines
14 KiB
C
/*-
|
|
* Copyright (C) 2001-2003 by NBMK Encryption Technologies.
|
|
* All rights reserved.
|
|
*
|
|
* NBMK Encryption Technologies provides no support of any kind for
|
|
* this software. Questions or concerns about it may be addressed to
|
|
* the members of the relevant open-source community at
|
|
* <tech-crypto@netbsd.org>.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/*****************************************************************************
|
|
* @(#) n8_OS_intf.h 1.39@(#)
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
/** @file n8_OS_intf.h
|
|
* @brief OS-dependent definitions for NSP2000 Interface
|
|
*
|
|
* Common header file for root definitions for NSP2000 project
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
* Revision history:
|
|
* 02/19/04 jpw Added KERN_WARNING to defines for N8_PRINT
|
|
* 07/28/03 brr Only define N8_THREAD_INIT for user space when
|
|
* SUPPORT_USER_CALLBACK_PTHREAD is defined. The allows users to
|
|
* enable kernel callbacks with requiring applications to link
|
|
* with the pthread library.
|
|
* 04/29/03 brr Removed support for BSDi.
|
|
* 03/24/03 brr Added definition for n8_atomic_inc_and_test.
|
|
* 03/10/03 brr Added macros to support thread initialization.
|
|
* 12/02/02 brr Only define ioctl macros for user space.
|
|
* 10/25/02 brr Do not define N8_VirtToPhys for FreeBSD kernel.
|
|
* 10/11/02 brr Added support for FreeBSD.
|
|
* 07/19/02 brr Moved definitions of N8_VirtToPhys & N8_PhysToVirt here from
|
|
* n8_driver_api.h.
|
|
* 07/02/02 brr Added atomic operations.
|
|
* 06/12/02 hml Deleted BSD ATOMICLOCK ops as well as the user space
|
|
* N8_PhysToVirt macros.
|
|
* 06/11/02 hml VX N8_AtomicLock* removed as promised.
|
|
* 06/11/02 hml Removed user space versions of N8_AtomicLock* interfaces.
|
|
* Vx will go next!
|
|
* 06/10/02 hml Added user space versions of the N8_AtomicLock* interfaces
|
|
* for Linux and BSD. Also added n8_Lock_t for all OS's.
|
|
* 06/06/02 brr Moved n8_WaitQueue_t definition to helper.h.
|
|
* 05/17/02 brr Added n8_WaitQueue_t.
|
|
* 04/11/02 brr Define N8_YEILD for Linux kernel.
|
|
* 03/14/02 brr Removed IoctlCode, added N8_IOCTL
|
|
* 02/25/02 brr Added N8_PRINT.
|
|
* 02/22/02 spm Cleaned up debug macros so that we use the DBG macro only.
|
|
* Converted n8_udelay to n8_usleep.
|
|
* 01/21/02 msz Added N8_YIELD
|
|
* 01/08/02 brr Added n8_delay and other kernel specific interfaces for 2.1.
|
|
* 11/28/01 bac Removed #define for usleep for vxworks. Use n8_usleep
|
|
* instead.
|
|
* 10/24/01 dkm Moved N8_DEF_MAX_NUM_PARAMS define to n8_pub_common.h
|
|
* 10/15/01 brr Removed misc warnings and removed semaphore macros.
|
|
* 10/09/01 msz Added n8_mkdir as VxWorks doesn't have mode_t (permission
|
|
* flags.)
|
|
* 08/21/01 msz Deleted COPY_IN, COPY_OUT as they are no longer used,
|
|
* code uses QMCopy directly.
|
|
* 08/15/01 brr Added VxWorks semaphores.
|
|
* 08/13/01 msz Don't define semun if we got _LINUX_SEM_H
|
|
* 08/08/01 msz Moved semun from n8_semaphore.h
|
|
* 08/10/01 brr Replaced IoctlCode for VxWorks.
|
|
* 08/08/01 brr Moved all OS kernel specific macros to helper.h.
|
|
* 08/01/01 msz Use _IOWR not IOWR for BSDi
|
|
* 07/31/01 bac Update COPY_IN and COPY_OUT to use QMCopy, renamed MIN/MAX to
|
|
* N8_MIN/N8_MAX.
|
|
* 07/30/01 brr Added definition for munmap - VxWorks Mod.
|
|
* 07/26/01 mel Deleted redefinitions for MALLOC and FREE - we are not using them.
|
|
* 07/27/01 brr Added definision for printk & KERN_CRIT - VxWorks Mod.
|
|
* 07/20/01 mel Added definision for usleep - VxWorks Mod.
|
|
****************************************************************************/
|
|
|
|
/* DBG usage:
|
|
* DBG(("format string...", arg1, arg2, ...));
|
|
*/
|
|
|
|
#ifndef N8_OS_INTF_H
|
|
#define N8_OS_INTF_H
|
|
|
|
#ifdef VX_BUILD
|
|
#include "n8_pub_common.h"
|
|
#include <vxWorks.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <sysLib.h>
|
|
#include <taskLib.h>
|
|
#include <usrLib.h>
|
|
#include <netinet/in.h>
|
|
#endif
|
|
|
|
#define N8_MIN(x, y) ((x) < (y) ? (x) : (y))
|
|
#define N8_MAX(x, y) ((x) > (y) ? (x) : (y))
|
|
|
|
|
|
/*****************************************************************************
|
|
* Linux specific macros
|
|
****************************************************************************/
|
|
#ifdef __linux
|
|
|
|
#ifndef __KERNEL__
|
|
#include <sched.h> /* for sched_yield */
|
|
#include <malloc.h>
|
|
#include <string.h>
|
|
#include <stdio.h> /* for printf */
|
|
#include <netinet/in.h> /* for ntohs */
|
|
#include <pthread.h> /* for the pthread mutex operations */
|
|
|
|
#ifdef N8DEBUG
|
|
#define DBG(_args) { printf("DEBUG <%s:%d>: ", \
|
|
__FILE__,__LINE__); printf _args; }
|
|
#else
|
|
#define DBG(_args)
|
|
#endif
|
|
#define N8_open(x,y,z) open(x,y)
|
|
#define N8_mkdir(p,m) mkdir(p,m)
|
|
#define N8_PRINT printf
|
|
#define KERN_CRIT
|
|
#define N8_YIELD sched_yield()
|
|
|
|
typedef int n8_atomic_t;
|
|
#define n8_atomic_set(var, value) (var = value)
|
|
#define n8_atomic_read(var) (var)
|
|
#define n8_atomic_add(var, value) (var += value)
|
|
#define n8_atomic_sub(var, value) (var -= value)
|
|
|
|
typedef pthread_t N8_Thread_t;
|
|
|
|
#ifdef SUPPORT_USER_CALLBACK_PTHREAD
|
|
#define N8_THREAD_INIT(entry, parm, thread) \
|
|
pthread_create(&thread, NULL, (void *)entry, (void *)parm)
|
|
#else
|
|
#define N8_THREAD_INIT(entry, parm, thread) (thread = (N8_Thread_t)0)
|
|
#endif
|
|
#else
|
|
#include <net/ip.h>
|
|
#include <asm/atomic.h>
|
|
|
|
#ifdef N8DEBUG
|
|
#define DBG(_args) { printk("DEBUG: <%s:%i> ", \
|
|
__FILE__, __LINE__); printk _args; }
|
|
#else
|
|
#define DBG(_args)
|
|
#endif
|
|
#define N8_PRINT printk
|
|
#define N8_YIELD
|
|
|
|
typedef atomic_t n8_atomic_t;
|
|
#define n8_atomic_set(var, value) atomic_set(&var, value)
|
|
#define n8_atomic_read(var) atomic_read(&var)
|
|
#define n8_atomic_add(var, value) atomic_add(value, &var)
|
|
#define n8_atomic_sub(var, value) atomic_sub(value, &var)
|
|
|
|
typedef int N8_Thread_t;
|
|
#define N8_THREAD_INIT(entry, parm,thread) \
|
|
thread = kernel_thread((int (*)(void *))entry, (void *)parm, \
|
|
CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
|
|
#endif
|
|
|
|
extern void *N8_PhysToVirt(unsigned long phys);
|
|
extern unsigned long N8_VirtToPhys(void * virt);
|
|
|
|
|
|
typedef char n8_Lock_t[24];
|
|
|
|
#define N8_IOCTL ioctl
|
|
#define WHERE " "
|
|
|
|
/* semun defined for linux and n8_semaphore.h. It is already defined */
|
|
/* in BSDi, so this is a operating system difference. */
|
|
/* Furthermore semun does seem to be defined for the kernel, in */
|
|
/* /usr/src/linux/include/linux/sem.h, so it depends on what sem.h */
|
|
/* is included. */
|
|
/***********************************************************************
|
|
* NOTE: Following bit of nastiness taken from the linux semctl man page
|
|
***********************************************************************/
|
|
#if ( defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED) ) \
|
|
|| defined(_LINUX_SEM_H) || defined(__KERNEL__)
|
|
/* union semun is defined by including <sys/sem.h> */
|
|
#else
|
|
/* according to X/OPEN we have to define it ourselves */
|
|
union semun {
|
|
int val; /* value for SETVAL */
|
|
struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */
|
|
unsigned short int *array; /* array for GETALL, SETALL */
|
|
struct seminfo *__buf; /* buffer for IPC_INFO */
|
|
};
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* VxWorks specific macros
|
|
****************************************************************************/
|
|
#elif VX_BUILD
|
|
int vxProcParms(char *argv[N8_DEF_MAX_NUM_PARAMS], char *testStr);
|
|
|
|
#define sleep(x) taskDelay(x * sysClkRateGet())
|
|
|
|
#define N8_YIELD taskDelay(1)
|
|
|
|
#define WHERE " "
|
|
#define N8_mkdir(p,m) mkdir(p)
|
|
|
|
#ifdef N8DEBUG
|
|
#define DBG(_args) { printf("DEBUG <%s:%d>: ", \
|
|
__FILE__,__LINE__); printf _args; }
|
|
#else
|
|
#define DBG(_args)
|
|
#endif
|
|
|
|
#define N8_PRINT printf
|
|
#define KERN_CRIT
|
|
#define KERN_WARNING
|
|
|
|
typedef int n8_atomic_t;
|
|
#define n8_atomic_set(var, value) (var = value)
|
|
#define n8_atomic_read(var) (var)
|
|
#define n8_atomic_add(var, value) (var += value)
|
|
#define n8_atomic_sub(var, value) (var -= value)
|
|
|
|
typedef SEM_ID n8_Lock_t;
|
|
|
|
#define N8_VirtToPhys(addr) (unsigned long)addr
|
|
#define N8_PhysToVirt(addr) (void *)addr
|
|
|
|
typedef int N8_Thread_t;
|
|
#define N8_THREAD_INIT(entry, parm, thread) \
|
|
thread = sp((FUNCPTR)entry, parm, 0,0,0,0,0,0,0,0)
|
|
/*****************************************************************************
|
|
* FreeBSD specific macros
|
|
****************************************************************************/
|
|
#elif __FreeBSD__
|
|
|
|
#include <sys/ioccom.h> /* ioctl defines: _IOWR, IOC */
|
|
#include <sys/param.h>
|
|
#ifndef KERNEL
|
|
#include <stdio.h> /* for printf */
|
|
#include <pthread.h>
|
|
#include <string.h>
|
|
|
|
#endif
|
|
|
|
#ifdef N8DEBUG
|
|
#define DBG(_args) { printf("DEBUG <%s:%d>: ", \
|
|
__FILE__,__LINE__); printf _args; }
|
|
#else
|
|
#define DBG(_args)
|
|
#endif
|
|
#define N8_PRINT printf
|
|
#define KERN_CRIT
|
|
#define KERN_WARNING
|
|
|
|
#define NSP2000_GROUP_NUM 0x31 /* a non-useful number */
|
|
|
|
#define WHERE __WHERE__
|
|
#define N8_open(x,y,z) open(x,y)
|
|
#define N8_mkdir(p,m) mkdir(p,m)
|
|
#define WakeUp(A) wakeup(A);
|
|
|
|
#define N8_YIELD sched_yield()
|
|
|
|
typedef char n8_Lock_t[24];
|
|
typedef int n8_atomic_t;
|
|
#define n8_atomic_set(var, value) (var = value)
|
|
#define n8_atomic_read(var) (var)
|
|
#define n8_atomic_add(var, value) (var += value)
|
|
#define n8_atomic_sub(var, value) (var -= value)
|
|
|
|
#ifdef KERNEL
|
|
/* We didn't see memcpy in bsd. */
|
|
#define memcpy(dst,src,len) bcopy((src),(dst),(len))
|
|
#else
|
|
extern unsigned long N8_VirtToPhys(void * virt);
|
|
|
|
typedef pthread_t N8_Thread_t;
|
|
#define N8_THREAD_INIT(entry, parm, thread) \
|
|
pthread_create(&thread, NULL, (void *)entry, (void *)parm)
|
|
|
|
extern int n8_ioctl(int fd,int command, int parm);
|
|
#define N8_IOCTL(fd,command,parm) n8_ioctl((fd),(command),(int)(parm))
|
|
#endif
|
|
|
|
/*****************************************************************************
|
|
* NetBSD specific macros
|
|
****************************************************************************/
|
|
#elif __NetBSD__
|
|
|
|
#include <sys/ioccom.h> /* ioctl defines: _IOWR, IOC */
|
|
#include <sys/param.h>
|
|
#ifndef KERNEL
|
|
#include <stdio.h> /* for printf */
|
|
#include <pthread.h>
|
|
#include <string.h>
|
|
|
|
#endif
|
|
|
|
#ifdef N8DEBUG
|
|
#define DBG(_args) { printf("DEBUG <%s:%d>: ", \
|
|
__FILE__,__LINE__); printf _args; }
|
|
#else
|
|
#define DBG(_args)
|
|
#endif
|
|
#define N8_PRINT printf
|
|
#define KERN_CRIT
|
|
#define KERN_WARNING
|
|
|
|
#define NSP2000_GROUP_NUM 0x31 /* a non-useful number */
|
|
|
|
#define WHERE __WHERE__
|
|
#define N8_open(x,y,z) open(x,y)
|
|
#define N8_mkdir(p,m) mkdir(p,m)
|
|
#define WakeUp(A) wakeup(A);
|
|
|
|
#define N8_YIELD sched_yield()
|
|
|
|
typedef char n8_Lock_t[24];
|
|
typedef int n8_atomic_t;
|
|
#define n8_atomic_set(var, value) (var = value)
|
|
#define n8_atomic_read(var) (var)
|
|
#define n8_atomic_add(var, value) (var += value)
|
|
#define n8_atomic_sub(var, value) (var -= value)
|
|
|
|
#ifdef KERNEL
|
|
#if 0
|
|
/* We didn't see memcpy in bsd. */
|
|
#define memcpy(dst,src,len) bcopy((src),(dst),(len))
|
|
#endif
|
|
#else
|
|
extern unsigned long N8_VirtToPhys(void * virt);
|
|
|
|
typedef pthread_t N8_Thread_t;
|
|
#define N8_THREAD_INIT(entry, parm, thread) \
|
|
pthread_create(&thread, NULL, (void *)entry, (void *)parm)
|
|
|
|
extern int n8_ioctl(int fd,int command, int parm);
|
|
#define N8_IOCTL(fd,command,parm) n8_ioctl((fd),(command),(int)(parm))
|
|
#endif
|
|
|
|
#define n8_delay_ms(ms) DELAY((ms*1000))
|
|
|
|
#endif /* __NetBSD__ */
|
|
|
|
#endif /* N8_OS_INTF_H */
|
|
|