1 /* 2 * Copyright (c) 2006 The DragonFly Project. All rights reserved. 3 * 4 * This code is derived from software contributed to The DragonFly Project 5 * by Matthew Dillon <dillon@backplane.com> 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 3. Neither the name of The DragonFly Project nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific, prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 * 34 * $DragonFly: src/sys/platform/vkernel/include/md_var.h,v 1.24 2008/03/20 02:14:54 dillon Exp $ 35 */ 36 37 #ifndef _MACHINE_MD_VAR_H_ 38 #define _MACHINE_MD_VAR_H_ 39 40 #ifndef _SYS_TYPES_H_ 41 #include <sys/types.h> 42 #endif 43 #ifndef _SYS_VKERNEL_H_ 44 #include <sys/vkernel.h> 45 #endif 46 #ifndef _NET_ETHERNET_H_ 47 #include <net/ethernet.h> 48 #endif 49 50 #define VKNETIF_MAX 16 51 #define VKDISK_MAX 16 52 #define SERNOLEN 30 53 54 #define pagezero(addr) bzero((addr), PAGE_SIZE) 55 56 struct vknetif_info { 57 int tap_fd; 58 int tap_unit; 59 in_addr_t netif_addr; 60 in_addr_t netif_mask; 61 u_char *enaddr; 62 }; 63 64 struct vkdisk_info { 65 int fd; 66 int unit; 67 int flags; 68 int reserved01; 69 enum vkdisk_type { VKD_EMPTY, VKD_DISK, VKD_CD } type; 70 char fname[MAXPATHLEN]; 71 char *serno; 72 }; 73 74 extern char sigcode[]; 75 extern int szsigcode; 76 extern vpte_t *KernelPTA; /* NOTE: Offset for direct VA translation */ 77 extern vpte_t *KernelPTD; 78 extern vm_offset_t crashdumpmap; 79 extern int cpu_fxsr; 80 81 extern char cpu_vendor[]; /* XXX belongs in i386 */ 82 extern u_int cpu_vendor_id; /* XXX belongs in i386 */ 83 extern u_int cpu_id; /* XXX belongs in i386 */ 84 85 extern struct vkdisk_info DiskInfo[VKDISK_MAX]; 86 extern int DiskNum; 87 extern int MemImageFd; 88 extern struct vknetif_info NetifInfo[VKNETIF_MAX]; 89 extern int NetifNum; 90 extern int _ucodesel, _udatasel; 91 92 extern int via_feature_xcrypt; 93 extern int via_feature_rng; 94 95 struct mdglobaldata; 96 struct __mcontext; 97 98 vpte_t *pmap_kpte(vm_offset_t va); 99 void cpu_gdinit (struct mdglobaldata *gd, int cpu); 100 101 void cpu_heavy_restore(void); /* cannot be called from C */ 102 void cpu_lwkt_restore(void); /* cannot be called from C */ 103 void cpu_idle_restore(void); /* cannot be called from C */ 104 void cpu_kthread_restore(void); /* cannot be called from C */ 105 thread_t cpu_exit_switch (struct thread *next); 106 void cpu_setregs (void); 107 void cpu_idle (void); 108 void cpu_mask_all_signals (void); 109 void cpu_unmask_all_signals (void); 110 void go_user (struct intrframe *frame); 111 112 void init_exceptions(void); 113 void init_kqueue(void); 114 void init_fpu(int supports_sse); 115 void kern_trap(struct trapframe *); 116 void user_trap(struct trapframe *); 117 void syscall2 (struct trapframe *); 118 void vcons_set_mode(int); 119 int npxdna(struct trapframe *); 120 void npxpush(struct __mcontext *mctx); 121 void npxpop(struct __mcontext *mctx); 122 123 void signalintr(int intr); 124 125 struct kqueue_info; 126 struct kqueue_info *kqueue_add(int, void (*)(void *, struct intrframe *), void *); 127 void kqueue_del(struct kqueue_info *); 128 struct kqueue_info *kqueue_add_timer(void (*func)(void *, struct intrframe *), void *data); 129 void kqueue_reload_timer(struct kqueue_info *info, int ms); 130 131 132 #endif 133