Annotation of Gnu-Mach/xen/xen.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *  Copyright (C) 2007-2011 Free Software Foundation
                      3:  *
                      4:  * This program is free software ; you can redistribute it and/or modify
                      5:  * it under the terms of the GNU General Public License as published by
                      6:  * the Free Software Foundation ; either version 2 of the License, or
                      7:  * (at your option) any later version.
                      8:  *
                      9:  * This program is distributed in the hope that it will be useful,
                     10:  * but WITHOUT ANY WARRANTY ; without even the implied warranty of
                     11:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
                     12:  * GNU General Public License for more details.
                     13:  *
                     14:  * You should have received a copy of the GNU General Public License
                     15:  * along with the program ; if not, write to the Free Software
                     16:  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     17:  */
                     18: 
                     19: #include <sys/types.h>
                     20: #include <string.h>
                     21: #include <mach/xen.h>
                     22: #include <machine/xen.h>
                     23: #include <machine/ipl.h>
                     24: #include <xen/block.h>
                     25: #include <xen/console.h>
                     26: #include <xen/grant.h>
                     27: #include <xen/net.h>
                     28: #include <xen/store.h>
                     29: #include <xen/time.h>
                     30: #include "xen.h"
                     31: #include "evt.h"
                     32: 
                     33: void hyp_debug()
                     34: {
                     35:        panic("debug");
                     36: }
                     37: 
                     38: void hyp_init(void)
                     39: { 
                     40:         hyp_grant_init(); 
                     41:         hyp_store_init(); 
                     42:        evtchn_port_t port = hyp_event_channel_bind_virq(VIRQ_DEBUG, 0);
                     43:        hyp_evt_handler(port, hyp_debug, 0, SPL7);
                     44: } 
                     45: 
                     46: void hyp_dev_init(void)
                     47: {
                     48:        /* these depend on hyp_init() and working threads */
                     49:        hyp_block_init(); 
                     50:        hyp_net_init(); 
                     51: }
                     52: 
                     53: void _hyp_halt(void)
                     54: {
                     55:        hyp_halt();
                     56: }
                     57: 
                     58: void _hyp_todo(unsigned long from)
                     59: {
                     60:        printf("TODO: at %lx\n",from);
                     61:        hyp_halt();
                     62: }
                     63: 
                     64: extern int int_mask[];
                     65: void hyp_idle(void)
                     66: {
                     67:        int cpu = 0;
                     68:        hyp_shared_info.vcpu_info[cpu].evtchn_upcall_mask = 0xff;
                     69:        barrier();
                     70:        /* Avoid blocking if there are pending events */
                     71:        if (!hyp_shared_info.vcpu_info[cpu].evtchn_upcall_pending &&
                     72:                !hyp_shared_info.evtchn_pending[cpu])
                     73:                hyp_block();
                     74:        while (1) {
                     75:                hyp_shared_info.vcpu_info[cpu].evtchn_upcall_mask = 0x00;
                     76:                barrier();
                     77:                if (!hyp_shared_info.vcpu_info[cpu].evtchn_upcall_pending &&
                     78:                        !hyp_shared_info.evtchn_pending[cpu])
                     79:                        /* Didn't miss any event, can return to threads.  */
                     80:                        break;
                     81:                hyp_shared_info.vcpu_info[cpu].evtchn_upcall_mask = 0xff;
                     82:                hyp_c_callback(NULL,NULL);
                     83:        }
                     84: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.