#ifndef _KEYPAD_DRIVER_
#define _KEYPAD_DRIVER_


#include <linux/kernel.h>
#include <linux/spinlock.h>
#include <linux/module.h>


#ifdef _DEBUG_
//#define assert(x) { if (!(x)) { BUG();} }
#define DPRINTK(format, args...) \
printk( format, ##args)
#else
//#define assert(x)
#define DPRINTK(format, args...)        
#endif

#define KBD_DEVICE_NAME	"pap-kbd"
#define KBD_DEVICE_MAJOR 	241	

/** Ioctls. */
#define KBD_BUFFER_KEYS  0x0  	/**< Number of keys in buffer */
#define KBD_FLUSH_BUFFER 0x1 	/**< Flush buffer */
#define KBD_SET_KEYMAP 	 0x2   	/**< Set the keymap */
#define KBD_SCAN 	 0x03	/**< Return the key on top of the queue 
				 *  without dequeing it. 
				 */	

#define KBD_MODE_PRIMARY	0x0
#define KBD_MODE_SECONDARY	0x1
#define KBD_MODE_TERTIARY	0x2

#define SCANHZ 50 
#define SCAN_JIFF_COUNT (HZ/SCANHZ)
#define KEY_TIMEOUT (10*SCAN_JIFF_COUNT)
#define KBD_BH_DATA_SIZE	512

typedef volatile unsigned int alignedWord; 
extern alignedWord *kpd_cookie;
extern unsigned int *kbd_bh_data;
extern struct semaphore kbd_monitor_wait;
extern volatile int kbd_bh_head;
extern volatile int kbd_bh_tail;
#endif
