1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License.  See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1996, 97, 98, 99, 2000 by Ralf Baechle
7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8 */
9#ifndef _ASM_POSIX_TYPES_H
10#define _ASM_POSIX_TYPES_H
11
12#include <asm/sgidefs.h>
13
14/*
15 * This file is generally used by user-level software, so you need to
16 * be a little careful about namespace pollution etc.  Also, we cannot
17 * assume GCC is being used.
18 */
19
20typedef unsigned long	__kernel_ino_t;
21typedef unsigned int	__kernel_mode_t;
22#if (_MIPS_SZLONG == 32)
23typedef unsigned long	__kernel_nlink_t;
24#endif
25#if (_MIPS_SZLONG == 64)
26typedef unsigned int	__kernel_nlink_t;
27#endif
28typedef long		__kernel_off_t;
29typedef int		__kernel_pid_t;
30typedef int		__kernel_ipc_pid_t;
31typedef unsigned int	__kernel_uid_t;
32typedef unsigned int	__kernel_gid_t;
33#if (_MIPS_SZLONG == 32)
34typedef unsigned int	__kernel_size_t;
35typedef int		__kernel_ssize_t;
36typedef int		__kernel_ptrdiff_t;
37#endif
38#if (_MIPS_SZLONG == 64)
39typedef unsigned long	__kernel_size_t;
40typedef long		__kernel_ssize_t;
41typedef long		__kernel_ptrdiff_t;
42#endif
43typedef long		__kernel_time_t;
44typedef long		__kernel_suseconds_t;
45typedef long		__kernel_clock_t;
46typedef int		__kernel_timer_t;
47typedef int		__kernel_clockid_t;
48typedef long		__kernel_daddr_t;
49typedef char *		__kernel_caddr_t;
50
51typedef unsigned short	__kernel_uid16_t;
52typedef unsigned short	__kernel_gid16_t;
53typedef unsigned int	__kernel_uid32_t;
54typedef unsigned int	__kernel_gid32_t;
55typedef __kernel_uid_t	__kernel_old_uid_t;
56typedef __kernel_gid_t	__kernel_old_gid_t;
57typedef unsigned int	__kernel_old_dev_t;
58
59#ifdef __GNUC__
60typedef long long      __kernel_loff_t;
61#endif
62
63typedef struct {
64#if (_MIPS_SZLONG == 32)
65	long	val[2];
66#endif
67#if (_MIPS_SZLONG == 64)
68	int	val[2];
69#endif
70} __kernel_fsid_t;
71
72#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
73
74#undef __FD_SET
75static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
76{
77	unsigned long __tmp = __fd / __NFDBITS;
78	unsigned long __rem = __fd % __NFDBITS;
79	__fdsetp->fds_bits[__tmp] |= (1UL<<__rem);
80}
81
82#undef __FD_CLR
83static __inline__ void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp)
84{
85	unsigned long __tmp = __fd / __NFDBITS;
86	unsigned long __rem = __fd % __NFDBITS;
87	__fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem);
88}
89
90#undef __FD_ISSET
91static __inline__ int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p)
92{
93	unsigned long __tmp = __fd / __NFDBITS;
94	unsigned long __rem = __fd % __NFDBITS;
95	return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0;
96}
97
98/*
99 * This will unroll the loop for the normal constant case (8 ints,
100 * for a 256-bit fd_set)
101 */
102#undef __FD_ZERO
103static __inline__ void __FD_ZERO(__kernel_fd_set *__p)
104{
105	unsigned long *__tmp = __p->fds_bits;
106	int __i;
107
108	if (__builtin_constant_p(__FDSET_LONGS)) {
109		switch (__FDSET_LONGS) {
110		case 16:
111			__tmp[ 0] = 0; __tmp[ 1] = 0;
112			__tmp[ 2] = 0; __tmp[ 3] = 0;
113			__tmp[ 4] = 0; __tmp[ 5] = 0;
114			__tmp[ 6] = 0; __tmp[ 7] = 0;
115			__tmp[ 8] = 0; __tmp[ 9] = 0;
116			__tmp[10] = 0; __tmp[11] = 0;
117			__tmp[12] = 0; __tmp[13] = 0;
118			__tmp[14] = 0; __tmp[15] = 0;
119			return;
120
121		case 8:
122			__tmp[ 0] = 0; __tmp[ 1] = 0;
123			__tmp[ 2] = 0; __tmp[ 3] = 0;
124			__tmp[ 4] = 0; __tmp[ 5] = 0;
125			__tmp[ 6] = 0; __tmp[ 7] = 0;
126			return;
127
128		case 4:
129			__tmp[ 0] = 0; __tmp[ 1] = 0;
130			__tmp[ 2] = 0; __tmp[ 3] = 0;
131			return;
132		}
133	}
134	__i = __FDSET_LONGS;
135	while (__i) {
136		__i--;
137		*__tmp = 0;
138		__tmp++;
139	}
140}
141
142#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
143
144#endif /* _ASM_POSIX_TYPES_H */
145