Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
locks.h
Package: linux-2.4.20.tar.gz [view]
Upload User: jlfgdled
Upload Date: 2013-04-10
Package Size: 33168k
Code Size: 3k
Category:
Linux-Unix program
Development Platform:
Unix_Linux
- /*
- * linux/include/asm-arm/proc-armv/locks.h
- *
- * Copyright (C) 2000 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Interrupt safe locking assembler.
- */
- #ifndef __ASM_PROC_LOCKS_H
- #define __ASM_PROC_LOCKS_H
- #define __down_op(ptr,fail)
- ({
- __asm__ __volatile__(
- "@ down_opn"
- " mrs ip, cpsrn"
- " orr lr, ip, #128n"
- " msr cpsr_c, lrn"
- " ldr lr, [%0]n"
- " subs lr, lr, %1n"
- " str lr, [%0]n"
- " msr cpsr_c, ipn"
- " movmi ip, %0n"
- " blmi " SYMBOL_NAME_STR(fail)
- :
- : "r" (ptr), "I" (1)
- : "ip", "lr", "cc");
- })
- #define __down_op_ret(ptr,fail)
- ({
- unsigned int ret;
- __asm__ __volatile__(
- "@ down_op_retn"
- " mrs ip, cpsrn"
- " orr lr, ip, #128n"
- " msr cpsr_c, lrn"
- " ldr lr, [%1]n"
- " subs lr, lr, %2n"
- " str lr, [%1]n"
- " msr cpsr_c, ipn"
- " movmi ip, %1n"
- " movpl ip, #0n"
- " blmi " SYMBOL_NAME_STR(fail) "n"
- " mov %0, ip"
- : "=&r" (ret)
- : "r" (ptr), "I" (1)
- : "ip", "lr", "cc");
- ret;
- })
- #define __up_op(ptr,wake)
- ({
- __asm__ __volatile__(
- "@ up_opn"
- " mrs ip, cpsrn"
- " orr lr, ip, #128n"
- " msr cpsr_c, lrn"
- " ldr lr, [%0]n"
- " adds lr, lr, %1n"
- " str lr, [%0]n"
- " msr cpsr_c, ipn"
- " movle ip, %0n"
- " blle " SYMBOL_NAME_STR(wake)
- :
- : "r" (ptr), "I" (1)
- : "ip", "lr", "cc");
- })
- /*
- * The value 0x01000000 supports up to 128 processors and
- * lots of processes. BIAS must be chosen such that sub'ing
- * BIAS once per CPU will result in the long remaining
- * negative.
- */
- #define RW_LOCK_BIAS 0x01000000
- #define RW_LOCK_BIAS_STR "0x01000000"
- #define __down_op_write(ptr,fail)
- ({
- __asm__ __volatile__(
- "@ down_op_writen"
- " mrs ip, cpsrn"
- " orr lr, ip, #128n"
- " msr cpsr_c, lrn"
- " ldr lr, [%0]n"
- " subs lr, lr, %1n"
- " str lr, [%0]n"
- " msr cpsr_c, ipn"
- " movne ip, %0n"
- " blne " SYMBOL_NAME_STR(fail)
- :
- : "r" (ptr), "I" (RW_LOCK_BIAS)
- : "ip", "lr", "cc");
- })
- #define __up_op_write(ptr,wake)
- ({
- __asm__ __volatile__(
- "@ up_op_readn"
- " mrs ip, cpsrn"
- " orr lr, ip, #128n"
- " msr cpsr_c, lrn"
- " ldr lr, [%0]n"
- " adds lr, lr, %1n"
- " str lr, [%0]n"
- " msr cpsr_c, ipn"
- " movcs ip, %0n"
- " blcs " SYMBOL_NAME_STR(wake)
- :
- : "r" (ptr), "I" (RW_LOCK_BIAS)
- : "ip", "lr", "cc");
- })
- #define __down_op_read(ptr,fail)
- __down_op(ptr, fail)
- #define __up_op_read(ptr,wake)
- ({
- __asm__ __volatile__(
- "@ up_op_readn"
- " mrs ip, cpsrn"
- " orr lr, ip, #128n"
- " msr cpsr_c, lrn"
- " ldr lr, [%0]n"
- " adds lr, lr, %1n"
- " str lr, [%0]n"
- " msr cpsr_c, ipn"
- " moveq ip, %0n"
- " bleq " SYMBOL_NAME_STR(wake)
- :
- : "r" (ptr), "I" (1)
- : "ip", "lr", "cc");
- })
- #endif