ref: dd16eef8365cb0b9e4805c23291aadcaa596dd87
dir: /os/mpc/dsp.h/
/*
* MPC82x/QUICC DSP support
*/
typedef struct DSP DSP;
typedef struct FnD FnD;
typedef short Real;
typedef struct Complex Complex;
struct Complex {
Real im;
Real re;
};
struct FnD {
ushort status;
ushort param[7];
};
enum {
FnDsize = 8*2, /* each function descriptor is 8 shorts */
/* standard bits in FnD.status */
FnStop = 1<<15,
FnWrap = 1<<13,
FnInt = 1<<12,
/* optional bits */
FnZ = 1<<11, /* FIR[35], MOD */
FnIALL = 1<<10, /* FIRx */
FnXinc0 = 0<<8, /* FIRx, IRR */
FnXinc1 = 1<<8,
FnXinc2 = 2<<8,
FnXinc3 = 3<<8,
FnPC = 1<<7, /* FIRx */
/* DSP functions (table 16-6) */
FnFIR1 = 0x01,
FnFIR2 = 0x02,
FnFIR3 = 0x03,
FnFIR5 = 0x03,
FnFIR6 = 0x06,
FnIIR = 0x07,
FnMOD = 0x08,
FnDEMOD = 0x09,
FnLMS1 = 0x0A,
FnLMS2 = 0x0B,
FnWADD = 0x0C,
};
void dspinitialise(void);
DSP* dspacquire(void (*)(void*), void*);
void dspexec(DSP*, FnD*, ulong);
void* dspmalloc(ulong);
void dspfree(void*, ulong);
void dspsetfn(DSP*, FnD*, ulong);
void dspstart(DSP*);
void dsprelease(DSP*);
FnD* fndalloc(ulong);
void fndfree(FnD*, ulong);