/*
	extended memory manager routine header
		T.Tsuda. , DSA	April 1,1995
*/


#ifdef	_EMM_
#define	EXTERN
#else
#define	EXTERN	extern
#endif


#ifdef	_EMM_
#define	emscall()	int86(0x67,&reg,&reg)
#define	emscallx()	int86x(0x67,&reg,&reg,&sreg)
#endif

/*	emm status	*/
#define	EMMNORDY	0
#define	EMMREADY	1
#define	EMMGETPH	2
#define	EMMALLOC	4

/*	emm error number	*/
#define	EMMNOERR	0x00
#define	EMMDEVER	0xff
#define	EMMVERER	0xfe
#define	EMMMEMER	0xfd
#define	EMMALCER	0xfc
#define	EMMARGER	0xfb

#ifdef	_EMM_
struct	_emmphys {
	unsigned int	segment;
	unsigned int	ppage;
};
#define	EMMPHYS	struct _emmphys
#endif

struct	_emmpage {
	unsigned int	ppage;
	unsigned int	segment;
	unsigned int	lpage;		/* is allocate ppage */
};
#define	EMMPAGES	struct _emmpage

struct	_emm_ {
	int	status;
	unsigned int	errorno;
	unsigned int	ppages;
	unsigned int	epages;
	EMMPAGES	*ppflame;
	unsigned int	handle;
	unsigned int	lpages;
};
EXTERN struct	_emm_ emm
#ifdef	_EMM_
 = {
	EMMNORDY,
	EMMNOERR,
}
#endif
;


/* function of prottypes */

int	isemm(void);
/*
description:
	check emm ready
	set status EMMREADY
returns:
	0	Not ready (No useable emm)
	1	Ready (useable emm)
*/


unsigned int	emsver(void);
/*
description:
	get ems version
returns:
	0		Error occurs
	not 0	Version : 7-4.major 3-0.minor
*/


unsigned int	emsphys(void);
/*
description:
	get ems physical page segment and physical page number
	set status EMMGETPH;
returns:
	0	Error occurs
	1	No error
*/


unsigned int	emsalloc(unsigned int logipage);
/*
description:
	allocation ems logical pages
	set status EMMALLOC;
returns:
	0	Error occurs
	1	No error
*/


unsigned int	emsrealc(unsigned int logipage);
/*
description:
	reallocation ems logical pages
	set status EMMALLOC;
returns:
	0	Error occurs
	1	No error
*/


unsigned int	emsmap(unsigned int logipage,unsigned int physpage);
/*
description:
	mapping logical page to physical page
returns:
	0	Error occurs
	1	No error
*/


unsigned int	emsmapf(unsigned int logipage,unsigned int flame);
/*
description:
	mapping logical page to physical page flame (emm.ppflame entry number)
returns:
	0	Error occurs
	1	No error
*/


unsigned int	emsfree(void);
/*
description:
	free ems logical pages and physical page table's memory
	reset status EMMGETPH;
	reset status EMMALLOC;
returns:
	0	Error occurs
	1	No error
*/


#undef	EXTERN
