X-Git-Url: http://akaros.cs.berkeley.edu/gitweb/?p=akaros.git;a=blobdiff_plain;f=kern%2Finclude%2Fns.h;h=3973cb75de6f6d9c9b0634a08895c5252a3e327e;hp=dc5edbe7941c0026d1c9ae63452ab5ee7e8c3345;hb=aaaa2bd697d85b960e1fb46091e046b4c38faa7c;hpb=5025b06858b52dcd0a536e76f7da6e6e74c59589 diff --git a/kern/include/ns.h b/kern/include/ns.h index dc5edbe..3973cb7 100644 --- a/kern/include/ns.h +++ b/kern/include/ns.h @@ -27,8 +27,7 @@ * SOFTWARE. */ -#ifndef ROS_KERN_NS_H -#define ROS_KERN_NS_H +#pragma once #include #include @@ -71,9 +70,6 @@ static inline uint32_t getcallerpc(void *v) return 0; } -extern char etext[]; -extern char edata[]; -extern char end[]; extern int getfields(char *unused_char_p_t, char **unused_char_pp_t, int unused_int, int, char *); extern int tokenize(char *unused_char_p_t, char **unused_char_pp_t, int); @@ -360,7 +356,6 @@ enum { #define NS_SHIFT_MAX 6 enum { - BINTR = (1 << 0), BFREE = (1 << 1), Bipck = (1 << NS_IPCK_SHIFT), /* ip checksum */ Budpck = (1 << NS_UDPCK_SHIFT), /* udp checksum */ @@ -466,6 +461,7 @@ struct dev { // int (*config)( int unused_int, char *unused_char_p_t, DevConf*); char *(*chaninfo) (struct chan *, char *, size_t); int (*tapfd) (struct chan *, struct fd_tap *, int); + int (*chan_ctl)(struct chan *, int); /* we need to be aligned, we think to 64 bytes, for the linker tables. */ } __attribute__ ((aligned(64))); @@ -652,7 +648,7 @@ struct cname *addelem(struct cname *, char *unused_char_p_t); void addprog(struct proc *); void addrootfile(char *unused_char_p_t, uint8_t * unused_uint8_p_t, uint32_t); struct block *adjustblock(struct block *, int); -struct block *allocb(int); +struct block *block_alloc(size_t, int); int block_add_extd(struct block *b, unsigned int nr_bufs, int mem_flags); int block_append_extra(struct block *b, int len, int mem_flags); int anyhigher(void); @@ -751,8 +747,6 @@ void freeskey(struct signerkey *); void getcolor(uint32_t, uint32_t *, uint32_t *, uint32_t *); uint32_t getmalloctag(void *); uint32_t getrealloctag(void *); -struct block *iallocb(int); -void iallocsummary(void); void printblock(struct block *b); void ilock(spinlock_t *); int iprint(char *unused_char_p_t, ...); @@ -768,7 +762,6 @@ void kproc(char *unused_char_p_t, void (*)(void *), void *, int); void kprocchild(struct proc *, void (*)(void *), void *); void (*kproftick) (uint32_t); void ksetenv(char *unused_char_p_t, char *, int); -//void kstrncpy( char *unused_char_p_t, char*, int unused_int, sizeof(char*, char*)); void kstrdup(char **unused_char_pp_t, char *unused_char_p_t); struct block *mem2bl(uint8_t * unused_uint8_p_t, int); @@ -797,7 +790,8 @@ char *nextelem(char *unused_char_p_t, char *); struct cname *newcname(char *unused_char_p_t); void notkilled(void); -int nrand(int); +uint32_t random_read(void *xp, uint32_t n); +uint32_t urandom_read(void *xp, uint32_t n); uint64_t ns2fastticks(uint64_t); int okaddr(uint32_t, uint32_t, int); int omode_to_rwx(int); @@ -816,12 +810,11 @@ void putmhead(struct mhead *); void putstrn(char *unused_char_p_t, int); void qaddlist(struct queue *, struct block *); struct block *qbread(struct queue *, int); -long qbwrite(struct queue *, struct block *); -long qibwrite(struct queue *q, struct block *b); +ssize_t qbwrite(struct queue *, struct block *); +ssize_t qibwrite(struct queue *q, struct block *b); struct queue *qbypass(void (*)(void *, struct block *), void *); int qcanread(struct queue *); void qclose(struct queue *); -int qconsume(struct queue *, void *, int); struct block *qcopy(struct queue *, int unused_int, uint32_t); struct block *qclone(struct queue *q, int header_len, int len, uint32_t offset); @@ -834,26 +827,22 @@ int qfull(struct queue *); struct block *qget(struct queue *); void qhangup(struct queue *, char *unused_char_p_t); int qisclosed(struct queue *); -int qiwrite(struct queue *, void *, int); +ssize_t qiwrite(struct queue *, void *, int); int qlen(struct queue *); void qdropoverflow(struct queue *, bool); void qnonblock(struct queue *, bool); struct queue *qopen(int unused_int, int, void (*)(void *), void *); -int qpass(struct queue *, struct block *); -int qpassnolim(struct queue *, struct block *); -int qproduce(struct queue *, void *, int); +ssize_t qpass(struct queue *, struct block *); +ssize_t qpassnolim(struct queue *, struct block *); void qputback(struct queue *, struct block *); long qread(struct queue *, void *, int); -struct block *qremove(struct queue *); void qreopen(struct queue *); void qsetlimit(struct queue *, int); int qwindow(struct queue *); -int qwrite(struct queue *, void *, int); +ssize_t qwrite(struct queue *, void *, int); typedef void (*qio_wake_cb_t)(struct queue *q, void *data, int filter); void qio_set_wake_cb(struct queue *q, qio_wake_cb_t func, void *data); -void randominit(void); -uint32_t randomread(void *, uint32_t); void *realloc(void *, uint32_t); int readmem(unsigned long offset, char *buf, unsigned long n, void *mem, size_t mem_len); @@ -917,49 +906,6 @@ int64_t nhgetv(void *); uint32_t nhgetl(void *); uint16_t nhgets(void *); -/* error messages, from inferno emu error.h */ -extern char Emount[]; /* inconsistent mount */ -extern char Eunmount[]; /* not mounted */ -extern char Eunion[]; /* not in union */ -extern char Emountrpc[]; /* mount rpc error */ -extern char Enocreate[]; /* mounted directory forbids creation */ -extern char Enonexist[]; /* file does not exist */ -extern char Eexist[]; /* file already exists */ -extern char Enotdir[]; /* not a directory */ -extern char Eisdir[]; /* file is a directory */ -extern char Ebadchar[]; /* bad character in file name */ -extern char Efilename[]; /* file name syntax */ -extern char Eperm[]; /* permission denied */ -extern char Ebadusefd[]; /* inappropriate use of fd */ -extern char Ebadarg[]; /* bad arg in system call */ -extern char Einuse[]; /* device or object already in use */ -extern char Eio[]; /* i/o error */ -extern char Etoobig[]; /* read or write too large */ -extern char Etoosmall[]; /* read or write too small */ -extern char Enoifc[]; /* bad interface or no free interface slots */ -extern char Ehungup[]; /* i/o on hungup channel */ -extern char Ebadctl[]; /* bad process or channel control request */ -extern char Enodev[]; /* no free devices */ -extern char Enochild[]; /* no living children */ -extern char Enovmem[]; /* out of memory: virtual memory */ -extern char Eisstream[]; /* seek on a stream */ -extern char Etimedout[]; /* connection timed out */ -extern char Econrefused[]; /* connection refused */ -extern char Econinuse[]; /* connection in use */ -extern char Eintr[]; /* interrupted */ -extern char Enomem[]; /* out of memory: kernel */ -extern char Eshort[]; /* i/o count too small */ -extern char Enobitstore[]; /* out of screen memory */ -extern char Egreg[]; /* jim'll fix it */ -extern char Ebadspec[]; /* bad attach specifier */ -extern char Enoattach[]; /* mount/attach disallowed */ -extern char Eshortstat[]; /* stat buffer too small */ -extern char Enegoff[]; /* negative i/o offset */ -extern char Ebadstat[]; /* malformed stat buffer */ -extern char Ecmdargs[]; /* wrong #args in control message */ -extern char Enofd[]; /* no free file descriptors */ -extern char Eprocdied[]; /* process died */ - char *get_cur_genbuf(void); /* hack for now. */ @@ -1049,4 +995,9 @@ extern unsigned int qiomaxatomic; /* special sections */ #define __devtab __attribute__((__section__(".devtab"))) -#endif /* ROS_KERN_NS_H */ +#define DEVVARS_ENTRY(name, fmt) \ +struct dirtab __attribute__((__section__("devvars"))) __devvars_##name = \ + {#name "!" fmt, \ + {(uint64_t)&(name), 0, QTFILE}, \ + sizeof((name)), \ + 0444}