1 // Copyright 2016 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #pragma once
6
7 #include <string.h>
8
9 #include <zircon/syscalls.h>
10 #include <zircon/types.h>
11
12 #include <zircon/device/ioctl.h>
13 #include <zircon/device/ioctl-wrapper.h>
14
15 // return a handle usable with zx_ktrace_write()
16 #define IOCTL_KTRACE_GET_HANDLE \
17 IOCTL(IOCTL_KIND_GET_HANDLE, IOCTL_FAMILY_KTRACE, 1)
18
19 // define a new ktrace probe name
20 // input: ascii probe name, < ZX_MAX_NAME_LEN
21 // reply: uint32_t probe id usable with zx_ktrace_write()
22 #define IOCTL_KTRACE_ADD_PROBE \
23 IOCTL(IOCTL_KIND_DEFAULT, IOCTL_FAMILY_KTRACE, 2)
24
25 IOCTL_WRAPPER_OUT(ioctl_ktrace_get_handle, IOCTL_KTRACE_GET_HANDLE, zx_handle_t);
26 // Start tracing.
27 // input: The group_mask
28 #define IOCTL_KTRACE_START \
29 IOCTL(IOCTL_KIND_DEFAULT, IOCTL_FAMILY_KTRACE, 3)
30
31 // Stop
32 #define IOCTL_KTRACE_STOP \
33 IOCTL(IOCTL_KIND_DEFAULT, IOCTL_FAMILY_KTRACE, 4)
34
ioctl_ktrace_add_probe(int fd,const char * name,uint32_t * probe_id)35 static inline zx_status_t ioctl_ktrace_add_probe(int fd, const char* name, uint32_t* probe_id) {
36 return fdio_ioctl(fd, IOCTL_KTRACE_ADD_PROBE,
37 name, strlen(name), probe_id, sizeof(uint32_t));
38 }
39
40 IOCTL_WRAPPER_IN(ioctl_ktrace_start, IOCTL_KTRACE_START, uint32_t);
41 IOCTL_WRAPPER(ioctl_ktrace_stop, IOCTL_KTRACE_STOP);
42