OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-ppc64/] [iSeries/] [ItLpQueue.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * ItLpQueue.h
3
 * Copyright (C) 2001  Mike Corrigan IBM Corporation
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18
 */
19
 
20
//=============================================================================
21
//
22
//      This control block defines the simple LP queue structure that is 
23
//      shared between the hypervisor (PLIC) and the OS in order to send 
24
//      events to an LP.  
25
//    
26
 
27
#ifndef _PPC_TYPES_H
28
#include <asm/types.h>
29
#endif
30
#include <asm/ptrace.h>
31
 
32
 
33
struct HvLpEvent;
34
 
35
 
36
#ifndef _ITLPQUEUE_H
37
#define _ITLPQUEUE_H
38
 
39
#define ITMaxLpQueues 8
40
 
41
#define NotUsed         0        // Queue will not be used by PLIC
42
#define DedicatedIo     1       // Queue dedicated to IO processor specified
43
#define DedicatedLp     2       // Queue dedicated to LP specified
44
#define Shared          3       // Queue shared for both IO and LP
45
 
46
#define LpEventStackSize 4096
47
#define LpEventMaxSize   256
48
#define LpEventAlign     64
49
 
50
struct ItLpQueue
51
{
52
//
53
//  The xSlicCurEventPtr is the pointer to the next event stack entry that will
54
//  become valid.  The OS must peek at this entry to determine if it is valid.
55
//  PLIC will set the valid indicator as the very last store into that entry.
56
//
57
//  When the OS has completed processing of the event then it will mark the event
58
//  as invalid so that PLIC knows it can store into that event location again.
59
//
60
// If the event stack fills and there are overflow events, then PLIC will set 
61
// the xPlicOverflowIntPending flag in which case the OS will have to fetch the 
62
// additional LP events once they have drained the event stack.
63
//
64
// The first 16-bytes are known by both the OS and PLIC.  The remainder of the
65
// cache line is for use by the OS.
66
//
67
//=============================================================================
68
        u8      xPlicOverflowIntPending;// 0x00 Overflow events are pending
69
        u8      xPlicStatus;            // 0x01 DedicatedIo or DedicatedLp or NotUsed
70
        u16     xSlicLogicalProcIndex;  // 0x02 Logical Proc Index for correlation
71
        u8      xPlicRsvd[12];          // 0x04
72
        char*   xSlicCurEventPtr;       // 0x10
73
        char*   xSlicLastValidEventPtr; // 0x18
74
        char*   xSlicEventStackPtr;     // 0x20
75
        u8      xIndex;                 // 0x28 unique sequential index.
76
        u8      xSlicRsvd[3];           // 0x29-2b
77
        u32     xInUseWord;             // 0x2C
78
        u64     xLpIntCount;            // 0x30 Total Lp Int msgs processed
79
        u64     xLpIntCountByType[9];   // 0x38-0x7F Event counts by type
80
};
81
 
82
extern struct ItLpQueue xItLpQueue;
83
 
84
extern struct HvLpEvent * ItLpQueue_getNextLpEvent( struct ItLpQueue * );
85
extern int ItLpQueue_isLpIntPending( struct ItLpQueue * );
86
extern unsigned ItLpQueue_process( struct ItLpQueue *, struct pt_regs * );
87
extern void ItLpQueue_clearValid( struct HvLpEvent * );
88
 
89
static __inline__ void process_iSeries_events( void )
90
{
91
        __asm__ __volatile__ (
92
        "       li      0,0x5555        \n\
93
                sc"
94
        : : : "r0", "r3" );
95
}
96
 
97
 
98
//=============================================================================
99
#endif // _ITLPQUEUE_H

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.