PatchworkOS
Loading...
Searching...
No Matches
const.c
Go to the documentation of this file.
2
3#include <kernel/fs/sysfs.h>
4#include <kernel/fs/vfs.h>
5#include <kernel/log/log.h>
6#include <kernel/log/panic.h>
7#include <kernel/mem/vmm.h>
10
11#include <assert.h>
12#include <stdlib.h>
13#include <string.h>
14
18
20{
21 (void)file; // Unused
22
23 memset(buffer, -1, count);
24 *offset += count;
25 return count;
26}
27
28static void* const_one_mmap(file_t* file, void* addr, uint64_t length, uint64_t* offset, pml_flags_t flags)
29{
30 (void)file; // Unused
31 (void)offset; // Unused
32
33 addr = vmm_alloc(&sched_process()->space, addr, length, flags, VMM_ALLOC_NONE);
34 if (addr == NULL)
35 {
36 return NULL;
37 }
38
39 memset(addr, -1, length);
40 return addr;
41}
42
45 .mmap = const_one_mmap,
46};
47
49{
50 (void)file; // Unused
51
52 memset(buffer, 0, count);
53 *offset += count;
54 return count;
55}
56
57static void* const_zero_mmap(file_t* file, void* addr, uint64_t length, uint64_t* offset, pml_flags_t flags)
58{
59 (void)file; // Unused
60 (void)offset; // Unused
61
62 addr = vmm_alloc(&sched_process()->space, addr, length, flags, VMM_ALLOC_NONE);
63 if (addr == NULL)
64 {
65 return NULL;
66 }
67
68 memset(addr, 0, length);
69 return addr;
70}
71
74 .mmap = const_zero_mmap,
75};
76
78{
79 (void)file; // Unused
80 (void)buffer; // Unused
81
82 *offset += count;
83 return 0;
84}
85
87{
88 (void)file; // Unused
89 (void)buffer; // Unused
90
91 *offset += count;
92 return count;
93}
94
97 .write = const_null_write,
98};
99
100void const_init(void)
101{
103 if (oneFile == NULL)
104 {
105 panic(NULL, "Failed to init one file");
106 }
107
109 if (zeroFile == NULL)
110 {
111 DEREF(oneFile);
112 panic(NULL, "Failed to init zero file");
113 }
114
116 if (nullFile == NULL)
117 {
118 DEREF(oneFile);
120 panic(NULL, "Failed to init null file");
121 }
122}
static void * const_one_mmap(file_t *file, void *addr, uint64_t length, uint64_t *offset, pml_flags_t flags)
Definition const.c:28
void const_init(void)
Definition const.c:100
static file_ops_t zeroOps
Definition const.c:72
static dentry_t * zeroFile
Definition const.c:16
static uint64_t const_one_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition const.c:19
static uint64_t const_null_write(file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
Definition const.c:86
static file_ops_t oneOps
Definition const.c:43
static uint64_t const_zero_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition const.c:48
static void * const_zero_mmap(file_t *file, void *addr, uint64_t length, uint64_t *offset, pml_flags_t flags)
Definition const.c:57
static dentry_t * oneFile
Definition const.c:15
static dentry_t * nullFile
Definition const.c:17
static file_ops_t nullOps
Definition const.c:95
static uint64_t const_null_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition const.c:77
NORETURN void panic(const interrupt_frame_t *frame, const char *format,...)
Panic the kernel, printing a message and halting.
Definition panic.c:362
void * vmm_alloc(space_t *space, void *virtAddr, uint64_t length, pml_flags_t pmlFlags, vmm_alloc_flags_t allocFlags)
Allocates and maps virtual memory in a given address space.
Definition vmm.c:168
@ VMM_ALLOC_NONE
Definition vmm.h:123
process_t * sched_process(void)
Retrieves the process of the currently running thread.
Definition sched.c:164
#define DEREF(ptr)
Decrement reference count.
Definition ref.h:80
#define NULL
Pointer error value.
Definition NULL.h:23
static dentry_t * file
Definition log_file.c:17
EFI_PHYSICAL_ADDRESS buffer
Definition mem.c:15
static atomic_long count
Definition main.c:9
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
_PUBLIC void * memset(void *s, int c, size_t n)
Definition memset.c:4
Directory entry structure.
Definition dentry.h:83
File operations structure.
Definition file.h:57
uint64_t(* read)(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition file.h:61
File structure.
Definition file.h:37
A entry in a page table without a specified address or callback ID.
dentry_t * sysfs_file_new(dentry_t *parent, const char *name, const inode_ops_t *inodeOps, const file_ops_t *fileOps, void *private)
Create a new file inside a mounted SysFS instance.
Definition sysfs.c:216