| /* |
| * Copyright 2010 Tilera Corporation. All Rights Reserved. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation, version 2. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or |
| * NON INFRINGEMENT. See the GNU General Public License for |
| * more details. |
| */ |
| |
| #ifndef _ASM_TILE_SPINLOCK_TYPES_H |
| #define _ASM_TILE_SPINLOCK_TYPES_H |
| |
| #ifndef __LINUX_SPINLOCK_TYPES_H |
| # error "please don't include this file directly" |
| #endif |
| |
| #ifdef __tilegx__ |
| |
| /* Low 15 bits are "next"; high 15 bits are "current". */ |
| typedef struct arch_spinlock { |
| unsigned int lock; |
| } arch_spinlock_t; |
| |
| #define __ARCH_SPIN_LOCK_UNLOCKED { 0 } |
| |
| /* High bit is "writer owns"; low 31 bits are a count of readers. */ |
| typedef struct arch_rwlock { |
| unsigned int lock; |
| } arch_rwlock_t; |
| |
| #define __ARCH_RW_LOCK_UNLOCKED { 0 } |
| |
| #else |
| |
| typedef struct arch_spinlock { |
| /* Next ticket number to hand out. */ |
| int next_ticket; |
| /* The ticket number that currently owns this lock. */ |
| int current_ticket; |
| } arch_spinlock_t; |
| |
| #define __ARCH_SPIN_LOCK_UNLOCKED { 0, 0 } |
| |
| /* |
| * Byte 0 for tns (only the low bit is used), byte 1 for ticket-lock "next", |
| * byte 2 for ticket-lock "current", byte 3 for reader count. |
| */ |
| typedef struct arch_rwlock { |
| unsigned int lock; |
| } arch_rwlock_t; |
| |
| #define __ARCH_RW_LOCK_UNLOCKED { 0 } |
| |
| #endif |
| #endif /* _ASM_TILE_SPINLOCK_TYPES_H */ |