misc: add hres_counter driver
diff --git a/include/linux/hres_counter.h b/include/linux/hres_counter.h
new file mode 100644
index 0000000..9672f1c
--- /dev/null
+++ b/include/linux/hres_counter.h
@@ -0,0 +1,64 @@
+#ifndef __HRES_COUNTER_INCLUDED__
+#define __HRES_COUNTER_INCLUDED__
+
+#include <linux/types.h>
+
+struct hres_counter_platform_data {
+	/* Initialize/obtain the timer resource */
+	int (*init_hres_timer)(void **);
+
+	/* Release the timer resource*/
+	int (*release_hres_timer)(void *);
+
+	/* PM functions */
+	int (*suspend_hres_timer)(void *);
+	int (*resume_hres_timer)(void *);
+
+	/* Read native timer count value */
+	u32 (*read_hres_timer)(void *);
+
+	/* Convert native timer value to desired human */
+	/* readable format (usec or msec, etc) */
+	u32 (*convert_hres_timer)(u32);
+};
+
+#define LOG_MMC_TIMEOUT_TIMING_MEASUREMENTS 1
+#if !defined(CONFIG_HRES_COUNTER) && LOG_MMC_TIMEOUT_TIMING_MEASUREMENTS
+#error "MMC timeout measurements can only be done with hires counters"
+#endif 
+
+#ifdef CONFIG_HRES_COUNTER
+
+extern u32   hres_get_counter ( void );
+extern u32   hres_get_delta_usec ( u32 start, u32 end );
+extern void  hres_ch_reset    ( uint ch ); 
+extern void  hres_event_cnt   ( uint ch );
+extern void  hres_event_start ( uint ch );
+extern u32   hres_event_end   ( uint ch );
+extern void  hres_event       ( char *type, u32 arg1, u32 arg2 );
+extern int   hres_evlog_enable  ( void );
+extern int   hres_evlog_disable ( void );
+extern void  hres_evlog_print   ( void );
+extern void  hres_evlog_reset   ( void );
+
+#else
+
+#define hres_get_counter(args...)
+#define hres_get_delta_usec(args...)
+#define hres_ch_reset(args...)
+#define hres_event_cnt(args...)
+#define hres_event_start(args...)
+#define hres_event_end(args...)
+#define hres_event(args...)
+#define hres_evlog_enable(args...)
+#define hres_evlog_disable(args...)
+#define hres_evlog_print(args...)
+#define hres_evlog_reset(args...)
+
+#endif
+
+
+#endif // __HRES_COUNTER_INCLUDED__
+
+
+