162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/***************************************************************************
362306a36Sopenharmony_ci *            au88x0_a3d.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Fri Jul 18 14:16:03 2003
662306a36Sopenharmony_ci *  Copyright  2003  mjander
762306a36Sopenharmony_ci *  mjander@users.sourceforge.net
862306a36Sopenharmony_ci ****************************************************************************/
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/*
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifndef _AU88X0_A3D_H
1462306a36Sopenharmony_ci#define _AU88X0_A3D_H
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci//#include <openal.h>
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define HRTF_SZ 0x38
1962306a36Sopenharmony_ci#define DLINE_SZ 0x28
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define CTRLID_HRTF		1
2262306a36Sopenharmony_ci#define CTRLID_ITD		2
2362306a36Sopenharmony_ci#define CTRLID_ILD		4
2462306a36Sopenharmony_ci#define CTRLID_FILTER	8
2562306a36Sopenharmony_ci#define CTRLID_GAINS	16
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci/* 3D parameter structs */
2862306a36Sopenharmony_citypedef unsigned short int a3d_Hrtf_t[HRTF_SZ];
2962306a36Sopenharmony_citypedef unsigned short int a3d_ItdDline_t[DLINE_SZ];
3062306a36Sopenharmony_citypedef unsigned short int a3d_atmos_t[5];
3162306a36Sopenharmony_citypedef unsigned short int a3d_LRGains_t[2];
3262306a36Sopenharmony_citypedef unsigned short int a3d_Itd_t[2];
3362306a36Sopenharmony_citypedef unsigned short int a3d_Ild_t[2];
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_citypedef struct {
3662306a36Sopenharmony_ci	void *vortex;		// Formerly CAsp4HwIO*, now vortex_t*.
3762306a36Sopenharmony_ci	unsigned int source;	/* this_04 */
3862306a36Sopenharmony_ci	unsigned int slice;	/* this_08 */
3962306a36Sopenharmony_ci	a3d_Hrtf_t hrtf[2];
4062306a36Sopenharmony_ci	a3d_Itd_t itd;
4162306a36Sopenharmony_ci	a3d_Ild_t ild;
4262306a36Sopenharmony_ci	a3d_ItdDline_t dline;
4362306a36Sopenharmony_ci	a3d_atmos_t filter;
4462306a36Sopenharmony_ci} a3dsrc_t;
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci/* First Register bank */
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci#define A3D_A_HrtfCurrent	0x18000	/* 56 ULONG */
4962306a36Sopenharmony_ci#define A3D_A_GainCurrent	0x180E0
5062306a36Sopenharmony_ci#define A3D_A_GainTarget	0x180E4
5162306a36Sopenharmony_ci#define A3D_A_A12Current	0x180E8	/* Atmospheric current. */
5262306a36Sopenharmony_ci#define A3D_A_A21Target		0x180EC	/* Atmospheric target */
5362306a36Sopenharmony_ci#define A3D_A_B01Current	0x180F0	/* Atmospheric current */
5462306a36Sopenharmony_ci#define A3D_A_B10Target		0x180F4	/* Atmospheric target */
5562306a36Sopenharmony_ci#define A3D_A_B2Current		0x180F8	/* Atmospheric current */
5662306a36Sopenharmony_ci#define A3D_A_B2Target		0x180FC	/* Atmospheric target */
5762306a36Sopenharmony_ci#define A3D_A_HrtfTarget	0x18100	/* 56 ULONG */
5862306a36Sopenharmony_ci#define A3D_A_ITDCurrent	0x181E0
5962306a36Sopenharmony_ci#define A3D_A_ITDTarget		0x181E4
6062306a36Sopenharmony_ci#define A3D_A_HrtfDelayLine	0x181E8	/* 56 ULONG */
6162306a36Sopenharmony_ci#define A3D_A_ITDDelayLine	0x182C8	/* 40/45 ULONG */
6262306a36Sopenharmony_ci#define A3D_A_HrtfTrackTC	0x1837C	/* Time Constants */
6362306a36Sopenharmony_ci#define A3D_A_GainTrackTC	0x18380
6462306a36Sopenharmony_ci#define A3D_A_CoeffTrackTC	0x18384
6562306a36Sopenharmony_ci#define A3D_A_ITDTrackTC	0x18388
6662306a36Sopenharmony_ci#define A3D_A_x1			0x1838C
6762306a36Sopenharmony_ci#define A3D_A_x2			0x18390
6862306a36Sopenharmony_ci#define A3D_A_y1			0x18394
6962306a36Sopenharmony_ci#define A3D_A_y2			0x18398
7062306a36Sopenharmony_ci#define A3D_A_HrtfOutL		0x1839C
7162306a36Sopenharmony_ci#define A3D_A_HrtfOutR		0x183A0
7262306a36Sopenharmony_ci#define 	A3D_A_TAIL		0x183A4
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci/* Second register bank */
7562306a36Sopenharmony_ci#define A3D_B_HrtfCurrent	0x19000	/* 56 ULONG */
7662306a36Sopenharmony_ci#define A3D_B_GainCurrent	0x190E0
7762306a36Sopenharmony_ci#define A3D_B_GainTarget	0x190E4
7862306a36Sopenharmony_ci#define A3D_B_A12Current	0x190E8
7962306a36Sopenharmony_ci#define A3D_B_A21Target		0x190EC
8062306a36Sopenharmony_ci#define A3D_B_B01Current	0x190F0
8162306a36Sopenharmony_ci#define A3D_B_B10Target		0x190F4
8262306a36Sopenharmony_ci#define A3D_B_B2Current		0x190F8
8362306a36Sopenharmony_ci#define A3D_B_B2Target		0x190FC
8462306a36Sopenharmony_ci#define A3D_B_HrtfTarget	0x19100	/* 56 ULONG */
8562306a36Sopenharmony_ci#define A3D_B_ITDCurrent	0x191E0
8662306a36Sopenharmony_ci#define A3D_B_ITDTarget		0x191E4
8762306a36Sopenharmony_ci#define A3D_B_HrtfDelayLine	0x191E8	/* 56 ULONG */
8862306a36Sopenharmony_ci#define 	A3D_B_TAIL		0x192C8
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci/* There are 4 slices, 4 a3d each = 16 a3d sources. */
9162306a36Sopenharmony_ci#define A3D_SLICE_BANK_A		0x18000	/* 4 sources */
9262306a36Sopenharmony_ci#define A3D_SLICE_BANK_B		0x19000	/* 4 sources */
9362306a36Sopenharmony_ci#define A3D_SLICE_VDBDest		0x19C00	/* 8 ULONG */
9462306a36Sopenharmony_ci#define A3D_SLICE_VDBSource		0x19C20	/* 4 ULONG */
9562306a36Sopenharmony_ci#define A3D_SLICE_ABReg			0x19C30
9662306a36Sopenharmony_ci#define A3D_SLICE_CReg			0x19C34
9762306a36Sopenharmony_ci#define A3D_SLICE_Control		0x19C38
9862306a36Sopenharmony_ci#define A3D_SLICE_DebugReserved	0x19C3c	/* Dangerous! */
9962306a36Sopenharmony_ci#define A3D_SLICE_Pointers		0x19C40
10062306a36Sopenharmony_ci#define 	A3D_SLICE_TAIL		0x1A000
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci// Slice size: 0x2000
10362306a36Sopenharmony_ci// Source size: 0x3A4, 0x2C8
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci/* Address generator macro. */
10662306a36Sopenharmony_ci#define a3d_addrA(slice,source,reg) (((slice)<<0xd)+((source)*0x3A4)+(reg))
10762306a36Sopenharmony_ci#define a3d_addrB(slice,source,reg) (((slice)<<0xd)+((source)*0x2C8)+(reg))
10862306a36Sopenharmony_ci#define a3d_addrS(slice,reg) (((slice)<<0xd)+(reg))
10962306a36Sopenharmony_ci//#define a3d_addr(slice,source,reg) (((reg)>=0x19000) ? a3d_addr2((slice),(source),(reg)) : a3d_addr1((slice),(source),(reg)))
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci#endif				/* _AU88X0_A3D_H */
112