• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 
5 union stcke {
6 	unsigned long buffer[2];
7 	struct reader {
8 		char pad;
9 		unsigned long long time;
10 		int time2;
11 		short program;
12 	} __attribute__ ((packed)) reader;
13 };
14 
stcke(unsigned long * addr)15 int stcke(unsigned long *addr)
16 {
17 
18 	int cc;
19 	asm volatile (	"stcke %0\n"
20 			"ipm %1\n"
21 			"srl %1, 28\n"
22 		      :"+Q" (*addr), "=d"(cc)::"cc");
23 
24 	return cc;
25 }
26 
clockticks_in_msec(unsigned long b,unsigned long a)27 unsigned long clockticks_in_msec(unsigned long b, unsigned long a)
28 {
29 	return (b -a ) / 4096000UL;
30 }
31 
main()32 int main()
33 {
34 	union stcke start, end;
35 	int cc;
36 
37 	cc = stcke(start.buffer);
38 	if (cc)
39 		printf("cc != 0!\n");
40 
41 	sleep(1);
42 	cc = stcke(end.buffer);
43 	if (cc)
44 		printf("cc != 0!\n");
45 
46 	unsigned long c = clockticks_in_msec(end.reader.time,
47 					     start.reader.time);
48 
49 	if (c >= 1000 && c < 1500)
50 		printf("OK.....Testcase passed\n");
51 	else
52 		printf("FAILED.....Testcase failed\n");
53 
54 	return 0;
55 
56 }
57