1 /* 2 * Copyright (c) 2011 Alex Hornung <alex@alexhornung.com>. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 19 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 20 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 22 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 24 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 26 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 #define TBRIDGE_LOADTEST _IOW('T', 0xBB, struct plistref) 31 #define TBRIDGE_GETRESULT _IOR('T', 0xBC, struct plistref) 32 33 #if defined(_KERNEL) 34 35 /* 36 * XXX: This is a bit messy - these defines MUST match the ones found in 37 * dfregress.h!!!! 38 */ 39 #define RESULT_TIMEOUT 0x01 40 #define RESULT_SIGNALLED 0x02 41 #define RESULT_NOTRUN 0x03 42 #define RESULT_FAIL 0x04 43 #define RESULT_PASS 0x05 44 #define RESULT_UNKNOWN 0x06 45 #define RESULT_PREFAIL 0x07 46 #define RESULT_POSTFAIL 0x08 47 #define RESULT_BUILDFAIL 0x09 48 49 typedef int (*tbridge_abort_t)(void); 50 typedef void (*tbridge_run_t)(void *); 51 52 struct tbridge_testcase { 53 tbridge_abort_t tb_abort; 54 tbridge_run_t tb_run; 55 }; 56 57 int tbridge_printf(const char *fmt, ...) __printflike(1, 2); 58 void tbridge_test_done(int result); 59 60 /* safemem functions */ 61 void *_alloc_safe_mem(size_t req_sz, const char *file, int line); 62 void _free_safe_mem(void *mem, const char *file, int line); 63 void check_and_purge_safe_mem(void); 64 void safemem_reset_error_count(void); 65 int safemem_get_error_count(void); 66 67 #define alloc_testcase_mem(x) \ 68 _alloc_safe_mem(x, __FILE__, __LINE__) 69 70 #define free_testcase_mem(x) \ 71 _free_safe_mem(x, __FILE__, __LINE__) 72 73 74 75 /* module magic */ 76 int tbridge_testcase_modhandler(module_t mod, int type, void *arg); 77 78 #define TBRIDGE_TESTCASE_MODULE(name, testcase) \ 79 static moduledata_t name##_mod = { \ 80 #name, \ 81 tbridge_testcase_modhandler, \ 82 testcase \ 83 }; \ 84 DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) 85 86 #endif 87