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