oprofile: sampling works
[akaros.git] / kern / include / ns.h
index 9805d0f..1f87548 100644 (file)
@@ -87,13 +87,14 @@ extern int parseether(uint8_t * unused_uint8_p_t, char *unused_char_p_t);
 #define QTEXCL         0x20    /* type bit for exclusive use files */
 #define QTMOUNT                0x10    /* type bit for mounted channel */
 #define QTAUTH         0x08    /* type bit for authentication file */
-#define QTFILE         0x00    /* plain file */
+#define QTFILE         0x01    /* plain file */
 
 /* bits in Dir.mode */
 #define DMDIR          0x80000000      /* mode bit for directories */
 #define DMAPPEND       0x40000000      /* mode bit for append only files */
 #define DMEXCL         0x20000000      /* mode bit for exclusive use files */
 #define DMMOUNT                0x10000000      /* mode bit for mounted channel */
+#define DMSYMLINK      0x02000000      /* symlink -- from 9p2000.u */
 #define DMREAD         0x4     /* mode bit for read permission */
 #define DMWRITE                0x2     /* mode bit for write permission */
 #define DMEXEC         0x1     /* mode bit for execute permission */
@@ -120,6 +121,9 @@ struct dir {
        char *muid;                                     /* last modifier name */
 };
 
+/* Part of the dirty kdirent hack in sysread.  Used to be 59... */
+#define MIN_M_BUF_SZ 52                        /* TODO: 53 is the smallest i've seen */
+
 struct waitmsg {
        int pid;                                        /* of loved one */
        uint32_t time[3];                       /* of loved one and descendants */
@@ -393,7 +397,7 @@ struct dev {
 //  int (*config)( int unused_int, char *unused_char_p_t, DevConf*);
        char *(*chaninfo) (struct chan *, char *, size_t);
        /* we need to be aligned, i think to 32 bytes, for the linker tables. */
-} __attribute__ ((aligned(32)));;
+} __attribute__ ((aligned(32)));
 
 struct dirtab {
        char name[KNAMELEN];
@@ -596,6 +600,7 @@ struct block *bl2mem(uint8_t * unused_uint8_p_t, struct block *, int);
 int blocklen(struct block *);
 char *channame(struct chan *);
 void cclose(struct chan *);
+void chan_incref(struct chan *);
 void chandevinit(void);
 void chandevreset(void);
 void chandevshutdown(void);
@@ -663,7 +668,7 @@ int domount(struct chan **, struct mhead **);
 void drawactive(int);
 void drawcmap(void);
 void dumpstack(void);
-struct fgrp *dupfgrp(struct fgrp *);
+struct fgrp *dupfgrp(struct proc *, struct fgrp *);
 void egrpcpy(struct egrp *, struct egrp *);
 int emptystr(char *unused_char_p_t);
 int eqchan(struct chan *, struct chan *, int);
@@ -756,6 +761,7 @@ 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);
 struct queue *qbypass(void (*)(void *, struct block *), void *);
 int qcanread(struct queue *);
 void qclose(struct queue *);
@@ -915,6 +921,7 @@ extern char Ebadstat[];                     /* malformed stat buffer */
 extern char Ecmdargs[];                        /* wrong #args in control message */
 extern char Enofd[];                   /* no free file descriptors */
 extern char Enoctl[];                  /* unknown control request */
+extern char Eprocdied[];               /* process died */
 
 /* kern/src/err.c */
 int errpush(struct errbuf *errstack, int stacksize, int *curindex,
@@ -949,7 +956,8 @@ int grpclose(struct fgrp *f, int fd);
 int sysclose(int fd);
 int syscreate(char *path, int mode, uint32_t perm);
 int sysdup(int old, int new);
-int sysfstat(int fd, uint8_t * buf, int n);
+int sysfstat(int fd, uint8_t*, int n);
+int sysfstatakaros(int fd, struct kstat *);
 char *sysfd2path(int fd);
 int sysfauth(int fd, char *aname);
 int sysfversion(int fd, unsigned int msize, char *vers, unsigned int arglen);
@@ -966,7 +974,8 @@ long syspread(int fd, void *va, long n, int64_t off);
 int sysremove(char *path);
 int64_t sysseek(int fd, int64_t off, int whence);
 void validstat(uint8_t * s, int n);
-int sysstat(char *path, uint8_t * buf, int n);
+int sysstat(char *path, uint8_t*, int n);
+int sysstatakaros(char *path, struct kstat *);
 long syswrite(int fd, void *va, long n);
 long syspwrite(int fd, void *va, long n, int64_t off);
 int syswstat(char *path, uint8_t * buf, int n);
@@ -985,6 +994,9 @@ int iseve(void);
 int fd_getfl(int fd);
 int fd_setfl(int fd, int flags);
 
+/* kern/drivers/dev/srv.c */
+char *srvname(struct chan *c);
+
 static inline int abs(int a)
 {
        if (a < 0)