aboutsummaryrefslogtreecommitdiffstats
path: root/samples/xilinx_apm/xaxipmon.h
blob: 85e0e902a1c506f2250a80304322b8619e0baa89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
#ifndef XAXIPMON_H /* Prevent circular inclusions */
#define XAXIPMON_H /* by using protection macros  */

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include <stdbool.h>


#define XST_SUCCESS	0
#define XST_FAILURE	1

#ifndef TRUE
#define TRUE		1
#endif

#ifndef FALSE
#define FALSE		0
#endif

#ifndef NULL
#define NULL		0
#endif

#define XAPM_GCC_HIGH_OFFSET		0x0000	/* Global Clock Counter
							32 to 63 bits  */
#define XAPM_GCC_LOW_OFFSET		0x0004	/* Global Clock Counter Lower
							0-31 bits  */
#define XAPM_SI_HIGH_OFFSET		0x0020	/* Sample Interval MSB */
#define XAPM_SI_LOW_OFFSET		0x0024	/* Sample Interval LSB */
#define XAPM_SICR_OFFSET		0x0028	/* Sample Interval Control
							Register */
#define XAPM_SR_OFFSET			0x002C	/* Sample Register */
#define XAPM_GIE_OFFSET			0x0030	/* Global Interrupt Enable
							Register */
#define XAPM_IE_OFFSET			0x0034	/* Interrupt Enable Register */
#define XAPM_IS_OFFSET			0x0038	/* Interrupt Status Register */

#define XAPM_MSR0_OFFSET		0x0044	/* Metric Selector 0 Register*/
#define XAPM_MSR1_OFFSET		0x0048	/* Metric Selector 1 Register*/
#define XAPM_MSR2_OFFSET		0x004C	/* Metric Selector 2 Register*/

#define XAPM_MC0_OFFSET			0x0100	/* Metric Counter 0 Register */
#define XAPM_INC0_OFFSET		0x0104	/* Incrementer 0 Register */
#define XAPM_RANGE0_OFFSET		0x0108	/* Range 0 Register */
#define XAPM_MC0LOGEN_OFFSET		0x010C	/* Metric Counter 0
							Log Enable Register */
#define XAPM_MC1_OFFSET			0x0110	/* Metric Counter 1 Register */
#define XAPM_INC1_OFFSET		0x0114	/* Incrementer 1 Register */
#define XAPM_RANGE1_OFFSET		0x0118	/* Range 1 Register */
#define XAPM_MC1LOGEN_OFFSET		0x011C	/* Metric Counter 1
							Log Enable Register */
#define XAPM_MC2_OFFSET			0x0120	/* Metric Counter 2 Register */
#define XAPM_INC2_OFFSET		0x0124	/* Incrementer 2 Register */
#define XAPM_RANGE2_OFFSET		0x0128	/* Range 2 Register */
#define XAPM_MC2LOGEN_OFFSET		0x012C	/* Metric Counter 2
							Log Enable Register */
#define XAPM_MC3_OFFSET			0x0130	/* Metric Counter 3 Register */
#define XAPM_INC3_OFFSET		0x0134	/* Incrementer 3 Register */
#define XAPM_RANGE3_OFFSET		0x0138	/* Range 3 Register */
#define XAPM_MC3LOGEN_OFFSET		0x013C	/* Metric Counter 3
							Log Enable Register */
#define XAPM_MC4_OFFSET			0x0140	/* Metric Counter 4 Register */
#define XAPM_INC4_OFFSET		0x0144	/* Incrementer 4 Register */
#define XAPM_RANGE4_OFFSET		0x0148	/* Range 4 Register */
#define XAPM_MC4LOGEN_OFFSET		0x014C	/* Metric Counter 4
							Log Enable Register */
#define XAPM_MC5_OFFSET			0x0150	/* Metric Counter 5
							Register */
#define XAPM_INC5_OFFSET		0x0154	/* Incrementer 5 Register */
#define XAPM_RANGE5_OFFSET		0x0158	/* Range 5 Register */
#define XAPM_MC5LOGEN_OFFSET		0x015C	/* Metric Counter 5
							Log Enable Register */
#define XAPM_MC6_OFFSET			0x0160	/* Metric Counter 6
							Register */
#define XAPM_INC6_OFFSET		0x0164	/* Incrementer 6 Register */
#define XAPM_RANGE6_OFFSET		0x0168	/* Range 6 Register */
#define XAPM_MC6LOGEN_OFFSET		0x016C	/* Metric Counter 6
							Log Enable Register */
#define XAPM_MC7_OFFSET			0x0170	/* Metric Counter 7
							Register */
#define XAPM_INC7_OFFSET		0x0174	/* Incrementer 7 Register */
#define XAPM_RANGE7_OFFSET		0x0178	/* Range 7 Register */
#define XAPM_MC7LOGEN_OFFSET		0x017C	/* Metric Counter 7
							Log Enable Register */
#define XAPM_MC8_OFFSET			0x0180	/* Metric Counter 8
							Register */
