~ubuntu-branches/ubuntu/trusty/gnuradio/trusty-updates

« back to all changes in this revision

Viewing changes to gcell/ibm/sync/spu_source/atomic_read.h

  • Committer: Package Import Robot
  • Author(s): A. Maitland Bottoms
  • Date: 2012-02-26 21:26:16 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20120226212616-vsfkbi1158xshdql
Tags: 3.5.1-1
* new upstream version, re-packaged from scratch with modern tools
    closes: #642716, #645332, #394849, #616832, #590048, #642580,
    #647018, #557050, #559640, #631863
* CMake build

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* --------------------------------------------------------------  */
2
 
/* (C)Copyright 2001,2007,                                         */
3
 
/* International Business Machines Corporation,                    */
4
 
/* Sony Computer Entertainment, Incorporated,                      */
5
 
/* Toshiba Corporation,                                            */
6
 
/*                                                                 */
7
 
/* All Rights Reserved.                                            */
8
 
/*                                                                 */
9
 
/* Redistribution and use in source and binary forms, with or      */
10
 
/* without modification, are permitted provided that the           */
11
 
/* following conditions are met:                                   */
12
 
/*                                                                 */
13
 
/* - Redistributions of source code must retain the above copyright*/
14
 
/*   notice, this list of conditions and the following disclaimer. */
15
 
/*                                                                 */
16
 
/* - Redistributions in binary form must reproduce the above       */
17
 
/*   copyright notice, this list of conditions and the following   */
18
 
/*   disclaimer in the documentation and/or other materials        */
19
 
/*   provided with the distribution.                               */
20
 
/*                                                                 */
21
 
/* - Neither the name of IBM Corporation nor the names of its      */
22
 
/*   contributors may be used to endorse or promote products       */
23
 
/*   derived from this software without specific prior written     */
24
 
/*   permission.                                                   */
25
 
/*                                                                 */
26
 
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND          */
27
 
/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,     */
28
 
/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF        */
29
 
/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE        */
30
 
/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR            */
31
 
/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
32
 
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT    */
33
 
/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;    */
34
 
/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)        */
35
 
/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN       */
36
 
/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR    */
37
 
/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  */
38
 
/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              */
39
 
/* --------------------------------------------------------------  */
40
 
/* PROLOG END TAG zYx                                              */
41
 
#ifndef _SPU_ATOMIC_READ_H_
42
 
#define _SPU_ATOMIC_READ_H_
43
 
 
44
 
#include <sync_utils.h>
45
 
#include <atomic.h>
46
 
 
47
 
/**
48
 
 * atomic_read - read an atomic counter.
49
 
 * @v: handle to effective address of counter.
50
 
 *
51
 
 * Read the current value of an atomic counter.
52
 
 */
53
 
static __inline int _atomic_read(atomic_ea_t v)
54
 
{
55
 
    DECL_ATOMIC_VARS();
56
 
 
57
 
    /* reserve a tag for use */
58
 
    tagid = mfc_tag_reserve();
59
 
 
60
 
    u32 oldtmask, tagmask = 1 << (tagid & 31);
61
 
 
62
 
    ea64.ull = ALIGN128_EA(v);
63
 
    offset = OFFSET128_EA_U32(v);
64
 
 
65
 
    MFC_DMA(buf, ea64, size, tagid & 31, MFC_GET_CMD);
66
 
    oldtmask = spu_readch(MFC_RdTagMask);
67
 
    spu_writech(MFC_WrTagMask, tagmask);
68
 
    spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY);
69
 
    spu_readch(MFC_RdTagStat);
70
 
    spu_writech(MFC_WrTagMask, oldtmask);
71
 
 
72
 
    mfc_tag_release (tagid);
73
 
    ret_val =  buf[offset];
74
 
    return ret_val;
75
 
}
76
 
 
77
 
 
78
 
#endif /* _SPU_ATOMIC_READ_H_ */