1 /* 2 * Copyright (c) 2015-2019, Intel Corporation 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * * Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above copyright notice, 10 * this list of conditions and the following disclaimer in the documentation 11 * and/or other materials provided with the distribution. 12 * * Neither the name of Intel Corporation nor the names of its contributors 13 * may be used to endorse or promote products derived from this software 14 * without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef PT_SECTION_POSIX_H 30 #define PT_SECTION_POSIX_H 31 32 #include <stdint.h> 33 #include <sys/stat.h> 34 35 struct pt_section; 36 37 38 /* Fstat-based file status. */ 39 struct pt_sec_posix_status { 40 /* The file status. */ 41 struct stat stat; 42 }; 43 44 /* MMAP-based section mapping information. */ 45 struct pt_sec_posix_mapping { 46 /* The mmap base address. */ 47 uint8_t *base; 48 49 /* The mapped memory size. */ 50 uint64_t size; 51 52 /* The begin and end of the mapped memory. */ 53 const uint8_t *begin, *end; 54 }; 55 56 57 /* Map a section. 58 * 59 * On success, sets @section's mapping, unmap, and read pointers. 60 * 61 * Returns zero on success, a negative error code otherwise. 62 * Returns -pte_internal if @section or @file are NULL. 63 * Returns -pte_invalid if @section can't be mapped. 64 */ 65 extern int pt_sec_posix_map(struct pt_section *section, int fd); 66 67 /* Unmap a section. 68 * 69 * On success, clears @section's mapping, unmap, and read pointers. 70 * 71 * Returns zero on success, a negative error code otherwise. 72 * Returns -pte_internal if @section is NULL. 73 * Returns -pte_internal if @section has not been mapped. 74 */ 75 extern int pt_sec_posix_unmap(struct pt_section *section); 76 77 /* Read memory from an mmaped section. 78 * 79 * Reads at most @size bytes from @section at @offset into @buffer. 80 * 81 * Returns the number of bytes read on success, a negative error code otherwise. 82 * Returns -pte_invalid if @section or @buffer are NULL. 83 * Returns -pte_nomap if @offset is beyond the end of the section. 84 */ 85 extern int pt_sec_posix_read(const struct pt_section *section, uint8_t *buffer, 86 uint16_t size, uint64_t offset); 87 88 /* Compute the memory size of a section. 89 * 90 * On success, provides the amount of memory used for mapping @section in bytes 91 * in @size. 92 * 93 * Returns zero on success, a negative error code otherwise. 94 * Returns -pte_internal if @section or @size is NULL. 95 * Returns -pte_internal if @section has not been mapped. 96 */ 97 extern int pt_sec_posix_memsize(const struct pt_section *section, 98 uint64_t *size); 99 100 #endif /* PT_SECTION_POSIX_H */ 101