12428aad8SPatrick Mooney /* 22428aad8SPatrick Mooney * This file and its contents are supplied under the terms of the 32428aad8SPatrick Mooney * Common Development and Distribution License ("CDDL"), version 1.0. 42428aad8SPatrick Mooney * You may only use this file in accordance with the terms of version 52428aad8SPatrick Mooney * 1.0 of the CDDL. 62428aad8SPatrick Mooney * 72428aad8SPatrick Mooney * A full copy of the text of the CDDL should have accompanied this 82428aad8SPatrick Mooney * source. A copy of the CDDL is also available via the Internet at 92428aad8SPatrick Mooney * http://www.illumos.org/license/CDDL. 102428aad8SPatrick Mooney */ 112428aad8SPatrick Mooney 122428aad8SPatrick Mooney /* 132428aad8SPatrick Mooney * Copyright 2016 Joyent, Inc. 142428aad8SPatrick Mooney */ 152428aad8SPatrick Mooney 162428aad8SPatrick Mooney #ifndef _COMM_PAGE_H 172428aad8SPatrick Mooney #define _COMM_PAGE_H 182428aad8SPatrick Mooney 192428aad8SPatrick Mooney #ifndef _ASM 202428aad8SPatrick Mooney #include <sys/types.h> 212428aad8SPatrick Mooney #include <sys/param.h> 222428aad8SPatrick Mooney #include <sys/time.h> 232428aad8SPatrick Mooney #endif /* _ASM */ 242428aad8SPatrick Mooney 252428aad8SPatrick Mooney #ifdef __cplusplus 262428aad8SPatrick Mooney extern "C" { 272428aad8SPatrick Mooney #endif 282428aad8SPatrick Mooney 292428aad8SPatrick Mooney #define COMM_PAGE_SIZE PAGESIZE 302428aad8SPatrick Mooney 312428aad8SPatrick Mooney #ifndef _ASM 322428aad8SPatrick Mooney 332428aad8SPatrick Mooney /* 342428aad8SPatrick Mooney * x86 comm page 352428aad8SPatrick Mooney * 362428aad8SPatrick Mooney * This struct defines the data format for the "comm page": kernel data made 372428aad8SPatrick Mooney * directly available to userspace for read-only operations. This enables 382428aad8SPatrick Mooney * facilities such as clock_gettime to operate entirely in userspace without 392428aad8SPatrick Mooney * the need for a trap or fasttrap. 402428aad8SPatrick Mooney * 412428aad8SPatrick Mooney * A note about 32-bit/64-bit compatibility: 422428aad8SPatrick Mooney * The current format of the comm page is designed to be consistent for both 432428aad8SPatrick Mooney * 32-bit and 64-bit programs running in a 64-bit kernel. On 32-bit kernels, 442428aad8SPatrick Mooney * the comm page is not exposed to userspace due to the difference in 452428aad8SPatrick Mooney * timespec_t sizing. 462428aad8SPatrick Mooney * 472428aad8SPatrick Mooney * This struct is instantiated "by hand" in assembly to preserve the global 482428aad8SPatrick Mooney * symbols it contains. That layout must be kept in sync with the structure 492428aad8SPatrick Mooney * defined here. 50*5d9d9091SRichard Lowe * See: "uts/i86pc/ml/comm_page.S" 512428aad8SPatrick Mooney */ 522428aad8SPatrick Mooney typedef struct comm_page_s { 532428aad8SPatrick Mooney hrtime_t cp_tsc_last; 542428aad8SPatrick Mooney hrtime_t cp_tsc_hrtime_base; 552428aad8SPatrick Mooney hrtime_t cp_tsc_resume_cap; 562428aad8SPatrick Mooney uint32_t cp_tsc_type; 572428aad8SPatrick Mooney uint32_t cp_tsc_max_delta; 582428aad8SPatrick Mooney 592428aad8SPatrick Mooney volatile uint32_t cp_hres_lock; /* must be 8-byte aligned */ 602428aad8SPatrick Mooney uint32_t cp_nsec_scale; 612428aad8SPatrick Mooney int64_t cp_hrestime_adj; 622428aad8SPatrick Mooney hrtime_t cp_hres_last_tick; 632428aad8SPatrick Mooney uint32_t cp_tsc_ncpu; 642428aad8SPatrick Mooney uint32_t _cp_pad; 652428aad8SPatrick Mooney volatile int64_t cp_hrestime[2]; 662428aad8SPatrick Mooney #if defined(_MACHDEP) 672428aad8SPatrick Mooney hrtime_t cp_tsc_sync_tick_delta[NCPU]; 682428aad8SPatrick Mooney #else 692428aad8SPatrick Mooney /* length resides in cp_ncpu */ 702428aad8SPatrick Mooney hrtime_t cp_tsc_sync_tick_delta[]; 712428aad8SPatrick Mooney #endif /* defined(_MACHDEP) */ 722428aad8SPatrick Mooney } comm_page_t; 732428aad8SPatrick Mooney 742428aad8SPatrick Mooney #if defined(_KERNEL) 752428aad8SPatrick Mooney extern comm_page_t comm_page; 762428aad8SPatrick Mooney 772428aad8SPatrick Mooney #if defined(_MACHDEP) 782428aad8SPatrick Mooney extern hrtime_t tsc_last; 792428aad8SPatrick Mooney extern hrtime_t tsc_hrtime_base; 802428aad8SPatrick Mooney extern hrtime_t tsc_resume_cap; 812428aad8SPatrick Mooney extern uint32_t tsc_type; 822428aad8SPatrick Mooney extern uint32_t tsc_max_delta; 832428aad8SPatrick Mooney extern volatile uint32_t hres_lock; 842428aad8SPatrick Mooney extern uint32_t nsec_scale; 852428aad8SPatrick Mooney extern int64_t hrestime_adj; 862428aad8SPatrick Mooney extern hrtime_t hres_last_tick; 872428aad8SPatrick Mooney extern uint32_t tsc_ncpu; 882428aad8SPatrick Mooney extern volatile timestruc_t hrestime; 892428aad8SPatrick Mooney extern hrtime_t tsc_sync_tick_delta[NCPU]; 902428aad8SPatrick Mooney #endif /* defined(_MACHDEP) */ 912428aad8SPatrick Mooney #endif /* defined(_KERNEL) */ 922428aad8SPatrick Mooney 932428aad8SPatrick Mooney #endif /* _ASM */ 942428aad8SPatrick Mooney 952428aad8SPatrick Mooney #ifdef __cplusplus 962428aad8SPatrick Mooney } 972428aad8SPatrick Mooney #endif 982428aad8SPatrick Mooney 992428aad8SPatrick Mooney #endif /* _COMM_PAGE_H */ 100