* gnu/packages/patches/picprog-non-intel-support.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/embedded.scm (picprog)[source]: Add patch. [arguments]: Skip building the 'testport' binary.
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			74 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
 |