| Current File : //usr/include/idlist.h |
/*
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _IDLIST_H
#define _IDLIST_H
#include <sys/list.h>
#include <sys/types.h>
#include <sys/avl.h>
#ifdef __cplusplus
extern "C" {
#endif
#define IDLIST_TYPE_UNKNOWN 0
#define IDLIST_TYPE_CPU 1
#define IDLIST_TYPE_CORE 2
#define IDLIST_TYPE_SOCKET 3
#define IDLIST_TYPE_ALL 4
#define IDLIST_STR_CPU "cpu"
#define IDLIST_STR_CORE "core"
#define IDLIST_STR_SOCKET "socket"
#define IDLIST_STR_ALL "all"
/*
* Structures for fetching and assigning the current set of cpus, cores, and
* sockets on the system
*/
typedef struct _idlist_cpu_state idlist_cpu_state_t;
typedef struct _idlist_cpu idlist_cpu_t;
typedef struct _idlist_core idlist_core_t;
typedef struct _idlist_socket idlist_socket_t;
typedef struct _idlist_pg idlist_pg_t;
typedef struct _idlist_lgrp idlist_lgrp_t;
/*
* Structure to contain parsed form of an idlist, such as
* "1,3,5-10"
*/
typedef struct _idlist idlist_t;
/*
* Convert an idlist to internal structure and back.
*/
extern idlist_t *idlist_parse(const char *);
extern char *idlist_to_string(idlist_t *, size_t);
/*
* idlist operations
*/
extern idlist_t *idlist_alloc(void);
extern void idlist_free(idlist_t *);
extern boolean_t idlist_has_id(idlist_t *, int id);
extern int idlist_add_id(idlist_t *, int id);
extern idlist_t *idlist_merge(idlist_t *, idlist_t *);
extern idlist_t *idlist_intersections(idlist_t *, idlist_t *);
extern idlist_t *idlist_misses(idlist_t *, idlist_t *);
extern idlist_t *idlist_remove(idlist_t *, idlist_t *);
extern int idlist_is_empty(idlist_t *);
/*
* Fetch the current set of cpus, cores and sockets
*/
extern idlist_cpu_state_t *idlist_get_cpu_state(void);
extern void idlist_free_cpu_state(idlist_cpu_state_t *);
extern void idlist_test_cpu_state(void);
/*
* Functions for looking up cpus, cores, and sockets. None of the
* returned structures should be freed by the caller. They are freed when the
* related idlist_cpu_state_t * is freed.
*/
extern idlist_cpu_t *idlist_get_cpu(idlist_cpu_state_t *, int);
extern boolean_t idlist_get_cpu_online(idlist_cpu_t *);
extern int idlist_get_cpu_id(idlist_cpu_t *, char *);
extern void idlist_get_cpu_assigned(idlist_cpu_t *, int *, int *,
const char **);
extern int idlist_set_cpu_assigned(idlist_cpu_t *, int, int, const char *);
extern idlist_core_t *idlist_get_core(idlist_cpu_state_t *, int);
extern uint_t idlist_get_core_cpus_online(idlist_core_t *);
extern void idlist_get_core_assigned(idlist_core_t *, int *, int *,
const char **);
extern int idlist_set_core_assigned(idlist_core_t *, int, int, const char *);
extern idlist_socket_t *idlist_get_socket(idlist_cpu_state_t *, int);
extern uint_t idlist_get_socket_cpus_online(idlist_socket_t *);
extern void idlist_get_socket_assigned(idlist_socket_t *, int *, int *, const
char **);
extern int idlist_set_socket_assigned(idlist_socket_t *, int, int, const
char *);
extern int *idlist_get_socket_cpus(idlist_cpu_state_t *, int, uint_t *);
extern int *idlist_get_socket_cores(idlist_cpu_state_t *, int, uint_t *);
extern int *idlist_get_core_cpus(idlist_cpu_state_t *, int, uint_t *);
extern idlist_pg_t *idlist_get_pg(idlist_cpu_state_t *, int);
extern int *idlist_get_pg_cpus(idlist_cpu_state_t *, int, uint_t *);
extern idlist_lgrp_t *idlist_get_lgrp(idlist_cpu_state_t *, int);
extern int *idlist_get_lgrp_cpus(idlist_cpu_state_t *, int, uint_t *);
/*
* Convert an idlist to a fully expanded array of ints based on the
* current cpu resources. This function takes into account the running
* system, so is only applicable when manipulating a dynamic configuration
* or commiting a configuration.
*/
extern int idlist_to_ids(idlist_cpu_state_t *, const char *type,
idlist_t *, int **, uint_t *);
extern idlist_t *idlist_allids_misses(idlist_cpu_state_t *, const char *,
idlist_t *);
extern void idlist_print_cpu_state(idlist_cpu_state_t *);
#ifdef __cplusplus
}
#endif
#endif /* _IDLIST_H */