dell_flash_unlock: Add support for FreeBSD

Signed-off-by: Nicholas Chin <nic.c3.14@gmail.com>
audit2-merge1
Nicholas Chin 2024-05-01 20:11:14 -06:00 committed by Leah Rowe
parent dcbd13425e
commit 731884c9e6
1 changed files with 35 additions and 4 deletions

View File

@ -18,6 +18,13 @@
#endif /* __i386__ */ #endif /* __i386__ */
#endif /* __OpenBSD__ */ #endif /* __OpenBSD__ */
#if defined(__FreeBSD__)
#include <fcntl.h>
#include <sys/types.h>
#include <machine/cpufunc.h>
#include <unistd.h>
#endif /* __FreeBSD__ */
#include <errno.h> #include <errno.h>
#include "accessors.h" #include "accessors.h"
@ -42,7 +49,7 @@ sys_outb(unsigned int port, uint8_t data)
#if defined(__linux__) #if defined(__linux__)
outb(data, port); outb(data, port);
#endif #endif
#if defined(__OpenBSD__) #if defined(__OpenBSD__) || defined(__FreeBSD__)
outb(port, data); outb(port, data);
#endif #endif
#if defined(__NetBSD__) #if defined(__NetBSD__)
@ -56,7 +63,7 @@ sys_outl(unsigned int port, uint32_t data)
#if defined(__linux__) #if defined(__linux__)
outl(data, port); outl(data, port);
#endif #endif
#if defined(__OpenBSD__) #if defined(__OpenBSD__) || defined(__FreeBSD__)
outl(port, data); outl(port, data);
#endif #endif
#if defined(__NetBSD__) #if defined(__NetBSD__)
@ -67,7 +74,8 @@ sys_outl(unsigned int port, uint32_t data)
uint8_t uint8_t
sys_inb(unsigned int port) sys_inb(unsigned int port)
{ {
#if defined(__linux__) || defined (__OpenBSD__) #if defined(__linux__) || defined (__OpenBSD__) \
|| defined(__FreeBSD__)
return inb(port); return inb(port);
#endif #endif
@ -82,7 +90,8 @@ sys_inb(unsigned int port)
uint32_t uint32_t
sys_inl(unsigned int port) sys_inl(unsigned int port)
{ {
#if defined(__linux__) || defined (__OpenBSD__) #if defined(__linux__) || defined (__OpenBSD__) \
|| defined(__FreeBSD__)
return inl(port); return inl(port);
#endif #endif
#if defined(__NetBSD__) #if defined(__NetBSD__)
@ -115,6 +124,28 @@ sys_iopl(int level)
#endif /* __amd64__ */ #endif /* __amd64__ */
#endif /* __NetBSD__ */ #endif /* __NetBSD__ */
#if defined(__FreeBSD__)
/* Refer to io(4) manual page. This assumes the legacy behavior
* where opening /dev/io raises the IOPL of the process */
static int io_fd = -1;
/* Requesting privileged access */
if (level > 0) {
if (io_fd == -1) {
io_fd = open("/dev/io", O_RDONLY);
return (io_fd == -1) ? -1 : 0;
}
/* Lowering access to lowest level */
} else if (level == 0 && io_fd != -1) {
if (close(io_fd) == -1) {
return -1;
} else {
io_fd = -1;
}
}
return 0;
#endif /* __FreeBSD__ */
errno = ENOSYS; errno = ENOSYS;
return -1; return -1;
} }