#define XAPM_INC8_OFFSET		0x0184	/* Incrementer 8 Register */
#define XAPM_RANGE8_OFFSET		0x0188	/* Range 8 Register */
#define XAPM_MC8LOGEN_OFFSET		0x018C	/* Metric Counter 8
							Log Enable Register */
#define XAPM_MC9_OFFSET			0x0190	/* Metric Counter 9
							Register */
#define XAPM_INC9_OFFSET		0x0194	/* Incrementer 9 Register */
#define XAPM_RANGE9_OFFSET		0x0198	/* Range 9 Register */
#define XAPM_MC9LOGEN_OFFSET		0x019C	/* Metric Counter 9
							Log Enable Register */

#define XAPM_MC10_OFFSET		0x01A0	/* Metric Counter 10
							Register */
#define XAPM_MC11_OFFSET		0x01B0	/* Metric Counter 11
							Register */
#define XAPM_MC12_OFFSET		0x0500	/* Metric Counter 12
							Register */
#define XAPM_MC13_OFFSET		0x0510	/* Metric Counter 13
							Register */
#define XAPM_MC14_OFFSET		0x0520	/* Metric Counter 14
							Register */
#define XAPM_MC15_OFFSET		0x0530	/* Metric Counter 15
							Register */
#define XAPM_MC16_OFFSET		0x0540	/* Metric Counter 16
							Register */
#define XAPM_MC17_OFFSET		0x0550	/* Metric Counter 17
							Register */
#define XAPM_MC18_OFFSET		0x0560	/* Metric Counter 18
							Register */
#define XAPM_MC19_OFFSET		0x0570	/* Metric Counter 19
							Register */
#define XAPM_MC20_OFFSET		0x0580	/* Metric Counter 20
							Register */
#define XAPM_MC21_OFFSET		0x0590	/* Metric Counter 21
							Register */
#define XAPM_MC22_OFFSET		0x05A0	/* Metric Counter 22
							Register */
#define XAPM_MC23_OFFSET		0x05B0	/* Metric Counter 23
							Register */
#define XAPM_MC24_OFFSET		0x0700	/* Metric Counter 24
							Register */
#define XAPM_MC25_OFFSET		0x0710	/* Metric Counter 25
							Register */
#define XAPM_MC26_OFFSET		0x0720	/* Metric Counter 26
							Register */
#define XAPM_MC27_OFFSET		0x0730	/* Metric Counter 27
							Register */
#define XAPM_MC28_OFFSET		0x0740	/* Metric Counter 28
							Register */
#define XAPM_MC29_OFFSET		0x0750	/* Metric Counter 29
							Register */
#define XAPM_MC30_OFFSET		0x0760	/* Metric Counter 30
							Register */
#define XAPM_MC31_OFFSET		0x0770	/* Metric Counter 31
							Register */
#define XAPM_MC32_OFFSET		0x0780	/* Metric Counter 32
							Register */
#define XAPM_MC33_OFFSET		0x0790	/* Metric Counter 33
							Register */
#define XAPM_MC34_OFFSET		0x07A0	/* Metric Counter 34
							Register */
#define XAPM_MC35_OFFSET		0x07B0	/* Metric Counter 35
							Register */
#define XAPM_MC36_OFFSET		0x0900	/* Metric Counter 36
							Register */
#define XAPM_MC37_OFFSET		0x0910	/* Metric Counter 37
							Register */
#define XAPM_MC38_OFFSET		0x0920	/* Metric Counter 38
							Register */
#define XAPM_MC39_OFFSET		0x0930	/* Metric Counter 39
							Register */
#define XAPM_MC40_OFFSET		0x0940	/* Metric Counter 40
							Register */
#define XAPM_MC41_OFFSET		0x0950	/* Metric Counter 41
							Register */
#define XAPM_MC42_OFFSET		0x0960	/* Metric Counter 42
							Register */
#define XAPM_MC43_OFFSET		0x0970	/* Metric Counter 43
							Register */
#define XAPM_MC44_OFFSET		0x0980	/* Metric Counter 44
							Register */
#define XAPM_MC45_OFFSET		0x0990	/* Metric Counter 45
							Register */
#define XAPM_MC46_OFFSET		0x09A0	/* Metric Counter 46
							Register */
#define XAPM_MC47_OFFSET		0x09B0	/* Metric Counter 47
							Register */

#define XAPM_SMC0_OFFSET		0x0200	/* Sampled Metric Counter
							0 Register */
#define XAPM_SINC0_OFFSET		0x0204	/* Sampled Incrementer
							0 Register */
#define XAPM_SMC1_OFFSET		0x0210	/* Sampled Metric Counter
							1 Register */
#define XAPM_SINC1_OFFSET		0x0214	/* Sampled Incrementer
							1 Register */
#define XAPM_SMC2_OFFSET		0x0220	/* Sampled Metric Counter
							2 Register */
#define XAPM_SINC2_OFFSET		0x0224	/* Sampled Incrementer
							2 Register */
