162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include "cacheline.h" 362306a36Sopenharmony_ci#include <unistd.h> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#ifdef _SC_LEVEL1_DCACHE_LINESIZE 662306a36Sopenharmony_ci#define cache_line_size(cacheline_sizep) *cacheline_sizep = sysconf(_SC_LEVEL1_DCACHE_LINESIZE) 762306a36Sopenharmony_ci#else 862306a36Sopenharmony_ci#include <api/fs/fs.h> 962306a36Sopenharmony_ci#include "debug.h" 1062306a36Sopenharmony_cistatic void cache_line_size(int *cacheline_sizep) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci if (sysfs__read_int("devices/system/cpu/cpu0/cache/index0/coherency_line_size", cacheline_sizep)) 1362306a36Sopenharmony_ci pr_debug("cannot determine cache line size"); 1462306a36Sopenharmony_ci} 1562306a36Sopenharmony_ci#endif 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciint cacheline_size(void) 1862306a36Sopenharmony_ci{ 1962306a36Sopenharmony_ci static int size; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci if (!size) 2262306a36Sopenharmony_ci cache_line_size(&size); 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci return size; 2562306a36Sopenharmony_ci} 26