COMPLETE.TXT
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:2565k
源码类别:

操作系统开发

开发平台:

C/C++

  1. 04858 #define NWIOGETHOPT     _IOR('n', 17, struct nwio_ethopt)
  2. 04859 #define NWIOGETHSTAT    _IOR('n', 18, struct nwio_ethstat)
  3. 04860
  4. 04861 #define NWIOSIPCONF     _IOW('n', 32, struct nwio_ipconf)
  5. 04862 #define NWIOGIPCONF     _IOR('n', 33, struct nwio_ipconf)
  6. 04863 #define NWIOSIPOPT      _IOW('n', 34, struct nwio_ipopt)
  7. 04864 #define NWIOGIPOPT      _IOR('n', 35, struct nwio_ipopt)
  8. 04865
  9. 04866 #define NWIOIPGROUTE    _IORW('n', 40, struct nwio_route)
  10. 04867 #define NWIOIPSROUTE    _IOW ('n', 41, struct nwio_route)
  11. 04868 #define NWIOIPDROUTE    _IOW ('n', 42, struct nwio_route)
  12. 04869
  13. 04870 #define NWIOSTCPCONF    _IOW('n', 48, struct nwio_tcpconf)
  14. 04871 #define NWIOGTCPCONF    _IOR('n', 49, struct nwio_tcpconf)
  15. 04872 #define NWIOTCPCONN     _IOW('n', 50, struct nwio_tcpcl)
  16. 04873 #define NWIOTCPLISTEN   _IOW('n', 51, struct nwio_tcpcl)
  17. 04874 #define NWIOTCPATTACH   _IOW('n', 52, struct nwio_tcpatt)
  18. 04875 #define NWIOTCPSHUTDOWN _IO ('n', 53)
  19. 04876 #define NWIOSTCPOPT     _IOW('n', 54, struct nwio_tcpopt)
  20. 04877 #define NWIOGTCPOPT     _IOR('n', 55, struct nwio_tcpopt)
  21. 04878
  22. 04879 #define NWIOSUDPOPT     _IOW('n', 64, struct nwio_udpopt)
  23. 04880 #define NWIOGUDPOPT     _IOR('n', 65, struct nwio_udpopt)
  24. 04881
  25. 04882 /* Disk ioctls. */
  26. 04883 #define DIOCEJECT       _IO ('d', 5)
  27. 04884 #define DIOCSETP        _IOW('d', 6, struct partition)
  28. 04885 #define DIOCGETP        _IOR('d', 7, struct partition)
  29. 04886
  30. 04887 /* Keyboard ioctls. */
  31. 04888 #define KIOCSMAP        _IOW('k', 3, keymap_t)
  32. 04889
  33. 04890 /* Memory ioctls. */
  34. 04891 #define MIOCRAMSIZE     _IOW('m', 3, u32_t)     /* Size of the ramdisk */
  35. 04892 #define MIOCSPSINFO     _IOW('m', 4, void *)
  36. 04893 #define MIOCGPSINFO     _IOR('m', 5, struct psinfo)
  37. 04894
  38. 04895 /* Magnetic tape ioctls. */
  39. 04896 #define MTIOCTOP        _IOW('M', 1, struct mtop)
  40. 04897 #define MTIOCGET        _IOR('M', 2, struct mtget)
  41. 04898
  42. 04899 /* SCSI command. */
  43. 04900 #define SCIOCCMD        _IOW('S', 1, struct scsicmd)
  44. 04901
  45. 04902 /* CD-ROM ioctls. */
  46. 04903 #define CDIOPLAYTI      _IOR('c', 1, struct cd_play_track)
  47. 04904 #define CDIOPLAYMSS     _IOR('c', 2, struct cd_play_mss)
  48. 04905 #define CDIOREADTOCHDR  _IOW('c', 3, struct cd_toc_entry)
  49. 04906 #define CDIOREADTOC     _IOW('c', 4, struct cd_toc_entry)
  50. 04907 #define CDIOREADSUBCH   _IOW('c', 5, struct cd_toc_entry)
  51. 04908 #define CDIOSTOP        _IO ('c', 10)
  52. 04909 #define CDIOPAUSE       _IO ('c', 11)
  53. 04910 #define CDIORESUME      _IO ('c', 12)
  54. 04911 #define CDIOEJECT       DIOCEJECT
  55. 04912
  56. 04913 /* Soundcard DSP ioctls. */
  57. 04914 #define DSPIORATE       _IOR('s', 1, unsigned int)
  58. 04915 #define DSPIOSTEREO     _IOR('s', 2, unsigned int)
  59. 04916 #define DSPIOSIZE       _IOR('s', 3, unsigned int)
  60. 04917 #define DSPIOBITS       _IOR('s', 4, unsigned int)
  61. 04918 #define DSPIOSIGN       _IOR('s', 5, unsigned int)
  62. 04919 #define DSPIOMAX        _IOW('s', 6, unsigned int)
  63. 04920 #define DSPIORESET      _IO ('s', 7)
  64. 04921
  65. 04922 /* Soundcard mixer ioctls. */
  66. 04923 #define MIXIOGETVOLUME          _IORW('s', 10, struct volume_level)
  67. 04924 #define MIXIOGETINPUTLEFT       _IORW('s', 11, struct inout_ctrl)
  68. 04925 #define MIXIOGETINPUTRIGHT      _IORW('s', 12, struct inout_ctrl)
  69. 04926 #define MIXIOGETOUTPUT          _IORW('s', 13, struct inout_ctrl)
  70. 04927 #define MIXIOSETVOLUME          _IORW('s', 20, struct volume_level)
  71. 04928 #define MIXIOSETINPUTLEFT       _IORW('s', 21, struct inout_ctrl)
  72. 04929 #define MIXIOSETINPUTRIGHT      _IORW('s', 22, struct inout_ctrl)
  73. 04930 #define MIXIOSETOUTPUT          _IORW('s', 23, struct inout_ctrl)
  74. 04931
  75. 04932 #ifndef _ANSI
  76. 04933 #include <ansi.h>
  77. 04934 #endif
  78. 04935
  79. 04936 _PROTOTYPE( int ioctl, (int _fd, int _request, void *_data)             );
  80. 04937
  81. 04938 #endif /* _IOCTL_H */
  82. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  83. include/sys/mtio.h    
  84. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  85. 05000 /* <sys/mtio.h> magnetic tape commands                  Author: Kees J. Bot
  86. 05001  */
  87. 05002
  88. 05003 #ifndef _SYS__MTIO_H
  89. 05004 #define _SYS__MTIO_H
  90. 05005
  91. 05006 /* Tape operations: ioctl(fd, MTIOCTOP, &struct mtop) */
  92. 05007
  93. 05008 struct mtop {
  94. 05009         short   mt_op;          /* Operation (MTWEOF, etc.) */
  95. 05010         int     mt_count;       /* Repeat count. */
  96. 05011 };
  97. 05012
  98. 05013 #define MTWEOF   0      /* Write End-Of-File Marker */
  99. 05014 #define MTFSF    1      /* Forward Space File mark */
  100. 05015 #define MTBSF    2      /* Backward Space File mark */
  101. 05016 #define MTFSR    3      /* Forward Space Record */
  102. 05017 #define MTBSR    4      /* Backward Space Record */
  103. 05018 #define MTREW    5      /* Rewind tape */
  104. 05019 #define MTOFFL   6      /* Rewind and take Offline */
  105. 05020 #define MTNOP    7      /* No-Operation, set status only */
  106. 05021 #define MTRETEN  8      /* Retension (completely wind and rewind) */
  107. 05022 #define MTERASE  9      /* Erase the tape and rewind */
  108. 05023 #define MTEOM   10      /* Position at End-Of-Media */
  109. 05024 #define MTMODE  11      /* Select tape density */
  110. 05025 #define MTBLKZ  12      /* Select tape block size */
  111. 05026
  112. 05027 /* Tape status: ioctl(fd, MTIOCGET, &struct mtget) */
  113. 05028
  114. 05029 struct mtget {
  115. 05030         short   mt_type;        /* Type of tape device. */
  116. 05031
  117. 05032         /* Device dependent "registers". */
  118. 05033         short   mt_dsreg;       /* Drive status register. */
  119. 05034         short   mt_erreg;       /* Error register. */
  120. 05035         short   dummy;          /* (alignment) */
  121. 05036
  122. 05037         /* Misc info. */
  123. 05038         off_t   mt_resid;       /* Residual count. */
  124. 05039         off_t   mt_fileno;      /* Current File Number. */
  125. 05040         off_t   mt_blkno;       /* Current Block Number within file. */
  126. 05041         off_t   mt_blksize;     /* Current block size. */
  127. 05042 };
  128. 05043
  129. 05044 #endif /* _SYS__MTIO_H */
  130. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  131. include/sys/ptrace.h    
  132. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  133. 05100 /* <sys/ptrace.h>
  134. 05101  * definitions for ptrace(2) 
  135. 05102  */
  136. 05103
  137. 05104 #ifndef _PTRACE_H
  138. 05105 #define _PTRACE_H
  139. 05106
  140. 05107 #define T_STOP         -1       /* stop the process */
  141. 05108 #define T_OK            0       /* enable tracing by parent for this process */
  142. 05109 #define T_GETINS        1       /* return value from instruction space */
  143. 05110 #define T_GETDATA       2       /* return value from data space */
  144. 05111 #define T_GETUSER       3       /* return value from user process table */
  145. 05112 #define T_SETINS        4       /* set value from instruction space */
  146. 05113 #define T_SETDATA       5       /* set value from data space */
  147. 05114 #define T_SETUSER       6       /* set value in user process table */
  148. 05115 #define T_RESUME        7       /* resume execution */
  149. 05116 #define T_EXIT          8       /* exit */
  150. 05117 #define T_STEP          9       /* set trace bit */
  151. 05118
  152. 05119 /* Function Prototypes. */
  153. 05120 #ifndef _ANSI_H
  154. 05121 #include <ansi.h>
  155. 05122 #endif
  156. 05123
  157. 05124 _PROTOTYPE( long ptrace, (int _req, pid_t _pid, long _addr, long _data) );
  158. 05125
  159. 05126 #endif /* _PTRACE_H */
  160. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  161. include/sys/sigcontext.h    
  162. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  163. 05200 #ifndef _SIGCONTEXT_H
  164. 05201 #define _SIGCONTEXT_H
  165. 05202
  166. 05203 /* The sigcontext structure is used by the sigreturn(2) system call.
  167. 05204  * sigreturn() is seldom called by user programs, but it is used internally
  168. 05205  * by the signal catching mechanism.
  169. 05206  */
  170. 05207
  171. 05208 #ifndef _ANSI_H
  172. 05209 #include <ansi.h>
  173. 05210 #endif
  174. 05211
  175. 05212 #ifndef _CONFIG_H
  176. 05213 #include <minix/config.h>
  177. 05214 #endif
  178. 05215
  179. 05216 #if !defined(CHIP)
  180. 05217 #include "error, configuration is not known"
  181. 05218 #endif
  182. 05219
  183. 05220 /* The following structure should match the stackframe_s structure used
  184. 05221  * by the kernel's context switching code.  Floating point registers should
  185. 05222  * be added in a different struct.
  186. 05223  */
  187. 05224 #if (CHIP == INTEL)
  188. 05225 struct sigregs {  
  189. 05226 #if _WORD_SIZE == 4
  190. 05227   short sr_gs;
  191. 05228   short sr_fs;
  192. 05229 #endif /* _WORD_SIZE == 4 */
  193. 05230   short sr_es;
  194. 05231   short sr_ds;
  195. 05232   int sr_di;
  196. 05233   int sr_si;
  197. 05234   int sr_bp;
  198. 05235   int sr_st;                    /* stack top -- used in kernel */
  199. 05236   int sr_bx;
  200. 05237   int sr_dx;
  201. 05238   int sr_cx;
  202. 05239   int sr_retreg;
  203. 05240   int sr_retadr;                /* return address to caller of save -- used
  204. 05241                                  * in kernel */
  205. 05242   int sr_pc;
  206. 05243   int sr_cs;
  207. 05244   int sr_psw;
  208. 05245   int sr_sp;
  209. 05246   int sr_ss;
  210. 05247 };
  211. 05248
  212. 05249 struct sigframe {               /* stack frame created for signalled process */
  213. 05250   _PROTOTYPE( void (*sf_retadr), (void) );
  214. 05251   int sf_signo;
  215. 05252   int sf_code;
  216. 05253   struct sigcontext *sf_scp;
  217. 05254   int sf_fp;
  218. 05255   _PROTOTYPE( void (*sf_retadr2), (void) );
  219. 05256   struct sigcontext *sf_scpcopy;
  220. 05257 };
  221. 05258
  222. 05259 #else
  223. 05260 #if (CHIP == M68000)
  224. 05261 struct sigregs {  
  225. 05262   long sr_retreg;                       /* d0 */
  226. 05263   long sr_d1;
  227. 05264   long sr_d2;
  228. 05265   long sr_d3;
  229. 05266   long sr_d4;
  230. 05267   long sr_d5;
  231. 05268   long sr_d6;
  232. 05269   long sr_d7;
  233. 05270   long sr_a0;
  234. 05271   long sr_a1;
  235. 05272   long sr_a2;
  236. 05273   long sr_a3;
  237. 05274   long sr_a4;
  238. 05275   long sr_a5;
  239. 05276   long sr_a6;
  240. 05277   long sr_sp;                   /* also known as a7 */
  241. 05278   long sr_pc;
  242. 05279   short sr_psw;
  243. 05280   short sr_dummy;               /* make size multiple of 4 for system.c */
  244. 05281 };
  245. 05282 #else
  246. 05283 #include "error, CHIP is not supported"
  247. 05284 #endif
  248. 05285 #endif /* CHIP == INTEL */
  249. 05286
  250. 05287 struct sigcontext {
  251. 05288   int sc_flags;                 /* sigstack state to restore */
  252. 05289   long sc_mask;                 /* signal mask to restore */
  253. 05290   struct sigregs sc_regs;       /* register set to restore */
  254. 05291 };
  255. 05292
  256. 05293 #if (CHIP == INTEL)
  257. 05294 #if _WORD_SIZE == 4
  258. 05295 #define sc_gs sc_regs.sr_gs
  259. 05296 #define sc_fs sc_regs.sr_fs
  260. 05297 #endif /* _WORD_SIZE == 4 */
  261. 05298 #define sc_es sc_regs.sr_es
  262. 05299 #define sc_ds sc_regs.sr_ds
  263. 05300 #define sc_di sc_regs.sr_di
  264. 05301 #define sc_si sc_regs.sr_si 
  265. 05302 #define sc_fp sc_regs.sr_bp
  266. 05303 #define sc_st sc_regs.sr_st             /* stack top -- used in kernel */
  267. 05304 #define sc_bx sc_regs.sr_bx
  268. 05305 #define sc_dx sc_regs.sr_dx
  269. 05306 #define sc_cx sc_regs.sr_cx
  270. 05307 #define sc_retreg sc_regs.sr_retreg
  271. 05308 #define sc_retadr sc_regs.sr_retadr     /* return address to caller of 
  272. 05309                                         save -- used in kernel */
  273. 05310 #define sc_pc sc_regs.sr_pc
  274. 05311 #define sc_cs sc_regs.sr_cs
  275. 05312 #define sc_psw sc_regs.sr_psw
  276. 05313 #define sc_sp sc_regs.sr_sp
  277. 05314 #define sc_ss sc_regs.sr_ss
  278. 05315 #endif /* CHIP == INTEL */
  279. 05316
  280. 05317 #if (CHIP == M68000)
  281. 05318 #define sc_retreg sc_regs.sr_retreg
  282. 05319 #define sc_d1 sc_regs.sr_d1
  283. 05320 #define sc_d2 sc_regs.sr_d2
  284. 05321 #define sc_d3 sc_regs.sr_d3
  285. 05322 #define sc_d4 sc_regs.sr_d4
  286. 05323 #define sc_d5 sc_regs.sr_d5
  287. 05324 #define sc_d6 sc_regs.sr_d6
  288. 05325 #define sc_d7 sc_regs.sr_d7
  289. 05326 #define sc_a0 sc_regs.sr_a0
  290. 05327 #define sc_a1 sc_regs.sr_a1
  291. 05328 #define sc_a2 sc_regs.sr_a2
  292. 05329 #define sc_a3 sc_regs.sr_a3
  293. 05330 #define sc_a4 sc_regs.sr_a4
  294. 05331 #define sc_a5 sc_regs.sr_a5
  295. 05332 #define sc_fp sc_regs.sr_a6
  296. 05333 #define sc_sp sc_regs.sr_sp
  297. 05334 #define sc_pc sc_regs.sr_pc
  298. 05335 #define sc_psw sc_regs.sr_psw
  299. 05336 #endif /* CHIP == M68000 */
  300. 05337
  301. 05338 /* Values for sc_flags.  Must agree with <minix/jmp_buf.h>. */
  302. 05339 #define SC_SIGCONTEXT   2       /* nonzero when signal context is included */
  303. 05340 #define SC_NOREGLOCALS  4       /* nonzero when registers are not to be
  304. 05341                                         saved and restored */
  305. 05342
  306. 05343 _PROTOTYPE( int sigreturn, (struct sigcontext *_scp)                    );
  307. 05344
  308. 05345 #endif /* _SIGCONTEXT_H */
  309. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  310. include/sys/stat.h    
  311. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  312. 05400 /* The <sys/stat.h> header defines a struct that is used in the stat() and
  313. 05401  * fstat functions.  The information in this struct comes from the i-node of
  314. 05402  * some file.  These calls are the only approved way to inspect i-nodes.
  315. 05403  */
  316. 05404
  317. 05405 #ifndef _STAT_H
  318. 05406 #define _STAT_H
  319. 05407
  320. 05408 struct stat {
  321. 05409   dev_t st_dev;                 /* major/minor device number */
  322. 05410   ino_t st_ino;                 /* i-node number */
  323. 05411   mode_t st_mode;               /* file mode, protection bits, etc. */
  324. 05412   short int st_nlink;           /* # links; TEMPORARY HACK: should be nlink_t*/
  325. 05413   uid_t st_uid;                 /* uid of the file's owner */
  326. 05414   short int st_gid;             /* gid; TEMPORARY HACK: should be gid_t */
  327. 05415   dev_t st_rdev;
  328. 05416   off_t st_size;                /* file size */
  329. 05417   time_t st_atime;              /* time of last access */
  330. 05418   time_t st_mtime;              /* time of last data modification */
  331. 05419   time_t st_ctime;              /* time of last file status change */
  332. 05420 };
  333. 05421
  334. 05422 /* Traditional mask definitions for st_mode. */
  335. 05423 /* The ugly casts on only some of the definitions are to avoid suprising sign
  336. 05424  * extensions such as S_IFREG != (mode_t) S_IFREG when ints are 32 bits.
  337. 05425  */
  338. 05426 #define S_IFMT  ((mode_t) 0170000)      /* type of file */
  339. 05427 #define S_IFREG ((mode_t) 0100000)      /* regular */
  340. 05428 #define S_IFBLK 0060000         /* block special */
  341. 05429 #define S_IFDIR 0040000         /* directory */
  342. 05430 #define S_IFCHR 0020000         /* character special */
  343. 05431 #define S_IFIFO 0010000         /* this is a FIFO */
  344. 05432 #define S_ISUID 0004000         /* set user id on execution */
  345. 05433 #define S_ISGID 0002000         /* set group id on execution */
  346. 05434                                 /* next is reserved for future use */
  347. 05435 #define S_ISVTX   01000         /* save swapped text even after use */
  348. 05436
  349. 05437 /* POSIX masks for st_mode. */
  350. 05438 #define S_IRWXU   00700         /* owner:  rwx------ */
  351. 05439 #define S_IRUSR   00400         /* owner:  r-------- */
  352. 05440 #define S_IWUSR   00200         /* owner:  -w------- */
  353. 05441 #define S_IXUSR   00100         /* owner:  --x------ */
  354. 05442
  355. 05443 #define S_IRWXG   00070         /* group:  ---rwx--- */
  356. 05444 #define S_IRGRP   00040         /* group:  ---r----- */
  357. 05445 #define S_IWGRP   00020         /* group:  ----w---- */
  358. 05446 #define S_IXGRP   00010         /* group:  -----x--- */
  359. 05447
  360. 05448 #define S_IRWXO   00007         /* others: ------rwx */
  361. 05449 #define S_IROTH   00004         /* others: ------r-- */ 
  362. 05450 #define S_IWOTH   00002         /* others: -------w- */
  363. 05451 #define S_IXOTH   00001         /* others: --------x */
  364. 05452
  365. 05453 /* The following macros test st_mode (from POSIX Sec. 5.6.1.1). */
  366. 05454 #define S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)     /* is a reg file */
  367. 05455 #define S_ISDIR(m)      (((m) & S_IFMT) == S_IFDIR)     /* is a directory */
  368. 05456 #define S_ISCHR(m)      (((m) & S_IFMT) == S_IFCHR)     /* is a char spec */
  369. 05457 #define S_ISBLK(m)      (((m) & S_IFMT) == S_IFBLK)     /* is a block spec */
  370. 05458 #define S_ISFIFO(m)     (((m) & S_IFMT) == S_IFIFO)     /* is a pipe/FIFO */
  371. 05459
  372. 05460
  373. 05461 /* Function Prototypes. */
  374. 05462 #ifndef _ANSI_H
  375. 05463 #include <ansi.h>
  376. 05464 #endif
  377. 05465
  378. 05466 _PROTOTYPE( int chmod, (const char *_path, Mode_t _mode)                );
  379. 05467 _PROTOTYPE( int fstat, (int _fildes, struct stat *_buf)                 );
  380. 05468 _PROTOTYPE( int mkdir, (const char *_path, Mode_t _mode)                );
  381. 05469 _PROTOTYPE( int mkfifo, (const char *_path, Mode_t _mode)               );
  382. 05470 _PROTOTYPE( int stat, (const char *_path, struct stat *_buf)            );
  383. 05471 _PROTOTYPE( mode_t umask, (Mode_t _cmask)                               );
  384. 05472
  385. 05473 #endif /* _STAT_H */
  386. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  387. include/sys/times.h    
  388. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  389. 05500 /* The <times.h> header is for time times() system call. */
  390. 05501
  391. 05502 #ifndef _TIMES_H
  392. 05503 #define _TIMES_H
  393. 05504
  394. 05505 #ifndef _CLOCK_T
  395. 05506 #define _CLOCK_T
  396. 05507 typedef long clock_t;           /* unit for system accounting */
  397. 05508 #endif
  398. 05509
  399. 05510 struct tms {
  400. 05511   clock_t tms_utime;
  401. 05512   clock_t tms_stime;
  402. 05513   clock_t tms_cutime;
  403. 05514   clock_t tms_cstime;
  404. 05515 };
  405. 05516
  406. 05517 /* Function Prototypes. */
  407. 05518 #ifndef _ANSI_H
  408. 05519 #include <ansi.h>
  409. 05520 #endif
  410. 05521
  411. 05522 _PROTOTYPE( clock_t times, (struct tms *_buffer)                        );
  412. 05523
  413. 05524 #endif /* _TIMES_H */
  414. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  415. include/sys/types.h    
  416. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  417. 05600 /* The <sys/types.h> header contains important data type definitions.
  418. 05601  * It is considered good programming practice to use these definitions, 
  419. 05602  * instead of the underlying base type.  By convention, all type names end 
  420. 05603  * with _t.
  421. 05604  */
  422. 05605
  423. 05606 #ifndef _TYPES_H
  424. 05607 #define _TYPES_H
  425. 05608
  426. 05609 /* _ANSI is somehow used to determine whether or not the compiler is a
  427. 05610  * 16 bit compiler
  428. 05611  */
  429. 05612 #ifndef _ANSI
  430. 05613 #include <ansi.h>
  431. 05614 #endif
  432. 05615
  433. 05616 /* The type size_t holds all results of the sizeof operator.  At first glance,
  434. 05617  * it seems obvious that it should be an unsigned int, but this is not always 
  435. 05618  * the case. For example, MINIX-ST (68000) has 32-bit pointers and 16-bit
  436. 05619  * integers. When one asks for the size of a 70K struct or array, the result 
  437. 05620  * requires 17 bits to express, so size_t must be a long type.  The type 
  438. 05621  * ssize_t is the signed version of size_t.
  439. 05622  */
  440. 05623 #ifndef _SIZE_T
  441. 05624 #define _SIZE_T
  442. 05625 typedef unsigned int size_t;
  443. 05626 #endif
  444. 05627
  445. 05628 #ifndef _SSIZE_T
  446. 05629 #define _SSIZE_T
  447. 05630 typedef int ssize_t;
  448. 05631 #endif
  449. 05632
  450. 05633 #ifndef _TIME_T
  451. 05634 #define _TIME_T
  452. 05635 typedef long time_t;               /* time in sec since 1 Jan 1970 0000 GMT */
  453. 05636 #endif
  454. 05637
  455. 05638 #ifndef _CLOCK_T
  456. 05639 #define _CLOCK_T
  457. 05640 typedef long clock_t;              /* unit for system accounting */
  458. 05641 #endif
  459. 05642
  460. 05643 #ifndef _SIGSET_T
  461. 05644 #define _SIGSET_T
  462. 05645 typedef unsigned long sigset_t;
  463. 05646 #endif
  464. 05647
  465. 05648 /* Types used in disk, inode, etc. data structures. */
  466. 05649 typedef short          dev_t;      /* holds (major|minor) device pair */
  467. 05650 typedef char           gid_t;      /* group id */
  468. 05651 typedef unsigned short ino_t;      /* i-node number */
  469. 05652 typedef unsigned short mode_t;     /* file type and permissions bits */
  470. 05653 typedef char         nlink_t;      /* number of links to a file */
  471. 05654 typedef unsigned long  off_t;      /* offset within a file */
  472. 05655 typedef int            pid_t;      /* process id (must be signed) */
  473. 05656 typedef short          uid_t;      /* user id */
  474. 05657 typedef unsigned long zone_t;      /* zone number */
  475. 05658 typedef unsigned long block_t;     /* block number */
  476. 05659 typedef unsigned long  bit_t;      /* bit number in a bit map */
  477. 05660 typedef unsigned short zone1_t;    /* zone number for V1 file systems */
  478. 05661 typedef unsigned short bitchunk_t; /* collection of bits in a bitmap */
  479. 05662
  480. 05663 typedef unsigned char   u8_t;      /* 8 bit type */
  481. 05664 typedef unsigned short u16_t;      /* 16 bit type */
  482. 05665 typedef unsigned long  u32_t;      /* 32 bit type */
  483. 05666
  484. 05667 typedef char            i8_t;      /* 8 bit signed type */
  485. 05668 typedef short          i16_t;      /* 16 bit signed type */
  486. 05669 typedef long           i32_t;      /* 32 bit signed type */
  487. 05670
  488. 05671 /* The following types are needed because MINIX uses K&R style function
  489. 05672  * definitions (for maximum portability).  When a short, such as dev_t, is
  490. 05673  * passed to a function with a K&R definition, the compiler automatically
  491. 05674  * promotes it to an int.  The prototype must contain an int as the parameter,
  492. 05675  * not a short, because an int is what an old-style function definition
  493. 05676  * expects.  Thus using dev_t in a prototype would be incorrect.  It would be
  494. 05677  * sufficient to just use int instead of dev_t in the prototypes, but Dev_t
  495. 05678  * is clearer.
  496. 05679  */
  497. 05680 typedef int            Dev_t;
  498. 05681 typedef int            Gid_t;
  499. 05682 typedef int          Nlink_t;
  500. 05683 typedef int            Uid_t;
  501. 05684 typedef int             U8_t;
  502. 05685 typedef unsigned long  U32_t;
  503. 05686 typedef int             I8_t;
  504. 05687 typedef int            I16_t;
  505. 05688 typedef long            I32_t;
  506. 05689
  507. 05690 /* ANSI C makes writing down the promotion of unsigned types very messy.  When
  508. 05691  * sizeof(short) == sizeof(int), there is no promotion, so the type stays
  509. 05692  * unsigned.  When the compiler is not ANSI, there is usually no loss of
  510. 05693  * unsignedness, and there are usually no prototypes so the promoted type
  511. 05694  * doesn't matter.  The use of types like Ino_t is an attempt to use ints
  512. 05695  * (which are not promoted) while providing information to the reader.
  513. 05696  */
  514. 05697
  515. 05698 #ifndef _ANSI_H
  516. 05699 #include <ansi.h>
  517. 05700 #endif
  518. 05701
  519. 05702 #if _EM_WSIZE == 2 || !defined(_ANSI)
  520. 05703 typedef unsigned int      Ino_t;
  521. 05704 typedef unsigned int    Zone1_t;
  522. 05705 typedef unsigned int Bitchunk_t;
  523. 05706 typedef unsigned int      U16_t;
  524. 05707 typedef unsigned int  Mode_t;
  525. 05708
  526. 05709 #else /* _EM_WSIZE == 4, or _EM_WSIZE undefined, or _ANSI defined */
  527. 05710 typedef int               Ino_t;
  528. 05711 typedef int             Zone1_t;
  529. 05712 typedef int          Bitchunk_t;
  530. 05713 typedef int               U16_t;
  531. 05714 typedef int           Mode_t;
  532. 05715
  533. 05716 #endif /* _EM_WSIZE == 2, etc */
  534. 05717  
  535. 05718 /* Signal handler type, e.g. SIG_IGN */
  536. 05719 #if defined(_ANSI)
  537. 05720 typedef void (*sighandler_t) (int);
  538. 05721 #else
  539. 05722 typedef void (*sighandler_t)();
  540. 05723 #endif
  541. 05724
  542. 05725 #endif /* _TYPES_H */
  543. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  544. include/sys/utsname.h    
  545. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  546. 05800 /* The <sys/utsname.h> header gives the system name. */
  547. 05801
  548. 05802 #ifndef _UTSNAME_H
  549. 05803 #define _UTSNAME_H
  550. 05804
  551. 05805 struct utsname {
  552. 05806   char sysname[15+1];
  553. 05807   char nodename[255+1];
  554. 05808   char release[11+1];
  555. 05809   char version[7+1];
  556. 05810   char machine[11+1];
  557. 05811   char arch[11+1];
  558. 05812 };
  559. 05813
  560. 05814 /* Function Prototypes. */
  561. 05815 #ifndef _ANSI_H
  562. 05816 #include <ansi.h>
  563. 05817 #endif
  564. 05818
  565. 05819 _PROTOTYPE( int uname, (struct utsname *_name)                          );
  566. 05820
  567. 05821 #endif /* _UTSNAME_H */
  568. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  569. include/sys/wait.h    
  570. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  571. 05900 /* The <sys/wait.h> header contains macros related to wait(). The value
  572. 05901  * returned by wait() and waitpid() depends on whether the process 
  573. 05902  * terminated by an exit() call, was killed by a signal, or was stopped
  574. 05903  * due to job control, as follows:
  575. 05904  *
  576. 05905  *                               High byte   Low byte
  577. 05906  *                              +---------------------+
  578. 05907  *      exit(status)            |  status  |    0     |
  579. 05908  *                              +---------------------+
  580. 05909  *      killed by signal        |    0     |  signal  |
  581. 05910  *                              +---------------------+
  582. 05911  *      stopped (job control)   |  signal  |   0177   |
  583. 05912  *                              +---------------------+
  584. 05913  */
  585. 05914
  586. 05915 #ifndef _WAIT_H
  587. 05916 #define _WAIT_H
  588. 05917
  589. 05918 #define _LOW(v)         ( (v) & 0377)
  590. 05919 #define _HIGH(v)        ( ((v) >> 8) & 0377)
  591. 05920
  592. 05921 #define WNOHANG         1       /* do not wait for child to exit */
  593. 05922 #define WUNTRACED       2       /* for job control; not implemented */
  594. 05923
  595. 05924 #define WIFEXITED(s)    (_LOW(s) == 0)                      /* normal exit */
  596. 05925 #define WEXITSTATUS(s)  (_HIGH(s))                          /* exit status */
  597. 05926 #define WTERMSIG(s)     (_LOW(s) & 0177)                    /* sig value */
  598. 05927 #define WIFSIGNALED(s)  (((unsigned int)(s)-1 & 0xFFFF) < 0xFF) /* signaled */
  599. 05928 #define WIFSTOPPED(s)   (_LOW(s) == 0177)                   /* stopped */
  600. 05929 #define WSTOPSIG(s)     (_HIGH(s) & 0377)                   /* stop signal */
  601. 05930
  602. 05931 /* Function Prototypes. */
  603. 05932 #ifndef _ANSI_H
  604. 05933 #include <ansi.h>
  605. 05934 #endif
  606. 05935
  607. 05936 _PROTOTYPE( pid_t wait, (int *_stat_loc)                                   );
  608. 05937 _PROTOTYPE( pid_t waitpid, (pid_t _pid, int *_stat_loc, int _options)      );
  609. 05938
  610. 05939 #endif /* _WAIT_H */
  611. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  612. include/minix/boot.h    
  613. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  614. 06000 /* boot.h */
  615. 06001
  616. 06002 #ifndef _BOOT_H
  617. 06003 #define _BOOT_H
  618. 06004
  619. 06005 /* Redefine root and root image devices as variables.
  620. 06006  * This keeps the diffs small but may cause future confusion.
  621. 06007  */
  622. 06008 #define ROOT_DEV   (boot_parameters.bp_rootdev)
  623. 06009 #define IMAGE_DEV  (boot_parameters.bp_ramimagedev)
  624. 06010
  625. 06011 /* Device numbers of RAM, floppy and hard disk devices.
  626. 06012  * h/com.h defines RAM_DEV but only as the minor number.
  627. 06013  */
  628. 06014 #define DEV_FD0   0x200
  629. 06015 #define DEV_HD0   0x300
  630. 06016 #define DEV_RAM   0x100
  631. 06017 #define DEV_SCSI  0x700 /* Atari TT only */
  632. 06018
  633. 06019 /* Structure to hold boot parameters. */
  634. 06020 struct bparam_s
  635. 06021 {
  636. 06022   dev_t bp_rootdev;
  637. 06023   dev_t bp_ramimagedev;
  638. 06024   unsigned short bp_ramsize;
  639. 06025   unsigned short bp_processor;
  640. 06026 };
  641. 06027
  642. 06028 extern struct bparam_s boot_parameters;
  643. 06029 #endif /* _BOOT_H */
  644. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  645. include/minix/callnr.h    
  646. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  647. 06100 #define NCALLS            77    /* number of system calls allowed */
  648. 06101
  649. 06102 #define EXIT               1 
  650. 06103 #define FORK               2 
  651. 06104 #define READ               3 
  652. 06105 #define WRITE              4 
  653. 06106 #define OPEN               5 
  654. 06107 #define CLOSE              6 
  655. 06108 #define WAIT               7
  656. 06109 #define CREAT              8 
  657. 06110 #define LINK               9 
  658. 06111 #define UNLINK            10 
  659. 06112 #define WAITPID           11
  660. 06113 #define CHDIR             12 
  661. 06114 #define TIME              13
  662. 06115 #define MKNOD             14 
  663. 06116 #define CHMOD             15 
  664. 06117 #define CHOWN             16 
  665. 06118 #define BRK               17
  666. 06119 #define STAT              18 
  667. 06120 #define LSEEK             19
  668. 06121 #define GETPID            20
  669. 06122 #define MOUNT             21 
  670. 06123 #define UMOUNT            22 
  671. 06124 #define SETUID            23
  672. 06125 #define GETUID            24
  673. 06126 #define STIME             25
  674. 06127 #define PTRACE            26
  675. 06128 #define ALARM             27
  676. 06129 #define FSTAT             28 
  677. 06130 #define PAUSE             29
  678. 06131 #define UTIME             30 
  679. 06132 #define ACCESS            33 
  680. 06133 #define SYNC              36 
  681. 06134 #define KILL              37
  682. 06135 #define RENAME            38
  683. 06136 #define MKDIR             39
  684. 06137 #define RMDIR             40
  685. 06138 #define DUP               41 
  686. 06139 #define PIPE              42 
  687. 06140 #define TIMES             43
  688. 06141 #define SETGID            46
  689. 06142 #define GETGID            47
  690. 06143 #define SIGNAL            48
  691. 06144 #define IOCTL             54
  692. 06145 #define FCNTL             55
  693. 06146 #define EXEC              59
  694. 06147 #define UMASK             60 
  695. 06148 #define CHROOT            61 
  696. 06149 #define SETSID            62
  697. 06150 #define GETPGRP           63
  698. 06151
  699. 06152 /* The following are not system calls, but are processed like them. */
  700. 06153 #define KSIG              64    /* kernel detected a signal */
  701. 06154 #define UNPAUSE           65    /* to MM or FS: check for EINTR */
  702. 06155 #define REVIVE            67    /* to FS: revive a sleeping process */
  703. 06156 #define TASK_REPLY        68    /* to FS: reply code from tty task */
  704. 06157
  705. 06158 /* Posix signal handling. */
  706. 06159 #define SIGACTION         71
  707. 06160 #define SIGSUSPEND        72
  708. 06161 #define SIGPENDING        73
  709. 06162 #define SIGPROCMASK       74
  710. 06163 #define SIGRETURN         75
  711. 06164
  712. 06165 #define REBOOT            76
  713. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  714. include/minix/cdrom.h    
  715. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  716. 06200 /* This file contains some structures used by the Mitsumi cdrom driver.
  717. 06201  *
  718. 06202  *  Feb 13 1995                 Author: Michel R. Prevenier 
  719. 06203  */
  720. 06204
  721. 06205 /* Index into the mss arrays */
  722. 06206 #define MINUTES 0
  723. 06207 #define SECONDS 1
  724. 06208 #define SECTOR  2
  725. 06209
  726. 06210 struct cd_play_mss
  727. 06211 {
  728. 06212         u8_t    begin_mss[3];
  729. 06213         u8_t    end_mss[3];
  730. 06214 };
  731. 06215
  732. 06216
  733. 06217 struct cd_play_track
  734. 06218 {
  735. 06219         u8_t    begin_track;
  736. 06220         u8_t    end_track;
  737. 06221 };
  738. 06222
  739. 06223
  740. 06224 struct cd_disk_info
  741. 06225 {
  742. 06226         u8_t    first_track;
  743. 06227         u8_t    last_track;
  744. 06228         u8_t    disk_length_mss[3];
  745. 06229         u8_t    first_track_mss[3];
  746. 06230 };
  747. 06231
  748. 06232
  749. 06233 struct cd_toc_entry
  750. 06234 {
  751. 06235         u8_t    control_address;
  752. 06236         u8_t    track_nr;
  753. 06237         u8_t    index_nr;
  754. 06238         u8_t    track_time_mss[3];
  755. 06239         u8_t    reserved;
  756. 06240         u8_t    position_mss[3];
  757. 06241 };
  758. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  759. include/minix/com.h    
  760. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  761. 06300 /* System calls. */
  762. 06301 #define SEND               1    /* function code for sending messages */
  763. 06302 #define RECEIVE            2    /* function code for receiving messages */
  764. 06303 #define BOTH               3    /* function code for SEND + RECEIVE */
  765. 06304 #define ANY   (NR_PROCS+100)    /* receive(ANY, buf) accepts from any source */
  766. 06305
  767. 06306 /* Task numbers, function codes and reply codes. */
  768. 06307
  769. 06308 /* The values of several task numbers depend on whether they or other tasks
  770. 06309  * are enabled.  They are defined as (PREVIOUS_TASK - ENABLE_TASK) in general.
  771. 06310  * ENABLE_TASK is either 0 or 1, so a task either gets a new number, or gets
  772. 06311  * the same number as the previous task and is further unused.
  773. 06312  * The TTY task must always have the most negative number so that it is
  774. 06313  * initialized first.  Many of the TTY function codes are shared with other
  775. 06314  * tasks.
  776. 06315  */
  777. 06316
  778. 06317 #define TTY             (DL_ETH - 1)
  779. 06318                                 /* terminal I/O class */
  780. 06319 #       define CANCEL       0   /* general req to force a task to cancel */
  781. 06320 #       define HARD_INT     2   /* fcn code for all hardware interrupts */
  782. 06321 #       define DEV_READ     3   /* fcn code for reading from tty */
  783. 06322 #       define DEV_WRITE    4   /* fcn code for writing to tty */
  784. 06323 #       define DEV_IOCTL    5   /* fcn code for ioctl */
  785. 06324 #       define DEV_OPEN     6   /* fcn code for opening tty */
  786. 06325 #       define DEV_CLOSE    7   /* fcn code for closing tty */
  787. 06326 #       define SCATTERED_IO 8   /* fcn code for multiple reads/writes */
  788. 06327 #       define TTY_SETPGRP  9   /* fcn code for setpgroup */
  789. 06328 #       define TTY_EXIT    10   /* a process group leader has exited */ 
  790. 06329 #       define OPTIONAL_IO 16   /* modifier to DEV_* codes within vector */
  791. 06330 #       define SUSPEND   -998   /* used in interrupts when tty has no data */
  792. 06331
  793. 06332 #define DL_ETH          (CDROM - ENABLE_NETWORKING)
  794. 06333                                 /* networking task */
  795. 06334
  796. 06335 /* Message type for data link layer reqests. */
  797. 06336 #       define DL_WRITE         3
  798. 06337 #       define DL_WRITEV        4
  799. 06338 #       define DL_READ          5
  800. 06339 #       define DL_READV         6
  801. 06340 #       define DL_INIT          7
  802. 06341 #       define DL_STOP          8
  803. 06342 #       define DL_GETSTAT       9
  804. 06343
  805. 06344 /* Message type for data link layer replies. */
  806. 06345 #       define DL_INIT_REPLY    20
  807. 06346 #       define DL_TASK_REPLY    21
  808. 06347
  809. 06348 #       define DL_PORT          m2_i1
  810. 06349 #       define DL_PROC          m2_i2
  811. 06350 #       define DL_COUNT         m2_i3
  812. 06351 #       define DL_MODE          m2_l1
  813. 06352 #       define DL_CLCK          m2_l2
  814. 06353 #       define DL_ADDR          m2_p1
  815. 06354 #       define DL_STAT          m2_l1
  816. 06355
  817. 06356 /* Bits in 'DL_STAT' field of DL replies. */
  818. 06357 #       define DL_PACK_SEND     0x01
  819. 06358 #       define DL_PACK_RECV     0x02
  820. 06359 #       define DL_READ_IP       0x04
  821. 06360
  822. 06361 /* Bits in 'DL_MODE' field of DL requests. */
  823. 06362 #       define DL_NOMODE        0x0
  824. 06363 #       define DL_PROMISC_REQ   0x2
  825. 06364 #       define DL_MULTI_REQ     0x4
  826. 06365 #       define DL_BROAD_REQ     0x8
  827. 06366
  828. 06367 #       define NW_OPEN          DEV_OPEN
  829. 06368 #       define NW_CLOSE         DEV_CLOSE
  830. 06369 #       define NW_READ          DEV_READ
  831. 06370 #       define NW_WRITE         DEV_WRITE
  832. 06371 #       define NW_IOCTL         DEV_IOCTL
  833. 06372 #       define NW_CANCEL        CANCEL
  834. 06373
  835. 06374 #define CDROM           (AUDIO - ENABLE_CDROM)
  836. 06375                                 /* cd-rom device task */
  837. 06376
  838. 06377 #define AUDIO           (MIXER - ENABLE_AUDIO)
  839. 06378 #define MIXER           (SCSI - ENABLE_AUDIO)
  840. 06379                                 /* audio & mixer device tasks */
  841. 06380
  842. 06381 #define SCSI            (WINCHESTER - ENABLE_SCSI)
  843. 06382                                 /* scsi device task */
  844. 06383
  845. 06384 #define WINCHESTER      (SYN_ALRM_TASK - ENABLE_WINI)
  846. 06385                                 /* winchester (hard) disk class */
  847. 06386
  848. 06387 #define SYN_ALRM_TASK     -8    /* task to send CLOCK_INT messages */
  849. 06388
  850. 06389 #define IDLE              -7    /* task to run when there's nothing to run */
  851. 06390
  852. 06391 #define PRINTER           -6    /* printer I/O class */
  853. 06392
  854. 06393 #define FLOPPY            -5    /* floppy disk class */
  855. 06394
  856. 06395 #define MEM               -4    /* /dev/ram, /dev/(k)mem and /dev/null class */
  857. 06396 #       define NULL_MAJOR  1    /* major device for /dev/null */
  858. 06397 #       define RAM_DEV     0    /* minor device for /dev/ram */
  859. 06398 #       define MEM_DEV     1    /* minor device for /dev/mem */
  860. 06399 #       define KMEM_DEV    2    /* minor device for /dev/kmem */
  861. 06400 #       define NULL_DEV    3    /* minor device for /dev/null */
  862. 06401
  863. 06402 #define CLOCK             -3    /* clock class */
  864. 06403 #       define SET_ALARM   1    /* fcn code to CLOCK, set up alarm */
  865. 06404 #       define GET_TIME    3    /* fcn code to CLOCK, get real time */
  866. 06405 #       define SET_TIME    4    /* fcn code to CLOCK, set real time */
  867. 06406 #       define GET_UPTIME  5    /* fcn code to CLOCK, get uptime */
  868. 06407 #       define SET_SYNC_AL 6    /* fcn code to CLOCK, set up alarm which */
  869. 06408                                 /* times out with a send */
  870. 06409 #       define REAL_TIME   1    /* reply from CLOCK: here is real time */
  871. 06410 #       define CLOCK_INT   HARD_INT
  872. 06411                                 /* this code will only be sent by */
  873. 06412                                 /* SYN_ALRM_TASK to a task that requested a */
  874. 06413                                 /* synchronous alarm */
  875. 06414
  876. 06415 #define SYSTASK           -2    /* internal functions */
  877. 06416 #       define SYS_XIT        1 /* fcn code for sys_xit(parent, proc) */
  878. 06417 #       define SYS_GETSP      2 /* fcn code for sys_sp(proc, &new_sp) */
  879. 06418 #       define SYS_OLDSIG     3 /* fcn code for sys_oldsig(proc, sig) */
  880. 06419 #       define SYS_FORK       4 /* fcn code for sys_fork(parent, child) */
  881. 06420 #       define SYS_NEWMAP     5 /* fcn code for sys_newmap(procno, map_ptr) */
  882. 06421 #       define SYS_COPY       6 /* fcn code for sys_copy(ptr) */
  883. 06422 #       define SYS_EXEC       7 /* fcn code for sys_exec(procno, new_sp) */
  884. 06423 #       define SYS_TIMES      8 /* fcn code for sys_times(procno, bufptr) */
  885. 06424 #       define SYS_ABORT      9 /* fcn code for sys_abort() */
  886. 06425 #       define SYS_FRESH     10 /* fcn code for sys_fresh()  (Atari only) */
  887. 06426 #       define SYS_KILL      11 /* fcn code for sys_kill(proc, sig) */
  888. 06427 #       define SYS_GBOOT     12 /* fcn code for sys_gboot(procno, bootptr) */
  889. 06428 #       define SYS_UMAP      13 /* fcn code for sys_umap(procno, etc) */
  890. 06429 #       define SYS_MEM       14 /* fcn code for sys_mem() */
  891. 06430 #       define SYS_TRACE     15 /* fcn code for sys_trace(req,pid,addr,data) */
  892. 06431 #       define SYS_VCOPY     16 /* fnc code for sys_vcopy(src_proc, dest_proc,
  893. 06432                                    vcopy_s, vcopy_ptr) */
  894. 06433 #       define SYS_SENDSIG   17 /* fcn code for sys_sendsig(&sigmsg) */
  895. 06434 #       define SYS_SIGRETURN 18 /* fcn code for sys_sigreturn(&sigmsg) */
  896. 06435 #       define SYS_ENDSIG    19 /* fcn code for sys_endsig(procno) */
  897. 06436 #       define SYS_GETMAP    20 /* fcn code for sys_getmap(procno, map_ptr) */
  898. 06437
  899. 06438 #define HARDWARE          -1    /* used as source on interrupt generated msgs*/
  900. 06439
  901. 06440 /* Names of message fields for messages to CLOCK task. */
  902. 06441 #define DELTA_TICKS    m6_l1    /* alarm interval in clock ticks */
  903. 06442 #define FUNC_TO_CALL   m6_f1    /* pointer to function to call */
  904. 06443 #define NEW_TIME       m6_l1    /* value to set clock to (SET_TIME) */
  905. 06444 #define CLOCK_PROC_NR  m6_i1    /* which proc (or task) wants the alarm? */
  906. 06445 #define SECONDS_LEFT   m6_l1    /* how many seconds were remaining */
  907. 06446
  908. 06447 /* Names of message fields used for messages to block and character tasks. */
  909. 06448 #define DEVICE         m2_i1    /* major-minor device */
  910. 06449 #define PROC_NR        m2_i2    /* which (proc) wants I/O? */
  911. 06450 #define COUNT          m2_i3    /* how many bytes to transfer */
  912. 06451 #define REQUEST        m2_i3    /* ioctl request code */
  913. 06452 #define POSITION       m2_l1    /* file offset */
  914. 06453 #define ADDRESS        m2_p1    /* core buffer address */
  915. 06454
  916. 06455 /* Names of message fields for messages to TTY task. */
  917. 06456 #define TTY_LINE       DEVICE   /* message parameter: terminal line */
  918. 06457 #define TTY_REQUEST    COUNT    /* message parameter: ioctl request code */
  919. 06458 #define TTY_SPEK       POSITION /* message parameter: ioctl speed, erasing */
  920. 06459 #define TTY_FLAGS      m2_l2    /* message parameter: ioctl tty mode */
  921. 06460 #define TTY_PGRP       m2_i3    /* message parameter: process group */  
  922. 06461
  923. 06462 /* Names of the message fields for QIC 02 status reply from tape driver */
  924. 06463 #define TAPE_STAT0      m2_l1
  925. 06464 #define TAPE_STAT1      m2_l2
  926. 06465
  927. 06466 /* Names of messages fields used in reply messages from tasks. */
  928. 06467 #define REP_PROC_NR    m2_i1    /* # of proc on whose behalf I/O was done */
  929. 06468 #define REP_STATUS     m2_i2    /* bytes transferred or error number */
  930. 06469
  931. 06470 /* Names of fields for copy message to SYSTASK. */
  932. 06471 #define SRC_SPACE      m5_c1    /* T or D space (stack is also D) */
  933. 06472 #define SRC_PROC_NR    m5_i1    /* process to copy from */
  934. 06473 #define SRC_BUFFER     m5_l1    /* virtual address where data come from */
  935. 06474 #define DST_SPACE      m5_c2    /* T or D space (stack is also D) */
  936. 06475 #define DST_PROC_NR    m5_i2    /* process to copy to */
  937. 06476 #define DST_BUFFER     m5_l2    /* virtual address where data go to */
  938. 06477 #define COPY_BYTES     m5_l3    /* number of bytes to copy */
  939. 06478
  940. 06479 /* Field names for accounting, SYSTASK and miscellaneous. */
  941. 06480 #define USER_TIME      m4_l1    /* user time consumed by process */
  942. 06481 #define SYSTEM_TIME    m4_l2    /* system time consumed by process */
  943. 06482 #define CHILD_UTIME    m4_l3    /* user time consumed by process' children */
  944. 06483 #define CHILD_STIME    m4_l4    /* sys time consumed by process' children */
  945. 06484 #define BOOT_TICKS     m4_l5    /* number of clock ticks since boot time */
  946. 06485
  947. 06486 #define PROC1          m1_i1    /* indicates a process */
  948. 06487 #define PROC2          m1_i2    /* indicates a process */
  949. 06488 #define PID            m1_i3    /* process id passed from MM to kernel */
  950. 06489 #define STACK_PTR      m1_p1    /* used for stack ptr in sys_exec, sys_getsp */
  951. 06490 #define PR             m6_i1    /* process number for sys_sig */
  952. 06491 #define SIGNUM         m6_i2    /* signal number for sys_sig */
  953. 06492 #define FUNC           m6_f1    /* function pointer for sys_sig */
  954. 06493 #define MEM_PTR        m1_p1    /* tells where memory map is for sys_newmap */
  955. 06494 #define NAME_PTR       m1_p2    /* tells where program name is for dmp */
  956. 06495 #define IP_PTR         m1_p3    /* initial value for ip after exec */
  957. 06496 #define SIG_PROC       m2_i1    /* process number for inform */
  958. 06497 #define SIG_MAP        m2_l1    /* used by kernel for passing signal bit map */
  959. 06498 #define SIG_MSG_PTR    m1_i1    /* pointer to info to build sig catch stack */
  960. 06499 #define SIG_CTXT_PTR   m1_p1    /* pointer to info to restore signal context */
  961. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  962. include/minix/config.h    
  963. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  964. 06500 #ifndef _CONFIG_H
  965. 06501 #define _CONFIG_H
  966. 06502
  967. 06503 /* Minix release and version numbers. */
  968. 06504 #define OS_RELEASE "2.0"
  969. 06505 #define OS_VERSION "0"
  970. 06506
  971. 06507 /* This file sets configuration parameters for the MINIX kernel, FS, and MM.
  972. 06508  * It is divided up into two main sections.  The first section contains
  973. 06509  * user-settable parameters.  In the second section, various internal system
  974. 06510  * parameters are set based on the user-settable parameters.
  975. 06511  */
  976. 06512
  977. 06513 /*===========================================================================*
  978. 06514  *              This section contains user-settable parameters               *
  979. 06515  *===========================================================================*/
  980. 06516 #define MACHINE       IBM_PC    /* Must be one of the names listed below */
  981. 06517
  982. 06518 #define IBM_PC             1    /* any  8088 or 80x86-based system */
  983. 06519 #define SUN_4             40    /* any Sun SPARC-based system */
  984. 06520 #define SUN_4_60          40    /* Sun-4/60 (aka SparcStation 1 or Campus) */
  985. 06521 #define ATARI             60    /* ATARI ST/STe/TT (68000/68030) */
  986. 06522 #define AMIGA             61    /* Commodore Amiga (68000) */
  987. 06523 #define MACINTOSH         62    /* Apple Macintosh (68000) */
  988. 06524
  989. 06525 /* Word size in bytes (a constant equal to sizeof(int)). */
  990. 06526 #if __ACK__
  991. 06527 #define _WORD_SIZE      _EM_WSIZE
  992. 06528 #endif
  993. 06529
  994. 06530
  995. 06531 /* If ROBUST is set to 1, writes of i-node, directory, and indirect blocks
  996. 06532  * from the cache happen as soon as the blocks are modified.  This gives a more
  997. 06533  * robust, but slower, file system.  If it is set to 0, these blocks are not
  998. 06534  * given any special treatment, which may cause problems if the system crashes.
  999. 06535  */
  1000. 06536 #define ROBUST             0    /* 0 for speed, 1 for robustness */
  1001. 06537
  1002. 06538 /* Number of slots in the process table for user processes. */
  1003. 06539 #define NR_PROCS          32
  1004. 06540
  1005. 06541 /* The buffer cache should be made as large as you can afford. */
  1006. 06542 #if (MACHINE == IBM_PC && _WORD_SIZE == 2)
  1007. 06543 #define NR_BUFS           40    /* # blocks in the buffer cache */
  1008. 06544 #define NR_BUF_HASH       64    /* size of buf hash table; MUST BE POWER OF 2*/
  1009. 06545 #endif
  1010. 06546
  1011. 06547 #if (MACHINE == IBM_PC && _WORD_SIZE == 4)
  1012. 06548 #define NR_BUFS         1024    /* # blocks in the buffer cache */
  1013. 06549 #define NR_BUF_HASH     2048    /* size of buf hash table; MUST BE POWER OF 2*/
  1014. 06550 #endif
  1015. 06551
  1016. 06552 #if (MACHINE == SUN_4_60)
  1017. 06553 #define NR_BUFS          512    /* # blocks in the buffer cache (<=1536) */
  1018. 06554 #define NR_BUF_HASH      512    /* size of buf hash table; MUST BE POWER OF 2*/
  1019. 06555 #endif
  1020. 06556
  1021. 06557 #if (MACHINE == ATARI)
  1022. 06558 #define NR_BUFS         1536    /* # blocks in the buffer cache (<=1536) */
  1023. 06559 #define NR_BUF_HASH     2048    /* size of buf hash table; MUST BE POWER OF 2*/
  1024. 06560 #endif
  1025. 06561
  1026. 06562 /* Defines for kernel configuration. */
  1027. 06563 #define AUTO_BIOS          0    /* xt_wini.c - use Western's autoconfig BIOS */
  1028. 06564 #define LINEWRAP           1    /* console.c - wrap lines at column 80 */
  1029. 06565 #define ALLOW_GAP_MESSAGES 1    /* proc.c - allow messages in the gap between
  1030. 06566                                  * the end of bss and lowest stack address */
  1031. 06567
  1032. 06568 /* Enable or disable the second level file system cache on the RAM disk. */
  1033. 06569 #define ENABLE_CACHE2      1
  1034. 06570
  1035. 06571 /* Include or exclude device drivers.  Set to 1 to include, 0 to exclude. */
  1036. 06572 #define ENABLE_NETWORKING  1    /* enable TCP/IP code */
  1037. 06573 #define ENABLE_AT_WINI     1    /* enable AT winchester driver */
  1038. 06574 #define ENABLE_BIOS_WINI   1    /* enable BIOS winchester driver */
  1039. 06575 #define ENABLE_ESDI_WINI   1    /* enable ESDI winchester driver */
  1040. 06576 #define ENABLE_XT_WINI     0    /* enable XT winchester driver */
  1041. 06577 #define ENABLE_ADAPTEC_SCSI 1   /* enable ADAPTEC SCSI driver */
  1042. 06578 #define ENABLE_MITSUMI_CDROM 0  /* enable Mitsumi CD-ROM driver */
  1043. 06579 #define ENABLE_SB_AUDIO    0    /* enable Soundblaster audio driver */
  1044. 06580
  1045. 06581 /* DMA_SECTORS may be increased to speed up DMA based drivers. */
  1046. 06582 #define DMA_SECTORS        1    /* DMA buffer size (must be >= 1) */
  1047. 06583
  1048. 06584 /* Include or exclude backwards compatibility code. */
  1049. 06585 #define ENABLE_BINCOMPAT   0    /* for binaries using obsolete calls */
  1050. 06586 #define ENABLE_SRCCOMPAT   0    /* for sources using obsolete calls */
  1051. 06587
  1052. 06588 /* Determine which device to use for pipes. */
  1053. 06589 #define PIPE_DEV    ROOT_DEV    /* put pipes on root device */
  1054. 06590
  1055. 06591 /* NR_CONS, NR_RS_LINES, and NR_PTYS determine the number of terminals the
  1056. 06592  * system can handle.
  1057. 06593  */
  1058. 06594 #define NR_CONS            2    /* # system consoles (1 to 8) */
  1059. 06595 #define NR_RS_LINES        2    /* # rs232 terminals (0, 1, or 2) */
  1060. 06596 #define NR_PTYS            4    /* # pseudo terminals (0 to 64) */
  1061. 06597
  1062. 06598 #if (MACHINE == ATARI)
  1063. 06599 /* The next define says if you have an ATARI ST or TT */
  1064. 06600 #define ATARI_TYPE        TT
  1065. 06601 #define ST                 1    /* all ST's and Mega ST's */
  1066. 06602 #define STE                2    /* all STe and Mega STe's */
  1067. 06603 #define TT                 3
  1068. 06604
  1069. 06605 /* if SCREEN is set to 1 graphical screen operations are possible */
  1070. 06606 #define SCREEN             1    
  1071. 06607
  1072. 06608 /* This define says whether the keyboard generates VT100 or IBM_PC escapes. */
  1073. 06609 #define KEYBOARD       VT100    /* either VT100 or IBM_PC */
  1074. 06610 #define VT100            100
  1075. 06611
  1076. 06612 /* The next define determines the kind of partitioning. */
  1077. 06613 #define PARTITIONING   SUPRA    /* one of the following or ATARI */
  1078. 06614 #define SUPRA              1    /*ICD, SUPRA and BMS are all the same */
  1079. 06615 #define BMS                1
  1080. 06616 #define ICD                1
  1081. 06617 #define CBHD               2
  1082. 06618 #define EICKMANN           3
  1083. 06619
  1084. 06620 /* Define the number of hard disk drives on your system. */
  1085. 06621 #define NR_ACSI_DRIVES     3    /* typically 0 or 1 */
  1086. 06622 #define NR_SCSI_DRIVES     1    /* typically 0 (ST, STe) or 1 (TT) */
  1087. 06623
  1088. 06624 /* Some systems need to have a little delay after each winchester
  1089. 06625  * commands. These systems need FAST_DISK set to 0. Other disks do not
  1090. 06626  * need this delay, and thus can have FAST_DISK set to 1 to avoid this delay.
  1091. 06627  */
  1092. 06628 #define FAST_DISK          1    /* 0 or 1 */
  1093. 06629
  1094. 06630 /* Note: if you want to make your kernel smaller, you can set NR_FD_DRIVES
  1095. 06631  * to 0. You will still be able to boot minix.img from floppy. However, you
  1096. 06632  * MUST fetch both the root and usr filesystem from a hard disk
  1097. 06633  */
  1098. 06634
  1099. 06635 /* Define the number of floppy disk drives on your system. */
  1100. 06636 #define NR_FD_DRIVES       1    /* 0, 1, 2 */
  1101. 06637
  1102. 06638 /* This configuration define controls parallel printer code. */
  1103. 06639 #define PAR_PRINTER        1    /* disable (0) / enable (1) parallel printer */
  1104. 06640
  1105. 06641 /* This configuration define controls disk controller clock code. */
  1106. 06642 #define HD_CLOCK           1    /* disable (0) / enable (1) hard disk clock */
  1107. 06643
  1108. 06644 #endif
  1109. 06645
  1110. 06646
  1111. 06647 /*===========================================================================*
  1112. 06648  *      There are no user-settable parameters after this line                *
  1113. 06649  *===========================================================================*/
  1114. 06650 /* Set the CHIP type based on the machine selected. The symbol CHIP is actually
  1115. 06651  * indicative of more than just the CPU.  For example, machines for which
  1116. 06652  * CHIP == INTEL are expected to have 8259A interrrupt controllers and the
  1117. 06653  * other properties of IBM PC/XT/AT/386 types machines in general. */
  1118. 06654 #define INTEL             1     /* CHIP type for PC, XT, AT, 386 and clones */
  1119. 06655 #define M68000            2     /* CHIP type for Atari, Amiga, Macintosh    */
  1120. 06656 #define SPARC             3     /* CHIP type for SUN-4 (e.g. SPARCstation)  */
  1121. 06657
  1122. 06658 /* Set the FP_FORMAT type based on the machine selected, either hw or sw    */
  1123. 06659 #define FP_NONE           0     /* no floating point support                */
  1124. 06660 #define FP_IEEE           1     /* conform IEEE floating point standard     */
  1125. 06661
  1126. 06662 #if (MACHINE == IBM_PC)
  1127. 06663 #define CHIP          INTEL
  1128. 06664 #define SHADOWING         0
  1129. 06665 #define ENABLE_WINI     (ENABLE_AT_WINI || ENABLE_BIOS_WINI || 
  1130. 06666                         ENABLE_ESDI_WINI || ENABLE_XT_WINI)
  1131. 06667 #define ENABLE_SCSI     (ENABLE_ADAPTEC_SCSI)
  1132. 06668 #define ENABLE_CDROM    (ENABLE_MITSUMI_CDROM)
  1133. 06669 #define ENABLE_AUDIO    (ENABLE_SB_AUDIO)
  1134. 06670 #endif
  1135. 06671
  1136. 06672 #if (MACHINE == ATARI) || (MACHINE == AMIGA) || (MACHINE == MACINTOSH)
  1137. 06673 #define CHIP         M68000
  1138. 06674 #define SHADOWING         1
  1139. 06675 #endif
  1140. 06676
  1141. 06677 #if (MACHINE == SUN_4) || (MACHINE == SUN_4_60)
  1142. 06678 #define CHIP          SPARC
  1143. 06679 #define FP_FORMAT   FP_IEEE
  1144. 06680 #define SHADOWING         0
  1145. 06681 #endif
  1146. 06682
  1147. 06683 #if (MACHINE == ATARI) || (MACHINE == SUN_4)
  1148. 06684 #define ASKDEV            1     /* ask for boot device */
  1149. 06685 #define FASTLOAD          1     /* use multiple block transfers to init ram */
  1150. 06686 #endif
  1151. 06687
  1152. 06688 #if (ATARI_TYPE == TT) /* and all other 68030's */
  1153. 06689 #define FPP
  1154. 06690 #undef SHADOWING
  1155. 06691 #define SHADOWING 0
  1156. 06692 #endif
  1157. 06693
  1158. 06694 #ifndef FP_FORMAT
  1159. 06695 #define FP_FORMAT   FP_NONE
  1160. 06696 #endif
  1161. 06697
  1162. 06698 /* The file buf.h uses MAYBE_WRITE_IMMED. */
  1163. 06699 #if ROBUST
  1164. 06700 #define MAYBE_WRITE_IMMED  WRITE_IMMED  /* slower but perhaps safer */
  1165. 06701 #else
  1166. 06702 #define MAYBE_WRITE_IMMED 0             /* faster */
  1167. 06703 #endif
  1168. 06704
  1169. 06705 #ifndef MACHINE
  1170. 06706 error "In <minix/config.h> please define MACHINE"
  1171. 06707 #endif
  1172. 06708
  1173. 06709 #ifndef CHIP
  1174. 06710 error "In <minix/config.h> please define MACHINE to have a legal value"
  1175. 06711 #endif
  1176. 06712
  1177. 06713 #if (MACHINE == 0)
  1178. 06714 error "MACHINE has incorrect value (0)"
  1179. 06715 #endif
  1180. 06716
  1181. 06717 #endif /* _CONFIG_H */
  1182. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1183. include/minix/const.h    
  1184. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1185. 06800 /* Copyright (C) 1997 by Prentice-Hall, Inc.  Permission is hereby granted
  1186. 06801  * to redistribute the binary and source programs of this system for
  1187. 06802  * educational or research purposes.  For other use, written permission from
  1188. 06803  * Prentice-Hall is required.  
  1189. 06804  */
  1190. 06805
  1191. 06806 #define EXTERN        extern    /* used in *.h files */
  1192. 06807 #define PRIVATE       static    /* PRIVATE x limits the scope of x */
  1193. 06808 #define PUBLIC                  /* PUBLIC is the opposite of PRIVATE */
  1194. 06809 #define FORWARD       static    /* some compilers require this to be 'static'*/
  1195. 06810
  1196. 06811 #define TRUE               1    /* used for turning integers into Booleans */
  1197. 06812 #define FALSE              0    /* used for turning integers into Booleans */
  1198. 06813
  1199. 06814 #define HZ                60    /* clock freq (software settable on IBM-PC) */
  1200. 06815 #define BLOCK_SIZE      1024    /* # bytes in a disk block */
  1201. 06816 #define SUPER_USER (uid_t) 0    /* uid_t of superuser */
  1202. 06817
  1203. 06818 #define MAJOR              8    /* major device = (dev>>MAJOR) & 0377 */
  1204. 06819 #define MINOR              0    /* minor device = (dev>>MINOR) & 0377 */
  1205. 06820
  1206. 06821 #define NULL     ((void *)0)    /* null pointer */
  1207. 06822 #define CPVEC_NR          16    /* max # of entries in a SYS_VCOPY request */
  1208. 06823 #define NR_IOREQS       MIN(NR_BUFS, 64)
  1209. 06824                                 /* maximum number of entries in an iorequest */
  1210. 06825
  1211. 06826 #define NR_SEGS            3    /* # segments per process */
  1212. 06827 #define T                  0    /* proc[i].mem_map[T] is for text */
  1213. 06828 #define D                  1    /* proc[i].mem_map[D] is for data */
  1214. 06829 #define S                  2    /* proc[i].mem_map[S] is for stack */
  1215. 06830
  1216. 06831 /* Process numbers of some important processes. */
  1217. 06832 #define MM_PROC_NR         0    /* process number of memory manager */
  1218. 06833 #define FS_PROC_NR         1    /* process number of file system */
  1219. 06834 #define INET_PROC_NR       2    /* process number of the TCP/IP server */
  1220. 06835 #define INIT_PROC_NR    (INET_PROC_NR + ENABLE_NETWORKING)
  1221. 06836                                 /* init -- the process that goes multiuser */
  1222. 06837 #define LOW_USER        (INET_PROC_NR + ENABLE_NETWORKING)
  1223. 06838                                 /* first user not part of operating system */
  1224. 06839
  1225. 06840 /* Miscellaneous */
  1226. 06841 #define BYTE            0377    /* mask for 8 bits */
  1227. 06842 #define READING            0    /* copy data to user */
  1228. 06843 #define WRITING            1    /* copy data from user */
  1229. 06844 #define NO_NUM        0x8000    /* used as numerical argument to panic() */
  1230. 06845 #define NIL_PTR   (char *) 0    /* generally useful expression */
  1231. 06846 #define HAVE_SCATTERED_IO  1    /* scattered I/O is now standard */
  1232. 06847
  1233. 06848 /* Macros. */
  1234. 06849 #define MAX(a, b)   ((a) > (b) ? (a) : (b))
  1235. 06850 #define MIN(a, b)   ((a) < (b) ? (a) : (b))
  1236. 06851
  1237. 06852 /* Number of tasks. */
  1238. 06853 #define NR_TASKS        (9 + ENABLE_WINI + ENABLE_SCSI + ENABLE_CDROM 
  1239. 06854                         + ENABLE_NETWORKING + 2 * ENABLE_AUDIO)
  1240. 06855
  1241. 06856 /* Memory is allocated in clicks. */
  1242. 06857 #if (CHIP == INTEL)
  1243. 06858 #define CLICK_SIZE       256    /* unit in which memory is allocated */
  1244. 06859 #define CLICK_SHIFT        8    /* log2 of CLICK_SIZE */
  1245. 06860 #endif
  1246. 06861
  1247. 06862 #if (CHIP == SPARC) || (CHIP == M68000)
  1248. 06863 #define CLICK_SIZE      4096    /* unit in which memory is alocated */
  1249. 06864 #define CLICK_SHIFT       12    /* 2log of CLICK_SIZE */
  1250. 06865 #endif
  1251. 06866
  1252. 06867 #define click_to_round_k(n) 
  1253. 06868         ((unsigned) ((((unsigned long) (n) << CLICK_SHIFT) + 512) / 1024))
  1254. 06869 #if CLICK_SIZE < 1024
  1255. 06870 #define k_to_click(n) ((n) * (1024 / CLICK_SIZE))
  1256. 06871 #else
  1257. 06872 #define k_to_click(n) ((n) / (CLICK_SIZE / 1024))
  1258. 06873 #endif
  1259. 06874
  1260. 06875 #define ABS             -999    /* this process means absolute memory */
  1261. 06876
  1262. 06877 /* Flag bits for i_mode in the inode. */
  1263. 06878 #define I_TYPE          0170000 /* this field gives inode type */
  1264. 06879 #define I_REGULAR       0100000 /* regular file, not dir or special */
  1265. 06880 #define I_BLOCK_SPECIAL 0060000 /* block special file */
  1266. 06881 #define I_DIRECTORY     0040000 /* file is a directory */
  1267. 06882 #define I_CHAR_SPECIAL  0020000 /* character special file */
  1268. 06883 #define I_NAMED_PIPE    0010000 /* named pipe (FIFO) */
  1269. 06884 #define I_SET_UID_BIT   0004000 /* set effective uid_t on exec */
  1270. 06885 #define I_SET_GID_BIT   0002000 /* set effective gid_t on exec */
  1271. 06886 #define ALL_MODES       0006777 /* all bits for user, group and others */
  1272. 06887 #define RWX_MODES       0000777 /* mode bits for RWX only */
  1273. 06888 #define R_BIT           0000004 /* Rwx protection bit */
  1274. 06889 #define W_BIT           0000002 /* rWx protection bit */
  1275. 06890 #define X_BIT           0000001 /* rwX protection bit */
  1276. 06891 #define I_NOT_ALLOC     0000000 /* this inode is free */
  1277. 06892
  1278. 06893 /* Some limits. */
  1279. 06894 #define MAX_BLOCK_NR  ((block_t) 077777777)     /* largest block number */
  1280. 06895 #define HIGHEST_ZONE   ((zone_t) 077777777)     /* largest zone number */
  1281. 06896 #define MAX_INODE_NR      ((ino_t) 0177777)     /* largest inode number */
  1282. 06897 #define MAX_FILE_POS ((off_t) 037777777777)     /* largest legal file offset */
  1283. 06898
  1284. 06899 #define NO_BLOCK              ((block_t) 0)     /* absence of a block number */
  1285. 06900 #define NO_ENTRY                ((ino_t) 0)     /* absence of a dir entry */
  1286. 06901 #define NO_ZONE                ((zone_t) 0)     /* absence of a zone number */
  1287. 06902 #define NO_DEV                  ((dev_t) 0)     /* absence of a device numb */
  1288. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1289. include/minix/dl_eth.h    
  1290. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1291. 07000 /* The eth_stat struct is used in a DL_GETSTAT request the the ehw_task. */
  1292. 07001
  1293. 07002 #ifndef _ETH_HW_H
  1294. 07003 #define _ETH_HW_H
  1295. 07004
  1296. 07005 typedef struct eth_stat
  1297. 07006 {
  1298. 07007   unsigned long ets_recvErr,    /* # receive errors */
  1299. 07008         ets_sendErr,            /* # send error */
  1300. 07009         ets_OVW,                /* # buffer overwrite warnings */
  1301. 07010         ets_CRCerr,             /* # crc errors of read */
  1302. 07011         ets_frameAll,           /* # frames not alligned (# bits % 8 != 0) */
  1303. 07012         ets_missedP,            /* # packets missed due to slow processing */
  1304. 07013         ets_packetR,            /* # packets received */
  1305. 07014         ets_packetT,            /* # packets transmitted */
  1306. 07015         ets_transDef,           /* # transmission defered (Tx was busy) */
  1307. 07016         ets_collision,          /* # collissions */
  1308. 07017         ets_transAb,            /* # Tx aborted due to excess collisions */
  1309. 07018         ets_carrSense,          /* # carrier sense lost */
  1310. 07019         ets_fifoUnder,          /* # FIFO underruns (processor too busy) */
  1311. 07020         ets_fifoOver,           /* # FIFO overruns (processor too busy) */
  1312. 07021         ets_CDheartbeat,        /* # times unable to transmit collision sig*/
  1313. 07022         ets_OWC;                /* # times out of window collision */
  1314. 07023 } eth_stat_t;
  1315. 07024
  1316. 07025 #endif /* _ETH_HW_H */
  1317. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1318. include/minix/fslib.h    
  1319. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1320. 07100 _PROTOTYPE( int bitmapsize, (bit_t _nr_bits)                            );
  1321. 07101 _PROTOTYPE( unsigned conv2, (int _norm, int _w)                         );
  1322. 07102 _PROTOTYPE( long conv4, (int _norm, long _x)                            );
  1323. 07103 _PROTOTYPE( void conv_inode, (struct inode *_rip, d1_inode *_dip,
  1324. 07104                              d2_inode *_dip2, int _rw_flag, int _magic) );
  1325. 07105 _PROTOTYPE( void old_icopy, (struct inode *_rip, d1_inode *_dip,
  1326. 07106                                               int _direction, int _norm));
  1327. 07107 _PROTOTYPE( void new_icopy, (struct inode *_rip, d2_inode *_dip,
  1328. 07108                                               int _direction, int _norm));
  1329. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1330. include/minix/jmp_buf.h    
  1331. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1332. 07200 /* This file is intended for use by assembly language programs that
  1333. 07201  * need to manipulate a jmp_buf.  It may only be used by those systems
  1334. 07202  * for which a jmp_buf is identical to a struct sigcontext.
  1335. 07203  */
  1336. 07204
  1337. 07205 #ifndef _JMP_BUF_H
  1338. 07206 #define _JMP_BUF_H
  1339. 07207
  1340. 07208 #if !defined(CHIP)
  1341. 07209 #include "error, configuration is not known"
  1342. 07210 #endif
  1343. 07211
  1344. 07212 #if (CHIP == INTEL)
  1345. 07213 #if _WORD_SIZE == 4
  1346. 07214 #define JB_FLAGS         0
  1347. 07215 #define JB_MASK          4
  1348. 07216 #define JB_GS            8
  1349. 07217 #define JB_FS           10
  1350. 07218 #define JB_ES           12
  1351. 07219 #define JB_DS           14
  1352. 07220 #define JB_DI           16
  1353. 07221 #define JB_SI           20
  1354. 07222 #define JB_BP           24
  1355. 07223 #define JB_ST           28
  1356. 07224 #define JB_BX           32
  1357. 07225 #define JB_DX           36
  1358. 07226 #define JB_CX           40
  1359. 07227 #define JB_AX           44
  1360. 07228 #define JB_RETADR       48
  1361. 07229 #define JB_IP           52
  1362. 07230 #define JB_CS           56
  1363. 07231 #define JB_PSW          60
  1364. 07232 #define JB_SP           64
  1365. 07233 #define JB_SS           68
  1366. 07234 #else /* _WORD_SIZE == 2 */
  1367. 07235 #define JB_FLAGS         0
  1368. 07236 #define JB_MASK          2
  1369. 07237 #define JB_ES            6
  1370. 07238 #define JB_DS            8 
  1371. 07239 #define JB_DI           10
  1372. 07240 #define JB_SI           12
  1373. 07241 #define JB_BP           14
  1374. 07242 #define JB_ST           16
  1375. 07243 #define JB_BX           18
  1376. 07244 #define JB_DX           20
  1377. 07245 #define JB_CX           22
  1378. 07246 #define JB_AX           24
  1379. 07247 #define JB_RETADR       26
  1380. 07248 #define JB_IP           28
  1381. 07249 #define JB_CS           30
  1382. 07250 #define JB_PSW          32
  1383. 07251 #define JB_SP           34
  1384. 07252 #define JB_SS           36
  1385. 07253 #endif /* _WORD_SIZE == 2 */
  1386. 07254 #else /* !(CHIP == INTEL) */
  1387. 07255 #if (CHIP == M68000)
  1388. 07256 #define JB_FLAGS         0
  1389. 07257 #define JB_MASK          2
  1390. 07258 #define JB_RETREG        6
  1391. 07259 #define JB_D1           10
  1392. 07260 #define JB_D2           14
  1393. 07261 #define JB_D3           18
  1394. 07262 #define JB_D4           22
  1395. 07263 #define JB_D5           26
  1396. 07264 #define JB_D6           20
  1397. 07265 #define JB_D7           34
  1398. 07266 #define JB_A0           38
  1399. 07267 #define JB_A1           42
  1400. 07268 #define JB_A2           46
  1401. 07269 #define JB_A3           50
  1402. 07270 #define JB_A4           54
  1403. 07271 #define JB_A5           58
  1404. 07272 #define JB_A6           62
  1405. 07273 #define JB_SP           66
  1406. 07274 #define JB_PC           70
  1407. 07275 #define JB_PSW          74
  1408. 07276 #else /* !(CHIP == INTEL) && !(CHIP == M68000) */
  1409. 07277 #include "error, CHIP is not supported"
  1410. 07278 #endif /* (CHIP == INTEL) */
  1411. 07279
  1412. 07280 /* Defines from C headers needed in assembly code.  The headers have too
  1413. 07281  * much C stuff to used directly.
  1414. 07282  */
  1415. 07283 #define SIG_BLOCK       0       /* must agree with <signal.h> */
  1416. 07284 #define SC_SIGCONTEXT   2       /* must agree with <sys/sigcontext.h> */
  1417. 07285 #define SC_NOREGLOCALS  4       /* must agree with <sys/sigcontext.h> */
  1418. 07286 #endif /* _JMP_BUF_H */
  1419. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1420. include/minix/keymap.h    
  1421. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1422. 07300 /*      keymap.h - defines for keymapping               Author: Marcus Hampel
  1423. 07301  */
  1424. 07302 #ifndef _SYS__KEYMAP_H
  1425. 07303 #define _SYS__KEYMAP_H
  1426. 07304
  1427. 07305 #define C(c)    ((c) & 0x1F)    /* Map to control code          */
  1428. 07306 #define A(c)    ((c) | 0x80)    /* Set eight bit (ALT)          */
  1429. 07307 #define CA(c)   A(C(c))         /* Control-Alt                  */
  1430. 07308 #define L(c)    ((c) | HASCAPS) /* Add "Caps Lock has effect" attribute */
  1431. 07309
  1432. 07310 #define EXT     0x0100          /* Normal function keys         */
  1433. 07311 #define CTRL    0x0200          /* Control key                  */
  1434. 07312 #define SHIFT   0x0400          /* Shift key                    */
  1435. 07313 #define ALT     0x0800          /* Alternate key                */
  1436. 07314 #define EXTKEY  0x1000          /* extended keycode             */
  1437. 07315 #define HASCAPS 0x8000          /* Caps Lock has effect         */
  1438. 07316
  1439. 07317 /* Numeric keypad */
  1440. 07318 #define HOME    (0x01 + EXT)
  1441. 07319 #define END     (0x02 + EXT)
  1442. 07320 #define UP      (0x03 + EXT)
  1443. 07321 #define DOWN    (0x04 + EXT)
  1444. 07322 #define LEFT    (0x05 + EXT)
  1445. 07323 #define RIGHT   (0x06 + EXT)
  1446. 07324 #define PGUP    (0x07 + EXT)
  1447. 07325 #define PGDN    (0x08 + EXT)
  1448. 07326 #define MID     (0x09 + EXT)
  1449. 07327 #define NMIN    (0x0A + EXT)
  1450. 07328 #define PLUS    (0x0B + EXT)
  1451. 07329 #define INSRT   (0x0C + EXT)
  1452. 07330
  1453. 07331 /* Alt + Numeric keypad */
  1454. 07332 #define AHOME   (0x01 + ALT)
  1455. 07333 #define AEND    (0x02 + ALT)
  1456. 07334 #define AUP     (0x03 + ALT)
  1457. 07335 #define ADOWN   (0x04 + ALT)
  1458. 07336 #define ALEFT   (0x05 + ALT)
  1459. 07337 #define ARIGHT  (0x06 + ALT)
  1460. 07338 #define APGUP   (0x07 + ALT)
  1461. 07339 #define APGDN   (0x08 + ALT)
  1462. 07340 #define AMID    (0x09 + ALT)
  1463. 07341 #define ANMIN   (0x0A + ALT)
  1464. 07342 #define APLUS   (0x0B + ALT)
  1465. 07343 #define AINSRT  (0x0C + ALT)
  1466. 07344
  1467. 07345 /* Ctrl + Numeric keypad */
  1468. 07346 #define CHOME   (0x01 + CTRL)
  1469. 07347 #define CEND    (0x02 + CTRL)
  1470. 07348 #define CUP     (0x03 + CTRL)
  1471. 07349 #define CDOWN   (0x04 + CTRL)
  1472. 07350 #define CLEFT   (0x05 + CTRL)
  1473. 07351 #define CRIGHT  (0x06 + CTRL)
  1474. 07352 #define CPGUP   (0x07 + CTRL)
  1475. 07353 #define CPGDN   (0x08 + CTRL)
  1476. 07354 #define CMID    (0x09 + CTRL)
  1477. 07355 #define CNMIN   (0x0A + CTRL)
  1478. 07356 #define CPLUS   (0x0B + CTRL)
  1479. 07357 #define CINSRT  (0x0C + CTRL)
  1480. 07358
  1481. 07359 /* Lock keys */
  1482. 07360 #define CALOCK  (0x0D + EXT)    /* caps lock    */
  1483. 07361 #define NLOCK   (0x0E + EXT)    /* number lock  */
  1484. 07362 #define SLOCK   (0x0F + EXT)    /* scroll lock  */
  1485. 07363
  1486. 07364 /* Function keys */
  1487. 07365 #define F1      (0x10 + EXT)
  1488. 07366 #define F2      (0x11 + EXT)
  1489. 07367 #define F3      (0x12 + EXT)
  1490. 07368 #define F4      (0x13 + EXT)
  1491. 07369 #define F5      (0x14 + EXT)
  1492. 07370 #define F6      (0x15 + EXT)
  1493. 07371 #define F7      (0x16 + EXT)
  1494. 07372 #define F8      (0x17 + EXT)
  1495. 07373 #define F9      (0x18 + EXT)
  1496. 07374 #define F10     (0x19 + EXT)
  1497. 07375 #define F11     (0x1A + EXT)
  1498. 07376 #define F12     (0x1B + EXT)
  1499. 07377
  1500. 07378 /* Alt+Fn */
  1501. 07379 #define AF1     (0x10 + ALT)
  1502. 07380 #define AF2     (0x11 + ALT)
  1503. 07381 #define AF3     (0x12 + ALT)
  1504. 07382 #define AF4     (0x13 + ALT)
  1505. 07383 #define AF5     (0x14 + ALT)
  1506. 07384 #define AF6     (0x15 + ALT)
  1507. 07385 #define AF7     (0x16 + ALT)
  1508. 07386 #define AF8     (0x17 + ALT)
  1509. 07387 #define AF9     (0x18 + ALT)
  1510. 07388 #define AF10    (0x19 + ALT)
  1511. 07389 #define AF11    (0x1A + ALT)
  1512. 07390 #define AF12    (0x1B + ALT)
  1513. 07391
  1514. 07392 /* Ctrl+Fn */
  1515. 07393 #define CF1     (0x10 + CTRL)
  1516. 07394 #define CF2     (0x11 + CTRL)
  1517. 07395 #define CF3     (0x12 + CTRL)
  1518. 07396 #define CF4     (0x13 + CTRL)
  1519. 07397 #define CF5     (0x14 + CTRL)
  1520. 07398 #define CF6     (0x15 + CTRL)
  1521. 07399 #define CF7     (0x16 + CTRL)
  1522. 07400 #define CF8     (0x17 + CTRL)
  1523. 07401 #define CF9     (0x18 + CTRL)
  1524. 07402 #define CF10    (0x19 + CTRL)
  1525. 07403 #define CF11    (0x1A + CTRL)
  1526. 07404 #define CF12    (0x1B + CTRL)
  1527. 07405
  1528. 07406 /* Shift+Fn */
  1529. 07407 #define SF1     (0x10 + SHIFT)
  1530. 07408 #define SF2     (0x11 + SHIFT)
  1531. 07409 #define SF3     (0x12 + SHIFT)
  1532. 07410 #define SF4     (0x13 + SHIFT)
  1533. 07411 #define SF5     (0x14 + SHIFT)
  1534. 07412 #define SF6     (0x15 + SHIFT)
  1535. 07413 #define SF7     (0x16 + SHIFT)
  1536. 07414 #define SF8     (0x17 + SHIFT)
  1537. 07415 #define SF9     (0x18 + SHIFT)
  1538. 07416 #define SF10    (0x19 + SHIFT)
  1539. 07417 #define SF11    (0x1A + SHIFT)
  1540. 07418 #define SF12    (0x1B + SHIFT)
  1541. 07419
  1542. 07420 /* Alt+Shift+Fn */
  1543. 07421 #define ASF1    (0x10 + ALT + SHIFT)
  1544. 07422 #define ASF2    (0x11 + ALT + SHIFT)
  1545. 07423 #define ASF3    (0x12 + ALT + SHIFT)
  1546. 07424 #define ASF4    (0x13 + ALT + SHIFT)
  1547. 07425 #define ASF5    (0x14 + ALT + SHIFT)
  1548. 07426 #define ASF6    (0x15 + ALT + SHIFT)
  1549. 07427 #define ASF7    (0x16 + ALT + SHIFT)
  1550. 07428 #define ASF8    (0x17 + ALT + SHIFT)
  1551. 07429 #define ASF9    (0x18 + ALT + SHIFT)
  1552. 07430 #define ASF10   (0x19 + ALT + SHIFT)
  1553. 07431 #define ASF11   (0x1A + ALT + SHIFT)
  1554. 07432 #define ASF12   (0x1B + ALT + SHIFT)
  1555. 07433
  1556. 07434 #define MAP_COLS        6       /* Number of columns in keymap */
  1557. 07435 #define NR_SCAN_CODES   0x80    /* Number of scan codes (rows in keymap) */
  1558. 07436
  1559. 07437 typedef unsigned short keymap_t[NR_SCAN_CODES * MAP_COLS];
  1560. 07438
  1561. 07439 #define KEY_MAGIC       "KMAZ"  /* Magic number of keymap file */
  1562. 07440
  1563. 07441 #endif /* _SYS__KEYMAP_H */
  1564. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1565. include/minix/minlib.h    
  1566. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1567. 07500 #ifndef _MINLIB
  1568. 07501 #define _MINLIB
  1569. 07502
  1570. 07503 #ifndef _ANSI_H
  1571. 07504 #include <ansi.h>
  1572. 07505 #endif
  1573. 07506
  1574. 07507 /* Miscellaneous BSD. */
  1575. 07508 _PROTOTYPE(void swab, (char *_from, char *_to, int _count));
  1576. 07509 _PROTOTYPE(char *itoa, (int _n));
  1577. 07510 _PROTOTYPE(char *getpass, (const char *_prompt));
  1578. 07511
  1579. 07512 /* Miscellaneous MINIX. */
  1580. 07513 _PROTOTYPE(void std_err, (char *_s));
  1581. 07514 _PROTOTYPE(void prints, (const char *_s, ...));
  1582. 07515 _PROTOTYPE(int fsversion, (char *_dev, char *_prog));
  1583. 07516 _PROTOTYPE(int getprocessor, (void));
  1584. 07517 _PROTOTYPE(int load_mtab, (char *_prog_name));
  1585. 07518 _PROTOTYPE(int rewrite_mtab, (char *_prog_name));
  1586. 07519 _PROTOTYPE(int get_mtab_entry, (char *_s1, char *_s2, char *_s3, char *_s4));
  1587. 07520 _PROTOTYPE(int put_mtab_entry, (char *_s1, char *_s2, char *_s3, char *_s4));
  1588. 07521
  1589. 07522 #endif
  1590. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1591. include/minix/partition.h    
  1592. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1593. 07600 /*      minix/partition.h                               Author: Kees J. Bot
  1594. 07601  *                                                              7 Dec 1995
  1595. 07602  * Place of a partition on disk and the disk geometry,
  1596. 07603  * for use with the DIOCGETP and DIOCSETP ioctl's.
  1597. 07604  */
  1598. 07605 #ifndef _MINIX__PARTITION_H
  1599. 07606 #define _MINIX__PARTITION_H
  1600. 07607
  1601. 07608 struct partition {
  1602. 07609   u32_t base;           /* byte offset to the partition start */
  1603. 07610   u32_t size;           /* number of bytes in the partition */
  1604. 07611   unsigned cylinders;   /* disk geometry */
  1605. 07612   unsigned heads;
  1606. 07613   unsigned sectors;
  1607. 07614 };
  1608. 07615 #endif /* _MINIX__PARTITION_H */
  1609. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1610. include/minix/sound.h    
  1611. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1612. 07700 /* Definitions used by /dev/audio and /dev/mixer.
  1613. 07701  *
  1614. 07702  *  Feb 13 1995                 Author: Michel R. Prevenier 
  1615. 07703  */
  1616. 07704
  1617. 07705 #ifndef SOUND_H
  1618. 07706 #define SOUND_H
  1619. 07707
  1620. 07708
  1621. 07709 /* ------- Mixer stuff ------- */
  1622. 07710
  1623. 07711 /* Available devices */
  1624. 07712 enum Device
  1625. 07713 {
  1626. 07714   Master,     /* Master volume */
  1627. 07715   Dac,        /* DSP, digitized sound */
  1628. 07716   Fm,         /* Fm synthesized sound */
  1629. 07717   Cd,         /* Compact */
  1630. 07718   Line,       /* Line in */
  1631. 07719   Mic,        /* Microphone */
  1632. 07720   Speaker,    /* Pc speaker */
  1633. 07721   Treble,     /* Treble */
  1634. 07722   Bass        /* Bass */
  1635. 07723 };
  1636. 07724
  1637. 07725 enum InputState
  1638. 07726 {
  1639. 07727   ON, OFF
  1640. 07728 };
  1641. 07729
  1642. 07730 /* Volume levels range from 0 to 31, bass & treble range from 0 to 15 */
  1643. 07731 struct volume_level
  1644. 07732 {
  1645. 07733   enum Device   device; 
  1646. 07734   int           left;           
  1647. 07735   int           right;
  1648. 07736 };
  1649. 07737
  1650. 07738 struct inout_ctrl
  1651. 07739 {
  1652. 07740   enum Device           device;
  1653. 07741   enum InputState       left;
  1654. 07742   enum InputState       right;
  1655. 07743 };
  1656. 07744
  1657. 07745 #endif /* SOUND_H */
  1658. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1659. include/minix/syslib.h    
  1660. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1661. 07800 /* Prototypes for system library functions. */
  1662. 07801
  1663. 07802 #ifndef _SYSLIB_H
  1664. 07803 #define _SYSLIB_H
  1665. 07804
  1666. 07805 /* Hide names to avoid name space pollution. */
  1667. 07806 #define sendrec         _sendrec
  1668. 07807 #define receive         _receive
  1669. 07808 #define send            _send
  1670. 07809
  1671. 07810 /* Minix user+system library. */
  1672. 07811 _PROTOTYPE( void printk, (char *_fmt, ...)                              );
  1673. 07812 _PROTOTYPE( int sendrec, (int _src_dest, message *_m_ptr)               );
  1674. 07813 _PROTOTYPE( int _taskcall, (int _who, int _syscallnr, message *_msgptr) );
  1675. 07814
  1676. 07815 /* Minix system library. */
  1677. 07816 _PROTOTYPE( int receive, (int _src, message *_m_ptr)                    );
  1678. 07817 _PROTOTYPE( int send, (int _dest, message *_m_ptr)                      );
  1679. 07818
  1680. 07819 _PROTOTYPE( int sys_abort, (int _how, ...)                              );
  1681. 07820 _PROTOTYPE( int sys_adjmap, (int _proc, struct mem_map *_ptr, 
  1682. 07821                 vir_clicks _data_clicks, vir_clicks _sp)                );
  1683. 07822 _PROTOTYPE( int sys_copy, (int _src_proc, int _src_seg, phys_bytes _src_vir, 
  1684. 07823         int _dst_proc, int _dst_seg, phys_bytes _dst_vir, phys_bytes _bytes));
  1685. 07824 _PROTOTYPE( int sys_exec, (int _proc, char *_ptr, int _traced, 
  1686. 07825                                 char *_aout, vir_bytes _initpc)         );
  1687. 07826 _PROTOTYPE( int sys_execmap, (int _proc, struct mem_map *_ptr)          );
  1688. 07827 _PROTOTYPE( int sys_fork, (int _parent, int _child, int _pid, 
  1689. 07828                                         phys_clicks _shadow)            );
  1690. 07829 _PROTOTYPE( int sys_fresh, (int _proc, struct mem_map *_ptr,
  1691. 07830         phys_clicks _dc, phys_clicks *_basep, phys_clicks *_sizep)      );
  1692. 07831 _PROTOTYPE( int sys_getsp, (int _proc, vir_bytes *_newsp)               );
  1693. 07832 _PROTOTYPE( int sys_newmap, (int _proc, struct mem_map *_ptr)           );
  1694. 07833 _PROTOTYPE( int sys_getmap, (int _proc, struct mem_map *_ptr)           );
  1695. 07834 _PROTOTYPE( int sys_sendsig, (int _proc, struct sigmsg *_ptr)           );
  1696. 07835 _PROTOTYPE( int sys_oldsig, (int _proc, int _sig, sighandler_t _sighandler));
  1697. 07836 _PROTOTYPE( int sys_endsig, (int _proc)                                 );
  1698. 07837 _PROTOTYPE( int sys_sigreturn, (int _proc, vir_bytes _scp, int _flags)  );
  1699. 07838 _PROTOTYPE( int sys_trace, (int _req, int _procnr, long _addr, long *_data_p));
  1700. 07839 _PROTOTYPE( int sys_xit, (int _parent, int _proc, phys_clicks *_basep, 
  1701. 07840                                                  phys_clicks *_sizep));
  1702. 07841 _PROTOTYPE( int sys_kill, (int _proc, int _sig)                         );
  1703. 07842 _PROTOTYPE( int sys_times, (int _proc, clock_t _ptr[5])                 );
  1704. 07843
  1705. 07844 #endif /* _SYSLIB_H */
  1706. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1707. include/minix/type.h    
  1708. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1709. 07900 #ifndef _TYPE_H
  1710. 07901 #define _TYPE_H
  1711. 07902 #ifndef _MINIX_TYPE_H
  1712. 07903 #define _MINIX_TYPE_H
  1713. 07904
  1714. 07905 /* Type definitions. */
  1715. 07906 typedef unsigned int vir_clicks; /* virtual  addresses and lengths in clicks */
  1716. 07907 typedef unsigned long phys_bytes;/* physical addresses and lengths in bytes */
  1717. 07908 typedef unsigned int phys_clicks;/* physical addresses and lengths in clicks */
  1718. 07909
  1719. 07910 #if (CHIP == INTEL)
  1720. 07911 typedef unsigned int vir_bytes; /* virtual addresses and lengths in bytes */
  1721. 07912 #endif
  1722. 07913
  1723. 07914 #if (CHIP == M68000)
  1724. 07915 typedef unsigned long vir_bytes;/* virtual addresses and lengths in bytes */
  1725. 07916 #endif
  1726. 07917
  1727. 07918 #if (CHIP == SPARC)
  1728. 07919 typedef unsigned long vir_bytes;/* virtual addresses and lengths in bytes */
  1729. 07920 #endif
  1730. 07921
  1731. 07922 /* Types relating to messages. */
  1732. 07923 #define M1                 1
  1733. 07924 #define M3                 3
  1734. 07925 #define M4                 4
  1735. 07926 #define M3_STRING         14
  1736. 07927
  1737. 07928 typedef struct {int m1i1, m1i2, m1i3; char *m1p1, *m1p2, *m1p3;} mess_1;
  1738. 07929 typedef struct {int m2i1, m2i2, m2i3; long m2l1, m2l2; char *m2p1;} mess_2;
  1739. 07930 typedef struct {int m3i1, m3i2; char *m3p1; char m3ca1[M3_STRING];} mess_3;
  1740. 07931 typedef struct {long m4l1, m4l2, m4l3, m4l4, m4l5;} mess_4;
  1741. 07932 typedef struct {char m5c1, m5c2; int m5i1, m5i2; long m5l1, m5l2, m5l3;}mess_5;
  1742. 07933 typedef struct {int m6i1, m6i2, m6i3; long m6l1; sighandler_t m6f1;} mess_6;
  1743. 07934
  1744. 07935 typedef struct {
  1745. 07936   int m_source;                 /* who sent the message */
  1746. 07937   int m_type;                   /* what kind of message is it */
  1747. 07938   union {
  1748. 07939         mess_1 m_m1;
  1749. 07940         mess_2 m_m2;
  1750. 07941         mess_3 m_m3;
  1751. 07942         mess_4 m_m4;
  1752. 07943         mess_5 m_m5;
  1753. 07944         mess_6 m_m6;
  1754. 07945   } m_u;
  1755. 07946 } message;
  1756. 07947
  1757. 07948 /* The following defines provide names for useful members. */
  1758. 07949 #define m1_i1  m_u.m_m1.m1i1
  1759. 07950 #define m1_i2  m_u.m_m1.m1i2
  1760. 07951 #define m1_i3  m_u.m_m1.m1i3
  1761. 07952 #define m1_p1  m_u.m_m1.m1p1
  1762. 07953 #define m1_p2  m_u.m_m1.m1p2
  1763. 07954 #define m1_p3  m_u.m_m1.m1p3
  1764. 07955
  1765. 07956 #define m2_i1  m_u.m_m2.m2i1
  1766. 07957 #define m2_i2  m_u.m_m2.m2i2
  1767. 07958 #define m2_i3  m_u.m_m2.m2i3
  1768. 07959 #define m2_l1  m_u.m_m2.m2l1
  1769. 07960 #define m2_l2  m_u.m_m2.m2l2
  1770. 07961 #define m2_p1  m_u.m_m2.m2p1
  1771. 07962
  1772. 07963 #define m3_i1  m_u.m_m3.m3i1
  1773. 07964 #define m3_i2  m_u.m_m3.m3i2
  1774. 07965 #define m3_p1  m_u.m_m3.m3p1
  1775. 07966 #define m3_ca1 m_u.m_m3.m3ca1
  1776. 07967
  1777. 07968 #define m4_l1  m_u.m_m4.m4l1
  1778. 07969 #define m4_l2  m_u.m_m4.m4l2
  1779. 07970 #define m4_l3  m_u.m_m4.m4l3
  1780. 07971 #define m4_l4  m_u.m_m4.m4l4
  1781. 07972 #define m4_l5  m_u.m_m4.m4l5
  1782. 07973
  1783. 07974 #define m5_c1  m_u.m_m5.m5c1
  1784. 07975 #define m5_c2  m_u.m_m5.m5c2
  1785. 07976 #define m5_i1  m_u.m_m5.m5i1
  1786. 07977 #define m5_i2  m_u.m_m5.m5i2
  1787. 07978 #define m5_l1  m_u.m_m5.m5l1
  1788. 07979 #define m5_l2  m_u.m_m5.m5l2
  1789. 07980 #define m5_l3  m_u.m_m5.m5l3
  1790. 07981
  1791. 07982 #define m6_i1  m_u.m_m6.m6i1
  1792. 07983 #define m6_i2  m_u.m_m6.m6i2
  1793. 07984 #define m6_i3  m_u.m_m6.m6i3
  1794. 07985 #define m6_l1  m_u.m_m6.m6l1
  1795. 07986 #define m6_f1  m_u.m_m6.m6f1
  1796. 07987
  1797. 07988 struct mem_map {
  1798. 07989   vir_clicks mem_vir;           /* virtual address */
  1799. 07990   phys_clicks mem_phys;         /* physical address */
  1800. 07991   vir_clicks mem_len;           /* length */
  1801. 07992 };
  1802. 07993
  1803. 07994 struct iorequest_s {
  1804. 07995   long io_position;             /* position in device file (really off_t) */
  1805. 07996   char *io_buf;                 /* buffer in user space */
  1806. 07997   int io_nbytes;                /* size of request */
  1807. 07998   unsigned short io_request;    /* read, write (optionally) */
  1808. 07999 };
  1809. 08000 #endif /* _TYPE_H */
  1810. 08001
  1811. 08002 typedef struct {
  1812. 08003   vir_bytes iov_addr;           /* address of an I/O buffer */
  1813. 08004   vir_bytes iov_size;           /* sizeof an I/O buffer */
  1814. 08005 } iovec_t;
  1815. 08006
  1816. 08007 typedef struct {
  1817. 08008   vir_bytes cpv_src;            /* src address of data */
  1818. 08009   vir_bytes cpv_dst;            /* dst address of data */
  1819. 08010   vir_bytes cpv_size;           /* size of data */
  1820. 08011 } cpvec_t;
  1821. 08012
  1822. 08013 /* MM passes the address of a structure of this type to KERNEL when
  1823. 08014  * do_sendsig() is invoked as part of the signal catching mechanism.
  1824. 08015  * The structure contain all the information that KERNEL needs to build
  1825. 08016  * the signal stack.
  1826. 08017  */
  1827. 08018 struct sigmsg {
  1828. 08019   int sm_signo;                 /* signal number being caught */
  1829. 08020   unsigned long sm_mask;        /* mask to restore when handler returns */
  1830. 08021   vir_bytes sm_sighandler;      /* address of handler */
  1831. 08022   vir_bytes sm_sigreturn;       /* address of _sigreturn in C library */
  1832. 08023   vir_bytes sm_stkptr;          /* user stack pointer */
  1833. 08024 };
  1834. 08025
  1835. 08026 #define MESS_SIZE (sizeof(message))     /* might need usizeof from fs here */
  1836. 08027 #define NIL_MESS ((message *) 0)
  1837. 08028
  1838. 08029 struct psinfo {         /* information for the ps(1) program */
  1839. 08030   u16_t nr_tasks, nr_procs;     /* NR_TASKS and NR_PROCS constants. */
  1840. 08031   vir_bytes proc, mproc, fproc; /* addresses of the main process tables. */
  1841. 08032 };
  1842. 08033
  1843. 08034 #endif /* _MINIX_TYPE_H */
  1844. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1845. include/ibm/diskparm.h    
  1846. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1847. 08100 /* PC (and AT) BIOS structure to hold disk parameters.  Under Minix, it is
  1848. 08101  * used mainly for formatting.
  1849. 08102  */
  1850. 08103
  1851. 08104 #ifndef _DISKPARM_H
  1852. 08105 #define _DISKPARM_H
  1853. 08106 struct disk_parameter_s {
  1854. 08107   char spec1;
  1855. 08108   char spec2;
  1856. 08109   char motor_turnoff_sec;
  1857. 08110   char sector_size_code;
  1858. 08111   char sectors_per_cylinder;
  1859. 08112   char gap_length;
  1860. 08113   char dtl;
  1861. 08114   char gap_length_for_format;
  1862. 08115   char fill_byte_for_format;
  1863. 08116   char head_settle_msec;
  1864. 08117   char motor_start_eigth_sec;
  1865. 08118 };
  1866. 08119 #endif /* _DISKPARM_H */
  1867. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1868. include/ibm/partition.h    
  1869. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1870. 08200 /* Description of entry in partition table.  */
  1871. 08201 #ifndef _PARTITION_H
  1872. 08202 #define _PARTITION_H
  1873. 08203
  1874. 08204 struct part_entry {
  1875. 08205   unsigned char bootind;        /* boot indicator 0/ACTIVE_FLAG  */
  1876. 08206   unsigned char start_head;     /* head value for first sector   */
  1877. 08207   unsigned char start_sec;      /* sector value + cyl bits for first sector */
  1878. 08208   unsigned char start_cyl;      /* track value for first sector  */
  1879. 08209   unsigned char sysind;         /* system indicator              */
  1880. 08210   unsigned char last_head;      /* head value for last sector    */
  1881. 08211   unsigned char last_sec;       /* sector value + cyl bits for last sector */
  1882. 08212   unsigned char last_cyl;       /* track value for last sector   */
  1883. 08213   unsigned long lowsec;         /* logical first sector          */
  1884. 08214   unsigned long size;           /* size of partition in sectors  */
  1885. 08215 };
  1886. 08216
  1887. 08217 #define ACTIVE_FLAG     0x80    /* value for active in bootind field (hd0) */
  1888. 08218 #define NR_PARTITIONS   4       /* number of entries in partition table */
  1889. 08219 #define PART_TABLE_OFF  0x1BE   /* offset of partition table in boot sector */
  1890. 08220
  1891. 08221 /* Partition types. */
  1892. 08222 #define MINIX_PART      0x81    /* Minix partition type */
  1893. 08223 #define NO_PART         0x00    /* unused entry */
  1894. 08224 #define OLD_MINIX_PART  0x80    /* created before 1.4b, obsolete */
  1895. 08225 #define EXT_PART        0x05    /* extended partition */
  1896. 08226
  1897. 08227 #endif /* _PARTITION_H */
  1898. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1899. src/kernel/assert.h    
  1900. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1901. 08300 /*
  1902. 08301 assert.h
  1903. 08302 */
  1904. 08303 #ifndef ASSERT_H
  1905. 08304 #define ASSERT_H
  1906. 08305
  1907. 08306 #if DEBUG
  1908. 08307
  1909. 08308 #define INIT_ASSERT     static char *assert_file= __FILE__;
  1910. 08309
  1911. 08310 void bad_assertion(char *file, int line, char *what);
  1912. 08311 void bad_compare(char *file, int line, int lhs, char *what, int rhs);
  1913. 08312
  1914. 08313 #define assert(x)       (!(x) ? bad_assertion(assert_file, __LINE__, #x) 
  1915. 08314                                                                 : (void) 0)
  1916. 08315 #define compare(a,t,b)  (!((a) t (b)) ? bad_compare(assert_file, __LINE__, 
  1917. 08316                                 (a), #a " " #t " " #b, (b)) : (void) 0)
  1918. 08317 #else /* !DEBUG */
  1919. 08318
  1920. 08319 #define INIT_ASSERT     /* nothing */
  1921. 08320
  1922. 08321 #define assert(x)       (void)0
  1923. 08322 #define compare(a,t,b)  (void)0
  1924. 08323
  1925. 08324 #endif /* !DEBUG */
  1926. 08325
  1927. 08326 #endif /* ASSERT_H */
  1928. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1929. src/kernel/const.h    
  1930. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1931. 08400 /* General constants used by the kernel. */
  1932. 08401
  1933. 08402 #if (CHIP == INTEL)
  1934. 08403
  1935. 08404 #define K_STACK_BYTES   1024    /* how many bytes for the kernel stack */
  1936. 08405
  1937. 08406 #define INIT_PSW      0x0200    /* initial psw */
  1938. 08407 #define INIT_TASK_PSW 0x1200    /* initial psw for tasks (with IOPL 1) */
  1939. 08408 #define TRACEBIT       0x100    /* OR this with psw in proc[] for tracing */
  1940. 08409 #define SETPSW(rp, new) /* permits only certain bits to be set */ 
  1941. 08410         ((rp)->p_reg.psw = (rp)->p_reg.psw & ~0xCD5 | (new) & 0xCD5)
  1942. 08411
  1943. 08412 /* Initial sp for mm, fs and init.
  1944. 08413  *      2 bytes for short jump
  1945. 08414  *      2 bytes unused
  1946. 08415  *      3 words for init_org[] used by fs only
  1947. 08416  *      3 words for real mode debugger trap (actually needs 1 more)
  1948. 08417  *      3 words for save and restart temporaries
  1949. 08418  *      3 words for interrupt
  1950. 08419  * Leave no margin, to flush bugs early.
  1951. 08420  */
  1952. 08421 #define INIT_SP (2 + 2 + 3 * 2 + 3 * 2 + 3 * 2 + 3 * 2)
  1953. 08422
  1954. 08423 #define HCLICK_SHIFT       4    /* log2 of HCLICK_SIZE */
  1955. 08424 #define HCLICK_SIZE       16    /* hardware segment conversion magic */
  1956. 08425 #if CLICK_SIZE >= HCLICK_SIZE
  1957. 08426 #define click_to_hclick(n) ((n) << (CLICK_SHIFT - HCLICK_SHIFT))
  1958. 08427 #else
  1959. 08428 #define click_to_hclick(n) ((n) >> (HCLICK_SHIFT - CLICK_SHIFT))
  1960. 08429 #endif
  1961. 08430 #define hclick_to_physb(n) ((phys_bytes) (n) << HCLICK_SHIFT)
  1962. 08431 #define physb_to_hclick(n) ((n) >> HCLICK_SHIFT)
  1963. 08432
  1964. 08433 /* Interrupt vectors defined/reserved by processor. */
  1965. 08434 #define DIVIDE_VECTOR      0    /* divide error */
  1966. 08435 #define DEBUG_VECTOR       1    /* single step (trace) */
  1967. 08436 #define NMI_VECTOR         2    /* non-maskable interrupt */
  1968. 08437 #define BREAKPOINT_VECTOR  3    /* software breakpoint */
  1969. 08438 #define OVERFLOW_VECTOR    4    /* from INTO */
  1970. 08439
  1971. 08440 /* Fixed system call vector. */
  1972. 08441 #define SYS_VECTOR        32    /* system calls are made with int SYSVEC */
  1973. 08442 #define SYS386_VECTOR     33    /* except 386 system calls use this */
  1974. 08443 #define LEVEL0_VECTOR     34    /* for execution of a function at level 0 */
  1975. 08444
  1976. 08445 /* Suitable irq bases for hardware interrupts.  Reprogram the 8259(s) from
  1977. 08446  * the PC BIOS defaults since the BIOS doesn't respect all the processor's
  1978. 08447  * reserved vectors (0 to 31).
  1979. 08448  */
  1980. 08449 #define BIOS_IRQ0_VEC   0x08    /* base of IRQ0-7 vectors used by BIOS */
  1981. 08450 #define BIOS_IRQ8_VEC   0x70    /* base of IRQ8-15 vectors used by BIOS */
  1982. 08451 #define IRQ0_VECTOR     0x28    /* more or less arbitrary, but > SYS_VECTOR */
  1983. 08452 #define IRQ8_VECTOR     0x30    /* together for simplicity */
  1984. 08453
  1985. 08454 /* Hardware interrupt numbers. */
  1986. 08455 #define NR_IRQ_VECTORS    16
  1987. 08456 #define CLOCK_IRQ          0
  1988. 08457 #define KEYBOARD_IRQ       1
  1989. 08458 #define CASCADE_IRQ        2    /* cascade enable for 2nd AT controller */
  1990. 08459 #define ETHER_IRQ          3    /* default ethernet interrupt vector */
  1991. 08460 #define SECONDARY_IRQ      3    /* RS232 interrupt vector for port 2 */
  1992. 08461 #define RS232_IRQ          4    /* RS232 interrupt vector for port 1 */
  1993. 08462 #define XT_WINI_IRQ        5    /* xt winchester */
  1994. 08463 #define FLOPPY_IRQ         6    /* floppy disk */
  1995. 08464 #define PRINTER_IRQ        7
  1996. 08465 #define AT_WINI_IRQ       14    /* at winchester */
  1997. 08466
  1998. 08467 /* Interrupt number to hardware vector. */
  1999. 08468 #define BIOS_VECTOR(irq)        
  2000. 08469         (((irq) < 8 ? BIOS_IRQ0_VEC : BIOS_IRQ8_VEC) + ((irq) & 0x07))
  2001. 08470 #define VECTOR(irq)     
  2002. 08471         (((irq) < 8 ? IRQ0_VECTOR : IRQ8_VECTOR) + ((irq) & 0x07))
  2003. 08472
  2004. 08473 /* BIOS hard disk parameter vectors. */
  2005. 08474 #define WINI_0_PARM_VEC 0x41
  2006. 08475 #define WINI_1_PARM_VEC 0x46
  2007. 08476
  2008. 08477 /* 8259A interrupt controller ports. */
  2009. 08478 #define INT_CTL         0x20    /* I/O port for interrupt controller */
  2010. 08479 #define INT_CTLMASK     0x21    /* setting bits in this port disables ints */
  2011. 08480 #define INT2_CTL        0xA0    /* I/O port for second interrupt controller */
  2012. 08481 #define INT2_CTLMASK    0xA1    /* setting bits in this port disables ints */
  2013. 08482
  2014. 08483 /* Magic numbers for interrupt controller. */
  2015. 08484 #define ENABLE          0x20    /* code used to re-enable after an interrupt */
  2016. 08485
  2017. 08486 /* Sizes of memory tables. */
  2018. 08487 #define NR_MEMS            3    /* number of chunks of memory */
  2019. 08488
  2020. 08489 /* Miscellaneous ports. */
  2021. 08490 #define PCR             0x65    /* Planar Control Register */
  2022. 08491 #define PORT_B          0x61    /* I/O port for 8255 port B (kbd, beeper...) */
  2023. 08492 #define TIMER0          0x40    /* I/O port for timer channel 0 */
  2024. 08493 #define TIMER2          0x42    /* I/O port for timer channel 2 */
  2025. 08494 #define TIMER_MODE      0x43    /* I/O port for timer mode control */
  2026. 08495
  2027. 08496 #endif /* (CHIP == INTEL) */
  2028. 08497
  2029. 08498 #if (CHIP == M68000)
  2030. 08499
  2031. 08500 #define K_STACK_BYTES   1024    /* how many bytes for the kernel stack */
  2032. 08501
  2033. 08502 /* Sizes of memory tables. */
  2034. 08503 #define NR_MEMS            2    /* number of chunks of memory */
  2035. 08504
  2036. 08505 /* p_reg contains: d0-d7, a0-a6,   in that order. */
  2037. 08506 #define NR_REGS           15    /* number of general regs in each proc slot */
  2038. 08507  
  2039. 08508 #define TRACEBIT      0x8000    /* or this with psw in proc[] for tracing */
  2040. 08509 #define SETPSW(rp, new)         /* permits only certain bits to be set */ 
  2041. 08510         ((rp)->p_reg.psw = (rp)->p_reg.psw & ~0xFF | (new) & 0xFF)
  2042. 08511  
  2043. 08512 #define MEM_BYTES  0xffffffff   /* memory size for /dev/mem */
  2044. 08513  
  2045. 08514 #ifdef __ACK__
  2046. 08515 #define FSTRUCOPY
  2047. 08516 #endif
  2048. 08517
  2049. 08518 #endif /* (CHIP == M68000) */
  2050. 08519
  2051. 08520 /* The following items pertain to the scheduling queues. */
  2052. 08521 #define TASK_Q             0    /* ready tasks are scheduled via queue 0 */
  2053. 08522 #define SERVER_Q           1    /* ready servers are scheduled via queue 1 */
  2054. 08523 #define USER_Q             2    /* ready users are scheduled via queue 2 */
  2055. 08524
  2056. 08525 #if (MACHINE == ATARI)
  2057. 08526 #define SHADOW_Q           3    /* runnable, but shadowed processes */
  2058. 08527 #define NQ                 4    /* # of scheduling queues */
  2059. 08528 #else
  2060. 08529 #define NQ                 3    /* # of scheduling queues */
  2061. 08530 #endif
  2062. 08531
  2063. 08532 /* Env_parse() return values. */
  2064. 08533 #define EP_UNSET        0       /* variable not set */
  2065. 08534 #define EP_OFF          1       /* var = off */
  2066. 08535 #define EP_ON           2       /* var = on (or field left blank) */
  2067. 08536 #define EP_SET          3       /* var = 1:2:3 (nonblank field) */
  2068. 08537
  2069. 08538 /* To translate an address in kernel space to a physical address.  This is
  2070. 08539  * the same as umap(proc_ptr, D, vir, sizeof(*vir)), but a lot less costly.
  2071. 08540  */
  2072. 08541 #define vir2phys(vir)   (data_base + (vir_bytes) (vir))
  2073. 08542
  2074. 08543 #define printf        printk    /* the kernel really uses printk, not printf */
  2075. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2076. src/kernel/dp8390.h    
  2077. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2078. 08600 /*
  2079. 08601 dp8390.h
  2080. 08602
  2081. 08603 Created:        before Dec 28, 1992 by Philip Homburg
  2082. 08604 */
  2083. 08605
  2084. 08606 /* National Semiconductor DP8390 Network Interface Controller. */
  2085. 08607
  2086. 08608                                 /* Page 0, for reading ------------- */
  2087. 08609 #define DP_CR           0x0     /* Read side of Command Register     */
  2088. 08610 #define DP_CLDA0        0x1     /* Current Local Dma Address 0       */
  2089. 08611 #define DP_CLDA1        0x2     /* Current Local Dma Address 1       */
  2090. 08612 #define DP_BNRY         0x3     /* Boundary Pointer                  */
  2091. 08613 #define DP_TSR          0x4     /* Transmit Status Register          */
  2092. 08614 #define DP_NCR          0x5     /* Number of Collisions Register     */
  2093. 08615 #define DP_FIFO         0x6     /* Fifo ??                           */
  2094. 08616 #define DP_ISR          0x7     /* Interrupt Status Register         */
  2095. 08617 #define DP_CRDA0        0x8     /* Current Remote Dma Address 0      */
  2096. 08618 #define DP_CRDA1        0x9     /* Current Remote Dma Address 1      */
  2097. 08619 #define DP_DUM1         0xA     /* unused                            */
  2098. 08620 #define DP_DUM2         0xB     /* unused                            */
  2099. 08621 #define DP_RSR          0xC     /* Receive Status Register           */
  2100. 08622 #define DP_CNTR0        0xD     /* Tally Counter 0                   */
  2101. 08623 #define DP_CNTR1        0xE     /* Tally Counter 1                   */
  2102. 08624 #define DP_CNTR2        0xF     /* Tally Counter 2                   */
  2103. 08625
  2104. 08626                                 /* Page 0, for writing ------------- */
  2105. 08627 #define DP_CR           0x0     /* Write side of Command Register    */
  2106. 08628 #define DP_PSTART       0x1     /* Page Start Register               */
  2107. 08629 #define DP_PSTOP        0x2     /* Page Stop Register                */
  2108. 08630 #define DP_BNRY         0x3     /* Boundary Pointer                  */
  2109. 08631 #define DP_TPSR         0x4     /* Transmit Page Start Register      */
  2110. 08632 #define DP_TBCR0        0x5     /* Transmit Byte Count Register 0    */
  2111. 08633 #define DP_TBCR1        0x6     /* Transmit Byte Count Register 1    */
  2112. 08634 #define DP_ISR          0x7     /* Interrupt Status Register         */
  2113. 08635 #define DP_RSAR0        0x8     /* Remote Start Address Register 0   */
  2114. 08636 #define DP_RSAR1        0x9     /* Remote Start Address Register 1   */
  2115. 08637 #define DP_RBCR0        0xA     /* Remote Byte Count Register 0      */
  2116. 08638 #define DP_RBCR1        0xB     /* Remote Byte Count Register 1      */
  2117. 08639 #define DP_RCR          0xC     /* Receive Configuration Register    */
  2118. 08640 #define DP_TCR          0xD     /* Transmit Configuration Register   */
  2119. 08641 #define DP_DCR          0xE     /* Data Configuration Register       */
  2120. 08642 #define DP_IMR          0xF     /* Interrupt Mask Register           */
  2121. 08643
  2122. 08644                                 /* Page 1, read/write -------------- */
  2123. 08645 #define DP_CR           0x0     /* Command Register                  */
  2124. 08646 #define DP_PAR0         0x1     /* Physical Address Register 0       */
  2125. 08647 #define DP_PAR1         0x2     /* Physical Address Register 1       */
  2126. 08648 #define DP_PAR2         0x3     /* Physical Address Register 2       */
  2127. 08649 #define DP_PAR3         0x4     /* Physical Address Register 3       */
  2128. 08650 #define DP_PAR4         0x5     /* Physical Address Register 4       */
  2129. 08651 #define DP_PAR5         0x6     /* Physical Address Register 5       */
  2130. 08652 #define DP_CURR         0x7     /* Current Page Register             */
  2131. 08653 #define DP_MAR0         0x8     /* Multicast Address Register 0      */
  2132. 08654 #define DP_MAR1         0x9     /* Multicast Address Register 1      */
  2133. 08655 #define DP_MAR2         0xA     /* Multicast Address Register 2      */
  2134. 08656 #define DP_MAR3         0xB     /* Multicast Address Register 3      */
  2135. 08657 #define DP_MAR4         0xC     /* Multicast Address Register 4      */
  2136. 08658 #define DP_MAR5         0xD     /* Multicast Address Register 5      */
  2137. 08659 #define DP_MAR6         0xE     /* Multicast Address Register 6      */
  2138. 08660 #define DP_MAR7         0xF     /* Multicast Address Register 7      */
  2139. 08661
  2140. 08662 /* Bits in dp_cr */
  2141. 08663 #define CR_STP          0x01    /* Stop: software reset              */
  2142. 08664 #define CR_STA          0x02    /* Start: activate NIC               */
  2143. 08665 #define CR_TXP          0x04    /* Transmit Packet                   */
  2144. 08666 #define CR_DMA          0x38    /* Mask for DMA control              */
  2145. 08667 #define CR_DM_NOP       0x00    /* DMA: No Operation                 */
  2146. 08668 #define CR_DM_RR        0x08    /* DMA: Remote Read                  */
  2147. 08669 #define CR_DM_RW        0x10    /* DMA: Remote Write                 */
  2148. 08670 #define CR_DM_SP        0x18    /* DMA: Send Packet                  */
  2149. 08671 #define CR_DM_ABORT     0x20    /* DMA: Abort Remote DMA Operation   */
  2150. 08672 #define CR_PS           0xC0    /* Mask for Page Select              */
  2151. 08673 #define CR_PS_P0        0x00    /* Register Page 0                   */
  2152. 08674 #define CR_PS_P1        0x40    /* Register Page 1                   */
  2153. 08675 #define CR_PS_T0        0x80    /* Test Mode Register Map ??         */
  2154. 08676 #define CR_SP_T1        0xC0    /* Test Mode Register Map ??         */
  2155. 08677
  2156. 08678 /* Bits in dp_isr */
  2157. 08679 #define ISR_MASK        0x3F
  2158. 08680 #define ISR_PRX         0x01    /* Packet Received with no errors    */
  2159. 08681 #define ISR_PTX         0x02    /* Packet Transmitted with no errors */
  2160. 08682 #define ISR_RXE         0x04    /* Receive Error                     */
  2161. 08683 #define ISR_TXE         0x08    /* Transmit Error                    */
  2162. 08684 #define ISR_OVW         0x10    /* Overwrite Warning                 */
  2163. 08685 #define ISR_CNT         0x20    /* Counter Overflow                  */
  2164. 08686 #define ISR_RDC         0x40    /* Remote DMA Complete               */
  2165. 08687 #define ISR_RST         0x80    /* Reset Status                      */
  2166. 08688
  2167. 08689 /* Bits in dp_imr */
  2168. 08690 #define IMR_PRXE        0x01    /* Packet Received iEnable           */
  2169. 08691 #define IMR_PTXE        0x02    /* Packet Transmitted iEnable        */
  2170. 08692 #define IMR_RXEE        0x04    /* Receive Error iEnable             */
  2171. 08693 #define IMR_TXEE        0x08    /* Transmit Error iEnable            */
  2172. 08694 #define IMR_OVWE        0x10    /* Overwrite Warning iEnable         */
  2173. 08695 #define IMR_CNTE        0x20    /* Counter Overflow iEnable          */
  2174. 08696 #define IMR_RDCE        0x40    /* DMA Complete iEnable              */
  2175. 08697
  2176. 08698 /* Bits in dp_dcr */
  2177. 08699 #define DCR_WTS         0x01    /* Word Transfer Select              */
  2178. 08700 #define DCR_BYTEWIDE    0x00    /* WTS: byte wide transfers          */
  2179. 08701 #define DCR_WORDWIDE    0x01    /* WTS: word wide transfers          */
  2180. 08702 #define DCR_BOS         0x02    /* Byte Order Select                 */
  2181. 08703 #define DCR_LTLENDIAN   0x00    /* BOS: Little Endian                */
  2182. 08704 #define DCR_BIGENDIAN   0x02    /* BOS: Big Endian                   */
  2183. 08705 #define DCR_LAS         0x04    /* Long Address Select               */
  2184. 08706 #define DCR_BMS         0x08    /* Burst Mode Select                 */
  2185. 08707 #define DCR_AR          0x10    /* Autoinitialize Remote             */
  2186. 08708 #define DCR_FTS         0x60    /* Fifo Threshold Select             */
  2187. 08709 #define DCR_2BYTES      0x00    /* 2 bytes                           */
  2188. 08710 #define DCR_4BYTES      0x40    /* 4 bytes                           */
  2189. 08711 #define DCR_8BYTES      0x20    /* 8 bytes                           */
  2190. 08712 #define DCR_12BYTES     0x60    /* 12 bytes                          */
  2191. 08713
  2192. 08714 /* Bits in dp_tcr */
  2193. 08715 #define TCR_CRC         0x01    /* Inhibit CRC                       */
  2194. 08716 #define TCR_ELC         0x06    /* Encoded Loopback Control          */
  2195. 08717 #define TCR_NORMAL      0x00    /* ELC: Normal Operation             */
  2196. 08718 #define TCR_INTERNAL    0x02    /* ELC: Internal Loopback            */
  2197. 08719 #define TCR_0EXTERNAL   0x04    /* ELC: External Loopback LPBK=0     */
  2198. 08720 #define TCR_1EXTERNAL   0x06    /* ELC: External Loopback LPBK=1     */
  2199. 08721 #define TCR_ATD         0x08    /* Auto Transmit                     */
  2200. 08722 #define TCR_OFST        0x10    /* Collision Offset Enable (be nice) */
  2201. 08723
  2202. 08724 /* Bits in dp_tsr */
  2203. 08725 #define TSR_PTX         0x01    /* Packet Transmitted (without error)*/
  2204. 08726 #define TSR_DFR         0x02    /* Transmit Deferred                 */
  2205. 08727 #define TSR_COL         0x04    /* Transmit Collided                 */
  2206. 08728 #define TSR_ABT         0x08    /* Transmit Aborted                  */
  2207. 08729 #define TSR_CRS         0x10    /* Carrier Sense Lost                */
  2208. 08730 #define TSR_FU          0x20    /* FIFO Underrun                     */
  2209. 08731 #define TSR_CDH         0x40    /* CD Heartbeat                      */
  2210. 08732 #define TSR_OWC         0x80    /* Out of Window Collision           */
  2211. 08733
  2212. 08734 /* Bits in tp_rcr */
  2213. 08735 #define RCR_SEP         0x01    /* Save Errored Packets              */
  2214. 08736 #define RCR_AR          0x02    /* Accept Runt Packets               */
  2215. 08737 #define RCR_AB          0x04    /* Accept Broadcast                  */
  2216. 08738 #define RCR_AM          0x08    /* Accept Multicast                  */
  2217. 08739 #define RCR_PRO         0x10    /* Physical Promiscuous              */
  2218. 08740 #define RCR_MON         0x20    /* Monitor Mode                      */
  2219. 08741
  2220. 08742 /* Bits in dp_rsr */
  2221. 08743 #define RSR_PRX         0x01    /* Packet Received Intact            */
  2222. 08744 #define RSR_CRC         0x02    /* CRC Error                         */
  2223. 08745 #define RSR_FAE         0x04    /* Frame Alignment Error             */
  2224. 08746 #define RSR_FO          0x08    /* FIFO Overrun                      */
  2225. 08747 #define RSR_MPA         0x10    /* Missed Packet                     */
  2226. 08748 #define RSR_PHY         0x20    /* Multicast Address Match !!        */
  2227. 08749 #define RSR_DIS         0x40    /* Receiver Disabled                 */
  2228. 08750
  2229. 08751
  2230. 08752 typedef struct dp_rcvhdr
  2231. 08753 {
  2232. 08754         u8_t dr_status;                 /* Copy of rsr                       */
  2233. 08755         u8_t dr_next;                   /* Pointer to next packet            */
  2234. 08756         u8_t dr_rbcl;                   /* Receive Byte Count Low            */
  2235. 08757         u8_t dr_rbch;                   /* Receive Byte Count High           */
  2236. 08758 } dp_rcvhdr_t;
  2237. 08759
  2238. 08760 #define DP_PAGESIZE     256
  2239. 08761
  2240. 08762 /* Some macros to simplify accessing the dp8390 */
  2241. 08763 #define inb_reg0(dep, reg)      (in_byte(dep->de_dp8390_port+reg))
  2242. 08764 #define outb_reg0(dep, reg, data) (out_byte(dep->de_dp8390_port+reg, data))
  2243. 08765 #define inb_reg1(dep, reg)      (in_byte (dep->de_dp8390_port+reg))
  2244. 08766 #define outb_reg1(dep, reg, data) (out_byte(dep->de_dp8390_port+reg, data))
  2245. 08767
  2246. 08768 /* Software interface to the dp8390 driver */
  2247. 08769
  2248. 08770 struct dpeth;
  2249. 08771 struct iovec_dat;
  2250. 08772 _PROTOTYPE( typedef void (*dp_initf_t), (struct dpeth *dep)             );
  2251. 08773 _PROTOTYPE( typedef void (*dp_stopf_t), (struct dpeth *dep)             );
  2252. 08774 _PROTOTYPE( typedef void (*dp_user2nicf_t), (struct dpeth *dep,
  2253. 08775                         struct iovec_dat *iovp, vir_bytes offset,
  2254. 08776                         int nic_addr, vir_bytes count)                  );
  2255. 08777 _PROTOTYPE( typedef void (*dp_nic2userf_t), (struct dpeth *dep,
  2256. 08778                         int nic_addr, struct iovec_dat *iovp,
  2257. 08779                         vir_bytes offset, vir_bytes count)              );
  2258. 08780 #if 0
  2259. 08781 _PROTOTYPE( typedef void (*dp_getheaderf_t), (struct dpeth *dep,
  2260. 08782                         int page, struct dp_rcvhdr *h, u16_t *eth_type) );
  2261. 08783 #endif
  2262. 08784 _PROTOTYPE( typedef void (*dp_getblock_t), (struct dpeth *dep,
  2263. 08785                 int page, size_t offset, size_t size, void *dst)        );
  2264. 08786
  2265. 08787 /* iovectors are handled IOVEC_NR entries at a time. */
  2266. 08788 #define IOVEC_NR        16
  2267. 08789
  2268. 08790 typedef struct iovec_dat
  2269. 08791 {
  2270. 08792   iovec_t iod_iovec[IOVEC_NR];
  2271. 08793   int iod_iovec_s;
  2272. 08794   int iod_proc_nr;
  2273. 08795   vir_bytes iod_iovec_addr;
  2274. 08796 } iovec_dat_t;
  2275. 08797
  2276. 08798 #define SENDQ_NR        2       /* Maximum size of the send queue */
  2277. 08799 #define SENDQ_PAGES     6       /* 6 * DP_PAGESIZE >= 1514 bytes */
  2278. 08800
  2279. 08801 typedef struct dpeth
  2280. 08802 {
  2281. 08803         /* The de_base_port field is the starting point of the probe.
  2282. 08804          * The conf routine also fills de_linmem and de_irq. If the probe
  2283. 08805          * routine knows the irq and/or memory address because they are
  2284. 08806          * hardwired in the board, the probe should modify these fields.
  2285. 08807          * Futhermore, the probe routine should also fill in de_initf and
  2286. 08808          * de_stopf fields with the appropriate function pointers and set
  2287. 08809          * de_prog_IO iff programmed I/O is to be used.
  2288. 08810          */
  2289. 08811         port_t de_base_port;
  2290. 08812         phys_bytes de_linmem;
  2291. 08813         int de_irq;
  2292. 08814         dp_initf_t de_initf; 
  2293. 08815         dp_stopf_t de_stopf; 
  2294. 08816         int de_prog_IO;
  2295. 08817
  2296. 08818         /* The initf function fills the following fields. Only cards that do
  2297. 08819          * programmed I/O fill in the de_pata_port field.
  2298. 08820          * In addition, the init routine has to fill in the sendq data
  2299. 08821          * structures.
  2300. 08822          */
  2301. 08823         ether_addr_t de_address;
  2302. 08824         port_t de_dp8390_port;
  2303. 08825         port_t de_data_port;
  2304. 08826         int de_16bit;
  2305. 08827         int de_ramsize;
  2306. 08828         int de_offset_page;
  2307. 08829         int de_startpage;
  2308. 08830         int de_stoppage;
  2309. 08831
  2310. 08832         /* Do it yourself send queue */
  2311. 08833         struct sendq
  2312. 08834         {
  2313. 08835                 int sq_filled;          /* this buffer contains a packet */
  2314. 08836                 int sq_size;            /* with this size */
  2315. 08837                 int sq_sendpage;        /* starting page of the buffer */
  2316. 08838         } de_sendq[SENDQ_NR];
  2317. 08839         int de_sendq_nr;
  2318. 08840         int de_sendq_head;              /* Enqueue at the head */
  2319. 08841         int de_sendq_tail;              /* Dequeue at the tail */
  2320. 08842
  2321. 08843         /* The de_memsegm field is calculated based on the de_linmem field */
  2322. 08844         segm_t de_memsegm;
  2323. 08845
  2324. 08846         /* Fields for internal use by the dp8390 driver. */
  2325. 08847         int de_flags;
  2326. 08848         int de_mode;
  2327. 08849         eth_stat_t de_stat;
  2328. 08850         iovec_dat_t de_read_iovec;
  2329. 08851         iovec_dat_t de_write_iovec;
  2330. 08852         iovec_dat_t de_tmp_iovec;
  2331. 08853         vir_bytes de_read_s;
  2332. 08854         int de_client;
  2333. 08855         message de_sendmsg;
  2334. 08856         dp_user2nicf_t de_user2nicf; 
  2335. 08857         dp_nic2userf_t de_nic2userf; 
  2336. 08858         dp_getblock_t de_getblockf; 
  2337. 08859 } dpeth_t;
  2338. 08860
  2339. 08861 #define DEI_DEFAULT     0x8000
  2340. 08862
  2341. 08863 #define DEF_EMPTY       0x000
  2342. 08864 #define DEF_PACK_SEND   0x001
  2343. 08865 #define DEF_PACK_RECV   0x002
  2344. 08866 #define DEF_SEND_AVAIL  0x004
  2345. 08867 #define DEF_READING     0x010
  2346. 08868 #define DEF_PROMISC     0x040
  2347. 08869 #define DEF_MULTI       0x080
  2348. 08870 #define DEF_BROAD       0x100
  2349. 08871 #define DEF_ENABLED     0x200
  2350. 08872 #define DEF_STOPPED     0x400
  2351. 08873
  2352. 08874 #define DEM_DISABLED    0x0
  2353. 08875 #define DEM_SINK        0x1
  2354. 08876 #define DEM_ENABLED     0x2
  2355. 08877
  2356. 08878
  2357. 08879 /*
  2358. 08880  * $PchHeader: /mount/hd2/minix/sys/kernel/ibm/RCS/dp8390.h,v 1.4 1995/06/12 18:21:01 philip Exp $
  2359. 08881  */
  2360. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2361. src/kernel/driver.h    
  2362. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2363. 08900 /* Types and constants shared between the generic and device dependent
  2364. 08901  * device driver code.
  2365. 08902  */
  2366. 08903
  2367. 08904 #include <minix/callnr.h>
  2368. 08905 #include <minix/com.h>
  2369. 08906 #include "proc.h"
  2370. 08907 #include <minix/partition.h>
  2371. 08908
  2372. 08909 /* Info about and entry points into the device dependent code. */
  2373. 08910 struct driver {
  2374. 08911   _PROTOTYPE( char *(*dr_name), (void) );
  2375. 08912   _PROTOTYPE( int (*dr_open), (struct driver *dp, message *m_ptr) );
  2376. 08913   _PROTOTYPE( int (*dr_close), (struct driver *dp, message *m_ptr) );
  2377. 08914   _PROTOTYPE( int (*dr_ioctl), (struct driver *dp, message *m_ptr) );
  2378. 08915   _PROTOTYPE( struct device *(*dr_prepare), (int device) );
  2379. 08916   _PROTOTYPE( int (*dr_schedule), (int proc_nr, struct iorequest_s *request) );
  2380. 08917   _PROTOTYPE( int (*dr_finish), (void) );
  2381. 08918   _PROTOTYPE( void (*dr_cleanup), (void) );
  2382. 08919   _PROTOTYPE( void (*dr_geometry), (struct partition *entry) );
  2383. 08920 };
  2384. 08921
  2385. 08922 #if (CHIP == INTEL)
  2386. 08923
  2387. 08924 /* Number of bytes you can DMA before hitting a 64K boundary: */
  2388. 08925 #define dma_bytes_left(phys)    
  2389. 08926    ((unsigned) (sizeof(int) == 2 ? 0 : 0x10000) - (unsigned) ((phys) & 0xFFFF))
  2390. 08927
  2391. 08928 #endif /* CHIP == INTEL */
  2392. 08929
  2393. 08930 /* Base and size of a partition in bytes. */
  2394. 08931 struct device {
  2395. 08932   unsigned long dv_base;
  2396. 08933   unsigned long dv_size;
  2397. 08934 };
  2398. 08935
  2399. 08936 #define NIL_DEV         ((struct device *) 0)
  2400. 08937
  2401. 08938 /* Functions defined by driver.c: */
  2402. 08939 _PROTOTYPE( void driver_task, (struct driver *dr) );
  2403. 08940 _PROTOTYPE( int do_rdwt, (struct driver *dr, message *m_ptr) );
  2404. 08941 _PROTOTYPE( int do_vrdwt, (struct driver *dr, message *m_ptr) );
  2405. 08942 _PROTOTYPE( char *no_name, (void) );
  2406. 08943 _PROTOTYPE( int do_nop, (struct driver *dp, message *m_ptr) );
  2407. 08944 _PROTOTYPE( int nop_finish, (void) );
  2408. 08945 _PROTOTYPE( void nop_cleanup, (void) );
  2409. 08946 _PROTOTYPE( void clock_mess, (int ticks, watchdog_t func) );
  2410. 08947 _PROTOTYPE( int do_diocntl, (struct driver *dr, message *m_ptr) );
  2411. 08948
  2412. 08949 /* Parameters for the disk drive. */
  2413. 08950 #define SECTOR_SIZE      512    /* physical sector size in bytes */
  2414. 08951 #define SECTOR_SHIFT       9    /* for division */
  2415. 08952 #define SECTOR_MASK      511    /* and remainder */
  2416. 08953
  2417. 08954 /* Size of the DMA buffer buffer in bytes. */
  2418. 08955 #define DMA_BUF_SIZE    (DMA_SECTORS * SECTOR_SIZE)
  2419. 08956
  2420. 08957 #if (CHIP == INTEL)
  2421. 08958 extern u8_t *tmp_buf;                   /* the DMA buffer */
  2422. 08959 #else
  2423. 08960 extern u8_t tmp_buf[];                  /* the DMA buffer */
  2424. 08961 #endif
  2425. 08962 extern phys_bytes tmp_phys;             /* phys address of DMA buffer */
  2426. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2427. src/kernel/drvlib.h    
  2428. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2429. 09000 /* IBM device driver definitions                        Author: Kees J. Bot
  2430. 09001  *                                                              7 Dec 1995
  2431. 09002  */
  2432. 09003
  2433. 09004 #include <ibm/partition.h>
  2434. 09005
  2435. 09006 _PROTOTYPE( void partition, (struct driver *dr, int device, int style) );
  2436. 09007
  2437. 09008 /* BIOS parameter table layout. */
  2438. 09009 #define bp_cylinders(t)         (* (u16_t *) (&(t)[0]))
  2439. 09010 #define bp_heads(t)             (* (u8_t *)  (&(t)[2]))
  2440. 09011 #define bp_reduced_wr(t)        (* (u16_t *) (&(t)[3]))
  2441. 09012 #define bp_precomp(t)           (* (u16_t *) (&(t)[5]))
  2442. 09013 #define bp_max_ecc(t)           (* (u8_t *)  (&(t)[7]))
  2443. 09014 #define bp_ctlbyte(t)           (* (u8_t *)  (&(t)[8]))
  2444. 09015 #define bp_landingzone(t)       (* (u16_t *) (&(t)[12]))
  2445. 09016 #define bp_sectors(t)           (* (u8_t *)  (&(t)[14]))
  2446. 09017
  2447. 09018 /* Miscellaneous. */
  2448. 09019 #define DEV_PER_DRIVE   (1 + NR_PARTITIONS)
  2449. 09020 #define MINOR_hd1a      128
  2450. 09021 #define MINOR_fd0a      (28<<2)
  2451. 09022 #define P_FLOPPY        0
  2452. 09023 #define P_PRIMARY       1
  2453. 09024 #define P_SUB           2
  2454. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2455. src/kernel/glo.h    
  2456. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2457. 09100 /* Global variables used in the kernel. */
  2458. 09101
  2459. 09102 /* EXTERN is defined as extern except in table.c. */
  2460. 09103 #ifdef _TABLE
  2461. 09104 #undef EXTERN
  2462. 09105 #define EXTERN
  2463. 09106 #endif
  2464. 09107
  2465. 09108 /* Kernel memory. */
  2466. 09109 EXTERN phys_bytes code_base;    /* base of kernel code */
  2467. 09110 EXTERN phys_bytes data_base;    /* base of kernel data */
  2468. 09111
  2469. 09112 /* Low level interrupt communications. */
  2470. 09113 EXTERN struct proc *held_head;  /* head of queue of held-up interrupts */
  2471. 09114 EXTERN struct proc *held_tail;  /* tail of queue of held-up interrupts */
  2472. 09115 EXTERN unsigned char k_reenter; /* kernel reentry count (entry count less 1)*/
  2473. 09116
  2474. 09117 /* Process table.  Here to stop too many things having to include proc.h. */
  2475. 09118 EXTERN struct proc *proc_ptr;   /* pointer to currently running process */
  2476. 09119
  2477. 09120 /* Signals. */
  2478. 09121 EXTERN int sig_procs;           /* number of procs with p_pending != 0 */
  2479. 09122
  2480. 09123 /* Memory sizes. */
  2481. 09124 EXTERN struct memory mem[NR_MEMS];      /* base and size of chunks of memory */
  2482. 09125 EXTERN phys_clicks tot_mem_size;        /* total system memory size */
  2483. 09126
  2484. 09127 /* Miscellaneous. */
  2485. 09128 extern u16_t sizes[];           /* table filled in by boot monitor */
  2486. 09129 extern struct tasktab tasktab[];/* initialized in table.c, so extern here */
  2487. 09130 extern char *t_stack[];         /* initialized in table.c, so extern here */
  2488. 09131 EXTERN unsigned lost_ticks;     /* clock ticks counted outside the clock task */
  2489. 09132 EXTERN clock_t tty_timeout;     /* time to wake up the TTY task */
  2490. 09133 EXTERN int current;             /* currently visible console */
  2491. 09134
  2492. 09135 #if (CHIP == INTEL)
  2493. 09136
  2494. 09137 /* Machine type. */
  2495. 09138 EXTERN int pc_at;               /* PC-AT compatible hardware interface */
  2496. 09139 EXTERN int ps_mca;              /* PS/2 with Micro Channel */
  2497. 09140 EXTERN unsigned int processor;  /* 86, 186, 286, 386, ... */
  2498. 09141 #if _WORD_SIZE == 2
  2499. 09142 EXTERN int protected_mode;      /* nonzero if running in Intel protected mode*/
  2500. 09143 #else
  2501. 09144 #define protected_mode  1       /* 386 mode implies protected mode */
  2502. 09145 #endif
  2503. 09146
  2504. 09147 /* Video card types. */
  2505. 09148 EXTERN int ega;                 /* nonzero if console is EGA */
  2506. 09149 EXTERN int vga;                 /* nonzero if console is VGA */
  2507. 09150
  2508. 09151 /* Memory sizes. */
  2509. 09152 EXTERN unsigned ext_memsize;    /* initialized by assembler startup code */
  2510. 09153 EXTERN unsigned low_memsize;
  2511. 09154
  2512. 09155 /* Miscellaneous. */
  2513. 09156 EXTERN irq_handler_t irq_table[NR_IRQ_VECTORS];
  2514. 09157 EXTERN int irq_use;             /* bit map of all in-use irq's */
  2515. 09158 EXTERN reg_t mon_ss, mon_sp;    /* monitor stack */
  2516. 09159 EXTERN int mon_return;          /* true if return to the monitor possible */
  2517. 09160 EXTERN phys_bytes reboot_code;  /* program for the boot monitor */
  2518. 09161
  2519. 09162 /* Variables that are initialized elsewhere are just extern here. */
  2520. 09163 extern struct segdesc_s gdt[];  /* global descriptor table for protected mode*/
  2521. 09164
  2522. 09165 EXTERN _PROTOTYPE( void (*level0_func), (void) );
  2523. 09166 #endif /* (CHIP == INTEL) */
  2524. 09167
  2525. 09168 #if (CHIP == M68000)
  2526. 09169 /* Variables that are initialized elsewhere are just extern here. */
  2527. 09170 extern int keypad;              /* Flag for keypad mode */
  2528. 09171 extern int app_mode;            /* Flag for arrow key application mode */
  2529. 09172 extern int STdebKey;            /* nonzero if ctl-alt-Fx detected */
  2530. 09173 extern struct tty *cur_cons;    /* virtual cons currently displayed */
  2531. 09174 extern unsigned char font8[];   /* 8 pixel wide font table (initialized) */
  2532. 09175 extern unsigned char font12[];  /* 12 pixel wide font table (initialized) */
  2533. 09176 extern unsigned char font16[];  /* 16 pixel wide font table (initialized) */
  2534. 09177 extern unsigned short resolution; /* screen res; ST_RES_LOW..TT_RES_HIGH */
  2535. 09178 #endif
  2536. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2537. src/kernel/kernel.h    
  2538. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2539. 09200 /* This is the master header for the kernel.  It includes some other files
  2540. 09201  * and defines the principal constants.
  2541. 09202  */
  2542. 09203 #define _POSIX_SOURCE      1    /* tell headers to include POSIX stuff */
  2543. 09204 #define _MINIX             1    /* tell headers to include MINIX stuff */
  2544. 09205 #define _SYSTEM            1    /* tell headers that this is the kernel */
  2545. 09206
  2546. 09207 /* The following are so basic, all the *.c files get them automatically. */
  2547. 09208 #include <minix/config.h>       /* MUST be first */
  2548. 09209 #include <ansi.h>               /* MUST be second */
  2549. 09210 #include <sys/types.h>
  2550. 09211 #include <minix/const.h>
  2551. 09212 #include <minix/type.h>
  2552. 09213 #include <minix/syslib.h>
  2553. 09214
  2554. 09215 #include <string.h>
  2555. 09216 #include <limits.h>
  2556. 09217 #include <errno.h>
  2557. 09218
  2558. 09219 #include "const.h"
  2559. 09220 #include "type.h"
  2560. 09221 #include "proto.h"
  2561. 09222 #include "glo.h"
  2562. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2563. src/kernel/ne2000.h    
  2564. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2565. 09300 /*
  2566. 09301 ne2000.h
  2567. 09302
  2568. 09303 Created:        March 15, 1994 by Philip Homburg <philip@cs.vu.nl>
  2569. 09304 */
  2570. 09305
  2571. 09306 #ifndef NE2000_H
  2572. 09307 #define NE2000_H
  2573. 09308
  2574. 09309 #define NE_DP8390       0x00
  2575. 09310 #define NE_DATA         0x10
  2576. 09311 #define NE_RESET        0x1F
  2577. 09312
  2578. 09313 #define NE1000_START    0x2000
  2579. 09314 #define NE1000_SIZE     0x2000
  2580. 09315 #define NE2000_START    0x4000
  2581. 09316 #define NE2000_SIZE     0x4000
  2582. 09317
  2583. 09318 #define inb_ne(dep, reg) (in_byte(dep->de_base_port+reg))
  2584. 09319 #define outb_ne(dep, reg, data) (out_byte(dep->de_base_port+reg, data))
  2585. 09320 #define inw_ne(dep, reg) (in_word(dep->de_base_port+reg))
  2586. 09321 #define outw_ne(dep, reg, data) (out_word(dep->de_base_port+reg, data))
  2587. 09322
  2588. 09323 #endif /* NE2000_H */
  2589. 09324
  2590. 09325 /*
  2591. 09326  * $PchHeader: /mount/hd2/minix/sys/kernel/ibm/RCS/ne2000.h,v 1.1 1994/04/07 22:58:48 philip Exp $
  2592. 09327  */
  2593. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2594. src/kernel/proc.h    
  2595. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2596. 09400 #ifndef PROC_H
  2597. 09401 #define PROC_H
  2598. 09402
  2599. 09403 /* Here is the declaration of the process table.  It contains the process'
  2600. 09404  * registers, memory map, accounting, and message send/receive information.
  2601. 09405  * Many assembly code routines reference fields in it.  The offsets to these
  2602. 09406  * fields are defined in the assembler include file sconst.h.  When changing
  2603. 09407  * 'proc', be sure to change sconst.h to match.
  2604. 09408  */
  2605. 09409
  2606. 09410 struct proc {
  2607. 09411   struct stackframe_s p_reg;    /* process' registers saved in stack frame */
  2608. 09412
  2609. 09413 #if (CHIP == INTEL)
  2610. 09414   reg_t p_ldt_sel;              /* selector in gdt giving ldt base and limit*/
  2611. 09415   struct segdesc_s p_ldt[2];    /* local descriptors for code and data */
  2612. 09416                                 /* 2 is LDT_SIZE - avoid include protect.h */
  2613. 09417 #endif /* (CHIP == INTEL) */
  2614. 09418
  2615. 09419 #if (CHIP == M68000)
  2616. 09420   reg_t p_splow;                /* lowest observed stack value */
  2617. 09421   int p_trap;                   /* trap type (only low byte) */
  2618. 09422 #if (SHADOWING == 0)
  2619. 09423   char *p_crp;                  /* mmu table pointer (really struct _rpr *) */
  2620. 09424 #else
  2621. 09425   phys_clicks p_shadow;         /* set if shadowed process image */
  2622. 09426   int align;                    /* make the struct size a multiple of 4 */
  2623. 09427 #endif
  2624. 09428   int p_nflips;                 /* statistics */
  2625. 09429   char p_physio;                /* cannot be (un)shadowed now if set */
  2626. 09430 #if defined(FPP)
  2627. 09431   struct fsave p_fsave;         /* FPP state frame and registers */
  2628. 09432   int align2;                   /* make the struct size a multiple of 4 */
  2629. 09433 #endif
  2630. 09434 #endif /* (CHIP == M68000) */
  2631. 09435
  2632. 09436   reg_t *p_stguard;             /* stack guard word */
  2633. 09437
  2634. 09438   int p_nr;                     /* number of this process (for fast access) */
  2635. 09439
  2636. 09440   int p_int_blocked;            /* nonzero if int msg blocked by busy task */
  2637. 09441   int p_int_held;               /* nonzero if int msg held by busy syscall */
  2638. 09442   struct proc *p_nextheld;      /* next in chain of held-up int processes */
  2639. 09443
  2640. 09444   int p_flags;                  /* P_SLOT_FREE, SENDING, RECEIVING, etc. */
  2641. 09445   struct mem_map p_map[NR_SEGS];/* memory map */
  2642. 09446   pid_t p_pid;                  /* process id passed in from MM */
  2643. 09447
  2644. 09448   clock_t user_time;            /* user time in ticks */
  2645. 09449   clock_t sys_time;             /* sys time in ticks */
  2646. 09450   clock_t child_utime;          /* cumulative user time of children */
  2647. 09451   clock_t child_stime;          /* cumulative sys time of children */
  2648. 09452   clock_t p_alarm;              /* time of next alarm in ticks, or 0 */
  2649. 09453
  2650. 09454   struct proc *p_callerq;       /* head of list of procs wishing to send */
  2651. 09455   struct proc *p_sendlink;      /* link to next proc wishing to send */
  2652. 09456   message *p_messbuf;           /* pointer to message buffer */
  2653. 09457   int p_getfrom;                /* from whom does process want to receive? */
  2654. 09458   int p_sendto;
  2655. 09459
  2656. 09460   struct proc *p_nextready;     /* pointer to next ready process */
  2657. 09461   sigset_t p_pending;           /* bit map for pending signals */
  2658. 09462   unsigned p_pendcount;         /* count of pending and unfinished signals */
  2659. 09463
  2660. 09464   char p_name[16];              /* name of the process */
  2661. 09465 };
  2662. 09466
  2663. 09467 /* Guard word for task stacks. */
  2664. 09468 #define STACK_GUARD     ((reg_t) (sizeof(reg_t) == 2 ? 0xBEEF : 0xDEADBEEF))
  2665. 09469
  2666. 09470 /* Bits for p_flags in proc[].  A process is runnable iff p_flags == 0. */
  2667. 09471 #define P_SLOT_FREE      001    /* set when slot is not in use */
  2668. 09472 #define NO_MAP           002    /* keeps unmapped forked child from running */
  2669. 09473 #define SENDING          004    /* set when process blocked trying to send */
  2670. 09474 #define RECEIVING        010    /* set when process blocked trying to recv */
  2671. 09475 #define PENDING          020    /* set when inform() of signal pending */
  2672. 09476 #define SIG_PENDING      040    /* keeps to-be-signalled proc from running */
  2673. 09477 #define P_STOP          0100    /* set when process is being traced */
  2674. 09478
  2675. 09479 /* Magic process table addresses. */
  2676. 09480 #define BEG_PROC_ADDR (&proc[0])
  2677. 09481 #define END_PROC_ADDR (&proc[NR_TASKS + NR_PROCS])
  2678. 09482 #define END_TASK_ADDR (&proc[NR_TASKS])
  2679. 09483 #define BEG_SERV_ADDR (&proc[NR_TASKS])
  2680. 09484 #define BEG_USER_ADDR (&proc[NR_TASKS + LOW_USER])
  2681. 09485
  2682. 09486 #define NIL_PROC          ((struct proc *) 0)
  2683. 09487 #define isidlehardware(n) ((n) == IDLE || (n) == HARDWARE)
  2684. 09488 #define isokprocn(n)      ((unsigned) ((n) + NR_TASKS) < NR_PROCS + NR_TASKS)
  2685. 09489 #define isoksrc_dest(n)   (isokprocn(n) || (n) == ANY)
  2686. 09490 #define isoksusern(n)     ((unsigned) (n) < NR_PROCS)
  2687. 09491 #define isokusern(n)      ((unsigned) ((n) - LOW_USER) < NR_PROCS - LOW_USER)
  2688. 09492 #define isrxhardware(n)   ((n) == ANY || (n) == HARDWARE)
  2689. 09493 #define issysentn(n)      ((n) == FS_PROC_NR || (n) == MM_PROC_NR)
  2690. 09494 #define istaskp(p)        ((p) < END_TASK_ADDR && (p) != proc_addr(IDLE))
  2691. 09495 #define isuserp(p)        ((p) >= BEG_USER_ADDR)
  2692. 09496 #define proc_addr(n)      (pproc_addr + NR_TASKS)[(n)]
  2693. 09497 #define cproc_addr(n)     (&(proc + NR_TASKS)[(n)])
  2694. 09498 #define proc_number(p)    ((p)->p_nr)
  2695. 09499 #define proc_vir2phys(p, vir) 
  2696. 09500                           (((phys_bytes)(p)->p_map[D].mem_phys << CLICK_SHIFT) 
  2697. 09501                                                         + (vir_bytes) (vir))
  2698. 09502 #if (SHADOWING == 1)
  2699. 09503 #define isshadowp(p)      ((p)->p_shadow != 0)
  2700. 09504 #endif
  2701. 09505
  2702. 09506 EXTERN struct proc proc[NR_TASKS + NR_PROCS];   /* process table */
  2703. 09507 EXTERN struct proc *pproc_addr[NR_TASKS + NR_PROCS];
  2704. 09508 /* ptrs to process table slots; fast because now a process entry can be found
  2705. 09509    by indexing the pproc_addr array, while accessing an element i requires
  2706. 09510    a multiplication with sizeof(struct proc) to determine the address */
  2707. 09511 EXTERN struct proc *bill_ptr;   /* ptr to process to bill for clock ticks */
  2708. 09512 EXTERN struct proc *rdy_head[NQ];       /* pointers to ready list headers */
  2709. 09513 EXTERN struct proc *rdy_tail[NQ];       /* pointers to ready list tails */
  2710. 09514
  2711. 09515 #endif /* PROC_H */
  2712. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2713. src/kernel/protect.h    
  2714. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2715. 09600 /* Constants for protected mode. */
  2716. 09601
  2717. 09602 /* Table sizes. */
  2718. 09603 #define GDT_SIZE (FIRST_LDT_INDEX + NR_TASKS + NR_PROCS) /* spec. and LDT's */
  2719. 09604 #define IDT_SIZE (IRQ8_VECTOR + 8)      /* only up to the highest vector */
  2720. 09605 #define LDT_SIZE         2      /* contains CS and DS only */
  2721. 09606
  2722. 09607 /* Fixed global descriptors.  1 to 7 are prescribed by the BIOS. */
  2723. 09608 #define GDT_INDEX        1      /* GDT descriptor */
  2724. 09609 #define IDT_INDEX        2      /* IDT descriptor */
  2725. 09610 #define DS_INDEX         3      /* kernel DS */
  2726. 09611 #define ES_INDEX         4      /* kernel ES (386: flag 4 Gb at startup) */
  2727. 09612 #define SS_INDEX         5      /* kernel SS (386: monitor SS at startup) */
  2728. 09613 #define CS_INDEX         6      /* kernel CS */
  2729. 09614 #define MON_CS_INDEX     7      /* temp for BIOS (386: monitor CS at startup) */
  2730. 09615 #define TSS_INDEX        8      /* kernel TSS */
  2731. 09616 #define DS_286_INDEX     9      /* scratch 16-bit source segment */
  2732. 09617 #define ES_286_INDEX    10      /* scratch 16-bit destination segment */
  2733. 09618 #define VIDEO_INDEX     11      /* video memory segment */
  2734. 09619 #define DP_ETH0_INDEX   12      /* Western Digital Etherplus buffer */
  2735. 09620 #define DP_ETH1_INDEX   13      /* Western Digital Etherplus buffer */
  2736. 09621 #define FIRST_LDT_INDEX 14      /* rest of descriptors are LDT's */
  2737. 09622
  2738. 09623 #define GDT_SELECTOR      0x08  /* (GDT_INDEX * DESC_SIZE) bad for asld */
  2739. 09624 #define IDT_SELECTOR      0x10  /* (IDT_INDEX * DESC_SIZE) */
  2740. 09625 #define DS_SELECTOR       0x18  /* (DS_INDEX * DESC_SIZE) */
  2741. 09626 #define ES_SELECTOR       0x20  /* (ES_INDEX * DESC_SIZE) */
  2742. 09627 #define FLAT_DS_SELECTOR  0x21  /* less privileged ES */
  2743. 09628 #define SS_SELECTOR       0x28  /* (SS_INDEX * DESC_SIZE) */
  2744. 09629 #define CS_SELECTOR       0x30  /* (CS_INDEX * DESC_SIZE) */
  2745. 09630 #define MON_CS_SELECTOR   0x38  /* (MON_CS_INDEX * DESC_SIZE) */
  2746. 09631 #define TSS_SELECTOR      0x40  /* (TSS_INDEX * DESC_SIZE) */
  2747. 09632 #define DS_286_SELECTOR   0x49  /* (DS_286_INDEX * DESC_SIZE + 1) */
  2748. 09633 #define ES_286_SELECTOR   0x51  /* (ES_286_INDEX * DESC_SIZE + 1) */
  2749. 09634 #define VIDEO_SELECTOR    0x59  /* (VIDEO_INDEX * DESC_SIZE + 1) */
  2750. 09635 #define DP_ETH0_SELECTOR  0x61  /* (DP_ETH0_INDEX * DESC_SIZE) */
  2751. 09636 #define DP_ETH1_SELECTOR  0x69  /* (DP_ETH1_INDEX * DESC_SIZE) */
  2752. 09637
  2753. 09638 /* Fixed local descriptors. */
  2754. 09639 #define CS_LDT_INDEX     0      /* process CS */
  2755. 09640 #define DS_LDT_INDEX     1      /* process DS=ES=FS=GS=SS */
  2756. 09641
  2757. 09642 /* Privileges. */
  2758. 09643 #define INTR_PRIVILEGE   0      /* kernel and interrupt handlers */
  2759. 09644 #define TASK_PRIVILEGE   1
  2760. 09645 #define USER_PRIVILEGE   3
  2761. 09646
  2762. 09647 /* 286 hardware constants. */
  2763. 09648
  2764. 09649 /* Exception vector numbers. */
  2765. 09650 #define BOUNDS_VECTOR       5   /* bounds check failed */
  2766. 09651 #define INVAL_OP_VECTOR     6   /* invalid opcode */
  2767. 09652 #define COPROC_NOT_VECTOR   7   /* coprocessor not available */
  2768. 09653 #define DOUBLE_FAULT_VECTOR 8
  2769. 09654 #define COPROC_SEG_VECTOR   9   /* coprocessor segment overrun */
  2770. 09655 #define INVAL_TSS_VECTOR   10   /* invalid TSS */
  2771. 09656 #define SEG_NOT_VECTOR     11   /* segment not present */
  2772. 09657 #define STACK_FAULT_VECTOR 12   /* stack exception */
  2773. 09658 #define PROTECTION_VECTOR  13   /* general protection */
  2774. 09659
  2775. 09660 /* Selector bits. */
  2776. 09661 #define TI            0x04      /* table indicator */
  2777. 09662 #define RPL           0x03      /* requester privilege level */
  2778. 09663
  2779. 09664 /* Descriptor structure offsets. */
  2780. 09665 #define DESC_BASE        2      /* to base_low */
  2781. 09666 #define DESC_BASE_MIDDLE 4      /* to base_middle */
  2782. 09667 #define DESC_ACCESS      5      /* to access byte */
  2783. 09668 #define DESC_SIZE        8      /* sizeof (struct segdesc_s) */
  2784. 09669
  2785. 09670 /* Segment sizes. */
  2786. 09671 #define MAX_286_SEG_SIZE 0x10000L
  2787. 09672
  2788. 09673 /* Base and limit sizes and shifts. */
  2789. 09674 #define BASE_MIDDLE_SHIFT   16  /* shift for base --> base_middle */
  2790. 09675
  2791. 09676 /* Access-byte and type-byte bits. */
  2792. 09677 #define PRESENT       0x80      /* set for descriptor present */
  2793. 09678 #define DPL           0x60      /* descriptor privilege level mask */
  2794. 09679 #define DPL_SHIFT        5
  2795. 09680 #define SEGMENT       0x10      /* set for segment-type descriptors */
  2796. 09681
  2797. 09682 /* Access-byte bits. */
  2798. 09683 #define EXECUTABLE    0x08      /* set for executable segment */
  2799. 09684 #define CONFORMING    0x04      /* set for conforming segment if executable */
  2800. 09685 #define EXPAND_DOWN   0x04      /* set for expand-down segment if !executable*/
  2801. 09686 #define READABLE      0x02      /* set for readable segment if executable */
  2802. 09687 #define WRITEABLE     0x02      /* set for writeable segment if !executable */
  2803. 09688 #define TSS_BUSY      0x02      /* set if TSS descriptor is busy */
  2804. 09689 #define ACCESSED      0x01      /* set if segment accessed */
  2805. 09690
  2806. 09691 /* Special descriptor types. */
  2807. 09692 #define AVL_286_TSS      1      /* available 286 TSS */
  2808. 09693 #define LDT              2      /* local descriptor table */
  2809. 09694 #define BUSY_286_TSS     3      /* set transparently to the software */
  2810. 09695 #define CALL_286_GATE    4      /* not used */
  2811. 09696 #define TASK_GATE        5      /* only used by debugger */
  2812. 09697 #define INT_286_GATE     6      /* interrupt gate, used for all vectors */
  2813. 09698 #define TRAP_286_GATE    7      /* not used */
  2814. 09699
  2815. 09700 /* Extra 386 hardware constants. */
  2816. 09701
  2817. 09702 /* Exception vector numbers. */
  2818. 09703 #define PAGE_FAULT_VECTOR   14