net: tcp: Fix up the receive window
[akaros.git] / kern / src / devfs.c
1 /* Copyright (c) 2010 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Devfs: filesystem interfaces to devices.  For now, we just create the
6  * needed/discovered devices in KFS in its /dev/ folder, and only do this for
7  * stdin and stdout. */
8
9 #include <devfs.h>
10 #include <kfs.h>
11 #include <error.h>
12 #include <syscall.h>
13 #include <process.h>
14 #include <smp.h>
15 #include <umem.h>
16 #include <kmalloc.h>
17 #include <ns.h>
18
19 void devfs_init(void)
20 {
21         int mode;
22         /* Make sure there is a dev directory */
23         struct dentry *dentry = lookup_dentry("/dev_vfs/", 0);
24         if (!dentry) {
25                 assert(!do_mkdir("/dev_vfs/", S_IRWXU | S_IRWXG | S_IRWXO));
26         } else {
27                 kref_put(&dentry->d_kref);
28         }
29 }
30
31 /* Creates a device node at a given location in the FS-tree */
32 /* TODO: consider making this only deal with the inode */
33 struct file *make_device(char *path, int mode, int type,
34                          struct file_operations *fop)
35 {
36         struct file *f_dev = do_file_open(path, O_CREAT | O_RDWR, mode);
37         assert(f_dev);
38         /* Overwrite the f_op with our own f_ops */
39         f_dev->f_dentry->d_inode->i_fop = fop;
40         f_dev->f_op = fop;
41         SET_FTYPE(f_dev->f_dentry->d_inode->i_mode, type);
42         return f_dev;
43 }
44
45 /* We provide a separate set of f_ops for devices (char and block), and the fops
46  * is the only thing that differs from the regular KFS.  We need to do some
47  * ghetto-overriding of these ops after we create them. */
48 int dev_c_llseek(struct file *file, off64_t offset, off64_t *ret, int whence)
49 {
50         set_errno(EINVAL);
51         return -1;
52 }
53
54 /* we don't allow mmapping of any device file */
55 int dev_mmap(struct file *file, struct vm_region *vmr)
56 {
57         set_errno(EINVAL);
58         return -1;
59 }