From 7dcf22a389ae4373e29fc2686bf9bae2ac3a8d39 Mon Sep 17 00:00:00 2001 From: Jakub Jermar Date: Sat, 14 Oct 2006 11:36:29 +0000 Subject: [PATCH] Move the new IRQ redirector to ddi/. Add function for assigning unique device numbers. Change sparc64/drivers/kbd.c to assign devno to keyboard. --- kernel/Makefile | 3 +- kernel/arch/sparc64/src/drivers/kbd.c | 7 +++-- kernel/arch/sparc64/src/sparc64.c | 2 +- kernel/arch/sparc64/src/trap/interrupt.c | 2 +- kernel/genarch/include/kbd/ns16550.h | 2 +- kernel/genarch/include/kbd/z8530.h | 2 +- kernel/genarch/src/kbd/ns16550.c | 2 +- kernel/genarch/src/kbd/z8530.c | 2 +- .../kbd/ns16550.h => generic/include/ddi/device.h} | 21 ++++--------- kernel/generic/include/{ => ddi}/irq.h | 5 +--- kernel/generic/include/typedefs.h | 3 ++ .../kbd/ns16550.h => generic/src/ddi/device.c} | 35 ++++++++++++---------- kernel/generic/src/{interrupt => ddi}/irq.c | 4 +-- 13 files changed, 44 insertions(+), 46 deletions(-) copy kernel/{genarch/include/kbd/ns16550.h => generic/include/ddi/device.h} (75%) rename kernel/generic/include/{ => ddi}/irq.h (97%) copy kernel/{genarch/include/kbd/ns16550.h => generic/src/ddi/device.c} (75%) rename kernel/generic/src/{interrupt => ddi}/irq.c (99%) diff --git a/kernel/Makefile b/kernel/Makefile index b9aa65136..ec49f56dd 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -147,8 +147,9 @@ GENERIC_SOURCES = \ generic/src/console/cmd.c \ generic/src/cpu/cpu.c \ generic/src/ddi/ddi.c \ + generic/src/ddi/irq.c \ + generic/src/ddi/device.c \ generic/src/interrupt/interrupt.c \ - generic/src/interrupt/irq.c \ generic/src/main/main.c \ generic/src/main/kinit.c \ generic/src/main/uinit.c \ diff --git a/kernel/arch/sparc64/src/drivers/kbd.c b/kernel/arch/sparc64/src/drivers/kbd.c index 9982c3ff2..4ee5fc27c 100644 --- a/kernel/arch/sparc64/src/drivers/kbd.c +++ b/kernel/arch/sparc64/src/drivers/kbd.c @@ -40,7 +40,8 @@ #ifdef CONFIG_NS16550 #include #endif -#include +#include +#include #include #include #include @@ -117,7 +118,7 @@ void kbd_init(ofw_tree_node_t *node) return; } else { kbd_irq.inr = inr; - kbd_irq.devno = 0; /* FIXME: assign unique devno */ + kbd_irq.devno = device_assign_devno(); kbd_irq.trigger = IRQ_TRIGGER_LEVEL; kbd_irq.claim = z8530_claim; kbd_irq.handler = z8530_irq_handler; @@ -136,7 +137,7 @@ void kbd_init(ofw_tree_node_t *node) return; } else { kbd_irq.inr = inr; - kbd_irq.devno = 0; /* FIXME: assign unique devno */ + kbd_irq.devno = device_assign_devno(); kbd_irq.trigger = IRQ_TRIGGER_LEVEL; kbd_irq.claim = ns16550_claim; kbd_irq.handler = ns16550_irq_handler; diff --git a/kernel/arch/sparc64/src/sparc64.c b/kernel/arch/sparc64/src/sparc64.c index 540506c1e..73c541da1 100644 --- a/kernel/arch/sparc64/src/sparc64.c +++ b/kernel/arch/sparc64/src/sparc64.c @@ -46,7 +46,7 @@ #include #include #include -#include +#include bootinfo_t bootinfo; diff --git a/kernel/arch/sparc64/src/trap/interrupt.c b/kernel/arch/sparc64/src/trap/interrupt.c index f54f343d6..f1de09c18 100644 --- a/kernel/arch/sparc64/src/trap/interrupt.c +++ b/kernel/arch/sparc64/src/trap/interrupt.c @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/kernel/genarch/include/kbd/ns16550.h b/kernel/genarch/include/kbd/ns16550.h index c22dcf499..6d9ab2371 100644 --- a/kernel/genarch/include/kbd/ns16550.h +++ b/kernel/genarch/include/kbd/ns16550.h @@ -38,7 +38,7 @@ #define KERN_NS16550_H_ #include -#include +#include extern void ns16550_init(void); extern void ns16550_poll(void); diff --git a/kernel/genarch/include/kbd/z8530.h b/kernel/genarch/include/kbd/z8530.h index c02e1dca2..a7de067c7 100644 --- a/kernel/genarch/include/kbd/z8530.h +++ b/kernel/genarch/include/kbd/z8530.h @@ -37,8 +37,8 @@ #ifndef KERN_Z8530_H_ #define KERN_Z8530_H_ -#include #include +#include extern bool z8530_belongs_to_kernel; diff --git a/kernel/genarch/src/kbd/ns16550.c b/kernel/genarch/src/kbd/ns16550.c index e66d9a0f8..2fca75ead 100644 --- a/kernel/genarch/src/kbd/ns16550.c +++ b/kernel/genarch/src/kbd/ns16550.c @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/kernel/genarch/src/kbd/z8530.c b/kernel/genarch/src/kbd/z8530.c index 2d41bdbc6..b4fe19aed 100644 --- a/kernel/genarch/src/kbd/z8530.c +++ b/kernel/genarch/src/kbd/z8530.c @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/kernel/genarch/include/kbd/ns16550.h b/kernel/generic/include/ddi/device.h similarity index 75% copy from kernel/genarch/include/kbd/ns16550.h copy to kernel/generic/include/ddi/device.h index c22dcf499..dfe404686 100644 --- a/kernel/genarch/include/kbd/ns16550.h +++ b/kernel/generic/include/ddi/device.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2004 Jakub Jermar + * Copyright (C) 2006 Jakub Jermar * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,27 +26,18 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @addtogroup genarch +/** @addtogroup genericddi * @{ */ -/** - * @file - * @brief Headers for NS 16550 serial port / keyboard driver. +/** @file */ -#ifndef KERN_NS16550_H_ -#define KERN_NS16550_H_ +#ifndef KERN_DEVICE_H_ +#define KERN_DEVICE_H_ #include -#include -extern void ns16550_init(void); -extern void ns16550_poll(void); -extern void ns16550_grab(void); -extern void ns16550_release(void); -extern char ns16550_key_read(chardev_t *d); -extern irq_ownership_t ns16550_claim(void); -extern void ns16550_irq_handler(irq_t *irq, void *arg, ...); +extern devno_t device_assign_devno(void); #endif diff --git a/kernel/generic/include/irq.h b/kernel/generic/include/ddi/irq.h similarity index 97% rename from kernel/generic/include/irq.h rename to kernel/generic/include/ddi/irq.h index 22de889d3..359ba3d09 100644 --- a/kernel/generic/include/irq.h +++ b/kernel/generic/include/ddi/irq.h @@ -26,7 +26,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @addtogroup genericinterrupt +/** @addtogroup genericddi * @{ */ /** @file @@ -38,9 +38,6 @@ #include #include -typedef int32_t inr_t; -typedef int32_t devno_t; - typedef enum { IRQ_DECLINE, /**< Decline to service. */ IRQ_ACCEPT /**< Accept to service. */ diff --git a/kernel/generic/include/typedefs.h b/kernel/generic/include/typedefs.h index 70b789377..8519a2bb0 100644 --- a/kernel/generic/include/typedefs.h +++ b/kernel/generic/include/typedefs.h @@ -95,6 +95,9 @@ typedef struct hash_table_operations hash_table_operations_t; typedef struct btree_node btree_node_t; typedef struct btree btree_t; +typedef signed int inr_t; +typedef signed int devno_t; + #endif /** @} diff --git a/kernel/genarch/include/kbd/ns16550.h b/kernel/generic/src/ddi/device.c similarity index 75% copy from kernel/genarch/include/kbd/ns16550.h copy to kernel/generic/src/ddi/device.c index c22dcf499..de01bcdd0 100644 --- a/kernel/genarch/include/kbd/ns16550.h +++ b/kernel/generic/src/ddi/device.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2004 Jakub Jermar + * Copyright (C) 2006 Jakub Jermar * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,29 +26,34 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @addtogroup genarch +/** @addtogroup genericddi * @{ */ /** * @file - * @brief Headers for NS 16550 serial port / keyboard driver. + * @brief Device numbers. */ -#ifndef KERN_NS16550_H_ -#define KERN_NS16550_H_ - +#include +#include +#include #include -#include -extern void ns16550_init(void); -extern void ns16550_poll(void); -extern void ns16550_grab(void); -extern void ns16550_release(void); -extern char ns16550_key_read(chardev_t *d); -extern irq_ownership_t ns16550_claim(void); -extern void ns16550_irq_handler(irq_t *irq, void *arg, ...); +static atomic_t last; + +/** Assign new device number. + * + * @return Unique device number. + */ +devno_t device_assign_devno(void) +{ + devno_t devno; + + devno = (devno_t) atomic_postinc(&last); + ASSERT(devno >= 0); -#endif + return devno; +} /** @} */ diff --git a/kernel/generic/src/interrupt/irq.c b/kernel/generic/src/ddi/irq.c similarity index 99% rename from kernel/generic/src/interrupt/irq.c rename to kernel/generic/src/ddi/irq.c index 288ec2d2a..70a25654a 100644 --- a/kernel/generic/src/interrupt/irq.c +++ b/kernel/generic/src/ddi/irq.c @@ -26,7 +26,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @addtogroup genericinterrupt +/** @addtogroup genericddi * @{ */ /** @@ -58,7 +58,7 @@ * are unique, the claim functions can always return IRQ_ACCEPT. */ -#include +#include #include #include #include -- 2.11.4.GIT