Newer
Older
ubixos / sys / include / sys / sysproto.h
/*-
 * Copyright (c) 2002-2018 The UbixOS Project.
 * All rights reserved.
 *
 * This was developed by Christopher W. Olsen for the UbixOS Project.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted
 * provided that the following conditions are met:
 *
 * 1) Redistributions of source code must retain the above copyright notice, this list of
 *    conditions, the following disclaimer and the list of authors.
 * 2) Redistributions in binary form must reproduce the above copyright notice, this list of
 *    conditions, the following disclaimer and the list of authors in the documentation and/or
 *    other materials provided with the distribution.
 * 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to
 *    endorse or promote products derived from this software without specific prior written
 *    permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _SYS_SYSPROTO_H
#define _SYS_SYSPROTO_H

#include <sys/signal.h>
#include <sys/thread.h>

/* TEMP */
#include <vfs/file.h>

typedef int register_t;

#define PAD_(t) (sizeof(register_t) <= sizeof(t) ? 0 : sizeof(register_t) - sizeof(t))

#if BYTE_ORDER == LITTLE_ENDIAN
#define PADL_(t)        0
#define PADR_(t)        PAD_(t)
#else
#define PADL_(t)        PAD_(t)
#define PADR_(t)        0
#endif

//Protos
struct sys_exit_args {
    char status_l_[PADL_(int)];
    int status;
    char status_r_[PADR_(int)];
};

struct sys_fork_args {
    char status_l_[PADL_(int)];
    int status;
    char status_r_[PADR_(int)];
};

struct sys_read_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char buf_l_[PADL_(const void *)];
    const void * buf;
    char buf_r_[PADR_(const void *)];
    char nbyte_l_[PADL_(size_t)];
    size_t nbyte;
    char nbyte_r_[PADR_(size_t)];
};

struct sys_write_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];

    char buf_l_[PADL_(const void *)];
    const void * buf;
    char buf_r_[PADR_(const void *)];

    char nbyte_l_[PADL_(size_t)];
    size_t nbyte;
    char nbyte_r_[PADR_(size_t)];
};

struct sys_open_args {
    char path_l_[PADL_(char *)];
    char *path;
    char path_r_[PADR_(char *)];

    char flags_l_[PADL_(int)];
    int flags;
    char flags_r_[PADR_(int)];

    char mode_l_[PADL_(int)];
    int mode;
    char mode_r_[PADR_(int)];
};

struct sys_close_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
};

struct sys_wait4_args {
    char pid_l_[PADL_(int)];
    int pid;
    char pid_r_[PADR_(int)];

    char status_l_[PADL_(int *)];
    int *status;
    char status_r_[PADR_(int *)];

    char options_l_[PADL_(int)];
    int options;
    char options_r_[PADR_(int)];

    char rusage_l_[PADL_(void *)];
    void *rusage;
    char rusage_r_[PADR_(void *)];
};

struct sys_chdir_args {
    char path_l_[PADL_(char *)];
    char *path;
    char path_r_[PADR_(char *)];
};

struct sys_getcwd_args {
    char buf_l_[PADL_(const void *)];
    void *buf;
    char buf_r_[PADR_(const void *)];

    char size_l_[PADL_(uint32_t)];
    uint32_t size;
    char size_r_[PADR_(uint32_t)];
};

struct sys_setUID_args {
    char uid_l_[PADL_(int)];
    int uid;
    char uid_r_[PADR_(int)];
};

struct sys_setGID_args {
    char gid_l_[PADL_(int)];
    int gid;
    char gid_r_[PADR_(int)];
};

struct sys_execve_args {
    char fname_l_[PADL_(char *)];
    char *fname;
    char fname_r_[PADR_(char *)];
    char argv_l_[PADL_(char **)];
    char **argv;
    char argv_r_[PADR_(char **)];
    char envp_l_[PADL_(char **)];
    char **envp;
    char envp_r_[PADR_(char **)];
};

struct sys_fopen_args {
    char path_l_[PADL_(char *)];
    char * path;
    char path_r_[PADR_(char *)];
    char mode_l_[PADL_(char *)];
    char * mode;
    char mode_r_[PADR_(char *)];
    char FILE_l_[PADL_(userFileDescriptor *)];
    userFileDescriptor *FILE;
    char FILE_r_[PADR_(userFileDescriptor *)];
};

struct sys_fread_args {
    char ptr_l_[PADL_(void *)];
    void *ptr;
    char ptr_r_[PADR_(void *)];
    char size_l_[PADL_(long)];
    long size;
    char size_r_[PADR_(long)];
    char nmemb_l_[PADL_(long)];
    long nmemb;
    char nmemb_r_[PADR_(long)];
    char FILE_l_[PADL_(userFileDescriptor *)];
    userFileDescriptor *FILE;
    char FILE_r_[PADR_(userFileDescriptor *)];
};