#define XAPM_SMC3_OFFSET		0x0230	/* Sampled Metric Counter
							3 Register */
#define XAPM_SINC3_OFFSET		0x0234	/* Sampled Incrementer
							3 Register */
#define XAPM_SMC4_OFFSET		0x0240	/* Sampled Metric Counter
							4 Register */
#define XAPM_SINC4_OFFSET		0x0244	/* Sampled Incrementer
							4 Register */
#define XAPM_SMC5_OFFSET		0x0250	/* Sampled Metric Counter
							5 Register */
#define XAPM_SINC5_OFFSET		0x0254	/* Sampled Incrementer
							5 Register */
#define XAPM_SMC6_OFFSET		0x0260	/* Sampled Metric Counter
							6 Register */
#define XAPM_SINC6_OFFSET		0x0264	/* Sampled Incrementer
							6 Register */
#define XAPM_SMC7_OFFSET		0x0270	/* Sampled Metric Counter
							7 Register */
#define XAPM_SINC7_OFFSET		0x0274	/* Sampled Incrementer
							7 Register */
#define XAPM_SMC8_OFFSET		0x0280	/* Sampled Metric Counter
							8 Register */
#define XAPM_SINC8_OFFSET		0x0284	/* Sampled Incrementer
							8 Register */
#define XAPM_SMC9_OFFSET		0x0290	/* Sampled Metric Counter
							9 Register */
#define XAPM_SINC9_OFFSET		0x0294	/* Sampled Incrementer
							9 Register */
#define XAPM_SMC10_OFFSET		0x02A0	/* Sampled Metric Counter
							10 Register */
#define XAPM_SMC11_OFFSET		0x02B0	/* Sampled Metric Counter
							11 Register */
#define XAPM_SMC12_OFFSET		0x0600	/* Sampled Metric Counter
							12 Register */
#define XAPM_SMC13_OFFSET		0x0610	/* Sampled Metric Counter
							13 Register */
#define XAPM_SMC14_OFFSET		0x0620	/* Sampled Metric Counter
							14 Register */
#define XAPM_SMC15_OFFSET		0x0630	/* Sampled Metric Counter
							15 Register */
#define XAPM_SMC16_OFFSET		0x0640	/* Sampled Metric Counter
							16 Register */
#define XAPM_SMC17_OFFSET		0x0650	/* Sampled Metric Counter
							17 Register */
#define XAPM_SMC18_OFFSET		0x0660	/* Sampled Metric Counter
							18 Register */
#define XAPM_SMC19_OFFSET		0x0670	/* Sampled Metric Counter
							19 Register */
#define XAPM_SMC20_OFFSET		0x0680	/* Sampled Metric Counter
							20 Register */
#define XAPM_SMC21_OFFSET		0x0690	/* Sampled Metric Counter
							21 Register */
#define XAPM_SMC22_OFFSET		0x06A0	/* Sampled Metric Counter
							22 Register */
#define XAPM_SMC23_OFFSET		0x06B0	/* Sampled Metric Counter
							23 Register */
#define XAPM_SMC24_OFFSET		0x0800	/* Sampled Metric Counter
							24 Register */
#define XAPM_SMC25_OFFSET		0x0810	/* Sampled Metric Counter
							25 Register */
#define XAPM_SMC26_OFFSET		0x0820	/* Sampled Metric Counter
							26 Register */
#define XAPM_SMC27_OFFSET		0x0830	/* Sampled Metric Counter
							27 Register */
#define XAPM_SMC28_OFFSET		0x0840	/* Sampled Metric Counter
							28 Register */
#define XAPM_SMC29_OFFSET		0x0850	/* Sampled Metric Counter
							29 Register */
#define XAPM_SMC30_OFFSET		0x0860	/* Sampled Metric Counter
							30 Register */
#define XAPM_SMC31_OFFSET		0x0870	/* Sampled Metric Counter
							31 Register */
#define XAPM_SMC32_OFFSET		0x0880	/* Sampled Metric Counter
							32 Register */
#define XAPM_SMC33_OFFSET		0x0890	/* Sampled Metric Counter
							33 Register */
#define XAPM_SMC34_OFFSET		0x08A0	/* Sampled Metric Counter
							34 Register */
#define XAPM_SMC35_OFFSET		0x08B0	/* Sampled Metric Counter
							35 Register */
#define XAPM_SMC36_OFFSET		0x0A00	/* Sampled Metric Counter
							36 Register */
#define XAPM_SMC37_OFFSET		0x0A10	/* Sampled Metric Counter
							37 Register */
#define XAPM_SMC38_OFFSET		0x0A20	/* Sampled Metric Counter
							38 Register */
#define XAPM_SMC39_OFFSET		0x0A30	/* Sampled Metric Counter
							39 Register */
#define XAPM_SMC40_OFFSET		0x0A40	/* Sampled Metric Counter
							40 Register */
#define XAPM_SMC41_OFFSET		0x0A50	/* Sampled Metric Counter
							41 Register */
