rsrcdbmgr_create()

Create a system resource

Synopsis:

#include <sys/rsrcdbmgr.h>
#include <sys/rsrcdbmsg.h>

int rsrcdbmgr_create( rsrc_alloc_t *item,
                      int count );

Arguments:

item
An array of rsrc_alloc_t structures that describe the resources that you want to create; see below.
count
The number of entries in the array.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The rsrcdbmgr_create() function creates one or more system resources. If the function completes successfully, count resources are returned in item.

rsrc_alloc_t structure

The structure of a basic resource request looks like this:

typedef struct _rsrc_alloc {
	_Uint64t	start;
	_Uint64t	end;
	_Uint32t	flags;
	const char	*name;
} rsrc_alloc_t;

The members include:

start, end
The resource range.
flags
The type of the resource, as well as flags that affect the request. You must set this member to be one of the following resource types (defined in <sys/rsrcdbmgr.h>):

You can OR in the following bits (also defined in <sys/rsrcdbmgr.h>):

name
NULL, or a pointer to the name of the resource class. This field is used only if you set RSRCDBMGR_FLAG_NAME in the flags field. For more information, see rsrcdbmgr_attach().

You must set all the members.

Returns:

EOK, or -1 if an error occurred (errno is set).

Errors:

EAGAIN
The resource request can't be created.
EINVAL
Invalid argument.
ENOMEM
Insufficient memory to allocate internal data structures.

Examples:

/*
 * Create two resources:
 * 0-4K memory allocation and 5 DMA channels.
 */
#include <stdio.h>
#include <sys/rsrcdbmgr.h>
#include <sys/rsrcdbmsg.h>

int main(int argc, char **argv) {
    rsrc_alloc_t alloc[2];

    memset(alloc, 0, 2* sizeof(*alloc));
    alloc[0].start = 0;
    alloc[0].end = 4*1024; 
    alloc[0].flags = RSRCDBMGR_MEMORY;

    alloc[1].start = 1;
    alloc[1].end = 5;
    alloc[1].flags = RSRCDBMGR_DMA_CHANNEL;

    /* Allocate resources to the system. */
    if (rsrcdbmgr_create( alloc, 2 ) == -1) {
        perror("Problem creating resources \n");
        exit(1);
    }

    …
    /* Do something with the created resource */
    …

    /* Remove the allocated resources. */
    rsrcdbmgr_destroy ( alloc, 2 );

    return(0);
}

Classification:

QNX Neutrino

Safety:
Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

rsrcdbmgr_attach(), rsrcdbmgr_destroy()