xref: /csrg-svn/sys/hp/hpux/hpux.h (revision 64904)
141486Smckusick /*
241486Smckusick  * Copyright (c) 1988 University of Utah.
363733Sbostic  * Copyright (c) 1990, 1993
463733Sbostic  *	The Regents of the University of California.  All rights reserved.
541486Smckusick  *
641486Smckusick  * This code is derived from software contributed to Berkeley by
741486Smckusick  * the Systems Programming Group of the University of Utah Computer
841486Smckusick  * Science Department.
941486Smckusick  *
1041486Smckusick  * %sccs.include.redist.c%
1141486Smckusick  *
1264480Shibler  * from: Utah $Hdr: hpux.h 1.33 93/08/05$
1341486Smckusick  *
14*64904Shibler  *	@(#)hpux.h	8.3 (Berkeley) 11/16/93
1541486Smckusick  */
1641486Smckusick 
1756506Sbostic #include <hp/hpux/hpux_exec.h>
1841486Smckusick 
1941486Smckusick /* HP-UX style UTSNAME struct used by uname syscall */
2041486Smckusick 
2141486Smckusick struct hpuxutsname {
2241486Smckusick 	char	sysname[9];
2341486Smckusick 	char	nodename[9];
2441486Smckusick 	char	release[9];
2541486Smckusick 	char	version[9];
2641486Smckusick 	char	machine[9];
2741486Smckusick 	char	idnumber[15];
2841486Smckusick };
2941486Smckusick 
3041486Smckusick /* HP-UX style "old" IOCTLs */
3141486Smckusick 
3241486Smckusick struct hpuxsgttyb {
3341486Smckusick 	char	sg_ispeed;
3441486Smckusick 	char	sg_ospeed;
3541486Smckusick 	char	sg_erase;
3641486Smckusick 	char	sg_kill;
3741486Smckusick 	int	sg_flags;	/* only a short in BSD */
3841486Smckusick };
3941486Smckusick 
4041486Smckusick #define V7_HUPCL	00001
4141486Smckusick #define V7_XTABS	00002
4241486Smckusick #define V7_NOAL		04000
4341486Smckusick 
4441486Smckusick #define	HPUXTIOCGETP	_IOR('t', 8, struct hpuxsgttyb)
4541486Smckusick #define	HPUXTIOCSETP	_IOW('t', 9, struct hpuxsgttyb)
4641486Smckusick 
4741486Smckusick /* 6.5 job control related ioctls which need to be mapped */
4841486Smckusick 
4941486Smckusick #define	HPUXTIOCSLTC	_IOW('T', 23, struct ltchars)
5041486Smckusick #define	HPUXTIOCGLTC	_IOR('T', 24, struct ltchars)
5141486Smckusick #define	HPUXTIOCLBIS	_IOW('T', 25, int)
5241486Smckusick #define	HPUXTIOCLBIC	_IOW('T', 26, int)
5341486Smckusick #define	HPUXTIOCLSET	_IOW('T', 27, int)
5441486Smckusick #define	HPUXTIOCLGET	_IOR('T', 28, int)
5541486Smckusick #	define HPUXLTOSTOP	0000001
5641486Smckusick #define	HPUXTIOCSPGRP	_IOW('T', 29, int)
5741486Smckusick #define	HPUXTIOCGPGRP	_IOR('T', 30, int)
5841486Smckusick #define HPUXTIOCCONS	_IO('t', 104)
5964480Shibler #define HPUXTIOCSWINSZ	_IOW('t', 106, struct winsize)
6064480Shibler #define HPUXTIOCGWINSZ	_IOR('t', 107, struct winsize)
6141486Smckusick 
6249329Shibler /* non-blocking IO--doesn't interfere with O_NDELAY */
6349329Shibler #define HPUXFIOSNBIO	_IOW('f', 126, int)
6449329Shibler 
6541486Smckusick /* HP-UX stat structure */
6641486Smckusick 
6741486Smckusick #define bsdtohpuxdev(d)	((major(d) << 24) | minor(d))
6841486Smckusick 
6941486Smckusick struct	hpuxstat {
7041486Smckusick 	long	hst_dev;
7141486Smckusick 	u_long	hst_ino;
7241486Smckusick 	u_short	hst_mode;
7341486Smckusick 	short	hst_nlink;
7441486Smckusick 	u_short	hst_uid;
7541486Smckusick 	u_short	hst_gid;
7641486Smckusick 	long	hst_rdev;
7753481Smckusick 	long	hst_size;
7841486Smckusick 	time_t	hst_atime;
7941486Smckusick 	int	hst_spare1;
8041486Smckusick 	time_t	hst_mtime;
8141486Smckusick 	int	hst_spare2;
8241486Smckusick 	time_t	hst_ctime;
8341486Smckusick 	int	hst_spare3;
8441486Smckusick 	long	hst_blksize;
8541486Smckusick 	long	hst_blocks;
8641486Smckusick 	u_int	hst_remote;
8741486Smckusick 	long	hst_netdev;
8841486Smckusick 	u_long	hst_netino;
8941486Smckusick 	long	hst_spare4[9];
9041486Smckusick };
9141486Smckusick 
9241486Smckusick /*
9341486Smckusick  * Skeletal 6.X HP-UX user structure info for ptrace() mapping.
9441486Smckusick  * Yes, this is as bogus as it gets...
9541486Smckusick  */
9641486Smckusick 
9741486Smckusick /* 6.0/6.2 offsets */
9845753Smckusick #define ooHU_AROFF	0x004
9945753Smckusick #define ooHU_TSOFF	0x092
10045753Smckusick #define ooHU_EDOFF	0x91E
10145753Smckusick #define ooHU_FPOFF	0xA66
10245753Smckusick 
10345753Smckusick /* 6.5 offsets */
10441486Smckusick #define oHU_AROFF	0x004
10545753Smckusick #define oHU_TSOFF	0x0B2
10645753Smckusick #define oHU_EDOFF	0x93A
10745753Smckusick #define oHU_FPOFF	0xA86
10841486Smckusick 
10945753Smckusick /* 7.X offsets */
11041486Smckusick #define HU_AROFF	0x004
11145753Smckusick #define HU_TSOFF	0x0B4
11245753Smckusick #define HU_EDOFF	0x8C8
11345753Smckusick #define HU_FPOFF	0xA28
11441486Smckusick 
11541486Smckusick #define HU_PAD1	(HU_AROFF)
11641486Smckusick #define HU_PAD2	(HU_TSOFF-HU_AROFF-4)
11741486Smckusick #define HU_PAD3	(HU_EDOFF-HU_TSOFF-12)
11841486Smckusick #define HU_PAD4	(HU_FPOFF-HU_EDOFF-sizeof(struct hpux_exec))
11941486Smckusick 
12041486Smckusick struct hpuxuser {
12141486Smckusick 	u_char	whocares1[HU_PAD1];	/* +0x000 */
12241486Smckusick 	int	*hpuxu_ar0;		/* +0x004 */
12341486Smckusick 	u_char	whocares2[HU_PAD2];	/* +0x008 */
12441486Smckusick 	int	hpuxu_tsize;		/* +0x0B2 */
12541486Smckusick 	int	hpuxu_dsize;		/* +0x0B6 */
12641486Smckusick 	int	hpuxu_ssize;		/* +0x0BA */
12741486Smckusick 	u_char	whocares3[HU_PAD3];	/* +0x0BE */
12841486Smckusick 	struct	hpux_exec hpuxu_exdata;	/* +0x93A */
12941486Smckusick 	u_char	whocares4[HU_PAD4];	/* +0x95E */
13041486Smckusick 	struct	hpuxfp {		/* +0xA66 */
13141486Smckusick 		int hpfp_save[54];
13241486Smckusick 		int hpfp_ctrl[3];
13341486Smckusick 		int hpfp_reg[24];
13441486Smckusick 	} hpuxu_fp;
13541486Smckusick 	short	hpuxu_dragon;		/* +0xBCA */
13641486Smckusick };
13741486Smckusick 
13841486Smckusick /* HP-UX compat file flags */
13964480Shibler #define HPUXNDELAY	00000004
14041486Smckusick #define HPUXFCREAT	00000400
14141486Smckusick #define	HPUXFTRUNC	00001000
14241486Smckusick #define	HPUXFEXCL	00002000
14341486Smckusick #define HPUXFSYNCIO	00100000
14463725Shibler #define HPUXNONBLOCK	00200000
14541486Smckusick #define HPUXFREMOTE	01000000
14641486Smckusick 
14741486Smckusick /* HP-UX only sysV shmctl() commands */
14841486Smckusick #define SHM_LOCK	3	/* Lock segment in core */
14941486Smckusick #define SHM_UNLOCK	4	/* Unlock segment */
15041486Smckusick 
15164480Shibler /* SHM stuff reflecting POSIX types */
15264480Shibler struct hpuxipc_perm {
15364480Shibler 	long	uid;	/* owner's user id */
15464480Shibler 	long	gid;	/* owner's group id */
15564480Shibler 	long	cuid;	/* creator's user id */
15664480Shibler 	long	cgid;	/* creator's group id */
15764480Shibler 	u_short	mode;	/* access modes */
15864480Shibler 	u_short	seq;	/* slot usage sequence number */
15964480Shibler 	long	key;	/* key */
16064480Shibler };
16164480Shibler 
16264480Shibler struct hpuxshmid_ds {
16364480Shibler 	struct hpuxipc_perm shm_perm;	/* operation permission struct */
16464480Shibler 	int		shm_segsz;	/* segment size (bytes) */
16564480Shibler 	struct pte	*shm_ptbl;	/* ptr to associated page table */
16664480Shibler 	long		shm_lpid;	/* pid of last shmop */
16764480Shibler 	long		shm_cpid;	/* pid of creator */
16864480Shibler 	u_short		shm_nattch;	/* current # attached */
16964480Shibler 	u_short		shm_cnattch;	/* in memory # attached */
17064480Shibler 	time_t		shm_atime;	/* last shmat time */
17164480Shibler 	time_t		shm_dtime;	/* last shmdt time */
17264480Shibler 	time_t		shm_ctime;	/* last change time */
17364480Shibler 	/* actually longer */
17464480Shibler };
17564480Shibler 
17641486Smckusick /* HP-UX rtprio values */
17741486Smckusick #define RTPRIO_MIN	0
17841486Smckusick #define RTPRIO_MAX	127
17941486Smckusick #define RTPRIO_NOCHG	1000
18041486Smckusick #define RTPRIO_RTOFF	1001
18141486Smckusick 
18241486Smckusick /* HP-UX only sigvec sv_flags values */
18341486Smckusick #define HPUXSV_RESET	000000004
18441486Smckusick 
18541486Smckusick /*
18641486Smckusick  * HP-UX returns SIGILL instead of SIGFPE for the CHK and TRAPV exceptions.
18741486Smckusick  * It also returns different u_code values for certain illegal instruction
18841486Smckusick  * and floating point exceptions.  Here are the proper HP-UX u_code values
18941486Smckusick  * (numbers from hpux 6.2 manual pages).
19041486Smckusick  */
19141486Smckusick 
19241486Smckusick /* SIGILL codes */
19341486Smckusick #define	HPUX_ILL_ILLINST_TRAP	0	/* T_ILLINST+USER */
19441486Smckusick #define	HPUX_ILL_CHK_TRAP	6	/* T_CHKINST+USER */
19541486Smckusick #define	HPUX_ILL_TRAPV_TRAP	7	/* T_TRAPVINST+USER */
19641486Smckusick #define	HPUX_ILL_PRIV_TRAP	8	/* T_PRIVINST+USER */
19741486Smckusick 
19841486Smckusick /* SIGFPE codes */
19941486Smckusick #define	HPUX_FPE_INTDIV_TRAP	5	/* T_ZERODIV+USER */
20045753Smckusick 
20145753Smckusick /* HP-UX POSIX signal stuff implementation */
20245753Smckusick typedef struct __hpuxsigset_t { long sigset[8]; } hpuxsigset_t;
20345753Smckusick struct hpuxsigaction {
20445753Smckusick 	void		(*sa_handler)();
20545753Smckusick 	hpuxsigset_t	sa_mask;
20645753Smckusick 	int		sa_flags;
20745753Smckusick };
20845753Smckusick #define HPUXSA_ONSTACK		1
20945753Smckusick #define HPUXSA_RESETHAND	4
21045753Smckusick #define HPUXSA_NOCLDSTOP	8
21145753Smckusick 
21245753Smckusick #define	HPUXSIG_BLOCK	0	/* block specified signal set */
21345753Smckusick #define	HPUXSIG_UNBLOCK	1	/* unblock specified signal set */
21445753Smckusick #define	HPUXSIG_SETMASK	2	/* set specified signal set */
21553922Shibler 
21653922Shibler /* sysconf stuff */
217*64904Shibler #define HPUX_SYSCONF_CLKTICK	2
21853922Shibler #define HPUX_SYSCONF_OPENMAX	4
21953922Shibler #define HPUX_SYSCONF_CPUTYPE	10001
22053922Shibler #define HPUX_SYSCONF_CPUM020	0x20C
22153922Shibler #define HPUX_SYSCONF_CPUM030	0x20D
22253922Shibler #define HPUX_SYSCONF_CPUM040	0x20E
22353922Shibler #define HPUX_SYSCONF_CPUPA10	0x20B
22453922Shibler #define HPUX_SYSCONF_CPUPA11	0x210
22557307Shibler 
22657307Shibler /* mmap stuff */
22757307Shibler #define HPUXMAP_FIXED	0x04
22857307Shibler #define HPUXMAP_REPLACE	0x08
22957307Shibler #define HPUXMAP_ANON	0x10
23057307Shibler 
23157307Shibler /* rlimit stuff */
23257307Shibler #define HPUXRLIMIT_NOFILE	6
23364480Shibler 
23464480Shibler /*
23564480Shibler  * In BSD EAGAIN and EWOULDBLOCK are the same error code.
23664480Shibler  * However, for HP-UX we must split them out to seperate codes.
23764480Shibler  * The easiest way to do this was to check the return value of
23864480Shibler  * BSD routines which are known to return EAGAIN (but never
23964480Shibler  * EWOULDBLOCK) and change it to the pseudo-code OEAGAIN when
24064480Shibler  * we see it.  The error translation table will them map that
24164480Shibler  * code to the HP-UX EAGAIN value.
24264480Shibler  */
24364480Shibler #define OEAGAIN	82
244