75 lines
2 KiB
Diff
75 lines
2 KiB
Diff
|
https://sources.debian.org/data/main/p/picprog/1.9.1-3/debian/patches/20_iopl.patch
|
||
|
|
||
|
Description: Avoid some functions in some architectures
|
||
|
Upstream uses iopl() function and other architecture-dependent
|
||
|
codes. This patch adds building switches to avoid them in
|
||
|
some architectures.
|
||
|
Author: Koichi Akabe <vbkaisetsu@gmail.com>
|
||
|
Last-Update: 2011-11-30
|
||
|
|
||
|
--- picprog-1.9.1.orig/picport.cc
|
||
|
+++ picprog-1.9.1/picport.cc
|
||
|
@@ -38,7 +38,12 @@
|
||
|
#include <ctime>
|
||
|
|
||
|
#include <sys/ioctl.h>
|
||
|
-#include <sys/io.h>
|
||
|
+
|
||
|
+#if defined(__i386__) || defined(__x86_64__)
|
||
|
+ #include <sys/io.h>
|
||
|
+ #define HAVE_IOPL
|
||
|
+#endif
|
||
|
+
|
||
|
#include <fcntl.h>
|
||
|
#include <sys/time.h>
|
||
|
#include <unistd.h>
|
||
|
@@ -160,8 +165,12 @@
|
||
|
// Not root. Cannot use realtime scheduling.
|
||
|
use_nanosleep = 0;
|
||
|
}
|
||
|
+#ifdef HAVE_IOPL
|
||
|
if (iopl (3))
|
||
|
disable_interrupts = 0;
|
||
|
+#else
|
||
|
+ disable_interrupts = 0;
|
||
|
+#endif
|
||
|
|
||
|
#ifdef CPU_SETSIZE
|
||
|
// When computing the delay loops, we do not want the cpu's to change.
|
||
|
@@ -403,13 +412,17 @@
|
||
|
{
|
||
|
struct timeval tv1, tv2;
|
||
|
gettimeofday (&tv1, 0);
|
||
|
+#if defined(__i386__) or defined(__x86_64__)
|
||
|
if (tsc_1000ns > 1 && disable_interrupts)
|
||
|
asm volatile("pushf; cli");
|
||
|
+#endif
|
||
|
set_clock_data (1, b); // set data, clock up
|
||
|
delay (cable_delay);
|
||
|
set_clock_data (0, b); // clock down
|
||
|
+#if defined(__i386__) or defined(__x86_64__)
|
||
|
if (tsc_1000ns > 1 && disable_interrupts)
|
||
|
asm volatile("popf");
|
||
|
+#endif
|
||
|
gettimeofday (&tv2, 0);
|
||
|
|
||
|
// We may have spent a long time in an interrupt or in another task
|
||
|
@@ -428,13 +441,17 @@
|
||
|
{
|
||
|
struct timeval tv1, tv2;
|
||
|
gettimeofday (&tv1, 0);
|
||
|
+#if defined(__i386__) or defined(__x86_64__)
|
||
|
if (tsc_1000ns > 1 && disable_interrupts)
|
||
|
asm volatile("pushf; cli");
|
||
|
+#endif
|
||
|
set_clock_data (1, 1); // clock up
|
||
|
delay (cable_delay);
|
||
|
set_clock_data (0, 1); // set data up, clock down
|
||
|
+#if defined(__i386__) or defined(__x86_64__)
|
||
|
if (tsc_1000ns > 1 && disable_interrupts)
|
||
|
asm volatile("popf");
|
||
|
+#endif
|
||
|
gettimeofday (&tv2, 0);
|
||
|
|
||
|
// We may have spent a long time in an interrupt or in another task
|