summaryrefslogtreecommitdiff
path: root/hurd/hurd_types.h
blob: a99b089f2a52ca7235dfe3b8a73c830541aa3d11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
/* C declarations for Hurd server interfaces
   Copyright (C) 1993 Free Software Foundation, Inc.

This file is part of the GNU Hurd.

The GNU Hurd is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

The GNU Hurd is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with the GNU Hurd; see the file COPYING.  If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

#ifndef _HURD_TYPES_H
#define _HURD_TYPES_H

#include <mach/std_types.h>	/* For mach_port_t et al. */
#include <sys/types.h>		/* For pid_t and uid_t.  */

typedef mach_port_t file_t;
typedef mach_port_t fsys_t;
typedef mach_port_t io_t;
typedef mach_port_t process_t;
typedef mach_port_t auth_t;
typedef mach_port_t socket_t;
typedef mach_port_t addr_port_t;
typedef mach_port_t startup_t;
typedef mach_port_t proccoll_t;

typedef kern_return_t error_t;

/* These names exist only because of MiG deficiencies.
   You should not use them in C source; use the normal C types instead.  */
typedef char *data_t;
typedef char string_t [1024];
typedef int *intarray_t;
typedef int *fd_mask_t;
typedef mach_port_t *portarray_t;
typedef pid_t *pidarray_t;
typedef uid_t *idarray_t;
typedef struct rusage rusage_t;
typedef struct flock flock_t;

typedef struct stat io_statbuf_t;

/* stb_fstype is one of: */
#define FSTYPE_UFS     0x00000000 /* 4.x BSD Fast File System */
#define FSTYPE_NFS     0x00000001 /* Network File System ala Sun */
#define FSTYPE_GFS     0x00000002 /* GNU file system */
#define FSTYPE_LFS     0x00000003 /* Logging File System ala Sprite */
#define FSTYPE_SYSV    0x00000004 /* Old U*x filesystem ala System V */
#define FSTYPE_FTP     0x00000005 /* Transparent FTP */
#define FSTYPE_TAR     0x00000006 /* Transparent TAR */
#define FSTYPE_AR      0x00000007 /* Transparent AR */
#define FSTYPE_CPIO    0x00000008 /* Transparent CPIO */
#define FSTYPE_MSLOSS  0x00000009 /* MS-DOS */
#define FSTYPE_CPM     0x0000000a /* CP/M */
#define FSTYPE_HFS     0x0000000b /* Don't ask */
#define FSTYPE_DTFS    0x0000000c /* used by desktop to provide more info */
#define FSTYPE_GRFS    0x0000000d /* GNU Remote File System */
#define FSTYPE_TERM    0x0000000e /* GNU Terminal driver */
#define FSTYPE_DEV     0x0000000f /* GNU Special file server */
#define FSTYPE_PROC    0x00000010 /* /proc filesystem ala Version 9 */
#define FSTYPE_IFSOCK  0x00000011 /* PF_LOCAL socket naming point */
#define FSTYPE_AFS     0x00000012 /* Andrew File System 3.xx */
#define FSTYPE_DFS     0x00000013 /* Distributed File Sys (OSF) == AFS 4.xx */
#define FSTYPE_PROC9   0x00000014 /* /proc filesystem ala Plan 9 */

/* Bits for flags in file_exec and exec_* calls are as follows: */
#define EXEC_NEWTASK	0x00000001 /* create new task; kill old one */
#define EXEC_SECURE	0x00000002 /* use secure values of portarray, etc. */
#define EXEC_DEFAULTS	0x00000004 /* Use defaults for unspecified ports */

/* Standard port assignments for file_exec and exec_* */
enum
  {
    INIT_PORT_CWDIR,
    INIT_PORT_CRDIR,
    INIT_PORT_AUTH,
    INIT_PORT_PROC,
    INIT_PORT_LOGINCOLL,
    INIT_PORT_CTTYID,
    /* If MACH_PORT_NULL is given for the bootstrap port,
       the bootstrap port of the old task is used.  */
    INIT_PORT_BOOTSTRAP,
    INIT_PORT_MAX
  };

/* Standard ints for file_exec and exec_* */
enum
  {
    INIT_UMASK,
    INIT_SIGMASK,
    INIT_SIGIGN,
    INIT_SIGPENDING,
    INIT_INT_MAX,
  };

/* Bits for flags in file_set_translator call are as follows: */
#define FS_TRANS_FORCE     0x00000001 /* must use translator(no sht circuit) */
#define FS_TRANS_EXCL      0x00000002 /* don't do it if already translated */

/* Values for retry field in dir_pathtrans */
enum retry_type
{
  FS_RETRY_NONE,		/* no retry necessary */
  FS_RETRY_NORMAL,		/* retry normally */
  FS_RETRY_REAUTH,		/* retry after reauthenticating retry port */
  FS_RETRY_MAGICAL,		/* retry string is magical */
  /* "tty" means controlling tty;
     "fd%u" means file descriptor N;
     */
};
typedef enum retry_type retry_type;

/* Select types for io_select */
#define SELECT_READ  0x00000001
#define SELECT_WRITE 0x00000002
#define SELECT_URG   0x00000004

/* Flags for fsys_goaway.  Also, these flags are sent as the oldtrans_flags
   in file_set_translator to describe how to terminate the old translator. */
#define FSYS_GOAWAY_NOWAIT    0x00000001 /* Return immediately */
#define FSYS_GOAWAY_NOSYNC    0x00000002 /* Don't update physical media */
#define FSYS_GOAWAY_FORCE     0x00000004 /* Go away despite current users */
#define FSYS_GOAWAY_UNLINK    0x00000008 /* Go away only if non-dir */
#define FSYS_GOAWAY_RECURSE   0x00000010 /* Shutdown children too */

/* This structure is known to be 19 ints long in hurd_types.defs */
struct fsys_statfsbuf
{
  long fsys_stb_type;
  long fsys_stb_bsize;
  long fsys_stb_fsize;
  long fsys_stb_blocks;
  long fsys_stb_bfree;
  long fsys_stb_bavail;
  long fsys_stb_files;
  long fsys_stb_ffree;
  long fsys_stb_fsid_1;
  long fsys_stb_fsid_2;
  long fsys_stb_spare[9];
};
typedef struct fsys_statfsbuf fsys_statfsbuf_t;

/* Possible types of version info for proc_version.  */
enum verstype
{
  SYSNAME,
  RELEASE,
  VERSION,
  MACHINE,
};

struct procinfo
{
  int state;
  uid_t owner;
  pid_t ppid;
  pid_t pgrp;
  pid_t session;

  int nthreads;			/* size of pi_threadinfos */
  
  struct task_basic_info taskinfo;
  struct
    {
      struct thread_basic_info pis_bi;
      struct thread_sched_info pis_si;
    } threadinfos[0];
};
typedef int *procinfo_t;

/* Bits in state: */
#define PI_STOPPED 0x00000001	/* Proc server thinks is stopped  */
#define PI_EXECED  0x00000002	/* Has called proc_exec */
#define PI_ORPHAN  0x00000008	/* Process group is orphaned */
#define PI_NOMSG   0x00000010	/* Process has no message port */
#define PI_SESSLD  0x00000020	/* Session leader */
#define PI_NOTOWNED 0x0000040	/* Process has no owner */
#define PI_NOPARENT 0x0000080	/* Hasn't identified a parent */
#define PI_ZOMBIE  0x00000100	/* Has no associated task */

/* Types of ports the terminal driver can run on top of. */
#define TERM_ON_MACHDEV		1
#define TERM_ON_HURDIO		2
#define TERM_ON_MASTERPTY	3

#endif