105 lines
3.3 KiB
C
105 lines
3.3 KiB
C
|
/***********************************************************************/
|
||
|
/**
|
||
|
|
||
|
AudioScience HPI driver
|
||
|
Copyright (C) 1997-2010 AudioScience Inc. <support@audioscience.com>
|
||
|
|
||
|
This program is free software; you can redistribute it and/or modify
|
||
|
it under the terms of version 2 of the GNU General Public License as
|
||
|
published by the Free Software Foundation;
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program; if not, write to the Free Software
|
||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
|
||
|
\file
|
||
|
Functions for reading DSP code to load into DSP
|
||
|
|
||
|
hpi_dspcode_defines HPI DSP code loading method
|
||
|
Define exactly one of these to select how the DSP code is supplied to
|
||
|
the adapter.
|
||
|
|
||
|
End users writing applications that use the HPI interface do not have to
|
||
|
use any of the below defines; they are only necessary for building drivers
|
||
|
|
||
|
HPI_DSPCODE_FILE:
|
||
|
DSP code is supplied as a file that is opened and read from by the driver.
|
||
|
|
||
|
HPI_DSPCODE_FIRMWARE:
|
||
|
DSP code is read using the hotplug firmware loader module.
|
||
|
Only valid when compiling the HPI kernel driver under Linux.
|
||
|
*/
|
||
|
/***********************************************************************/
|
||
|
#ifndef _HPIDSPCD_H_
|
||
|
#define _HPIDSPCD_H_
|
||
|
|
||
|
#include "hpi_internal.h"
|
||
|
|
||
|
#ifndef DISABLE_PRAGMA_PACK1
|
||
|
#pragma pack(push, 1)
|
||
|
#endif
|
||
|
|
||
|
/** Descriptor for dspcode from firmware loader */
|
||
|
struct dsp_code {
|
||
|
/** Firmware descriptor */
|
||
|
const struct firmware *ps_firmware;
|
||
|
struct pci_dev *ps_dev;
|
||
|
/** Expected number of words in the whole dsp code,INCL header */
|
||
|
long int block_length;
|
||
|
/** Number of words read so far */
|
||
|
long int word_count;
|
||
|
/** Version read from dsp code file */
|
||
|
u32 version;
|
||
|
/** CRC read from dsp code file */
|
||
|
u32 crc;
|
||
|
};
|
||
|
|
||
|
#ifndef DISABLE_PRAGMA_PACK1
|
||
|
#pragma pack(pop)
|
||
|
#endif
|
||
|
|
||
|
/** Prepare *psDspCode to refer to the requuested adapter.
|
||
|
Searches the file, or selects the appropriate linked array
|
||
|
|
||
|
\return 0 for success, or error code if requested code is not available
|
||
|
*/
|
||
|
short hpi_dsp_code_open(
|
||
|
/** Code identifier, usually adapter family */
|
||
|
u32 adapter,
|
||
|
/** Pointer to DSP code control structure */
|
||
|
struct dsp_code *ps_dsp_code,
|
||
|
/** Pointer to dword to receive OS specific error code */
|
||
|
u32 *pos_error_code);
|
||
|
|
||
|
/** Close the DSP code file */
|
||
|
void hpi_dsp_code_close(struct dsp_code *ps_dsp_code);
|
||
|
|
||
|
/** Rewind to the beginning of the DSP code file (for verify) */
|
||
|
void hpi_dsp_code_rewind(struct dsp_code *ps_dsp_code);
|
||
|
|
||
|
/** Read one word from the dsp code file
|
||
|
\return 0 for success, or error code if eof, or block length exceeded
|
||
|
*/
|
||
|
short hpi_dsp_code_read_word(struct dsp_code *ps_dsp_code,
|
||
|
/**< DSP code descriptor */
|
||
|
u32 *pword /**< where to store the read word */
|
||
|
);
|
||
|
|
||
|
/** Get a block of dsp code into an internal buffer, and provide a pointer to
|
||
|
that buffer. (If dsp code is already an array in memory, it is referenced,
|
||
|
not copied.)
|
||
|
|
||
|
\return Error if requested number of words are not available
|
||
|
*/
|
||
|
short hpi_dsp_code_read_block(size_t words_requested,
|
||
|
struct dsp_code *ps_dsp_code,
|
||
|
/* Pointer to store (Pointer to code buffer) */
|
||
|
u32 **ppblock);
|
||
|
|
||
|
#endif
|