Blame view
include/iotrace.h
3.92 KB
83d290c56
|
1 |
/* SPDX-License-Identifier: GPL-2.0+ */ |
aa53233a1
|
2 3 |
/* * Copyright (c) 2014 Google, Inc. |
aa53233a1
|
4 5 6 7 |
*/ #ifndef __IOTRACE_H #define __IOTRACE_H |
7e9be3ea3
|
8 |
//#include <common.h> |
aa53233a1
|
9 |
#include <linux/types.h> |
7e9be3ea3
|
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/* Support up to the machine word length for now */ typedef ulong iovalue_t; enum iotrace_flags { IOT_8 = 0, IOT_16, IOT_32, IOT_READ = 0 << 3, IOT_WRITE = 1 << 3, }; /** * struct iotrace_record - Holds a single I/O trace record * * @flags: I/O access type * @timestamp: Timestamp of access * @addr: Address of access * @value: Value written or read */ struct iotrace_record { enum iotrace_flags flags; u64 timestamp; phys_addr_t addr; iovalue_t value; }; |
aa53233a1
|
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/* * This file is designed to be included in arch/<arch>/include/asm/io.h. * It redirects all IO access through a tracing/checksumming feature for * testing purposes. */ #if defined(CONFIG_IO_TRACE) && !defined(IOTRACE_IMPL) && \ !defined(CONFIG_SPL_BUILD) #undef readl #define readl(addr) iotrace_readl((const void *)(addr)) #undef writel #define writel(val, addr) iotrace_writel(val, (const void *)(addr)) #undef readw #define readw(addr) iotrace_readw((const void *)(addr)) #undef writew #define writew(val, addr) iotrace_writew(val, (const void *)(addr)) #undef readb |
709e98b7b
|
58 |
#define readb(addr) iotrace_readb((const void *)(uintptr_t)addr) |
aa53233a1
|
59 60 |
#undef writeb |
709e98b7b
|
61 62 |
#define writeb(val, addr) \ iotrace_writeb(val, (const void *)(uintptr_t)addr) |
aa53233a1
|
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
#endif /* Tracing functions which mirror their io.h counterparts */ u32 iotrace_readl(const void *ptr); void iotrace_writel(ulong value, const void *ptr); u16 iotrace_readw(const void *ptr); void iotrace_writew(ulong value, const void *ptr); u8 iotrace_readb(const void *ptr); void iotrace_writeb(ulong value, const void *ptr); /** * iotrace_reset_checksum() - Reset the iotrace checksum */ void iotrace_reset_checksum(void); /** * iotrace_get_checksum() - Get the current checksum value * * @return currect checksum value */ u32 iotrace_get_checksum(void); /** |
a74440b27
|
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
* iotrace_set_region() - Set whether iotrace is limited to a specific * io region. * * Defines the address and size of the limited region. * * @start: address of the beginning of the region * @size: size of the region in bytes. */ void iotrace_set_region(ulong start, ulong size); /** * iotrace_reset_region() - Reset the region limit */ void iotrace_reset_region(void); /** * iotrace_get_region() - Get region information * * @start: Returns start address of region * @size: Returns size of region in bytes */ void iotrace_get_region(ulong *start, ulong *size); /** |
aa53233a1
|
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
* iotrace_set_enabled() - Set whether iotracing is enabled or not * * This controls whether the checksum is updated and a trace record added * for each I/O access. * * @enable: true to enable iotracing, false to disable */ void iotrace_set_enabled(int enable); /** * iotrace_get_enabled() - Get whether iotracing is enabled or not * * @return true if enabled, false if disabled */ int iotrace_get_enabled(void); /** * iotrace_set_buffer() - Set position and size of iotrace buffer * * Defines where the iotrace buffer goes, and resets the output pointer to * the start of the buffer. * * The buffer can be 0 size in which case the checksum is updated but no * trace records are writen. If the buffer is exhausted, the offset will * continue to increase but not new data will be written. * * @start: Start address of buffer * @size: Size of buffer in bytes */ void iotrace_set_buffer(ulong start, ulong size); /** * iotrace_get_buffer() - Get buffer information * * @start: Returns start address of buffer |
e0212dfa1
|
146 147 |
* @size: Returns actual size of buffer in bytes * @needed_size: Returns needed size of buffer in bytes |
aa53233a1
|
148 149 150 151 |
* @offset: Returns the byte offset where the next output trace record will * @count: Returns the number of trace records recorded * be written (or would be if the buffer was large enough) */ |
e0212dfa1
|
152 |
void iotrace_get_buffer(ulong *start, ulong *size, ulong *needed_size, ulong *offset, ulong *count); |
aa53233a1
|
153 154 |
#endif /* __IOTRACE_H */ |