Coherent4.2.10/include/sys/seg.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	 __SYS_SEG_H__
#define	 __SYS_SEG_H__

#include <common/ccompat.h>
#include <common/feature.h>
#include <common/__paddr.h>
#include <common/__caddr.h>
#include <common/__off.h>
#include <common/__daddr.h>
#include <sys/ksynch.h>

#if	! _KERNEL
# error	You must be compiling the kernel to use this header
#endif

#ifndef	__CSEG_T
#define	__CSEG_T
typedef	long		cseg_t;
#endif

/*
 * Segment structure.
 */
typedef struct seg {
	struct seg    *	s_forw;		/* Forward pointer */
	struct seg    *	s_back;		/* Backward pointer */
	struct inode  *	s_ip;		/* Inode pointer for shared text */
	short		s_flags;	/* Flags */
	short		s_urefc;	/* Reference count of segment */
	short		s_lrefc;	/* Lock reference count */

	__off_t		s_size;		/* Size in bytes */
	cseg_t	      *	s_vmem;		/* page table address */

	__daddr_t	s_daddr;	/* Disk base address */
} SEG;


/*
 * Flags (s_flags).
 */

#define SFCORE	0x0001			/* Memory resident */
#define	SFDOWN	0x0002			/* Segment grows downward */
#define SFSHRX	0x0004			/* Shared segment */
#define SFTEXT	0x0008			/* Text segment */
#define SFHIGH	0x0010			/* Text segment */
#define	SFSYST	0x0020			/* System segment */


/*
 * Pseudo flags.  (passed to salloc).
 */

#define	SFNSWP	0x4000			/* Don't swap */
#define SFNCLR	0x8000			/* Don't clear segment */


/*
 * Functions.
 */

extern	SEG	*segdupl();		/* seg.c */
extern	SEG	*ssalloc();		/* seg.c */
extern	SEG	*smalloc();		/* seg.c */
extern	SEG	*shalloc();		/* seg.c */

SEG *		salloc	__PROTO ((int bytesWanted, int flags));
void		sfree	__PROTO ((SEG * sp));

/*
 * Open segment structure.
 */

typedef struct sr {
	int		sr_flag;	/* Flags for this reference */
	__caddr_t	sr_base;	/* Virtual address base */
	__off_t		sr_size;	/* Mapped in window size */
	struct seg    *	sr_segp;	/* Segment pointer */
} SR;


/*
 * Flags (sr_flag).
 */

#define SRFPMAP	0x01		/* Segment is mapped in process */
#define SRFDUMP	0x02		/* Dump segment */
#define	SRFDATA	0x04		/* Data segment */
#define	SRFRODT	0x08		/* Data, read-only (used by shm) */
#define	SRFBERM	0x10		/* Segment to be removed (used by shm) */


/*
 * Number of user segments.
 */

#define NUSEG	4
#define NSHMSEG	6


/*
 * Segment indices.
 */

#define SIUSERP	0			/* User area segment */
#define	SISTEXT	1			/* Shared text segment */
#define SIPDATA	2			/* Private data segment */
#define SISTACK	3			/* Stack segment */

#define	SIBSS	0			/* overlay of SIUSERP [coh/exec.c] */

/*
 * Declare and initialize an in-memory segment structure.
 */
#define	MAKESR(sr, seg) SEG seg; SR sr = { 0, 0, 0, &seg }

#endif	/* ! defined (__SYS_SEG_H__) */