haiku/headers/private/kernel/file_cache.h
X512 65a86bce72 kernel/fd: use function table to identify file descriptor type
It allows introducing new file descriptor types without editing enumeration every time. Anonymous FDs will be needed for Mesa
OpenGL/Vulkan drivers to reference GPU memory buffers and other driver objects that can be referenced as FDs from userland.

This change breaks private VFS API compatibility.
No behavior changes intended.

Change-Id: Iac109aad420b0b6aae704b38619436e01dcf4969
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7838
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2024-07-23 20:23:19 +00:00

57 lines
1.6 KiB
C

/*
* Copyright 2004-2008, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_FILE_CACHE_H
#define _KERNEL_FILE_CACHE_H
#include <vfs.h>
#include <vm/vm_types.h>
#include <module.h>
// temporary/optional cache syscall API
#define CACHE_SYSCALLS "cache"
#define CACHE_CLEAR 1 // takes no parameters
#define CACHE_SET_MODULE 2 // gets the module name as parameter
#define CACHE_MODULES_NAME "file_cache"
#define FILE_CACHE_SEQUENTIAL_ACCESS 0x01
#define FILE_CACHE_LOADED_COMPLETELY 0x02
#define FILE_CACHE_NO_IO 0x04
struct cache_module_info {
module_info info;
void (*node_opened)(struct vnode *vnode, dev_t mountID,
ino_t parentID, ino_t vnodeID, const char *name, off_t size);
void (*node_closed)(struct vnode *vnode, dev_t mountID,
ino_t vnodeID, int32 accessType);
void (*node_launched)(size_t argCount, char * const *args);
};
#ifdef __cplusplus
extern "C" {
#endif
extern void cache_node_opened(struct vnode *vnode, VMCache *cache,
dev_t mountID, ino_t parentID, ino_t vnodeID, const char *name);
extern void cache_node_closed(struct vnode *vnode, VMCache *cache,
dev_t mountID, ino_t vnodeID);
extern void cache_node_launched(size_t argCount, char * const *args);
extern void cache_prefetch_vnode(struct vnode *vnode, off_t offset, size_t size);
extern void cache_prefetch(dev_t mountID, ino_t vnodeID, off_t offset, size_t size);
extern status_t file_map_init(void);
extern status_t file_cache_init_post_boot_device(void);
extern status_t file_cache_init(void);
#ifdef __cplusplus
}
#endif
#endif /* _KRENEL_FILE_CACHE_H */