mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-05-25 22:14:34 +00:00
feat(kernel/syscalls): implement stub linux_poll
This commit is contained in:
parent
ef5d61df9d
commit
33eee9c628
@ -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
|
||||
|
@ -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__
|
||||
|
@ -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},
|
||||
|
Loading…
x
Reference in New Issue
Block a user