1/*
2 * BK Id: SCCS/s.posix_types.h 1.5 05/17/01 18:14:25 cort
3 */
4#ifndef _PPC_POSIX_TYPES_H
5#define _PPC_POSIX_TYPES_H
6
7/*
8 * This file is generally used by user-level software, so you need to
9 * be a little careful about namespace pollution etc.  Also, we cannot
10 * assume GCC is being used.
11 */
12
13typedef unsigned int	__kernel_dev_t;
14typedef unsigned int	__kernel_ino_t;
15typedef unsigned int	__kernel_mode_t;
16typedef unsigned short	__kernel_nlink_t;
17typedef long		__kernel_off_t;
18typedef int		__kernel_pid_t;
19typedef unsigned int	__kernel_uid_t;
20typedef unsigned int	__kernel_gid_t;
21typedef unsigned int	__kernel_size_t;
22typedef int		__kernel_ssize_t;
23typedef long		__kernel_ptrdiff_t;
24typedef long		__kernel_time_t;
25typedef long		__kernel_suseconds_t;
26typedef long		__kernel_clock_t;
27typedef int		__kernel_daddr_t;
28typedef char *		__kernel_caddr_t;
29typedef short             __kernel_ipc_pid_t;
30typedef unsigned short	__kernel_uid16_t;
31typedef unsigned short	__kernel_gid16_t;
32typedef unsigned int	__kernel_uid32_t;
33typedef unsigned int	__kernel_gid32_t;
34
35typedef unsigned int	__kernel_old_uid_t;
36typedef unsigned int	__kernel_old_gid_t;
37
38#ifdef __GNUC__
39typedef long long	__kernel_loff_t;
40#endif
41
42typedef struct {
43	int	val[2];
44} __kernel_fsid_t;
45
46#ifndef __GNUC__
47
48#define	__FD_SET(d, set)	((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
49#define	__FD_CLR(d, set)	((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
50#define	__FD_ISSET(d, set)	((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
51#define	__FD_ZERO(set)	\
52  ((void) memset ((__ptr_t) (set), 0, sizeof (__kernel_fd_set)))
53
54#else /* __GNUC__ */
55
56#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) \
57    || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0)
58/* With GNU C, use inline functions instead so args are evaluated only once: */
59
60#undef __FD_SET
61static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp)
62{
63	unsigned long _tmp = fd / __NFDBITS;
64	unsigned long _rem = fd % __NFDBITS;
65	fdsetp->fds_bits[_tmp] |= (1UL<<_rem);
66}
67
68#undef __FD_CLR
69static __inline__ void __FD_CLR(unsigned long fd, __kernel_fd_set *fdsetp)
70{
71	unsigned long _tmp = fd / __NFDBITS;
72	unsigned long _rem = fd % __NFDBITS;
73	fdsetp->fds_bits[_tmp] &= ~(1UL<<_rem);
74}
75
76#undef __FD_ISSET
77static __inline__ int __FD_ISSET(unsigned long fd, __kernel_fd_set *p)
78{
79	unsigned long _tmp = fd / __NFDBITS;
80	unsigned long _rem = fd % __NFDBITS;
81	return (p->fds_bits[_tmp] & (1UL<<_rem)) != 0;
82}
83
84/*
85 * This will unroll the loop for the normal constant case (8 ints,
86 * for a 256-bit fd_set)
87 */
88#undef __FD_ZERO
89static __inline__ void __FD_ZERO(__kernel_fd_set *p)
90{
91	unsigned int *tmp = (unsigned int *)p->fds_bits;
92	int i;
93
94	if (__builtin_constant_p(__FDSET_LONGS)) {
95		switch (__FDSET_LONGS) {
96			case 8:
97				tmp[0] = 0; tmp[1] = 0; tmp[2] = 0; tmp[3] = 0;
98				tmp[4] = 0; tmp[5] = 0; tmp[6] = 0; tmp[7] = 0;
99				return;
100		}
101	}
102	i = __FDSET_LONGS;
103	while (i) {
104		i--;
105		*tmp = 0;
106		tmp++;
107	}
108}
109
110#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
111#endif /* __GNUC__ */
112#endif /* _PPC_POSIX_TYPES_H */
113