source: trunk/hal/tsar_mips32/core/hal_irqmask.c @ 314

Last change on this file since 314 was 285, checked in by max@…, 7 years ago

Must be reg_t.

File size: 2.0 KB
Line 
1/*
2 * hal_irqmask.c - implementation of Generic IRQ Masking API for TSAR-MIPS32
3 *
4 * Author  Ghassan Almaless (2008,2009,2010,2011,2012)
5 *         Alain Greiner    (2016)
6 *
7 * Copyright (c) UPMC Sorbonne Universites
8 *
9 * This file is part of ALMOS-MKH..
10 *
11 * ALMOS-MKH. is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; version 2.0 of the License.
14 *
15 * ALMOS-MKH. is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with ALMOS-MKH.; if not, write to the Free Software Foundation,
22 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 */
24
25#include <hal_types.h>
26
27//////////////////////////////////////////
28inline void hal_disable_irq( reg_t * old )
29{
30        register uint32_t sr;
31       
32        __asm__ volatile 
33                (".set noat                          \n"
34         "mfc0   $1,     $12                 \n"
35                 "or     %0,     $0,     $1          \n"
36                 "srl    $1,     $1,     1           \n"
37                 "sll    $1,     $1,     1           \n"
38                 "mtc0   $1,     $12                 \n"
39         ".set at                            \n"
40                 : "=&r" (sr) );
41
42        if( old ) *old = sr;
43}
44
45/////////////////////////////////////////
46inline void hal_enable_irq( reg_t * old )
47{
48        register uint32_t sr;
49 
50        __asm__ volatile 
51                (".set noat                          \n"
52                 "mfc0   $1,     $12                 \n"
53                 "or     %0,     $0,     $1          \n"
54                 "ori    $1,     $1,     0xFF01      \n"
55                 "mtc0   $1,     $12                 \n"
56         ".set at                            \n"
57                 : "=&r" (sr) );
58 
59        if( old ) *old = sr;
60}
61
62////////////////////////////////////////
63inline void hal_restore_irq( reg_t old )
64{
65        __asm__ volatile 
66                ( "mtc0    %0,    $12" : : "r" (old) );
67}
68
69
Note: See TracBrowser for help on using the repository browser.