xref: /csrg-svn/sys/hp/hpux/hpux.h (revision 66073)
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*66073Shibler  *	@(#)hpux.h	8.4 (Berkeley) 02/13/94
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 
147*66073Shibler /* HP-UX fcntl file locking */
148*66073Shibler struct hpuxflock {
149*66073Shibler 	short	hl_type;
150*66073Shibler 	short	hl_whence;
151*66073Shibler 	long	hl_start;
152*66073Shibler 	long	hl_len;
153*66073Shibler 	long	hl_pid;
154*66073Shibler };
155*66073Shibler 
156*66073Shibler #define HPUXF_GETLK	7
157*66073Shibler #define HPUXF_SETLK	8
158*66073Shibler #define HPUXF_SETLKW	9
159*66073Shibler 
160*66073Shibler #define HPUXF_RDLCK	1
161*66073Shibler #define HPUXF_WRLCK	2
162*66073Shibler #define HPUXF_UNLCK	3
163*66073Shibler 
16441486Smckusick /* HP-UX only sysV shmctl() commands */
16541486Smckusick #define SHM_LOCK	3	/* Lock segment in core */
16641486Smckusick #define SHM_UNLOCK	4	/* Unlock segment */
16741486Smckusick 
16864480Shibler /* SHM stuff reflecting POSIX types */
16964480Shibler struct hpuxipc_perm {
17064480Shibler 	long	uid;	/* owner's user id */
17164480Shibler 	long	gid;	/* owner's group id */
17264480Shibler 	long	cuid;	/* creator's user id */
17364480Shibler 	long	cgid;	/* creator's group id */
17464480Shibler 	u_short	mode;	/* access modes */
17564480Shibler 	u_short	seq;	/* slot usage sequence number */
17664480Shibler 	long	key;	/* key */
17764480Shibler };
17864480Shibler 
17964480Shibler struct hpuxshmid_ds {
18064480Shibler 	struct hpuxipc_perm shm_perm;	/* operation permission struct */
18164480Shibler 	int		shm_segsz;	/* segment size (bytes) */
18264480Shibler 	struct pte	*shm_ptbl;	/* ptr to associated page table */
18364480Shibler 	long		shm_lpid;	/* pid of last shmop */
18464480Shibler 	long		shm_cpid;	/* pid of creator */
18564480Shibler 	u_short		shm_nattch;	/* current # attached */
18664480Shibler 	u_short		shm_cnattch;	/* in memory # attached */
18764480Shibler 	time_t		shm_atime;	/* last shmat time */
18864480Shibler 	time_t		shm_dtime;	/* last shmdt time */
18964480Shibler 	time_t		shm_ctime;	/* last change time */
19064480Shibler 	/* actually longer */
19164480Shibler };
19264480Shibler 
19341486Smckusick /* HP-UX rtprio values */
19441486Smckusick #define RTPRIO_MIN	0
19541486Smckusick #define RTPRIO_MAX	127
19641486Smckusick #define RTPRIO_NOCHG	1000
19741486Smckusick #define RTPRIO_RTOFF	1001
19841486Smckusick 
19941486Smckusick /* HP-UX only sigvec sv_flags values */
20041486Smckusick #define HPUXSV_RESET	000000004
20141486Smckusick 
20241486Smckusick /*
20341486Smckusick  * HP-UX returns SIGILL instead of SIGFPE for the CHK and TRAPV exceptions.
20441486Smckusick  * It also returns different u_code values for certain illegal instruction
20541486Smckusick  * and floating point exceptions.  Here are the proper HP-UX u_code values
20641486Smckusick  * (numbers from hpux 6.2 manual pages).
20741486Smckusick  */
20841486Smckusick 
20941486Smckusick /* SIGILL codes */
21041486Smckusick #define	HPUX_ILL_ILLINST_TRAP	0	/* T_ILLINST+USER */
21141486Smckusick #define	HPUX_ILL_CHK_TRAP	6	/* T_CHKINST+USER */
21241486Smckusick #define	HPUX_ILL_TRAPV_TRAP	7	/* T_TRAPVINST+USER */
21341486Smckusick #define	HPUX_ILL_PRIV_TRAP	8	/* T_PRIVINST+USER */
21441486Smckusick 
21541486Smckusick /* SIGFPE codes */
21641486Smckusick #define	HPUX_FPE_INTDIV_TRAP	5	/* T_ZERODIV+USER */
21745753Smckusick 
21845753Smckusick /* HP-UX POSIX signal stuff implementation */
21945753Smckusick typedef struct __hpuxsigset_t { long sigset[8]; } hpuxsigset_t;
22045753Smckusick struct hpuxsigaction {
22145753Smckusick 	void		(*sa_handler)();
22245753Smckusick 	hpuxsigset_t	sa_mask;
22345753Smckusick 	int		sa_flags;
22445753Smckusick };
22545753Smckusick #define HPUXSA_ONSTACK		1
22645753Smckusick #define HPUXSA_RESETHAND	4
22745753Smckusick #define HPUXSA_NOCLDSTOP	8
22845753Smckusick 
22945753Smckusick #define	HPUXSIG_BLOCK	0	/* block specified signal set */
23045753Smckusick #define	HPUXSIG_UNBLOCK	1	/* unblock specified signal set */
23145753Smckusick #define	HPUXSIG_SETMASK	2	/* set specified signal set */
23253922Shibler 
23353922Shibler /* sysconf stuff */
23464904Shibler #define HPUX_SYSCONF_CLKTICK	2
23553922Shibler #define HPUX_SYSCONF_OPENMAX	4
23653922Shibler #define HPUX_SYSCONF_CPUTYPE	10001
23753922Shibler #define HPUX_SYSCONF_CPUM020	0x20C
23853922Shibler #define HPUX_SYSCONF_CPUM030	0x20D
23953922Shibler #define HPUX_SYSCONF_CPUM040	0x20E
24053922Shibler #define HPUX_SYSCONF_CPUPA10	0x20B
24153922Shibler #define HPUX_SYSCONF_CPUPA11	0x210
24257307Shibler 
24357307Shibler /* mmap stuff */
24457307Shibler #define HPUXMAP_FIXED	0x04
24557307Shibler #define HPUXMAP_REPLACE	0x08
24657307Shibler #define HPUXMAP_ANON	0x10
24757307Shibler 
24857307Shibler /* rlimit stuff */
24957307Shibler #define HPUXRLIMIT_NOFILE	6
25064480Shibler 
25164480Shibler /*
25264480Shibler  * In BSD EAGAIN and EWOULDBLOCK are the same error code.
25364480Shibler  * However, for HP-UX we must split them out to seperate codes.
25464480Shibler  * The easiest way to do this was to check the return value of
25564480Shibler  * BSD routines which are known to return EAGAIN (but never
25664480Shibler  * EWOULDBLOCK) and change it to the pseudo-code OEAGAIN when
25764480Shibler  * we see it.  The error translation table will them map that
25864480Shibler  * code to the HP-UX EAGAIN value.
25964480Shibler  */
26064480Shibler #define OEAGAIN	82
261