#define XAPM_SMC42_OFFSET		0x0A60	/* Sampled Metric Counter
							42 Register */
#define XAPM_SMC43_OFFSET		0x0A70	/* Sampled Metric Counter
							43 Register */
#define XAPM_SMC44_OFFSET		0x0A80	/* Sampled Metric Counter
							44 Register */
#define XAPM_SMC45_OFFSET		0x0A90	/* Sampled Metric Counter
							45 Register */
#define XAPM_SMC46_OFFSET		0x0AA0	/* Sampled Metric Counter
							46 Register */
#define XAPM_SMC47_OFFSET		0x0AB0	/* Sampled Metric Counter
							47 Register */

#define XAPM_CTL_OFFSET			0x0300	/* Control Register */

#define XAPM_ID_OFFSET			0x0304	/* Latency ID Register */

#define XAPM_IDMASK_OFFSET		0x0308	/* ID Mask Register */

#define XAPM_RID_OFFSET                 0x030C	/* Latency Write ID Register */

#define XAPM_RIDMASK_OFFSET             0x0310	/* Read ID mask register */

#define XAPM_FEC_OFFSET			0x0400	/* flag Enable
							Control Register */

#define XAPM_SWD_OFFSET			0x0404	/* Software-written
							Data Register */

#define XAPM_SICR_MCNTR_RST_MASK	0x00000100 /* Enable the Metric
							Counter Reset */
#define XAPM_SICR_LOAD_MASK		0x00000002 /* Load the Sample Interval
							Register Value into
							the counter */
#define XAPM_SICR_ENABLE_MASK		0x00000001 /* Enable the downcounter */

#define XAPM_IXR_MC9_OVERFLOW_MASK	0x00001000	/**< Metric Counter 9
							  *  Overflow> */
#define XAPM_IXR_MC8_OVERFLOW_MASK	0x00000800	/**< Metric Counter 8
							  *  Overflow> */
#define XAPM_IXR_MC7_OVERFLOW_MASK	0x00000400	/**< Metric Counter 7
							  *  Overflow> */
#define XAPM_IXR_MC6_OVERFLOW_MASK	0x00000200	/**< Metric Counter 6
							  *  Overflow> */
#define XAPM_IXR_MC5_OVERFLOW_MASK	0x00000100	/**< Metric Counter 5
							  *  Overflow> */
#define XAPM_IXR_MC4_OVERFLOW_MASK	0x00000080	/**< Metric Counter 4
							  *  Overflow> */
#define XAPM_IXR_MC3_OVERFLOW_MASK	0x00000040	/**< Metric Counter 3
							  *  Overflow> */
#define XAPM_IXR_MC2_OVERFLOW_MASK	0x00000020	/**< Metric Counter 2
							  *  Overflow> */
#define XAPM_IXR_MC1_OVERFLOW_MASK	0x00000010	/**< Metric Counter 1
							  *  Overflow> */
#define XAPM_IXR_MC0_OVERFLOW_MASK	0x00000008	/**< Metric Counter 0
							  *  Overflow> */
#define XAPM_IXR_FIFO_FULL_MASK		0x00000004	/**< Event Log FIFO
							  *  full> */
#define XAPM_IXR_SIC_OVERFLOW_MASK	0x00000002	/**< Sample Interval
							  * Counter Overflow */
#define XAPM_IXR_GCC_OVERFLOW_MASK	0x00000001	/**< Global Clock
							Counter Overflow */
#define XAPM_IXR_ALL_MASK		(XAPM_IXR_SIC_OVERFLOW_MASK | \
					XAPM_IXR_GCC_OVERFLOW_MASK |  \
					XAPM_IXR_FIFO_FULL_MASK | \
					XAPM_IXR_MC0_OVERFLOW_MASK | \
					XAPM_IXR_MC1_OVERFLOW_MASK | \
					XAPM_IXR_MC2_OVERFLOW_MASK | \
					XAPM_IXR_MC3_OVERFLOW_MASK | \
					XAPM_IXR_MC4_OVERFLOW_MASK | \
					XAPM_IXR_MC5_OVERFLOW_MASK | \
					XAPM_IXR_MC6_OVERFLOW_MASK | \
					XAPM_IXR_MC7_OVERFLOW_MASK | \
					XAPM_IXR_MC8_OVERFLOW_MASK | \
					XAPM_IXR_MC9_OVERFLOW_MASK)

#define XAPM_CR_FIFO_RESET_MASK			0x02000000
						/**< FIFO Reset */
#define XAPM_CR_MUXSEL_MASK			0x01000000
						/**< Mux Selector mask */
#define XAPM_CR_GCC_RESET_MASK			0x00020000
						/**< Global Clk
						  Counter Reset */
#define XAPM_CR_GCC_ENABLE_MASK			0x00010000
						/**< Global Clk
						   Counter Enable */
#define XAPM_CR_EVTLOG_EXTTRIGGER_MASK		0x00000200
						/**< Enable External trigger
						to start event Log */
