--- linux-2.0.29/arch/m68k/kernel/head.S.291197-2 Mon Dec 8 06:34:02 1997
+++ linux-2.0.29/arch/m68k/kernel/head.S Mon Dec 8 06:35:20 1997
@@ -1070,9 +1070,9 @@
movel #0xF8000000,%a1
1:
movel %a1,%a0
- movel #0x00400000,%d0
+ movel #0x02000000,%d0
jbsr mmu_map
- addl #0x01000000,%a1
+ addl #0x02000000,%a1
cmpl #0,%a1
jbne 1b
--- linux-2.0.29/arch/m68k/mac/config.c.291197-2 Mon Dec 8 07:46:56 1997
+++ linux-2.0.29/arch/m68k/mac/config.c Mon Dec 8 07:48:45 1997
@@ -86,7 +86,7 @@
int leap, oldleap, isleap;
int mon_days[14] = { -1, 31, 27, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, -1 };
- time = boot_info.bi_mac.boottime; /* seconds */
+ time = boot_info.bi_mac.boottime +60*boot_info.bi_mac.gmtbias; /* seconds */
#if 1
printk("mac_gettod: boottime %ld gmtbias %d \n",
--- linux-2.0.29/drivers/char/mac_SCC.c.291197-2 Sun Dec 7 20:11:46 1997
+++ linux-2.0.29/drivers/char/mac_SCC.c Mon Dec 8 06:57:54 1997
@@ -345,7 +345,7 @@
extern void breakpoint(void); /* For the KGDB frame character */
-static _INLINE_ void receive_chars(struct async_struct *info,
+static /*_INLINE_*/ void receive_chars(struct async_struct *info,
struct pt_regs *regs)
{
struct tty_struct *tty = info->tty;
@@ -376,7 +376,7 @@
if (tty->flip.count >= TTY_FLIPBUF_SIZE)
queue_task_irq_off(&tty->flip.tqueue, &tq_timer);
- tty->flip.count++;
+
if (stat & Rx_OVR) {
flag = TTY_OVERRUN;
/* reset the error indication */
@@ -390,6 +390,31 @@
write_zsreg(info->private->zs_channel, 0, ERR_RES);
} else
flag = 0;
+
+ if (tty->flip.buf_num
+ && tty->flip.count >= TTY_FLIPBUF_SIZE-1) {
+#ifdef SCC_DEBUG_OVERRUN
+ printk("mac_SCC: flip buffer overrun, count %d!\n",
+ tty->flip.count);
+#endif
+ return;
+ }
+
+ if (tty->flip.char_buf_ptr < &tty->flip.char_buf[0]) {
+ printk("mac_SCC: char flip buffer %d corrupt %p %p %d!\n",
+ tty->flip.buf_num, tty->flip.char_buf_ptr,
+ &tty->flip.char_buf[0], tty->flip.count);
+ return;
+ }
+
+ if (tty->flip.flag_buf_ptr < &tty->flip.flag_buf[0]) {
+ printk("mac_SCC: flag flip buffer %d corrupt %p %p %d!\n",
+ tty->flip.buf_num, tty->flip.flag_buf_ptr,
+ &tty->flip.flag_buf[0], tty->flip.count);
+ return;
+ }
+
+ tty->flip.count++;
*tty->flip.flag_buf_ptr++ = flag;
*tty->flip.char_buf_ptr++ = ch;
@@ -433,7 +458,7 @@
rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
}
-static _INLINE_ void status_handle(struct async_struct *info)
+static /*_INLINE_*/ void status_handle(struct async_struct *info)
{
unsigned char status;
@@ -503,16 +528,6 @@
else
shift = 0; /* Channel B */
- /*
- * Big problem: we register one interrupt for both channels.
- * Hence, info is always the pointer to the async_struct of
- * the first device registered. So we'll have to keep a local copy
- * of info_A and info_B here.
- * Consequence: only Channel B interrupts are recognized here...
- * and these seem to loop infinitely as the interrupt status doesn't
- * get cleared.
- */
-
for (;;) {
zs_intreg = read_zsreg(info->private->zs_chan_a, 3);
#ifdef SCC_DEBUG
@@ -747,6 +762,7 @@
panic("macserial: can't get irq %d", IRQ4);
printk("mac_SCC: got SCC master interrupt %d, channel %d info %p\n",
IRQ4, channel, info);
+ got_autovector = 1;
}
if (info->private->zs_chan_a == info->private->zs_channel) {
@@ -874,7 +890,7 @@
/* speed == 0 -> drop DTR */
save_flags(flags);
cli();
- info->private->curregs[5] &= ~DTR;
+ info->private->curregs[5] &= ~(DTR | RTS);
write_zsreg(info->private->zs_channel, 5, info->private->curregs[5]);
restore_flags(flags);
return;
--- linux-2.0.29/drivers/nubus/nubus.c.291197-2 Mon Dec 8 06:36:37 1997
+++ linux-2.0.29/drivers/nubus/nubus.c Mon Dec 8 06:39:49 1997
@@ -356,12 +356,6 @@
void nubus_probe_slot(int slot, int mode)
{
-#define C030_DISABLE_D (0xfffffeff)
-#define C030_ENABLE_D (0x00000100)
-#define C030_DISABLE_I (0xfffffffe)
-#define C030_ENABLE_I (0x00000001)
-#define C030_DISABLE_A (0xfffffefe)
-#define C030_ENABLE_A (0x00000101)
unsigned char *rp;
unsigned char dp;
int lanes;
@@ -371,15 +365,6 @@
struct nubus_dirent *nd;
struct nubus_type type_info;
- if (!m68k_is040or060) {
- /* disable data cache */
- asm volatile ("movec %/cacr,%/d0\n\t"
- "andil %0,%/d0\n\t"
- "movec %/d0,%/cacr"
- : : "i" (C030_DISABLE_A)
- : "d0");
- }
-
/*
* Ok see whats cooking in the bytelanes
*/
@@ -530,23 +515,7 @@
if (mode==1)
nubus_video_shutup(slot, &type_info);
- if (!m68k_is040or060) {
- /* re-enable data cache */
- asm volatile ("movec %/cacr,%/d0\n\t"
- "oril %0,%/d0\n\t"
- "movec %/d0,%/cacr"
- : : "i" (C030_ENABLE_A)
- : "d0");
- }
return;
- }
- if (!m68k_is040or060) {
- /* re-enable data cache */
- asm volatile ("movec %/cacr,%/d0\n\t"
- "oril %0,%/d0\n\t"
- "movec %/d0,%/cacr"
- : : "i" (C030_ENABLE_A)
- : "d0");
}
}