1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (c) Intel Corporation. 3 * All rights reserved. 4 */ 5 6 #ifndef FTL_ADDR_UTILS_H 7 #define FTL_ADDR_UTILS_H 8 9 #include "ftl_core.h" 10 11 static inline ftl_addr 12 ftl_addr_load(struct spdk_ftl_dev *dev, void *buffer, uint64_t offset) 13 { 14 if (ftl_addr_packed(dev)) { 15 uint32_t *b32 = buffer; 16 ftl_addr addr = b32[offset]; 17 18 if (addr == (uint32_t)FTL_ADDR_INVALID) { 19 return FTL_ADDR_INVALID; 20 } else { 21 return addr; 22 } 23 } else { 24 uint64_t *b64 = buffer; 25 return b64[offset]; 26 } 27 } 28 29 static inline void 30 ftl_addr_store(struct spdk_ftl_dev *dev, void *buffer, uint64_t offset, ftl_addr addr) 31 { 32 if (ftl_addr_packed(dev)) { 33 uint32_t *b32 = buffer; 34 b32[offset] = addr; 35 } else { 36 uint64_t *b64 = buffer; 37 b64[offset] = addr; 38 } 39 } 40 41 static inline uint64_t 42 ftl_lba_load(struct spdk_ftl_dev *dev, void *buffer, uint64_t offset) 43 { 44 if (ftl_addr_packed(dev)) { 45 uint32_t *b32 = buffer; 46 uint32_t lba = b32[offset]; 47 48 if (lba == (uint32_t)FTL_LBA_INVALID) { 49 return FTL_LBA_INVALID; 50 } else { 51 return lba; 52 } 53 } else { 54 uint64_t *b64 = buffer; 55 return b64[offset]; 56 } 57 } 58 59 static inline void 60 ftl_lba_store(struct spdk_ftl_dev *dev, void *buffer, uint64_t offset, uint64_t lba) 61 { 62 if (ftl_addr_packed(dev)) { 63 uint32_t *b32 = buffer; 64 b32[offset] = lba; 65 } else { 66 uint64_t *b64 = buffer; 67 b64[offset] = lba; 68 } 69 } 70 71 #endif /* FTL_ADDR_UTILS_H */ 72