Blame src/perfctr-2.7.x/usr.lib/global.c

Packit Service a1973e
/* $Id: global.c,v 1.11 2004/05/13 23:35:27 mikpe Exp $
Packit Service a1973e
 * Library interface to global-mode performance counters.
Packit Service a1973e
 *
Packit Service a1973e
 * Copyright (C) 1999-2004  Mikael Pettersson
Packit Service a1973e
 */
Packit Service a1973e
Packit Service a1973e
#include <stdlib.h>
Packit Service a1973e
#include <unistd.h>
Packit Service a1973e
#include <fcntl.h>
Packit Service a1973e
#include "libperfctr.h"
Packit Service a1973e
#include "marshal.h"
Packit Service a1973e
Packit Service a1973e
struct gperfctr {	/* XXX: kill this struct */
Packit Service a1973e
    int fd;
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
struct gperfctr *gperfctr_open(void)
Packit Service a1973e
{
Packit Service a1973e
    struct gperfctr *gperfctr;
Packit Service a1973e
Packit Service a1973e
    gperfctr = malloc(sizeof(*gperfctr));
Packit Service a1973e
    if( gperfctr ) {
Packit Service a1973e
	gperfctr->fd = -1;
Packit Service a1973e
	if( 1 || gperfctr->fd >= 0 ) {
Packit Service a1973e
	    if( perfctr_abi_check_fd(gperfctr->fd) >= 0 )
Packit Service a1973e
		return gperfctr;
Packit Service a1973e
	    close(gperfctr->fd);
Packit Service a1973e
	}
Packit Service a1973e
	free(gperfctr);
Packit Service a1973e
    }
Packit Service a1973e
    return NULL;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
void gperfctr_close(struct gperfctr *gperfctr)
Packit Service a1973e
{
Packit Service a1973e
    close(gperfctr->fd);
Packit Service a1973e
    free(gperfctr);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
int gperfctr_control(const struct gperfctr *gperfctr,
Packit Service a1973e
		     struct gperfctr_cpu_control *arg)
Packit Service a1973e
{
Packit Service a1973e
    return perfctr_sys_w(gperfctr->fd, GPERFCTR_CONTROL, arg,
Packit Service a1973e
			 &gperfctr_cpu_control_sdesc);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
int gperfctr_read(const struct gperfctr *gperfctr, struct gperfctr_cpu_state *arg)
Packit Service a1973e
{
Packit Service a1973e
    return perfctr_sys_wr(gperfctr->fd, GPERFCTR_READ, arg,
Packit Service a1973e
			  &gperfctr_cpu_state_only_cpu_sdesc,
Packit Service a1973e
			  &gperfctr_cpu_state_sdesc);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
int gperfctr_stop(const struct gperfctr *gperfctr)
Packit Service a1973e
{
Packit Service a1973e
    return _sys_perfctr(GPERFCTR_STOP, gperfctr->fd, 0);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
int gperfctr_start(const struct gperfctr *gperfctr, unsigned int interval_usec)
Packit Service a1973e
{
Packit Service a1973e
    return _sys_perfctr(GPERFCTR_START, gperfctr->fd, (void*)(long)interval_usec);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
int gperfctr_info(const struct gperfctr *gperfctr, struct perfctr_info *info)
Packit Service a1973e
{
Packit Service a1973e
    return perfctr_info(gperfctr->fd, info);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
struct perfctr_cpus_info *gperfctr_cpus_info(const struct gperfctr *gperfctr)
Packit Service a1973e
{
Packit Service a1973e
    return perfctr_cpus_info(gperfctr->fd);
Packit Service a1973e
}