cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hpidspcd.h (2716B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/***********************************************************************/
      3/*
      4
      5    AudioScience HPI driver
      6    Copyright (C) 1997-2011  AudioScience Inc. <support@audioscience.com>
      7
      8
      9\file
     10Functions for reading DSP code to load into DSP
     11
     12*/
     13/***********************************************************************/
     14#ifndef _HPIDSPCD_H_
     15#define _HPIDSPCD_H_
     16
     17#include "hpi_internal.h"
     18
     19/** Header structure for dsp firmware file
     20 This structure must match that used in s2bin.c for generation of asidsp.bin
     21 */
     22/*#ifndef DISABLE_PRAGMA_PACK1 */
     23/*#pragma pack(push, 1) */
     24/*#endif */
     25struct code_header {
     26	/** Size in bytes including header */
     27	u32 size;
     28	/** File type tag "CODE" == 0x45444F43 */
     29	u32 type;
     30	/** Adapter model number */
     31	u32 adapter;
     32	/** Firmware version*/
     33	u32 version;
     34	/** Data checksum */
     35	u32 checksum;
     36};
     37/*#ifndef DISABLE_PRAGMA_PACK1 */
     38/*#pragma pack(pop) */
     39/*#endif */
     40
     41/*? Don't need the pragmas? */
     42compile_time_assert((sizeof(struct code_header) == 20), code_header_size);
     43
     44/** Descriptor for dspcode from firmware loader */
     45struct dsp_code {
     46	/** copy of  file header */
     47	struct code_header header;
     48	/** Expected number of words in the whole dsp code,INCL header */
     49	u32 block_length;
     50	/** Number of words read so far */
     51	u32 word_count;
     52
     53	/** internal state of DSP code reader */
     54	struct dsp_code_private *pvt;
     55};
     56
     57/** Prepare *psDspCode to refer to the requested adapter's firmware.
     58Code file name is obtained from HpiOs_GetDspCodePath
     59
     60\return 0 for success, or error code if requested code is not available
     61*/
     62short hpi_dsp_code_open(
     63	/** Code identifier, usually adapter family */
     64	u32 adapter, void *pci_dev,
     65	/** Pointer to DSP code control structure */
     66	struct dsp_code *ps_dsp_code,
     67	/** Pointer to dword to receive OS specific error code */
     68	u32 *pos_error_code);
     69
     70/** Close the DSP code file */
     71void hpi_dsp_code_close(struct dsp_code *ps_dsp_code);
     72
     73/** Rewind to the beginning of the DSP code file (for verify) */
     74void hpi_dsp_code_rewind(struct dsp_code *ps_dsp_code);
     75
     76/** Read one word from the dsp code file
     77	\return 0 for success, or error code if eof, or block length exceeded
     78*/
     79short hpi_dsp_code_read_word(struct dsp_code *ps_dsp_code,
     80				      /**< DSP code descriptor */
     81	u32 *pword /**< Where to store the read word */
     82	);
     83
     84/** Get a block of dsp code into an internal buffer, and provide a pointer to
     85that buffer. (If dsp code is already an array in memory, it is referenced,
     86not copied.)
     87
     88\return Error if requested number of words are not available
     89*/
     90short hpi_dsp_code_read_block(size_t words_requested,
     91	struct dsp_code *ps_dsp_code,
     92	/* Pointer to store (Pointer to code buffer) */
     93	u32 **ppblock);
     94
     95#endif