1#ifndef _I8042_PPCIO_H 2#define _I8042_PPCIO_H 3 4/* 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 as published by 7 * the Free Software Foundation. 8 */ 9 10#if defined(CONFIG_WALNUT) 11 12#define I8042_KBD_IRQ 25 13#define I8042_AUX_IRQ 26 14 15#define I8042_KBD_PHYS_DESC "walnutps2/serio0" 16#define I8042_AUX_PHYS_DESC "walnutps2/serio1" 17#define I8042_MUX_PHYS_DESC "walnutps2/serio%d" 18 19extern void *kb_cs; 20extern void *kb_data; 21 22#define I8042_COMMAND_REG (*(int *)kb_cs) 23#define I8042_DATA_REG (*(int *)kb_data) 24 25static inline int i8042_read_data(void) 26{ 27 return readb(kb_data); 28} 29 30static inline int i8042_read_status(void) 31{ 32 return readb(kb_cs); 33} 34 35static inline void i8042_write_data(int val) 36{ 37 writeb(val, kb_data); 38} 39 40static inline void i8042_write_command(int val) 41{ 42 writeb(val, kb_cs); 43} 44 45static inline int i8042_platform_init(void) 46{ 47 i8042_reset = 1; 48 return 0; 49} 50 51static inline void i8042_platform_exit(void) 52{ 53} 54 55#elif defined(CONFIG_SPRUCE) 56 57#define I8042_KBD_IRQ 22 58#define I8042_AUX_IRQ 21 59 60#define I8042_KBD_PHYS_DESC "spruceps2/serio0" 61#define I8042_AUX_PHYS_DESC "spruceps2/serio1" 62#define I8042_MUX_PHYS_DESC "spruceps2/serio%d" 63 64#define I8042_COMMAND_REG 0xff810000 65#define I8042_DATA_REG 0xff810001 66 67static inline int i8042_read_data(void) 68{ 69 unsigned long kbd_data; 70 71 __raw_writel(0x00000088, 0xff500008); 72 eieio(); 73 74 __raw_writel(0x03000000, 0xff50000c); 75 eieio(); 76 77 asm volatile("lis 7,0xff88 \n\ 78 lswi 6,7,0x8 \n\ 79 mr %0,6" 80 : "=r" (kbd_data) :: "6", "7"); 81 82 __raw_writel(0x00000000, 0xff50000c); 83 eieio(); 84 85 return (unsigned char)(kbd_data >> 24); 86} 87 88static inline int i8042_read_status(void) 89{ 90 unsigned long kbd_status; 91 92 __raw_writel(0x00000088, 0xff500008); 93 eieio(); 94 95 __raw_writel(0x03000000, 0xff50000c); 96 eieio(); 97 98 asm volatile("lis 7,0xff88 \n\ 99 ori 7,7,0x8 \n\ 100 lswi 6,7,0x8 \n\ 101 mr %0,6" 102 : "=r" (kbd_status) :: "6", "7"); 103 104 __raw_writel(0x00000000, 0xff50000c); 105 eieio(); 106 107 return (unsigned char)(kbd_status >> 24); 108} 109 110static inline void i8042_write_data(int val) 111{ 112 *((unsigned char *)0xff810000) = (char)val; 113} 114 115static inline void i8042_write_command(int val) 116{ 117 *((unsigned char *)0xff810001) = (char)val; 118} 119 120static inline int i8042_platform_init(void) 121{ 122 i8042_reset = 1; 123 return 0; 124} 125 126static inline void i8042_platform_exit(void) 127{ 128} 129 130#else 131 132#include "i8042-io.h" 133 134#endif 135 136#endif /* _I8042_PPCIO_H */ 137