Coherent4.2.10/include/kernel/ddi_glob.h
/* (-lgl
* Coherent 386 release 4.2
* Copyright (c) 1982, 1993 by Mark Williams Company.
* All rights reserved. May not be copied without permission.
* For copying permission and licensing info, write licensing@mwc.com
-lgl) */
#ifndef __KERNEL_DDI_GLOB_H__
#define __KERNEL_DDI_GLOB_H__
/*
* This internal header file defines structures and an access procedure for
* DDI/DKI global data that must be shared between all CPUs. Note that this
* may not be all the truly global context; examine the STREAMS header files
* for additional global data specific to STREAMS.
*/
#include <common/ccompat.h>
#include <kernel/x86lock.h>
#include <kernel/_lock.h>
#include <kernel/_sv.h>
#include <kernel/_toid.h>
#include <kernel/ddi_data.h>
#include <kernel/st_alloc.h>
/*
* Timeout events are stored on a global queue, both while they are pending
* and once they have expired. When an event expires, it is bound to a CPU
* (if one was not specified when the event was created) and a function to
* process expired events on that CPU is deferred.
*/
typedef struct timeout timeout_t;
typedef struct tlist {
__lock_t * td_lock;
toid_t td_id;
timeout_t * td_first;
timeout_t * td_run;
} timelist_t;
/*
* Truly global data used by the DDI/DKI system (except for STREAMS global
* data).
*/
typedef struct ddi_global_data dgdata_t;
struct ddi_global_data {
/*
* The defer-table data is at the front of the structure because it is
* typically manipulated by hand-coded assembly-language routines.
*/
defer_t dg_defint; /* interrupt-level defers */
defer_t dg_defproc; /* process-level defers */
atomic_uchar_t dg_run_bufcalls; /* bufcall check deferred */
atomic_uchar_t dg_run_strsched; /* STREAMS service deferred */
atomic_uchar_t dg_run_time; /* timeout check deferred */
atomic_uchar_t dg_init_flag; /* initialization spin-lock */
unsigned long dg_reserved_2 [4];
__lock_t * dg_polllock; /* global lock on polling */
__lock_t * dg_proclock; /* process reference count */
timelist_t dg_timeouts; /* timeout data */
__lock_t * dg_kmem_lock; /* basic lock for heap */
_ST_HEAP_CONTROL_P dg_kmem_heap;
__sv_t * dg_kmem_sv; /*
* synchronization variable for
* waiting for free memory.
*/
__size_t dg_kmem_required; /* Level of memory required */
};
__EXTERN_C_BEGIN__
dgdata_t * ddi_global_data __PROTO ((void));
__EXTERN_C_END__
extern dgdata_t __ddi_global_data;
#define ddi_global_data() (& __ddi_global_data)
#endif /* ! defined (__KERNEL_DDI_GLOB_H__) */