mirror of
https://github.com/kenshineto/kern.git
synced 2025-04-21 20:57:25 +00:00
132 lines
3.5 KiB
C
132 lines
3.5 KiB
C
/**
|
|
** @file compat.h
|
|
**
|
|
** @author Warren R. Carithers
|
|
**
|
|
** @brief Compatibility definitions for standard modules.
|
|
**
|
|
** These definitions are here to simplify the integration
|
|
** of some pre-written modules into the 452 baseline system.
|
|
** This is used primarily for the 'kmem' and 'sio' modules.
|
|
**
|
|
** We use CPP symbols and not actual data types for things here,
|
|
** as this means we don't need to include any other header files
|
|
** into this file. This helps get around "include loops" (e.g.,
|
|
** a.h includes b.h, which includes c.h, which includes a.h) when
|
|
** there are many interdependencies between source files.
|
|
*/
|
|
|
|
#ifndef COMPAT_H_
|
|
#define COMPAT_H_
|
|
|
|
#include <common.h>
|
|
#include <procs.h>
|
|
|
|
/*
|
|
** Section 1: sized integer types
|
|
**
|
|
** Internally, we use standard names for "sized" integer types for
|
|
** simplicity. If those disagree with the names used in the rest of
|
|
** the system, we take the opportunity to define our names here.
|
|
**
|
|
** To enable these, uncomment them, and place the apropriate
|
|
** existing type names in place of the '?' characters.
|
|
*/
|
|
|
|
// standard "sized integer" types
|
|
// #define int8_t ?
|
|
// #define uint8_t ?
|
|
// #define int16_t ?
|
|
// #define uint16_t ?
|
|
// #define int32_t ?
|
|
// #define uint32_t ?
|
|
// #define int64_t ?
|
|
// #define uint64_t ?
|
|
// #define bool_t ?
|
|
|
|
/*
|
|
** Section 2: other types
|
|
**
|
|
** Add type definitions here as needed.
|
|
**
|
|
** Note: we do not include the PCB and Queue declarations
|
|
** here because we don't actually need them in this header
|
|
** file - we're only defining CPP macros. Whatever file
|
|
** uses these macros, however, must include the appropriate
|
|
** headers if it uses these macros.
|
|
**
|
|
** To enable these, uncomment them, and place the apropriate
|
|
** existing type names in place of the '?' characters.
|
|
*/
|
|
|
|
// type name for the PCB
|
|
#define PCBTYPE pcb_t
|
|
|
|
// type name for our queue
|
|
#define QTYPE pcb_queue_t
|
|
|
|
/*
|
|
** Section 3: interface and behavior
|
|
**
|
|
** Include #define statements here as needed to define
|
|
** the names of functions and globals used in these modules
|
|
** in terms of the names used in the rest of the baseline.
|
|
**
|
|
** To enable these, uncomment them, and place the apropriate
|
|
** existing variable or function names in place of the '?' characters.
|
|
*/
|
|
|
|
// string functions
|
|
#define SLENGTH strlen
|
|
|
|
// scheduler
|
|
#define SCHED schedule
|
|
|
|
// dispatcher
|
|
#define DISPATCH dispatch
|
|
|
|
/*
|
|
** blocked queue for reading processes
|
|
**
|
|
** Define this if we are blocking processes which try to
|
|
** read from the SIO when no characters are available.
|
|
** Its value should be the name of the globally-visible
|
|
** queue to be used.
|
|
*/
|
|
#define QNAME sioread
|
|
|
|
#ifdef QNAME
|
|
|
|
// Only define these macros if we need to be able to create and
|
|
// manage a queue of things. It is expected that these will need
|
|
// to be customized based on the names and calling sequences of
|
|
// the appropriate functions.
|
|
|
|
// invoke the queue creation function
|
|
// examples:
|
|
//
|
|
// #define QCREATE(q) do {
|
|
// _que_create( &(q), NULL );
|
|
// } while(0)
|
|
//
|
|
// #define QCREATE(q) // do nothing
|
|
|
|
#define QCREATE(q) // handled elsewhere for us
|
|
|
|
// check to see if the queue is empty
|
|
// examples:
|
|
//
|
|
// #define QEMPTY(q) queue_is_empty(q)
|
|
// #define QEMPTY(q) (quene_length(q) > 0)
|
|
#define QEMPTY(q) pcb_queue_empty(q)
|
|
|
|
// this macro expands into code that removes a value from
|
|
// 'q' and places it into 'd'
|
|
#define QDEQUE(q, d) \
|
|
do { \
|
|
assert(pcb_queue_remove((q), (pcb_t **)&(d)) == SUCCESS); \
|
|
} while (0)
|
|
|
|
#endif /* QNAME */
|
|
|
|
#endif
|