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 #include <sys/ioccom.h> 31 32 #define TBRIDGE_LOADTEST _IOW('T', 0xBB, struct plistref) 33 #define TBRIDGE_GETRESULT _IOR('T', 0xBC, struct plistref) 34 35 #if defined(_KERNEL) 36 37 /* 38 * XXX: This is a bit messy - these defines MUST match the ones found in 39 * dfregress.h!!!! 40 */ 41 #define RESULT_TIMEOUT 0x01 42 #define RESULT_SIGNALLED 0x02 43 #define RESULT_NOTRUN 0x03 44 #define RESULT_FAIL 0x04 45 #define RESULT_PASS 0x05 46 #define RESULT_UNKNOWN 0x06 47 #define RESULT_PREFAIL 0x07 48 #define RESULT_POSTFAIL 0x08 49 #define RESULT_BUILDFAIL 0x09 50 51 typedef int (*tbridge_abort_t)(void); 52 typedef void (*tbridge_run_t)(void *); 53 54 struct tbridge_testcase { 55 tbridge_abort_t tb_abort; 56 tbridge_run_t tb_run; 57 }; 58 59 int tbridge_printf(const char *fmt, ...) __printflike(1, 2); 60 void tbridge_test_done(int result); 61 62 /* safemem functions */ 63 void *_alloc_safe_mem(size_t req_sz, const char *file, int line); 64 void _free_safe_mem(void *mem, const char *file, int line); 65 void check_and_purge_safe_mem(void); 66 void safemem_reset_error_count(void); 67 int safemem_get_error_count(void); 68 69 #define alloc_testcase_mem(x) \ 70 _alloc_safe_mem(x, __FILE__, __LINE__) 71 72 #define free_testcase_mem(x) \ 73 _free_safe_mem(x, __FILE__, __LINE__) 74 75 76 77 /* module magic */ 78 int tbridge_testcase_modhandler(module_t mod, int type, void *arg); 79 80 #define TBRIDGE_TESTCASE_MODULE(name, testcase) \ 81 static moduledata_t name##_mod = { \ 82 #name, \ 83 tbridge_testcase_modhandler, \ 84 testcase \ 85 }; \ 86 DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY); \ 87 MODULE_DEPEND(name, testbridge, 1, 1, 1); \ 88 MODULE_VERSION(name, 1) 89 90 #endif 91