From 9de92eb5d03e618a22aa3ce2ff3a89fcef265292 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Tue, 8 Sep 1998 09:42:42 +0000 Subject: [PATCH] * rts.h: Update with missing code. From-SVN: r22327 --- libchill/ChangeLog | 4 ++ libchill/rts.h | 99 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) diff --git a/libchill/ChangeLog b/libchill/ChangeLog index e4db8db2fe7..b41b3a4e935 100644 --- a/libchill/ChangeLog +++ b/libchill/ChangeLog @@ -1,3 +1,7 @@ +Tue Sep 8 10:41:38 1998 Jeffrey A Law (law@cygnus.com) + + * rts.h: Update with missing code. + Sun Sep 6 01:30:40 1998 Jeffrey A Law (law@cygnus.com) * allgmem.c: Do not include config.h anymore. diff --git a/libchill/rts.h b/libchill/rts.h index 27019e7c04f..f4c21fa0b26 100644 --- a/libchill/rts.h +++ b/libchill/rts.h @@ -43,10 +43,109 @@ typedef struct unsigned char /*TaskingEnum*/ type; } TaskingStruct; +/* how an INSTANCE is implemented */ typedef struct { short ptype; short pcopy; } INSTANCE; +/* interface to underlaying os */ +typedef enum +{ + wait_wait, + wait_buffer_send, + wait_buffer_receive, + wait_buffer_free, + wait_event_delay, + wait_event_free, +} Delay_Reason; + +extern INSTANCE __whoami (); +extern void *__xmalloc_ (); + +#define THIS __whoami() +/* for easier changing to something different, + i.e. allocate_memory */ +#define MALLOC(ADDR,SIZE) ADDR = __xmalloc_(SIZE) +#define FREE(ADDR) free (ADDR) + +/* definitions for EVENTS */ +typedef struct EVENTQUEUE +{ + struct EVENTQUEUE *forward; /* next in the list */ + struct EVENTQUEUE **listhead; /* pointer to EVENT location */ + int priority; /* prio for DELAY or DELAY CASE */ + INSTANCE this; /* specify the instance is delayed */ + struct EVENTQUEUE *startlist; /* start of the list */ + struct EVENTQUEUE *chain; /* list of all events in an DELAY CASE */ + int is_continued; /* indicates a continue action on that event */ + INSTANCE who_continued; /* indicates who continued */ +} Event_Queue; + +typedef struct +{ + Event_Queue **ev; + unsigned long maxqueuelength; +} Event_Descr; + +/* definitions for BUFFERS */ +struct BUFFERQUEUE; + +typedef struct BUFFER_WAIT_QUEUE +{ + struct BUFFER_WAIT_QUEUE *forward; + struct BUFFERQUEUE **bufferaddr; + INSTANCE this; + struct BUFFER_WAIT_QUEUE *startlist; + struct BUFFER_WAIT_QUEUE *chain; + int is_sent; + INSTANCE who_sent; /* instance which have + send a buffer */ + unsigned long datalen; + void *dataptr; +} Buffer_Wait_Queue; + +typedef struct BUFFER_SEND_QUEUE +{ + struct BUFFER_SEND_QUEUE *forward; + int priority; + INSTANCE this; + int is_delayed; + unsigned long datalen; + void *dataptr; +} Buffer_Send_Queue; + +typedef struct BUFFERQUEUE +{ + Buffer_Wait_Queue *waitqueue; + unsigned long waitqueuelength; + Buffer_Send_Queue *sendqueue; + unsigned long sendqueuelength; +} Buffer_Queue; + +typedef struct +{ + Buffer_Queue **buf; + unsigned long maxqueuelength; +} Buffer_Descr; + +/* descriptor for data */ +typedef struct +{ + void *ptr; + int length; +} Data_Descr; + +/* time format runtime delivers */ +typedef struct +{ + unsigned long secs; + unsigned long nanosecs; +} RtsTime; + +extern void __rtstime (RtsTime *t); +extern int __delay_this (Delay_Reason reason, RtsTime *t, char *file, int lineno); +extern void __continue_that (INSTANCE ins, int prio, char *file, int lineno); + #endif /* __rts_h_ */