add directory kernel
This commit is contained in:
220
kernel/0.95/linux-0.95/include/a.out.h
Normal file
220
kernel/0.95/linux-0.95/include/a.out.h
Normal file
@@ -0,0 +1,220 @@
|
||||
#ifndef _A_OUT_H
|
||||
#define _A_OUT_H
|
||||
|
||||
#define __GNU_EXEC_MACROS__
|
||||
|
||||
struct exec {
|
||||
unsigned long a_magic; /* Use macros N_MAGIC, etc for access */
|
||||
unsigned a_text; /* length of text, in bytes */
|
||||
unsigned a_data; /* length of data, in bytes */
|
||||
unsigned a_bss; /* length of uninitialized data area for file, in bytes */
|
||||
unsigned a_syms; /* length of symbol table data in file, in bytes */
|
||||
unsigned a_entry; /* start address */
|
||||
unsigned a_trsize; /* length of relocation info for text, in bytes */
|
||||
unsigned a_drsize; /* length of relocation info for data, in bytes */
|
||||
};
|
||||
|
||||
#ifndef N_MAGIC
|
||||
#define N_MAGIC(exec) ((exec).a_magic)
|
||||
#endif
|
||||
|
||||
#ifndef OMAGIC
|
||||
/* Code indicating object file or impure executable. */
|
||||
#define OMAGIC 0407
|
||||
/* Code indicating pure executable. */
|
||||
#define NMAGIC 0410
|
||||
/* Code indicating demand-paged executable. */
|
||||
#define ZMAGIC 0413
|
||||
#endif /* not OMAGIC */
|
||||
|
||||
#ifndef N_BADMAG
|
||||
#define N_BADMAG(x) \
|
||||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC)
|
||||
#endif
|
||||
|
||||
#define _N_BADMAG(x) \
|
||||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC)
|
||||
|
||||
#define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
|
||||
|
||||
#ifndef N_TXTOFF
|
||||
#define N_TXTOFF(x) \
|
||||
(N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
|
||||
#endif
|
||||
|
||||
#ifndef N_DATOFF
|
||||
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
|
||||
#endif
|
||||
|
||||
#ifndef N_TRELOFF
|
||||
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
|
||||
#endif
|
||||
|
||||
#ifndef N_DRELOFF
|
||||
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
|
||||
#endif
|
||||
|
||||
#ifndef N_SYMOFF
|
||||
#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
|
||||
#endif
|
||||
|
||||
#ifndef N_STROFF
|
||||
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
|
||||
#endif
|
||||
|
||||
/* Address of text segment in memory after it is loaded. */
|
||||
#ifndef N_TXTADDR
|
||||
#define N_TXTADDR(x) 0
|
||||
#endif
|
||||
|
||||
/* Address of data segment in memory after it is loaded.
|
||||
Note that it is up to you to define SEGMENT_SIZE
|
||||
on machines not listed here. */
|
||||
#if defined(vax) || defined(hp300) || defined(pyr)
|
||||
#define SEGMENT_SIZE PAGE_SIZE
|
||||
#endif
|
||||
#ifdef hp300
|
||||
#define PAGE_SIZE 4096
|
||||
#endif
|
||||
#ifdef sony
|
||||
#define SEGMENT_SIZE 0x2000
|
||||
#endif /* Sony. */
|
||||
#ifdef is68k
|
||||
#define SEGMENT_SIZE 0x20000
|
||||
#endif
|
||||
#if defined(m68k) && defined(PORTAR)
|
||||
#define PAGE_SIZE 0x400
|
||||
#define SEGMENT_SIZE PAGE_SIZE
|
||||
#endif
|
||||
|
||||
#define PAGE_SIZE 4096
|
||||
#define SEGMENT_SIZE 1024
|
||||
|
||||
#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
|
||||
|
||||
#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
|
||||
|
||||
#ifndef N_DATADDR
|
||||
#define N_DATADDR(x) \
|
||||
(N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \
|
||||
: (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
|
||||
#endif
|
||||
|
||||
/* Address of bss segment in memory after it is loaded. */
|
||||
#ifndef N_BSSADDR
|
||||
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
|
||||
#endif
|
||||
|
||||
#ifndef N_NLIST_DECLARED
|
||||
struct nlist {
|
||||
union {
|
||||
char *n_name;
|
||||
struct nlist *n_next;
|
||||
long n_strx;
|
||||
} n_un;
|
||||
unsigned char n_type;
|
||||
char n_other;
|
||||
short n_desc;
|
||||
unsigned long n_value;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef N_UNDF
|
||||
#define N_UNDF 0
|
||||
#endif
|
||||
#ifndef N_ABS
|
||||
#define N_ABS 2
|
||||
#endif
|
||||
#ifndef N_TEXT
|
||||
#define N_TEXT 4
|
||||
#endif
|
||||
#ifndef N_DATA
|
||||
#define N_DATA 6
|
||||
#endif
|
||||
#ifndef N_BSS
|
||||
#define N_BSS 8
|
||||
#endif
|
||||
#ifndef N_COMM
|
||||
#define N_COMM 18
|
||||
#endif
|
||||
#ifndef N_FN
|
||||
#define N_FN 15
|
||||
#endif
|
||||
|
||||
#ifndef N_EXT
|
||||
#define N_EXT 1
|
||||
#endif
|
||||
#ifndef N_TYPE
|
||||
#define N_TYPE 036
|
||||
#endif
|
||||
#ifndef N_STAB
|
||||
#define N_STAB 0340
|
||||
#endif
|
||||
|
||||
/* The following type indicates the definition of a symbol as being
|
||||
an indirect reference to another symbol. The other symbol
|
||||
appears as an undefined reference, immediately following this symbol.
|
||||
|
||||
Indirection is asymmetrical. The other symbol's value will be used
|
||||
to satisfy requests for the indirect symbol, but not vice versa.
|
||||
If the other symbol does not have a definition, libraries will
|
||||
be searched to find a definition. */
|
||||
#define N_INDR 0xa
|
||||
|
||||
/* The following symbols refer to set elements.
|
||||
All the N_SET[ATDB] symbols with the same name form one set.
|
||||
Space is allocated for the set in the text section, and each set
|
||||
element's value is stored into one word of the space.
|
||||
The first word of the space is the length of the set (number of elements).
|
||||
|
||||
The address of the set is made into an N_SETV symbol
|
||||
whose name is the same as the name of the set.
|
||||
This symbol acts like a N_DATA global symbol
|
||||
in that it can satisfy undefined external references. */
|
||||
|
||||
/* These appear as input to LD, in a .o file. */
|
||||
#define N_SETA 0x14 /* Absolute set element symbol */
|
||||
#define N_SETT 0x16 /* Text set element symbol */
|
||||
#define N_SETD 0x18 /* Data set element symbol */
|
||||
#define N_SETB 0x1A /* Bss set element symbol */
|
||||
|
||||
/* This is output from LD. */
|
||||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||||
|
||||
#ifndef N_RELOCATION_INFO_DECLARED
|
||||
|
||||
/* This structure describes a single relocation to be performed.
|
||||
The text-relocation section of the file is a vector of these structures,
|
||||
all of which apply to the text section.
|
||||
Likewise, the data-relocation section applies to the data section. */
|
||||
|
||||
struct relocation_info
|
||||
{
|
||||
/* Address (within segment) to be relocated. */
|
||||
int r_address;
|
||||
/* The meaning of r_symbolnum depends on r_extern. */
|
||||
unsigned int r_symbolnum:24;
|
||||
/* Nonzero means value is a pc-relative offset
|
||||
and it should be relocated for changes in its own address
|
||||
as well as for changes in the symbol or section specified. */
|
||||
unsigned int r_pcrel:1;
|
||||
/* Length (as exponent of 2) of the field to be relocated.
|
||||
Thus, a value of 2 indicates 1<<2 bytes. */
|
||||
unsigned int r_length:2;
|
||||
/* 1 => relocate with value of symbol.
|
||||
r_symbolnum is the index of the symbol
|
||||
in file's the symbol table.
|
||||
0 => relocate with the address of a segment.
|
||||
r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
|
||||
(the N_EXT bit may be set also, but signifies nothing). */
|
||||
unsigned int r_extern:1;
|
||||
/* Four bits that aren't used, but when writing an object file
|
||||
it is desirable to clear them. */
|
||||
unsigned int r_pad:4;
|
||||
};
|
||||
#endif /* no N_RELOCATION_INFO_DECLARED. */
|
||||
|
||||
|
||||
#endif /* __A_OUT_GNU_H__ */
|
||||
27
kernel/0.95/linux-0.95/include/asm/io.h
Normal file
27
kernel/0.95/linux-0.95/include/asm/io.h
Normal file
@@ -0,0 +1,27 @@
|
||||
static void inline outb(char value, unsigned short port)
|
||||
{
|
||||
__asm__ volatile ("outb %0,%1"::"a" (value),"d" (port));
|
||||
}
|
||||
|
||||
static void inline outb_p(char value, unsigned short port)
|
||||
{
|
||||
__asm__ volatile ("outb %0,%1\n\tjmp 1f\n1:\tjmp 1f\n1:"
|
||||
::"a" (value),"d" (port));
|
||||
}
|
||||
|
||||
static unsigned char inline inb(unsigned short port)
|
||||
{
|
||||
unsigned char _v;
|
||||
__asm__ volatile ("inb %1,%0":"=a" (_v):"d" (port));
|
||||
return _v;
|
||||
}
|
||||
|
||||
static unsigned char inb_p(unsigned short port)
|
||||
{
|
||||
unsigned char _v;
|
||||
__asm__ volatile ("inb %1,%0\n"
|
||||
"\tjmp 1f\n"
|
||||
"1:\tjmp 1f\n"
|
||||
"1:":"=a" (_v):"d" ((unsigned short) port));
|
||||
return _v;
|
||||
}
|
||||
14
kernel/0.95/linux-0.95/include/asm/memory.h
Normal file
14
kernel/0.95/linux-0.95/include/asm/memory.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* NOTE!!! memcpy(dest,src,n) assumes ds=es=normal data segment. This
|
||||
* goes for all kernel functions (ds=es=kernel space, fs=local data,
|
||||
* gs=null), as well as for all well-behaving user programs (ds=es=
|
||||
* user data space). This is NOT a bug, as any user program that changes
|
||||
* es deserves to die if it isn't careful.
|
||||
*/
|
||||
#define memcpy(dest,src,n) ({ \
|
||||
void * _res = dest; \
|
||||
__asm__ ("cld;rep;movsb" \
|
||||
::"D" ((long)(_res)),"S" ((long)(src)),"c" ((long) (n)) \
|
||||
:"di","si","cx"); \
|
||||
_res; \
|
||||
})
|
||||
65
kernel/0.95/linux-0.95/include/asm/segment.h
Normal file
65
kernel/0.95/linux-0.95/include/asm/segment.h
Normal file
@@ -0,0 +1,65 @@
|
||||
extern inline unsigned char get_fs_byte(const char * addr)
|
||||
{
|
||||
unsigned register char _v;
|
||||
|
||||
__asm__ ("movb %%fs:%1,%0":"=q" (_v):"m" (*addr));
|
||||
return _v;
|
||||
}
|
||||
|
||||
extern inline unsigned short get_fs_word(const unsigned short *addr)
|
||||
{
|
||||
unsigned short _v;
|
||||
|
||||
__asm__ ("movw %%fs:%1,%0":"=r" (_v):"m" (*addr));
|
||||
return _v;
|
||||
}
|
||||
|
||||
extern inline unsigned long get_fs_long(const unsigned long *addr)
|
||||
{
|
||||
unsigned long _v;
|
||||
|
||||
__asm__ ("movl %%fs:%1,%0":"=r" (_v):"m" (*addr)); \
|
||||
return _v;
|
||||
}
|
||||
|
||||
extern inline void put_fs_byte(char val,char *addr)
|
||||
{
|
||||
__asm__ ("movb %0,%%fs:%1"::"q" (val),"m" (*addr));
|
||||
}
|
||||
|
||||
extern inline void put_fs_word(short val,short * addr)
|
||||
{
|
||||
__asm__ ("movw %0,%%fs:%1"::"r" (val),"m" (*addr));
|
||||
}
|
||||
|
||||
extern inline void put_fs_long(unsigned long val,unsigned long * addr)
|
||||
{
|
||||
__asm__ ("movl %0,%%fs:%1"::"r" (val),"m" (*addr));
|
||||
}
|
||||
|
||||
/*
|
||||
* Someone who knows GNU asm better than I should double check the followig.
|
||||
* It seems to work, but I don't know if I'm doing something subtly wrong.
|
||||
* --- TYT, 11/24/91
|
||||
* [ nothing wrong here, Linus: I just changed the ax to be any reg ]
|
||||
*/
|
||||
|
||||
extern inline unsigned long get_fs()
|
||||
{
|
||||
unsigned short _v;
|
||||
__asm__("mov %%fs,%0":"=r" (_v):);
|
||||
return _v;
|
||||
}
|
||||
|
||||
extern inline unsigned long get_ds()
|
||||
{
|
||||
unsigned short _v;
|
||||
__asm__("mov %%ds,%0":"=r" (_v):);
|
||||
return _v;
|
||||
}
|
||||
|
||||
extern inline void set_fs(unsigned long val)
|
||||
{
|
||||
__asm__("mov %0,%%fs"::"r" ((unsigned short) val));
|
||||
}
|
||||
|
||||
66
kernel/0.95/linux-0.95/include/asm/system.h
Normal file
66
kernel/0.95/linux-0.95/include/asm/system.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#define move_to_user_mode() \
|
||||
__asm__ ("movl %%esp,%%eax\n\t" \
|
||||
"pushl $0x17\n\t" \
|
||||
"pushl %%eax\n\t" \
|
||||
"pushfl\n\t" \
|
||||
"pushl $0x0f\n\t" \
|
||||
"pushl $1f\n\t" \
|
||||
"iret\n" \
|
||||
"1:\tmovl $0x17,%%eax\n\t" \
|
||||
"mov %%ax,%%ds\n\t" \
|
||||
"mov %%ax,%%es\n\t" \
|
||||
"mov %%ax,%%fs\n\t" \
|
||||
"mov %%ax,%%gs" \
|
||||
:::"ax")
|
||||
|
||||
#define sti() __asm__ ("sti"::)
|
||||
#define cli() __asm__ ("cli"::)
|
||||
#define nop() __asm__ ("nop"::)
|
||||
|
||||
#define iret() __asm__ ("iret"::)
|
||||
|
||||
#define _set_gate(gate_addr,type,dpl,addr) \
|
||||
__asm__ ("movw %%dx,%%ax\n\t" \
|
||||
"movw %0,%%dx\n\t" \
|
||||
"movl %%eax,%1\n\t" \
|
||||
"movl %%edx,%2" \
|
||||
:: "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
|
||||
"m" (*((char *) (gate_addr))), \
|
||||
"m" (*(4+(char *) (gate_addr))), \
|
||||
"d" ((char *) (addr)),"a" (0x00080000) \
|
||||
:"ax","dx")
|
||||
|
||||
#define set_intr_gate(n,addr) \
|
||||
_set_gate(&idt[n],14,0,addr)
|
||||
|
||||
#define set_trap_gate(n,addr) \
|
||||
_set_gate(&idt[n],15,0,addr)
|
||||
|
||||
#define set_system_gate(n,addr) \
|
||||
_set_gate(&idt[n],15,3,addr)
|
||||
|
||||
#define _set_seg_desc(gate_addr,type,dpl,base,limit) {\
|
||||
*(gate_addr) = ((base) & 0xff000000) | \
|
||||
(((base) & 0x00ff0000)>>16) | \
|
||||
((limit) & 0xf0000) | \
|
||||
((dpl)<<13) | \
|
||||
(0x00408000) | \
|
||||
((type)<<8); \
|
||||
*((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \
|
||||
((limit) & 0x0ffff); }
|
||||
|
||||
#define _set_tssldt_desc(n,addr,type) \
|
||||
__asm__ ("movw $104,%1\n\t" \
|
||||
"movw %%ax,%2\n\t" \
|
||||
"rorl $16,%%eax\n\t" \
|
||||
"movb %%al,%3\n\t" \
|
||||
"movb $" type ",%4\n\t" \
|
||||
"movb $0x00,%5\n\t" \
|
||||
"movb %%ah,%6\n\t" \
|
||||
"rorl $16,%%eax" \
|
||||
::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \
|
||||
"m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \
|
||||
)
|
||||
|
||||
#define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89")
|
||||
#define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82")
|
||||
15
kernel/0.95/linux-0.95/include/const.h
Normal file
15
kernel/0.95/linux-0.95/include/const.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef _CONST_H
|
||||
#define _CONST_H
|
||||
|
||||
#define BUFFER_END 0x200000
|
||||
|
||||
#define I_TYPE 0170000
|
||||
#define I_DIRECTORY 0040000
|
||||
#define I_REGULAR 0100000
|
||||
#define I_BLOCK_SPECIAL 0060000
|
||||
#define I_CHAR_SPECIAL 0020000
|
||||
#define I_NAMED_PIPE 0010000
|
||||
#define I_SET_UID_BIT 0004000
|
||||
#define I_SET_GID_BIT 0002000
|
||||
|
||||
#endif
|
||||
34
kernel/0.95/linux-0.95/include/ctype.h
Normal file
34
kernel/0.95/linux-0.95/include/ctype.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef _CTYPE_H
|
||||
#define _CTYPE_H
|
||||
|
||||
#define _U 0x01 /* upper */
|
||||
#define _L 0x02 /* lower */
|
||||
#define _D 0x04 /* digit */
|
||||
#define _C 0x08 /* cntrl */
|
||||
#define _P 0x10 /* punct */
|
||||
#define _S 0x20 /* white space (space/lf/tab) */
|
||||
#define _X 0x40 /* hex digit */
|
||||
#define _SP 0x80 /* hard space (0x20) */
|
||||
|
||||
extern unsigned char _ctype[];
|
||||
extern char _ctmp;
|
||||
|
||||
#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D))
|
||||
#define isalpha(c) ((_ctype+1)[c]&(_U|_L))
|
||||
#define iscntrl(c) ((_ctype+1)[c]&(_C))
|
||||
#define isdigit(c) ((_ctype+1)[c]&(_D))
|
||||
#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D))
|
||||
#define islower(c) ((_ctype+1)[c]&(_L))
|
||||
#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP))
|
||||
#define ispunct(c) ((_ctype+1)[c]&(_P))
|
||||
#define isspace(c) ((_ctype+1)[c]&(_S))
|
||||
#define isupper(c) ((_ctype+1)[c]&(_U))
|
||||
#define isxdigit(c) ((_ctype+1)[c]&(_D|_X))
|
||||
|
||||
#define isascii(c) (((unsigned) c)<=0x7f)
|
||||
#define toascii(c) (((unsigned) c)&0x7f)
|
||||
|
||||
#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp)
|
||||
#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp)
|
||||
|
||||
#endif
|
||||
65
kernel/0.95/linux-0.95/include/errno.h
Normal file
65
kernel/0.95/linux-0.95/include/errno.h
Normal file
@@ -0,0 +1,65 @@
|
||||
#ifndef _ERRNO_H
|
||||
#define _ERRNO_H
|
||||
|
||||
/*
|
||||
* ok, as I hadn't got any other source of information about
|
||||
* possible error numbers, I was forced to use the same numbers
|
||||
* as minix.
|
||||
* Hopefully these are posix or something. I wouldn't know (and posix
|
||||
* isn't telling me - they want $$$ for their f***ing standard).
|
||||
*
|
||||
* We don't use the _SIGN cludge of minix, so kernel returns must
|
||||
* see to the sign by themselves.
|
||||
*
|
||||
* NOTE! Remember to change strerror() if you change this file!
|
||||
*/
|
||||
|
||||
extern int errno;
|
||||
|
||||
#define ERROR 99
|
||||
#define EPERM 1
|
||||
#define ENOENT 2
|
||||
#define ESRCH 3
|
||||
#define EINTR 4
|
||||
#define EIO 5
|
||||
#define ENXIO 6
|
||||
#define E2BIG 7
|
||||
#define ENOEXEC 8
|
||||
#define EBADF 9
|
||||
#define ECHILD 10
|
||||
#define EAGAIN 11
|
||||
#define ENOMEM 12
|
||||
#define EACCES 13
|
||||
#define EFAULT 14
|
||||
#define ENOTBLK 15
|
||||
#define EBUSY 16
|
||||
#define EEXIST 17
|
||||
#define EXDEV 18
|
||||
#define ENODEV 19
|
||||
#define ENOTDIR 20
|
||||
#define EISDIR 21
|
||||
#define EINVAL 22
|
||||
#define ENFILE 23
|
||||
#define EMFILE 24
|
||||
#define ENOTTY 25
|
||||
#define ETXTBSY 26
|
||||
#define EFBIG 27
|
||||
#define ENOSPC 28
|
||||
#define ESPIPE 29
|
||||
#define EROFS 30
|
||||
#define EMLINK 31
|
||||
#define EPIPE 32
|
||||
#define EDOM 33
|
||||
#define ERANGE 34
|
||||
#define EDEADLK 35
|
||||
#define ENAMETOOLONG 36
|
||||
#define ENOLCK 37
|
||||
#define ENOSYS 38
|
||||
#define ENOTEMPTY 39
|
||||
#define ELOOP 40
|
||||
|
||||
/* Should never be seen by user programs */
|
||||
#define ERESTARTSYS 512
|
||||
#define ERESTARTNOINTR 513
|
||||
|
||||
#endif
|
||||
55
kernel/0.95/linux-0.95/include/fcntl.h
Normal file
55
kernel/0.95/linux-0.95/include/fcntl.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#ifndef _FCNTL_H
|
||||
#define _FCNTL_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* open/fcntl - NOCTTY, NDELAY isn't implemented yet */
|
||||
#define O_ACCMODE 00003
|
||||
#define O_RDONLY 00
|
||||
#define O_WRONLY 01
|
||||
#define O_RDWR 02
|
||||
#define O_CREAT 00100 /* not fcntl */
|
||||
#define O_EXCL 00200 /* not fcntl */
|
||||
#define O_NOCTTY 00400 /* not fcntl */
|
||||
#define O_TRUNC 01000 /* not fcntl */
|
||||
#define O_APPEND 02000
|
||||
#define O_NONBLOCK 04000
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
|
||||
/* Defines for fcntl-commands. Note that currently
|
||||
* locking isn't supported, and other things aren't really
|
||||
* tested.
|
||||
*/
|
||||
#define F_DUPFD 0 /* dup */
|
||||
#define F_GETFD 1 /* get f_flags */
|
||||
#define F_SETFD 2 /* set f_flags */
|
||||
#define F_GETFL 3 /* more flags (cloexec) */
|
||||
#define F_SETFL 4
|
||||
#define F_GETLK 5 /* not implemented */
|
||||
#define F_SETLK 6
|
||||
#define F_SETLKW 7
|
||||
|
||||
/* for F_[GET|SET]FL */
|
||||
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||
|
||||
/* Ok, these are locking features, and aren't implemented at any
|
||||
* level. POSIX wants them.
|
||||
*/
|
||||
#define F_RDLCK 0
|
||||
#define F_WRLCK 1
|
||||
#define F_UNLCK 2
|
||||
|
||||
/* Once again - not implemented, but ... */
|
||||
struct flock {
|
||||
short l_type;
|
||||
short l_whence;
|
||||
off_t l_start;
|
||||
off_t l_len;
|
||||
pid_t l_pid;
|
||||
};
|
||||
|
||||
extern int creat(const char * filename,mode_t mode);
|
||||
extern int fcntl(int fildes,int cmd, ...);
|
||||
extern int open(const char * filename, int flags, ...);
|
||||
|
||||
#endif
|
||||
64
kernel/0.95/linux-0.95/include/linux/config.h
Normal file
64
kernel/0.95/linux-0.95/include/linux/config.h
Normal file
@@ -0,0 +1,64 @@
|
||||
#ifndef _CONFIG_H
|
||||
#define _CONFIG_H
|
||||
|
||||
/*
|
||||
* Define this if you want the math-emulation code: if this is undefined,
|
||||
* the kernel will be smaller, but you'll get FPU exceptions if you don't
|
||||
* have a 387 and are trying to use math.
|
||||
*/
|
||||
|
||||
#define KERNEL_MATH_EMULATION
|
||||
|
||||
|
||||
/*
|
||||
* Defines for what uname() should return
|
||||
*/
|
||||
#define UTS_SYSNAME "Linux"
|
||||
#define UTS_NODENAME "(none)" /* set by sethostname() */
|
||||
#define UTS_RELEASE "0" /* patchlevel */
|
||||
#define UTS_VERSION "0.12"
|
||||
#define UTS_MACHINE "i386" /* hardware type */
|
||||
|
||||
/* Don't touch these, unless you really know what your doing. */
|
||||
#define DEF_INITSEG 0x9000
|
||||
#define DEF_SYSSEG 0x1000
|
||||
#define DEF_SETUPSEG 0x9020
|
||||
#define DEF_SYSSIZE 0x4000
|
||||
|
||||
/*
|
||||
* The root-device is no longer hard-coded. You can change the default
|
||||
* root-device by changing the line ROOT_DEV = XXX in boot/bootsect.s
|
||||
*/
|
||||
|
||||
/*
|
||||
* The keyboard is now defined in kernel/chr_dev/keyboard.S
|
||||
*/
|
||||
|
||||
/*
|
||||
* Normally, Linux can get the drive parameters from the BIOS at
|
||||
* startup, but if this for some unfathomable reason fails, you'd
|
||||
* be left stranded. For this case, you can define HD_TYPE, which
|
||||
* contains all necessary info on your harddisk.
|
||||
*
|
||||
* The HD_TYPE macro should look like this:
|
||||
*
|
||||
* #define HD_TYPE { head, sect, cyl, wpcom, lzone, ctl}
|
||||
*
|
||||
* In case of two harddisks, the info should be sepatated by
|
||||
* commas:
|
||||
*
|
||||
* #define HD_TYPE { h,s,c,wpcom,lz,ctl },{ h,s,c,wpcom,lz,ctl }
|
||||
*/
|
||||
/*
|
||||
This is an example, two drives, first is type 2, second is type 3:
|
||||
|
||||
#define HD_TYPE { 4,17,615,300,615,8 }, { 6,17,615,300,615,0 }
|
||||
|
||||
NOTE: ctl is 0 for all drives with heads<=8, and ctl=8 for drives
|
||||
with more than 8 heads.
|
||||
|
||||
If you want the BIOS to tell what kind of drive you have, just
|
||||
leave HD_TYPE undefined. This is the normal thing to do.
|
||||
*/
|
||||
|
||||
#endif
|
||||
71
kernel/0.95/linux-0.95/include/linux/fdreg.h
Normal file
71
kernel/0.95/linux-0.95/include/linux/fdreg.h
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* This file contains some defines for the floppy disk controller.
|
||||
* Various sources. Mostly "IBM Microcomputers: A Programmers
|
||||
* Handbook", Sanches and Canton.
|
||||
*/
|
||||
#ifndef _FDREG_H
|
||||
#define _FDREG_H
|
||||
|
||||
extern int ticks_to_floppy_on(unsigned int nr);
|
||||
extern void floppy_on(unsigned int nr);
|
||||
extern void floppy_off(unsigned int nr);
|
||||
extern void floppy_select(unsigned int nr);
|
||||
extern void floppy_deselect(unsigned int nr);
|
||||
|
||||
/* Fd controller regs. S&C, about page 340 */
|
||||
#define FD_STATUS 0x3f4
|
||||
#define FD_DATA 0x3f5
|
||||
#define FD_DOR 0x3f2 /* Digital Output Register */
|
||||
#define FD_DIR 0x3f7 /* Digital Input Register (read) */
|
||||
#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/
|
||||
|
||||
/* Bits of main status register */
|
||||
#define STATUS_BUSYMASK 0x0F /* drive busy mask */
|
||||
#define STATUS_BUSY 0x10 /* FDC busy */
|
||||
#define STATUS_DMA 0x20 /* 0- DMA mode */
|
||||
#define STATUS_DIR 0x40 /* 0- cpu->fdc */
|
||||
#define STATUS_READY 0x80 /* Data reg ready */
|
||||
|
||||
/* Bits of FD_ST0 */
|
||||
#define ST0_DS 0x03 /* drive select mask */
|
||||
#define ST0_HA 0x04 /* Head (Address) */
|
||||
#define ST0_NR 0x08 /* Not Ready */
|
||||
#define ST0_ECE 0x10 /* Equipment chech error */
|
||||
#define ST0_SE 0x20 /* Seek end */
|
||||
#define ST0_INTR 0xC0 /* Interrupt code mask */
|
||||
|
||||
/* Bits of FD_ST1 */
|
||||
#define ST1_MAM 0x01 /* Missing Address Mark */
|
||||
#define ST1_WP 0x02 /* Write Protect */
|
||||
#define ST1_ND 0x04 /* No Data - unreadable */
|
||||
#define ST1_OR 0x10 /* OverRun */
|
||||
#define ST1_CRC 0x20 /* CRC error in data or addr */
|
||||
#define ST1_EOC 0x80 /* End Of Cylinder */
|
||||
|
||||
/* Bits of FD_ST2 */
|
||||
#define ST2_MAM 0x01 /* Missing Addess Mark (again) */
|
||||
#define ST2_BC 0x02 /* Bad Cylinder */
|
||||
#define ST2_SNS 0x04 /* Scan Not Satisfied */
|
||||
#define ST2_SEH 0x08 /* Scan Equal Hit */
|
||||
#define ST2_WC 0x10 /* Wrong Cylinder */
|
||||
#define ST2_CRC 0x20 /* CRC error in data field */
|
||||
#define ST2_CM 0x40 /* Control Mark = deleted */
|
||||
|
||||
/* Bits of FD_ST3 */
|
||||
#define ST3_HA 0x04 /* Head (Address) */
|
||||
#define ST3_TZ 0x10 /* Track Zero signal (1=track 0) */
|
||||
#define ST3_WP 0x40 /* Write Protect */
|
||||
|
||||
/* Values for FD_COMMAND */
|
||||
#define FD_RECALIBRATE 0x07 /* move to track 0 */
|
||||
#define FD_SEEK 0x0F /* seek track */
|
||||
#define FD_READ 0xE6 /* read with MT, MFM, SKip deleted */
|
||||
#define FD_WRITE 0xC5 /* write with MT, MFM */
|
||||
#define FD_SENSEI 0x08 /* Sense Interrupt Status */
|
||||
#define FD_SPECIFY 0x03 /* specify HUT etc */
|
||||
|
||||
/* DMA commands */
|
||||
#define DMA_READ 0x46
|
||||
#define DMA_WRITE 0x4A
|
||||
|
||||
#endif
|
||||
209
kernel/0.95/linux-0.95/include/linux/fs.h
Normal file
209
kernel/0.95/linux-0.95/include/linux/fs.h
Normal file
@@ -0,0 +1,209 @@
|
||||
/*
|
||||
* This file has definitions for some important file table
|
||||
* structures etc.
|
||||
*/
|
||||
|
||||
#ifndef _FS_H
|
||||
#define _FS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* devices are as follows: (same as minix, so we can use the minix
|
||||
* file system. These are major numbers.)
|
||||
*
|
||||
* 0 - unused (nodev)
|
||||
* 1 - /dev/mem
|
||||
* 2 - /dev/fd
|
||||
* 3 - /dev/hd
|
||||
* 4 - /dev/ttyx
|
||||
* 5 - /dev/tty
|
||||
* 6 - /dev/lp
|
||||
* 7 - unnamed pipes
|
||||
*/
|
||||
|
||||
#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3)
|
||||
|
||||
#define MAY_EXEC 1
|
||||
#define MAY_WRITE 2
|
||||
#define MAY_READ 4
|
||||
|
||||
#define READ 0
|
||||
#define WRITE 1
|
||||
#define READA 2 /* read-ahead - don't pause */
|
||||
#define WRITEA 3 /* "write-ahead" - silly, but somewhat useful */
|
||||
|
||||
void buffer_init(long buffer_end);
|
||||
|
||||
#define MAJOR(a) (((unsigned)(a))>>8)
|
||||
#define MINOR(a) ((a)&0xff)
|
||||
|
||||
#define NR_OPEN 20
|
||||
#define NR_INODE 128
|
||||
#define NR_FILE 64
|
||||
#define NR_SUPER 8
|
||||
#define NR_HASH 307
|
||||
#define NR_BUFFERS nr_buffers
|
||||
#define BLOCK_SIZE 1024
|
||||
#define BLOCK_SIZE_BITS 10
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif
|
||||
|
||||
#define PIPE_READ_WAIT(inode) ((inode).i_wait)
|
||||
#define PIPE_WRITE_WAIT(inode) ((inode).i_wait2)
|
||||
#define PIPE_HEAD(inode) ((inode).i_data[0])
|
||||
#define PIPE_TAIL(inode) ((inode).i_data[1])
|
||||
#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1))
|
||||
#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode))
|
||||
#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1))
|
||||
|
||||
#define NIL_FILP ((struct file *)0)
|
||||
#define SEL_IN 1
|
||||
#define SEL_OUT 2
|
||||
#define SEL_EX 4
|
||||
|
||||
typedef char buffer_block[BLOCK_SIZE];
|
||||
|
||||
struct buffer_head {
|
||||
char * b_data; /* pointer to data block (1024 bytes) */
|
||||
unsigned long b_blocknr; /* block number */
|
||||
unsigned short b_dev; /* device (0 = free) */
|
||||
unsigned char b_uptodate;
|
||||
unsigned char b_dirt; /* 0-clean,1-dirty */
|
||||
unsigned char b_count; /* users using this block */
|
||||
unsigned char b_lock; /* 0 - ok, 1 -locked */
|
||||
struct task_struct * b_wait;
|
||||
struct buffer_head * b_prev;
|
||||
struct buffer_head * b_next;
|
||||
struct buffer_head * b_prev_free;
|
||||
struct buffer_head * b_next_free;
|
||||
};
|
||||
|
||||
struct inode {
|
||||
dev_t i_dev;
|
||||
ino_t i_ino;
|
||||
umode_t i_mode;
|
||||
nlink_t i_nlink;
|
||||
uid_t i_uid;
|
||||
gid_t i_gid;
|
||||
dev_t i_rdev;
|
||||
off_t i_size;
|
||||
time_t i_atime;
|
||||
time_t i_mtime;
|
||||
time_t i_ctime;
|
||||
unsigned long i_data[16];
|
||||
struct inode_operations * i_op;
|
||||
struct super_block * i_sb;
|
||||
struct task_struct * i_wait;
|
||||
struct task_struct * i_wait2; /* for pipes */
|
||||
unsigned short i_count;
|
||||
unsigned char i_lock;
|
||||
unsigned char i_dirt;
|
||||
unsigned char i_pipe;
|
||||
unsigned char i_mount;
|
||||
unsigned char i_seek;
|
||||
unsigned char i_update;
|
||||
};
|
||||
|
||||
struct file {
|
||||
unsigned short f_mode;
|
||||
unsigned short f_flags;
|
||||
unsigned short f_count;
|
||||
struct inode * f_inode;
|
||||
struct file_operations * f_op;
|
||||
off_t f_pos;
|
||||
};
|
||||
|
||||
struct super_block {
|
||||
unsigned short s_ninodes;
|
||||
unsigned short s_nzones;
|
||||
unsigned short s_imap_blocks;
|
||||
unsigned short s_zmap_blocks;
|
||||
unsigned short s_firstdatazone;
|
||||
unsigned short s_log_zone_size;
|
||||
unsigned long s_max_size;
|
||||
unsigned short s_magic;
|
||||
/* These are only in memory */
|
||||
struct buffer_head * s_imap[8];
|
||||
struct buffer_head * s_zmap[8];
|
||||
unsigned short s_dev;
|
||||
struct inode * s_covered;
|
||||
struct inode * s_mounted;
|
||||
unsigned long s_time;
|
||||
struct task_struct * s_wait;
|
||||
unsigned char s_lock;
|
||||
unsigned char s_rd_only;
|
||||
unsigned char s_dirt;
|
||||
};
|
||||
|
||||
struct file_operations {
|
||||
int (*lseek) (struct inode *, struct file *, off_t, int);
|
||||
int (*read) (struct inode *, struct file *, char *, int);
|
||||
int (*write) (struct inode *, struct file *, char *, int);
|
||||
};
|
||||
|
||||
struct inode_operations {
|
||||
int (*create) (struct inode *,const char *,int,int,struct inode **);
|
||||
int (*lookup) (struct inode *,const char *,int,struct inode **);
|
||||
int (*link) (struct inode *,struct inode *,const char *,int);
|
||||
int (*unlink) (struct inode *,const char *,int);
|
||||
int (*symlink) (struct inode *,const char *,int,const char *);
|
||||
int (*mkdir) (struct inode *,const char *,int,int);
|
||||
int (*rmdir) (struct inode *,const char *,int);
|
||||
int (*mknod) (struct inode *,const char *,int,int,int);
|
||||
int (*rename) (struct inode *,const char *,int,struct inode *,const char *,int);
|
||||
int (*readlink) (struct inode *,char *,int);
|
||||
int (*open) (struct inode *, struct file *);
|
||||
void (*release) (struct inode *, struct file *);
|
||||
struct inode * (*follow_link) (struct inode *, struct inode *);
|
||||
};
|
||||
|
||||
extern struct inode inode_table[NR_INODE];
|
||||
extern struct file file_table[NR_FILE];
|
||||
extern struct super_block super_block[NR_SUPER];
|
||||
extern struct buffer_head * start_buffer;
|
||||
extern int nr_buffers;
|
||||
|
||||
extern void check_disk_change(int dev);
|
||||
extern int floppy_change(unsigned int nr);
|
||||
extern int ticks_to_floppy_on(unsigned int dev);
|
||||
extern void floppy_on(unsigned int dev);
|
||||
extern void floppy_off(unsigned int dev);
|
||||
extern void truncate(struct inode * inode);
|
||||
extern void sync_inodes(void);
|
||||
extern void wait_on(struct inode * inode);
|
||||
extern int bmap(struct inode * inode,int block);
|
||||
extern struct inode * namei(const char * pathname);
|
||||
extern struct inode * lnamei(const char * pathname);
|
||||
extern int open_namei(const char * pathname, int flag, int mode,
|
||||
struct inode ** res_inode);
|
||||
extern void iput(struct inode * inode);
|
||||
extern struct inode * iget(int dev,int nr);
|
||||
extern struct inode * get_empty_inode(void);
|
||||
extern struct inode * get_pipe_inode(void);
|
||||
extern struct buffer_head * get_hash_table(int dev, int block);
|
||||
extern struct buffer_head * getblk(int dev, int block);
|
||||
extern void ll_rw_block(int rw, struct buffer_head * bh);
|
||||
extern void ll_rw_page(int rw, int dev, int nr, char * buffer);
|
||||
extern void ll_rw_swap_file(int rw, int dev, unsigned int *b, int nb, char *buffer);
|
||||
extern void brelse(struct buffer_head * buf);
|
||||
extern struct buffer_head * bread(int dev,int block);
|
||||
extern void bread_page(unsigned long addr,int dev,int b[4]);
|
||||
extern struct buffer_head * breada(int dev,int block,...);
|
||||
extern int sync_dev(int dev);
|
||||
extern struct super_block * get_super(int dev);
|
||||
extern int ROOT_DEV;
|
||||
|
||||
extern void mount_root(void);
|
||||
|
||||
extern int minix_file_read(struct inode *, struct file *, char *, int);
|
||||
extern int pipe_read(struct inode *, struct file *, char *, int);
|
||||
extern int char_read(struct inode *, struct file *, char *, int);
|
||||
extern int block_read(struct inode *, struct file *, char *, int);
|
||||
|
||||
extern int minix_file_write(struct inode *, struct file *, char *, int);
|
||||
extern int pipe_write(struct inode *, struct file *, char *, int);
|
||||
extern int char_write(struct inode *, struct file *, char *, int);
|
||||
extern int block_write(struct inode *, struct file *, char *, int);
|
||||
|
||||
#endif
|
||||
67
kernel/0.95/linux-0.95/include/linux/hdreg.h
Normal file
67
kernel/0.95/linux-0.95/include/linux/hdreg.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* This file contains some defines for the AT-hd-controller.
|
||||
* Various sources. Check out some definitions (see comments with
|
||||
* a ques).
|
||||
*/
|
||||
#ifndef _HDREG_H
|
||||
#define _HDREG_H
|
||||
|
||||
/* Hd controller regs. Ref: IBM AT Bios-listing */
|
||||
#define HD_DATA 0x1f0 /* _CTL when writing */
|
||||
#define HD_ERROR 0x1f1 /* see err-bits */
|
||||
#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */
|
||||
#define HD_SECTOR 0x1f3 /* starting sector */
|
||||
#define HD_LCYL 0x1f4 /* starting cylinder */
|
||||
#define HD_HCYL 0x1f5 /* high byte of starting cyl */
|
||||
#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */
|
||||
#define HD_STATUS 0x1f7 /* see status-bits */
|
||||
#define HD_PRECOMP HD_ERROR /* same io address, read=error, write=precomp */
|
||||
#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */
|
||||
|
||||
#define HD_CMD 0x3f6
|
||||
|
||||
/* Bits of HD_STATUS */
|
||||
#define ERR_STAT 0x01
|
||||
#define INDEX_STAT 0x02
|
||||
#define ECC_STAT 0x04 /* Corrected error */
|
||||
#define DRQ_STAT 0x08
|
||||
#define SEEK_STAT 0x10
|
||||
#define WRERR_STAT 0x20
|
||||
#define READY_STAT 0x40
|
||||
#define BUSY_STAT 0x80
|
||||
|
||||
/* Values for HD_COMMAND */
|
||||
#define WIN_RESTORE 0x10
|
||||
#define WIN_READ 0x20
|
||||
#define WIN_WRITE 0x30
|
||||
#define WIN_VERIFY 0x40
|
||||
#define WIN_FORMAT 0x50
|
||||
#define WIN_INIT 0x60
|
||||
#define WIN_SEEK 0x70
|
||||
#define WIN_DIAGNOSE 0x90
|
||||
#define WIN_SPECIFY 0x91
|
||||
|
||||
/* Bits for HD_ERROR */
|
||||
#define MARK_ERR 0x01 /* Bad address mark ? */
|
||||
#define TRK0_ERR 0x02 /* couldn't find track 0 */
|
||||
#define ABRT_ERR 0x04 /* ? */
|
||||
#define ID_ERR 0x10 /* ? */
|
||||
#define ECC_ERR 0x40 /* ? */
|
||||
#define BBD_ERR 0x80 /* ? */
|
||||
|
||||
#define EXTENDED_PARTITION 5
|
||||
|
||||
struct partition {
|
||||
unsigned char boot_ind; /* 0x80 - active */
|
||||
unsigned char head; /* starting head */
|
||||
unsigned char sector; /* starting sector */
|
||||
unsigned char cyl; /* starting cylinder */
|
||||
unsigned char sys_ind; /* What partition type */
|
||||
unsigned char end_head; /* end head */
|
||||
unsigned char end_sector; /* end sector */
|
||||
unsigned char end_cyl; /* end cylinder */
|
||||
unsigned int start_sect; /* starting sector counting from 0 */
|
||||
unsigned int nr_sects; /* nr of sectors in partition */
|
||||
};
|
||||
|
||||
#endif
|
||||
20
kernel/0.95/linux-0.95/include/linux/head.h
Normal file
20
kernel/0.95/linux-0.95/include/linux/head.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef _HEAD_H
|
||||
#define _HEAD_H
|
||||
|
||||
typedef struct desc_struct {
|
||||
unsigned long a,b;
|
||||
} desc_table[256];
|
||||
|
||||
extern unsigned long pg_dir[1024];
|
||||
extern desc_table idt,gdt;
|
||||
|
||||
#define GDT_NUL 0
|
||||
#define GDT_CODE 1
|
||||
#define GDT_DATA 2
|
||||
#define GDT_TMP 3
|
||||
|
||||
#define LDT_NUL 0
|
||||
#define LDT_CODE 1
|
||||
#define LDT_DATA 2
|
||||
|
||||
#endif
|
||||
24
kernel/0.95/linux-0.95/include/linux/kernel.h
Normal file
24
kernel/0.95/linux-0.95/include/linux/kernel.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* 'kernel.h' contains some often-used function prototypes etc
|
||||
*/
|
||||
void verify_area(void * addr,int count);
|
||||
volatile void panic(const char * str);
|
||||
volatile void do_exit(long error_code);
|
||||
int printf(const char * fmt, ...);
|
||||
int printk(const char * fmt, ...);
|
||||
void console_print(const char * str);
|
||||
int tty_write(unsigned ch,char * buf,int count);
|
||||
void * malloc(unsigned int size);
|
||||
void free_s(void * obj, int size);
|
||||
|
||||
#define free(x) free_s((x), 0)
|
||||
|
||||
/*
|
||||
* This is defined as a macro, but at some point this might become a
|
||||
* real subroutine that sets a flag if it returns true (to do
|
||||
* BSD-style accounting where the process is flagged if it uses root
|
||||
* privs). The implication of this is that you should do normal
|
||||
* permissions checks first, and check suser() last.
|
||||
*/
|
||||
#define suser() (current->euid == 0)
|
||||
|
||||
186
kernel/0.95/linux-0.95/include/linux/math_emu.h
Normal file
186
kernel/0.95/linux-0.95/include/linux/math_emu.h
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* linux/include/linux/math_emu.h
|
||||
*
|
||||
* (C) 1991 Linus Torvalds
|
||||
*/
|
||||
#ifndef _LINUX_MATH_EMU_H
|
||||
#define _LINUX_MATH_EMU_H
|
||||
|
||||
#include <linux/sched.h>
|
||||
|
||||
struct info {
|
||||
long ___orig_eip;
|
||||
long ___ret_from_system_call;
|
||||
long ___ebx;
|
||||
long ___ecx;
|
||||
long ___edx;
|
||||
long ___esi;
|
||||
long ___edi;
|
||||
long ___ebp;
|
||||
long ___eax;
|
||||
long ___ds;
|
||||
long ___es;
|
||||
long ___fs;
|
||||
long ___gs;
|
||||
long ___orig_eax;
|
||||
long ___eip;
|
||||
long ___cs;
|
||||
long ___eflags;
|
||||
long ___esp;
|
||||
long ___ss;
|
||||
};
|
||||
|
||||
#define EAX (info->___eax)
|
||||
#define EBX (info->___ebx)
|
||||
#define ECX (info->___ecx)
|
||||
#define EDX (info->___edx)
|
||||
#define ESI (info->___esi)
|
||||
#define EDI (info->___edi)
|
||||
#define EBP (info->___ebp)
|
||||
#define ESP (info->___esp)
|
||||
#define EIP (info->___eip)
|
||||
#define ORIG_EIP (info->___orig_eip)
|
||||
#define EFLAGS (info->___eflags)
|
||||
#define DS (*(unsigned short *) &(info->___ds))
|
||||
#define ES (*(unsigned short *) &(info->___es))
|
||||
#define FS (*(unsigned short *) &(info->___fs))
|
||||
#define CS (*(unsigned short *) &(info->___cs))
|
||||
#define SS (*(unsigned short *) &(info->___ss))
|
||||
|
||||
void __math_abort(struct info *, unsigned int);
|
||||
|
||||
#define math_abort(x,y) \
|
||||
(((volatile void (*)(struct info *,unsigned int)) __math_abort)((x),(y)))
|
||||
|
||||
/*
|
||||
* Gcc forces this stupid alignment problem: I want to use only two longs
|
||||
* for the temporary real 64-bit mantissa, but then gcc aligns out the
|
||||
* structure to 12 bytes which breaks things in math_emulate.c. Shit. I
|
||||
* want some kind of "no-alignt" pragma or something.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
long a,b;
|
||||
short exponent;
|
||||
} temp_real;
|
||||
|
||||
typedef struct {
|
||||
short m0,m1,m2,m3;
|
||||
short exponent;
|
||||
} temp_real_unaligned;
|
||||
|
||||
#define real_to_real(a,b) \
|
||||
((*(long long *) (b) = *(long long *) (a)),((b)->exponent = (a)->exponent))
|
||||
|
||||
typedef struct {
|
||||
long a,b;
|
||||
} long_real;
|
||||
|
||||
typedef long short_real;
|
||||
|
||||
typedef struct {
|
||||
long a,b;
|
||||
short sign;
|
||||
} temp_int;
|
||||
|
||||
struct swd {
|
||||
int ie:1;
|
||||
int de:1;
|
||||
int ze:1;
|
||||
int oe:1;
|
||||
int ue:1;
|
||||
int pe:1;
|
||||
int sf:1;
|
||||
int ir:1;
|
||||
int c0:1;
|
||||
int c1:1;
|
||||
int c2:1;
|
||||
int top:3;
|
||||
int c3:1;
|
||||
int b:1;
|
||||
};
|
||||
|
||||
#define I387 (current->tss.i387)
|
||||
#define SWD (*(struct swd *) &I387.swd)
|
||||
#define ROUNDING ((I387.cwd >> 10) & 3)
|
||||
#define PRECISION ((I387.cwd >> 8) & 3)
|
||||
|
||||
#define BITS24 0
|
||||
#define BITS53 2
|
||||
#define BITS64 3
|
||||
|
||||
#define ROUND_NEAREST 0
|
||||
#define ROUND_DOWN 1
|
||||
#define ROUND_UP 2
|
||||
#define ROUND_0 3
|
||||
|
||||
#define CONSTZ (temp_real_unaligned) {0x0000,0x0000,0x0000,0x0000,0x0000}
|
||||
#define CONST1 (temp_real_unaligned) {0x0000,0x0000,0x0000,0x8000,0x3FFF}
|
||||
#define CONSTPI (temp_real_unaligned) {0xC235,0x2168,0xDAA2,0xC90F,0x4000}
|
||||
#define CONSTLN2 (temp_real_unaligned) {0x79AC,0xD1CF,0x17F7,0xB172,0x3FFE}
|
||||
#define CONSTLG2 (temp_real_unaligned) {0xF799,0xFBCF,0x9A84,0x9A20,0x3FFD}
|
||||
#define CONSTL2E (temp_real_unaligned) {0xF0BC,0x5C17,0x3B29,0xB8AA,0x3FFF}
|
||||
#define CONSTL2T (temp_real_unaligned) {0x8AFE,0xCD1B,0x784B,0xD49A,0x4000}
|
||||
|
||||
#define set_IE() (I387.swd |= 1)
|
||||
#define set_DE() (I387.swd |= 2)
|
||||
#define set_ZE() (I387.swd |= 4)
|
||||
#define set_OE() (I387.swd |= 8)
|
||||
#define set_UE() (I387.swd |= 16)
|
||||
#define set_PE() (I387.swd |= 32)
|
||||
|
||||
#define set_C0() (I387.swd |= 0x0100)
|
||||
#define set_C1() (I387.swd |= 0x0200)
|
||||
#define set_C2() (I387.swd |= 0x0400)
|
||||
#define set_C3() (I387.swd |= 0x4000)
|
||||
|
||||
/* ea.c */
|
||||
|
||||
char * ea(struct info * __info, unsigned short __code);
|
||||
|
||||
/* convert.c */
|
||||
|
||||
void frndint(const temp_real * __a, temp_real * __b);
|
||||
void short_to_temp(const short_real * __a, temp_real * __b);
|
||||
void long_to_temp(const long_real * __a, temp_real * __b);
|
||||
void temp_to_short(const temp_real * __a, short_real * __b);
|
||||
void temp_to_long(const temp_real * __a, long_real * __b);
|
||||
void real_to_int(const temp_real * __a, temp_int * __b);
|
||||
void int_to_real(const temp_int * __a, temp_real * __b);
|
||||
|
||||
/* get_put.c */
|
||||
|
||||
void get_short_real(temp_real *, struct info *, unsigned short);
|
||||
void get_long_real(temp_real *, struct info *, unsigned short);
|
||||
void get_temp_real(temp_real *, struct info *, unsigned short);
|
||||
void get_short_int(temp_real *, struct info *, unsigned short);
|
||||
void get_long_int(temp_real *, struct info *, unsigned short);
|
||||
void get_longlong_int(temp_real *, struct info *, unsigned short);
|
||||
void get_BCD(temp_real *, struct info *, unsigned short);
|
||||
void put_short_real(const temp_real *, struct info *, unsigned short);
|
||||
void put_long_real(const temp_real *, struct info *, unsigned short);
|
||||
void put_temp_real(const temp_real *, struct info *, unsigned short);
|
||||
void put_short_int(const temp_real *, struct info *, unsigned short);
|
||||
void put_long_int(const temp_real *, struct info *, unsigned short);
|
||||
void put_longlong_int(const temp_real *, struct info *, unsigned short);
|
||||
void put_BCD(const temp_real *, struct info *, unsigned short);
|
||||
|
||||
/* add.c */
|
||||
|
||||
void fadd(const temp_real *, const temp_real *, temp_real *);
|
||||
|
||||
/* mul.c */
|
||||
|
||||
void fmul(const temp_real *, const temp_real *, temp_real *);
|
||||
|
||||
/* div.c */
|
||||
|
||||
void fdiv(const temp_real *, const temp_real *, temp_real *);
|
||||
|
||||
/* compare.c */
|
||||
|
||||
void fcom(const temp_real *, const temp_real *);
|
||||
void fucom(const temp_real *, const temp_real *);
|
||||
void ftst(const temp_real *);
|
||||
|
||||
#endif
|
||||
78
kernel/0.95/linux-0.95/include/linux/minix_fs.h
Normal file
78
kernel/0.95/linux-0.95/include/linux/minix_fs.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* The minix filesystem constants/structures
|
||||
*/
|
||||
|
||||
#ifndef _MINIX_FS_H
|
||||
#define _MINIX_FS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define MINIX_NAME_LEN 14
|
||||
#define MINIX_ROOT_INO 1
|
||||
|
||||
#define MINIX_I_MAP_SLOTS 8
|
||||
#define MINIX_Z_MAP_SLOTS 8
|
||||
#define MINIX_SUPER_MAGIC 0x137F
|
||||
|
||||
#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
|
||||
#define MINIX_DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_dir_entry)))
|
||||
|
||||
struct minix_inode {
|
||||
unsigned short i_mode;
|
||||
unsigned short i_uid;
|
||||
unsigned long i_size;
|
||||
unsigned long i_time;
|
||||
unsigned char i_gid;
|
||||
unsigned char i_nlinks;
|
||||
unsigned short i_zone[9];
|
||||
};
|
||||
|
||||
struct minix_super_block {
|
||||
unsigned short s_ninodes;
|
||||
unsigned short s_nzones;
|
||||
unsigned short s_imap_blocks;
|
||||
unsigned short s_zmap_blocks;
|
||||
unsigned short s_firstdatazone;
|
||||
unsigned short s_log_zone_size;
|
||||
unsigned long s_max_size;
|
||||
unsigned short s_magic;
|
||||
};
|
||||
|
||||
struct minix_dir_entry {
|
||||
unsigned short inode;
|
||||
char name[MINIX_NAME_LEN];
|
||||
};
|
||||
|
||||
extern int minix_open(struct inode * inode, struct file * filp);
|
||||
extern void minix_release(struct inode * inode, struct file * filp);
|
||||
extern struct inode * minix_follow_link(struct inode * dir, struct inode * inode);
|
||||
extern int minix_lookup(struct inode * dir,const char * name, int len,
|
||||
struct inode ** result);
|
||||
extern int minix_create(struct inode * dir,const char * name, int len, int mode,
|
||||
struct inode ** result);
|
||||
extern int minix_mkdir(struct inode * dir, const char * name, int len, int mode);
|
||||
extern int minix_rmdir(struct inode * dir, const char * name, int len);
|
||||
extern int minix_unlink(struct inode * dir, const char * name, int len);
|
||||
extern int minix_symlink(struct inode * inode, const char * name, int len,
|
||||
const char * symname);
|
||||
extern int minix_link(struct inode * oldinode, struct inode * dir, const char * name, int len);
|
||||
extern int minix_mknod(struct inode * dir, const char * name, int len, int mode, int rdev);
|
||||
extern int minix_rename(struct inode * old_dir, const char * old_name, int old_len,
|
||||
struct inode * new_dir, const char * new_name, int new_len);
|
||||
extern int minix_readlink(struct inode * inode, char * buffer, int buflen);
|
||||
extern struct inode * minix_new_inode(int dev);
|
||||
extern void minix_free_inode(struct inode * inode);
|
||||
extern int minix_new_block(int dev);
|
||||
extern int minix_free_block(int dev, int block);
|
||||
|
||||
extern int minix_create_block(struct inode * inode, int block);
|
||||
extern int minix_bmap(struct inode * inode,int block);
|
||||
|
||||
extern int minix_lseek(struct inode * inode, struct file * filp, off_t offset, int origin);
|
||||
extern int minix_read(struct inode * inode, struct file * filp, char * buf, int count);
|
||||
extern int minix_write(struct inode * inode, struct file * filp, char * buf, int count);
|
||||
|
||||
extern struct inode_operations minix_inode_operations;
|
||||
extern struct file_operations minix_file_operations;
|
||||
|
||||
#endif
|
||||
51
kernel/0.95/linux-0.95/include/linux/mm.h
Normal file
51
kernel/0.95/linux-0.95/include/linux/mm.h
Normal file
@@ -0,0 +1,51 @@
|
||||
#ifndef _MM_H
|
||||
#define _MM_H
|
||||
|
||||
#define PAGE_SIZE 4096
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <signal.h>
|
||||
|
||||
extern unsigned int swap_device;
|
||||
extern struct inode * swap_file;
|
||||
|
||||
extern void rw_swap_page(int rw, unsigned int nr, char * buf);
|
||||
|
||||
#define read_swap_page(nr,buf) \
|
||||
rw_swap_page(READ,(nr),(buf))
|
||||
#define write_swap_page(nr,buf) \
|
||||
rw_swap_page(WRITE,(nr),(buf))
|
||||
|
||||
extern unsigned long get_free_page(void);
|
||||
extern unsigned long put_dirty_page(unsigned long page,unsigned long address);
|
||||
extern void free_page(unsigned long addr);
|
||||
void swap_free(int page_nr);
|
||||
void swap_in(unsigned long *table_ptr);
|
||||
|
||||
extern inline volatile void oom(void)
|
||||
{
|
||||
printk("out of memory\n\r");
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
||||
#define invalidate() \
|
||||
__asm__("movl %%eax,%%cr3"::"a" (0))
|
||||
|
||||
/* these are not to be changed without changing head.s etc */
|
||||
#define LOW_MEM 0x100000
|
||||
extern unsigned long HIGH_MEMORY;
|
||||
#define PAGING_MEMORY (15*1024*1024)
|
||||
#define PAGING_PAGES (PAGING_MEMORY>>12)
|
||||
#define MAP_NR(addr) (((addr)-LOW_MEM)>>12)
|
||||
#define USED 100
|
||||
|
||||
extern unsigned char mem_map [ PAGING_PAGES ];
|
||||
|
||||
#define PAGE_DIRTY 0x40
|
||||
#define PAGE_ACCESSED 0x20
|
||||
#define PAGE_USER 0x04
|
||||
#define PAGE_RW 0x02
|
||||
#define PAGE_PRESENT 0x01
|
||||
|
||||
#endif
|
||||
295
kernel/0.95/linux-0.95/include/linux/sched.h
Normal file
295
kernel/0.95/linux-0.95/include/linux/sched.h
Normal file
@@ -0,0 +1,295 @@
|
||||
#ifndef _SCHED_H
|
||||
#define _SCHED_H
|
||||
|
||||
#define HZ 100
|
||||
|
||||
#define NR_TASKS 64
|
||||
#define TASK_SIZE 0x04000000
|
||||
#define LIBRARY_SIZE 0x00400000
|
||||
|
||||
#if (TASK_SIZE & 0x3fffff)
|
||||
#error "TASK_SIZE must be multiple of 4M"
|
||||
#endif
|
||||
|
||||
#if (LIBRARY_SIZE & 0x3fffff)
|
||||
#error "LIBRARY_SIZE must be a multiple of 4M"
|
||||
#endif
|
||||
|
||||
#if (LIBRARY_SIZE >= (TASK_SIZE/2))
|
||||
#error "LIBRARY_SIZE too damn big!"
|
||||
#endif
|
||||
|
||||
#if (((TASK_SIZE>>16)*NR_TASKS) != 0x10000)
|
||||
#error "TASK_SIZE*NR_TASKS must be 4GB"
|
||||
#endif
|
||||
|
||||
#define LIBRARY_OFFSET (TASK_SIZE - LIBRARY_SIZE)
|
||||
|
||||
#define CT_TO_SECS(x) ((x) / HZ)
|
||||
#define CT_TO_USECS(x) (((x) % HZ) * 1000000/HZ)
|
||||
|
||||
#define FIRST_TASK task[0]
|
||||
#define LAST_TASK task[NR_TASKS-1]
|
||||
|
||||
#include <linux/head.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if (NR_OPEN > 32)
|
||||
#error "Currently the close-on-exec-flags and select masks are in one long, max 32 files/proc"
|
||||
#endif
|
||||
|
||||
#define TASK_RUNNING 0
|
||||
#define TASK_INTERRUPTIBLE 1
|
||||
#define TASK_UNINTERRUPTIBLE 2
|
||||
#define TASK_ZOMBIE 3
|
||||
#define TASK_STOPPED 4
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif
|
||||
|
||||
extern int copy_page_tables(unsigned long from, unsigned long to, long size);
|
||||
extern int free_page_tables(unsigned long from, unsigned long size);
|
||||
|
||||
extern void sched_init(void);
|
||||
extern void schedule(void);
|
||||
extern void trap_init(void);
|
||||
extern void panic(const char * str);
|
||||
extern int tty_write(unsigned minor,char * buf,int count);
|
||||
|
||||
typedef int (*fn_ptr)();
|
||||
|
||||
struct i387_struct {
|
||||
long cwd;
|
||||
long swd;
|
||||
long twd;
|
||||
long fip;
|
||||
long fcs;
|
||||
long foo;
|
||||
long fos;
|
||||
long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
|
||||
};
|
||||
|
||||
struct tss_struct {
|
||||
long back_link; /* 16 high bits zero */
|
||||
long esp0;
|
||||
long ss0; /* 16 high bits zero */
|
||||
long esp1;
|
||||
long ss1; /* 16 high bits zero */
|
||||
long esp2;
|
||||
long ss2; /* 16 high bits zero */
|
||||
long cr3;
|
||||
long eip;
|
||||
long eflags;
|
||||
long eax,ecx,edx,ebx;
|
||||
long esp;
|
||||
long ebp;
|
||||
long esi;
|
||||
long edi;
|
||||
long es; /* 16 high bits zero */
|
||||
long cs; /* 16 high bits zero */
|
||||
long ss; /* 16 high bits zero */
|
||||
long ds; /* 16 high bits zero */
|
||||
long fs; /* 16 high bits zero */
|
||||
long gs; /* 16 high bits zero */
|
||||
long ldt; /* 16 high bits zero */
|
||||
long trace_bitmap; /* bits: trace 0, bitmap 16-31 */
|
||||
struct i387_struct i387;
|
||||
};
|
||||
|
||||
struct task_struct {
|
||||
/* these are hardcoded - don't touch */
|
||||
long state; /* -1 unrunnable, 0 runnable, >0 stopped */
|
||||
long counter;
|
||||
long priority;
|
||||
long signal;
|
||||
struct sigaction sigaction[32];
|
||||
long blocked; /* bitmap of masked signals */
|
||||
/* various fields */
|
||||
int exit_code;
|
||||
unsigned long start_code,end_code,end_data,brk,start_stack;
|
||||
long pid,pgrp,session,leader;
|
||||
int groups[NGROUPS];
|
||||
/*
|
||||
* pointers to parent process, youngest child, younger sibling,
|
||||
* older sibling, respectively. (p->father can be replaced with
|
||||
* p->p_pptr->pid)
|
||||
*/
|
||||
struct task_struct *p_pptr, *p_cptr, *p_ysptr, *p_osptr;
|
||||
unsigned short uid,euid,suid;
|
||||
unsigned short gid,egid,sgid;
|
||||
unsigned long timeout,alarm;
|
||||
long utime,stime,cutime,cstime,start_time;
|
||||
struct rlimit rlim[RLIM_NLIMITS];
|
||||
unsigned int flags; /* per process flags, defined below */
|
||||
unsigned short used_math;
|
||||
/* file system info */
|
||||
int link_count;
|
||||
int tty; /* -1 if no tty, so it must be signed */
|
||||
unsigned short umask;
|
||||
struct inode * pwd;
|
||||
struct inode * root;
|
||||
struct inode * executable;
|
||||
struct inode * library;
|
||||
unsigned long close_on_exec;
|
||||
struct file * filp[NR_OPEN];
|
||||
/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */
|
||||
struct desc_struct ldt[3];
|
||||
/* tss for this task */
|
||||
struct tss_struct tss;
|
||||
};
|
||||
|
||||
/*
|
||||
* Per process flags
|
||||
*/
|
||||
#define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */
|
||||
/* Not implemented yet, only for 486*/
|
||||
#define PF_PTRACED 0x00000010 /* set if ptrace (0) has been called. */
|
||||
#define PF_VM86 0x00000020 /* set if process can execute a vm86 */
|
||||
/* task. */
|
||||
/* not impelmented. */
|
||||
|
||||
/*
|
||||
* INIT_TASK is used to set up the first task table, touch at
|
||||
* your own risk!. Base=0, limit=0x9ffff (=640kB)
|
||||
*/
|
||||
#define INIT_TASK \
|
||||
/* state etc */ { 0,15,15, \
|
||||
/* signals */ 0,{{},},0, \
|
||||
/* ec,brk... */ 0,0,0,0,0,0, \
|
||||
/* pid etc.. */ 0,0,0,0, \
|
||||
/* suppl grps*/ {NOGROUP,}, \
|
||||
/* proc links*/ &init_task.task,0,0,0, \
|
||||
/* uid etc */ 0,0,0,0,0,0, \
|
||||
/* timeout */ 0,0,0,0,0,0,0, \
|
||||
/* rlimits */ { {0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}, \
|
||||
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}, \
|
||||
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}}, \
|
||||
/* flags */ 0, \
|
||||
/* math */ 0, \
|
||||
/* fs info */ 0,-1,0022,NULL,NULL,NULL,NULL,0, \
|
||||
/* filp */ {NULL,}, \
|
||||
{ \
|
||||
{0,0}, \
|
||||
/* ldt */ {0x9f,0xc0fa00}, \
|
||||
{0x9f,0xc0f200}, \
|
||||
}, \
|
||||
/*tss*/ {0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\
|
||||
0,0,0,0,0,0,0,0, \
|
||||
0,0,0x17,0x17,0x17,0x17,0x17,0x17, \
|
||||
_LDT(0),0x80000000, \
|
||||
{} \
|
||||
}, \
|
||||
}
|
||||
|
||||
extern struct task_struct *task[NR_TASKS];
|
||||
extern struct task_struct *last_task_used_math;
|
||||
extern struct task_struct *current;
|
||||
extern unsigned long volatile jiffies;
|
||||
extern unsigned long startup_time;
|
||||
extern int jiffies_offset;
|
||||
|
||||
#define CURRENT_TIME (startup_time+(jiffies+jiffies_offset)/HZ)
|
||||
|
||||
extern void add_timer(long jiffies, void (*fn)(void));
|
||||
extern void sleep_on(struct task_struct ** p);
|
||||
extern void interruptible_sleep_on(struct task_struct ** p);
|
||||
extern void wake_up(struct task_struct ** p);
|
||||
extern int in_group_p(gid_t grp);
|
||||
|
||||
/*
|
||||
* Entry into gdt where to find first TSS. 0-nul, 1-cs, 2-ds, 3-syscall
|
||||
* 4-TSS0, 5-LDT0, 6-TSS1 etc ...
|
||||
*/
|
||||
#define FIRST_TSS_ENTRY 4
|
||||
#define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1)
|
||||
#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3))
|
||||
#define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3))
|
||||
#define ltr(n) __asm__("ltr %%ax"::"a" (_TSS(n)))
|
||||
#define lldt(n) __asm__("lldt %%ax"::"a" (_LDT(n)))
|
||||
#define str(n) \
|
||||
__asm__("str %%ax\n\t" \
|
||||
"subl %2,%%eax\n\t" \
|
||||
"shrl $4,%%eax" \
|
||||
:"=a" (n) \
|
||||
:"0" (0),"i" (FIRST_TSS_ENTRY<<3))
|
||||
/*
|
||||
* switch_to(n) should switch tasks to task nr n, first
|
||||
* checking that n isn't the current task, in which case it does nothing.
|
||||
* This also clears the TS-flag if the task we switched to has used
|
||||
* tha math co-processor latest.
|
||||
*/
|
||||
#define switch_to(n) {\
|
||||
struct {long a,b;} __tmp; \
|
||||
__asm__("cmpl %%ecx,_current\n\t" \
|
||||
"je 1f\n\t" \
|
||||
"movw %%dx,%1\n\t" \
|
||||
"xchgl %%ecx,_current\n\t" \
|
||||
"ljmp %0\n\t" \
|
||||
"cmpl %%ecx,_last_task_used_math\n\t" \
|
||||
"jne 1f\n\t" \
|
||||
"clts\n" \
|
||||
"1:" \
|
||||
::"m" (*&__tmp.a),"m" (*&__tmp.b), \
|
||||
"d" (_TSS(n)),"c" ((long) task[n]) \
|
||||
:"cx"); \
|
||||
}
|
||||
|
||||
#define PAGE_ALIGN(n) (((n)+0xfff)&0xfffff000)
|
||||
|
||||
#define _set_base(addr,base) \
|
||||
__asm__("movw %%dx,%0\n\t" \
|
||||
"rorl $16,%%edx\n\t" \
|
||||
"movb %%dl,%1\n\t" \
|
||||
"movb %%dh,%2" \
|
||||
::"m" (*((addr)+2)), \
|
||||
"m" (*((addr)+4)), \
|
||||
"m" (*((addr)+7)), \
|
||||
"d" (base) \
|
||||
:"dx")
|
||||
|
||||
#define _set_limit(addr,limit) \
|
||||
__asm__("movw %%dx,%0\n\t" \
|
||||
"rorl $16,%%edx\n\t" \
|
||||
"movb %1,%%dh\n\t" \
|
||||
"andb $0xf0,%%dh\n\t" \
|
||||
"orb %%dh,%%dl\n\t" \
|
||||
"movb %%dl,%1" \
|
||||
::"m" (*(addr)), \
|
||||
"m" (*((addr)+6)), \
|
||||
"d" (limit) \
|
||||
:"dx")
|
||||
|
||||
#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , base )
|
||||
#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , (limit-1)>>12 )
|
||||
|
||||
static unsigned long inline _get_base(char * addr)
|
||||
{
|
||||
unsigned long __base;
|
||||
__asm__("movb %3,%%dh\n\t"
|
||||
"movb %2,%%dl\n\t"
|
||||
"shll $16,%%edx\n\t"
|
||||
"movw %1,%%dx"
|
||||
:"=&d" (__base)
|
||||
:"m" (*((addr)+2)),
|
||||
"m" (*((addr)+4)),
|
||||
"m" (*((addr)+7)));
|
||||
return __base;
|
||||
}
|
||||
|
||||
#define get_base(ldt) _get_base( ((char *)&(ldt)) )
|
||||
|
||||
static unsigned long inline get_limit(unsigned long segment)
|
||||
{
|
||||
unsigned long __limit;
|
||||
__asm__("lsll %1,%0"
|
||||
:"=r" (__limit):"r" (segment));
|
||||
return __limit+1;
|
||||
}
|
||||
|
||||
#endif
|
||||
113
kernel/0.95/linux-0.95/include/linux/sys.h
Normal file
113
kernel/0.95/linux-0.95/include/linux/sys.h
Normal file
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Why isn't this a .c file? Enquiring minds....
|
||||
*/
|
||||
|
||||
extern int sys_setup();
|
||||
extern int sys_exit();
|
||||
extern int sys_fork();
|
||||
extern int sys_read();
|
||||
extern int sys_write();
|
||||
extern int sys_open();
|
||||
extern int sys_close();
|
||||
extern int sys_waitpid();
|
||||
extern int sys_creat();
|
||||
extern int sys_link();
|
||||
extern int sys_unlink();
|
||||
extern int sys_execve();
|
||||
extern int sys_chdir();
|
||||
extern int sys_time();
|
||||
extern int sys_mknod();
|
||||
extern int sys_chmod();
|
||||
extern int sys_chown();
|
||||
extern int sys_break();
|
||||
extern int sys_stat();
|
||||
extern int sys_lseek();
|
||||
extern int sys_getpid();
|
||||
extern int sys_mount();
|
||||
extern int sys_umount();
|
||||
extern int sys_setuid();
|
||||
extern int sys_getuid();
|
||||
extern int sys_stime();
|
||||
extern int sys_ptrace();
|
||||
extern int sys_alarm();
|
||||
extern int sys_fstat();
|
||||
extern int sys_pause();
|
||||
extern int sys_utime();
|
||||
extern int sys_stty();
|
||||
extern int sys_gtty();
|
||||
extern int sys_access();
|
||||
extern int sys_nice();
|
||||
extern int sys_ftime();
|
||||
extern int sys_sync();
|
||||
extern int sys_kill();
|
||||
extern int sys_rename();
|
||||
extern int sys_mkdir();
|
||||
extern int sys_rmdir();
|
||||
extern int sys_dup();
|
||||
extern int sys_pipe();
|
||||
extern int sys_times();
|
||||
extern int sys_prof();
|
||||
extern int sys_brk();
|
||||
extern int sys_setgid();
|
||||
extern int sys_getgid();
|
||||
extern int sys_signal();
|
||||
extern int sys_geteuid();
|
||||
extern int sys_getegid();
|
||||
extern int sys_acct();
|
||||
extern int sys_phys();
|
||||
extern int sys_lock();
|
||||
extern int sys_ioctl();
|
||||
extern int sys_fcntl();
|
||||
extern int sys_mpx();
|
||||
extern int sys_setpgid();
|
||||
extern int sys_ulimit();
|
||||
extern int sys_uname();
|
||||
extern int sys_umask();
|
||||
extern int sys_chroot();
|
||||
extern int sys_ustat();
|
||||
extern int sys_dup2();
|
||||
extern int sys_getppid();
|
||||
extern int sys_getpgrp();
|
||||
extern int sys_setsid();
|
||||
extern int sys_sigaction();
|
||||
extern int sys_sgetmask();
|
||||
extern int sys_ssetmask();
|
||||
extern int sys_setreuid();
|
||||
extern int sys_setregid();
|
||||
extern int sys_sigpending();
|
||||
extern int sys_sigsuspend();
|
||||
extern int sys_sethostname();
|
||||
extern int sys_setrlimit();
|
||||
extern int sys_getrlimit();
|
||||
extern int sys_getrusage();
|
||||
extern int sys_gettimeofday();
|
||||
extern int sys_settimeofday();
|
||||
extern int sys_getgroups();
|
||||
extern int sys_setgroups();
|
||||
extern int sys_select();
|
||||
extern int sys_symlink();
|
||||
extern int sys_lstat();
|
||||
extern int sys_readlink();
|
||||
extern int sys_uselib();
|
||||
extern int sys_swapon();
|
||||
extern int sys_reboot();
|
||||
|
||||
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
|
||||
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
|
||||
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
|
||||
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
|
||||
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
|
||||
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
|
||||
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
|
||||
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
|
||||
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
|
||||
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
|
||||
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
|
||||
sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
|
||||
sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname,
|
||||
sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday,
|
||||
sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink,
|
||||
sys_lstat, sys_readlink, sys_uselib, sys_swapon, sys_reboot };
|
||||
|
||||
/* So we don't have to do any more manual updating.... */
|
||||
int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr);
|
||||
44
kernel/0.95/linux-0.95/include/linux/timer.h
Normal file
44
kernel/0.95/linux-0.95/include/linux/timer.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef _TIMER_H
|
||||
#define _TIMER_H
|
||||
|
||||
/*
|
||||
* DON'T CHANGE THESE!! Most of them are hardcoded into some assembly language
|
||||
* as well as being defined here.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The timers are:
|
||||
*
|
||||
* BLANK_TIMER console screen-saver timer
|
||||
*
|
||||
* BEEP_TIMER console beep timer
|
||||
*
|
||||
* SERx_TIMER serial incoming characters timer
|
||||
*
|
||||
* SERx_TIMEOUT timeout for serial writes
|
||||
*
|
||||
* HD_TIMER harddisk timer
|
||||
*
|
||||
* FLOPPY_TIMER floppy disk timer (not used right now)
|
||||
*/
|
||||
|
||||
#define BLANK_TIMER 0
|
||||
#define BEEP_TIMER 1
|
||||
#define SER1_TIMER 2
|
||||
#define SER2_TIMER 3
|
||||
|
||||
#define SER1_TIMEOUT 8
|
||||
#define SER2_TIMEOUT 9
|
||||
|
||||
#define HD_TIMER 16
|
||||
#define FLOPPY_TIMER 17
|
||||
|
||||
struct timer_struct {
|
||||
unsigned long expires;
|
||||
void (*fn)(void);
|
||||
};
|
||||
|
||||
extern unsigned long timer_active;
|
||||
extern struct timer_struct timer_table[32];
|
||||
|
||||
#endif
|
||||
103
kernel/0.95/linux-0.95/include/linux/tty.h
Normal file
103
kernel/0.95/linux-0.95/include/linux/tty.h
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* 'tty.h' defines some structures used by tty_io.c and some defines.
|
||||
*
|
||||
* NOTE! Don't touch this without checking that nothing in rs_io.s or
|
||||
* con_io.s breaks. Some constants are hardwired into the system (mainly
|
||||
* offsets into 'tty_queue'
|
||||
*/
|
||||
|
||||
#ifndef _TTY_H
|
||||
#define _TTY_H
|
||||
|
||||
#define MAX_CONSOLES 8
|
||||
#define NR_SERIALS 2
|
||||
#define NR_PTYS 4
|
||||
|
||||
extern int NR_CONSOLES;
|
||||
|
||||
#include <termios.h>
|
||||
|
||||
#define TTY_BUF_SIZE 1024
|
||||
|
||||
struct tty_queue {
|
||||
unsigned long data;
|
||||
unsigned long head;
|
||||
unsigned long tail;
|
||||
struct task_struct * proc_list;
|
||||
char buf[TTY_BUF_SIZE];
|
||||
};
|
||||
|
||||
#define IS_A_CONSOLE(min) (((min) & 0xC0) == 0x00)
|
||||
#define IS_A_SERIAL(min) (((min) & 0xC0) == 0x40)
|
||||
#define IS_A_PTY(min) ((min) & 0x80)
|
||||
#define IS_A_PTY_MASTER(min) (((min) & 0xC0) == 0x80)
|
||||
#define IS_A_PTY_SLAVE(min) (((min) & 0xC0) == 0xC0)
|
||||
#define PTY_OTHER(min) ((min) ^ 0x40)
|
||||
|
||||
#define INC(a) ((a) = ((a)+1) & (TTY_BUF_SIZE-1))
|
||||
#define DEC(a) ((a) = ((a)-1) & (TTY_BUF_SIZE-1))
|
||||
#define EMPTY(a) ((a)->head == (a)->tail)
|
||||
#define LEFT(a) (((a)->tail-(a)->head-1)&(TTY_BUF_SIZE-1))
|
||||
#define LAST(a) ((a)->buf[(TTY_BUF_SIZE-1)&((a)->head-1)])
|
||||
#define FULL(a) (!LEFT(a))
|
||||
#define CHARS(a) (((a)->head-(a)->tail)&(TTY_BUF_SIZE-1))
|
||||
#define GETCH(queue,c) \
|
||||
(void)({c=(queue)->buf[(queue)->tail];INC((queue)->tail);})
|
||||
#define PUTCH(c,queue) \
|
||||
(void)({(queue)->buf[(queue)->head]=(c);INC((queue)->head);})
|
||||
|
||||
#define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR])
|
||||
#define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT])
|
||||
#define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE])
|
||||
#define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL])
|
||||
#define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF])
|
||||
#define START_CHAR(tty) ((tty)->termios.c_cc[VSTART])
|
||||
#define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP])
|
||||
#define SUSPEND_CHAR(tty) ((tty)->termios.c_cc[VSUSP])
|
||||
|
||||
struct tty_struct {
|
||||
struct termios termios;
|
||||
int pgrp;
|
||||
int session;
|
||||
int stopped;
|
||||
struct winsize winsize;
|
||||
void (*write)(struct tty_struct * tty);
|
||||
struct tty_queue *read_q;
|
||||
struct tty_queue *write_q;
|
||||
struct tty_queue *secondary;
|
||||
};
|
||||
|
||||
extern struct tty_struct tty_table[];
|
||||
extern int fg_console;
|
||||
extern unsigned long video_num_columns;
|
||||
extern unsigned long video_num_lines;
|
||||
|
||||
|
||||
#define TTY_TABLE(nr) \
|
||||
(tty_table + ((nr) ? (((nr) < 64)? (nr)-1:(nr)) : fg_console))
|
||||
|
||||
/* intr=^C quit=^| erase=del kill=^U
|
||||
eof=^D vtime=\0 vmin=\1 sxtc=\0
|
||||
start=^Q stop=^S susp=^Z eol=\0
|
||||
reprint=^R discard=^U werase=^W lnext=^V
|
||||
eol2=\0
|
||||
*/
|
||||
#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
|
||||
|
||||
void rs_init(void);
|
||||
void con_init(void);
|
||||
void tty_init(void);
|
||||
|
||||
int tty_read(unsigned c, char * buf, int n, unsigned short flags);
|
||||
int tty_write(unsigned c, char * buf, int n);
|
||||
|
||||
void con_write(struct tty_struct * tty);
|
||||
void rs_write(struct tty_struct * tty);
|
||||
void mpty_write(struct tty_struct * tty);
|
||||
void spty_write(struct tty_struct * tty);
|
||||
|
||||
void copy_to_cooked(struct tty_struct * tty);
|
||||
|
||||
void update_screen(int new_console);
|
||||
|
||||
#endif
|
||||
95
kernel/0.95/linux-0.95/include/signal.h
Normal file
95
kernel/0.95/linux-0.95/include/signal.h
Normal file
@@ -0,0 +1,95 @@
|
||||
#ifndef _SIGNAL_H
|
||||
#define _SIGNAL_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
typedef int sig_atomic_t;
|
||||
typedef unsigned int sigset_t; /* 32 bits */
|
||||
|
||||
#define _NSIG 32
|
||||
#define NSIG _NSIG
|
||||
|
||||
#define SIGHUP 1
|
||||
#define SIGINT 2
|
||||
#define SIGQUIT 3
|
||||
#define SIGILL 4
|
||||
#define SIGTRAP 5
|
||||
#define SIGABRT 6
|
||||
#define SIGIOT 6
|
||||
#define SIGUNUSED 7
|
||||
#define SIGFPE 8
|
||||
#define SIGKILL 9
|
||||
#define SIGUSR1 10
|
||||
#define SIGSEGV 11
|
||||
#define SIGUSR2 12
|
||||
#define SIGPIPE 13
|
||||
#define SIGALRM 14
|
||||
#define SIGTERM 15
|
||||
#define SIGSTKFLT 16
|
||||
#define SIGCHLD 17
|
||||
#define SIGCONT 18
|
||||
#define SIGSTOP 19
|
||||
#define SIGTSTP 20
|
||||
#define SIGTTIN 21
|
||||
#define SIGTTOU 22
|
||||
|
||||
/*
|
||||
* Most of these aren't used yet (and perhaps never will),
|
||||
* so they are commented out.
|
||||
*/
|
||||
|
||||
/*
|
||||
#define SIGIO 23
|
||||
#define SIGPOLL SIGIO
|
||||
#define SIGXCPU 24
|
||||
#define SIGXFSZ 25
|
||||
#define SIGVTALRM 26
|
||||
#define SIGPROF 27
|
||||
*/
|
||||
|
||||
#define SIGWINCH 28
|
||||
|
||||
/*
|
||||
#define SIGLOST 29
|
||||
*/
|
||||
|
||||
/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */
|
||||
#define SA_NOCLDSTOP 1
|
||||
#define SA_INTERRUPT 0x20000000
|
||||
#define SA_NOMASK 0x40000000
|
||||
#define SA_ONESHOT 0x80000000
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
#define SIG_DFL ((void (*)(int))0) /* default signal handling */
|
||||
#define SIG_IGN ((void (*)(int))1) /* ignore signal */
|
||||
#define SIG_ERR ((void (*)(int))-1) /* error return from signal */
|
||||
|
||||
#ifdef notdef
|
||||
#define sigemptyset(mask) ((*(mask) = 0), 1)
|
||||
#define sigfillset(mask) ((*(mask) = ~0), 1)
|
||||
#endif
|
||||
|
||||
struct sigaction {
|
||||
void (*sa_handler)(int);
|
||||
sigset_t sa_mask;
|
||||
int sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
};
|
||||
|
||||
void (*signal(int _sig, void (*_func)(int)))(int);
|
||||
int raise(int sig);
|
||||
int kill(pid_t pid, int sig);
|
||||
int sigaddset(sigset_t *mask, int signo);
|
||||
int sigdelset(sigset_t *mask, int signo);
|
||||
int sigemptyset(sigset_t *mask);
|
||||
int sigfillset(sigset_t *mask);
|
||||
int sigismember(sigset_t *mask, int signo); /* 1 - is, 0 - not, -1 error */
|
||||
int sigpending(sigset_t *set);
|
||||
int sigprocmask(int how, sigset_t *set, sigset_t *oldset);
|
||||
int sigsuspend(sigset_t *sigmask);
|
||||
int sigaction(int sig, struct sigaction *act, struct sigaction *oldact);
|
||||
|
||||
#endif /* _SIGNAL_H */
|
||||
28
kernel/0.95/linux-0.95/include/stdarg.h
Executable file
28
kernel/0.95/linux-0.95/include/stdarg.h
Executable file
@@ -0,0 +1,28 @@
|
||||
#ifndef _STDARG_H
|
||||
#define _STDARG_H
|
||||
|
||||
typedef char *va_list;
|
||||
|
||||
/* Amount of space required in an argument list for an arg of type TYPE.
|
||||
TYPE may alternatively be an expression whose type is used. */
|
||||
|
||||
#define __va_rounded_size(TYPE) \
|
||||
(((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
|
||||
|
||||
#ifndef __sparc__
|
||||
#define va_start(AP, LASTARG) \
|
||||
(AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
|
||||
#else
|
||||
#define va_start(AP, LASTARG) \
|
||||
(__builtin_saveregs (), \
|
||||
AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
|
||||
#endif
|
||||
|
||||
void va_end (va_list); /* Defined in gnulib */
|
||||
#define va_end(AP)
|
||||
|
||||
#define va_arg(AP, TYPE) \
|
||||
(AP += __va_rounded_size (TYPE), \
|
||||
*((TYPE *) (AP - __va_rounded_size (TYPE))))
|
||||
|
||||
#endif /* _STDARG_H */
|
||||
18
kernel/0.95/linux-0.95/include/stddef.h
Normal file
18
kernel/0.95/linux-0.95/include/stddef.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef _STDDEF_H
|
||||
#define _STDDEF_H
|
||||
|
||||
#ifndef _PTRDIFF_T
|
||||
#define _PTRDIFF_T
|
||||
typedef long ptrdiff_t;
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned long size_t;
|
||||
#endif
|
||||
|
||||
#undef NULL
|
||||
#define NULL ((void *)0)
|
||||
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||
#endif
|
||||
411
kernel/0.95/linux-0.95/include/string.h
Normal file
411
kernel/0.95/linux-0.95/include/string.h
Normal file
@@ -0,0 +1,411 @@
|
||||
#ifndef _STRING_H_
|
||||
#define _STRING_H_
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
|
||||
extern char * strerror(int errno);
|
||||
|
||||
/*
|
||||
* This string-include defines all string functions as inline
|
||||
* functions. Use gcc. It also assumes ds=es=data space, this should be
|
||||
* normal. Most of the string-functions are rather heavily hand-optimized,
|
||||
* see especially strtok,strstr,str[c]spn. They should work, but are not
|
||||
* very easy to understand. Everything is done entirely within the register
|
||||
* set, making the functions fast and clean. String instructions have been
|
||||
* used through-out, making for "slightly" unclear code :-)
|
||||
*
|
||||
* (C) 1991 Linus Torvalds
|
||||
*/
|
||||
|
||||
extern inline char * strcpy(char * dest,const char *src)
|
||||
{
|
||||
__asm__("cld\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b"
|
||||
::"S" (src),"D" (dest):"si","di","ax");
|
||||
return dest;
|
||||
}
|
||||
|
||||
extern inline char * strncpy(char * dest,const char *src,size_t count)
|
||||
{
|
||||
__asm__("cld\n"
|
||||
"1:\tdecl %2\n\t"
|
||||
"js 2f\n\t"
|
||||
"lodsb\n\t"
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b\n\t"
|
||||
"rep\n\t"
|
||||
"stosb\n"
|
||||
"2:"
|
||||
::"S" (src),"D" (dest),"c" (count):"si","di","ax","cx");
|
||||
return dest;
|
||||
}
|
||||
|
||||
extern inline char * strcat(char * dest,const char * src)
|
||||
{
|
||||
__asm__("cld\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"decl %1\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b"
|
||||
::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff):"si","di","ax","cx");
|
||||
return dest;
|
||||
}
|
||||
|
||||
extern inline char * strncat(char * dest,const char * src,size_t count)
|
||||
{
|
||||
__asm__("cld\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"decl %1\n\t"
|
||||
"movl %4,%3\n"
|
||||
"1:\tdecl %3\n\t"
|
||||
"js 2f\n\t"
|
||||
"lodsb\n\t"
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b\n"
|
||||
"2:\txorl %2,%2\n\t"
|
||||
"stosb"
|
||||
::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count)
|
||||
:"si","di","ax","cx");
|
||||
return dest;
|
||||
}
|
||||
|
||||
extern inline int strcmp(const char * cs,const char * ct)
|
||||
{
|
||||
register int __res __asm__("ax");
|
||||
__asm__("cld\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"scasb\n\t"
|
||||
"jne 2f\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b\n\t"
|
||||
"xorl %%eax,%%eax\n\t"
|
||||
"jmp 3f\n"
|
||||
"2:\tmovl $1,%%eax\n\t"
|
||||
"jl 3f\n\t"
|
||||
"negl %%eax\n"
|
||||
"3:"
|
||||
:"=a" (__res):"D" (cs),"S" (ct):"si","di");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline int strncmp(const char * cs,const char * ct,size_t count)
|
||||
{
|
||||
register int __res __asm__("ax");
|
||||
__asm__("cld\n"
|
||||
"1:\tdecl %3\n\t"
|
||||
"js 2f\n\t"
|
||||
"lodsb\n\t"
|
||||
"scasb\n\t"
|
||||
"jne 3f\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b\n"
|
||||
"2:\txorl %%eax,%%eax\n\t"
|
||||
"jmp 4f\n"
|
||||
"3:\tmovl $1,%%eax\n\t"
|
||||
"jl 4f\n\t"
|
||||
"negl %%eax\n"
|
||||
"4:"
|
||||
:"=a" (__res):"D" (cs),"S" (ct),"c" (count):"si","di","cx");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline char * strchr(const char * s,char c)
|
||||
{
|
||||
register char * __res __asm__("ax");
|
||||
__asm__("cld\n\t"
|
||||
"movb %%al,%%ah\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"cmpb %%ah,%%al\n\t"
|
||||
"je 2f\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b\n\t"
|
||||
"movl $1,%1\n"
|
||||
"2:\tmovl %1,%0\n\t"
|
||||
"decl %0"
|
||||
:"=a" (__res):"S" (s),"0" (c):"si");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline char * strrchr(const char * s,char c)
|
||||
{
|
||||
register char * __res __asm__("dx");
|
||||
__asm__("cld\n\t"
|
||||
"movb %%al,%%ah\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"cmpb %%ah,%%al\n\t"
|
||||
"jne 2f\n\t"
|
||||
"movl %%esi,%0\n\t"
|
||||
"decl %0\n"
|
||||
"2:\ttestb %%al,%%al\n\t"
|
||||
"jne 1b"
|
||||
:"=d" (__res):"0" (0),"S" (s),"a" (c):"ax","si");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline size_t strspn(const char * cs, const char * ct)
|
||||
{
|
||||
register char * __res __asm__("si");
|
||||
__asm__("cld\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t"
|
||||
"movl %%ecx,%%edx\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 2f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"je 1b\n"
|
||||
"2:\tdecl %0"
|
||||
:"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
|
||||
:"ax","cx","dx","di");
|
||||
return __res-cs;
|
||||
}
|
||||
|
||||
extern inline size_t strcspn(const char * cs, const char * ct)
|
||||
{
|
||||
register char * __res __asm__("si");
|
||||
__asm__("cld\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t"
|
||||
"movl %%ecx,%%edx\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 2f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"jne 1b\n"
|
||||
"2:\tdecl %0"
|
||||
:"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
|
||||
:"ax","cx","dx","di");
|
||||
return __res-cs;
|
||||
}
|
||||
|
||||
extern inline char * strpbrk(const char * cs,const char * ct)
|
||||
{
|
||||
register char * __res __asm__("si");
|
||||
__asm__("cld\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t"
|
||||
"movl %%ecx,%%edx\n"
|
||||
"1:\tlodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 2f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"jne 1b\n\t"
|
||||
"decl %0\n\t"
|
||||
"jmp 3f\n"
|
||||
"2:\txorl %0,%0\n"
|
||||
"3:"
|
||||
:"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
|
||||
:"ax","cx","dx","di");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline char * strstr(const char * cs,const char * ct)
|
||||
{
|
||||
register char * __res __asm__("ax");
|
||||
__asm__("cld\n\t" \
|
||||
"movl %4,%%edi\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */
|
||||
"movl %%ecx,%%edx\n"
|
||||
"1:\tmovl %4,%%edi\n\t"
|
||||
"movl %%esi,%%eax\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repe\n\t"
|
||||
"cmpsb\n\t"
|
||||
"je 2f\n\t" /* also works for empty string, see above */
|
||||
"xchgl %%eax,%%esi\n\t"
|
||||
"incl %%esi\n\t"
|
||||
"cmpb $0,-1(%%eax)\n\t"
|
||||
"jne 1b\n\t"
|
||||
"xorl %%eax,%%eax\n\t"
|
||||
"2:"
|
||||
:"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct)
|
||||
:"cx","dx","di","si");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline size_t strlen(const char * s)
|
||||
{
|
||||
register int __res __asm__("cx");
|
||||
__asm__("cld\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"notl %0\n\t"
|
||||
"decl %0"
|
||||
:"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff):"di");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern char * ___strtok;
|
||||
|
||||
extern inline char * strtok(char * s,const char * ct)
|
||||
{
|
||||
register char * __res __asm__("si");
|
||||
__asm__("testl %1,%1\n\t"
|
||||
"jne 1f\n\t"
|
||||
"testl %0,%0\n\t"
|
||||
"je 8f\n\t"
|
||||
"movl %0,%1\n"
|
||||
"1:\txorl %0,%0\n\t"
|
||||
"movl $-1,%%ecx\n\t"
|
||||
"xorl %%eax,%%eax\n\t"
|
||||
"cld\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t"
|
||||
"je 7f\n\t" /* empty delimeter-string */
|
||||
"movl %%ecx,%%edx\n"
|
||||
"2:\tlodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 7f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"je 2b\n\t"
|
||||
"decl %1\n\t"
|
||||
"cmpb $0,(%1)\n\t"
|
||||
"je 7f\n\t"
|
||||
"movl %1,%0\n"
|
||||
"3:\tlodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 5f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"jne 3b\n\t"
|
||||
"decl %1\n\t"
|
||||
"cmpb $0,(%1)\n\t"
|
||||
"je 5f\n\t"
|
||||
"movb $0,(%1)\n\t"
|
||||
"incl %1\n\t"
|
||||
"jmp 6f\n"
|
||||
"5:\txorl %1,%1\n"
|
||||
"6:\tcmpb $0,(%0)\n\t"
|
||||
"jne 7f\n\t"
|
||||
"xorl %0,%0\n"
|
||||
"7:\ttestl %0,%0\n\t"
|
||||
"jne 8f\n\t"
|
||||
"movl %0,%1\n"
|
||||
"8:"
|
||||
#if __GNUC__ == 2
|
||||
:"=r" (__res)
|
||||
#else
|
||||
:"=b" (__res)
|
||||
#endif
|
||||
,"=S" (___strtok)
|
||||
:"0" (___strtok),"1" (s),"g" (ct)
|
||||
:"ax","cx","dx","di");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline void * memcpy(void * dest,const void * src, size_t n)
|
||||
{
|
||||
__asm__("cld\n\t"
|
||||
"rep\n\t"
|
||||
"movsb"
|
||||
::"c" (n),"S" (src),"D" (dest)
|
||||
:"cx","si","di");
|
||||
return dest;
|
||||
}
|
||||
|
||||
extern inline void * memmove(void * dest,const void * src, size_t n)
|
||||
{
|
||||
if (dest<src)
|
||||
__asm__("cld\n\t"
|
||||
"rep\n\t"
|
||||
"movsb"
|
||||
::"c" (n),"S" (src),"D" (dest)
|
||||
:"cx","si","di");
|
||||
else
|
||||
__asm__("std\n\t"
|
||||
"rep\n\t"
|
||||
"movsb\n\t"
|
||||
"cld"
|
||||
::"c" (n),"S" (src+n-1),"D" (dest+n-1)
|
||||
:"cx","si","di");
|
||||
return dest;
|
||||
}
|
||||
|
||||
extern inline int memcmp(const void * cs,const void * ct,size_t count)
|
||||
{
|
||||
register int __res __asm__("ax");
|
||||
__asm__("cld\n\t"
|
||||
"repe\n\t"
|
||||
"cmpsb\n\t"
|
||||
"je 1f\n\t"
|
||||
"movl $1,%%eax\n\t"
|
||||
"jl 1f\n\t"
|
||||
"negl %%eax\n"
|
||||
"1:"
|
||||
:"=a" (__res):"0" (0),"D" (cs),"S" (ct),"c" (count)
|
||||
:"si","di","cx");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline void * memchr(const void * cs,char c,size_t count)
|
||||
{
|
||||
register void * __res __asm__("di");
|
||||
if (!count)
|
||||
return NULL;
|
||||
__asm__("cld\n\t"
|
||||
"repne\n\t"
|
||||
"scasb\n\t"
|
||||
"je 1f\n\t"
|
||||
"movl $1,%0\n"
|
||||
"1:\tdecl %0"
|
||||
:"=D" (__res):"a" (c),"D" (cs),"c" (count)
|
||||
:"cx");
|
||||
return __res;
|
||||
}
|
||||
|
||||
extern inline void * memset(void * s,char c,size_t count)
|
||||
{
|
||||
__asm__("cld\n\t"
|
||||
"rep\n\t"
|
||||
"stosb"
|
||||
::"a" (c),"D" (s),"c" (count)
|
||||
:"cx","di");
|
||||
return s;
|
||||
}
|
||||
|
||||
#endif
|
||||
12
kernel/0.95/linux-0.95/include/sys/param.h
Normal file
12
kernel/0.95/linux-0.95/include/sys/param.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef _SYS_PARAM_H
|
||||
#define _SYS_PARAM_H
|
||||
|
||||
#define HZ 100
|
||||
#define EXEC_PAGESIZE 4096
|
||||
|
||||
#define NGROUPS 32 /* Max number of groups per user */
|
||||
#define NOGROUP -1
|
||||
|
||||
#define MAXHOSTNAMELEN 8
|
||||
|
||||
#endif
|
||||
52
kernel/0.95/linux-0.95/include/sys/ptrace.h
Normal file
52
kernel/0.95/linux-0.95/include/sys/ptrace.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/* ptrace.h */
|
||||
/* structs and defines to help the user use the ptrace system call. */
|
||||
|
||||
#ifndef _SYS_PTRACE_H
|
||||
#define _SYS_PTRACE_H
|
||||
/* has the defines to get at the registers. */
|
||||
/* use ptrace (3 or 6, pid, PT_EXCL, data); to read or write
|
||||
the processes registers. */
|
||||
|
||||
#define EBX 0
|
||||
#define ECX 1
|
||||
#define EDX 2
|
||||
#define ESI 3
|
||||
#define EDI 4
|
||||
#define EBP 5
|
||||
#define EAX 6
|
||||
#define DS 7
|
||||
#define ES 8
|
||||
#define FS 9
|
||||
#define GS 10
|
||||
#define ORIG_EAX 11
|
||||
#define EIP 12
|
||||
#define CS 13
|
||||
#define EFL 14
|
||||
#define UESP 15
|
||||
#define SS 16
|
||||
|
||||
|
||||
/* this struct defines the way the registers are stored on the
|
||||
stack during a system call. */
|
||||
|
||||
struct pt_regs {
|
||||
long ebx;
|
||||
long ecx;
|
||||
long edx;
|
||||
long esi;
|
||||
long edi;
|
||||
long ebp;
|
||||
long eax;
|
||||
long ds;
|
||||
long es;
|
||||
long fs;
|
||||
long gs;
|
||||
long orig_eax;
|
||||
long eip;
|
||||
long cs;
|
||||
long eflags;
|
||||
long esp;
|
||||
long ss;
|
||||
};
|
||||
|
||||
#endif /* _SYS_PTRACE_H */
|
||||
63
kernel/0.95/linux-0.95/include/sys/resource.h
Normal file
63
kernel/0.95/linux-0.95/include/sys/resource.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Resource control/accounting header file for linux
|
||||
*/
|
||||
|
||||
#ifndef _SYS_RESOURCE_H
|
||||
#define _SYS_RESOURCE_H
|
||||
|
||||
/*
|
||||
* Definition of struct rusage taken from BSD 4.3 Reno
|
||||
*
|
||||
* We don't support all of these yet, but we might as well have them....
|
||||
* Otherwise, each time we add new items, programs which depend on this
|
||||
* structure will lose. This reduces the chances of that happening.
|
||||
*/
|
||||
#define RUSAGE_SELF 0
|
||||
#define RUSAGE_CHILDREN -1
|
||||
|
||||
struct rusage {
|
||||
struct timeval ru_utime; /* user time used */
|
||||
struct timeval ru_stime; /* system time used */
|
||||
long ru_maxrss; /* maximum resident set size */
|
||||
long ru_ixrss; /* integral shared memory size */
|
||||
long ru_idrss; /* integral unshared data size */
|
||||
long ru_isrss; /* integral unshared stack size */
|
||||
long ru_minflt; /* page reclaims */
|
||||
long ru_majflt; /* page faults */
|
||||
long ru_nswap; /* swaps */
|
||||
long ru_inblock; /* block input operations */
|
||||
long ru_oublock; /* block output operations */
|
||||
long ru_msgsnd; /* messages sent */
|
||||
long ru_msgrcv; /* messages received */
|
||||
long ru_nsignals; /* signals received */
|
||||
long ru_nvcsw; /* voluntary context switches */
|
||||
long ru_nivcsw; /* involuntary " */
|
||||
};
|
||||
|
||||
/*
|
||||
* Resource limits
|
||||
*/
|
||||
|
||||
#define RLIMIT_CPU 0 /* CPU time in ms */
|
||||
#define RLIMIT_FSIZE 1 /* Maximum filesize */
|
||||
#define RLIMIT_DATA 2 /* max data size */
|
||||
#define RLIMIT_STACK 3 /* max stack size */
|
||||
#define RLIMIT_CORE 4 /* max core file size */
|
||||
#define RLIMIT_RSS 5 /* max resident set size */
|
||||
|
||||
#ifdef notdef
|
||||
#define RLIMIT_MEMLOCK 6 /* max locked-in-memory address space*/
|
||||
#define RLIMIT_NPROC 7 /* max number of processes */
|
||||
#define RLIMIT_OFILE 8 /* max number of open files */
|
||||
#endif
|
||||
|
||||
#define RLIM_NLIMITS 6
|
||||
|
||||
#define RLIM_INFINITY 0x7fffffff
|
||||
|
||||
struct rlimit {
|
||||
int rlim_cur;
|
||||
int rlim_max;
|
||||
};
|
||||
|
||||
#endif /* _SYS_RESOURCE_H */
|
||||
60
kernel/0.95/linux-0.95/include/sys/stat.h
Normal file
60
kernel/0.95/linux-0.95/include/sys/stat.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef _SYS_STAT_H
|
||||
#define _SYS_STAT_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
struct stat {
|
||||
dev_t st_dev;
|
||||
ino_t st_ino;
|
||||
umode_t st_mode;
|
||||
nlink_t st_nlink;
|
||||
uid_t st_uid;
|
||||
gid_t st_gid;
|
||||
dev_t st_rdev;
|
||||
off_t st_size;
|
||||
time_t st_atime;
|
||||
time_t st_mtime;
|
||||
time_t st_ctime;
|
||||
};
|
||||
|
||||
#define S_IFMT 00170000
|
||||
#define S_IFLNK 0120000
|
||||
#define S_IFREG 0100000
|
||||
#define S_IFBLK 0060000
|
||||
#define S_IFDIR 0040000
|
||||
#define S_IFCHR 0020000
|
||||
#define S_IFIFO 0010000
|
||||
#define S_ISUID 0004000
|
||||
#define S_ISGID 0002000
|
||||
#define S_ISVTX 0001000
|
||||
|
||||
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
|
||||
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||
|
||||
#define S_IRWXU 00700
|
||||
#define S_IRUSR 00400
|
||||
#define S_IWUSR 00200
|
||||
#define S_IXUSR 00100
|
||||
|
||||
#define S_IRWXG 00070
|
||||
#define S_IRGRP 00040
|
||||
#define S_IWGRP 00020
|
||||
#define S_IXGRP 00010
|
||||
|
||||
#define S_IRWXO 00007
|
||||
#define S_IROTH 00004
|
||||
#define S_IWOTH 00002
|
||||
#define S_IXOTH 00001
|
||||
|
||||
extern int chmod(const char *_path, mode_t mode);
|
||||
extern int fstat(int fildes, struct stat *stat_buf);
|
||||
extern int mkdir(const char *_path, mode_t mode);
|
||||
extern int mkfifo(const char *_path, mode_t mode);
|
||||
extern int stat(const char *filename, struct stat *stat_buf);
|
||||
extern mode_t umask(mode_t mask);
|
||||
|
||||
#endif
|
||||
64
kernel/0.95/linux-0.95/include/sys/time.h
Normal file
64
kernel/0.95/linux-0.95/include/sys/time.h
Normal file
@@ -0,0 +1,64 @@
|
||||
#ifndef _SYS_TIME_H
|
||||
#define _SYS_TIME_H
|
||||
|
||||
/* gettimofday returns this */
|
||||
struct timeval {
|
||||
long tv_sec; /* seconds */
|
||||
long tv_usec; /* microseconds */
|
||||
};
|
||||
|
||||
struct timezone {
|
||||
int tz_minuteswest; /* minutes west of Greenwich */
|
||||
int tz_dsttime; /* type of dst correction */
|
||||
};
|
||||
|
||||
#define DST_NONE 0 /* not on dst */
|
||||
#define DST_USA 1 /* USA style dst */
|
||||
#define DST_AUST 2 /* Australian style dst */
|
||||
#define DST_WET 3 /* Western European dst */
|
||||
#define DST_MET 4 /* Middle European dst */
|
||||
#define DST_EET 5 /* Eastern European dst */
|
||||
#define DST_CAN 6 /* Canada */
|
||||
#define DST_GB 7 /* Great Britain and Eire */
|
||||
#define DST_RUM 8 /* Rumania */
|
||||
#define DST_TUR 9 /* Turkey */
|
||||
#define DST_AUSTALT 10 /* Australian style with shift in 1986 */
|
||||
|
||||
#define FD_SETSIZE (8*sizeof(fd_set))
|
||||
#define FD_SET(fd,fdsetp) (*(fdsetp) |= (1 << (fd)))
|
||||
#define FD_CLR(fd,fdsetp) (*(fdsetp) &= ~(1 << (fd)))
|
||||
#define FD_ISSET(fd,fdsetp) ((*(fdsetp) >> fd) & 1)
|
||||
#define FD_ZERO(fdsetp) (*(fdsetp) = 0)
|
||||
|
||||
/*
|
||||
* Operations on timevals.
|
||||
*
|
||||
* NB: timercmp does not work for >= or <=.
|
||||
*/
|
||||
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#define timercmp(tvp, uvp, cmp) \
|
||||
((tvp)->tv_sec cmp (uvp)->tv_sec || \
|
||||
(tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
|
||||
#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
|
||||
|
||||
/*
|
||||
* Names of the interval timers, and structure
|
||||
* defining a timer setting.
|
||||
*/
|
||||
#define ITIMER_REAL 0
|
||||
#define ITIMER_VIRTUAL 1
|
||||
#define ITIMER_PROF 2
|
||||
|
||||
struct itimerval {
|
||||
struct timeval it_interval; /* timer interval */
|
||||
struct timeval it_value; /* current value */
|
||||
};
|
||||
|
||||
#include <time.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
int gettimeofday(struct timeval * tp, struct timezone * tz);
|
||||
int select(int width, fd_set * readfds, fd_set * writefds,
|
||||
fd_set * exceptfds, struct timeval * timeout);
|
||||
|
||||
#endif /*_SYS_TIME_H*/
|
||||
15
kernel/0.95/linux-0.95/include/sys/times.h
Normal file
15
kernel/0.95/linux-0.95/include/sys/times.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef _TIMES_H
|
||||
#define _TIMES_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
struct tms {
|
||||
time_t tms_utime;
|
||||
time_t tms_stime;
|
||||
time_t tms_cutime;
|
||||
time_t tms_cstime;
|
||||
};
|
||||
|
||||
extern time_t times(struct tms * tp);
|
||||
|
||||
#endif
|
||||
53
kernel/0.95/linux-0.95/include/sys/types.h
Normal file
53
kernel/0.95/linux-0.95/include/sys/types.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#ifndef _SYS_TYPES_H
|
||||
#define _SYS_TYPES_H
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T
|
||||
#define _TIME_T
|
||||
typedef long time_t;
|
||||
#endif
|
||||
|
||||
#ifndef _PTRDIFF_T
|
||||
#define _PTRDIFF_T
|
||||
typedef long ptrdiff_t;
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif
|
||||
|
||||
typedef int pid_t;
|
||||
typedef unsigned short uid_t;
|
||||
typedef unsigned short gid_t;
|
||||
typedef unsigned short dev_t;
|
||||
typedef unsigned short ino_t;
|
||||
typedef unsigned short mode_t;
|
||||
typedef unsigned short umode_t;
|
||||
typedef unsigned short nlink_t;
|
||||
typedef int daddr_t;
|
||||
typedef long off_t;
|
||||
typedef unsigned char u_char;
|
||||
typedef unsigned short ushort;
|
||||
typedef char *caddr_t;
|
||||
|
||||
typedef unsigned char cc_t;
|
||||
typedef unsigned int speed_t;
|
||||
typedef unsigned long tcflag_t;
|
||||
|
||||
typedef unsigned long fd_set;
|
||||
|
||||
typedef struct { int quot,rem; } div_t;
|
||||
typedef struct { long quot,rem; } ldiv_t;
|
||||
|
||||
struct ustat {
|
||||
daddr_t f_tfree;
|
||||
ino_t f_tinode;
|
||||
char f_fname[6];
|
||||
char f_fpack[6];
|
||||
};
|
||||
|
||||
#endif
|
||||
17
kernel/0.95/linux-0.95/include/sys/utsname.h
Normal file
17
kernel/0.95/linux-0.95/include/sys/utsname.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef _SYS_UTSNAME_H
|
||||
#define _SYS_UTSNAME_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
struct utsname {
|
||||
char sysname[9];
|
||||
char nodename[MAXHOSTNAMELEN+1];
|
||||
char release[9];
|
||||
char version[9];
|
||||
char machine[9];
|
||||
};
|
||||
|
||||
extern int uname(struct utsname * utsbuf);
|
||||
|
||||
#endif
|
||||
24
kernel/0.95/linux-0.95/include/sys/wait.h
Normal file
24
kernel/0.95/linux-0.95/include/sys/wait.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef _SYS_WAIT_H
|
||||
#define _SYS_WAIT_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define _LOW(v) ( (v) & 0377)
|
||||
#define _HIGH(v) ( ((v) >> 8) & 0377)
|
||||
|
||||
/* options for waitpid, WUNTRACED not supported */
|
||||
#define WNOHANG 1
|
||||
#define WUNTRACED 2
|
||||
|
||||
#define WIFEXITED(s) (!((s)&0xFF))
|
||||
#define WIFSTOPPED(s) (((s)&0xFF)==0x7F)
|
||||
#define WEXITSTATUS(s) (((s)>>8)&0xFF)
|
||||
#define WTERMSIG(s) ((s)&0x7F)
|
||||
#define WCOREDUMP(s) ((s)&0x80)
|
||||
#define WSTOPSIG(s) (((s)>>8)&0xFF)
|
||||
#define WIFSIGNALED(s) (((unsigned int)(s)-1 & 0xFFFF) < 0xFF)
|
||||
|
||||
pid_t wait(int *stat_loc);
|
||||
pid_t waitpid(pid_t pid, int *stat_loc, int options);
|
||||
|
||||
#endif
|
||||
227
kernel/0.95/linux-0.95/include/termios.h
Normal file
227
kernel/0.95/linux-0.95/include/termios.h
Normal file
@@ -0,0 +1,227 @@
|
||||
#ifndef _TERMIOS_H
|
||||
#define _TERMIOS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define TTY_BUF_SIZE 1024
|
||||
|
||||
/* 0x54 is just a magic number to make these relatively uniqe ('T') */
|
||||
|
||||
#define TCGETS 0x5401
|
||||
#define TCSETS 0x5402
|
||||
#define TCSETSW 0x5403
|
||||
#define TCSETSF 0x5404
|
||||
#define TCGETA 0x5405
|
||||
#define TCSETA 0x5406
|
||||
#define TCSETAW 0x5407
|
||||
#define TCSETAF 0x5408
|
||||
#define TCSBRK 0x5409
|
||||
#define TCXONC 0x540A
|
||||
#define TCFLSH 0x540B
|
||||
#define TIOCEXCL 0x540C
|
||||
#define TIOCNXCL 0x540D
|
||||
#define TIOCSCTTY 0x540E
|
||||
#define TIOCGPGRP 0x540F
|
||||
#define TIOCSPGRP 0x5410
|
||||
#define TIOCOUTQ 0x5411
|
||||
#define TIOCSTI 0x5412
|
||||
#define TIOCGWINSZ 0x5413
|
||||
#define TIOCSWINSZ 0x5414
|
||||
#define TIOCMGET 0x5415
|
||||
#define TIOCMBIS 0x5416
|
||||
#define TIOCMBIC 0x5417
|
||||
#define TIOCMSET 0x5418
|
||||
#define TIOCGSOFTCAR 0x5419
|
||||
#define TIOCSSOFTCAR 0x541A
|
||||
#define FIONREAD 0x541B
|
||||
#define TIOCINQ FIONREAD
|
||||
#define TIOCLINUX 0x541C
|
||||
|
||||
struct winsize {
|
||||
unsigned short ws_row;
|
||||
unsigned short ws_col;
|
||||
unsigned short ws_xpixel;
|
||||
unsigned short ws_ypixel;
|
||||
};
|
||||
|
||||
#define NCC 8
|
||||
struct termio {
|
||||
unsigned short c_iflag; /* input mode flags */
|
||||
unsigned short c_oflag; /* output mode flags */
|
||||
unsigned short c_cflag; /* control mode flags */
|
||||
unsigned short c_lflag; /* local mode flags */
|
||||
unsigned char c_line; /* line discipline */
|
||||
unsigned char c_cc[NCC]; /* control characters */
|
||||
};
|
||||
|
||||
#define NCCS 17
|
||||
struct termios {
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
};
|
||||
|
||||
/* c_cc characters */
|
||||
#define VINTR 0
|
||||
#define VQUIT 1
|
||||
#define VERASE 2
|
||||
#define VKILL 3
|
||||
#define VEOF 4
|
||||
#define VTIME 5
|
||||
#define VMIN 6
|
||||
#define VSWTC 7
|
||||
#define VSTART 8
|
||||
#define VSTOP 9
|
||||
#define VSUSP 10
|
||||
#define VEOL 11
|
||||
#define VREPRINT 12
|
||||
#define VDISCARD 13
|
||||
#define VWERASE 14
|
||||
#define VLNEXT 15
|
||||
#define VEOL2 16
|
||||
|
||||
/* c_iflag bits */
|
||||
#define IGNBRK 0000001
|
||||
#define BRKINT 0000002
|
||||
#define IGNPAR 0000004
|
||||
#define PARMRK 0000010
|
||||
#define INPCK 0000020
|
||||
#define ISTRIP 0000040
|
||||
#define INLCR 0000100
|
||||
#define IGNCR 0000200
|
||||
#define ICRNL 0000400
|
||||
#define IUCLC 0001000
|
||||
#define IXON 0002000
|
||||
#define IXANY 0004000
|
||||
#define IXOFF 0010000
|
||||
#define IMAXBEL 0020000
|
||||
|
||||
/* c_oflag bits */
|
||||
#define OPOST 0000001
|
||||
#define OLCUC 0000002
|
||||
#define ONLCR 0000004
|
||||
#define OCRNL 0000010
|
||||
#define ONOCR 0000020
|
||||
#define ONLRET 0000040
|
||||
#define OFILL 0000100
|
||||
#define OFDEL 0000200
|
||||
#define NLDLY 0000400
|
||||
#define NL0 0000000
|
||||
#define NL1 0000400
|
||||
#define CRDLY 0003000
|
||||
#define CR0 0000000
|
||||
#define CR1 0001000
|
||||
#define CR2 0002000
|
||||
#define CR3 0003000
|
||||
#define TABDLY 0014000
|
||||
#define TAB0 0000000
|
||||
#define TAB1 0004000
|
||||
#define TAB2 0010000
|
||||
#define TAB3 0014000
|
||||
#define XTABS 0014000
|
||||
#define BSDLY 0020000
|
||||
#define BS0 0000000
|
||||
#define BS1 0020000
|
||||
#define VTDLY 0040000
|
||||
#define VT0 0000000
|
||||
#define VT1 0040000
|
||||
#define FFDLY 0040000
|
||||
#define FF0 0000000
|
||||
#define FF1 0040000
|
||||
|
||||
/* c_cflag bit meaning */
|
||||
#define CBAUD 0000017
|
||||
#define B0 0000000 /* hang up */
|
||||
#define B50 0000001
|
||||
#define B75 0000002
|
||||
#define B110 0000003
|
||||
#define B134 0000004
|
||||
#define B150 0000005
|
||||
#define B200 0000006
|
||||
#define B300 0000007
|
||||
#define B600 0000010
|
||||
#define B1200 0000011
|
||||
#define B1800 0000012
|
||||
#define B2400 0000013
|
||||
#define B4800 0000014
|
||||
#define B9600 0000015
|
||||
#define B19200 0000016
|
||||
#define B38400 0000017
|
||||
#define EXTA B19200
|
||||
#define EXTB B38400
|
||||
#define CSIZE 0000060
|
||||
#define CS5 0000000
|
||||
#define CS6 0000020
|
||||
#define CS7 0000040
|
||||
#define CS8 0000060
|
||||
#define CSTOPB 0000100
|
||||
#define CREAD 0000200
|
||||
#define PARENB 0000400
|
||||
#define PARODD 0001000
|
||||
#define HUPCL 0002000
|
||||
#define CLOCAL 0004000
|
||||
#define CIBAUD 03600000 /* input baud rate (not used) */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
|
||||
/* c_lflag bits */
|
||||
#define ISIG 0000001
|
||||
#define ICANON 0000002
|
||||
#define XCASE 0000004
|
||||
#define ECHO 0000010
|
||||
#define ECHOE 0000020
|
||||
#define ECHOK 0000040
|
||||
#define ECHONL 0000100
|
||||
#define NOFLSH 0000200
|
||||
#define TOSTOP 0000400
|
||||
#define ECHOCTL 0001000
|
||||
#define ECHOPRT 0002000
|
||||
#define ECHOKE 0004000
|
||||
#define FLUSHO 0010000
|
||||
#define PENDIN 0040000
|
||||
#define IEXTEN 0100000
|
||||
|
||||
/* modem lines */
|
||||
#define TIOCM_LE 0x001
|
||||
#define TIOCM_DTR 0x002
|
||||
#define TIOCM_RTS 0x004
|
||||
#define TIOCM_ST 0x008
|
||||
#define TIOCM_SR 0x010
|
||||
#define TIOCM_CTS 0x020
|
||||
#define TIOCM_CAR 0x040
|
||||
#define TIOCM_RNG 0x080
|
||||
#define TIOCM_DSR 0x100
|
||||
#define TIOCM_CD TIOCM_CAR
|
||||
#define TIOCM_RI TIOCM_RNG
|
||||
|
||||
/* tcflow() and TCXONC use these */
|
||||
#define TCOOFF 0
|
||||
#define TCOON 1
|
||||
#define TCIOFF 2
|
||||
#define TCION 3
|
||||
|
||||
/* tcflush() and TCFLSH use these */
|
||||
#define TCIFLUSH 0
|
||||
#define TCOFLUSH 1
|
||||
#define TCIOFLUSH 2
|
||||
|
||||
/* tcsetattr uses these */
|
||||
#define TCSANOW 0
|
||||
#define TCSADRAIN 1
|
||||
#define TCSAFLUSH 2
|
||||
|
||||
extern speed_t cfgetispeed(struct termios *termios_p);
|
||||
extern speed_t cfgetospeed(struct termios *termios_p);
|
||||
extern int cfsetispeed(struct termios *termios_p, speed_t speed);
|
||||
extern int cfsetospeed(struct termios *termios_p, speed_t speed);
|
||||
extern int tcdrain(int fildes);
|
||||
extern int tcflow(int fildes, int action);
|
||||
extern int tcflush(int fildes, int queue_selector);
|
||||
extern int tcgetattr(int fildes, struct termios *termios_p);
|
||||
extern int tcsendbreak(int fildes, int duration);
|
||||
extern int tcsetattr(int fildes, int optional_actions,
|
||||
struct termios *termios_p);
|
||||
|
||||
#endif
|
||||
49
kernel/0.95/linux-0.95/include/time.h
Normal file
49
kernel/0.95/linux-0.95/include/time.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef _TIME_H
|
||||
#define _TIME_H
|
||||
|
||||
#ifndef _TIME_T
|
||||
#define _TIME_T
|
||||
typedef long time_t;
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T
|
||||
#define _SIZE_T
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif
|
||||
|
||||
#define CLOCKS_PER_SEC 100
|
||||
|
||||
typedef long clock_t;
|
||||
|
||||
struct tm {
|
||||
int tm_sec;
|
||||
int tm_min;
|
||||
int tm_hour;
|
||||
int tm_mday;
|
||||
int tm_mon;
|
||||
int tm_year;
|
||||
int tm_wday;
|
||||
int tm_yday;
|
||||
int tm_isdst;
|
||||
};
|
||||
|
||||
#define __isleap(year) \
|
||||
((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
|
||||
|
||||
clock_t clock(void);
|
||||
time_t time(time_t * tp);
|
||||
double difftime(time_t time2, time_t time1);
|
||||
time_t mktime(struct tm * tp);
|
||||
|
||||
char * asctime(const struct tm * tp);
|
||||
char * ctime(const time_t * tp);
|
||||
struct tm * gmtime(const time_t *tp);
|
||||
struct tm *localtime(const time_t * tp);
|
||||
size_t strftime(char * s, size_t smax, const char * fmt, const struct tm * tp);
|
||||
void tzset(void);
|
||||
|
||||
#endif
|
||||
285
kernel/0.95/linux-0.95/include/unistd.h
Normal file
285
kernel/0.95/linux-0.95/include/unistd.h
Normal file
@@ -0,0 +1,285 @@
|
||||
#ifndef _UNISTD_H
|
||||
#define _UNISTD_H
|
||||
|
||||
/* ok, this may be a joke, but I'm working on it */
|
||||
#define _POSIX_VERSION 198808L
|
||||
|
||||
#define _POSIX_CHOWN_RESTRICTED 1 /* only root can do a chown (I think..) */
|
||||
#define _POSIX_NO_TRUNC 1 /* no pathname truncation (but see kernel) */
|
||||
#define _POSIX_VDISABLE '\0' /* character to disable things like ^C */
|
||||
#define _POSIX_JOB_CONTROL 1
|
||||
#define _POSIX_SAVED_IDS 1 /* Implemented, for whatever good it is */
|
||||
|
||||
#define STDIN_FILENO 0
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
|
||||
/* access */
|
||||
#define F_OK 0
|
||||
#define X_OK 1
|
||||
#define W_OK 2
|
||||
#define R_OK 4
|
||||
|
||||
/* lseek */
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
/* _SC stands for System Configuration. We don't use them much */
|
||||
#define _SC_ARG_MAX 1
|
||||
#define _SC_CHILD_MAX 2
|
||||
#define _SC_CLOCKS_PER_SEC 3
|
||||
#define _SC_NGROUPS_MAX 4
|
||||
#define _SC_OPEN_MAX 5
|
||||
#define _SC_JOB_CONTROL 6
|
||||
#define _SC_SAVED_IDS 7
|
||||
#define _SC_VERSION 8
|
||||
|
||||
/* more (possibly) configurable things - now pathnames */
|
||||
#define _PC_LINK_MAX 1
|
||||
#define _PC_MAX_CANON 2
|
||||
#define _PC_MAX_INPUT 3
|
||||
#define _PC_NAME_MAX 4
|
||||
#define _PC_PATH_MAX 5
|
||||
#define _PC_PIPE_BUF 6
|
||||
#define _PC_NO_TRUNC 7
|
||||
#define _PC_VDISABLE 8
|
||||
#define _PC_CHOWN_RESTRICTED 9
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/times.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <sys/resource.h>
|
||||
#include <utime.h>
|
||||
|
||||
#ifdef __LIBRARY__
|
||||
|
||||
#define __NR_setup 0 /* used only by init, to get system going */
|
||||
#define __NR_exit 1
|
||||
#define __NR_fork 2
|
||||
#define __NR_read 3
|
||||
#define __NR_write 4
|
||||
#define __NR_open 5
|
||||
#define __NR_close 6
|
||||
#define __NR_waitpid 7
|
||||
#define __NR_creat 8
|
||||
#define __NR_link 9
|
||||
#define __NR_unlink 10
|
||||
#define __NR_execve 11
|
||||
#define __NR_chdir 12
|
||||
#define __NR_time 13
|
||||
#define __NR_mknod 14
|
||||
#define __NR_chmod 15
|
||||
#define __NR_chown 16
|
||||
#define __NR_break 17
|
||||
#define __NR_stat 18
|
||||
#define __NR_lseek 19
|
||||
#define __NR_getpid 20
|
||||
#define __NR_mount 21
|
||||
#define __NR_umount 22
|
||||
#define __NR_setuid 23
|
||||
#define __NR_getuid 24
|
||||
#define __NR_stime 25
|
||||
#define __NR_ptrace 26
|
||||
#define __NR_alarm 27
|
||||
#define __NR_fstat 28
|
||||
#define __NR_pause 29
|
||||
#define __NR_utime 30
|
||||
#define __NR_stty 31
|
||||
#define __NR_gtty 32
|
||||
#define __NR_access 33
|
||||
#define __NR_nice 34
|
||||
#define __NR_ftime 35
|
||||
#define __NR_sync 36
|
||||
#define __NR_kill 37
|
||||
#define __NR_rename 38
|
||||
#define __NR_mkdir 39
|
||||
#define __NR_rmdir 40
|
||||
#define __NR_dup 41
|
||||
#define __NR_pipe 42
|
||||
#define __NR_times 43
|
||||
#define __NR_prof 44
|
||||
#define __NR_brk 45
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
#define __NR_signal 48
|
||||
#define __NR_geteuid 49
|
||||
#define __NR_getegid 50
|
||||
#define __NR_acct 51
|
||||
#define __NR_phys 52
|
||||
#define __NR_lock 53
|
||||
#define __NR_ioctl 54
|
||||
#define __NR_fcntl 55
|
||||
#define __NR_mpx 56
|
||||
#define __NR_setpgid 57
|
||||
#define __NR_ulimit 58
|
||||
#define __NR_uname 59
|
||||
#define __NR_umask 60
|
||||
#define __NR_chroot 61
|
||||
#define __NR_ustat 62
|
||||
#define __NR_dup2 63
|
||||
#define __NR_getppid 64
|
||||
#define __NR_getpgrp 65
|
||||
#define __NR_setsid 66
|
||||
#define __NR_sigaction 67
|
||||
#define __NR_sgetmask 68
|
||||
#define __NR_ssetmask 69
|
||||
#define __NR_setreuid 70
|
||||
#define __NR_setregid 71
|
||||
#define __NR_sigsuspend 72
|
||||
#define __NR_sigpending 73
|
||||
#define __NR_sethostname 74
|
||||
#define __NR_setrlimit 75
|
||||
#define __NR_getrlimit 76
|
||||
#define __NR_getrusage 77
|
||||
#define __NR_gettimeofday 78
|
||||
#define __NR_settimeofday 79
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_select 82
|
||||
#define __NR_symlink 83
|
||||
#define __NR_lstat 84
|
||||
#define __NR_readlink 85
|
||||
#define __NR_uselib 86
|
||||
#define __NR_swapon 87
|
||||
#define __NR_reboot 88
|
||||
|
||||
#define _syscall0(type,name) \
|
||||
type name(void) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name)); \
|
||||
if (__res >= 0) \
|
||||
return (type) __res; \
|
||||
errno = -__res; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall1(type,name,atype,a) \
|
||||
type name(atype a) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("movl %2,%%ebx\n\t" \
|
||||
"int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(a)):"bx"); \
|
||||
if (__res >= 0) \
|
||||
return (type) __res; \
|
||||
errno = -__res; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall2(type,name,atype,a,btype,b) \
|
||||
type name(atype a,btype b) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("movl %2,%%ebx\n\t" \
|
||||
"int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(a)),"c" ((long)(b)):"bx"); \
|
||||
if (__res >= 0) \
|
||||
return (type) __res; \
|
||||
errno = -__res; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
|
||||
type name(atype a,btype b,ctype c) \
|
||||
{ \
|
||||
long __res; \
|
||||
__asm__ volatile ("movl %2,%%ebx\n\t" \
|
||||
"int $0x80" \
|
||||
: "=a" (__res) \
|
||||
: "0" (__NR_##name),"g" ((long)(a)),"c" ((long)(b)),"d" ((long)(c)):"bx"); \
|
||||
if (__res>=0) \
|
||||
return (type) __res; \
|
||||
errno=-__res; \
|
||||
return -1; \
|
||||
}
|
||||
|
||||
#endif /* __LIBRARY__ */
|
||||
|
||||
extern int errno;
|
||||
|
||||
int access(const char * filename, mode_t mode);
|
||||
int acct(const char * filename);
|
||||
int alarm(int sec);
|
||||
int brk(void * end_data_segment);
|
||||
void * sbrk(ptrdiff_t increment);
|
||||
int chdir(const char * filename);
|
||||
int chmod(const char * filename, mode_t mode);
|
||||
int chown(const char * filename, uid_t owner, gid_t group);
|
||||
int chroot(const char * filename);
|
||||
int close(int fildes);
|
||||
int creat(const char * filename, mode_t mode);
|
||||
int dup(int fildes);
|
||||
int execve(const char * filename, char ** argv, char ** envp);
|
||||
int execv(const char * pathname, char ** argv);
|
||||
int execvp(const char * file, char ** argv);
|
||||
int execl(const char * pathname, char * arg0, ...);
|
||||
int execlp(const char * file, char * arg0, ...);
|
||||
int execle(const char * pathname, char * arg0, ...);
|
||||
volatile void exit(int status);
|
||||
volatile void _exit(int status);
|
||||
int fcntl(int fildes, int cmd, ...);
|
||||
int fork(void);
|
||||
int getpid(void);
|
||||
int getuid(void);
|
||||
int geteuid(void);
|
||||
int getgid(void);
|
||||
int getegid(void);
|
||||
int ioctl(int fildes, int cmd, ...);
|
||||
int kill(pid_t pid, int signal);
|
||||
int link(const char * filename1, const char * filename2);
|
||||
int lseek(int fildes, off_t offset, int origin);
|
||||
int mknod(const char * filename, mode_t mode, dev_t dev);
|
||||
int mount(const char * specialfile, const char * dir, int rwflag);
|
||||
int nice(int val);
|
||||
int open(const char * filename, int flag, ...);
|
||||
int pause(void);
|
||||
int pipe(int * fildes);
|
||||
int read(int fildes, char * buf, off_t count);
|
||||
int setpgrp(void);
|
||||
int setpgid(pid_t pid,pid_t pgid);
|
||||
int setuid(uid_t uid);
|
||||
int setgid(gid_t gid);
|
||||
void (*signal(int sig, void (*fn)(int)))(int);
|
||||
int stat(const char * filename, struct stat * stat_buf);
|
||||
int fstat(int fildes, struct stat * stat_buf);
|
||||
int stime(time_t * tptr);
|
||||
int sync(void);
|
||||
time_t time(time_t * tloc);
|
||||
time_t times(struct tms * tbuf);
|
||||
int ulimit(int cmd, long limit);
|
||||
mode_t umask(mode_t mask);
|
||||
int umount(const char * specialfile);
|
||||
int uname(struct utsname * name);
|
||||
int unlink(const char * filename);
|
||||
int ustat(dev_t dev, struct ustat * ubuf);
|
||||
int utime(const char * filename, struct utimbuf * times);
|
||||
pid_t waitpid(pid_t pid,int * wait_stat,int options);
|
||||
pid_t wait(int * wait_stat);
|
||||
int write(int fildes, const char * buf, off_t count);
|
||||
int dup2(int oldfd, int newfd);
|
||||
int getppid(void);
|
||||
pid_t getpgrp(void);
|
||||
pid_t setsid(void);
|
||||
int sethostname(char *name, int len);
|
||||
int setrlimit(int resource, struct rlimit *rlp);
|
||||
int getrlimit(int resource, struct rlimit *rlp);
|
||||
int getrusage(int who, struct rusage *rusage);
|
||||
int gettimeofday(struct timeval *tv, struct timezone *tz);
|
||||
int settimeofday(struct timeval *tv, struct timezone *tz);
|
||||
int getgroups(int gidsetlen, gid_t *gidset);
|
||||
int setgroups(int gidsetlen, gid_t *gidset);
|
||||
int select(int width, fd_set * readfds, fd_set * writefds,
|
||||
fd_set * exceptfds, struct timeval * timeout);
|
||||
int swapon(const char * specialfile);
|
||||
#endif
|
||||
13
kernel/0.95/linux-0.95/include/utime.h
Normal file
13
kernel/0.95/linux-0.95/include/utime.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef _UTIME_H
|
||||
#define _UTIME_H
|
||||
|
||||
#include <sys/types.h> /* I know - shouldn't do this, but .. */
|
||||
|
||||
struct utimbuf {
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
};
|
||||
|
||||
extern int utime(const char *filename, struct utimbuf *times);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user