diff --git a/drivers/gpu/nvgpu/include/nvgpu/lock.h b/drivers/gpu/nvgpu/include/nvgpu/lock.h new file mode 100644 index 000000000..ad0703806 --- /dev/null +++ b/drivers/gpu/nvgpu/include/nvgpu/lock.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NVGPU_LOCK_H +#define NVGPU_LOCK_H + +#include + +/* + * struct nvgpu_mutex + * + * Should be implemented per-OS in a separate library + * But implementation should adhere to mutex implementation + * as specified in Linux Documentation + */ +struct nvgpu_mutex; + +/* + * struct nvgpu_spinlock + * + * Should be implemented per-OS in a separate library + * But implementation should adhere to spinlock implementation + * as specified in Linux Documentation + */ +struct nvgpu_spinlock; + +/* + * struct nvgpu_raw_spinlock + * + * Should be implemented per-OS in a separate library + * But implementation should adhere to raw_spinlock implementation + * as specified in Linux Documentation + */ +struct nvgpu_raw_spinlock; + +int nvgpu_mutex_init(struct nvgpu_mutex *mutex); +void nvgpu_mutex_acquire(struct nvgpu_mutex *mutex); +void nvgpu_mutex_release(struct nvgpu_mutex *mutex); +int nvgpu_mutex_tryacquire(struct nvgpu_mutex *mutex); +void nvgpu_mutex_destroy(struct nvgpu_mutex *mutex); + +void nvgpu_spinlock_init(struct nvgpu_spinlock *spinlock); +void nvgpu_spinlock_acquire(struct nvgpu_spinlock *spinlock); +void nvgpu_spinlock_release(struct nvgpu_spinlock *spinlock); + +void nvgpu_raw_spinlock_init(struct nvgpu_raw_spinlock *spinlock); +void nvgpu_raw_spinlock_acquire(struct nvgpu_raw_spinlock *spinlock); +void nvgpu_raw_spinlock_release(struct nvgpu_raw_spinlock *spinlock); + +#endif /* NVGPU_LOCK_H */ diff --git a/drivers/gpu/nvgpu/include/nvgpu/lock_linux.h b/drivers/gpu/nvgpu/include/nvgpu/lock_linux.h new file mode 100644 index 000000000..fbf26e9da --- /dev/null +++ b/drivers/gpu/nvgpu/include/nvgpu/lock_linux.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NVGPU_LOCK_LINUX_H +#define NVGPU_LOCK_LINUX_H + +#include +#include + +struct nvgpu_mutex { + struct mutex mutex; +}; +struct nvgpu_spinlock { + spinlock_t spinlock; +}; +struct nvgpu_raw_spinlock { + raw_spinlock_t spinlock; +}; + +static inline int nvgpu_mutex_init(struct nvgpu_mutex *mutex) +{ + mutex_init(&mutex->mutex); + return 0; +}; +static inline void nvgpu_mutex_acquire(struct nvgpu_mutex *mutex) +{ + mutex_lock(&mutex->mutex); +}; +static inline void nvgpu_mutex_release(struct nvgpu_mutex *mutex) +{ + mutex_unlock(&mutex->mutex); +}; +static inline int nvgpu_mutex_tryacquire(struct nvgpu_mutex *mutex) +{ + return mutex_trylock(&mutex->mutex); +}; +static inline void nvgpu_mutex_destroy(struct nvgpu_mutex *mutex) +{ + mutex_destroy(&mutex->mutex); +}; + +static inline void nvgpu_spinlock_init(struct nvgpu_spinlock *spinlock) +{ + spin_lock_init(&spinlock->spinlock); +}; +static inline void nvgpu_spinlock_acquire(struct nvgpu_spinlock *spinlock) +{ + spin_lock(&spinlock->spinlock); +}; +static inline void nvgpu_spinlock_release(struct nvgpu_spinlock *spinlock) +{ + spin_unlock(&spinlock->spinlock); +}; + +static inline void nvgpu_raw_spinlock_init(struct nvgpu_raw_spinlock *spinlock) +{ + raw_spin_lock_init(&spinlock->spinlock); +}; +static inline void nvgpu_raw_spinlock_acquire(struct nvgpu_raw_spinlock *spinlock) +{ + raw_spin_lock(&spinlock->spinlock); +}; +static inline void nvgpu_raw_spinlock_release(struct nvgpu_raw_spinlock *spinlock) +{ + raw_spin_unlock(&spinlock->spinlock); +}; + +#endif /* NVGPU_LOCK_LINUX_H */