#define XAPM_CR_EVENTLOG_ENABLE_MASK		0x00000100
						/**< Event Log Enable */
#define XAPM_CR_RDLATENCY_END_MASK		0x00000080
						/**< Write Latency
							End point */
#define XAPM_CR_RDLATENCY_START_MASK		0x00000040
						/**< Read Latency
							Start point */
#define XAPM_CR_WRLATENCY_END_MASK		0x00000020
						/**< Write Latency
							End point */
#define XAPM_CR_WRLATENCY_START_MASK		0x00000010
						/**< Write Latency
							Start point */
#define XAPM_CR_IDFILTER_ENABLE_MASK		0x00000008
						/**< ID Filter Enable */
#define XAPM_CR_MCNTR_EXTTRIGGER_MASK		0x00000004
						/**< Enable External
						   trigger to start
						   Metric Counters  */
#define XAPM_CR_MCNTR_RESET_MASK		0x00000002
						/**< Metrics Counter
						   Reset */
#define XAPM_CR_MCNTR_ENABLE_MASK		0x00000001
						/**< Metrics Counter
							Enable */

#define XAPM_ID_RID_MASK			0xFFFF0000 /**< Read ID */

#define XAPM_ID_WID_MASK			0x0000FFFF /**< Write ID */

#define XAPM_MASKID_RID_MASK			0xFFFF0000 /**< Read ID Mask */

#define XAPM_MASKID_WID_MASK			0x0000FFFF /**< Write ID Mask*/


#define XAPM_MAX_COUNTERS		10 /**< Maximum number of Counters */
#define XAPM_MAX_COUNTERS_PROFILE	48 /**< Maximum number of Counters in
						profile mode */

#define XAPM_METRIC_COUNTER_0	0 /**< Metric Counter 0 Register Index */
#define XAPM_METRIC_COUNTER_1	1 /**< Metric Counter 1 Register Index */
#define XAPM_METRIC_COUNTER_2	2 /**< Metric Counter 2 Register Index */
#define XAPM_METRIC_COUNTER_3	3 /**< Metric Counter 3 Register Index */
#define XAPM_METRIC_COUNTER_4	4 /**< Metric Counter 4 Register Index */
#define XAPM_METRIC_COUNTER_5	5 /**< Metric Counter 5 Register Index */
#define XAPM_METRIC_COUNTER_6	6 /**< Metric Counter 6 Register Index */
#define XAPM_METRIC_COUNTER_7	7 /**< Metric Counter 7 Register Index */
#define XAPM_METRIC_COUNTER_8	8 /**< Metric Counter 8 Register Index */
#define XAPM_METRIC_COUNTER_9	9 /**< Metric Counter 9 Register Index */

#define XAPM_INCREMENTER_0	0 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_1	1 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_2	2 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_3	3 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_4	4 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_5	5 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_6	6 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_7	7 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_8	8 /**< Metric Counter 0 Register Index */
#define XAPM_INCREMENTER_9	9 /**< Metric Counter 0 Register Index */

#define XAPM_METRIC_SET_0	0 /**< Write Transaction Count */
#define XAPM_METRIC_SET_1	1 /**< Read Transaction Count */
#define XAPM_METRIC_SET_2	2 /**< Write Byte Count */
#define XAPM_METRIC_SET_3	3 /**< Read Byte Count */
#define XAPM_METRIC_SET_4	4 /**< Write Beat Count */
#define XAPM_METRIC_SET_5	5 /**< Total Read Latency */
#define XAPM_METRIC_SET_6	6 /**< Total Write Latency */
#define XAPM_METRIC_SET_7	7 /**< Slv_Wr_Idle_Cnt */
#define XAPM_METRIC_SET_8	8 /**< Mst_Rd_Idle_Cnt */
#define XAPM_METRIC_SET_9	9 /**< Num_BValids */
#define XAPM_METRIC_SET_10	10 /**< Num_WLasts */
#define XAPM_METRIC_SET_11	11 /**< Num_RLasts */
#define XAPM_METRIC_SET_12	12 /**< Minimum Write Latency */
#define XAPM_METRIC_SET_13	13 /**< Maximum Write Latency */
#define XAPM_METRIC_SET_14	14 /**< Minimum Read Latency */
#define XAPM_METRIC_SET_15	15 /**< Maximum Read Latency */
#define XAPM_METRIC_SET_16	16 /**< Transfer Cycle Count */
#define XAPM_METRIC_SET_17	17 /**< Packet Count */
#define XAPM_METRIC_SET_18	18 /**< Data Byte Count */
#define XAPM_METRIC_SET_19	19 /**< Position Byte Count */
#define XAPM_METRIC_SET_20	20 /**< Null Byte Count */
#define XAPM_METRIC_SET_21	21 /**< Slv_Idle_Cnt */
#define XAPM_METRIC_SET_22	22 /**< Mst_Idle_Cnt */
#define XAPM_METRIC_SET_30	30 /**< External event count */

