11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _I8042_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _I8042_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Copyright (c) 1999-2002 Vojtech Pavlik
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify it
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * under the terms of the GNU General Public License version 2 as published by
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation.
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Arch-dependent inline functions and defines.
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(CONFIG_MACH_JAZZ)
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "i8042-jazzio.h"
19f47831fabaf0206abc56ee5a33fd006fe29b6dc6Thomas Bogendoerfer#elif defined(CONFIG_SGI_HAS_I8042)
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "i8042-ip22io.h"
21f1782447125c167ca02babb9a2af3853895e411cThomas Bogendoerfer#elif defined(CONFIG_SNI_RM)
22f1782447125c167ca02babb9a2af3853895e411cThomas Bogendoerfer#include "i8042-snirm.h"
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(CONFIG_PPC)
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "i8042-ppcio.h"
250b57ee9e55373a27e45549e82b0c43621480a71bAdrian Bunk#elif defined(CONFIG_SPARC)
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "i8042-sparcio.h"
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif defined(CONFIG_X86) || defined(CONFIG_IA64)
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "i8042-x86ia64io.h"
29425ad52b86d9710719b3aa811d6cab56b3852981GuanXuetao#elif defined(CONFIG_UNICORE32)
30425ad52b86d9710719b3aa811d6cab56b3852981GuanXuetao#include "i8042-unicore32io.h"
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "i8042-io.h"
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This is in 50us units, the time we wait for the i8042 to react. This
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * has to be long enough for the i8042 itself to timeout on sending a byte
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to a non-existent mouse.
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTL_TIMEOUT	10000
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Status register bits.
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_PARITY	0x80
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_TIMEOUT	0x40
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_AUXDATA	0x20
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_KEYLOCK	0x10
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_CMDDAT	0x08
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_MUXERR	0x04
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_STR_IBF		0x02
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	I8042_STR_OBF		0x01
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Control register bits.
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTR_KBDINT	0x01
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTR_AUXINT	0x02
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTR_IGNKEYLOCK	0x08
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTR_KBDDIS	0x10
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTR_AUXDIS	0x20
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_CTR_XLATE		0x40
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Return codes.
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_RET_CTL_TEST	0x55
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Expected maximum internal i8042 buffer size. This is used for flushing
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the i8042 buffers.
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_BUFFER_SIZE	16
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Number of AUX ports on controllers supporting active multiplexing
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * specification
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I8042_NUM_MUX_PORTS	4
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Debug.
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef DEBUG
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned long i8042_start_time;
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define dbg_init() do { i8042_start_time = jiffies; } while (0)
944eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches#define dbg(format, arg...)							\
954eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches	do {									\
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (i8042_debug)						\
974eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches			printk(KERN_DEBUG KBUILD_MODNAME ": [%d] " format,	\
984eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches			       (int) (jiffies - i8042_start_time), ##arg);	\
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} while (0)
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define dbg_init() do { } while (0)
1024eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches#define dbg(format, arg...)							\
1034eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches	do {									\
1044eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches		if (0)								\
1054eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches			printk(KERN_DEBUG pr_fmt(format), ##arg);		\
1064eb3c30b2e034b673df3e8f21b497e39f3911a02Joe Perches	} while (0)
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _I8042_H */
110