patch-2.3.20 linux/arch/ppc/8xx_io/commproc.c
Next file: linux/arch/ppc/8xx_io/commproc.h
Previous file: linux/arch/ppc/8xx_io/Makefile
Back to the patch index
Back to the overall index
- Lines: 85
- Date:
Thu Oct 7 10:17:08 1999
- Orig file:
v2.3.19/linux/arch/ppc/8xx_io/commproc.c
- Orig date:
Fri Mar 19 10:50:03 1999
diff -u --recursive --new-file v2.3.19/linux/arch/ppc/8xx_io/commproc.c linux/arch/ppc/8xx_io/commproc.c
@@ -30,12 +30,7 @@
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <asm/irq.h>
-#ifdef CONFIG_MBX
-#include <asm/mbx.h>
-#endif
-#ifdef CONFIG_FADS
-#include <asm/fads.h>
-#endif
+#include <asm/mpc8xx.h>
#include <asm/page.h>
#include <asm/pgtable.h>
#include <asm/8xx_immap.h>
@@ -95,32 +90,36 @@
*/
dp_alloc_base = CPM_DATAONLY_BASE;
dp_alloc_top = dp_alloc_base + CPM_DATAONLY_SIZE;
+
/* Set the host page for allocation.
*/
host_buffer = host_page_addr; /* Host virtual page address */
host_end = host_page_addr + PAGE_SIZE;
- pte = va_to_pte(&init_task, host_page_addr);
+ pte = find_pte(&init_mm, host_page_addr);
pte_val(*pte) |= _PAGE_NO_CACHE;
flush_tlb_page(current->mm->mmap, host_buffer);
/* Tell everyone where the comm processor resides.
*/
cpmp = (cpm8xx_t *)commproc;
+}
+/* This is called during init_IRQ. We used to do it above, but this
+ * was too early since init_IRQ was not yet called.
+ */
+void
+cpm_interrupt_init(void)
+{
/* Initialize the CPM interrupt controller.
*/
((immap_t *)IMAP_ADDR)->im_cpic.cpic_cicr =
(CICR_SCD_SCC4 | CICR_SCC_SCC3 | CICR_SCB_SCC2 | CICR_SCA_SCC1) |
- (((5)/2) << 13) | CICR_HP_MASK;
- /* I hard coded the CPM interrupt to 5 above
- * since the CPM_INTERRUPT define is relative to
- * the linux irq structure not what the hardware
- * belives. -- Cort
- */
+ ((CPM_INTERRUPT/2) << 13) | CICR_HP_MASK;
((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr = 0;
+
/* Set our interrupt handler with the core CPU.
*/
- if (request_irq(CPM_INTERRUPT, cpm_interrupt, 0, "cpm", NULL) != 0)
+ if (request_8xxirq(CPM_INTERRUPT, cpm_interrupt, 0, "cpm", NULL) != 0)
panic("Could not allocate CPM IRQ!");
/* Install our own error handler.
@@ -178,6 +177,16 @@
((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr |= (1 << vec);
}
+/* Free a CPM interrupt handler.
+*/
+void
+cpm_free_handler(int vec)
+{
+ cpm_vecs[vec].handler = NULL;
+ cpm_vecs[vec].dev_id = NULL;
+ ((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr &= ~(1 << vec);
+}
+
/* Allocate some memory from the dual ported ram. We may want to
* enforce alignment restrictions, but right now everyone is a good
* citizen.
@@ -218,7 +227,7 @@
* The internal baud rate clock is the system clock divided by 16.
* This assumes the baudrate is 16x oversampled by the uart.
*/
-#define BRG_INT_CLK (((bd_t *)res)->bi_intfreq * 1000000)
+#define BRG_INT_CLK (((bd_t *)__res)->bi_intfreq * 1000000)
#define BRG_UART_CLK (BRG_INT_CLK/16)
void
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)