source: soft/giet_vm/giet_drivers/pic_driver.c @ 430

Last change on this file since 430 was 413, checked in by alain, 10 years ago

Introducing support for the PIC_MASK register in pic_driver.

File size: 2.2 KB
RevLine 
[298]1///////////////////////////////////////////////////////////////////////////////////
2// File     : pic_driver.c
3// Date     : 05/03/2014
4// Author   : alain greiner
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
7// Implementation note:
8// All physical accesses to device registers are done by the two
9// _pic_get_register(), _pic_set_register() low-level functions,
10// that are handling virtual / physical addressing.
11///////////////////////////////////////////////////////////////////////////////////
12
13#include <pic_driver.h>
14#include <utils.h>
15
[320]16#if !defined(SEG_PIC_BASE)
17# error: You must define SEG_PIC_BASE in the hard_config.h file
18#endif
19
[298]20/////////////////////////////////////////////////////////////////////////////////
21unsigned int _pic_get_register( unsigned int channel,
22                                unsigned int index )
23{
[320]24    unsigned int* vaddr = (unsigned int*)SEG_PIC_BASE + channel*IOPIC_SPAN + index;
[298]25    return _io_extended_read( vaddr );
26}
27
28/////////////////////////////////////////////////////////////////////////////////
29void _pic_set_register( unsigned int channel,
30                        unsigned int index,
31                        unsigned int value )
32{
[320]33    unsigned int* vaddr = (unsigned int*)SEG_PIC_BASE + channel*IOPIC_SPAN + index;
[298]34    _io_extended_write( vaddr, value );
35}
36
[413]37
[298]38/////////////////////////////////////////////////////////////////////////////////
39void _pic_init( unsigned int channel,      // source PIC HWI channel
40                unsigned int vaddr,        // dest XCU WTI address
41                unsigned int extend )      // dest XCU cluster_xy
42{
43    _pic_set_register( channel, IOPIC_ADDRESS, vaddr );
44    _pic_set_register( channel, IOPIC_EXTEND, extend );
[413]45    _pic_set_register( channel, IOPIC_MASK, 1 );
[298]46}
47
48/////////////////////////////////////////////////////////////////////////////////
49unsigned int _pic_get_status( unsigned int channel )
50{
51    return _pic_get_register( channel, IOPIC_STATUS );
52}
53
54
55// Local Variables:
56// tab-width: 4
57// c-basic-offset: 4
58// c-file-offsets:((innamespace . 0)(inline-open . 0))
59// indent-tabs-mode: nil
60// End:
61// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
62
Note: See TracBrowser for help on using the repository browser.