1e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include <string.h>
2e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#include "blktrace.h"
3e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
4e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#define DECLARE_MASK_MAP(mask)          { BLK_TC_##mask, #mask, "BLK_TC_"#mask }
5e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat#define COMPARE_MASK_MAP(mmp, str)                                      \
6e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat        (!strcasecmp((mmp)->short_form, (str)) ||                      \
7e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat         !strcasecmp((mmp)->long_form, (str)))
8e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
9e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehatstruct mask_map {
10e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	int mask;
11e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	char *short_form;
12e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	char *long_form;
13e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat};
14e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
15e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehatstatic struct mask_map mask_maps[] = {
16e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(READ),
17e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(WRITE),
18e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(BARRIER),
19e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(SYNC),
20e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(QUEUE),
21e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(REQUEUE),
22e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(ISSUE),
23e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(COMPLETE),
24e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(FS),
25e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(PC),
26e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(NOTIFY),
27e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(AHEAD),
28e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(META),
29e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(DISCARD),
30e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	DECLARE_MASK_MAP(DRV_DATA),
31e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat};
32e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
33e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehatint find_mask_map(char *string)
34e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat{
35e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	unsigned int i;
36e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
37e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	for (i = 0; i < sizeof(mask_maps)/sizeof(mask_maps[0]); i++)
38e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat		if (COMPARE_MASK_MAP(&mask_maps[i], string))
39e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat			return mask_maps[i].mask;
40e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
41e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	return -1;
42e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat}
43e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat
44e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehatint valid_act_opt(int x)
45e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat{
46e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat	return (1 <= x) && (x < (1 << BLK_TC_SHIFT));
47e20e1347b9914aa05e30548c15d7cd5e412cc0e2San Mehat}
48