X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Fiotrace.h;h=380da1fbc2cffa7c9ea9ed61d2f0693358f6e217;hb=64cfeda8ae2e95751c5d2dfa4dc4a906478ae2f6;hp=9fe5733f8779740d0a2d1f7dcf65b700ca117acb;hpb=e8f80a5a58c9b506453cc0780687e8ed457d30a6;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/iotrace.h b/include/iotrace.h index 9fe5733..380da1f 100644 --- a/include/iotrace.h +++ b/include/iotrace.h @@ -6,8 +6,36 @@ #ifndef __IOTRACE_H #define __IOTRACE_H +//#include #include +/* 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; +}; + /* * This file is designed to be included in arch//include/asm/io.h. * It redirects all IO access through a tracing/checksumming feature for @@ -21,30 +49,29 @@ #define readl(addr) iotrace_readl((const void *)(addr)) #undef writel -#define writel(val, addr) iotrace_writel(val, (const void *)(addr)) +#define writel(val, addr) iotrace_writel(val, (void *)(addr)) #undef readw #define readw(addr) iotrace_readw((const void *)(addr)) #undef writew -#define writew(val, addr) iotrace_writew(val, (const void *)(addr)) +#define writew(val, addr) iotrace_writew(val, (void *)(addr)) #undef readb #define readb(addr) iotrace_readb((const void *)(uintptr_t)addr) #undef writeb -#define writeb(val, addr) \ - iotrace_writeb(val, (const void *)(uintptr_t)addr) +#define writeb(val, addr) iotrace_writeb(val, (void *)(uintptr_t)addr) #endif /* Tracing functions which mirror their io.h counterparts */ u32 iotrace_readl(const void *ptr); -void iotrace_writel(ulong value, const void *ptr); +void iotrace_writel(ulong value, void *ptr); u16 iotrace_readw(const void *ptr); -void iotrace_writew(ulong value, const void *ptr); +void iotrace_writew(ulong value, void *ptr); u8 iotrace_readb(const void *ptr); -void iotrace_writeb(ulong value, const void *ptr); +void iotrace_writeb(ulong value, void *ptr); /** * iotrace_reset_checksum() - Reset the iotrace checksum @@ -59,6 +86,30 @@ void iotrace_reset_checksum(void); u32 iotrace_get_checksum(void); /** + * 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); + +/** * iotrace_set_enabled() - Set whether iotracing is enabled or not * * This controls whether the checksum is updated and a trace record added @@ -94,11 +145,12 @@ void iotrace_set_buffer(ulong start, ulong size); * iotrace_get_buffer() - Get buffer information * * @start: Returns start address of buffer - * @size: Returns size of buffer in bytes + * @size: Returns actual size of buffer in bytes + * @needed_size: Returns needed size of buffer in bytes * @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) */ -void iotrace_get_buffer(ulong *start, ulong *size, ulong *offset, ulong *count); +void iotrace_get_buffer(ulong *start, ulong *size, ulong *needed_size, ulong *offset, ulong *count); #endif /* __IOTRACE_H */