#define XAPM_MAX_AGENTS		8 /**< Maximum number of Agents */

#define XAPM_FLAG_WRADDR	0x00000001 /**< Write Address flag */
#define XAPM_FLAG_FIRSTWR	0x00000002 /**< First Write flag */
#define XAPM_FLAG_LASTWR	0x00000004 /**< Last Write flag */
#define XAPM_FLAG_RESPONSE	0x00000008 /**< Response flag */
#define XAPM_FLAG_RDADDR	0x00000010 /**< Read Address flag */
#define XAPM_FLAG_FIRSTRD	0x00000020 /**< First Read flag */
#define XAPM_FLAG_LASTRD	0x00000040 /**< Last Read flag */
#define XAPM_FLAG_SWDATA	0x00010000 /**< Software-written Data flag */
#define XAPM_FLAG_EVENT		0x00020000 /**< Last Read flag */
#define XAPM_FLAG_EVNTSTOP	0x00040000 /**< Last Read flag */
#define XAPM_FLAG_EVNTSTART	0x00080000 /**< Last Read flag */
#define XAPM_FLAG_GCCOVF	0x00100000 /**< Global Clock Counter Overflow
					     *  flag */
#define XAPM_FLAG_SCLAPSE	0x00200000 /**< Sample Counter Lapse flag */
#define XAPM_FLAG_MC0		0x00400000 /**< Metric Counter 0 flag */
#define XAPM_FLAG_MC1		0x00800000 /**< Metric Counter 1 flag */
#define XAPM_FLAG_MC2		0x01000000 /**< Metric Counter 2 flag */
#define XAPM_FLAG_MC3		0x02000000 /**< Metric Counter 3 flag */
#define XAPM_FLAG_MC4		0x04000000 /**< Metric Counter 4 flag */
#define XAPM_FLAG_MC5		0x08000000 /**< Metric Counter 5 flag */
#define XAPM_FLAG_MC6		0x10000000 /**< Metric Counter 6 flag */
#define XAPM_FLAG_MC7		0x20000000 /**< Metric Counter 7 flag */
#define XAPM_FLAG_MC8		0x40000000 /**< Metric Counter 8 flag */
#define XAPM_FLAG_MC9		0x80000000 /**< Metric Counter 9 flag */

#define XAPM_LATENCY_ADDR_ISSUE		0 /**< Address Issue as start
					point for Latency calculation*/
#define XAPM_LATENCY_ADDR_ACCEPT	1 /**< Address Acceptance as start
					point for Latency calculation*/
#define XAPM_LATENCY_LASTRD		0 /**< Last Read as end point for
					Latency calculation */
#define XAPM_LATENCY_LASTWR		0 /**< Last Write as end point for
					Latency calculation */
#define XAPM_LATENCY_FIRSTRD		1 /**< First Read as end point for
					Latency calculation */
#define XAPM_LATENCY_FIRSTWR		1 /**< First Write as end point for
					Latency calculation */

#define XAPM_MODE_TRACE			2 /**< APM in Trace mode */

#define XAPM_MODE_PROFILE		1 /**< APM in Profile mode */

#define XAPM_MODE_ADVANCED		0 /**< APM in Advanced mode */

typedef unsigned char u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef unsigned long ulong;

ulong baseaddr;

struct xapm_param {
	u32	mode;
	u32	maxslots;
	u32	eventcnt;
	u32	eventlog;
	u32	sampledcnt;
	u32	numcounters;
	u32	metricwidth;
	u32	sampledwidth;
	u32	globalcntwidth;
	u32     scalefactor;
	u32	isr;
	bool	is_32bit_filter;
};

static struct xapm_param *params;

/*****************************************************************************/
/**
*
* Read a register of the AXI Performance Monitor device. This macro provides
* register access to all registers using the register offsets defined above.
*
* @param	baseaddr contains the base address of the device.
* @param	regoffset is the offset of the register to read.
*
* @return	The contents of the register.
*
* @note		C-style Signature:
*		u32 readreg(u32 baseaddr, u32 regoffset);
*
******************************************************************************/
#define readreg(baseaddr, regoffset) \
			(*(u32 *)(baseaddr + regoffset))

/*****************************************************************************/
/**
*
* Write a register of the AXI Performance Monitor device. This macro provides
* register access to all registers using the register offsets defined above.
*
* @param	baseaddr contains the base address of the device.
* @param	regoffset is the offset of the register to write.
* @param	data is the value to write to the register.
*
* @return	None.
*
* @note		C-style Signature:
*		void writereg(u32 baseaddr,
*					u32 regoffset,u32 Data)
*
******************************************************************************/
#define writereg(baseaddr, regoffset, data) \
				(*(u32 *)(baseaddr + regoffset) = data)

/****************************************************************************/
/**
*
* This routine enables the Global Interrupt.
*
* @note		C-Style signature:
*		void intrglobalenable()
*
*****************************************************************************/
#define intrglobalenable()			\
		writereg(baseaddr, XAPM_GIE_OFFSET, 1)


