feat(kernel/syscalls): implement stub linux_poll

This commit is contained in:
EnderIce2 2025-04-13 10:18:15 +00:00
parent ef5d61df9d
commit 33eee9c628
Signed by: enderice2
GPG Key ID: FEB6B8A8507BA62E
3 changed files with 51 additions and 2 deletions

View File

@ -86,6 +86,7 @@ extern const BuiltInDriver __kernel_builtin_drivers_end[];
namespace Driver
{
char GetScanCode(uint8_t ScanCode, bool Upper);
char GetControlCharacter(KeyScanCodes Key);
bool IsValidChar(uint8_t ScanCode);
struct DriverHandlers

View File

@ -447,4 +447,26 @@ struct sysinfo
char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding to 64 bytes */
};
struct linux_pollfd
{
int fd; /* File Descriptor */
short events; /* Requested Events */
short revents; /* Returned Events */
};
typedef unsigned long nfds_t;
#define linux_POLLIN 0x001
#define linux_POLLPRI 0x002
#define linux_POLLOUT 0x004
#define linux_POLLERR 0x008
#define linux_POLLHUP 0x010
#define linux_POLLNVAL 0x020
#define linux_POLLRDNORM 0x040
#define linux_POLLRDBAND 0x080
#define linux_POLLWRNORM 0x100
#define linux_POLLWRBAND 0x200
#define linux_POLLMSG 0x400
#define linux_POLLRDHUP 0x2000
#endif // !__FENNIX_KERNEL_LINUX_DEFS_H__

View File

@ -899,6 +899,32 @@ static int linux_lstat(SysFrm *, const char *pathname, struct linux_kstat *statb
return ret;
}
static int linux_poll(SysFrm *, linux_pollfd *fds, nfds_t nfds, int timeout)
{
PCB *pcb = thisProcess;
Memory::VirtualMemoryArea *vma = pcb->vma;
auto pFds = vma->UserCheckAndGetAddress(fds, nfds * sizeof(linux_pollfd));
if (pFds == nullptr)
return -linux_EFAULT;
for (int i = 0; i < nfds; i++)
{
if (pFds[i].fd < 0)
return -linux_EBADF;
debug("poll[%zu].fd=%d .events=%d .revents=%d",
i, pFds[i].fd, pFds[i].events, pFds[i].revents);
pFds[i].revents = 0;
}
vfs::FileDescriptorTable *fdt = pcb->FileDescriptors;
UNUSED(fdt);
UNUSED(timeout);
fixme("poll is stub! returning 1");
return 1;
}
// #include "../syscalls.h"
static off_t linux_lseek(SysFrm *, int fd, off_t offset, int whence)
@ -3568,7 +3594,7 @@ static SyscallData LinuxSyscallsTableAMD64[] = {
[__NR_amd64_stat] = {"stat", (void *)linux_stat},
[__NR_amd64_fstat] = {"fstat", (void *)linux_fstat},
[__NR_amd64_lstat] = {"lstat", (void *)linux_lstat},
[__NR_amd64_poll] = {"poll", (void *)nullptr},
[__NR_amd64_poll] = {"poll", (void *)linux_poll},
[__NR_amd64_lseek] = {"lseek", (void *)linux_lseek},
[__NR_amd64_mmap] = {"mmap", (void *)linux_mmap},
[__NR_amd64_mprotect] = {"mprotect", (void *)linux_mprotect},
@ -4179,7 +4205,7 @@ static SyscallData LinuxSyscallsTableI386[] = {
[__NR_i386_getresuid] = {"getresuid", (void *)nullptr},
[__NR_i386_vm86] = {"vm86", (void *)nullptr},
[__NR_i386_query_module] = {"query_module", (void *)nullptr},
[__NR_i386_poll] = {"poll", (void *)nullptr},
[__NR_i386_poll] = {"poll", (void *)linux_poll},
[__NR_i386_nfsservctl] = {"nfsservctl", (void *)nullptr},
[__NR_i386_setresgid] = {"setresgid", (void *)nullptr},
[__NR_i386_getresgid] = {"getresgid", (void *)nullptr},