/*	$NetBSD: sunos.h,v 1.14 2003/01/24 21:55:17 fvdl Exp $	*/

#ifndef _COMPAT_SUNOS_SUNOS_H_
#define _COMPAT_SUNOS_SUNOS_H_

/* used to ensure `struct sunos' types rename constantly sized. */
#ifdef __arch64__
typedef u_int32_t	sunos_charp;
#else
typedef char *		sunos_charp;
#endif

#define	SUNM_RDONLY	0x01	/* mount fs read-only */
#define	SUNM_NOSUID	0x02	/* mount fs with setuid disallowed */
#define	SUNM_NEWTYPE	0x04	/* type is string (char *), not int */
#define	SUNM_GRPID	0x08	/* (bsd semantics; ignored) */
#define	SUNM_REMOUNT	0x10	/* update existing mount */
#define	SUNM_NOSUB	0x20	/* prevent submounts (rejected) */
#define	SUNM_MULTI	0x40	/* (ignored) */
#define	SUNM_SYS5	0x80	/* Sys 5-specific semantics (rejected) */

struct sunos_nfs_args {
	struct	sockaddr_in *addr;	/* file server address */
	caddr_t	fh;			/* file handle to be mounted */
	int	flags;			/* flags */
	int	wsize;			/* write size in bytes */
	int	rsize;			/* read size in bytes */
	int	timeo;			/* initial timeout in .1 secs */
	int	retrans;		/* times to retry send */
	sunos_charp hostname;		/* server's hostname */
	int	acregmin;		/* attr cache file min secs */
	int	acregmax;		/* attr cache file max secs */
	int	acdirmin;		/* attr cache dir min secs */
	int	acdirmax;		/* attr cache dir max secs */
	sunos_charp netname;		/* server's netname */
	struct	pathcnf *pathconf;	/* static pathconf kludge */
};
/* SunOS nfs flag values: */
#define SUNNFS_SOFT	0x1
#define SUNNFS_WSIZE	0x2
#define SUNNFS_RSIZE	0x4
#define SUNNFS_TIMEO	0x8
#define SUNNFS_RETRANS	0x10
#define SUNNFS_HOSTNAME	0x20
#define SUNNFS_INT	0x40
#define SUNNFS_NOAC	0x80
#define SUNNFS_ACREGMIN	0x100
#define SUNNFS_ACREGMAX	0x200
#define SUNNFS_ACDIRMIN	0x400
#define SUNNFS_ACDIRMAX	0x800
#define SUNNFS_SECURE	0x1000
#define SUNNFS_NOCTO	0x2000
#define SUNNFS_POSIX	0x4000


struct sunos_ustat {
	int32_t	f_tfree;	/* total free */
	ino_t	f_tinode;	/* total inodes free */
	char	f_path[6];	/* filsys name */
	char	f_fpack[6];	/* filsys pack name */
};

struct sunos_statfs {
	int	f_type;		/* type of info, zero for now */
	int	f_bsize;	/* fundamental file system block size */
	int	f_blocks;	/* total blocks in file system */
	int	f_bfree;	/* free blocks */
	int	f_bavail;	/* free blocks available to non-super-user */
	int	f_files;	/* total file nodes in file system */
	int	f_ffree;	/* free file nodes in fs */
	fsid_t	f_fsid;		/* file system id */
	int	f_spare[7];	/* spare for later */
};


struct sunos_utsname {
	char    sysname[9];
	char    nodename[9];
	char    nodeext[65-9];
	char    release[9];
	char    version[9];
	char    machine[9];
};


struct sunos_ttysize {
	int	ts_row;
	int	ts_col;
};

struct sunos_termio {
	u_short	c_iflag;
	u_short	c_oflag;
	u_short	c_cflag;
	u_short	c_lflag;
	char	c_line;
	unsigned char c_cc[8];
};
#define SUNOS_TCGETA	_IOR('T', 1, struct sunos_termio)
#define SUNOS_TCSETA	_IOW('T', 2, struct sunos_termio)
#define SUNOS_TCSETAW	_IOW('T', 3, struct sunos_termio)
#define SUNOS_TCSETAF	_IOW('T', 4, struct sunos_termio)
#define SUNOS_TCSBRK	_IO('T', 5)

struct sunos_termios {
	u_int	c_iflag;
	u_int	c_oflag;
	u_int	c_cflag;
	u_int	c_lflag;
	char	c_line;
	u_char	c_cc[17];
};
#define SUNOS_TCXONC	_IO('T', 6)
#define SUNOS_TCFLSH	_IO('T', 7)
#define SUNOS_TCGETS	_IOR('T', 8, struct sunos_termios)
#define SUNOS_TCSETS	_IOW('T', 9, struct sunos_termios)
#define SUNOS_TCSETSW	_IOW('T', 10, struct sunos_termios)
#define SUNOS_TCSETSF	_IOW('T', 11, struct sunos_termios)
#define SUNOS_TCSNDBRK	_IO('T', 12)
#define SUNOS_TCDRAIN	_IO('T', 13)

/* Sun audio compatibility */
struct sunos_audio_prinfo {
	u_int	sample_rate;
	u_int	channels;
	u_int	precision;
	u_int	encoding;
	u_int	gain;
	u_int	port;
	u_int	avail_ports;
	u_int	reserved0[3];
	u_int	samples;
	u_int	eof;
	u_char	pause;
	u_char	error;
	u_char	waiting;
	u_char	balance;
	u_short	minordev;
	u_char	open;
	u_char	active;
};
struct sunos_audio_info {
	struct sunos_audio_prinfo play;
	struct sunos_audio_prinfo record;
	u_int monitor_gain;
	u_int reserved[4];
};

/* Values for AUDIO_GETDEV ioctl: */
#define SUNOS_AUDIO_DEV_UNKNOWN			0
#define SUNOS_AUDIO_DEV_AMD			1
#define SUNOS_AUDIO_DEV_SPEAKERBOX		2
#define SUNOS_AUDIO_DEV_CODEC			3

__BEGIN_DECLS
/* Defined in arch/<arch>/sunos_machdep.c */
void	sunos_sendsig __P((int, sigset_t *, u_long));
__END_DECLS

#endif /* _COMPAT_SUNOS_SUNOS_H_ */
