diff --git a/src/kernel/apps/Jamfile b/src/kernel/apps/Jamfile index b62945a45a..43b8aaa703 100644 --- a/src/kernel/apps/Jamfile +++ b/src/kernel/apps/Jamfile @@ -15,6 +15,15 @@ KernelObjects on_exit_thread.c ; +UsePrivateHeaders kernel ; +# UsePrivateHeaders [ FDirName kernel arch ] ; +UsePrivateHeaders [ FDirName kernel arch $(OBOS_ARCH) ] ; +UsePrivateHeaders [ FDirName kernel boot platform $(OBOS_BOOT_PLATFORM) ] ; + +StdBinCommands + cache_control.cpp + : libroot.so ; + if $(OBOS_ARCH) = x86 { SubInclude OBOS_TOP src kernel apps cpuinfo ; } diff --git a/src/kernel/apps/cache_control.cpp b/src/kernel/apps/cache_control.cpp new file mode 100644 index 0000000000..a9118c9160 --- /dev/null +++ b/src/kernel/apps/cache_control.cpp @@ -0,0 +1,58 @@ +/* + * Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include +#include +#include + +#include + +#include +#include + + +extern const char *__progname; + + +void +usage() +{ + fprintf(stderr, "usage: %s [clear | unset | set ]\n", __progname); + exit(0); +} + + +int +main(int argc, char **argv) +{ + uint32 version = 0; + status_t status = _kern_generic_syscall(CACHE_SYSCALLS, B_SYSCALL_INFO, &version, sizeof(version)); + if (status != B_OK) { + fprintf(stderr, "%s: The cache syscalls are not available on this system.\n", __progname); + return 1; + } + + if (argc < 2) + usage(); + + if (!strcmp(argv[1], "clear")) { + status = _kern_generic_syscall(CACHE_SYSCALLS, CACHE_CLEAR, NULL, 0); + if (status != B_OK) + fprintf(stderr, "%s: clearing the cache failed: %s\n", __progname, strerror(status)); + } else if (!strcmp(argv[1], "unset")) { + status = _kern_generic_syscall(CACHE_SYSCALLS, CACHE_SET_MODULE, NULL, 0); + if (status != B_OK) + fprintf(stderr, "%s: unsetting the cache module failed: %s\n", __progname, strerror(status)); + } else if (!strcmp(argv[1], "set") && argc > 2) { + status = _kern_generic_syscall(CACHE_SYSCALLS, CACHE_SET_MODULE, argv[2], strlen(argv[2])); + if (status != B_OK) + fprintf(stderr, "%s: setting the module failed: %s\n", __progname, strerror(status)); + } else + usage(); + + return 0; +} +