$OpenBSD: patch-libapm_h,v 1.1 2004/02/01 01:35:52 millert Exp $
--- libapm.h.orig	Mon May 11 20:05:49 1998
+++ libapm.h	Sat Jan 31 18:11:24 2004
@@ -32,34 +32,72 @@ static inline int port_inw( int port )
 #define outb(port, value) port_out(value, port)
 #define outw(port, value) port_outw(value, port)
 
+#ifdef __linux__
 int io_enable(void)
 {
   ioperm(0x70, 1, 1);
   ioperm(0x71, 1, 1);
   return 0;
 }
+#elif defined(__OpenBSD__) || defined(__NetBSD__)
+int io_enable(void)
+{
+  u_long iomap[32];
+
+  if (i386_get_ioperm(iomap))
+    return 1;
+  iomap[0x70 / 32] &= ~(1 << (0x70 % 32));
+  iomap[0x71 / 32] &= ~(1 << (0x71 % 32));
+  if (i386_set_ioperm(iomap))
+    return 1;
+
+  return 0;
+}
+#endif
 
+#ifdef __linux__
 int io_disable(void)
 {
   ioperm(0x70, 0, 1);
   ioperm(0x71, 0, 1);
   return 0;
 }
+#elif defined(__OpenBSD__) || defined(__NetBSD__)
+int io_disable(void)
+{
+  u_long iomap[32];
+
+  if (i386_get_ioperm(iomap))
+    return 1;
+  iomap[0x70 / 32] |= (1 << (0x70 % 32));
+  iomap[0x71 / 32] |= (1 << (0x71 % 32));
+  if (i386_set_ioperm(iomap))
+    return 1;
+
+  return 0;
+}
+#endif
 
 int get_cmos(int index)
 {
   int r;
 
+#ifndef __FreeBSD__
   io_enable();
+#endif
   outb(0x70, index);
   r = inb(0x71);
+#ifndef __FreeBSD__
   io_disable();
+#endif
   return r;
 }
 
 int set_cmos(int index, int value)
 {
+#ifndef __FreeBSD__
   io_enable();
+#endif
   outb(0x70, index);
   outb(0x71, value);
   return 0;
