/* 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 <parlib/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)
