2006-02-21 16:26:12 +01:00
|
|
|
|
|
|
|
#ifndef _MINIX_ENDPOINT_H
|
|
|
|
#define _MINIX_ENDPOINT_H 1
|
|
|
|
|
|
|
|
#include <minix/sys_config.h>
|
|
|
|
#include <minix/com.h>
|
|
|
|
#include <limits.h>
|
2009-09-28 18:25:47 +02:00
|
|
|
#include <minix/type.h>
|
2006-02-21 16:26:12 +01:00
|
|
|
|
|
|
|
/* The point of the padding in 'generation size' is to
|
|
|
|
* allow for certain bogus endpoint numbers such as NONE, ANY, etc.
|
2006-03-03 10:43:06 +01:00
|
|
|
*
|
|
|
|
* The _MAX_MAGIC_PROC is defined by <minix/com.h>. That include
|
|
|
|
* file defines some magic process numbers such as ANY and NONE,
|
|
|
|
* and must never be a valid endpoint number. Therefore we make sure
|
|
|
|
* the generation size is big enough to start the next generation
|
|
|
|
* above the highest magic number.
|
2006-02-21 16:26:12 +01:00
|
|
|
*/
|
2009-09-29 22:13:41 +02:00
|
|
|
#define _ENDPOINT_GENERATION_SIZE (MAX_NR_TASKS+_MAX_MAGIC_PROC+1)
|
|
|
|
#define _ENDPOINT_MAX_GENERATION (INT_MAX/_ENDPOINT_GENERATION_SIZE-1)
|
2006-02-21 16:26:12 +01:00
|
|
|
|
|
|
|
/* Generation + Process slot number <-> endpoint. */
|
2009-09-29 22:13:41 +02:00
|
|
|
#define _ENDPOINT(g, p) ((endpoint_t)((g) * _ENDPOINT_GENERATION_SIZE + (p)))
|
|
|
|
#define _ENDPOINT_G(e) (((e)+MAX_NR_TASKS) / _ENDPOINT_GENERATION_SIZE)
|
|
|
|
#define _ENDPOINT_P(e) \
|
|
|
|
((((e)+MAX_NR_TASKS) % _ENDPOINT_GENERATION_SIZE) - MAX_NR_TASKS)
|
2006-02-21 16:26:12 +01:00
|
|
|
|
|
|
|
#endif
|