diff options
Diffstat (limited to 'sys/ia64/include')
-rw-r--r-- | sys/ia64/include/efi.h | 3 | ||||
-rw-r--r-- | sys/ia64/include/ia64_cpu.h | 13 | ||||
-rw-r--r-- | sys/ia64/include/pcpu.h | 4 | ||||
-rw-r--r-- | sys/ia64/include/pmap.h | 10 | ||||
-rw-r--r-- | sys/ia64/include/sf_buf.h | 16 | ||||
-rw-r--r-- | sys/ia64/include/smp.h | 2 |
6 files changed, 34 insertions, 14 deletions
diff --git a/sys/ia64/include/efi.h b/sys/ia64/include/efi.h index f32f3fa..02bef10 100644 --- a/sys/ia64/include/efi.h +++ b/sys/ia64/include/efi.h @@ -161,8 +161,11 @@ void efi_boot_finish(void); int efi_boot_minimal(uint64_t); void *efi_get_table(struct uuid *); void efi_get_time(struct efi_tm *); +struct efi_md *efi_md_find(vm_paddr_t); struct efi_md *efi_md_first(void); +struct efi_md *efi_md_last(void); struct efi_md *efi_md_next(struct efi_md *); +struct efi_md *efi_md_prev(struct efi_md *); void efi_reset_system(void); int efi_set_time(struct efi_tm *); int efi_var_get(efi_char *, struct uuid *, uint32_t *, size_t *, void *); diff --git a/sys/ia64/include/ia64_cpu.h b/sys/ia64/include/ia64_cpu.h index bb8284d..74e649b 100644 --- a/sys/ia64/include/ia64_cpu.h +++ b/sys/ia64/include/ia64_cpu.h @@ -266,7 +266,7 @@ ia64_ptc_e(uint64_t v) static __inline void ia64_ptc_g(uint64_t va, uint64_t log2size) { - __asm __volatile("ptc.g %0,%1;; srlz.i;;" :: "r"(va), "r"(log2size)); + __asm __volatile("ptc.g %0,%1;;" :: "r"(va), "r"(log2size)); } /* @@ -275,7 +275,7 @@ ia64_ptc_g(uint64_t va, uint64_t log2size) static __inline void ia64_ptc_ga(uint64_t va, uint64_t log2size) { - __asm __volatile("ptc.ga %0,%1;; srlz.i;;" :: "r"(va), "r"(log2size)); + __asm __volatile("ptc.ga %0,%1;;" :: "r"(va), "r"(log2size)); } /* @@ -288,6 +288,15 @@ ia64_ptc_l(uint64_t va, uint64_t log2size) } /* + * Invalidate the ALAT on the local processor. + */ +static __inline void +ia64_invala(void) +{ + __asm __volatile("invala;;"); +} + +/* * Unordered memory load. */ diff --git a/sys/ia64/include/pcpu.h b/sys/ia64/include/pcpu.h index 05e2cc1..5ad61ba 100644 --- a/sys/ia64/include/pcpu.h +++ b/sys/ia64/include/pcpu.h @@ -37,6 +37,7 @@ struct pcpu_stats { u_long pcs_nasts; /* IPI_AST counter. */ u_long pcs_nclks; /* Clock interrupt counter. */ u_long pcs_nextints; /* ExtINT counter. */ + u_long pcs_nhardclocks; /* IPI_HARDCLOCK counter. */ u_long pcs_nhighfps; /* IPI_HIGH_FP counter. */ u_long pcs_nhwints; /* Hardware int. counter. */ u_long pcs_npreempts; /* IPI_PREEMPT counter. */ @@ -51,7 +52,8 @@ struct pcpu_md { vm_offset_t vhpt; /* Address of VHPT */ uint64_t lid; /* local CPU ID */ uint64_t clock; /* Clock counter. */ - uint64_t clockadj; /* Clock adjust. */ + uint64_t clock_load; /* Clock reload value. */ + uint32_t clock_mode; /* Clock ET mode */ uint32_t awake:1; /* CPU is awake? */ struct pcpu_stats stats; /* Interrupt stats. */ #ifdef _KERNEL diff --git a/sys/ia64/include/pmap.h b/sys/ia64/include/pmap.h index 6f3b320..2b89df0 100644 --- a/sys/ia64/include/pmap.h +++ b/sys/ia64/include/pmap.h @@ -68,6 +68,7 @@ struct pv_entry; struct md_page { int pv_list_count; TAILQ_HEAD(,pv_entry) pv_list; + vm_memattr_t memattr; }; struct pmap { @@ -115,21 +116,22 @@ extern vm_offset_t virtual_end; extern uint64_t pmap_vhpt_base[]; extern int pmap_vhpt_log2size; -#define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT +#define pmap_page_get_memattr(m) ((m)->md.memattr) #define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list)) -#define pmap_page_set_memattr(m, ma) (void)0 #define pmap_mapbios(pa, sz) pmap_mapdev(pa, sz) #define pmap_unmapbios(va, sz) pmap_unmapdev(va, sz) -vm_offset_t pmap_steal_memory(vm_size_t); vm_offset_t pmap_alloc_vhpt(void); void pmap_bootstrap(void); void pmap_kenter(vm_offset_t va, vm_offset_t pa); vm_paddr_t pmap_kextract(vm_offset_t va); void pmap_kremove(vm_offset_t); void *pmap_mapdev(vm_paddr_t, vm_size_t); -void pmap_unmapdev(vm_offset_t, vm_size_t); +void pmap_page_set_memattr(vm_page_t, vm_memattr_t); +vm_offset_t pmap_page_to_va(vm_page_t); +vm_offset_t pmap_steal_memory(vm_size_t); struct pmap *pmap_switch(struct pmap *pmap); +void pmap_unmapdev(vm_offset_t, vm_size_t); #endif /* _KERNEL */ diff --git a/sys/ia64/include/sf_buf.h b/sys/ia64/include/sf_buf.h index 8d67542..75bcdfa 100644 --- a/sys/ia64/include/sf_buf.h +++ b/sys/ia64/include/sf_buf.h @@ -41,18 +41,20 @@ */ struct sf_buf; -static __inline vm_offset_t -sf_buf_kva(struct sf_buf *sf) +static __inline vm_page_t +sf_buf_page(struct sf_buf *sf) { - - return (IA64_PHYS_TO_RR7(VM_PAGE_TO_PHYS((vm_page_t)sf))); + + return ((vm_page_t)sf); } -static __inline vm_page_t -sf_buf_page(struct sf_buf *sf) +static __inline vm_offset_t +sf_buf_kva(struct sf_buf *sf) { + vm_page_t m; - return ((vm_page_t)sf); + m = sf_buf_page(sf); + return (pmap_page_to_va(m)); } #endif /* !_MACHINE_SF_BUF_H_ */ diff --git a/sys/ia64/include/smp.h b/sys/ia64/include/smp.h index d2aff76..b80d6a0 100644 --- a/sys/ia64/include/smp.h +++ b/sys/ia64/include/smp.h @@ -7,6 +7,7 @@ #ifdef _KERNEL #define IPI_AST ia64_ipi_ast +#define IPI_HARDCLOCK ia64_ipi_hardclock #define IPI_PREEMPT ia64_ipi_preempt #define IPI_RENDEZVOUS ia64_ipi_rndzvs #define IPI_STOP ia64_ipi_stop @@ -37,6 +38,7 @@ struct ia64_ap_state { }; extern int ia64_ipi_ast; +extern int ia64_ipi_hardclock; extern int ia64_ipi_highfp; extern int ia64_ipi_nmi; extern int ia64_ipi_preempt; |