mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
da3fb3c9aa
The IOP driver calls into the OSS driver to enable its IRQ. This undesirable coupling between drivers only exists because the OSS driver doesn't correctly handle all of its machspec IRQs. Fix OSS handling of enable/disable for VIA1 IRQs (8 thru 15) which includes MAC_IRQ_ADB. Back when I implemented pmac_zilog support I redefined IRQ_MAC_SCC incorrectly. Change this to a machspec IRQ so that it works on OSS. Clean up the unused OSS audio IRQ and OSS_IRQLEV_* cruft that only confuses things. Fix the OSS description in macints.c and remove an obsolete comment. Don't enable the VIA1 irq before registering the handler. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
80 lines
1.8 KiB
C
80 lines
1.8 KiB
C
/*
|
|
* OSS
|
|
*
|
|
* This is used in place of VIA2 on the IIfx.
|
|
*/
|
|
|
|
#define OSS_BASE (0x50f1a000)
|
|
|
|
/*
|
|
* Interrupt level offsets for mac_oss->irq_level
|
|
*/
|
|
|
|
#define OSS_NUBUS0 0
|
|
#define OSS_NUBUS1 1
|
|
#define OSS_NUBUS2 2
|
|
#define OSS_NUBUS3 3
|
|
#define OSS_NUBUS4 4
|
|
#define OSS_NUBUS5 5
|
|
#define OSS_IOPISM 6
|
|
#define OSS_IOPSCC 7
|
|
#define OSS_SOUND 8
|
|
#define OSS_SCSI 9
|
|
#define OSS_60HZ 10
|
|
#define OSS_VIA1 11
|
|
#define OSS_UNUSED1 12
|
|
#define OSS_UNUSED2 13
|
|
#define OSS_PARITY 14
|
|
#define OSS_UNUSED3 15
|
|
|
|
#define OSS_NUM_SOURCES 16
|
|
|
|
/*
|
|
* Pending interrupt bits in mac_oss->irq_pending
|
|
*/
|
|
|
|
#define OSS_IP_NUBUS0 0x0001
|
|
#define OSS_IP_NUBUS1 0x0002
|
|
#define OSS_IP_NUBUS2 0x0004
|
|
#define OSS_IP_NUBUS3 0x0008
|
|
#define OSS_IP_NUBUS4 0x0010
|
|
#define OSS_IP_NUBUS5 0x0020
|
|
#define OSS_IP_IOPISM 0x0040
|
|
#define OSS_IP_IOPSCC 0x0080
|
|
#define OSS_IP_SOUND 0x0100
|
|
#define OSS_IP_SCSI 0x0200
|
|
#define OSS_IP_60HZ 0x0400
|
|
#define OSS_IP_VIA1 0x0800
|
|
#define OSS_IP_UNUSED1 0x1000
|
|
#define OSS_IP_UNUSED2 0x2000
|
|
#define OSS_IP_PARITY 0x4000
|
|
#define OSS_IP_UNUSED3 0x8000
|
|
|
|
#define OSS_IP_NUBUS (OSS_IP_NUBUS0|OSS_IP_NUBUS1|OSS_IP_NUBUS2|OSS_IP_NUBUS3|OSS_IP_NUBUS4|OSS_IP_NUBUS5)
|
|
|
|
/*
|
|
* Rom Control Register
|
|
*/
|
|
|
|
#define OSS_POWEROFF 0x80
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
struct mac_oss {
|
|
__u8 irq_level[0x10]; /* [0x000-0x00f] Interrupt levels */
|
|
__u8 padding0[0x1F2]; /* [0x010-0x201] IO space filler */
|
|
__u16 irq_pending; /* [0x202-0x203] pending interrupts bits */
|
|
__u8 rom_ctrl; /* [0x204-0x204] ROM cntl reg (for poweroff) */
|
|
__u8 padding1[0x2]; /* [0x205-0x206] currently unused by A/UX */
|
|
__u8 ack_60hz; /* [0x207-0x207] 60 Hz ack. */
|
|
};
|
|
|
|
extern volatile struct mac_oss *oss;
|
|
extern int oss_present;
|
|
|
|
extern void oss_register_interrupts(void);
|
|
extern void oss_irq_enable(int);
|
|
extern void oss_irq_disable(int);
|
|
|
|
#endif /* __ASSEMBLY__ */
|