cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cvmx-coremask.h (2176B)


      1/*
      2 * This file is subject to the terms and conditions of the GNU General Public
      3 * License.  See the file "COPYING" in the main directory of this archive
      4 * for more details.
      5 *
      6 * Copyright (c) 2016  Cavium Inc. (support@cavium.com).
      7 *
      8 */
      9
     10/*
     11 * Module to support operations on bitmap of cores. Coremask can be used to
     12 * select a specific core, a group of cores, or all available cores, for
     13 * initialization and differentiation of roles within a single shared binary
     14 * executable image.
     15 *
     16 * The core numbers used in this file are the same value as what is found in
     17 * the COP0_EBASE register and the rdhwr 0 instruction.
     18 *
     19 * For the CN78XX and other multi-node environments the core numbers are not
     20 * contiguous.  The core numbers for the CN78XX are as follows:
     21 *
     22 * Node 0:	Cores 0 - 47
     23 * Node 1:	Cores 128 - 175
     24 * Node 2:	Cores 256 - 303
     25 * Node 3:	Cores 384 - 431
     26 *
     27 */
     28
     29#ifndef __CVMX_COREMASK_H__
     30#define __CVMX_COREMASK_H__
     31
     32#define CVMX_MIPS_MAX_CORES 1024
     33/* bits per holder */
     34#define CVMX_COREMASK_ELTSZ 64
     35
     36/* cvmx_coremask_t's size in u64 */
     37#define CVMX_COREMASK_BMPSZ (CVMX_MIPS_MAX_CORES / CVMX_COREMASK_ELTSZ)
     38
     39
     40/* cvmx_coremask_t */
     41struct cvmx_coremask {
     42	u64 coremask_bitmap[CVMX_COREMASK_BMPSZ];
     43};
     44
     45/*
     46 * Is ``core'' set in the coremask?
     47 */
     48static inline bool cvmx_coremask_is_core_set(const struct cvmx_coremask *pcm,
     49					    int core)
     50{
     51	int n, i;
     52
     53	n = core % CVMX_COREMASK_ELTSZ;
     54	i = core / CVMX_COREMASK_ELTSZ;
     55
     56	return (pcm->coremask_bitmap[i] & ((u64)1 << n)) != 0;
     57}
     58
     59/*
     60 * Make a copy of a coremask
     61 */
     62static inline void cvmx_coremask_copy(struct cvmx_coremask *dest,
     63				      const struct cvmx_coremask *src)
     64{
     65	memcpy(dest, src, sizeof(*dest));
     66}
     67
     68/*
     69 * Set the lower 64-bit of the coremask.
     70 */
     71static inline void cvmx_coremask_set64(struct cvmx_coremask *pcm,
     72				       uint64_t coremask_64)
     73{
     74	pcm->coremask_bitmap[0] = coremask_64;
     75}
     76
     77/*
     78 * Clear ``core'' from the coremask.
     79 */
     80static inline void cvmx_coremask_clear_core(struct cvmx_coremask *pcm, int core)
     81{
     82	int n, i;
     83
     84	n = core % CVMX_COREMASK_ELTSZ;
     85	i = core / CVMX_COREMASK_ELTSZ;
     86	pcm->coremask_bitmap[i] &= ~(1ull << n);
     87}
     88
     89#endif /* __CVMX_COREMASK_H__ */