diff packages/hal/common/current/include/drv_api.h @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents
children c38311975d4f
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/hal/common/current/include/drv_api.h
@@ -0,0 +1,194 @@
+#ifndef CYGONCE_HAL_DRV_API_H
+#define CYGONCE_HAL_DRV_API_H
+
+/*==========================================================================
+//
+//      drv_api.h
+//
+//      Native API for Kernel
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Cygnus eCos Public License
+// Version 1.0 (the "License"); you may not use this file except in
+// compliance with the License.  You may obtain a copy of the License at
+// http://sourceware.cygnus.com/ecos
+// 
+// Software distributed under the License is distributed on an "AS IS"
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the
+// License for the specific language governing rights and limitations under
+// the License.
+// 
+// The Original Code is eCos - Embedded Cygnus Operating System, released
+// September 30, 1998.
+// 
+// The Initial Developer of the Original Code is Cygnus.  Portions created
+// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):   nickg
+// Date:        1999-02-24
+// Purpose:     Driver API
+// Description: This file defines the API used by device drivers to access
+//              system services. When the kernel is present it maps directly
+//              to the Kernel C API. When the kernel is absent, it is provided
+//              by a set of HAL functions.
+//              
+// Usage:       #include <cyg/kernel/kapi.h>
+//
+//####DESCRIPTIONEND####
+//
+//========================================================================*/
+
+#include <pkgconf/hal.h>
+#include <cyg/infra/cyg_type.h>
+
+#ifdef CYGPKG_KERNEL
+
+/*------------------------------------------------------------------------*/
+/* Kernel co-resident version of API                                      */
+
+#include <pkgconf/kernel.h>
+
+#ifndef CYGFUN_KERNEL_API_C
+#error Driver API requres Kernel API to be present
+#endif
+
+#include <cyg/kernel/kapi.h>
+
+#define cyg_drv_isr_lock               cyg_interrupt_disable
+#define cyg_drv_isr_unlock             cyg_interrupt_enable
+
+#define cyg_drv_dsr_lock               cyg_scheduler_lock
+#define cyg_drv_dsr_unlock             cyg_scheduler_unlock
+
+#define cyg_drv_mutex_t                cyg_mutex_t
+#define cyg_drv_mutex_init             cyg_mutex_init
+#define cyg_drv_mutex_destroy          cyg_mutex_destroy
+#define cyg_drv_mutex_lock             cyg_mutex_lock
+#define cyg_drv_mutex_trylock          cyg_mutex_trylock
+#define cyg_drv_mutex_unlock           cyg_mutex_unlock
+#define cyg_drv_mutex_release          cyg_mutex_release
+
+#define cyg_drv_cond_t                 cyg_cond_t
+#define cyg_drv_cond_init              cyg_cond_init
+#define cyg_drv_cond_destroy           cyg_cond_destroy
+#define cyg_drv_cond_wait              cyg_cond_wait
+#define cyg_drv_cond_signal            cyg_cond_signal
+#define cyg_drv_cond_broadcast         cyg_cond_broadcast
+
+#define cyg_drv_interrupt_create       cyg_interrupt_create
+#define cyg_drv_interrupt_delete       cyg_interrupt_delete
+#define cyg_drv_interrupt_attach       cyg_interrupt_attach
+#define cyg_drv_interrupt_detach       cyg_interrupt_detach
+#define cyg_drv_interrupt_mask         cyg_interrupt_mask
+#define cyg_drv_interrupt_unmask       cyg_interrupt_unmask
+#define cyg_drv_interrupt_acknowledge  cyg_interrupt_acknowledge
+#define cyg_drv_interrupt_configure    cyg_interrupt_configure
+#define cyg_drv_interrupt_level        cyg_interrupt_level
+
+#else /* CYGPKG_KERNEL */
+
+/*------------------------------------------------------------------------*/
+/* Non-kernel version of API                                              */
+
+typedef CYG_ADDRWORD cyg_addrword_t;        /* May hold pointer or word   */
+typedef cyg_addrword_t cyg_handle_t;        /* Object handle              */
+typedef cyg_uint32   cyg_priority_t;        /* type for priorities        */
+typedef cyg_uint32   cyg_vector_t;          /* Interrupt vector id        */
+typedef int cyg_bool_t;
+
+typedef cyg_uint32 cyg_ISR_t( cyg_vector_t vector, cyg_addrword_t data);
+typedef void cyg_DSR_t(cyg_vector_t vector,
+                       cyg_ucount32 count,
+                       cyg_addrword_t data);
+
+
+externC void cyg_drv_isr_lock(void);
+externC void cyg_drv_isr_unlock(void);
+
+externC void cyg_drv_dsr_lock(void);
+externC void cyg_drv_dsr_unlock(void);
+
+typedef struct
+{
+    cyg_atomic          lock;
+} cyg_drv_mutex_t;
+
+externC void cyg_drv_mutex_init( cyg_drv_mutex_t *mutex );
+externC void cyg_drv_mutex_destroy( cyg_drv_mutex_t *mutex );
+externC cyg_bool_t cyg_drv_mutex_lock( cyg_drv_mutex_t *mutex );
+externC cyg_bool_t cyg_drv_mutex_trylock( cyg_drv_mutex_t *mutex );
+externC void cyg_drv_mutex_unlock( cyg_drv_mutex_t *mutex );
+externC void cyg_drv_mutex_release( cyg_drv_mutex_t *mutex );
+
+typedef struct
+{
+    cyg_atomic          wait;
+    cyg_drv_mutex_t       *mutex;
+} cyg_drv_cond_t;
+
+externC void cyg_drv_cond_init( cyg_drv_cond_t  *cond, cyg_drv_mutex_t *mutex );
+externC void cyg_drv_cond_destroy( cyg_drv_cond_t  *cond );
+externC void cyg_drv_cond_wait( cyg_drv_cond_t *cond );
+externC void cyg_drv_cond_signal( cyg_drv_cond_t *cond );
+externC void cyg_drv_cond_broadcast( cyg_drv_cond_t *cond );
+
+typedef struct cyg_interrupt
+{
+    cyg_vector_t        vector;
+    cyg_priority_t      priority;
+    cyg_ISR_t           *isr;
+    cyg_DSR_t           *dsr;
+    CYG_ADDRWORD        data;
+
+    volatile struct cyg_interrupt *next_dsr;
+    cyg_int32           dsr_count;
+    
+#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
+    struct cyg_interrupt *next;
+#endif
+
+} cyg_interrupt;
+
+externC void cyg_drv_interrupt_create(
+                     cyg_vector_t        vector,
+                     cyg_priority_t      priority,
+                     cyg_addrword_t      data,
+                     cyg_ISR_t           *isr,
+                     cyg_DSR_t           *dsr,
+                     cyg_handle_t        *handle,
+                     cyg_interrupt       *intr
+                     );
+externC void cyg_drv_interrupt_delete( cyg_handle_t interrupt );
+externC void cyg_drv_interrupt_attach( cyg_handle_t interrupt );
+externC void cyg_drv_interrupt_detach( cyg_handle_t interrupt );
+
+externC void cyg_drv_interrupt_mask( cyg_vector_t vector );
+externC void cyg_drv_interrupt_unmask( cyg_vector_t vector );
+externC void cyg_drv_interrupt_acknowledge( cyg_vector_t vector );
+externC void cyg_drv_interrupt_configure(
+                     cyg_vector_t        vector,
+                     cyg_bool_t          level,
+                     cyg_bool_t          up
+                     );
+externC void cyg_drv_interrupt_level( cyg_vector_t vector, cyg_priority_t level );
+
+
+enum cyg_ISR_results
+{
+    CYG_ISR_HANDLED  = 1,               /* Interrupt was handled             */
+    CYG_ISR_CALL_DSR = 2                /* Schedule DSR                      */
+};
+
+#endif /* CYGPKG_KERNEL */
+
+/*------------------------------------------------------------------------*/
+/* EOF drv_api.h                                                          */
+#endif // CYGONCE_HAL_DRV_API_H