root/drivers/hwspinlock/hwspinlock_internal.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. hwlock_to_id

   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 
  16 struct 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  */
  28 struct 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  */
  40 struct 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  */
  54 struct hwspinlock_device {
  55         struct device *dev;
  56         const struct hwspinlock_ops *ops;
  57         int base_id;
  58         int num_locks;
  59         struct hwspinlock lock[0];
  60 };
  61 
  62 static 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 */

/* [<][>][^][v][top][bottom][index][help] */