Ignore:
Timestamp:
Jun 18, 2017, 10:06:41 PM (5 years ago)
Author:
alain
Message:

Introduce syscalls.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/syscalls/sys_clock.c

    r1 r23  
    11/*
    2  * sys_clock: get system current time
     2 * sys_clock: get calling core cycles count
    33 *
    4  * Copyright (c) 2008,2009,2010,2011,2012 Ghassan Almaless
    5  * Copyright (c) 2011,2012 UPMC Sorbonne Universites
     4 * Author    Alain Greiner (2016,2017)
     5 * 
     6 * Copyright (c) UPMC Sorbonne Universites
    67 *
    7  * This file is part of ALMOS-kernel.
     8 * This file is part of ALMOS-MKH.
    89 *
    9  * ALMOS-kernel is free software; you can redistribute it and/or modify it
     10 * ALMOS-MKH is free software; you can redistribute it and/or modify it
    1011 * under the terms of the GNU General Public License as published by
    1112 * the Free Software Foundation; version 2.0 of the License.
    1213 *
    13  * ALMOS-kernel is distributed in the hope that it will be useful, but
     14 * ALMOS-MKH is distributed in the hope that it will be useful, but
    1415 * WITHOUT ANY WARRANTY; without even the implied warranty of
    1516 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     
    1718 *
    1819 * You should have received a copy of the GNU General Public License
    19  * along with ALMOS-kernel; if not, write to the Free Software Foundation,
     20 * along with ALMOS-MKH; if not, write to the Free Software Foundation,
    2021 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    2122 */
    2223
     24#include <hal_types.h>
     25#include <hal_uspace.h>
    2326#include <errno.h>
    24 #include <config.h>
    25 #include <cpu.h>
     27#include <core.h>
    2628#include <thread.h>
     29#include <process.h>
     30#include <vmm.h>
     31#include <printk.h>
    2732
    28 int sys_clock(uint64_t *val)
     33//////////////////////////////////
     34int sys_clock (uint64_t * cycles )
    2935{
    30         error_t err;
    31         uint64_t cycles;
     36        error_t   error;
     37    paddr_t   paddr;
     38        uint64_t  k_cycles;
    3239
    33         if((val == NULL) || NOT_IN_USPACE((uint_t)val))
     40    thread_t  * this    = CURRENT_THREAD;
     41    process_t * process = this->process;
     42
     43    // check buffer in user space
     44    error = vmm_v2p_translate( false , cycles , &paddr );
     45
     46        if( error )
    3447        {
    35                 err = EINVAL;
    36                 goto fail_inval;
     48        printk("\n[ERROR] in %s : user buffer unmapped for thread %x in process %x\n",
     49               __FUNCTION__ , this->trdid , process->pid );
     50        this->errno = EFAULT;
     51                return -1;
    3752        }
    3853
    39         cycles = cpu_get_cycles(current_cpu);
    40         err    = cpu_copy_to_uspace(val, &cycles, sizeof(cycles));
     54    // call relevant core function
     55        k_cycles = core_get_cycles( this->core );
    4156
    42 fail_inval:
    43         current_thread->info.errno = err;
    44         return err;
    45 }
     57    // copy to user space
     58        hal_copy_to_uspace( cycles , &k_cycles , sizeof(uint64_t) );
     59
     60        return 0;
     61
     62}  // end sys_clock()
Note: See TracChangeset for help on using the changeset viewer.