			DSP/Bridge Error Code Guide


Success code is always taken as 0, except for one case where a success status
different than 0 can be possible, this is when enumerating a series of dsp
objects, if the enumeration doesn't have any more objects it is considered as a
successful case. In this case a positive ENODATA is returned (TODO: Change to
avoid this case).

Error codes are returned as a negative 1, if an specific code is expected, it
can be propagated to user space by reading errno symbol defined in errno.h, for
specific details on the implementation a copy of the standard used should be
read first.

The error codes used by this driver are:

[EPERM]
    General driver failure.

    According to the use case the following might apply:
    - Device is in 'sleep/suspend' mode due to DPM.
    - User cannot mark end of stream on an input channel.
    - Requested operation is invalid for the node type.
    - Invalid alignment for the node messaging buffer.
    - The specified direction is invalid for the stream.
    - Invalid stream mode.

[ENOENT]
    The specified object or file was not found.

[ESRCH]
    A shared memory buffer contained in a message or stream could not be mapped
    to the GPP client process's virtual space.

[EIO]
    Driver interface I/O error.

    or:
    - Unable to plug channel ISR for configured IRQ.
    - No free I/O request packets are available.

[ENXIO]
    Unable to find a named section in DSP executable or a non-existent memory
    segment identifier was specified.

[EBADF]
    General error for file handling:

    - Unable to open file.
    - Unable to read file.
    - An error occurred while parsing the DSP executable file.

[ENOMEM]
    A memory allocation failure occurred.

[EACCES]
    - Unable to read content of DCD data section; this is typically caused by
    improperly configured nodes.
    - Unable to decode DCD data section content; this is typically caused by
    changes to DSP/BIOS Bridge data structures.
    - Unable to get pointer to DCD data section; this is typically caused by
    improperly configured UUIDs.
    - Unable to load file containing DCD data section; this is typically
    caused by a missing COFF file.
    - The specified COFF file does not contain a valid node registration
    section.

[EFAULT]
    Invalid pointer or handler.

[EEXIST]
    Attempted to create a channel manager  when one already exists.

[EINVAL]
    Invalid argument.

[ESPIPE]
    Symbol not found in the COFF file.  DSPNode_Create will return this if
    the iAlg function table for an xDAIS socket is not found in the COFF file.
    In this case, force the symbol to be linked into the COFF file.
    DSPNode_Create, DSPNode_Execute, and DSPNode_Delete will return this if
    the create, execute, or delete phase function, respectively, could not be
    found in the COFF file.

    - No symbol table is loaded/found for this board.
    - Unable to initialize the ZL COFF parsing module.

[EPIPE]
    I/O is currently pending.

    - End of stream was already requested on this output channel.

[EDOM]
    A parameter is specified outside its valid range.

[ENOSYS]
    The indicated operation is not supported.

[EIDRM]
    During enumeration a change in the number or properties of the objects
    has occurred.

[ECHRNG]
    Attempt to created channel manager with too many channels or channel ID out
    of range.

[EBADR]
    The state of the specified object is incorrect for the requested operation.

    - Invalid segment ID.

[ENODATA]
    Unable to retrieve resource information from the registry.

    - No more registry values.

[ETIME]
    A timeout occurred before the requested operation could complete.

[ENOSR]
    A stream has been issued the maximum number of buffers allowed in the
    stream at once; buffers must be reclaimed from the stream before any more
    can be issued.

    - No free channels are available.

[EILSEQ]
    Error occurred in a dynamic loader library function.

[EISCONN]
    The Specified Connection already exists.

[ENOTCONN]
    Nodes not connected.

[ETIMEDOUT]
    Timeout occurred waiting for a response from the hardware.

    - Wait for flush operation on an output channel timed out.

[ECONNREFUSED]
    No more connections can be made for this node.

[EALREADY]
    Channel is already in use.

[EREMOTEIO]
    dwTimeOut parameter was CHNL_IOCNOWAIT, yet no I/O completions were
    queued.

[ECANCELED]
    I/O has been cancelled on this channel.

[ENOKEY]
    Invalid subkey parameter.

    - UUID not found in registry.
