Rev 4341 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4341 | Rev 4348 | ||
---|---|---|---|
Line 24... | Line 24... | ||
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup ppc32 |
29 | /** @addtogroup ppc32 |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | /** @file |
32 | /** @file |
33 | */ |
33 | */ |
34 | 34 | ||
Line 38... | Line 38... | ||
38 | #include <byteorder.h> |
38 | #include <byteorder.h> |
39 | #include <bitops.h> |
39 | #include <bitops.h> |
40 | 40 | ||
41 | static volatile uint32_t *pic = NULL; |
41 | static volatile uint32_t *pic = NULL; |
42 | 42 | ||
43 | void pic_init(uintptr_t base, size_t size) |
43 | void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg) |
44 | { |
44 | { |
45 | pic = (uint32_t *) hw_map(base, size); |
45 | pic = (uint32_t *) hw_map(base, size); |
- | 46 | *cir = pic_ack_interrupt; |
|
- | 47 | *cir_arg = NULL; |
|
46 | } |
48 | } |
47 | 49 | ||
48 | void pic_enable_interrupt(int intnum) |
50 | void pic_enable_interrupt(inr_t intnum) |
49 | { |
51 | { |
50 | if (pic) { |
52 | if (pic) { |
51 | if (intnum < 32) |
53 | if (intnum < 32) |
52 | pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum); |
54 | pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum); |
53 | else |
55 | else |
54 | pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32)); |
56 | pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32)); |
55 | } |
57 | } |
56 | 58 | ||
57 | } |
59 | } |
58 | 60 | ||
59 | void pic_disable_interrupt(int intnum) |
61 | void pic_disable_interrupt(inr_t intnum) |
60 | { |
62 | { |
61 | if (pic) { |
63 | if (pic) { |
62 | if (intnum < 32) |
64 | if (intnum < 32) |
63 | pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum)); |
65 | pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum)); |
64 | else |
66 | else |
65 | pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32))); |
67 | pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32))); |
66 | } |
68 | } |
67 | } |
69 | } |
68 | 70 | ||
69 | void pic_ack_interrupt(int intnum) |
71 | void pic_ack_interrupt(void *arg, inr_t intnum) |
70 | { |
72 | { |
71 | if (pic) { |
73 | if (pic) { |
72 | if (intnum < 32) |
74 | if (intnum < 32) |
73 | pic[PIC_ACK_LOW] = 1 << intnum; |
75 | pic[PIC_ACK_LOW] = 1 << intnum; |
74 | else |
76 | else |