qio: Remove qconsume()
[akaros.git] / kern / include / ns.h
index dc5edbe..3973cb7 100644 (file)
@@ -27,8 +27,7 @@
  * SOFTWARE. */
 
 
-#ifndef ROS_KERN_NS_H
-#define ROS_KERN_NS_H
+#pragma once
 
 #include <err.h>
 #include <rendez.h>
@@ -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}