/****************************************************************************/
/**
*
* This routine disables the Global Interrupt.
*
* @note		C-Style signature:
*		void intrglobaldisable(void)
*
*****************************************************************************/
#define intrglobaldisable()				\
		writereg(baseaddr, XAPM_GIE_OFFSET, 0)

/****************************************************************************/
/**
*
* This routine enables interrupt(s). Use the XAPM_IXR_* constants defined in
* xaxipmon_hw.h to create the bit-mask to enable interrupts.
*
* @param	mask is the mask to enable. Bit positions of 1 will be enabled.
*		Bit positions of 0 will keep the previous setting. This mask is
*		formed by OR'ing XAPM_IXR__* bits defined in xaxipmon_hw.h.
*
* @return	None.
*
* @note		C-Style signature:
*		void intrenable(u32 mask)
*
*****************************************************************************/
#define intrenable(mask)				     \
	writereg(baseaddr, XAPM_IE_OFFSET, readreg(baseaddr, \
			XAPM_IE_OFFSET) | mask);


/****************************************************************************/
/**
*
* This routine disable interrupt(s). Use the XAPM_IXR_* constants defined in
* xaxipmon_hw.h to create the bit-mask to disable interrupts.
*
* @param	mask is the mask to disable. Bit positions of 1 will be
*		disabled. Bit positions of 0 will keep the previous setting.
*		This mask is formed by OR'ing XAPM_IXR_* bits defined in
*		xaxipmon_hw.h.
*
* @return	None.
*
* @note		C-Style signature:
*		void intrdisable(u32 mask)
*
*****************************************************************************/
#define intrdisable(mask)				     \
	writereg(baseaddr, XAPM_IE_OFFSET, readreg(baseaddr, \
						XAPM_IE_OFFSET) | mask);

/****************************************************************************/
/**
*
* This routine clears the specified interrupt(s).
*
* @param	mask is the mask to clear. Bit positions of 1 will be cleared.
*		This mask is formed by OR'ing XAPM_IXR_* bits defined in
*		xaxipmon_hw.h.
*
* @return	None.
*
* @note		C-Style signature:
*		void intrclear(u32 mask)
*
*****************************************************************************/
#define intrclear(mask)				     \
	writereg(baseaddr, XAPM_IS_OFFSET, readreg(baseaddr, \
				XAPM_IS_OFFSET) | mask);

/****************************************************************************/
/**
*
* This routine returns the Interrupt Status Register.
*
* @return	isr value updated by kernel driver
*
* @note		This macro returns isr value updated by kernel driver.
*		C-Style signature:
*		void intrgetstatus(void)
*
*****************************************************************************/
#define intrgetstatus()		(params->isr)

/****************************************************************************/
/**
*
* This routine returns the Interrupt Status Register.
*
* @return       Interrupt Status Register contents
*
* @note         C-Style signature:
*               void intrhwgetstatus(void)
*
*****************************************************************************/
#define intrhwgetstatus()         (params->isr)

/****************************************************************************/
/**
*
* This function enables the Global Clock Counter.
*
* @note		C-Style signature:
*		void enablegcc(void);
*
*****************************************************************************/
#define enablegcc() \
	writereg(baseaddr, XAPM_CTL_OFFSET, readreg(baseaddr, \
			XAPM_CTL_OFFSET) | XAPM_CR_GCC_ENABLE_MASK);

/****************************************************************************/
/**
*
* This function disbles the Global Clock Counter.
*
* @note		C-Style signature:
*		void disablegcc(void);
*
*****************************************************************************/
#define disablegcc() \
	writereg(baseaddr, XAPM_CTL_OFFSET, readreg(baseaddr, \
			XAPM_CTL_OFFSET) & ~(XAPM_CR_GCC_ENABLE_MASK));

/****************************************************************************/
/**
*
* This function enables the specified flag in flag Control Register.
*
* @param	flag is one of the XAPM_FLAG_* masks defined in xaxipmon.h
*
* @return	None
*
* @note		C-Style signature:
*		void enableflag(void);
*
*****************************************************************************/
#define enableflag(flag) \
	writereg(baseaddr, XAPM_FEC_OFFSET, \
			readreg(baseaddr, XAPM_FEC_OFFSET) | flag);

/****************************************************************************/
/**
*
* This function disables the specified flag in flag Control Register.
*
* @param	flag is one of the XAPM_FLAG_* masks defined in xaxipmon.h*
* @return	None
*
* @note		C-Style signature:
*		void disableflag(void);
*
*****************************************************************************/
#define disableflag(flag) \
	writereg(baseaddr, XAPM_FEC_OFFSET, \
			readreg(baseaddr, XAPM_FEC_OFFSET) & ~(flag));

/****************************************************************************/
/**
*
* This function loads the sample interval register value into the sample
* interval counter.
*
* @note		C-Style signature:
*		void loadsic(void);
*
*****************************************************************************/
#define loadsic() \
		writereg(baseaddr, XAPM_SICR_OFFSET, XAPM_SICR_LOAD_MASK)


