This source file includes following definitions.
- opal_timer_altix_open
- opal_timer_altix_close
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 #include "opal_config.h"
  25 
  26 #include <sys/types.h>
  27 #include <sys/stat.h>
  28 #include <fcntl.h>
  29 #include <sys/ioctl.h>
  30 #include <sys/mman.h>
  31 #include <sn/mmtimer.h>
  32 #include <unistd.h>
  33 #include <errno.h>
  34 
  35 #include "opal/mca/timer/timer.h"
  36 #include "opal/mca/timer/altix/timer_altix.h"
  37 #include "opal/constants.h"
  38 #include "opal/util/sys_limits.h"
  39 
  40 opal_timer_t opal_timer_altix_freq;
  41 opal_timer_t opal_timer_altix_usec_conv;
  42 volatile unsigned long *opal_timer_altix_mmdev_timer_addr;
  43 static unsigned long *mmdev_map;
  44 
  45 static int opal_timer_altix_open(void);
  46 static int opal_timer_altix_close(void);
  47 
  48 const opal_timer_base_component_2_0_0_t mca_timer_altix_component = {
  49     
  50 
  51     .timerc_version = {
  52         OPAL_TIMER_BASE_VERSION_2_0_0,
  53 
  54         
  55         .mca_component_name = "altix",
  56         MCA_BASE_MAKE_VERSION(component, OPAL_MAJOR_VERSION, OPAL_MINOR_VERSION,
  57                               OPAL_RELEASE_VERSION),
  58 
  59         
  60         .mca_open_component = opal_timer_altix_open,
  61         .mca_close_component = opal_timer_altix_close,
  62     },
  63     .timerc_data = {
  64         
  65         MCA_BASE_METADATA_PARAM_CHECKPOINT
  66     },
  67 };
  68 
  69 
  70 static int
  71 opal_timer_altix_open(void)
  72 {
  73     int fd, ret;
  74     unsigned long val;
  75     long offset;
  76 
  77     fd = open(MMTIMER_FULLNAME, O_RDONLY);
  78     if (fd < 0) return OPAL_ERR_NOT_FOUND;
  79 
  80     
  81     ret = ioctl(fd, MMTIMER_MMAPAVAIL, 0);
  82     if (1 != ret) return OPAL_ERR_NOT_SUPPORTED;
  83 
  84     
  85     ret = ioctl(fd, MMTIMER_GETFREQ, &val);
  86     if (ret == -ENOSYS) return OPAL_ERR_NOT_SUPPORTED;
  87     opal_timer_altix_freq = val;
  88     opal_timer_altix_usec_conv = opal_timer_altix_freq / 1000000;
  89 
  90     
  91     ret = ioctl(fd, MMTIMER_GETOFFSET, 0);
  92     if (ret == -ENOSYS) return OPAL_ERR_NOT_SUPPORTED;
  93     offset = ret;
  94 
  95     mmdev_map = mmap(0, (size_t)opal_getpagesize(), PROT_READ, MAP_SHARED, fd, 0);
  96     if (NULL == mmdev_map) return OPAL_ERR_NOT_SUPPORTED;
  97     opal_timer_altix_mmdev_timer_addr = mmdev_map + offset;
  98     close(fd);
  99 
 100     return OPAL_SUCCESS;
 101 }
 102 
 103 
 104 static int
 105 opal_timer_altix_close(void)
 106 {
 107     if (NULL != mmdev_map) {
 108         munmap(mmdev_map, (size_t)opal_getpagesize());
 109     }
 110 
 111     return OPAL_SUCCESS;
 112 }