/* getsysstats - Determine various system internal values, stub version.
   Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#include <errno.h>
#include <sys/sysinfo.h>
#include <ros/memlayout.h>
#include <vcore.h>

int
__get_nprocs_conf ()
{
  return 1;
}
weak_alias (__get_nprocs_conf, get_nprocs_conf)

int
__get_nprocs ()
{
  return max_vcores();
}
weak_alias (__get_nprocs, get_nprocs)

long int
__get_phys_pages ()
{
  return 2*1024*1024*1024/PGSIZE;
}
weak_alias (__get_phys_pages, get_phys_pages)

long int
__get_avphys_pages ()
{
  return __get_phys_pages();
}
weak_alias (__get_avphys_pages, get_avphys_pages)
