1/***********************************************************************/ 2/** 3 4 AudioScience HPI driver 5 Copyright (C) 1997-2011 AudioScience Inc. <support@audioscience.com> 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of version 2 of the GNU General Public License as 9 published by the Free Software Foundation; 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 20\file 21Functions for reading DSP code to load into DSP 22 23*/ 24/***********************************************************************/ 25#ifndef _HPIDSPCD_H_ 26#define _HPIDSPCD_H_ 27 28#include "hpi_internal.h" 29 30/** Header structure for dsp firmware file 31 This structure must match that used in s2bin.c for generation of asidsp.bin 32 */ 33/*#ifndef DISABLE_PRAGMA_PACK1 */ 34/*#pragma pack(push, 1) */ 35/*#endif */ 36struct code_header { 37 /** Size in bytes including header */ 38 u32 size; 39 /** File type tag "CODE" == 0x45444F43 */ 40 u32 type; 41 /** Adapter model number */ 42 u32 adapter; 43 /** Firmware version*/ 44 u32 version; 45 /** Data checksum */ 46 u32 checksum; 47}; 48/*#ifndef DISABLE_PRAGMA_PACK1 */ 49/*#pragma pack(pop) */ 50/*#endif */ 51 52/*? Don't need the pragmas? */ 53compile_time_assert((sizeof(struct code_header) == 20), code_header_size); 54 55/** Descriptor for dspcode from firmware loader */ 56struct dsp_code { 57 /** copy of file header */ 58 struct code_header header; 59 /** Expected number of words in the whole dsp code,INCL header */ 60 u32 block_length; 61 /** Number of words read so far */ 62 u32 word_count; 63 64 /** internal state of DSP code reader */ 65 struct dsp_code_private *pvt; 66}; 67 68/** Prepare *psDspCode to refer to the requested adapter's firmware. 69Code file name is obtained from HpiOs_GetDspCodePath 70 71\return 0 for success, or error code if requested code is not available 72*/ 73short hpi_dsp_code_open( 74 /** Code identifier, usually adapter family */ 75 u32 adapter, void *pci_dev, 76 /** Pointer to DSP code control structure */ 77 struct dsp_code *ps_dsp_code, 78 /** Pointer to dword to receive OS specific error code */ 79 u32 *pos_error_code); 80 81/** Close the DSP code file */ 82void hpi_dsp_code_close(struct dsp_code *ps_dsp_code); 83 84/** Rewind to the beginning of the DSP code file (for verify) */ 85void hpi_dsp_code_rewind(struct dsp_code *ps_dsp_code); 86 87/** Read one word from the dsp code file 88 \return 0 for success, or error code if eof, or block length exceeded 89*/ 90short hpi_dsp_code_read_word(struct dsp_code *ps_dsp_code, 91 /**< DSP code descriptor */ 92 u32 *pword /**< Where to store the read word */ 93 ); 94 95/** Get a block of dsp code into an internal buffer, and provide a pointer to 96that buffer. (If dsp code is already an array in memory, it is referenced, 97not copied.) 98 99\return Error if requested number of words are not available 100*/ 101short hpi_dsp_code_read_block(size_t words_requested, 102 struct dsp_code *ps_dsp_code, 103 /* Pointer to store (Pointer to code buffer) */ 104 u32 **ppblock); 105 106#endif 107