struct sys_fclose_args {
    char FILE_l_[PADL_(userFileDescriptor *)];
    userFileDescriptor *FILE;
    char FILE_r_[PADR_(userFileDescriptor *)];
};

struct sys_fgetc_args {
    char FILE_l_[PADL_(userFileDescriptor *)];
    userFileDescriptor *FILE;
    char FILE_r_[PADR_(userFileDescriptor *)];
};

struct sys_fseek_args {
    char FILE_l_[PADL_(userFileDescriptor *)];
    userFileDescriptor *FILE;
    char FILE_r_[PADR_(userFileDescriptor *)];
    char offset_l_[PADL_(long)];
    long offset;
    char offset_r_[PADR_(long)];
    char whence_l_[PADL_(int)];
    int whence;
    char whence_r_[PADR_(int)];
};

struct sys_sysctl_args {
    char name_l_[PADL_(int *)];
    int *name;
    char name_r_[PADR_(int *)];
    char namelen_l_[PADL_(u_int)];
    u_int namelen;
    char namelen_r_[PADR_(u_int)];
    char oldp_l_[PADL_(void *)];
    void *oldp;
    char oldp_r_[PADR_(void *)];
    char oldlenp_l_[PADL_(size_t *)];
    size_t *oldlenp;
    char oldlenp_r_[PADR_(size_t *)];
    char newp_l_[PADL_(void *)];
    void *newp;
    char newp_r_[PADR_(void *)];
    char newlenp_l_[PADL_(size_t)];
    size_t newlenp;
    char newlenp_r_[PADR_(size_t)];

};

/* OLD */

struct setitimer_args {
    char which_l_[PADL_(u_int)];
    u_int which;
    char which_r_[PADR_(u_int)];
    char itv_l_[PADL_(struct itimerval *)];
    struct itimerval * itv;
    char itv_r_[PADR_(struct itimerval *)];
    char oitv_l_[PADL_(struct itimerval *)];
    struct itimerval * oitv;
    char oitv_r_[PADR_(struct itimerval *)];
};

struct access_args {
    char path_l_[PADL_(char *)];
    char * path;
    char path_r_[PADR_(char *)];
    char flags_l_[PADL_(int)];
    int flags;
    char flags_r_[PADR_(int)];
};

struct fstatfs_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char buf_l_[PADL_(struct statfs *)];
    struct statfs * buf;
    char buf_r_[PADR_(struct statfs *)];
};

struct mprotect_args {
    char addr_l_[PADL_(const void *)];
    const void * addr;
    char addr_r_[PADR_(const void *)];
    char len_l_[PADL_(size_t)];
    size_t len;
    char len_r_[PADR_(size_t)];
    char prot_l_[PADL_(int)];
    int prot;
    char prot_r_[PADR_(int)];
};

//Old

struct sysctl_args {
    char name_l_[PADL_(int *)];
    int * name;
    char name_r_[PADR_(int *)];
    char namelen_l_[PADL_(u_int)];
    u_int namelen;
    char namelen_r_[PADR_(u_int)];
    char old_l_[PADL_(void *)];
    void *oldp;
    char old_r_[PADR_(void *)];
    char oldlenp_l_[PADL_(size_t *)];
    size_t * oldlenp;
    char oldlenp_r_[PADR_(size_t *)];
    char new_l_[PADL_(void *)];
    void * newp;
    char new_r_[PADR_(void *)];
    char newlen_l_[PADL_(size_t)];
    size_t newlen;
    char newlen_r_[PADR_(size_t)];
};

struct getpid_args {
    register_t dummy;
};
struct sys_issetugid_args {
    register_t dummy;
};
struct fcntl_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char cmd_l_[PADL_(int)];
    int cmd;
    char cmd_r_[PADR_(int)];
    char arg_l_[PADL_(long)];
    long arg;
    char arg_r_[PADR_(long)];
};

struct pipe_args {
    register_t dummy;
};

struct readlink_args {
    char path_l_[PADL_(char *)];
    char * path;
    char path_r_[PADR_(char *)];
    char buf_l_[PADL_(char *)];
    char * buf;
    char buf_r_[PADR_(char *)];
    char count_l_[PADL_(int)];
    int count;
    char count_r_[PADR_(int)];
};

struct getuid_args {
    register_t dummy;
};

struct getgid_args {
    register_t dummy;
};
struct close_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
};

struct sys_mmap_args {
    char addr_l_[PADL_(caddr_t)];
    caddr_t addr;
    char addr_r_[PADR_(caddr_t)];
    char len_l_[PADL_(size_t)];
    size_t len;
    char len_r_[PADR_(size_t)];
    char prot_l_[PADL_(int)];
    int prot;
    char prot_r_[PADR_(int)];
    char flags_l_[PADL_(int)];
    int flags;
    char flags_r_[PADR_(int)];
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char pad_l_[PADL_(int)];
    int pad;
    char pad_r_[PADR_(int)];
    char pos_l_[PADL_(off_t)];
    off_t pos;
    char pos_r_[PADR_(off_t)];
};

