diff options
author | Sean Young <sean@mess.org> | 2018-05-27 07:24:10 -0400 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-05-30 06:40:14 -0400 |
commit | 6bdd533cee9aadbcd476af30bfff079abe68fcdb (patch) | |
tree | a153475f8949a8c9d6340b4f52c37b8912d0622d /tools/include | |
parent | f4364dcfc86df7c1ca47b256eaf6b6d0cdd0d936 (diff) |
bpf: add selftest for lirc_mode2 type program
This is simple test over rc-loopback.
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'tools/include')
-rw-r--r-- | tools/include/uapi/linux/bpf.h | 79 | ||||
-rw-r--r-- | tools/include/uapi/linux/lirc.h | 217 |
2 files changed, 282 insertions, 14 deletions
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 3f556b35ac8d..64ac0f7a689e 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h | |||
@@ -143,6 +143,7 @@ enum bpf_prog_type { | |||
143 | BPF_PROG_TYPE_RAW_TRACEPOINT, | 143 | BPF_PROG_TYPE_RAW_TRACEPOINT, |
144 | BPF_PROG_TYPE_CGROUP_SOCK_ADDR, | 144 | BPF_PROG_TYPE_CGROUP_SOCK_ADDR, |
145 | BPF_PROG_TYPE_LWT_SEG6LOCAL, | 145 | BPF_PROG_TYPE_LWT_SEG6LOCAL, |
146 | BPF_PROG_TYPE_LIRC_MODE2, | ||
146 | }; | 147 | }; |
147 | 148 | ||
148 | enum bpf_attach_type { | 149 | enum bpf_attach_type { |
@@ -162,6 +163,7 @@ enum bpf_attach_type { | |||
162 | BPF_CGROUP_INET6_POST_BIND, | 163 | BPF_CGROUP_INET6_POST_BIND, |
163 | BPF_CGROUP_UDP4_SENDMSG, | 164 | BPF_CGROUP_UDP4_SENDMSG, |
164 | BPF_CGROUP_UDP6_SENDMSG, | 165 | BPF_CGROUP_UDP6_SENDMSG, |
166 | BPF_LIRC_MODE2, | ||
165 | __MAX_BPF_ATTACH_TYPE | 167 | __MAX_BPF_ATTACH_TYPE |
166 | }; | 168 | }; |
167 | 169 | ||
@@ -1852,10 +1854,10 @@ union bpf_attr { | |||
1852 | * If lookup is successful and result shows packet is to be | 1854 | * If lookup is successful and result shows packet is to be |
1853 | * forwarded, the neighbor tables are searched for the nexthop. | 1855 | * forwarded, the neighbor tables are searched for the nexthop. |
1854 | * If successful (ie., FIB lookup shows forwarding and nexthop | 1856 | * If successful (ie., FIB lookup shows forwarding and nexthop |
1855 | * is resolved), the nexthop address is returned in ipv4_dst, | 1857 | * is resolved), the nexthop address is returned in ipv4_dst |
1856 | * ipv6_dst or mpls_out based on family, smac is set to mac | 1858 | * or ipv6_dst based on family, smac is set to mac address of |
1857 | * address of egress device, dmac is set to nexthop mac address, | 1859 | * egress device, dmac is set to nexthop mac address, rt_metric |
1858 | * rt_metric is set to metric from route. | 1860 | * is set to metric from route (IPv4/IPv6 only). |
1859 | * | 1861 | * |
1860 | * *plen* argument is the size of the passed in struct. | 1862 | * *plen* argument is the size of the passed in struct. |
1861 | * *flags* argument can be a combination of one or more of the | 1863 | * *flags* argument can be a combination of one or more of the |
@@ -2005,6 +2007,53 @@ union bpf_attr { | |||
2005 | * direct packet access. | 2007 | * direct packet access. |
2006 | * Return | 2008 | * Return |
2007 | * 0 on success, or a negative error in case of failure. | 2009 | * 0 on success, or a negative error in case of failure. |
2010 | * | ||
2011 | * int bpf_rc_keydown(void *ctx, u32 protocol, u64 scancode, u32 toggle) | ||
2012 | * Description | ||
2013 | * This helper is used in programs implementing IR decoding, to | ||
2014 | * report a successfully decoded key press with *scancode*, | ||
2015 | * *toggle* value in the given *protocol*. The scancode will be | ||
2016 | * translated to a keycode using the rc keymap, and reported as | ||
2017 | * an input key down event. After a period a key up event is | ||
2018 | * generated. This period can be extended by calling either | ||
2019 | * **bpf_rc_keydown** () again with the same values, or calling | ||
2020 | * **bpf_rc_repeat** (). | ||
2021 | * | ||
2022 | * Some protocols include a toggle bit, in case the button was | ||
2023 | * released and pressed again between consecutive scancodes. | ||
2024 | * | ||
2025 | * The *ctx* should point to the lirc sample as passed into | ||
2026 | * the program. | ||
2027 | * | ||
2028 | * The *protocol* is the decoded protocol number (see | ||
2029 | * **enum rc_proto** for some predefined values). | ||
2030 | * | ||
2031 | * This helper is only available is the kernel was compiled with | ||
2032 | * the **CONFIG_BPF_LIRC_MODE2** configuration option set to | ||
2033 | * "**y**". | ||
2034 | * | ||
2035 | * Return | ||
2036 | * 0 | ||
2037 | * | ||
2038 | * int bpf_rc_repeat(void *ctx) | ||
2039 | * Description | ||
2040 | * This helper is used in programs implementing IR decoding, to | ||
2041 | * report a successfully decoded repeat key message. This delays | ||
2042 | * the generation of a key up event for previously generated | ||
2043 | * key down event. | ||
2044 | * | ||
2045 | * Some IR protocols like NEC have a special IR message for | ||
2046 | * repeating last button, for when a button is held down. | ||
2047 | * | ||
2048 | * The *ctx* should point to the lirc sample as passed into | ||
2049 | * the program. | ||
2050 | * | ||
2051 | * This helper is only available is the kernel was compiled with | ||
2052 | * the **CONFIG_BPF_LIRC_MODE2** configuration option set to | ||
2053 | * "**y**". | ||
2054 | * | ||
2055 | * Return | ||
2056 | * 0 | ||
2008 | */ | 2057 | */ |
2009 | #define __BPF_FUNC_MAPPER(FN) \ | 2058 | #define __BPF_FUNC_MAPPER(FN) \ |
2010 | FN(unspec), \ | 2059 | FN(unspec), \ |
@@ -2083,7 +2132,9 @@ union bpf_attr { | |||
2083 | FN(lwt_push_encap), \ | 2132 | FN(lwt_push_encap), \ |
2084 | FN(lwt_seg6_store_bytes), \ | 2133 | FN(lwt_seg6_store_bytes), \ |
2085 | FN(lwt_seg6_adjust_srh), \ | 2134 | FN(lwt_seg6_adjust_srh), \ |
2086 | FN(lwt_seg6_action), | 2135 | FN(lwt_seg6_action), \ |
2136 | FN(rc_repeat), \ | ||
2137 | FN(rc_keydown), | ||
2087 | 2138 | ||
2088 | /* integer value in 'imm' field of BPF_CALL instruction selects which helper | 2139 | /* integer value in 'imm' field of BPF_CALL instruction selects which helper |
2089 | * function eBPF program intends to call | 2140 | * function eBPF program intends to call |
@@ -2537,8 +2588,10 @@ struct bpf_raw_tracepoint_args { | |||
2537 | #define BPF_FIB_LOOKUP_OUTPUT BIT(1) | 2588 | #define BPF_FIB_LOOKUP_OUTPUT BIT(1) |
2538 | 2589 | ||
2539 | struct bpf_fib_lookup { | 2590 | struct bpf_fib_lookup { |
2540 | /* input */ | 2591 | /* input: network family for lookup (AF_INET, AF_INET6) |
2541 | __u8 family; /* network family, AF_INET, AF_INET6, AF_MPLS */ | 2592 | * output: network family of egress nexthop |
2593 | */ | ||
2594 | __u8 family; | ||
2542 | 2595 | ||
2543 | /* set if lookup is to consider L4 data - e.g., FIB rules */ | 2596 | /* set if lookup is to consider L4 data - e.g., FIB rules */ |
2544 | __u8 l4_protocol; | 2597 | __u8 l4_protocol; |
@@ -2554,22 +2607,20 @@ struct bpf_fib_lookup { | |||
2554 | __u8 tos; /* AF_INET */ | 2607 | __u8 tos; /* AF_INET */ |
2555 | __be32 flowlabel; /* AF_INET6 */ | 2608 | __be32 flowlabel; /* AF_INET6 */ |
2556 | 2609 | ||
2557 | /* output: metric of fib result */ | 2610 | /* output: metric of fib result (IPv4/IPv6 only) */ |
2558 | __u32 rt_metric; | 2611 | __u32 rt_metric; |
2559 | }; | 2612 | }; |
2560 | 2613 | ||
2561 | union { | 2614 | union { |
2562 | __be32 mpls_in; | ||
2563 | __be32 ipv4_src; | 2615 | __be32 ipv4_src; |
2564 | __u32 ipv6_src[4]; /* in6_addr; network order */ | 2616 | __u32 ipv6_src[4]; /* in6_addr; network order */ |
2565 | }; | 2617 | }; |
2566 | 2618 | ||
2567 | /* input to bpf_fib_lookup, *dst is destination address. | 2619 | /* input to bpf_fib_lookup, ipv{4,6}_dst is destination address in |
2568 | * output: bpf_fib_lookup sets to gateway address | 2620 | * network header. output: bpf_fib_lookup sets to gateway address |
2621 | * if FIB lookup returns gateway route | ||
2569 | */ | 2622 | */ |
2570 | union { | 2623 | union { |
2571 | /* return for MPLS lookups */ | ||
2572 | __be32 mpls_out[4]; /* support up to 4 labels */ | ||
2573 | __be32 ipv4_dst; | 2624 | __be32 ipv4_dst; |
2574 | __u32 ipv6_dst[4]; /* in6_addr; network order */ | 2625 | __u32 ipv6_dst[4]; /* in6_addr; network order */ |
2575 | }; | 2626 | }; |
diff --git a/tools/include/uapi/linux/lirc.h b/tools/include/uapi/linux/lirc.h new file mode 100644 index 000000000000..f189931042a7 --- /dev/null +++ b/tools/include/uapi/linux/lirc.h | |||
@@ -0,0 +1,217 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
2 | /* | ||
3 | * lirc.h - linux infrared remote control header file | ||
4 | * last modified 2010/07/13 by Jarod Wilson | ||
5 | */ | ||
6 | |||
7 | #ifndef _LINUX_LIRC_H | ||
8 | #define _LINUX_LIRC_H | ||
9 | |||
10 | #include <linux/types.h> | ||
11 | #include <linux/ioctl.h> | ||
12 | |||
13 | #define PULSE_BIT 0x01000000 | ||
14 | #define PULSE_MASK 0x00FFFFFF | ||
15 | |||
16 | #define LIRC_MODE2_SPACE 0x00000000 | ||
17 | #define LIRC_MODE2_PULSE 0x01000000 | ||
18 | #define LIRC_MODE2_FREQUENCY 0x02000000 | ||
19 | #define LIRC_MODE2_TIMEOUT 0x03000000 | ||
20 | |||
21 | #define LIRC_VALUE_MASK 0x00FFFFFF | ||
22 | #define LIRC_MODE2_MASK 0xFF000000 | ||
23 | |||
24 | #define LIRC_SPACE(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_SPACE) | ||
25 | #define LIRC_PULSE(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_PULSE) | ||
26 | #define LIRC_FREQUENCY(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_FREQUENCY) | ||
27 | #define LIRC_TIMEOUT(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_TIMEOUT) | ||
28 | |||
29 | #define LIRC_VALUE(val) ((val)&LIRC_VALUE_MASK) | ||
30 | #define LIRC_MODE2(val) ((val)&LIRC_MODE2_MASK) | ||
31 | |||
32 | #define LIRC_IS_SPACE(val) (LIRC_MODE2(val) == LIRC_MODE2_SPACE) | ||
33 | #define LIRC_IS_PULSE(val) (LIRC_MODE2(val) == LIRC_MODE2_PULSE) | ||
34 | #define LIRC_IS_FREQUENCY(val) (LIRC_MODE2(val) == LIRC_MODE2_FREQUENCY) | ||
35 | #define LIRC_IS_TIMEOUT(val) (LIRC_MODE2(val) == LIRC_MODE2_TIMEOUT) | ||
36 | |||
37 | /* used heavily by lirc userspace */ | ||
38 | #define lirc_t int | ||
39 | |||
40 | /*** lirc compatible hardware features ***/ | ||
41 | |||
42 | #define LIRC_MODE2SEND(x) (x) | ||
43 | #define LIRC_SEND2MODE(x) (x) | ||
44 | #define LIRC_MODE2REC(x) ((x) << 16) | ||
45 | #define LIRC_REC2MODE(x) ((x) >> 16) | ||
46 | |||
47 | #define LIRC_MODE_RAW 0x00000001 | ||
48 | #define LIRC_MODE_PULSE 0x00000002 | ||
49 | #define LIRC_MODE_MODE2 0x00000004 | ||
50 | #define LIRC_MODE_SCANCODE 0x00000008 | ||
51 | #define LIRC_MODE_LIRCCODE 0x00000010 | ||
52 | |||
53 | |||
54 | #define LIRC_CAN_SEND_RAW LIRC_MODE2SEND(LIRC_MODE_RAW) | ||
55 | #define LIRC_CAN_SEND_PULSE LIRC_MODE2SEND(LIRC_MODE_PULSE) | ||
56 | #define LIRC_CAN_SEND_MODE2 LIRC_MODE2SEND(LIRC_MODE_MODE2) | ||
57 | #define LIRC_CAN_SEND_LIRCCODE LIRC_MODE2SEND(LIRC_MODE_LIRCCODE) | ||
58 | |||
59 | #define LIRC_CAN_SEND_MASK 0x0000003f | ||
60 | |||
61 | #define LIRC_CAN_SET_SEND_CARRIER 0x00000100 | ||
62 | #define LIRC_CAN_SET_SEND_DUTY_CYCLE 0x00000200 | ||
63 | #define LIRC_CAN_SET_TRANSMITTER_MASK 0x00000400 | ||
64 | |||
65 | #define LIRC_CAN_REC_RAW LIRC_MODE2REC(LIRC_MODE_RAW) | ||
66 | #define LIRC_CAN_REC_PULSE LIRC_MODE2REC(LIRC_MODE_PULSE) | ||
67 | #define LIRC_CAN_REC_MODE2 LIRC_MODE2REC(LIRC_MODE_MODE2) | ||
68 | #define LIRC_CAN_REC_SCANCODE LIRC_MODE2REC(LIRC_MODE_SCANCODE) | ||
69 | #define LIRC_CAN_REC_LIRCCODE LIRC_MODE2REC(LIRC_MODE_LIRCCODE) | ||
70 | |||
71 | #define LIRC_CAN_REC_MASK LIRC_MODE2REC(LIRC_CAN_SEND_MASK) | ||
72 | |||
73 | #define LIRC_CAN_SET_REC_CARRIER (LIRC_CAN_SET_SEND_CARRIER << 16) | ||
74 | #define LIRC_CAN_SET_REC_DUTY_CYCLE (LIRC_CAN_SET_SEND_DUTY_CYCLE << 16) | ||
75 | |||
76 | #define LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE 0x40000000 | ||
77 | #define LIRC_CAN_SET_REC_CARRIER_RANGE 0x80000000 | ||
78 | #define LIRC_CAN_GET_REC_RESOLUTION 0x20000000 | ||
79 | #define LIRC_CAN_SET_REC_TIMEOUT 0x10000000 | ||
80 | #define LIRC_CAN_SET_REC_FILTER 0x08000000 | ||
81 | |||
82 | #define LIRC_CAN_MEASURE_CARRIER 0x02000000 | ||
83 | #define LIRC_CAN_USE_WIDEBAND_RECEIVER 0x04000000 | ||
84 | |||
85 | #define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK) | ||
86 | #define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK) | ||
87 | |||
88 | #define LIRC_CAN_NOTIFY_DECODE 0x01000000 | ||
89 | |||
90 | /*** IOCTL commands for lirc driver ***/ | ||
91 | |||
92 | #define LIRC_GET_FEATURES _IOR('i', 0x00000000, __u32) | ||
93 | |||
94 | #define LIRC_GET_SEND_MODE _IOR('i', 0x00000001, __u32) | ||
95 | #define LIRC_GET_REC_MODE _IOR('i', 0x00000002, __u32) | ||
96 | #define LIRC_GET_REC_RESOLUTION _IOR('i', 0x00000007, __u32) | ||
97 | |||
98 | #define LIRC_GET_MIN_TIMEOUT _IOR('i', 0x00000008, __u32) | ||
99 | #define LIRC_GET_MAX_TIMEOUT _IOR('i', 0x00000009, __u32) | ||
100 | |||
101 | /* code length in bits, currently only for LIRC_MODE_LIRCCODE */ | ||
102 | #define LIRC_GET_LENGTH _IOR('i', 0x0000000f, __u32) | ||
103 | |||
104 | #define LIRC_SET_SEND_MODE _IOW('i', 0x00000011, __u32) | ||
105 | #define LIRC_SET_REC_MODE _IOW('i', 0x00000012, __u32) | ||
106 | /* Note: these can reset the according pulse_width */ | ||
107 | #define LIRC_SET_SEND_CARRIER _IOW('i', 0x00000013, __u32) | ||
108 | #define LIRC_SET_REC_CARRIER _IOW('i', 0x00000014, __u32) | ||
109 | #define LIRC_SET_SEND_DUTY_CYCLE _IOW('i', 0x00000015, __u32) | ||
110 | #define LIRC_SET_TRANSMITTER_MASK _IOW('i', 0x00000017, __u32) | ||
111 | |||
112 | /* | ||
113 | * when a timeout != 0 is set the driver will send a | ||
114 | * LIRC_MODE2_TIMEOUT data packet, otherwise LIRC_MODE2_TIMEOUT is | ||
115 | * never sent, timeout is disabled by default | ||
116 | */ | ||
117 | #define LIRC_SET_REC_TIMEOUT _IOW('i', 0x00000018, __u32) | ||
118 | |||
119 | /* 1 enables, 0 disables timeout reports in MODE2 */ | ||
120 | #define LIRC_SET_REC_TIMEOUT_REPORTS _IOW('i', 0x00000019, __u32) | ||
121 | |||
122 | /* | ||
123 | * if enabled from the next key press on the driver will send | ||
124 | * LIRC_MODE2_FREQUENCY packets | ||
125 | */ | ||
126 | #define LIRC_SET_MEASURE_CARRIER_MODE _IOW('i', 0x0000001d, __u32) | ||
127 | |||
128 | /* | ||
129 | * to set a range use LIRC_SET_REC_CARRIER_RANGE with the | ||
130 | * lower bound first and later LIRC_SET_REC_CARRIER with the upper bound | ||
131 | */ | ||
132 | #define LIRC_SET_REC_CARRIER_RANGE _IOW('i', 0x0000001f, __u32) | ||
133 | |||
134 | #define LIRC_SET_WIDEBAND_RECEIVER _IOW('i', 0x00000023, __u32) | ||
135 | |||
136 | /* | ||
137 | * struct lirc_scancode - decoded scancode with protocol for use with | ||
138 | * LIRC_MODE_SCANCODE | ||
139 | * | ||
140 | * @timestamp: Timestamp in nanoseconds using CLOCK_MONOTONIC when IR | ||
141 | * was decoded. | ||
142 | * @flags: should be 0 for transmit. When receiving scancodes, | ||
143 | * LIRC_SCANCODE_FLAG_TOGGLE or LIRC_SCANCODE_FLAG_REPEAT can be set | ||
144 | * depending on the protocol | ||
145 | * @rc_proto: see enum rc_proto | ||
146 | * @keycode: the translated keycode. Set to 0 for transmit. | ||
147 | * @scancode: the scancode received or to be sent | ||
148 | */ | ||
149 | struct lirc_scancode { | ||
150 | __u64 timestamp; | ||
151 | __u16 flags; | ||
152 | __u16 rc_proto; | ||
153 | __u32 keycode; | ||
154 | __u64 scancode; | ||
155 | }; | ||
156 | |||
157 | /* Set if the toggle bit of rc-5 or rc-6 is enabled */ | ||
158 | #define LIRC_SCANCODE_FLAG_TOGGLE 1 | ||
159 | /* Set if this is a nec or sanyo repeat */ | ||
160 | #define LIRC_SCANCODE_FLAG_REPEAT 2 | ||
161 | |||
162 | /** | ||
163 | * enum rc_proto - the Remote Controller protocol | ||
164 | * | ||
165 | * @RC_PROTO_UNKNOWN: Protocol not known | ||
166 | * @RC_PROTO_OTHER: Protocol known but proprietary | ||
167 | * @RC_PROTO_RC5: Philips RC5 protocol | ||
168 | * @RC_PROTO_RC5X_20: Philips RC5x 20 bit protocol | ||
169 | * @RC_PROTO_RC5_SZ: StreamZap variant of RC5 | ||
170 | * @RC_PROTO_JVC: JVC protocol | ||
171 | * @RC_PROTO_SONY12: Sony 12 bit protocol | ||
172 | * @RC_PROTO_SONY15: Sony 15 bit protocol | ||
173 | * @RC_PROTO_SONY20: Sony 20 bit protocol | ||
174 | * @RC_PROTO_NEC: NEC protocol | ||
175 | * @RC_PROTO_NECX: Extended NEC protocol | ||
176 | * @RC_PROTO_NEC32: NEC 32 bit protocol | ||
177 | * @RC_PROTO_SANYO: Sanyo protocol | ||
178 | * @RC_PROTO_MCIR2_KBD: RC6-ish MCE keyboard | ||
179 | * @RC_PROTO_MCIR2_MSE: RC6-ish MCE mouse | ||
180 | * @RC_PROTO_RC6_0: Philips RC6-0-16 protocol | ||
181 | * @RC_PROTO_RC6_6A_20: Philips RC6-6A-20 protocol | ||
182 | * @RC_PROTO_RC6_6A_24: Philips RC6-6A-24 protocol | ||
183 | * @RC_PROTO_RC6_6A_32: Philips RC6-6A-32 protocol | ||
184 | * @RC_PROTO_RC6_MCE: MCE (Philips RC6-6A-32 subtype) protocol | ||
185 | * @RC_PROTO_SHARP: Sharp protocol | ||
186 | * @RC_PROTO_XMP: XMP protocol | ||
187 | * @RC_PROTO_CEC: CEC protocol | ||
188 | * @RC_PROTO_IMON: iMon Pad protocol | ||
189 | */ | ||
190 | enum rc_proto { | ||
191 | RC_PROTO_UNKNOWN = 0, | ||
192 | RC_PROTO_OTHER = 1, | ||
193 | RC_PROTO_RC5 = 2, | ||
194 | RC_PROTO_RC5X_20 = 3, | ||
195 | RC_PROTO_RC5_SZ = 4, | ||
196 | RC_PROTO_JVC = 5, | ||
197 | RC_PROTO_SONY12 = 6, | ||
198 | RC_PROTO_SONY15 = 7, | ||
199 | RC_PROTO_SONY20 = 8, | ||
200 | RC_PROTO_NEC = 9, | ||
201 | RC_PROTO_NECX = 10, | ||
202 | RC_PROTO_NEC32 = 11, | ||
203 | RC_PROTO_SANYO = 12, | ||
204 | RC_PROTO_MCIR2_KBD = 13, | ||
205 | RC_PROTO_MCIR2_MSE = 14, | ||
206 | RC_PROTO_RC6_0 = 15, | ||
207 | RC_PROTO_RC6_6A_20 = 16, | ||
208 | RC_PROTO_RC6_6A_24 = 17, | ||
209 | RC_PROTO_RC6_6A_32 = 18, | ||
210 | RC_PROTO_RC6_MCE = 19, | ||
211 | RC_PROTO_SHARP = 20, | ||
212 | RC_PROTO_XMP = 21, | ||
213 | RC_PROTO_CEC = 22, | ||
214 | RC_PROTO_IMON = 23, | ||
215 | }; | ||
216 | |||
217 | #endif | ||