|
@@ -14,6 +14,7 @@
|
|
|
#include <common.h>
|
|
|
#include <command.h>
|
|
|
#include <asm/io.h>
|
|
|
+#include <linux/time.h>
|
|
|
#include "qixis.h"
|
|
|
|
|
|
u8 qixis_read(unsigned int reg)
|
|
@@ -30,6 +31,51 @@ void qixis_write(unsigned int reg, u8 value)
|
|
|
out_8(p + reg, value);
|
|
|
}
|
|
|
|
|
|
+u16 qixis_read_minor(void)
|
|
|
+{
|
|
|
+ u16 minor;
|
|
|
+
|
|
|
+ /* this data is in little endian */
|
|
|
+ QIXIS_WRITE(tagdata, 5);
|
|
|
+ minor = QIXIS_READ(tagdata);
|
|
|
+ QIXIS_WRITE(tagdata, 6);
|
|
|
+ minor += QIXIS_READ(tagdata) << 8;
|
|
|
+
|
|
|
+ return minor;
|
|
|
+}
|
|
|
+
|
|
|
+char *qixis_read_time(char *result)
|
|
|
+{
|
|
|
+ time_t time = 0;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ /* timestamp is in 32-bit big endian */
|
|
|
+ for (i = 8; i <= 11; i++) {
|
|
|
+ QIXIS_WRITE(tagdata, i);
|
|
|
+ time = (time << 8) + QIXIS_READ(tagdata);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ctime_r(&time, result);
|
|
|
+}
|
|
|
+
|
|
|
+char *qixis_read_tag(char *buf)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ char tag, *ptr = buf;
|
|
|
+
|
|
|
+ for (i = 16; i <= 63; i++) {
|
|
|
+ QIXIS_WRITE(tagdata, i);
|
|
|
+ tag = QIXIS_READ(tagdata);
|
|
|
+ *(ptr++) = tag;
|
|
|
+ if (!tag)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (i > 63)
|
|
|
+ *ptr = '\0';
|
|
|
+
|
|
|
+ return buf;
|
|
|
+}
|
|
|
+
|
|
|
void qixis_reset(void)
|
|
|
{
|
|
|
QIXIS_WRITE(rst_ctl, QIXIS_RST_CTL_RESET);
|