/****************************************************************************/
/**
*
* This enables the down count of the sample interval counter.
*
* @note		C-Style signature:
*	   void enablesic(void);
*
*****************************************************************************/
#define enablesic() \
	writereg(baseaddr, XAPM_SICR_OFFSET, XAPM_SICR_ENABLE_MASK)

/****************************************************************************/
/**
*
* This disables the down count of the sample interval counter.
*
* @note		C-Style signature:
*	    void disablesic(void);
*
*****************************************************************************/
#define disablesic() \
	writereg(baseaddr, XAPM_SICR_OFFSET, \
	readreg(baseaddr, XAPM_SICR_OFFSET) & ~(XAPM_SICR_ENABLE_MASK));

/****************************************************************************/
/**
*
* This enables Reset of Metric Counters when Sample Interval Counter lapses.
*
* @note		C-Style signature:
*		void enablemcreset(void);
*
*****************************************************************************/
#define enablemcreset() \
	writereg(baseaddr, XAPM_SICR_OFFSET, XAPM_SICR_MCNTR_RST_MASK);

/****************************************************************************/
/**
*
* This disables the down count of the sample interval counter.
*
* @note		C-Style signature:
*		void disablemcreset(void);
*
*****************************************************************************/
#define disablemcreset() \
	writereg(baseaddr, XAPM_SICR_OFFSET, \
	readreg(baseaddr, XAPM_SICR_OFFSET) & ~(XAPM_SICR_MCNTR_RST_MASK));

/****************************************************************************/
/**
*
* This function enables the ID Filter Masking.
*
* @note		C-Style signature:
*		void enableidfilter(void);
*
*****************************************************************************/
#define enableidfilter()			\
	writereg(baseaddr, XAPM_CTL_OFFSET, readreg(baseaddr, \
			XAPM_CTL_OFFSET) | XAPM_CR_IDFILTER_ENABLE_MASK);

/****************************************************************************/
/**
*
* This function disbles the ID Filter masking.
*
* @note		C-Style signature:
*		void disableidfilter(void);
*
*****************************************************************************/
#define disableidfilter() \
	writereg(baseaddr, XAPM_CTL_OFFSET, readreg(baseaddr, \
			XAPM_CTL_OFFSET) & ~(XAPM_CR_IDFILTER_ENABLE_MASK));

/****************************************************************************/
/**
*
* This function samples Metric Counters to Sampled Metric Counters by
* reading Sample Register and also returns interval. i.e. the number of
* clocks in between previous read to the current read of sample register.
*
* @return	Interval. i.e. the number of clocks in between previous
*		read to the current read of sample register.
*
* @note		C-Style signature:
*		u32 samplemetrics(void);
*
*****************************************************************************/
#define samplemetrics()		readreg(baseaddr, XAPM_SR_OFFSET);


/************************** Function Prototypes *****************************/

int resetmetriccounter(void);

void resetglobalclkcounter(void);

int resetfifo(void);

void setincrementerrange(u8 incrementer, u16 rangehigh, u16 rangelow);

void getincrementerrange(u8 incrementer, u16 *rangehigh, u16 *rangelow);

void setsampleinterval(u32 sampleinterval);

void getsampleinterval(u32 *sampleinterval);

int setmetrics(u8 slot, u8 metrics, u8 counter);

int getmetrics(u8 counter, u8 *metrics, u8 *slot);
void getglobalclkcounter(u32 *cnthigh, u32 *cntlow);

u32 getmetriccounter(u32 counter);

u32 getsampledmetriccounter(u32 counter);

u32 getincrementer(u32 incrementer);

u32 getsampledincrementer(u32 incrementer);

void setswdatareg(u32 swdata);

u32 getswdatareg(void);

int starteventlog(u32 flagenables);

int stopeventlog(void);

int startcounters(u32 sampleinterval);

int stopcounters(void);

void enablemetricscounter(void);

void disablemetricscounter(void);

void setlogenableranges(u32 counter, u16 rangehigh, u16 rangelow);

void getlogenableranges(u32 counter, u16 *rangehigh, u16 *rangelow);

void enableeventlog(void);

void enablemctrigger(void);

void disablemctrigger(void);

void enableeventlogtrigger(void);

void disableeventlogtrigger(void);

const char *getmetricname(u8 metrics);

void setwriteid(u32 writeid);

void setreadid(u32 readid);

u32 getwriteid(void);

u32 getreadid(void);

void setwrlatencystart(u8 param);

void setwrlatencyend(u8 param);

void setrdlatencystart(u8 param);

void setrdlatencyend(u8 param);

u8 getwrlatencystart(void);

u8 getwrlatencyend(void);

u8 getrdlatencystart(void);

u8 getrdlatencyend(void);

void setwriteidmask(u32 wrmask);

void setreadidmask(u32 rdmask);

u32 getwriteidmask(void);

u32 getreadidmask(void);


#ifdef __cplusplus
}
#endif

#endif  /* End of protection macro. */