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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [include/] [asm-sparc/] [irq.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1633 jcastillo
/* $Id: irq.h,v 1.1 2005-12-20 11:32:11 jcastillo Exp $
2
 * irq.h: IRQ registers on the Sparc.
3
 *
4
 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
5
 */
6
 
7
#ifndef _SPARC_IRQ_H
8
#define _SPARC_IRQ_H
9
 
10
#include <linux/linkage.h>
11
 
12
#include <asm/system.h>     /* For NCPUS */
13
 
14
#define NR_IRQS    15
15
 
16
/* Dave Redman (djhr@tadpole.co.uk)
17
 * changed these to function pointers.. it saves cycles and will allow
18
 * the irq dependencies to be split into different files at a later date
19
 * sun4c_irq.c, sun4m_irq.c etc so we could reduce the kernel size.
20
 */
21
extern void (*disable_irq)(unsigned int);
22
extern void (*enable_irq)(unsigned int);
23
extern void (*clear_clock_irq)( void );
24
extern void (*clear_profile_irq)( void );
25
extern void (*load_profile_irq)( unsigned int timeout );
26
extern void (*init_timers)(void (*lvl10_irq)(int, void *, struct pt_regs *));
27
extern void claim_ticker14(void (*irq_handler)(int, void *, struct pt_regs *),
28
                           int irq,
29
                           unsigned int timeout);
30
 
31
#ifdef __SMP__
32
extern void (*set_cpu_int)(int, int);
33
extern void (*clear_cpu_int)(int, int);
34
extern void (*set_irq_udt)(int);
35
#endif
36
 
37
extern int request_fast_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname);
38
 
39
/* On the sun4m, just like the timers, we have both per-cpu and master
40
 * interrupt registers.
41
 */
42
 
43
/* These registers are used for sending/receiving irqs from/to
44
 * different cpu's.
45
 */
46
struct sun4m_intreg_percpu {
47
        unsigned int tbt;        /* Interrupts still pending for this cpu. */
48
 
49
        /* These next two registers are WRITE-ONLY and are only
50
         * "on bit" sensitive, "off bits" written have NO affect.
51
         */
52
        unsigned int clear;  /* Clear this cpus irqs here. */
53
        unsigned int set;    /* Set this cpus irqs here. */
54
        unsigned char space[PAGE_SIZE - 12];
55
};
56
 
57
/*
58
 * djhr
59
 * Actually the clear and set fields in this struct are misleading..
60
 * according to the SLAVIO manual (and the same applies for the SEC)
61
 * the clear field clears bits in the mask which will ENABLE that IRQ
62
 * the set field sets bits in the mask to DISABLE the IRQ.
63
 *
64
 * Also the undirected_xx address in the SLAVIO is defined as
65
 * RESERVED and write only..
66
 *
67
 * DAVEM_NOTE: The SLAVIO only specifies behavior on uniprocessor
68
 *             sun4m machines, for MP the layout makes more sense.
69
 */
70
struct sun4m_intregs {
71
        struct sun4m_intreg_percpu cpu_intregs[NCPUS];
72
        unsigned int tbt;                /* IRQ's that are still pending. */
73
        unsigned int irqs;               /* Master IRQ bits. */
74
 
75
        /* Again, like the above, two these registers are WRITE-ONLY. */
76
        unsigned int clear;              /* Clear master IRQ's by setting bits here. */
77
        unsigned int set;                /* Set master IRQ's by setting bits here. */
78
 
79
        /* This register is both READ and WRITE. */
80
        unsigned int undirected_target;  /* Which cpu gets undirected irqs. */
81
};
82
 
83
extern struct sun4m_intregs *sun4m_interrupts;
84
 
85
/*
86
 * Bit field defines for the interrupt registers on various
87
 * Sparc machines.
88
 */
89
 
90
/* The sun4c interrupt register. */
91
#define SUN4C_INT_ENABLE  0x01     /* Allow interrupts. */
92
#define SUN4C_INT_E14     0x80     /* Enable level 14 IRQ. */
93
#define SUN4C_INT_E10     0x20     /* Enable level 10 IRQ. */
94
#define SUN4C_INT_E8      0x10     /* Enable level 8 IRQ. */
95
#define SUN4C_INT_E6      0x08     /* Enable level 6 IRQ. */
96
#define SUN4C_INT_E4      0x04     /* Enable level 4 IRQ. */
97
#define SUN4C_INT_E1      0x02     /* Enable level 1 IRQ. */
98
 
99
/* Dave Redman (djhr@tadpole.co.uk)
100
 * The sun4m interrupt registers.
101
 */
102
#define SUN4M_INT_ENABLE        0x80000000
103
#define SUN4M_INT_E14           0x00000080
104
#define SUN4M_INT_E10           0x00080000
105
 
106
#define SUN4M_HARD_INT(x)       (0x000000001 << (x))
107
#define SUN4M_SOFT_INT(x)       (0x000010000 << (x))
108
 
109
#define SUN4M_INT_MASKALL       0x80000000        /* mask all interrupts */
110
#define SUN4M_INT_MODULE_ERR    0x40000000        /* module error */
111
#define SUN4M_INT_M2S_WRITE     0x20000000        /* write buffer error */
112
#define SUN4M_INT_ECC           0x10000000        /* ecc memory error */
113
#define SUN4M_INT_FLOPPY        0x00400000        /* floppy disk */
114
#define SUN4M_INT_MODULE        0x00200000        /* module interrupt */
115
#define SUN4M_INT_VIDEO         0x00100000        /* onboard video */
116
#define SUN4M_INT_REALTIME      0x00080000        /* system timer */
117
#define SUN4M_INT_SCSI          0x00040000        /* onboard scsi */
118
#define SUN4M_INT_AUDIO         0x00020000        /* audio/isdn */
119
#define SUN4M_INT_ETHERNET      0x00010000        /* onboard ethernet */
120
#define SUN4M_INT_SERIAL        0x00008000        /* serial ports */
121
#define SUN4M_INT_KBDMS         0x00004000        /* keyboard/mouse */
122
#define SUN4M_INT_SBUSBITS      0x00003F80        /* sbus int bits */
123
 
124
#define SUN4M_INT_SBUS(x)       (1 << (x+7))
125
 
126
#endif

powered by: WebSVN 2.1.0

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