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

hwspinlock_internal.h (2028B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Hardware spinlocks internal header
      4 *
      5 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com
      6 *
      7 * Contact: Ohad Ben-Cohen <ohad@wizery.com>
      8 */
      9
     10#ifndef __HWSPINLOCK_HWSPINLOCK_H
     11#define __HWSPINLOCK_HWSPINLOCK_H
     12
     13#include <linux/spinlock.h>
     14#include <linux/device.h>
     15
     16struct hwspinlock_device;
     17
     18/**
     19 * struct hwspinlock_ops - platform-specific hwspinlock handlers
     20 *
     21 * @trylock: make a single attempt to take the lock. returns 0 on
     22 *	     failure and true on success. may _not_ sleep.
     23 * @unlock:  release the lock. always succeed. may _not_ sleep.
     24 * @relax:   optional, platform-specific relax handler, called by hwspinlock
     25 *	     core while spinning on a lock, between two successive
     26 *	     invocations of @trylock. may _not_ sleep.
     27 */
     28struct hwspinlock_ops {
     29	int (*trylock)(struct hwspinlock *lock);
     30	void (*unlock)(struct hwspinlock *lock);
     31	void (*relax)(struct hwspinlock *lock);
     32};
     33
     34/**
     35 * struct hwspinlock - this struct represents a single hwspinlock instance
     36 * @bank: the hwspinlock_device structure which owns this lock
     37 * @lock: initialized and used by hwspinlock core
     38 * @priv: private data, owned by the underlying platform-specific hwspinlock drv
     39 */
     40struct hwspinlock {
     41	struct hwspinlock_device *bank;
     42	spinlock_t lock;
     43	void *priv;
     44};
     45
     46/**
     47 * struct hwspinlock_device - a device which usually spans numerous hwspinlocks
     48 * @dev: underlying device, will be used to invoke runtime PM api
     49 * @ops: platform-specific hwspinlock handlers
     50 * @base_id: id index of the first lock in this device
     51 * @num_locks: number of locks in this device
     52 * @lock: dynamically allocated array of 'struct hwspinlock'
     53 */
     54struct hwspinlock_device {
     55	struct device *dev;
     56	const struct hwspinlock_ops *ops;
     57	int base_id;
     58	int num_locks;
     59	struct hwspinlock lock[];
     60};
     61
     62static inline int hwlock_to_id(struct hwspinlock *hwlock)
     63{
     64	int local_id = hwlock - &hwlock->bank->lock[0];
     65
     66	return hwlock->bank->base_id + local_id;
     67}
     68
     69#endif /* __HWSPINLOCK_HWSPINLOCK_H */