// Copyright(c) 2017-2018, Intel Corporation // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. /** * @file opae/properties.h * @brief Functions for examining and manipulating `fpga_properties` objects * * In OPAE, `fpga_properties` objects are used both for obtaining information * about resources and for selectively enumerating resources based on their * properties. This file provides accessor functions (get/set) to allow reading * and writing individual items of an `fpga_properties` object. Generally, not * all object types supported by OPAE carry all properties. If you call a * property accessor method on a `fpga_properties` object that does not support * this particular property, it will return FPGA_INVALID_PARAM. * * # Accessor Return Values * In addition to the return values specified in the documentation below, all * accessor functions return FPGA_OK on success, FPGA_INVALID_PARAM if you pass * NULL or invalid parameters (i.e. non-initialized properties objects), * FPGA_EXCEPTION if an internal exception occurred trying to access the * properties object, FPGA_NOT_FOUND if the requested property is not part of * the supplied properties object. */ #ifndef __FPGA_PROPERTIES_H__ #define __FPGA_PROPERTIES_H__ #include #ifdef __cplusplus extern "C" { #endif /** * Create a fpga_properties object * * Initializes the memory pointed at by `prop` to represent a properties * object, and populates it with the properties of the resource referred to by * `handle`. Individual properties can then be queried using fpgaPropertiesGet*() * accessor functions. * * @note fpgaGetPropertiesFromHandle() will allocate memory for the created properties * object returned in `prop`. It is the responsibility of the caller * to free this memory after use by calling fpgaDestroyProperties(). * * @param[in] handle Open handle to get properties for. * @param[out] prop Pointer to a variable of type fpga_properties * @returns FPGA_OK on success. FPGA_NO_MEMORY if no memory could be allocated * to create the `fpga_properties` object. FPGA_EXCEPTION if an exception * happend while initializing the `fpga_properties` object. */ fpga_result fpgaGetPropertiesFromHandle(fpga_handle handle, fpga_properties *prop); /** * Create a fpga_properties object * * Initializes the memory pointed at by `prop` to represent a properties * object, and populates it with the properties of the resource referred to by * `token`. Individual properties can then be queried using fpgaPropertiesGet*() * accessor functions. * * If `token` is NULL, an "empty" properties object is created to be used as a * filter for fpgaEnumerate(). All individual fields are set to `don`t care`, * which implies that the fpga_properties object would match all FPGA resources * if used for an fpgaEnumerate() query. The matching criteria can be further * refined by using fpgaSet* functions on the properties object, or the * object can be populated with the actual properties of a resource by using * fpgaUpdateProperties(). * * @note fpgaGetProperties() will allocate memory for the created properties * object returned in `prop`. It is the responsibility of the caller * to free this memory after use by calling fpgaDestroyProperties(). * * @param[in] token Token to get properties for. Can be NULL, which will * create an empty properties object to be used as a * filter for fpgaEnumerate(). * @param[out] prop Pointer to a variable of type fpga_properties * @returns FPGA_OK on success. FPGA_NO_MEMORY if no memory could be allocated * to create the `fpga_properties` object. FPGA_EXCEPTION if an exception * happend while initializing the `fpga_properties` object. */ fpga_result fpgaGetProperties(fpga_token token, fpga_properties *prop); /** * Update a fpga_properties object * * Populates the properties object 'prop' with properties of the resource * referred to by 'token'. Unlike fpgaGetProperties(), this call will not create * a new properties object or allocate memory for it, but use a previously * created properties object. * * @param[in] token Token to retrieve properties for * @param[in] prop fpga_properties object to update * @returns FPGA_OK on success. FPGA_INVALID_PARAM if `token` or `prop` are not * valid objects. FPGA_NOT_FOUND if the resource referred to by `token` was * not found. FPGA_NO_DRIVER if not driver is loaded. FPGA_EXCEPTION if an * internal exception occured when trying to update `prop`. */ fpga_result fpgaUpdateProperties(fpga_token token, fpga_properties prop); /** * Clear a fpga_properties object * * Sets all fields of the properties object pointed at by 'prop' to 'don't * care', which implies that the fpga_properties object would match all FPGA * resources if used for an fpgaEnumerate() query. The matching criteria can be * further refined by using fpgaSet* functions on the properties object. * * Instead of creating a new fpga_properties object every time, this function * can be used to re-use fpga_properties objects from previous queries. * * @param[in] prop fpga_properties object to clear * @returns FPGA_OK on success. FPGA_INVALID_PARAM if `prop` is not a valid * object. FPGA_EXCEPTION if an * internal exception occured when trying to * access `prop`. */ fpga_result fpgaClearProperties(fpga_properties prop); /** * Clone a fpga_properties object * * Creates a copy of an fpga_properties object. * * @note This call creates a new properties object and allocates memory for it. * Both the 'src' and the newly created 'dst' objects will eventually need to be * destroyed using fpgaDestroyProperties(). * * @param[in] src fpga_properties object to copy * @param[out] dst New fpga_properties object cloned from 'src' * @returns FPGA_OK on success. FPGA_INVALID_PARAM if `src` is not a valid * object, or if `dst` is NULL. FPGA_NO_MEMORY if there was not enough memory * to allocate an `fpga_properties` object for `dst`. FPGA_EXCEPTION if an * internal exception occurred either accessing `src` or updating `dst`. */ fpga_result fpgaCloneProperties(fpga_properties src, fpga_properties *dst); /** * Destroy a fpga_properties object * * Destroys an existing fpga_properties object that the caller has previously * created using fpgaGetProperties() or fpgaCloneProperties(). * * @note fpgaDestroyProperties() requires the address of an fpga_properties * object, similar to fpgaGetPropertiesFromHandle(), fpgaGetProperties(), * and fpgaCloneProperties(). Passing any other value results in undefined * behavior. * * @param[inout] prop Pointer to the fpga_properties object to destroy * @returns FPGA_OK on success. FPGA_INVALID_PARAM is `prop` is not a valid * object. FPGA_EXCEPTION if an internal exception occurrred while trying to * access `prop`. */ fpga_result fpgaDestroyProperties(fpga_properties *prop); /** * Get the token of the parent object * * Returns the token of the parent of the queried resource in '*parent'. * * @param[in] prop Properties object to query * @param[out] parent Pointer to a token variable of the resource 'prop' is * associated with * @returns FPGA_NOT_FOUND if resource does not have a * parent (e.g. an FPGA_DEVICE resource does not have parents). Also see * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetParent(const fpga_properties prop, fpga_token *parent); /** * Set the token of the parent object * * @param[in] prop Properties object to modify * @param[out] parent Pointer to a token variable of the resource 'prop' is * associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetParent(fpga_properties prop, fpga_token parent); /** * Get the object type of a resource * * Returns the object type of the queried resource. * * @param[in] prop Properties object to query * @param[out] objtype Pointer to an object type variable of the resource * 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetObjectType(const fpga_properties prop, fpga_objtype *objtype); /** * Set the object type of a resource * * Sets the object type of the resource. * Currently supported object types are * FPGA_DEVICE and FPGA_ACCELERATOR. * * @param[in] prop Properties object to modify * @param[out] objtype Object type of the resource 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetObjectType(fpga_properties prop, fpga_objtype objtype); /** * Get the PCI segment number of a resource * * Returns the segment number of the queried resource. * * @param[in] prop Properties object to query * @param[out] segment Pointer to a PCI segment variable of the resource 'prop' * is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetSegment(const fpga_properties prop, uint16_t *segment); /** * Set the PCI segment number of a resource * * @param[in] prop Properties object to modify * @param[in] segment PCI segment number of the resource 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetSegment(fpga_properties prop, uint16_t segment); /** * Get the PCI bus number of a resource * * Returns the bus number the queried resource. * * @param[in] prop Properties object to query * @param[out] bus Pointer to a PCI bus variable of the resource 'prop' * is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetBus(const fpga_properties prop, uint8_t *bus); /** * Set the PCI bus number of a resource * * @param[in] prop Properties object to modify * @param[in] bus PCI bus number of the resource 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetBus(fpga_properties prop, uint8_t bus); /** * Get the PCI device number of a resource * * Returns the device number the queried resource. * * @param[in] prop Properties object to query * @param[out] device Pointer to a PCI device variable of the resource 'prop' * is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetDevice(const fpga_properties prop, uint8_t *device); /** * Set the PCI device number of a resource * * Enforces the limitation on the number of devices as specified in the * PCI spec. * * @param[in] prop Properties object to modify * @param[in] device PCI device number of the resource 'prop' is associated * with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetDevice(fpga_properties prop, uint8_t device); /** * Get the PCI function number of a resource * * Returns the function number the queried resource. * * @param[in] prop Properties object to query * @param[out] function Pointer to PCI function variable of the * resource 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetFunction(const fpga_properties prop, uint8_t *function); /** * Set the PCI function number of a resource * * Enforces the limitation on the number of functions as specified in the * PCI spec. * * @param[in] prop Properties object to modify * @param[in] function PCI function number of the resource 'prop' is * associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetFunction(fpga_properties prop, uint8_t function); /** * Get the socket id of a resource * * Returns the socket id of the queried resource. * * @param[in] prop Properties object to query * @param[out] socket_id Pointer to a socket id variable of the * resource 'prop' * is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). * See also "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetSocketID(const fpga_properties prop, uint8_t *socket_id); /** * Set the socket id of the resource * * @param[in] prop Properties object to modify * @param[in] socket_id Socket id of the resource 'prop' is * associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetSocketID(fpga_properties prop, uint8_t socket_id); /** * Get the device id of the resource * * @param[in] prop Properties object to query * @param[out] device_id Pointer to a device id variable of the * resource 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetDeviceID(const fpga_properties prop, uint16_t *device_id); /** * Set the device id of the resource * * @param[in] prop Properties object to modify * @param[in] device_id Device id of the resource 'prop' is associated with * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetDeviceID(fpga_properties prop, uint16_t device_id); /** * Get the number of slots of an FPGA resource property * * Returns the number of slots present in an FPGA. * * @param[in] prop Properties object to query - must be of type FPGA_DEVICE * @param[out] num_slots Pointer to number of slots variable of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetNumSlots(const fpga_properties prop, uint32_t *num_slots); /** * Set the number of slots of an FPGA resource property * * @param[in] prop Properties object to modify - must be of type * FPGA_DEVICE * @param[in] num_slots Number of slots of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetNumSlots(fpga_properties prop, uint32_t num_slots); /** * Get the BBS ID of an FPGA resource property * * Returns the blue bitstream id of an FPGA. * * @param[in] prop Properties object to query - must be of type FPGA_DEVICE * @param[out] bbs_id Pointer to a bbs id variable of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetBBSID(const fpga_properties prop, uint64_t *bbs_id); /** * Set the BBS ID of an FPGA resource property * * @param[in] prop Properties object to modify - must be of type * FPGA_DEVICE * @param[in] bbs_id Blue bitstream id of the FPGA resource * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetBBSID(fpga_properties prop, uint64_t bbs_id); /** * Get the BBS Version of an FPGA resource property * * Returns the blue bitstream version of an FPGA. * * @param[in] prop Properties object to query - must be of type * FPGA_DEVICE * @param[out] bbs_version Pointer to a bbs version variable of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetBBSVersion(const fpga_properties prop, fpga_version *bbs_version); /** * Set the BBS Version of an FPGA resource property * * @param[in] prop Properties object to modify - must be of type * FPGA_DEVICE * @param[in] version Blue bitstream version of the FPGA resource * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetBBSVersion(fpga_properties prop, fpga_version version); /** * Get the vendor id of an FPGA resource property * * Returns the vendor id of an FPGA. * * @param[in] prop Properties object to query - must be of type FPGA_DEVICE * @param[out] vendor_id Pointer to a vendor id variable of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesGetVendorID(const fpga_properties prop, uint16_t *vendor_id); /** * Set the vendor id of an FPGA resource property * * @param[in] prop Properties object to modify - must be of type FPGA_DEVICE * @param[in] vendor_id Vendor id of the FPGA resource * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesSetVendorID(fpga_properties prop, uint16_t vendor_id); /** * Get the model of an FPGA resource property * * Returns the model of an FPGA. * * @param[in] prop Properties object to query - must be of type FPGA_DEVICE * @param[in] model Model of the FPGA resource (string of minimum * FPGA_MODEL_LENGTH length * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesGetModel(const fpga_properties prop, char *model); /** * Set the model of an FPGA resource property * * @param[in] prop Properties object to modify - must be of type FPGA_DEVICE * @param[in] model Model of the FPGA resource (string of maximum * FPGA_MODEL_LENGTH length * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesSetModel(fpga_properties prop, char *model); /** * Get the local memory size of an FPGA resource property * * Returns the local memory size of an FPGA. * * @param[in] prop Properties object to query - must be of type FPGA_DEVICE * @param[out] lms Pointer to a memory size variable of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesGetLocalMemorySize(const fpga_properties prop, uint64_t *lms); /** * Set the local memory size of an FPGA resource property * * @param[in] prop Properties object to modify - must be of type FPGA_DEVICE * @param[in] lms Local memory size of the FPGA resource * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesSetLocalMemorySize(fpga_properties prop, uint64_t lms); /** * Get the capabilities FPGA resource property * * Returns the capabilities of an FPGA. * Capabilities is a bitfield value * * @param[in] prop Properties object to query - must be of type * FPGA_DEVICE * @param[out] capabilities Pointer to a capabilities variable of the FPGA * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesGetCapabilities(const fpga_properties prop, uint64_t *capabilities); /** * Set the capabilities of an FPGA resource property * * Capabilities is a bitfield value * * @param[in] prop Properties object to modify - must be of type * FPGA_DEVICE * @param[in] capabilities Capabilities of the FPGA resource * @returns FPGA_INVALID_PARAM if object type is not FPGA_DEVICE. See also * "Accessor Return Values" in [properties.h](#properties-h). * * @note This API is not currently supported. */ fpga_result fpgaPropertiesSetCapabilities(fpga_properties prop, uint64_t capabilities); /** * Get the GUID of a resource * * Returns the GUID of an FPGA or accelerator object. * * For an accelerator, the GUID uniquely identifies a specific accelerator context type, * i.e. different accelerators will have different GUIDs. For an FPGA, the GUID * is used to identify a certain instance of an FPGA, e.g. to determine whether * a given bitstream would be compatible. * * @param[in] prop Properties object to query * @param[out] guid Pointer to a GUID of the slot variable * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetGUID(const fpga_properties prop, fpga_guid *guid); /** * Set the GUID of a resource * * Sets the GUID of an FPGA or accelerator object. * * For an accelerator, the GUID uniquely identifies a specific accelerator context type, * i.e. different accelerators will have different GUIDs. For an FPGA, the GUID * is used to identify a certain instance of an FPGA, e.g. to determine whether * a given bitstream would be compatible. * * @param[in] prop Properties object to modify * @param[out] guid Pointer to a GUID of the slot variable * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetGUID(fpga_properties prop, fpga_guid guid); /** * Get the number of mmio spaces * * Returns the number of mmio spaces of an AFU properties structure. * * @param[in] prop Properties object to query - must be of type FPGA_ACCELERATOR * @param[out] mmio_spaces Pointer to a variable for number of mmio spaces * @returns FPGA_INVALID_PARAM if object type is not FPGA_ACCELERATOR. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetNumMMIO(const fpga_properties prop, uint32_t *mmio_spaces); /** * Set the number of mmio spaces * * Sets the number of mmio spaces of an AFU properties structure. * * @param[in] prop Properties object to modify - must be of type FPGA_ACCELERATOR * @param[in] mmio_spaces Number of MMIO spaces of the accelerator * @returns FPGA_INVALID_PARAM if object type is not FPGA_ACCELERATOR. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetNumMMIO(fpga_properties prop, uint32_t mmio_spaces); /** * Get the number of interrupts * * Returns the number of interrupts of an accelerator properties structure. * * @param[in] prop Properties object to query - must be of type * FPGA_ACCELERATOR * @param[out] num_interrupts Pointer to a variable for number of interrupts * @returns FPGA_INVALID_PARAM if object type is not FPGA_ACCELERATOR. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetNumInterrupts(const fpga_properties prop, uint32_t *num_interrupts); /** * Set the number of interrupts * * Sets the number of interrupts of an accelerator properties structure. * * @param[in] prop Properties object to modify - must be of type * FPGA_ACCELERATOR * @param[in] num_interrupts Number of interrupts of the accelerator * @returns FPGA_INVALID_PARAM if object type is not FPGA_ACCELERATOR. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetNumInterrupts(fpga_properties prop, uint32_t num_interrupts); /** * Get the state of a accelerator resource property * * Returns the accelerator state of a accelerator. * * @param[in] prop Properties object to query - must be of type FPGA_ACCELERATOR * @param[out] state Pointer to a accelerator state variable of the accelerator * @returns FPGA_INVALID_PARAM if object type is not FPGA_ACCELERATOR. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetAcceleratorState(const fpga_properties prop, fpga_accelerator_state *state); /** * Set the state of an accelerator resource property * * @param[in] prop Properties object to modify - must be of type FPGA_ACCELERATOR * @param[in] state accelerator state of the accelerator resource * @returns FPGA_INVALID_PARAM if object type is not FPGA_ACCELERATOR. See also * "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetAcceleratorState(fpga_properties prop, fpga_accelerator_state state); /** * Get the object ID of a resource * * Returns the object ID of a resource. The object ID is a 64 bit identifier * that is unique within a single node or system. It represents a similar * concept as the token, but can be used across processes (e.g. passed on the * command line). * * @param[in] prop Properties object to query * @param[out] object_id Pointer to a 64bit memory location to store the object * ID in * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetObjectID(const fpga_properties prop, uint64_t *object_id); /** * Set the object ID of a resource * * Sets the object ID of a resource. The object ID is a 64 bit identifier * that is unique within a single node or system. It represents a similar * concept as the token, but can be used across processes (e.g. passed on the * command line). * * @param[in] prop Properties object to query * @param[in] object_id A 64bit value to use as the object ID * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetObjectID(const fpga_properties prop, uint64_t object_id); /** * Get the number of errors that can be reported by a resource * * Returns the number of error registers understood by a resource. * * @param[in] prop Properties object to query * @param[out] num_errors Pointer to a 32 bit memory location to store the * number of supported errors in * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesGetNumErrors(const fpga_properties prop, uint32_t *num_errors); /** * Set the number of error registers * * Set the number of error registers understood by a resource to enumerate. * * @param[in] prop Properties object to query * @param[in] num_errors Number of errors * @returns See "Accessor Return Values" in [properties.h](#properties-h). */ fpga_result fpgaPropertiesSetNumErrors(const fpga_properties prop, uint32_t num_errors); #ifdef __cplusplus } // extern "C" #endif // __cplusplus #endif // __FPGA_PROPERTIES_H__