1*74fe6c29SRuslan Bukin /* 2*74fe6c29SRuslan Bukin * Copyright (c) 2014-2018, Intel Corporation 3*74fe6c29SRuslan Bukin * 4*74fe6c29SRuslan Bukin * Redistribution and use in source and binary forms, with or without 5*74fe6c29SRuslan Bukin * modification, are permitted provided that the following conditions are met: 6*74fe6c29SRuslan Bukin * 7*74fe6c29SRuslan Bukin * * Redistributions of source code must retain the above copyright notice, 8*74fe6c29SRuslan Bukin * this list of conditions and the following disclaimer. 9*74fe6c29SRuslan Bukin * * Redistributions in binary form must reproduce the above copyright notice, 10*74fe6c29SRuslan Bukin * this list of conditions and the following disclaimer in the documentation 11*74fe6c29SRuslan Bukin * and/or other materials provided with the distribution. 12*74fe6c29SRuslan Bukin * * Neither the name of Intel Corporation nor the names of its contributors 13*74fe6c29SRuslan Bukin * may be used to endorse or promote products derived from this software 14*74fe6c29SRuslan Bukin * without specific prior written permission. 15*74fe6c29SRuslan Bukin * 16*74fe6c29SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17*74fe6c29SRuslan Bukin * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*74fe6c29SRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*74fe6c29SRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20*74fe6c29SRuslan Bukin * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*74fe6c29SRuslan Bukin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*74fe6c29SRuslan Bukin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23*74fe6c29SRuslan Bukin * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24*74fe6c29SRuslan Bukin * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25*74fe6c29SRuslan Bukin * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26*74fe6c29SRuslan Bukin * POSSIBILITY OF SUCH DAMAGE. 27*74fe6c29SRuslan Bukin */ 28*74fe6c29SRuslan Bukin 29*74fe6c29SRuslan Bukin #include "pt_time.h" 30*74fe6c29SRuslan Bukin 31*74fe6c29SRuslan Bukin #include "intel-pt.h" 32*74fe6c29SRuslan Bukin 33*74fe6c29SRuslan Bukin #include "ptunit.h" 34*74fe6c29SRuslan Bukin 35*74fe6c29SRuslan Bukin 36*74fe6c29SRuslan Bukin /* A time unit test fixture. */ 37*74fe6c29SRuslan Bukin 38*74fe6c29SRuslan Bukin struct time_fixture { 39*74fe6c29SRuslan Bukin /* The configuration to use. */ 40*74fe6c29SRuslan Bukin struct pt_config config; 41*74fe6c29SRuslan Bukin 42*74fe6c29SRuslan Bukin /* The calibration to use. */ 43*74fe6c29SRuslan Bukin struct pt_time_cal tcal; 44*74fe6c29SRuslan Bukin 45*74fe6c29SRuslan Bukin /* The time struct to update. */ 46*74fe6c29SRuslan Bukin struct pt_time time; 47*74fe6c29SRuslan Bukin 48*74fe6c29SRuslan Bukin /* The test fixture initialization and finalization functions. */ 49*74fe6c29SRuslan Bukin struct ptunit_result (*init)(struct time_fixture *); 50*74fe6c29SRuslan Bukin struct ptunit_result (*fini)(struct time_fixture *); 51*74fe6c29SRuslan Bukin }; 52*74fe6c29SRuslan Bukin 53*74fe6c29SRuslan Bukin static struct ptunit_result tfix_init(struct time_fixture *tfix) 54*74fe6c29SRuslan Bukin { 55*74fe6c29SRuslan Bukin memset(&tfix->config, 0, sizeof(tfix->config)); 56*74fe6c29SRuslan Bukin tfix->config.size = sizeof(tfix->config); 57*74fe6c29SRuslan Bukin tfix->config.cpuid_0x15_eax = 2; 58*74fe6c29SRuslan Bukin tfix->config.cpuid_0x15_ebx = 1; 59*74fe6c29SRuslan Bukin tfix->config.mtc_freq = 4; 60*74fe6c29SRuslan Bukin 61*74fe6c29SRuslan Bukin pt_tcal_init(&tfix->tcal); 62*74fe6c29SRuslan Bukin pt_tcal_set_fcr(&tfix->tcal, 0x2ull << pt_tcal_fcr_shr); 63*74fe6c29SRuslan Bukin 64*74fe6c29SRuslan Bukin pt_time_init(&tfix->time); 65*74fe6c29SRuslan Bukin 66*74fe6c29SRuslan Bukin return ptu_passed(); 67*74fe6c29SRuslan Bukin } 68*74fe6c29SRuslan Bukin 69*74fe6c29SRuslan Bukin 70*74fe6c29SRuslan Bukin static struct ptunit_result tsc_null(struct time_fixture *tfix) 71*74fe6c29SRuslan Bukin { 72*74fe6c29SRuslan Bukin struct pt_packet_tsc packet; 73*74fe6c29SRuslan Bukin int errcode; 74*74fe6c29SRuslan Bukin 75*74fe6c29SRuslan Bukin errcode = pt_time_update_tsc(NULL, &packet, &tfix->config); 76*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 77*74fe6c29SRuslan Bukin 78*74fe6c29SRuslan Bukin errcode = pt_time_update_tsc(&tfix->time, NULL, &tfix->config); 79*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 80*74fe6c29SRuslan Bukin 81*74fe6c29SRuslan Bukin return ptu_passed(); 82*74fe6c29SRuslan Bukin } 83*74fe6c29SRuslan Bukin 84*74fe6c29SRuslan Bukin static struct ptunit_result cbr_null(struct time_fixture *tfix) 85*74fe6c29SRuslan Bukin { 86*74fe6c29SRuslan Bukin struct pt_packet_cbr packet; 87*74fe6c29SRuslan Bukin int errcode; 88*74fe6c29SRuslan Bukin 89*74fe6c29SRuslan Bukin errcode = pt_time_update_cbr(NULL, &packet, &tfix->config); 90*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 91*74fe6c29SRuslan Bukin 92*74fe6c29SRuslan Bukin errcode = pt_time_update_cbr(&tfix->time, NULL, &tfix->config); 93*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 94*74fe6c29SRuslan Bukin 95*74fe6c29SRuslan Bukin return ptu_passed(); 96*74fe6c29SRuslan Bukin } 97*74fe6c29SRuslan Bukin 98*74fe6c29SRuslan Bukin static struct ptunit_result tma_null(struct time_fixture *tfix) 99*74fe6c29SRuslan Bukin { 100*74fe6c29SRuslan Bukin struct pt_packet_tma packet; 101*74fe6c29SRuslan Bukin int errcode; 102*74fe6c29SRuslan Bukin 103*74fe6c29SRuslan Bukin errcode = pt_time_update_tma(NULL, &packet, &tfix->config); 104*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 105*74fe6c29SRuslan Bukin 106*74fe6c29SRuslan Bukin errcode = pt_time_update_tma(&tfix->time, NULL, &tfix->config); 107*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 108*74fe6c29SRuslan Bukin 109*74fe6c29SRuslan Bukin errcode = pt_time_update_tma(&tfix->time, &packet, NULL); 110*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 111*74fe6c29SRuslan Bukin 112*74fe6c29SRuslan Bukin return ptu_passed(); 113*74fe6c29SRuslan Bukin } 114*74fe6c29SRuslan Bukin 115*74fe6c29SRuslan Bukin static struct ptunit_result mtc_null(struct time_fixture *tfix) 116*74fe6c29SRuslan Bukin { 117*74fe6c29SRuslan Bukin struct pt_packet_mtc packet; 118*74fe6c29SRuslan Bukin int errcode; 119*74fe6c29SRuslan Bukin 120*74fe6c29SRuslan Bukin errcode = pt_time_update_mtc(NULL, &packet, &tfix->config); 121*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 122*74fe6c29SRuslan Bukin 123*74fe6c29SRuslan Bukin errcode = pt_time_update_mtc(&tfix->time, NULL, &tfix->config); 124*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 125*74fe6c29SRuslan Bukin 126*74fe6c29SRuslan Bukin errcode = pt_time_update_mtc(&tfix->time, &packet, NULL); 127*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 128*74fe6c29SRuslan Bukin 129*74fe6c29SRuslan Bukin return ptu_passed(); 130*74fe6c29SRuslan Bukin } 131*74fe6c29SRuslan Bukin 132*74fe6c29SRuslan Bukin static struct ptunit_result cyc_null(struct time_fixture *tfix) 133*74fe6c29SRuslan Bukin { 134*74fe6c29SRuslan Bukin struct pt_packet_cyc packet; 135*74fe6c29SRuslan Bukin int errcode; 136*74fe6c29SRuslan Bukin 137*74fe6c29SRuslan Bukin errcode = pt_time_update_cyc(NULL, &packet, &tfix->config, 0ull); 138*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 139*74fe6c29SRuslan Bukin 140*74fe6c29SRuslan Bukin errcode = pt_time_update_cyc(&tfix->time, NULL, &tfix->config, 0ull); 141*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 142*74fe6c29SRuslan Bukin 143*74fe6c29SRuslan Bukin errcode = pt_time_update_cyc(&tfix->time, &packet, NULL, 0ull); 144*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 145*74fe6c29SRuslan Bukin 146*74fe6c29SRuslan Bukin return ptu_passed(); 147*74fe6c29SRuslan Bukin } 148*74fe6c29SRuslan Bukin 149*74fe6c29SRuslan Bukin static struct ptunit_result query_tsc_null(struct time_fixture *tfix) 150*74fe6c29SRuslan Bukin { 151*74fe6c29SRuslan Bukin uint64_t tsc; 152*74fe6c29SRuslan Bukin int errcode; 153*74fe6c29SRuslan Bukin 154*74fe6c29SRuslan Bukin errcode = pt_time_query_tsc(NULL, NULL, NULL, &tfix->time); 155*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 156*74fe6c29SRuslan Bukin 157*74fe6c29SRuslan Bukin errcode = pt_time_query_tsc(&tsc, NULL, NULL, NULL); 158*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 159*74fe6c29SRuslan Bukin 160*74fe6c29SRuslan Bukin return ptu_passed(); 161*74fe6c29SRuslan Bukin } 162*74fe6c29SRuslan Bukin 163*74fe6c29SRuslan Bukin static struct ptunit_result query_tsc_none(struct time_fixture *tfix) 164*74fe6c29SRuslan Bukin { 165*74fe6c29SRuslan Bukin uint64_t tsc; 166*74fe6c29SRuslan Bukin int errcode; 167*74fe6c29SRuslan Bukin 168*74fe6c29SRuslan Bukin errcode = pt_time_query_tsc(&tsc, NULL, NULL, &tfix->time); 169*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_no_time); 170*74fe6c29SRuslan Bukin 171*74fe6c29SRuslan Bukin return ptu_passed(); 172*74fe6c29SRuslan Bukin } 173*74fe6c29SRuslan Bukin 174*74fe6c29SRuslan Bukin static struct ptunit_result query_cbr_null(struct time_fixture *tfix) 175*74fe6c29SRuslan Bukin { 176*74fe6c29SRuslan Bukin uint32_t cbr; 177*74fe6c29SRuslan Bukin int errcode; 178*74fe6c29SRuslan Bukin 179*74fe6c29SRuslan Bukin errcode = pt_time_query_cbr(NULL, &tfix->time); 180*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 181*74fe6c29SRuslan Bukin 182*74fe6c29SRuslan Bukin errcode = pt_time_query_cbr(&cbr, NULL); 183*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 184*74fe6c29SRuslan Bukin 185*74fe6c29SRuslan Bukin return ptu_passed(); 186*74fe6c29SRuslan Bukin } 187*74fe6c29SRuslan Bukin 188*74fe6c29SRuslan Bukin static struct ptunit_result query_cbr_none(struct time_fixture *tfix) 189*74fe6c29SRuslan Bukin { 190*74fe6c29SRuslan Bukin uint32_t cbr; 191*74fe6c29SRuslan Bukin int errcode; 192*74fe6c29SRuslan Bukin 193*74fe6c29SRuslan Bukin errcode = pt_time_query_cbr(&cbr, &tfix->time); 194*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_no_cbr); 195*74fe6c29SRuslan Bukin 196*74fe6c29SRuslan Bukin return ptu_passed(); 197*74fe6c29SRuslan Bukin } 198*74fe6c29SRuslan Bukin 199*74fe6c29SRuslan Bukin static struct ptunit_result tcal_cbr_null(struct time_fixture *tfix) 200*74fe6c29SRuslan Bukin { 201*74fe6c29SRuslan Bukin struct pt_packet_cbr packet; 202*74fe6c29SRuslan Bukin int errcode; 203*74fe6c29SRuslan Bukin 204*74fe6c29SRuslan Bukin errcode = pt_tcal_update_cbr(NULL, &packet, &tfix->config); 205*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 206*74fe6c29SRuslan Bukin 207*74fe6c29SRuslan Bukin return ptu_passed(); 208*74fe6c29SRuslan Bukin } 209*74fe6c29SRuslan Bukin 210*74fe6c29SRuslan Bukin static struct ptunit_result tcal_mtc_null(struct time_fixture *tfix) 211*74fe6c29SRuslan Bukin { 212*74fe6c29SRuslan Bukin struct pt_packet_mtc packet; 213*74fe6c29SRuslan Bukin int errcode; 214*74fe6c29SRuslan Bukin 215*74fe6c29SRuslan Bukin errcode = pt_tcal_update_mtc(NULL, &packet, &tfix->config); 216*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 217*74fe6c29SRuslan Bukin 218*74fe6c29SRuslan Bukin errcode = pt_tcal_update_mtc(&tfix->tcal, NULL, &tfix->config); 219*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 220*74fe6c29SRuslan Bukin 221*74fe6c29SRuslan Bukin errcode = pt_tcal_update_mtc(&tfix->tcal, &packet, NULL); 222*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 223*74fe6c29SRuslan Bukin 224*74fe6c29SRuslan Bukin return ptu_passed(); 225*74fe6c29SRuslan Bukin } 226*74fe6c29SRuslan Bukin 227*74fe6c29SRuslan Bukin static struct ptunit_result tcal_cyc_null(struct time_fixture *tfix) 228*74fe6c29SRuslan Bukin { 229*74fe6c29SRuslan Bukin struct pt_packet_cyc packet; 230*74fe6c29SRuslan Bukin int errcode; 231*74fe6c29SRuslan Bukin 232*74fe6c29SRuslan Bukin errcode = pt_tcal_update_cyc(NULL, &packet, &tfix->config); 233*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 234*74fe6c29SRuslan Bukin 235*74fe6c29SRuslan Bukin errcode = pt_tcal_update_cyc(&tfix->tcal, NULL, &tfix->config); 236*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal); 237*74fe6c29SRuslan Bukin 238*74fe6c29SRuslan Bukin return ptu_passed(); 239*74fe6c29SRuslan Bukin } 240*74fe6c29SRuslan Bukin 241*74fe6c29SRuslan Bukin static struct ptunit_result tsc(struct time_fixture *tfix) 242*74fe6c29SRuslan Bukin { 243*74fe6c29SRuslan Bukin struct pt_packet_tsc packet; 244*74fe6c29SRuslan Bukin uint64_t tsc; 245*74fe6c29SRuslan Bukin uint32_t lost_mtc, lost_cyc; 246*74fe6c29SRuslan Bukin int errcode; 247*74fe6c29SRuslan Bukin 248*74fe6c29SRuslan Bukin packet.tsc = 0xdedededeull; 249*74fe6c29SRuslan Bukin 250*74fe6c29SRuslan Bukin errcode = pt_time_update_tsc(&tfix->time, &packet, &tfix->config); 251*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 252*74fe6c29SRuslan Bukin 253*74fe6c29SRuslan Bukin errcode = pt_time_query_tsc(&tsc, &lost_mtc, &lost_cyc, &tfix->time); 254*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 255*74fe6c29SRuslan Bukin 256*74fe6c29SRuslan Bukin ptu_uint_eq(tsc, 0xdedededeull); 257*74fe6c29SRuslan Bukin ptu_uint_eq(lost_mtc, 0); 258*74fe6c29SRuslan Bukin ptu_uint_eq(lost_cyc, 0); 259*74fe6c29SRuslan Bukin 260*74fe6c29SRuslan Bukin return ptu_passed(); 261*74fe6c29SRuslan Bukin } 262*74fe6c29SRuslan Bukin 263*74fe6c29SRuslan Bukin static struct ptunit_result cbr(struct time_fixture *tfix) 264*74fe6c29SRuslan Bukin { 265*74fe6c29SRuslan Bukin struct pt_packet_cbr packet; 266*74fe6c29SRuslan Bukin uint32_t cbr; 267*74fe6c29SRuslan Bukin int errcode; 268*74fe6c29SRuslan Bukin 269*74fe6c29SRuslan Bukin packet.ratio = 0x38; 270*74fe6c29SRuslan Bukin 271*74fe6c29SRuslan Bukin errcode = pt_time_update_cbr(&tfix->time, &packet, &tfix->config); 272*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 273*74fe6c29SRuslan Bukin 274*74fe6c29SRuslan Bukin errcode = pt_time_query_cbr(&cbr, &tfix->time); 275*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 276*74fe6c29SRuslan Bukin 277*74fe6c29SRuslan Bukin ptu_uint_eq(cbr, 0x38); 278*74fe6c29SRuslan Bukin 279*74fe6c29SRuslan Bukin return ptu_passed(); 280*74fe6c29SRuslan Bukin } 281*74fe6c29SRuslan Bukin 282*74fe6c29SRuslan Bukin static struct ptunit_result tma(struct time_fixture *tfix) 283*74fe6c29SRuslan Bukin { 284*74fe6c29SRuslan Bukin struct pt_packet_tma packet; 285*74fe6c29SRuslan Bukin int errcode; 286*74fe6c29SRuslan Bukin 287*74fe6c29SRuslan Bukin packet.ctc = 0xdc; 288*74fe6c29SRuslan Bukin packet.fc = 0xf; 289*74fe6c29SRuslan Bukin 290*74fe6c29SRuslan Bukin errcode = pt_time_update_tma(&tfix->time, &packet, &tfix->config); 291*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_bad_context); 292*74fe6c29SRuslan Bukin 293*74fe6c29SRuslan Bukin return ptu_passed(); 294*74fe6c29SRuslan Bukin } 295*74fe6c29SRuslan Bukin 296*74fe6c29SRuslan Bukin static struct ptunit_result mtc(struct time_fixture *tfix) 297*74fe6c29SRuslan Bukin { 298*74fe6c29SRuslan Bukin struct pt_packet_mtc packet; 299*74fe6c29SRuslan Bukin uint64_t tsc; 300*74fe6c29SRuslan Bukin int errcode; 301*74fe6c29SRuslan Bukin 302*74fe6c29SRuslan Bukin packet.ctc = 0xdc; 303*74fe6c29SRuslan Bukin 304*74fe6c29SRuslan Bukin errcode = pt_time_update_mtc(&tfix->time, &packet, &tfix->config); 305*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 306*74fe6c29SRuslan Bukin 307*74fe6c29SRuslan Bukin errcode = pt_time_query_tsc(&tsc, NULL, NULL, &tfix->time); 308*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_no_time); 309*74fe6c29SRuslan Bukin 310*74fe6c29SRuslan Bukin return ptu_passed(); 311*74fe6c29SRuslan Bukin } 312*74fe6c29SRuslan Bukin 313*74fe6c29SRuslan Bukin static struct ptunit_result cyc(struct time_fixture *tfix) 314*74fe6c29SRuslan Bukin { 315*74fe6c29SRuslan Bukin struct pt_packet_cyc packet; 316*74fe6c29SRuslan Bukin uint64_t fcr, tsc; 317*74fe6c29SRuslan Bukin int errcode; 318*74fe6c29SRuslan Bukin 319*74fe6c29SRuslan Bukin errcode = pt_tcal_fcr(&fcr, &tfix->tcal); 320*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 321*74fe6c29SRuslan Bukin 322*74fe6c29SRuslan Bukin packet.value = 0xdc; 323*74fe6c29SRuslan Bukin 324*74fe6c29SRuslan Bukin errcode = pt_time_update_cyc(&tfix->time, &packet, &tfix->config, fcr); 325*74fe6c29SRuslan Bukin ptu_int_eq(errcode, 0); 326*74fe6c29SRuslan Bukin 327*74fe6c29SRuslan Bukin errcode = pt_time_query_tsc(&tsc, NULL, NULL, &tfix->time); 328*74fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_no_time); 329*74fe6c29SRuslan Bukin 330*74fe6c29SRuslan Bukin return ptu_passed(); 331*74fe6c29SRuslan Bukin } 332*74fe6c29SRuslan Bukin 333*74fe6c29SRuslan Bukin 334*74fe6c29SRuslan Bukin int main(int argc, char **argv) 335*74fe6c29SRuslan Bukin { 336*74fe6c29SRuslan Bukin struct ptunit_suite suite; 337*74fe6c29SRuslan Bukin struct time_fixture tfix; 338*74fe6c29SRuslan Bukin 339*74fe6c29SRuslan Bukin suite = ptunit_mk_suite(argc, argv); 340*74fe6c29SRuslan Bukin 341*74fe6c29SRuslan Bukin tfix.init = tfix_init; 342*74fe6c29SRuslan Bukin tfix.fini = NULL; 343*74fe6c29SRuslan Bukin 344*74fe6c29SRuslan Bukin ptu_run_f(suite, tsc_null, tfix); 345*74fe6c29SRuslan Bukin ptu_run_f(suite, cbr_null, tfix); 346*74fe6c29SRuslan Bukin ptu_run_f(suite, tma_null, tfix); 347*74fe6c29SRuslan Bukin ptu_run_f(suite, mtc_null, tfix); 348*74fe6c29SRuslan Bukin ptu_run_f(suite, cyc_null, tfix); 349*74fe6c29SRuslan Bukin 350*74fe6c29SRuslan Bukin ptu_run_f(suite, query_tsc_null, tfix); 351*74fe6c29SRuslan Bukin ptu_run_f(suite, query_tsc_none, tfix); 352*74fe6c29SRuslan Bukin ptu_run_f(suite, query_cbr_null, tfix); 353*74fe6c29SRuslan Bukin ptu_run_f(suite, query_cbr_none, tfix); 354*74fe6c29SRuslan Bukin 355*74fe6c29SRuslan Bukin ptu_run_f(suite, tcal_cbr_null, tfix); 356*74fe6c29SRuslan Bukin ptu_run_f(suite, tcal_mtc_null, tfix); 357*74fe6c29SRuslan Bukin ptu_run_f(suite, tcal_cyc_null, tfix); 358*74fe6c29SRuslan Bukin 359*74fe6c29SRuslan Bukin ptu_run_f(suite, tsc, tfix); 360*74fe6c29SRuslan Bukin ptu_run_f(suite, cbr, tfix); 361*74fe6c29SRuslan Bukin ptu_run_f(suite, tma, tfix); 362*74fe6c29SRuslan Bukin ptu_run_f(suite, mtc, tfix); 363*74fe6c29SRuslan Bukin ptu_run_f(suite, cyc, tfix); 364*74fe6c29SRuslan Bukin 365*74fe6c29SRuslan Bukin /* The bulk is covered in ptt tests. */ 366*74fe6c29SRuslan Bukin 367*74fe6c29SRuslan Bukin return ptunit_report(&suite); 368*74fe6c29SRuslan Bukin } 369