2005-04-21 16:53:53 +02:00
|
|
|
/* Function prototypes. */
|
|
|
|
|
2005-06-17 15:41:12 +02:00
|
|
|
#include "timers.h"
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* Structs used in prototypes must be declared as such first. */
|
|
|
|
struct buf;
|
|
|
|
struct filp;
|
|
|
|
struct inode;
|
|
|
|
struct super_block;
|
|
|
|
|
2006-10-25 15:40:36 +02:00
|
|
|
|
|
|
|
int fs_open(void);
|
|
|
|
int fs_putnode(void);
|
|
|
|
int fs_getnode(void);
|
|
|
|
int fs_pipe(void);
|
|
|
|
int fs_readwrite(void);
|
|
|
|
int fs_clone_opcl(void);
|
|
|
|
int fs_new_driver(void);
|
|
|
|
int fs_ftrunc(void);
|
|
|
|
int fs_chown(void);
|
|
|
|
int fs_chmod(void);
|
|
|
|
int fs_access(void);
|
|
|
|
int fs_mknod(void);
|
|
|
|
int fs_mkdir(void);
|
|
|
|
int fs_inhibread(void);
|
|
|
|
int fs_stat(void);
|
2007-01-05 17:36:55 +01:00
|
|
|
int fs_create(void);
|
2006-10-25 15:40:36 +02:00
|
|
|
int fs_unlink(void);
|
|
|
|
int fs_utime(void);
|
|
|
|
int fs_fstatfs(void);
|
|
|
|
int fs_link(void);
|
|
|
|
int fs_lookup_rn_old(void);
|
|
|
|
int fs_lookup_rn_new(void);
|
|
|
|
int fs_rename(void);
|
|
|
|
|
|
|
|
int fs_mountpoint(void);
|
|
|
|
int fs_readsuper(void);
|
|
|
|
int fs_unmount(void);
|
|
|
|
int fs_trunc(void);
|
|
|
|
int fs_sync(void);
|
|
|
|
int fs_stime(void);
|
|
|
|
int lookup(void);
|
|
|
|
|
|
|
|
int fs_slink(void);
|
|
|
|
int fs_rdlink(void);
|
|
|
|
int fs_breadwrite(void);
|
2006-11-09 17:22:54 +01:00
|
|
|
int fs_getdents(void);
|
2006-11-27 15:21:43 +01:00
|
|
|
int fs_flush(void);
|
2006-10-25 15:40:36 +02:00
|
|
|
|
|
|
|
void init_inode_cache(void);
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* cache.c */
|
|
|
|
_PROTOTYPE( zone_t alloc_zone, (Dev_t dev, zone_t z) );
|
|
|
|
_PROTOTYPE( void flushall, (Dev_t dev) );
|
|
|
|
_PROTOTYPE( void free_zone, (Dev_t dev, zone_t numb) );
|
|
|
|
_PROTOTYPE( struct buf *get_block, (Dev_t dev, block_t block,int only_search));
|
|
|
|
_PROTOTYPE( void invalidate, (Dev_t device) );
|
|
|
|
_PROTOTYPE( void put_block, (struct buf *bp, int block_type) );
|
|
|
|
_PROTOTYPE( void rw_scattered, (Dev_t dev,
|
|
|
|
struct buf **bufq, int bufqsize, int rw_flag) );
|
|
|
|
|
|
|
|
#if ENABLE_CACHE2
|
|
|
|
/* cache2.c */
|
|
|
|
_PROTOTYPE( void init_cache2, (unsigned long size) );
|
|
|
|
_PROTOTYPE( int get_block2, (struct buf *bp, int only_search) );
|
|
|
|
_PROTOTYPE( void put_block2, (struct buf *bp) );
|
|
|
|
_PROTOTYPE( void invalidate2, (Dev_t device) );
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* device.c */
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( int block_dev_io, (int op, Dev_t dev, int proc, void *buf,
|
2006-11-27 15:21:43 +01:00
|
|
|
u64_t pos, int bytes, int flags) );
|
2006-10-25 15:40:36 +02:00
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* inode.c */
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( struct inode *find_inode, (Dev_t dev, int numb) );
|
|
|
|
|
2005-06-23 13:07:31 +02:00
|
|
|
_PROTOTYPE( struct inode *alloc_inode, (dev_t dev, mode_t bits) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( void dup_inode, (struct inode *ip) );
|
|
|
|
_PROTOTYPE( void free_inode, (Dev_t dev, Ino_t numb) );
|
|
|
|
_PROTOTYPE( struct inode *get_inode, (Dev_t dev, int numb) );
|
|
|
|
_PROTOTYPE( void put_inode, (struct inode *rip) );
|
|
|
|
_PROTOTYPE( void update_times, (struct inode *rip) );
|
|
|
|
_PROTOTYPE( void rw_inode, (struct inode *rip, int rw_flag) );
|
|
|
|
_PROTOTYPE( void wipe_inode, (struct inode *rip) );
|
|
|
|
|
|
|
|
/* link.c */
|
2006-01-11 18:14:51 +01:00
|
|
|
_PROTOTYPE( int truncate_inode, (struct inode *rip, off_t len) );
|
|
|
|
_PROTOTYPE( int freesp_inode, (struct inode *rip, off_t st, off_t end) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* lock.c */
|
|
|
|
_PROTOTYPE( int lock_op, (struct filp *f, int req) );
|
|
|
|
_PROTOTYPE( void lock_revive, (void) );
|
|
|
|
|
|
|
|
/* main.c */
|
2005-08-25 14:30:43 +02:00
|
|
|
_PROTOTYPE( int main, (void) );
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( void reply, (int who, message *m_out) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* misc.c */
|
|
|
|
_PROTOTYPE( int do_dup, (void) );
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( int do_exit, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int do_fcntl, (void) );
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( int do_fork, (void) );
|
|
|
|
_PROTOTYPE( int do_exec, (void) );
|
|
|
|
_PROTOTYPE( int do_revive, (void) );
|
|
|
|
_PROTOTYPE( int do_set, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int do_sync, (void) );
|
2005-09-11 18:45:46 +02:00
|
|
|
_PROTOTYPE( int do_fsync, (void) );
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( int do_reboot, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int do_svrctl, (void) );
|
|
|
|
_PROTOTYPE( int do_getsysinfo, (void) );
|
|
|
|
|
|
|
|
/* mount.c */
|
|
|
|
_PROTOTYPE( int do_mount, (void) );
|
|
|
|
_PROTOTYPE( int do_umount, (void) );
|
|
|
|
_PROTOTYPE( int unmount, (Dev_t dev) );
|
|
|
|
|
|
|
|
/* open.c */
|
|
|
|
_PROTOTYPE( int do_close, (void) );
|
|
|
|
_PROTOTYPE( int do_creat, (void) );
|
|
|
|
_PROTOTYPE( int do_lseek, (void) );
|
|
|
|
_PROTOTYPE( int do_mknod, (void) );
|
|
|
|
_PROTOTYPE( int do_mkdir, (void) );
|
|
|
|
_PROTOTYPE( int do_open, (void) );
|
2006-10-25 15:40:36 +02:00
|
|
|
_PROTOTYPE( int do_slink, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* path.c */
|
2005-12-20 15:23:44 +01:00
|
|
|
_PROTOTYPE( struct inode *advance,(struct inode **dirp, char string[NAME_MAX]));
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int search_dir, (struct inode *ldir_ptr,
|
|
|
|
char string [NAME_MAX], ino_t *numb, int flag) );
|
|
|
|
_PROTOTYPE( struct inode *eat_path, (char *path) );
|
|
|
|
_PROTOTYPE( struct inode *last_dir, (char *path, char string [NAME_MAX]));
|
2005-12-20 15:23:44 +01:00
|
|
|
_PROTOTYPE( struct inode *parse_path, (char *path, char string[NAME_MAX],
|
|
|
|
int action) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* protect.c */
|
|
|
|
_PROTOTYPE( int do_access, (void) );
|
|
|
|
_PROTOTYPE( int do_chmod, (void) );
|
|
|
|
_PROTOTYPE( int do_chown, (void) );
|
|
|
|
_PROTOTYPE( int do_umask, (void) );
|
2005-06-23 13:07:31 +02:00
|
|
|
_PROTOTYPE( int forbidden, (struct inode *rip, mode_t access_desired) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int read_only, (struct inode *ip) );
|
|
|
|
|
|
|
|
/* read.c */
|
|
|
|
_PROTOTYPE( int do_read, (void) );
|
|
|
|
_PROTOTYPE( struct buf *rahead, (struct inode *rip, block_t baseblock,
|
2006-11-27 15:21:43 +01:00
|
|
|
u64_t position, unsigned bytes_ahead) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( void read_ahead, (void) );
|
2006-01-11 18:14:51 +01:00
|
|
|
_PROTOTYPE( block_t read_map, (struct inode *rip, off_t pos) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int read_write, (int rw_flag) );
|
|
|
|
_PROTOTYPE( zone_t rd_indir, (struct buf *bp, int index) );
|
|
|
|
|
|
|
|
/* stadir.c */
|
|
|
|
_PROTOTYPE( int do_chdir, (void) );
|
2005-06-29 21:28:26 +02:00
|
|
|
_PROTOTYPE( int do_fchdir, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int do_chroot, (void) );
|
|
|
|
_PROTOTYPE( int do_fstat, (void) );
|
|
|
|
_PROTOTYPE( int do_stat, (void) );
|
|
|
|
_PROTOTYPE( int do_fstatfs, (void) );
|
2005-12-20 15:23:44 +01:00
|
|
|
_PROTOTYPE( int do_rdlink, (void) );
|
|
|
|
_PROTOTYPE( int do_lstat, (void) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* super.c */
|
|
|
|
_PROTOTYPE( bit_t alloc_bit, (struct super_block *sp, int map, bit_t origin));
|
|
|
|
_PROTOTYPE( void free_bit, (struct super_block *sp, int map,
|
|
|
|
bit_t bit_returned) );
|
|
|
|
_PROTOTYPE( struct super_block *get_super, (Dev_t dev) );
|
|
|
|
_PROTOTYPE( int mounted, (struct inode *rip) );
|
|
|
|
_PROTOTYPE( int read_super, (struct super_block *sp) );
|
|
|
|
_PROTOTYPE( int get_block_size, (dev_t dev) );
|
|
|
|
|
|
|
|
/* time.c */
|
|
|
|
_PROTOTYPE( int do_stime, (void) );
|
|
|
|
_PROTOTYPE( int do_utime, (void) );
|
2005-05-31 11:50:51 +02:00
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* utility.c */
|
|
|
|
_PROTOTYPE( time_t clock_time, (void) );
|
|
|
|
_PROTOTYPE( unsigned conv2, (int norm, int w) );
|
|
|
|
_PROTOTYPE( long conv4, (int norm, long x) );
|
|
|
|
_PROTOTYPE( int fetch_name, (char *path, int len, int flag) );
|
|
|
|
_PROTOTYPE( int no_sys, (void) );
|
endpoint-aware conversion of servers.
'who', indicating caller number in pm and fs and some other servers, has
been removed in favour of 'who_e' (endpoint) and 'who_p' (proc nr.).
In both PM and FS, isokendpt() convert endpoints to process slot
numbers, returning OK if it was a valid and consistent endpoint number.
okendpt() does the same but panic()s if it doesn't succeed. (In PM,
this is pm_isok..)
pm and fs keep their own records of process endpoints in their proc tables,
which are needed to make kernel calls about those processes.
message field names have changed.
fs drivers are endpoints.
fs now doesn't try to get out of driver deadlock, as the protocol isn't
supposed to let that happen any more. (A warning is printed if ELOCKED
is detected though.)
fproc[].fp_task (indicating which driver the process is suspended on)
became an int.
PM and FS now get endpoint numbers of initial boot processes from the
kernel. These happen to be the same as the old proc numbers, to let
user processes reach them with the old numbers, but FS and PM don't know
that. All new processes after INIT, even after the generation number
wraps around, get endpoint numbers with generation 1 and higher, so
the first instances of the boot processes are the only processes ever
to have endpoint numbers in the old proc number range.
More return code checks of sys_* functions have been added.
IS has become endpoint-aware. Ditched the 'text' and 'data' fields
in the kernel dump (which show locations, not sizes, so aren't terribly
useful) in favour of the endpoint number. Proc number is still visible.
Some other dumps (e.g. dmap, rs) show endpoint numbers now too which got
the formatting changed.
PM reading segments using rw_seg() has changed - it uses other fields
in the message now instead of encoding the segment and process number and
fd in the fd field. For that it uses _read_pm() and _write_pm() which to
_taskcall()s directly in pm/misc.c.
PM now sys_exit()s itself on panic(), instead of sys_abort().
RS also talks in endpoints instead of process numbers.
2006-03-03 11:20:58 +01:00
|
|
|
_PROTOTYPE( int isokendpt_f, (char *f, int l, int e, int *p, int ft));
|
2005-06-01 16:31:00 +02:00
|
|
|
_PROTOTYPE( void panic, (char *who, char *mess, int num) );
|
2005-04-21 16:53:53 +02:00
|
|
|
|
endpoint-aware conversion of servers.
'who', indicating caller number in pm and fs and some other servers, has
been removed in favour of 'who_e' (endpoint) and 'who_p' (proc nr.).
In both PM and FS, isokendpt() convert endpoints to process slot
numbers, returning OK if it was a valid and consistent endpoint number.
okendpt() does the same but panic()s if it doesn't succeed. (In PM,
this is pm_isok..)
pm and fs keep their own records of process endpoints in their proc tables,
which are needed to make kernel calls about those processes.
message field names have changed.
fs drivers are endpoints.
fs now doesn't try to get out of driver deadlock, as the protocol isn't
supposed to let that happen any more. (A warning is printed if ELOCKED
is detected though.)
fproc[].fp_task (indicating which driver the process is suspended on)
became an int.
PM and FS now get endpoint numbers of initial boot processes from the
kernel. These happen to be the same as the old proc numbers, to let
user processes reach them with the old numbers, but FS and PM don't know
that. All new processes after INIT, even after the generation number
wraps around, get endpoint numbers with generation 1 and higher, so
the first instances of the boot processes are the only processes ever
to have endpoint numbers in the old proc number range.
More return code checks of sys_* functions have been added.
IS has become endpoint-aware. Ditched the 'text' and 'data' fields
in the kernel dump (which show locations, not sizes, so aren't terribly
useful) in favour of the endpoint number. Proc number is still visible.
Some other dumps (e.g. dmap, rs) show endpoint numbers now too which got
the formatting changed.
PM reading segments using rw_seg() has changed - it uses other fields
in the message now instead of encoding the segment and process number and
fd in the fd field. For that it uses _read_pm() and _write_pm() which to
_taskcall()s directly in pm/misc.c.
PM now sys_exit()s itself on panic(), instead of sys_abort().
RS also talks in endpoints instead of process numbers.
2006-03-03 11:20:58 +01:00
|
|
|
#define okendpt(e, p) isokendpt_f(__FILE__, __LINE__, (e), (p), 1)
|
|
|
|
#define isokendpt(e, p) isokendpt_f(__FILE__, __LINE__, (e), (p), 0)
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* write.c */
|
|
|
|
_PROTOTYPE( void clear_zone, (struct inode *rip, off_t pos, int flag) );
|
|
|
|
_PROTOTYPE( int do_write, (void) );
|
|
|
|
_PROTOTYPE( struct buf *new_block, (struct inode *rip, off_t position) );
|
|
|
|
_PROTOTYPE( void zero_block, (struct buf *bp) );
|
2006-01-11 18:14:51 +01:00
|
|
|
_PROTOTYPE( int write_map, (struct inode *, off_t, zone_t, int) );
|
2005-06-06 13:40:32 +02:00
|
|
|
|
|
|
|
/* select.c */
|
|
|
|
_PROTOTYPE( int do_select, (void) );
|
2005-06-17 15:41:12 +02:00
|
|
|
_PROTOTYPE( int select_callback, (struct filp *, int ops) );
|
|
|
|
_PROTOTYPE( void select_forget, (int fproc) );
|
|
|
|
_PROTOTYPE( void select_timeout_check, (timer_t *) );
|
2005-07-22 20:28:32 +02:00
|
|
|
_PROTOTYPE( void init_select, (void) );
|
endpoint-aware conversion of servers.
'who', indicating caller number in pm and fs and some other servers, has
been removed in favour of 'who_e' (endpoint) and 'who_p' (proc nr.).
In both PM and FS, isokendpt() convert endpoints to process slot
numbers, returning OK if it was a valid and consistent endpoint number.
okendpt() does the same but panic()s if it doesn't succeed. (In PM,
this is pm_isok..)
pm and fs keep their own records of process endpoints in their proc tables,
which are needed to make kernel calls about those processes.
message field names have changed.
fs drivers are endpoints.
fs now doesn't try to get out of driver deadlock, as the protocol isn't
supposed to let that happen any more. (A warning is printed if ELOCKED
is detected though.)
fproc[].fp_task (indicating which driver the process is suspended on)
became an int.
PM and FS now get endpoint numbers of initial boot processes from the
kernel. These happen to be the same as the old proc numbers, to let
user processes reach them with the old numbers, but FS and PM don't know
that. All new processes after INIT, even after the generation number
wraps around, get endpoint numbers with generation 1 and higher, so
the first instances of the boot processes are the only processes ever
to have endpoint numbers in the old proc number range.
More return code checks of sys_* functions have been added.
IS has become endpoint-aware. Ditched the 'text' and 'data' fields
in the kernel dump (which show locations, not sizes, so aren't terribly
useful) in favour of the endpoint number. Proc number is still visible.
Some other dumps (e.g. dmap, rs) show endpoint numbers now too which got
the formatting changed.
PM reading segments using rw_seg() has changed - it uses other fields
in the message now instead of encoding the segment and process number and
fd in the fd field. For that it uses _read_pm() and _write_pm() which to
_taskcall()s directly in pm/misc.c.
PM now sys_exit()s itself on panic(), instead of sys_abort().
RS also talks in endpoints instead of process numbers.
2006-03-03 11:20:58 +01:00
|
|
|
_PROTOTYPE( void select_unsuspend_by_endpt, (int proc) );
|
2005-09-11 18:45:46 +02:00
|
|
|
_PROTOTYPE( int select_notified, (int major, int minor, int ops) );
|
2005-06-17 15:41:12 +02:00
|
|
|
|
|
|
|
/* timers.c */
|
|
|
|
_PROTOTYPE( void fs_set_timer, (timer_t *tp, int delta, tmr_func_t watchdog, int arg));
|
2005-08-02 17:29:17 +02:00
|
|
|
_PROTOTYPE( void fs_expire_timers, (clock_t now) );
|
|
|
|
_PROTOTYPE( void fs_cancel_timer, (timer_t *tp) );
|
|
|
|
_PROTOTYPE( void fs_init_timer, (timer_t *tp) );
|
2006-10-25 15:40:36 +02:00
|
|
|
|
|
|
|
/* cdprobe.c */
|
|
|
|
_PROTOTYPE( int cdprobe, (void) );
|