]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/vmx/9p.c
merge
[plan9front.git] / sys / src / cmd / vmx / 9p.c
1 #include <u.h>
2 #include <libc.h>
3 #include <thread.h>
4 #include <fcall.h>
5 #include <9p.h>
6 #include "dat.h"
7 #include "fns.h"
8
9 extern int regsfd;
10 char Egreg[] = "the front fell off";
11
12 enum {
13         Qregs,
14         Qmem,
15         Qmax
16 };
17
18 static Dir files[] = {
19         [Qregs] {.name "regs", .mode 0440},
20         [Qmem] {.name "mem", .mode 0440},
21 };
22
23 void
24 srvread(Req *r)
25 {
26         int rc;
27
28         switch((int)r->fid->qid.path){
29         case Qregs:
30                 rc = pread(regsfd, r->ofcall.data, r->ifcall.count, r->ifcall.offset);
31                 if(rc < 0)
32                         responderror(r);
33                 else{
34                         r->ofcall.count = rc;
35                         respond(r, nil);
36                 }
37                 break;
38         case Qmem:
39                 r->ofcall.count = vmemread(r->ofcall.data, r->ifcall.count, r->ifcall.offset);
40                 if(r->ofcall.count == 0)
41                         respond(r, "fault");
42                 else
43                         respond(r, nil);
44                 break;
45         default:
46                 respond(r, Egreg);
47         }
48 }
49
50 Srv vmxsrv = {
51         .read srvread,
52 };
53
54 void
55 init9p(char *srvname)
56 {
57         char *uid;
58         int i;
59         
60         uid = getuser();
61         vmxsrv.tree = alloctree(uid, uid, 0770, nil);
62         for(i = 0; i < Qmax; i++)
63                 createfile(vmxsrv.tree->root, files[i].name, uid, files[i].mode, nil);
64         threadpostmountsrv(&vmxsrv, srvname, nil, 0);
65 }