1*436bf2bcSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0
2*436bf2bcSAndroid Build Coastguard Worker #include <stdio.h>
3*436bf2bcSAndroid Build Coastguard Worker #include <string.h>
4*436bf2bcSAndroid Build Coastguard Worker #include <inttypes.h>
5*436bf2bcSAndroid Build Coastguard Worker #include <endian.h>
6*436bf2bcSAndroid Build Coastguard Worker #include "event-parse.h"
7*436bf2bcSAndroid Build Coastguard Worker
8*436bf2bcSAndroid Build Coastguard Worker /*
9*436bf2bcSAndroid Build Coastguard Worker * From glibc endian.h, for older systems where it is not present, e.g.: RHEL5,
10*436bf2bcSAndroid Build Coastguard Worker * Fedora6.
11*436bf2bcSAndroid Build Coastguard Worker */
12*436bf2bcSAndroid Build Coastguard Worker #ifndef le16toh
13*436bf2bcSAndroid Build Coastguard Worker # if __BYTE_ORDER == __LITTLE_ENDIAN
14*436bf2bcSAndroid Build Coastguard Worker # define le16toh(x) (x)
15*436bf2bcSAndroid Build Coastguard Worker # else
16*436bf2bcSAndroid Build Coastguard Worker # define le16toh(x) __bswap_16 (x)
17*436bf2bcSAndroid Build Coastguard Worker # endif
18*436bf2bcSAndroid Build Coastguard Worker #endif
19*436bf2bcSAndroid Build Coastguard Worker
20*436bf2bcSAndroid Build Coastguard Worker
21*436bf2bcSAndroid Build Coastguard Worker static unsigned long long
process___le16_to_cpup(struct trace_seq * s,unsigned long long * args)22*436bf2bcSAndroid Build Coastguard Worker process___le16_to_cpup(struct trace_seq *s, unsigned long long *args)
23*436bf2bcSAndroid Build Coastguard Worker {
24*436bf2bcSAndroid Build Coastguard Worker uint16_t *val = (uint16_t *) (unsigned long) args[0];
25*436bf2bcSAndroid Build Coastguard Worker return val ? (long long) le16toh(*val) : 0;
26*436bf2bcSAndroid Build Coastguard Worker }
27*436bf2bcSAndroid Build Coastguard Worker
TEP_PLUGIN_LOADER(struct tep_handle * tep)28*436bf2bcSAndroid Build Coastguard Worker int TEP_PLUGIN_LOADER(struct tep_handle *tep)
29*436bf2bcSAndroid Build Coastguard Worker {
30*436bf2bcSAndroid Build Coastguard Worker tep_register_print_function(tep,
31*436bf2bcSAndroid Build Coastguard Worker process___le16_to_cpup,
32*436bf2bcSAndroid Build Coastguard Worker TEP_FUNC_ARG_INT,
33*436bf2bcSAndroid Build Coastguard Worker "__le16_to_cpup",
34*436bf2bcSAndroid Build Coastguard Worker TEP_FUNC_ARG_PTR,
35*436bf2bcSAndroid Build Coastguard Worker TEP_FUNC_ARG_VOID);
36*436bf2bcSAndroid Build Coastguard Worker return 0;
37*436bf2bcSAndroid Build Coastguard Worker }
38*436bf2bcSAndroid Build Coastguard Worker
TEP_PLUGIN_UNLOADER(struct tep_handle * tep)39*436bf2bcSAndroid Build Coastguard Worker void TEP_PLUGIN_UNLOADER(struct tep_handle *tep)
40*436bf2bcSAndroid Build Coastguard Worker {
41*436bf2bcSAndroid Build Coastguard Worker tep_unregister_print_function(tep, process___le16_to_cpup,
42*436bf2bcSAndroid Build Coastguard Worker "__le16_to_cpup");
43*436bf2bcSAndroid Build Coastguard Worker }
44