summaryrefslogtreecommitdiff
path: root/sys/src/cmd/atazz/bit.c
diff options
context:
space:
mode:
authorgoogle <google@daverabbitz.ath.cx>2012-09-20 22:39:48 +1200
committergoogle <google@daverabbitz.ath.cx>2012-09-20 22:39:48 +1200
commitfa7fb8b66b9ff50029532d09315f03896f2ac4c4 (patch)
tree262cfe8966f3c07a5ad6ed61fda028f6fa928a36 /sys/src/cmd/atazz/bit.c
parent913afc39c9b4750e630c7f4ff3161a37602b006b (diff)
Add Erik Quanstrom's atazz
(needed to disable power management/head unload on 2.5" drive)
Diffstat (limited to 'sys/src/cmd/atazz/bit.c')
-rw-r--r--sys/src/cmd/atazz/bit.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/sys/src/cmd/atazz/bit.c b/sys/src/cmd/atazz/bit.c
new file mode 100644
index 000000000..9e1f39352
--- /dev/null
+++ b/sys/src/cmd/atazz/bit.c
@@ -0,0 +1,71 @@
+#include <u.h>
+#include <libc.h>
+#include <fis.h>
+#include "atazz.h"
+
+char*
+sebtab(char *p, char *e, Btab *t, int nt, uint u)
+{
+ char *p0;
+ int i;
+
+ p0 = p;
+ for(i = 0; i < nt; i++)
+ if(u & 1<< t[i].bit)
+ p = seprint(p, e, "%s ", t[i].name);
+ if(p > p0)
+ p--;
+ *p = 0;
+ return p;
+}
+
+void
+pw(uchar *p, ushort i)
+{
+ p[0] = i >> 0;
+ p[1] = i >> 8;
+}
+
+void
+pdw(uchar *p, uint i)
+{
+ p[0] = i >> 0;
+ p[1] = i >> 8;
+ p[2] = i >> 16;
+ p[3] = i >> 24;
+}
+
+void
+pqw(uchar *p, uvlong i)
+{
+ pdw(p, i);
+ pdw(p + 4, i >> 32);
+}
+
+ushort
+w(uchar *u)
+{
+ ushort r;
+
+ r = u[0] << 0;
+ r |= u[1] << 8;
+ return r;
+}
+
+uint
+dw(uchar *u)
+{
+ ulong r;
+
+ r = u[0] << 0;
+ r |= u[1] << 8;
+ r |= u[2] << 16;
+ r |= u[3] << 24;
+ return r;
+}
+
+uvlong
+qw(uchar *u)
+{
+ return dw(u) | (uvlong)dw(u + 4)<<32;
+}