summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/sparc64/include/ktr.h56
-rw-r--r--sys/sparc64/sparc64/genassym.c2
2 files changed, 31 insertions, 27 deletions
diff --git a/sys/sparc64/include/ktr.h b/sys/sparc64/include/ktr.h
index 9d4e6e7..991f324 100644
--- a/sys/sparc64/include/ktr.h
+++ b/sys/sparc64/include/ktr.h
@@ -32,28 +32,32 @@
#ifndef _MACHINE_KTR_H_
#define _MACHINE_KTR_H_
-#ifdef LOCORE
+#include <machine/upa.h>
-#define AND(var, mask, r1, r2, r3) \
- setx var, r2, r1 ; \
- setx mask, r3, r2 ; \
- lduw [r1], r3 ; \
- and r2, r3, r1
+#ifndef LOCORE
-#define TEST(var, mask, r1, r2, r3, l1) \
- AND(var, mask, r1, r2, r3) ; \
+#define KTR_CPU UPA_CR_GET_MID(ldxa(0, ASI_UPA_CONFIG_REG))
+
+#else
+
+#define AND(var, mask, r1, r2) \
+ SET(var, r2, r1) ; \
+ lduw [r1], r2 ; \
+ and r2, mask, r1
+
+#define TEST(var, mask, r1, r2, l1) \
+ AND(var, mask, r1, r2) ; \
brz r1, l1 ## f ; \
nop
/*
- * XXX doesn't do timestamp or ktr_cpu.
- * XXX could really use another register.
+ * XXX could really use another register...
*/
#define ATR(desc, r1, r2, r3, l1, l2) \
.sect .rodata ; \
l1 ## : .asciz desc ; \
.previous ; \
- set ktr_idx, r1 ; \
+ SET(ktr_idx, r2, r1) ; \
lduw [r1], r2 ; \
l2 ## : add r2, 1, r3 ; \
set KTR_ENTRIES - 1, r1 ; \
@@ -63,29 +67,27 @@ l2 ## : add r2, 1, r3 ; \
cmp r2, r3 ; \
bne %icc, l2 ## b ; \
mov r3, r2 ; \
- set ktr_buf, r1 ; \
+ SET(ktr_buf, r3, r1) ; \
mulx r2, KTR_SIZEOF, r2 ; \
add r1, r2, r1 ; \
- set l1 ## b, r2 ; \
+ rd %tick, r2 ; \
+ stx r2, [r1 + KTR_TIMESTAMP] ; \
+ UPA_GET_MID(r2) ; \
+ stw r2, [r1 + KTR_CPU] ; \
+ stw %g0, [r1 + KTR_LINE] ; \
+ stx %g0, [r1 + KTR_FILE] ; \
+ SET(l1 ## b, r3, r2) ; \
stx r2, [r1 + KTR_DESC]
#define CATR(mask, desc, r1, r2, r3, l1, l2, l3) \
- TEST(ktr_mask, mask, r1, r2, r3, l3) ; \
+ set mask, r1 ; \
+ TEST(ktr_mask, r1, r2, r2, l3) ; \
+ UPA_GET_MID(r1) ; \
+ mov 1, r2 ; \
+ sllx r2, r1, r1 ; \
+ TEST(ktr_cpumask, r1, r2, r3, l3) ; \
ATR(desc, r1, r2, r3, l1, l2)
-/*
- * XXX crude conditional breakpoint and sir
- */
-#define CBPT(mask, r1, r2, r3, l1) \
- TEST(ktr_mask, mask, r1, r2, r3, l1) ; \
- DEBUGGER() ; \
-l1 ## :
-
-#define CSIR(mask, r1, r2, r3, l1) \
- TEST(ktr_mask, mask, r1, r2, r3, l1) ; \
- sir 42 ; \
-l1 ## :
-
#endif /* LOCORE */
#endif /* !_MACHINE_KTR_H_ */
diff --git a/sys/sparc64/sparc64/genassym.c b/sys/sparc64/sparc64/genassym.c
index 93f700c..1d71d6e 100644
--- a/sys/sparc64/sparc64/genassym.c
+++ b/sys/sparc64/sparc64/genassym.c
@@ -132,6 +132,8 @@ ASSYM(KTR_CT7, KTR_CT7);
ASSYM(KTR_CT8, KTR_CT8);
ASSYM(KTR_SIZEOF, sizeof(struct ktr_entry));
+ASSYM(KTR_LINE, offsetof(struct ktr_entry, ktr_line));
+ASSYM(KTR_FILE, offsetof(struct ktr_entry, ktr_file));
ASSYM(KTR_DESC, offsetof(struct ktr_entry, ktr_desc));
ASSYM(KTR_CPU, offsetof(struct ktr_entry, ktr_cpu));
ASSYM(KTR_TIMESTAMP, offsetof(struct ktr_entry, ktr_timestamp));
OpenPOWER on IntegriCloud