⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer_altix_component.c

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 C
字号:
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana *                         University Research and Technology *                         Corporation.  All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University *                         of Tennessee Research Foundation.  All rights *                         reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,  *                         University of Stuttgart.  All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. *                         All rights reserved. * $COPYRIGHT$ *  * Additional copyrights may follow *  * $HEADER$ */#include "opal_config.h"#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ioctl.h>#include <sys/mman.h>#include <sn/mmtimer.h>#include <unistd.h>#include <errno.h>#include "opal/mca/timer/timer.h"#include "opal/mca/timer/altix/timer_altix.h"#include "opal/constants.h"opal_timer_t opal_timer_altix_freq;opal_timer_t opal_timer_altix_usec_conv;volatile unsigned long *opal_timer_altix_mmdev_timer_addr;static unsigned long *mmdev_map;static int opal_timer_altix_open(void);static int opal_timer_altix_close(void);const opal_timer_base_component_1_0_0_t mca_timer_altix_component = {    /* First, the mca_component_t struct containing meta information       about the component itself */    {        /* Indicate that we are a timer v1.0.0 component (which also           implies a specific MCA version) */        OPAL_TIMER_BASE_VERSION_1_0_0,        /* Component name and version */        "altix",        OPAL_MAJOR_VERSION,        OPAL_MINOR_VERSION,        OPAL_RELEASE_VERSION,        /* Component open and close functions */        opal_timer_altix_open,	opal_timer_altix_close    },    /* Next the MCA v1.0.0 component meta data */    {        /* Whether the component is checkpointable or not */        true    },};static intopal_timer_altix_open(void){    int fd, ret;    unsigned long val;    long offset;    fd = open(MMTIMER_FULLNAME, O_RDONLY);    if (fd < 0) return OPAL_ERR_NOT_FOUND;    /* make sure we can map the timer */    ret = ioctl(fd, MMTIMER_MMAPAVAIL, 0);    if (1 != ret) return OPAL_ERR_NOT_SUPPORTED;    /* find the frequency */    ret = ioctl(fd, MMTIMER_GETFREQ, &val);    if (ret == -ENOSYS) return OPAL_ERR_NOT_SUPPORTED;    opal_timer_altix_freq = val;    opal_timer_altix_usec_conv = opal_timer_altix_freq / 1000000;    /* find the address of the counter */    ret = ioctl(fd, MMTIMER_GETOFFSET, 0);    if (ret == -ENOSYS) return OPAL_ERR_NOT_SUPPORTED;    offset = ret;    mmdev_map = mmap(0, getpagesize(), PROT_READ, MAP_SHARED, fd, 0);    if (NULL == mmdev_map) return OPAL_ERR_NOT_SUPPORTED;    opal_timer_altix_mmdev_timer_addr = mmdev_map + offset;    return OPAL_SUCCESS;}static intopal_timer_altix_close(void){    if (NULL != mmdev_map) {        munmap(mmdev_map, getpagesize());    }    return OPAL_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -