Re: [x86 setup 17/33] A20 handling code
From: Jan Engelhardt <hidden>
Date: 2007-07-10 18:28:03
Also in:
lkml
From: Jan Engelhardt <hidden>
Date: 2007-07-10 18:28:03
Also in:
lkml
On Jul 9 2007 19:51, H. Peter Anvin wrote:
+ status = inb(0x64);
+ if (status & 1) {
+ /* Read and discard input data */
+ io_delay();
+ (void)inb(0x60);Is the (void) cast needed for some obscure reason? Let's hope inb _is_ declared as volatile. (Minus the volatile flames.
+ } else if (!(status & 2)) {
+ /* Buffers empty, finished! */
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
+
+#define A20_TEST_ADDR (4*0x80)
+#define A20_TEST_SHORT 32
+#define A20_TEST_LONG 2097152 /* 2^21 */Maybe...? #define A20_TEST_LONG (1 << 21)
+/* Quick test to see if A20 is already enabled */
+static int a20_test_short(void)
+{
+ return a20_test(A20_TEST_SHORT);
+}
+
+/* Longer test that actually waits for A20 to come on line; this
+ is useful when dealing with the KBC or other slow external circuitry. */
+static int a20_test_long(void)
+{
+ return a20_test(A20_TEST_LONG);
+}To me looks like some of these (or other functions) could return bool. Jan --