Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * VMI Time wrappers
  3  *
  4  * Copyright (C) 2006, VMware, Inc.
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License as published by
  8  * the Free Software Foundation; either version 2 of the License, or
  9  * (at your option) any later version.
 10  *
 11  * This program is distributed in the hope that it will be useful, but
 12  * WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
 14  * NON INFRINGEMENT.  See the GNU General Public License for more
 15  * details.
 16  *
 17  * You should have received a copy of the GNU General Public License
 18  * along with this program; if not, write to the Free Software
 19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 20  *
 21  * Send feedback to dhecht@vmware.com
 22  *
 23  */
 24 
 25 #ifndef __VMI_TIME_H
 26 #define __VMI_TIME_H
 27 
 28 /*
 29  * Raw VMI call indices for timer functions
 30  */
 31 #define VMI_CALL_GetCycleFrequency      66
 32 #define VMI_CALL_GetCycleCounter        67
 33 #define VMI_CALL_SetAlarm               68
 34 #define VMI_CALL_CancelAlarm            69
 35 #define VMI_CALL_GetWallclockTime       70
 36 #define VMI_CALL_WallclockUpdated       71
 37 
 38 /* Cached VMI timer operations */
 39 extern struct vmi_timer_ops {
 40         u64 (*get_cycle_frequency)(void);
 41         u64 (*get_cycle_counter)(int);
 42         u64 (*get_wallclock)(void);
 43         int (*wallclock_updated)(void);
 44         void (*set_alarm)(u32 flags, u64 expiry, u64 period);
 45         void (*cancel_alarm)(u32 flags);
 46 } vmi_timer_ops;
 47 
 48 /* Prototypes */
 49 extern void __init vmi_time_init(void);
 50 extern unsigned long vmi_get_wallclock(void);
 51 extern int vmi_set_wallclock(unsigned long now);
 52 extern unsigned long long vmi_sched_clock(void);
 53 extern unsigned long vmi_cpu_khz(void);
 54 
 55 #ifdef CONFIG_X86_LOCAL_APIC
 56 extern void __devinit vmi_time_bsp_init(void);
 57 extern void __devinit vmi_time_ap_init(void);
 58 #endif
 59 
 60 /*
 61  * When run under a hypervisor, a vcpu is always in one of three states:
 62  * running, halted, or ready.  The vcpu is in the 'running' state if it
 63  * is executing.  When the vcpu executes the halt interface, the vcpu
 64  * enters the 'halted' state and remains halted until there is some work
 65  * pending for the vcpu (e.g. an alarm expires, host I/O completes on
 66  * behalf of virtual I/O).  At this point, the vcpu enters the 'ready'
 67  * state (waiting for the hypervisor to reschedule it).  Finally, at any
 68  * time when the vcpu is not in the 'running' state nor the 'halted'
 69  * state, it is in the 'ready' state.
 70  *
 71  * Real time is advances while the vcpu is 'running', 'ready', or
 72  * 'halted'.  Stolen time is the time in which the vcpu is in the
 73  * 'ready' state.  Available time is the remaining time -- the vcpu is
 74  * either 'running' or 'halted'.
 75  *
 76  * All three views of time are accessible through the VMI cycle
 77  * counters.
 78  */
 79 
 80 /* The cycle counters. */
 81 #define VMI_CYCLES_REAL         0
 82 #define VMI_CYCLES_AVAILABLE    1
 83 #define VMI_CYCLES_STOLEN       2
 84 
 85 /* The alarm interface 'flags' bits */
 86 #define VMI_ALARM_COUNTERS      2
 87 
 88 #define VMI_ALARM_COUNTER_MASK  0x000000ff
 89 
 90 #define VMI_ALARM_WIRED_IRQ0    0x00000000
 91 #define VMI_ALARM_WIRED_LVTT    0x00010000
 92 
 93 #define VMI_ALARM_IS_ONESHOT    0x00000000
 94 #define VMI_ALARM_IS_PERIODIC   0x00000100
 95 
 96 #define CONFIG_VMI_ALARM_HZ     100
 97 
 98 #endif
 99 
  This page was automatically generated by the LXR engine.