Blame SOURCES/kbd-1.15-sparc.patch

55a0e2
diff -up kbd-2.1.0/docs/man/man8/kbdrate.8.orig kbd-2.1.0/docs/man/man8/kbdrate.8
55a0e2
--- kbd-2.1.0/docs/man/man8/kbdrate.8.orig	2019-06-21 10:08:17.000000000 +0200
55a0e2
+++ kbd-2.1.0/docs/man/man8/kbdrate.8	2019-07-17 10:36:19.876499648 +0200
55a0e2
@@ -19,7 +19,7 @@ Using
55a0e2
 without any options will reset the repeat rate to 10.9 characters per second (cps)
55a0e2
 and the delay to 250 milliseconds (ms) for Intel- and M68K-based systems.
55a0e2
 These are the IBM defaults. On SPARC-based systems it will reset the repeat rate
55a0e2
-to 5 cps and the delay to 200 ms.
55a0e2
+to 20 cps and the delay to 200 ms.
55a0e2
 
55a0e2
 .SH OPTIONS
55a0e2
 .TP
55a0e2
diff -up kbd-2.1.0/src/kbdrate.c.orig kbd-2.1.0/src/kbdrate.c
55a0e2
--- kbd-2.1.0/src/kbdrate.c.orig	2019-07-02 17:44:57.000000000 +0200
55a0e2
+++ kbd-2.1.0/src/kbdrate.c	2019-07-17 11:07:04.732486323 +0200
55a0e2
@@ -114,9 +114,12 @@ static int print_only = 0;
55a0e2
 static int
55a0e2
 KDKBDREP_ioctl_ok(double rate, int delay, int silent)
55a0e2
 {
55a0e2
+#if defined(KDKBDREP) && !defined(__sparc__)
55a0e2
 	/*
55a0e2
 	 * This ioctl is defined in <linux/kd.h> but is not
55a0e2
 	 * implemented anywhere - must be in some m68k patches.
55a0e2
+	 * We cannot blindly try unimplemented ioctls on sparc64 -
55a0e2
+	 * the 32<->64bit transition layer does not like it.
55a0e2
 	 * Since 2.4.9 also on i386.
55a0e2
 	 */
55a0e2
 	struct my_kbd_repeat kbdrep_s;
55a0e2
@@ -181,6 +184,9 @@ KDKBDREP_ioctl_ok(double rate, int delay
55a0e2
 	}
55a0e2
 
55a0e2
 	return 1; /* success! */
55a0e2
+#else /* no KDKBDREP or __sparc__ */
55a0e2
+	return 0;
55a0e2
+#endif /* KDKBDREP */
55a0e2
 }
55a0e2
 
55a0e2
 #ifdef KIOCSRATE
55a0e2
@@ -251,6 +257,9 @@ ioport_set(double rate, int delay, int s
55a0e2
 
55a0e2
 	/* https://wiki.osdev.org/PS/2_Keyboard */
55a0e2
 
55a0e2
+	/* The ioport way - will crash on sparc */
55a0e2
+
55a0e2
+#ifndef __sparc__
55a0e2
 	for (i = 0; i < (int) RATE_COUNT; i++)
55a0e2
 		if (rate * 10 >= valid_rates[i]) {
55a0e2
 			value &= 0x60;
55a0e2
@@ -304,11 +313,12 @@ ioport_set(double rate, int delay, int s
55a0e2
 		       valid_rates[value & 0x1f] / 10.0,
55a0e2
 		       valid_delays[(value & 0x60) >> 5]);
55a0e2
 
55a0e2
+#endif
55a0e2
 	return 1;
55a0e2
 }
55a0e2
 
55a0e2
 #ifdef __sparc__
55a0e2
-double rate = 5.0; /* Default rate */
55a0e2
+double rate = 20.0; /* Default rate */
55a0e2
 int delay   = 200; /* Default delay */
55a0e2
 #else
55a0e2
 double rate = 10.9; /* Default rate */