linux/sound/pci/asihpi/hpidspcd.h
<<
>>
Prefs
   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