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