struct sys_lstat_args {
    char path_l_[PADL_(char *)];
    char *path;
    char path_r_[PADR_(char *)];
    char sb_l_[PADL_(struct stat *)];
    struct stat *sb;
    char sb_r_[PADR_(struct stat *)];
};

struct obreak_args {
    char nsize_l_[PADL_(char *)];
    char * nsize;
    char nsize_r_[PADR_(char *)];
};

struct sigaction_args {
    char sig_l_[PADL_(int)];
    int sig;
    char sig_r_[PADR_(int)];
    char act_l_[PADL_(const struct sigaction *)];
    const struct sigaction * act;
    char act_r_[PADR_(const struct sigaction *)];
    char oact_l_[PADL_(struct sigaction *)];
    struct sigaction * oact;
    char oact_r_[PADR_(struct sigaction *)];
};

struct getdtablesize_args {
    register_t dummy;
};

struct munmap_args {
    char addr_l_[PADL_(void *)];
    void * addr;
    char addr_r_[PADR_(void *)];
    char len_l_[PADL_(size_t)];
    size_t len;
    char len_r_[PADR_(size_t)];
};

struct sigprocmask_args {
    char how_l_[PADL_(int)];
    int how;
    char how_r_[PADR_(int)];
    char set_l_[PADL_(const sigset_t *)];
    const sigset_t * set;
    char set_r_[PADR_(const sigset_t *)];
    char oset_l_[PADL_(sigset_t *)];
    sigset_t * oset;
    char oset_r_[PADR_(sigset_t *)];
};
struct gettimeofday_args {
    char tp_l_[PADL_(struct timeval *)];
    struct timeval * tp;
    char tp_r_[PADR_(struct timeval *)];
    char tzp_l_[PADL_(struct timezone *)];
    struct timezone * tzp;
    char tzp_r_[PADR_(struct timezone *)];
};
struct fstat_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char sb_l_[PADL_(struct stat *)];
    struct stat * sb;
    char sb_r_[PADR_(struct stat *)];
};
struct ioctl_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char com_l_[PADL_(u_long)];
    u_long com;
    char com_r_[PADR_(u_long)];
    char data_l_[PADL_(caddr_t)];
    caddr_t data;
    char data_r_[PADR_(caddr_t)];
};

struct read_args {
    char fd_l_[PADL_(int)];
    int fd;
    char fd_r_[PADR_(int)];
    char buf_l_[PADL_(void *)];
    void * buf;
    char buf_r_[PADR_(void *)];
    char nbyte_l_[PADL_(size_t)];
    size_t nbyte;
    char nbyte_r_[PADR_(size_t)];
};

//Func Defs
int sys_invalid(struct thread *, void *);
int sys_exit(struct thread *, struct sys_exit_args *);
int sys_fork(struct thread *, struct sys_fork_args *);
int sys_read(struct thread *, struct sys_read_args *);
int sys_write(struct thread *td, struct sys_write_args *);
int sys_open(struct thread *td, struct sys_open_args *);
int sys_close(struct thread *td, struct sys_close_args *);
int sys_wait4(struct thread *td, struct sys_wait4_args *);
int sys_chdir(struct thread *td, struct sys_chdir_args *);

int sys_setUID(struct thread *td, struct sys_setUID_args *);
int sys_getUID(struct thread *td, void *);
int sys_setGID(struct thread *td, struct sys_setGID_args *);
int sys_getGID(struct thread *td, void *);

int sys_execve(struct thread *td, struct sys_execve_args *);

int sys_fopen(struct thread *td, struct sys_fopen_args *);
int sys_fread(struct thread *td, struct sys_fread_args *);
int sys_fclose(struct thread *td, struct sys_fclose_args *);
int sys_fgetc(struct thread *td, struct sys_fgetc_args *);
int sys_fseek(struct thread *td, struct sys_fseek_args *);

int sys_sched_yield(struct thread *td, void *);

int sys_getcwd(struct thread *td, struct sys_getcwd_args *);

int sys_mmap(struct thread *td, struct sys_mmap_args *);
int sys_sysctl(struct thread *td, struct sys_sysctl_args *);

int sys_issetugid(struct thread *td, struct sys_issetugid_args *);

int setitimer(struct thread *td, struct setitimer_args *uap);
int access(struct thread *td, struct access_args *uap);
int fstatfs(struct thread *td, struct fstatfs_args *uap);
int mprotect(struct thread *td, struct mprotect_args *uap);

int sys_lstat(struct thread *td, struct sys_lstat_args *);

#endif

/***
 END
 ***/