xref: /aosp_15_r20/external/blktrace/btreplay/btrecord.h (revision 1a3d31e37cc95e9919fd86900a2b6a555f55952c)
1*1a3d31e3SAndroid Build Coastguard Worker /*
2*1a3d31e3SAndroid Build Coastguard Worker  * Blktrace record utility - Convert binary trace data into bunches of IOs
3*1a3d31e3SAndroid Build Coastguard Worker  *
4*1a3d31e3SAndroid Build Coastguard Worker  * Copyright (C) 2007 Alan D. Brunelle <[email protected]>
5*1a3d31e3SAndroid Build Coastguard Worker  *
6*1a3d31e3SAndroid Build Coastguard Worker  *  This program is free software; you can redistribute it and/or modify
7*1a3d31e3SAndroid Build Coastguard Worker  *  it under the terms of the GNU General Public License as published by
8*1a3d31e3SAndroid Build Coastguard Worker  *  the Free Software Foundation; either version 2 of the License, or
9*1a3d31e3SAndroid Build Coastguard Worker  *  (at your option) any later version.
10*1a3d31e3SAndroid Build Coastguard Worker  *
11*1a3d31e3SAndroid Build Coastguard Worker  *  This program is distributed in the hope that it will be useful,
12*1a3d31e3SAndroid Build Coastguard Worker  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*1a3d31e3SAndroid Build Coastguard Worker  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*1a3d31e3SAndroid Build Coastguard Worker  *  GNU General Public License for more details.
15*1a3d31e3SAndroid Build Coastguard Worker  *
16*1a3d31e3SAndroid Build Coastguard Worker  *  You should have received a copy of the GNU General Public License
17*1a3d31e3SAndroid Build Coastguard Worker  *  along with this program; if not, write to the Free Software
18*1a3d31e3SAndroid Build Coastguard Worker  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19*1a3d31e3SAndroid Build Coastguard Worker  */
20*1a3d31e3SAndroid Build Coastguard Worker 
21*1a3d31e3SAndroid Build Coastguard Worker #if !defined(__BTRECORD_H__)
22*1a3d31e3SAndroid Build Coastguard Worker #define __BTRECORD_H__
23*1a3d31e3SAndroid Build Coastguard Worker 
24*1a3d31e3SAndroid Build Coastguard Worker #include <asm/types.h>
25*1a3d31e3SAndroid Build Coastguard Worker 
26*1a3d31e3SAndroid Build Coastguard Worker #define BT_MAX_PKTS	512
27*1a3d31e3SAndroid Build Coastguard Worker 
28*1a3d31e3SAndroid Build Coastguard Worker /*
29*1a3d31e3SAndroid Build Coastguard Worker  * Header for each bunch
30*1a3d31e3SAndroid Build Coastguard Worker  *
31*1a3d31e3SAndroid Build Coastguard Worker  * @nkts: 	Number of IO packets to process
32*1a3d31e3SAndroid Build Coastguard Worker  * @time_stamp:	Time stamp for this bunch of IOs
33*1a3d31e3SAndroid Build Coastguard Worker  */
34*1a3d31e3SAndroid Build Coastguard Worker struct io_bunch_hdr {
35*1a3d31e3SAndroid Build Coastguard Worker 	__u64 npkts;
36*1a3d31e3SAndroid Build Coastguard Worker 	__u64 time_stamp;
37*1a3d31e3SAndroid Build Coastguard Worker };
38*1a3d31e3SAndroid Build Coastguard Worker 
39*1a3d31e3SAndroid Build Coastguard Worker /*
40*1a3d31e3SAndroid Build Coastguard Worker  * IO specifer
41*1a3d31e3SAndroid Build Coastguard Worker  *
42*1a3d31e3SAndroid Build Coastguard Worker  * @sector:	Sector number of IO
43*1a3d31e3SAndroid Build Coastguard Worker  * @nbytes:	Number of bytes to process
44*1a3d31e3SAndroid Build Coastguard Worker  * @rw:		IO direction: 0 = write, 1 = read
45*1a3d31e3SAndroid Build Coastguard Worker  */
46*1a3d31e3SAndroid Build Coastguard Worker struct io_pkt {
47*1a3d31e3SAndroid Build Coastguard Worker 	__u64 sector;
48*1a3d31e3SAndroid Build Coastguard Worker 	__u64 nbytes;
49*1a3d31e3SAndroid Build Coastguard Worker 	__u32 rw;
50*1a3d31e3SAndroid Build Coastguard Worker };
51*1a3d31e3SAndroid Build Coastguard Worker 
52*1a3d31e3SAndroid Build Coastguard Worker /*
53*1a3d31e3SAndroid Build Coastguard Worker  * Shorthand notion of a bunch of IOs
54*1a3d31e3SAndroid Build Coastguard Worker  *
55*1a3d31e3SAndroid Build Coastguard Worker  * @hdr: 	Header describing stall and how many IO packets follow
56*1a3d31e3SAndroid Build Coastguard Worker  * @pkts: 	Individual IOs are described here
57*1a3d31e3SAndroid Build Coastguard Worker  */
58*1a3d31e3SAndroid Build Coastguard Worker struct io_bunch {
59*1a3d31e3SAndroid Build Coastguard Worker 	struct io_bunch_hdr hdr;
60*1a3d31e3SAndroid Build Coastguard Worker 	struct io_pkt pkts[BT_MAX_PKTS];
61*1a3d31e3SAndroid Build Coastguard Worker };
62*1a3d31e3SAndroid Build Coastguard Worker 
63*1a3d31e3SAndroid Build Coastguard Worker /*
64*1a3d31e3SAndroid Build Coastguard Worker  * Header for each recorded file
65*1a3d31e3SAndroid Build Coastguard Worker  *
66*1a3d31e3SAndroid Build Coastguard Worker  * @version:	Version information
67*1a3d31e3SAndroid Build Coastguard Worker  * @genesis:	Time stamp for earliest bunch
68*1a3d31e3SAndroid Build Coastguard Worker  * @nbunches:	Number of bunches put into the file
69*1a3d31e3SAndroid Build Coastguard Worker  * @total_pkts:	Number of packets to be processed
70*1a3d31e3SAndroid Build Coastguard Worker  */
71*1a3d31e3SAndroid Build Coastguard Worker struct io_file_hdr {
72*1a3d31e3SAndroid Build Coastguard Worker 	__u64 version;
73*1a3d31e3SAndroid Build Coastguard Worker 	__u64 genesis;
74*1a3d31e3SAndroid Build Coastguard Worker 	__u64 nbunches;
75*1a3d31e3SAndroid Build Coastguard Worker 	__u64 total_pkts;
76*1a3d31e3SAndroid Build Coastguard Worker };
77*1a3d31e3SAndroid Build Coastguard Worker 
mk_btversion(int mjr,int mnr,int sub)78*1a3d31e3SAndroid Build Coastguard Worker static inline __u64 mk_btversion(int mjr, int mnr, int sub)
79*1a3d31e3SAndroid Build Coastguard Worker {
80*1a3d31e3SAndroid Build Coastguard Worker 	return ((mjr & 0xff) << 16) | ((mnr & 0xff) << 8) | (sub & 0xff);
81*1a3d31e3SAndroid Build Coastguard Worker }
82*1a3d31e3SAndroid Build Coastguard Worker 
get_btversion(__u64 version,int * mjr,int * mnr,int * sub)83*1a3d31e3SAndroid Build Coastguard Worker static inline void get_btversion(__u64 version, int *mjr, int *mnr, int *sub)
84*1a3d31e3SAndroid Build Coastguard Worker {
85*1a3d31e3SAndroid Build Coastguard Worker 	*mjr = (int)((version >> 16) & 0xff);
86*1a3d31e3SAndroid Build Coastguard Worker 	*mnr = (int)((version >>  8) & 0xff);
87*1a3d31e3SAndroid Build Coastguard Worker 	*sub = (int)((version >>  0) & 0xff);
88*1a3d31e3SAndroid Build Coastguard Worker }
89*1a3d31e3SAndroid Build Coastguard Worker 
90*1a3d31e3SAndroid Build Coastguard Worker static char my_btversion[] = "1.0.0";
91*1a3d31e3SAndroid Build Coastguard Worker static int btver_mjr = 1;
92*1a3d31e3SAndroid Build Coastguard Worker static int btver_mnr = 0;
93*1a3d31e3SAndroid Build Coastguard Worker static int btver_sub = 0;
94*1a3d31e3SAndroid Build Coastguard Worker 
95*1a3d31e3SAndroid Build Coastguard Worker #endif
96