2 * linux/include/linux/switches.h
4 * Copyright (C) 2000 John Dorsey
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 * 23 October 2000 - created.
13 #if !defined(_LINUX_SWITCHES_H)
14 #define _LINUX_SWITCHES_H
16 #define SWITCHES_MASK_SIZE (128)
18 typedef unsigned long switches_bitfield;
20 #define SWITCHES_BITS (sizeof(switches_bitfield) * 8)
21 #define SWITCHES_NUM_FIELDS (SWITCHES_MASK_SIZE / SWITCHES_BITS)
22 #define SWITCHES_FIELD_SELECT(i) ((i) / SWITCHES_BITS)
23 #define SWITCHES_FIELD_MASK(i) ((switches_bitfield)(1 << (i) % \
26 typedef struct switches_mask_t {
28 switches_bitfield events[SWITCHES_NUM_FIELDS];
29 switches_bitfield states[SWITCHES_NUM_FIELDS];
32 #define SWITCHES_ZERO(m) \
36 for(sz_i = 0; sz_i < SWITCHES_NUM_FIELDS; ++sz_i) \
37 (m)->events[sz_i] = (m)->states[sz_i] = 0; \
40 /* `s' is the state of the switch, either 0 or non-zero: */
41 #define SWITCHES_SET(m, i, s) \
43 ((m)->events[SWITCHES_FIELD_SELECT((i))] |= \
44 SWITCHES_FIELD_MASK((i))); \
46 ((m)->states[SWITCHES_FIELD_SELECT((i))] |= \
47 SWITCHES_FIELD_MASK((i))); \
49 ((m)->states[SWITCHES_FIELD_SELECT((i))] &= \
50 ~SWITCHES_FIELD_MASK((i))); \
54 /* Should only use to clear an event set by SWITCHES_SET(): */
55 #define SWITCHES_CLEAR(m, i) \
57 ((m)->events[SWITCHES_FIELD_SELECT((i))] &= \
58 ~SWITCHES_FIELD_MASK((i))); \
59 ((m)->states[SWITCHES_FIELD_SELECT((i))] &= \
60 ~SWITCHES_FIELD_MASK((i))); \
64 #define SWITCHES_COUNT(m) ((m)->count)
66 /* Returns 0 or non-zero: */
67 #define SWITCHES_EVENT(m, i) \
68 ((m)->events[SWITCHES_FIELD_SELECT((i))] & SWITCHES_FIELD_MASK((i)))
70 /* Returns 0 or non-zero: */
71 #define SWITCHES_STATE(m, i) \
72 ((m)->states[SWITCHES_FIELD_SELECT((i))] & SWITCHES_FIELD_MASK((i)))
74 #endif /* !defined(_LINUX_SWITCHES_H) */