Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 1 | #ifndef FIO_OPTION_H |
| 2 | #define FIO_OPTION_H |
| 3 | |
Jens Axboe | 07b3232 | 2010-03-05 09:48:44 +0100 | [diff] [blame] | 4 | #define FIO_MAX_OPTS 512 |
| 5 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 6 | #include <string.h> |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 7 | #include "parse.h" |
| 8 | #include "flist.h" |
| 9 | |
| 10 | #define td_var_offset(var) ((size_t) &((struct thread_options *)0)->var) |
| 11 | |
Jens Axboe | 07b3232 | 2010-03-05 09:48:44 +0100 | [diff] [blame] | 12 | int add_option(struct fio_option *); |
| 13 | void invalidate_profile_options(const char *); |
| 14 | extern char *exec_profile; |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 15 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 16 | void add_opt_posval(const char *, const char *, const char *); |
| 17 | void del_opt_posval(const char *, const char *); |
Jens Axboe | 7e356b2 | 2011-10-14 10:55:16 +0200 | [diff] [blame] | 18 | struct thread_data; |
| 19 | void fio_options_free(struct thread_data *); |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 20 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 21 | extern struct fio_option fio_options[FIO_MAX_OPTS]; |
| 22 | |
Jens Axboe | f5b6bb8 | 2010-03-05 10:09:59 +0100 | [diff] [blame] | 23 | static inline int o_match(struct fio_option *o, const char *opt) |
| 24 | { |
| 25 | if (!strcmp(o->name, opt)) |
| 26 | return 1; |
| 27 | else if (o->alias && !strcmp(o->alias, opt)) |
| 28 | return 1; |
| 29 | |
| 30 | return 0; |
| 31 | } |
| 32 | |
| 33 | static inline struct fio_option *find_option(struct fio_option *options, |
| 34 | const char *opt) |
| 35 | { |
| 36 | struct fio_option *o; |
| 37 | |
| 38 | for (o = &options[0]; o->name; o++) |
| 39 | if (o_match(o, opt)) |
| 40 | return o; |
| 41 | |
| 42 | return NULL; |
| 43 | } |
| 44 | |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 45 | struct opt_group { |
| 46 | const char *name; |
| 47 | unsigned int mask; |
| 48 | }; |
| 49 | |
| 50 | enum opt_category { |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 51 | __FIO_OPT_C_GENERAL = 0, |
| 52 | __FIO_OPT_C_IO, |
| 53 | __FIO_OPT_C_FILE, |
| 54 | __FIO_OPT_C_STAT, |
| 55 | __FIO_OPT_C_LOG, |
| 56 | __FIO_OPT_C_NR, |
| 57 | |
| 58 | FIO_OPT_C_GENERAL = (1U << __FIO_OPT_C_GENERAL), |
| 59 | FIO_OPT_C_IO = (1U << __FIO_OPT_C_IO), |
| 60 | FIO_OPT_C_FILE = (1U << __FIO_OPT_C_FILE), |
| 61 | FIO_OPT_C_STAT = (1U << __FIO_OPT_C_STAT), |
| 62 | FIO_OPT_C_LOG = (1U << __FIO_OPT_C_LOG), |
| 63 | FIO_OPT_C_INVALID = (1U << __FIO_OPT_C_NR), |
| 64 | }; |
| 65 | |
| 66 | enum opt_category_group { |
| 67 | __FIO_OPT_G_RATE = 0, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 68 | __FIO_OPT_G_ZONE, |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 69 | __FIO_OPT_G_RWMIX, |
| 70 | __FIO_OPT_G_VERIFY, |
| 71 | __FIO_OPT_G_TRIM, |
| 72 | __FIO_OPT_G_IOLOG, |
| 73 | __FIO_OPT_G_IO_DEPTH, |
| 74 | __FIO_OPT_G_IO_FLOW, |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 75 | __FIO_OPT_G_DESC, |
| 76 | __FIO_OPT_G_FILENAME, |
| 77 | __FIO_OPT_G_IO_BASIC, |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame^] | 78 | __FIO_OPT_G_CGROUP, |
| 79 | __FIO_OPT_G_RUNTIME, |
Jens Axboe | e231bbe | 2012-03-16 19:16:27 +0100 | [diff] [blame] | 80 | __FIO_OPT_G_NR, |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 81 | |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 82 | FIO_OPT_G_RATE = (1U << __FIO_OPT_G_RATE), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 83 | FIO_OPT_G_ZONE = (1U << __FIO_OPT_G_ZONE), |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 84 | FIO_OPT_G_RWMIX = (1U << __FIO_OPT_G_RWMIX), |
| 85 | FIO_OPT_G_VERIFY = (1U << __FIO_OPT_G_VERIFY), |
| 86 | FIO_OPT_G_TRIM = (1U << __FIO_OPT_G_TRIM), |
| 87 | FIO_OPT_G_IOLOG = (1U << __FIO_OPT_G_IOLOG), |
| 88 | FIO_OPT_G_IO_DEPTH = (1U << __FIO_OPT_G_IO_DEPTH), |
| 89 | FIO_OPT_G_IO_FLOW = (1U << __FIO_OPT_G_IO_FLOW), |
Jens Axboe | 0626037 | 2012-03-19 15:16:08 +0100 | [diff] [blame] | 90 | FIO_OPT_G_DESC = (1U << __FIO_OPT_G_DESC), |
| 91 | FIO_OPT_G_FILENAME = (1U << __FIO_OPT_G_FILENAME), |
| 92 | FIO_OPT_G_IO_BASIC = (1U << __FIO_OPT_G_IO_BASIC), |
Jens Axboe | a1f6afe | 2012-03-19 20:44:33 +0100 | [diff] [blame^] | 93 | FIO_OPT_G_CGROUP = (1U << __FIO_OPT_G_CGROUP), |
| 94 | FIO_OPT_G_RUNTIME = (1U << __FIO_OPT_G_RUNTIME), |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 95 | FIO_OPT_G_INVALID = (1U << __FIO_OPT_G_NR), |
| 96 | }; |
| 97 | |
| 98 | extern struct opt_group *opt_group_from_mask(unsigned int *mask); |
Jens Axboe | e8b0e95 | 2012-03-19 14:37:08 +0100 | [diff] [blame] | 99 | extern struct opt_group *opt_group_cat_from_mask(unsigned int *mask); |
Jens Axboe | 9af4a24 | 2012-03-16 10:13:49 +0100 | [diff] [blame] | 100 | |
Jens Axboe | 9f988e2 | 2010-03-04 10:42:38 +0100 | [diff] [blame] | 101 | #endif |