Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/hwspinlock
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/hwspinlock: hwspinlock: add MAINTAINERS entries hwspinlock/omap: omap_hwspinlock_remove should be __devexit hwspinlock/u8500: add hwspinlock driver hwspinlock/core: register a bank of hwspinlocks in a single API call hwspinlock/core: remove stubs for register/unregister hwspinlock/core: use a mutex to protect the radix tree hwspinlock/core/omap: fix id issues on multiple hwspinlock devices hwspinlock/omap: simplify allocation scheme hwspinlock/core: simplify 'owner' handling hwspinlock/core: simplify Kconfig Fix up trivial conflicts (addition of omap_hwspinlock_pdata, removal of omap_spinlock_latency) in arch/arm/mach-omap2/hwspinlock.c Also, do an "evil merge" to fix a compile error in omap_hsmmc.c which for some reason was reported in the same email thread as the "please pull hwspinlock changes".
This commit is contained in:
@@ -20,17 +20,49 @@
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
/* hwspinlock mode argument */
|
||||
#define HWLOCK_IRQSTATE 0x01 /* Disable interrupts, save state */
|
||||
#define HWLOCK_IRQ 0x02 /* Disable interrupts, don't save state */
|
||||
|
||||
struct hwspinlock;
|
||||
struct hwspinlock_device;
|
||||
struct hwspinlock_ops;
|
||||
|
||||
/**
|
||||
* struct hwspinlock_pdata - platform data for hwspinlock drivers
|
||||
* @base_id: base id for this hwspinlock device
|
||||
*
|
||||
* hwspinlock devices provide system-wide hardware locks that are used
|
||||
* by remote processors that have no other way to achieve synchronization.
|
||||
*
|
||||
* To achieve that, each physical lock must have a system-wide id number
|
||||
* that is agreed upon, otherwise remote processors can't possibly assume
|
||||
* they're using the same hardware lock.
|
||||
*
|
||||
* Usually boards have a single hwspinlock device, which provides several
|
||||
* hwspinlocks, and in this case, they can be trivially numbered 0 to
|
||||
* (num-of-locks - 1).
|
||||
*
|
||||
* In case boards have several hwspinlocks devices, a different base id
|
||||
* should be used for each hwspinlock device (they can't all use 0 as
|
||||
* a starting id!).
|
||||
*
|
||||
* This platform data structure should be used to provide the base id
|
||||
* for each device (which is trivially 0 when only a single hwspinlock
|
||||
* device exists). It can be shared between different platforms, hence
|
||||
* its location.
|
||||
*/
|
||||
struct hwspinlock_pdata {
|
||||
int base_id;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_HWSPINLOCK) || defined(CONFIG_HWSPINLOCK_MODULE)
|
||||
|
||||
int hwspin_lock_register(struct hwspinlock *lock);
|
||||
struct hwspinlock *hwspin_lock_unregister(unsigned int id);
|
||||
int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
|
||||
const struct hwspinlock_ops *ops, int base_id, int num_locks);
|
||||
int hwspin_lock_unregister(struct hwspinlock_device *bank);
|
||||
struct hwspinlock *hwspin_lock_request(void);
|
||||
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
|
||||
int hwspin_lock_free(struct hwspinlock *hwlock);
|
||||
@@ -94,16 +126,6 @@ static inline int hwspin_lock_get_id(struct hwspinlock *hwlock)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int hwspin_lock_register(struct hwspinlock *hwlock)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline struct hwspinlock *hwspin_lock_unregister(unsigned int id)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_HWSPINLOCK */
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user