Changeset d0c5901 in mainline


Ignore:
Timestamp:
2006-06-02T14:07:29Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c034b16
Parents:
116d1ef4
Message:

IA64 uspace keyboard kernel part

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/arch.h

    r116d1ef4 rd0c5901  
    3232#define LOADED_PROG_STACK_PAGES_NO 2
    3333
     34#include <arch/ski/ski.h>
     35
    3436#endif
  • arch/ia64/include/interrupt.h

    r116d1ef4 rd0c5901  
    3434#include <arch/register.h>
    3535
    36 #define IRQ_COUNT               1       /* TODO */
     36#define IRQ_COUNT               257 /* 256 NOT suppotred IRQS*//* TODO */
     37#define IRQ_KBD                 256 /* One simulated interrupt for ski simulator keyboard*/
    3738
    3839/** External Interrupt vectors. */
     
    120121extern void nop_handler(__u64 vector, istate_t *istate);
    121122extern void external_interrupt(__u64 vector, istate_t *istate);
     123extern void virtual_interrupt(__u64 irq, void *param);
    122124extern void disabled_fp_register(__u64 vector, istate_t *istate);
    123125
  • arch/ia64/include/ski/ski.h

    r116d1ef4 rd0c5901  
    3131
    3232#include <arch/types.h>
     33#include <console/console.h>
    3334
    3435#define SKI_INIT_CONSOLE        20
     
    3738
    3839extern void ski_init_console(void);
     40extern void ski_set_console_sysinfo(void);
    3941extern void poll_keyboard(void);
    4042
     43extern chardev_t ski_uconsole;
     44extern int kbd_uspace;
     45
    4146#endif
  • arch/ia64/src/ia64.c

    r116d1ef4 rd0c5901  
    7373void arch_post_mm_init(void)
    7474{
     75        ski_set_console_sysinfo();
    7576}
    7677
  • arch/ia64/src/interrupt.c

    r116d1ef4 rd0c5901  
    4545#include <proc/scheduler.h>
    4646#include <ipc/sysipc.h>
     47#include <ipc/irq.h>
     48#include <ipc/ipc.h>
    4749
    4850
     
    5355
    5456#define BUNDLE_SIZE             16
     57
    5558
    5659char *vector_names_64_bundle[VECTORS_64_BUNDLE] = {
     
    135138        printf("Interrupted context dump:\n");
    136139        printf("ar.bsp=%p\tar.bspstore=%p\n", istate->ar_bsp, istate->ar_bspstore);
    137         printf("ar.rnat=%#llx\tar.rsc=%$llx\n", istate->ar_rnat, istate->ar_rsc);
    138         printf("ar.ifs=%#llx\tar.pfs=%#llx\n", istate->ar_ifs, istate->ar_pfs);
    139         printf("cr.isr=%#llx\tcr.ipsr=%#llx\t\n", istate->cr_isr.value, istate->cr_ipsr);
     140        printf("ar.rnat=%#018llx\tar.rsc=%#018llx\n", istate->ar_rnat, istate->ar_rsc);
     141        printf("ar.ifs=%#018llx\tar.pfs=%#018llx\n", istate->ar_ifs, istate->ar_pfs);
     142        printf("cr.isr=%#018llx\tcr.ipsr=%#018llx\t\n", istate->cr_isr.value, istate->cr_ipsr);
    140143       
    141         printf("cr.iip=%#llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, iip ? iip : "?");
    142         printf("cr.iipa=%#llx\t(%s)\n", istate->cr_iipa, iipa ? iipa : "?");
    143         printf("cr.ifa=%#llx\t(%s)\n", istate->cr_ifa, ifa ? ifa : "?");
     144        printf("cr.iip=%#018llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, iip);
     145        printf("cr.iipa=%#018llx\t(%s)\n", istate->cr_iipa, iipa);
     146        printf("cr.ifa=%#018llx\t(%s)\n", istate->cr_ifa, ifa);
    144147}
    145148
     
    243246}
    244247
     248void virtual_interrupt(__u64 irq,void *param)
     249{
     250        switch(irq) {
     251                case IRQ_KBD:
     252                        if(kbd_uspace) ipc_irq_send_notif(irq);
     253                        break;
     254                default:
     255                        panic("\nUnhandled Virtual Interrupt request %d\n", irq);
     256                break;
     257        }
     258}
     259
    245260/* Reregister irq to be IPC-ready */
    246261void irq_ipc_bind_arch(__native irq)
    247262{
     263        if(irq==IRQ_KBD) {
     264                kbd_uspace=1;
     265                return;
     266        }
    248267        panic("not implemented\n");
    249268        /* TODO */
    250269}
     270
     271
     272
  • arch/ia64/src/ski/ski.c

    r116d1ef4 rd0c5901  
    3030#include <console/console.h>
    3131#include <console/chardev.h>
     32#include <arch/interrupt.h>
     33#include <sysinfo/sysinfo.h>
    3234
    33 static chardev_t ski_console;
     35chardev_t ski_console;
     36chardev_t ski_uconsole;
    3437static bool kb_disable;
     38int kbd_uspace=0;
    3539
    3640static void ski_putchar(chardev_t *d, const char ch);
     
    112116        if(ch == '\r')
    113117                ch = '\n';
    114         if (ch)
    115                 chardev_push_character(&ski_console, ch);
     118        if (ch){
     119                if(kbd_uspace){
     120                        chardev_push_character(&ski_uconsole, ch);
     121                        virtual_interrupt(IRQ_KBD,NULL);
     122                }
     123                else {
     124                        chardev_push_character(&ski_console, ch);
     125
     126                }       
     127               
     128        }       
    116129}
    117130
     
    153166
    154167        chardev_initialize("ski_console", &ski_console, &ski_ops);
     168        chardev_initialize("ski_uconsole", &ski_uconsole, &ski_ops);
    155169        stdin = &ski_console;
    156170        stdout = &ski_console;
     171
    157172}
     173/** Setup console sysinfo (i.e. Keyboard IRQ)
     174 *
     175 * Because sysinfo neads memory allocation/dealocation
     176 * this functions should be called separetely from init.
     177 *
     178 */
     179void ski_set_console_sysinfo(void)
     180{
     181        sysinfo_set_item_val("kbd",NULL,true);
     182        sysinfo_set_item_val("kbd.irq",NULL,IRQ_KBD);
     183}
  • generic/include/ipc/irq.h

    r116d1ef4 rd0c5901  
    4343        CMD_PORT_READ_1,
    4444        CMD_PORT_WRITE_1,
     45        CMD_IA64_GETCHAR,
    4546        CMD_LAST
    4647} irq_cmd_type;
  • generic/src/ipc/irq.c

    r116d1ef4 rd0c5901  
    4949#include <atomic.h>
    5050#include <syscall/copy.h>
     51#include <console/console.h>
    5152
    5253typedef struct {
     
    102103                case CMD_PORT_WRITE_1:
    103104                        outb((long)code->cmds[i].addr, code->cmds[i].value);
     105                        break;
     106#endif
     107#if defined(ia64)
     108                case CMD_IA64_GETCHAR:
     109                        IPC_SET_ARG2(call->data, _getc(&ski_uconsole));
    104110                        break;
    105111#endif
Note: See TracChangeset for help on using the changeset viewer.