^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /***************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * au88x0_cxtalk.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Wed Nov 19 16:29:47 2003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright 2003 mjander
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * mjander@users.sourceforge.org
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) ****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include "au88x0_xtalk.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /* Data (a whole lot of data.... ) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) static short const sXtalkWideKLeftEq = 0x269C;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) static short const sXtalkWideKRightEq = 0x269C;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) static short const sXtalkWideKLeftXt = 0xF25E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) static __maybe_unused short const sXtalkWideKRightXt = 0xF25E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) static short const sXtalkWideShiftLeftEq = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) static short const sXtalkWideShiftRightEq = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) static short const sXtalkWideShiftLeftXt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) static __maybe_unused short const sXtalkWideShiftRightXt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) static unsigned short const wXtalkWideLeftDelay = 0xd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) static unsigned short const wXtalkWideRightDelay = 0xd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) static short const sXtalkNarrowKLeftEq = 0x468D;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) static short const sXtalkNarrowKRightEq = 0x468D;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) static short const sXtalkNarrowKLeftXt = 0xF82E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) static __maybe_unused short const sXtalkNarrowKRightXt = 0xF82E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) static short const sXtalkNarrowShiftLeftEq = 0x3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) static short const sXtalkNarrowShiftRightEq = 0x3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) static short const sXtalkNarrowShiftLeftXt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) static __maybe_unused short const sXtalkNarrowShiftRightXt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) static unsigned short const wXtalkNarrowLeftDelay = 0x7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) static unsigned short const wXtalkNarrowRightDelay = 0x7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) static __maybe_unused xtalk_gains_t const asXtalkGainsDefault = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 0x4000, 0x4000, 0x4000, 0x4000, 0x4000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 0x4000, 0x4000, 0x4000, 0x4000, 0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) static __maybe_unused xtalk_gains_t const asXtalkGainsTest = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 0x7fff, 0x8000, 0x0000, 0x0000, 0x0001,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 0xffff, 0x4000, 0xc000, 0x0002, 0xfffe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) static __maybe_unused xtalk_gains_t const asXtalkGains1Chan = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 0x7FFF, 0, 0, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 0x7FFF, 0, 0, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) // Input gain for 4 A3D slices. One possible input pair is left zero.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) static xtalk_gains_t const asXtalkGainsAllChan = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) static xtalk_gains_t const asXtalkGainsZeros = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) static xtalk_dline_t const alXtalkDlineZeros = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) static __maybe_unused xtalk_dline_t const alXtalkDlineTest = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 0x0000fc18, 0xfff03e8, 0x000186a0, 0xfffe7960, 1, 0xffffffff, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 0, 0, 0, 0, 0, 0, 0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) static xtalk_instate_t const asXtalkInStateZeros = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 0, 0, 0, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) static __maybe_unused xtalk_instate_t const asXtalkInStateTest = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 0x0080, 0xff80, 0x0001, 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) static xtalk_state_t const asXtalkOutStateZeros = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) {0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) {0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) {0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) {0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) {0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) static short const sDiamondKLeftEq = 0x401d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) static short const sDiamondKRightEq = 0x401d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) static short const sDiamondKLeftXt = 0xF90E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) static __maybe_unused short const sDiamondKRightXt = 0xF90E;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) static short const sDiamondShiftLeftEq = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) static short const sDiamondShiftRightEq = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) static short const sDiamondShiftLeftXt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) static __maybe_unused short const sDiamondShiftRightXt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) static unsigned short const wDiamondLeftDelay = 0xb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) static unsigned short const wDiamondRightDelay = 0xb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) static xtalk_coefs_t const asXtalkWideCoefsLeftEq = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) {0xEC4C, 0xDCE9, 0xFDC2, 0xFEEC, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) {0x5F60, 0xCBCB, 0xFC26, 0x0305, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) {0x340B, 0xe8f5, 0x236c, 0xe40d, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) {0x76d5, 0xc78d, 0x05ac, 0xfa5b, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) {0x7F04, 0xC0FA, 0x0263, 0xFDA2, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) static xtalk_coefs_t const asXtalkWideCoefsRightEq = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) {0xEC4C, 0xDCE9, 0xFDC2, 0xFEEC, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) {0x5F60, 0xCBCB, 0xFC26, 0x0305, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) {0x340B, 0xe8f5, 0x236c, 0xe40d, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) {0x76d5, 0xc78d, 0x05ac, 0xfa5b, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) {0x7F04, 0xC0FA, 0x0263, 0xFDA2, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) static xtalk_coefs_t const asXtalkWideCoefsLeftXt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) {0x55c6, 0xc97b, 0x005b, 0x0047, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) {0x6a60, 0xca20, 0xffc6, 0x0040, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) {0x6411, 0xd711, 0xfca1, 0x0190, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) {0x77dc, 0xc79e, 0xffb8, 0x000a, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) static __maybe_unused xtalk_coefs_t const asXtalkWideCoefsRightXt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) {0x55c6, 0xc97b, 0x005b, 0x0047, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) {0x6a60, 0xca20, 0xffc6, 0x0040, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) {0x6411, 0xd711, 0xfca1, 0x0190, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) {0x77dc, 0xc79e, 0xffb8, 0x000a, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) static xtalk_coefs_t const asXtalkNarrowCoefsLeftEq = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) {0x50B5, 0xD07C, 0x026D, 0xFD21, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) {0x460F, 0xE44F, 0xF75E, 0xEFA6, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) {0x556D, 0xDCAB, 0x2098, 0xF0F2, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) {0x7E03, 0xC1F0, 0x007D, 0xFF89, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) {0x383E, 0xFD9D, 0xB278, 0x4547, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) static xtalk_coefs_t const asXtalkNarrowCoefsRightEq = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) {0x50B5, 0xD07C, 0x026D, 0xFD21, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) {0x460F, 0xE44F, 0xF75E, 0xEFA6, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) {0x556D, 0xDCAB, 0x2098, 0xF0F2, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) {0x7E03, 0xC1F0, 0x007D, 0xFF89, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) {0x383E, 0xFD9D, 0xB278, 0x4547, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) static xtalk_coefs_t const asXtalkNarrowCoefsLeftXt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) {0x3CB2, 0xDF49, 0xF6EA, 0x095B, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) {0x6777, 0xC915, 0xFEAF, 0x00B1, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) {0x7762, 0xC7D9, 0x025B, 0xFDA6, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) {0x6B7A, 0xD2AA, 0xF2FB, 0x0B64, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) static __maybe_unused xtalk_coefs_t const asXtalkNarrowCoefsRightXt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) {0x3CB2, 0xDF49, 0xF6EA, 0x095B, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) {0x6777, 0xC915, 0xFEAF, 0x00B1, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) {0x7762, 0xC7D9, 0x025B, 0xFDA6, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) {0x6B7A, 0xD2AA, 0xF2FB, 0x0B64, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) static xtalk_coefs_t const asXtalkCoefsZeros = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) static xtalk_coefs_t const asXtalkCoefsPipe = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) {0, 0, 0x0FA0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) {0, 0, 0x0FA0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) {0, 0, 0x0FA0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) {0, 0, 0x0FA0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) {0, 0, 0x1180, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) static __maybe_unused xtalk_coefs_t const asXtalkCoefsNegPipe = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) {0, 0, 0xF380, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) {0, 0, 0xF380, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) {0, 0, 0xF380, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) {0, 0, 0xF380, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) {0, 0, 0xF200, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) static __maybe_unused xtalk_coefs_t const asXtalkCoefsNumTest = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) {0, 0, 0xF380, 0x8000, 0x6D60},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) static __maybe_unused xtalk_coefs_t const asXtalkCoefsDenTest = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) {0xC000, 0x2000, 0x4000, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) static __maybe_unused xtalk_state_t const asXtalkOutStateTest = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) {0x7FFF, 0x0004, 0xFFFC, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) {0xFE00, 0x0008, 0xFFF8, 0x4000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) {0x0200, 0x0010, 0xFFF0, 0xC000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) {0x8000, 0x0020, 0xFFE0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) {0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) static xtalk_coefs_t const asDiamondCoefsLeftEq = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) {0x0F1E, 0x2D05, 0xF8E3, 0x07C8, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) {0x45E2, 0xCA51, 0x0448, 0xFCE7, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) {0xA93E, 0xDBD5, 0x022C, 0x028A, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) static xtalk_coefs_t const asDiamondCoefsRightEq = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) {0x0F1E, 0x2D05, 0xF8E3, 0x07C8, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) {0x45E2, 0xCA51, 0x0448, 0xFCE7, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) {0xA93E, 0xDBD5, 0x022C, 0x028A, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) static xtalk_coefs_t const asDiamondCoefsLeftXt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) {0x3B50, 0xFE08, 0xF959, 0x0060, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) {0x9FCB, 0xD8F1, 0x00A2, 0x003A, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) static __maybe_unused xtalk_coefs_t const asDiamondCoefsRightXt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) {0x3B50, 0xFE08, 0xF959, 0x0060, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) {0x9FCB, 0xD8F1, 0x00A2, 0x003A, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) {0, 0, 0, 0, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) {0, 0, 0, 0, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) /**/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /* XTalk EQ and XT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) vortex_XtalkHw_SetLeftEQ(vortex_t * vortex, short arg_0, short arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) xtalk_coefs_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) hwwrite(vortex->mmio, 0x24200 + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) hwwrite(vortex->mmio, 0x24204 + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) hwwrite(vortex->mmio, 0x24208 + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) hwwrite(vortex->mmio, 0x2420c + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) hwwrite(vortex->mmio, 0x24210 + i * 0x24, coefs[i][4]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) hwwrite(vortex->mmio, 0x24538, arg_0 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) hwwrite(vortex->mmio, 0x2453C, arg_4 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) vortex_XtalkHw_SetRightEQ(vortex_t * vortex, short arg_0, short arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) xtalk_coefs_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) hwwrite(vortex->mmio, 0x242b4 + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) hwwrite(vortex->mmio, 0x242b8 + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) hwwrite(vortex->mmio, 0x242bc + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) hwwrite(vortex->mmio, 0x242c0 + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) hwwrite(vortex->mmio, 0x242c4 + i * 0x24, coefs[i][4]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) hwwrite(vortex->mmio, 0x24540, arg_0 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) hwwrite(vortex->mmio, 0x24544, arg_4 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) vortex_XtalkHw_SetLeftXT(vortex_t * vortex, short arg_0, short arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) xtalk_coefs_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) hwwrite(vortex->mmio, 0x24368 + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) hwwrite(vortex->mmio, 0x2436c + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) hwwrite(vortex->mmio, 0x24370 + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) hwwrite(vortex->mmio, 0x24374 + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) hwwrite(vortex->mmio, 0x24378 + i * 0x24, coefs[i][4]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) hwwrite(vortex->mmio, 0x24548, arg_0 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) hwwrite(vortex->mmio, 0x2454C, arg_4 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) vortex_XtalkHw_SetRightXT(vortex_t * vortex, short arg_0, short arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) xtalk_coefs_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) hwwrite(vortex->mmio, 0x2441C + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) hwwrite(vortex->mmio, 0x24420 + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) hwwrite(vortex->mmio, 0x24424 + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) hwwrite(vortex->mmio, 0x24428 + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) hwwrite(vortex->mmio, 0x2442C + i * 0x24, coefs[i][4]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) hwwrite(vortex->mmio, 0x24550, arg_0 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) hwwrite(vortex->mmio, 0x24554, arg_4 & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) vortex_XtalkHw_SetLeftEQStates(vortex_t * vortex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) xtalk_instate_t const arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) xtalk_state_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) hwwrite(vortex->mmio, 0x24214 + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) hwwrite(vortex->mmio, 0x24218 + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) hwwrite(vortex->mmio, 0x2421C + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) hwwrite(vortex->mmio, 0x24220 + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) hwwrite(vortex->mmio, 0x244F8, arg_0[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) hwwrite(vortex->mmio, 0x244FC, arg_0[1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) hwwrite(vortex->mmio, 0x24500, arg_0[2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) hwwrite(vortex->mmio, 0x24504, arg_0[3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) vortex_XtalkHw_SetRightEQStates(vortex_t * vortex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) xtalk_instate_t const arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) xtalk_state_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) hwwrite(vortex->mmio, 0x242C8 + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) hwwrite(vortex->mmio, 0x242CC + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) hwwrite(vortex->mmio, 0x242D0 + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) hwwrite(vortex->mmio, 0x244D4 + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) hwwrite(vortex->mmio, 0x24508, arg_0[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) hwwrite(vortex->mmio, 0x2450C, arg_0[1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) hwwrite(vortex->mmio, 0x24510, arg_0[2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) hwwrite(vortex->mmio, 0x24514, arg_0[3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) vortex_XtalkHw_SetLeftXTStates(vortex_t * vortex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) xtalk_instate_t const arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) xtalk_state_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) hwwrite(vortex->mmio, 0x2437C + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) hwwrite(vortex->mmio, 0x24380 + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) hwwrite(vortex->mmio, 0x24384 + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) hwwrite(vortex->mmio, 0x24388 + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) hwwrite(vortex->mmio, 0x24518, arg_0[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) hwwrite(vortex->mmio, 0x2451C, arg_0[1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) hwwrite(vortex->mmio, 0x24520, arg_0[2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) hwwrite(vortex->mmio, 0x24524, arg_0[3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) vortex_XtalkHw_SetRightXTStates(vortex_t * vortex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) xtalk_instate_t const arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) xtalk_state_t const coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) hwwrite(vortex->mmio, 0x24430 + i * 0x24, coefs[i][0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) hwwrite(vortex->mmio, 0x24434 + i * 0x24, coefs[i][1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) hwwrite(vortex->mmio, 0x24438 + i * 0x24, coefs[i][2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) hwwrite(vortex->mmio, 0x2443C + i * 0x24, coefs[i][3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) hwwrite(vortex->mmio, 0x24528, arg_0[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) hwwrite(vortex->mmio, 0x2452C, arg_0[1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) hwwrite(vortex->mmio, 0x24530, arg_0[2]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) hwwrite(vortex->mmio, 0x24534, arg_0[3]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) vortex_XtalkHw_GetLeftEQ(vortex_t * vortex, short *arg_0, short *arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) xtalk_coefs_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) coefs[i][0] = hwread(vortex->mmio, 0x24200 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) coefs[i][1] = hwread(vortex->mmio, 0x24204 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) coefs[i][2] = hwread(vortex->mmio, 0x24208 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) coefs[i][3] = hwread(vortex->mmio, 0x2420c + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) coefs[i][4] = hwread(vortex->mmio, 0x24210 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) *arg_0 = hwread(vortex->mmio, 0x24538) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) *arg_4 = hwread(vortex->mmio, 0x2453c) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) vortex_XtalkHw_GetRightEQ(vortex_t * vortex, short *arg_0, short *arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) xtalk_coefs_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) coefs[i][0] = hwread(vortex->mmio, 0x242b4 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) coefs[i][1] = hwread(vortex->mmio, 0x242b8 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) coefs[i][2] = hwread(vortex->mmio, 0x242bc + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) coefs[i][3] = hwread(vortex->mmio, 0x242c0 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) coefs[i][4] = hwread(vortex->mmio, 0x242c4 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) *arg_0 = hwread(vortex->mmio, 0x24540) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) *arg_4 = hwread(vortex->mmio, 0x24544) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) vortex_XtalkHw_GetLeftXT(vortex_t * vortex, short *arg_0, short *arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) xtalk_coefs_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) coefs[i][0] = hwread(vortex->mmio, 0x24368 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) coefs[i][1] = hwread(vortex->mmio, 0x2436C + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) coefs[i][2] = hwread(vortex->mmio, 0x24370 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) coefs[i][3] = hwread(vortex->mmio, 0x24374 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) coefs[i][4] = hwread(vortex->mmio, 0x24378 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) *arg_0 = hwread(vortex->mmio, 0x24548) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) *arg_4 = hwread(vortex->mmio, 0x2454C) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) vortex_XtalkHw_GetRightXT(vortex_t * vortex, short *arg_0, short *arg_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) xtalk_coefs_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) coefs[i][0] = hwread(vortex->mmio, 0x2441C + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) coefs[i][1] = hwread(vortex->mmio, 0x24420 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) coefs[i][2] = hwread(vortex->mmio, 0x24424 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) coefs[i][3] = hwread(vortex->mmio, 0x24428 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) coefs[i][4] = hwread(vortex->mmio, 0x2442C + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) *arg_0 = hwread(vortex->mmio, 0x24550) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) *arg_4 = hwread(vortex->mmio, 0x24554) & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) vortex_XtalkHw_GetLeftEQStates(vortex_t * vortex, xtalk_instate_t arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) xtalk_state_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) coefs[i][0] = hwread(vortex->mmio, 0x24214 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) coefs[i][1] = hwread(vortex->mmio, 0x24218 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) coefs[i][2] = hwread(vortex->mmio, 0x2421C + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) coefs[i][3] = hwread(vortex->mmio, 0x24220 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) arg_0[0] = hwread(vortex->mmio, 0x244F8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) arg_0[1] = hwread(vortex->mmio, 0x244FC);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) arg_0[2] = hwread(vortex->mmio, 0x24500);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) arg_0[3] = hwread(vortex->mmio, 0x24504);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) vortex_XtalkHw_GetRightEQStates(vortex_t * vortex, xtalk_instate_t arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) xtalk_state_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) coefs[i][0] = hwread(vortex->mmio, 0x242C8 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) coefs[i][1] = hwread(vortex->mmio, 0x242CC + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) coefs[i][2] = hwread(vortex->mmio, 0x242D0 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) coefs[i][3] = hwread(vortex->mmio, 0x242D4 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) arg_0[0] = hwread(vortex->mmio, 0x24508);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) arg_0[1] = hwread(vortex->mmio, 0x2450C);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) arg_0[2] = hwread(vortex->mmio, 0x24510);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) arg_0[3] = hwread(vortex->mmio, 0x24514);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) vortex_XtalkHw_GetLeftXTStates(vortex_t * vortex, xtalk_instate_t arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) xtalk_state_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) coefs[i][0] = hwread(vortex->mmio, 0x2437C + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) coefs[i][1] = hwread(vortex->mmio, 0x24380 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) coefs[i][2] = hwread(vortex->mmio, 0x24384 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) coefs[i][3] = hwread(vortex->mmio, 0x24388 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) arg_0[0] = hwread(vortex->mmio, 0x24518);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) arg_0[1] = hwread(vortex->mmio, 0x2451C);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) arg_0[2] = hwread(vortex->mmio, 0x24520);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) arg_0[3] = hwread(vortex->mmio, 0x24524);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) vortex_XtalkHw_GetRightXTStates(vortex_t * vortex, xtalk_instate_t arg_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) xtalk_state_t coefs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) for (i = 0; i < 5; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) coefs[i][0] = hwread(vortex->mmio, 0x24430 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) coefs[i][1] = hwread(vortex->mmio, 0x24434 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) coefs[i][2] = hwread(vortex->mmio, 0x24438 + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) coefs[i][3] = hwread(vortex->mmio, 0x2443C + i * 0x24);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) arg_0[0] = hwread(vortex->mmio, 0x24528);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) arg_0[1] = hwread(vortex->mmio, 0x2452C);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) arg_0[2] = hwread(vortex->mmio, 0x24530);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) arg_0[3] = hwread(vortex->mmio, 0x24534);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) /* Gains */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) vortex_XtalkHw_SetGains(vortex_t * vortex, xtalk_gains_t const gains)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) for (i = 0; i < XTGAINS_SZ; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) hwwrite(vortex->mmio, 0x244D0 + (i * 4), gains[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) vortex_XtalkHw_SetGainsAllChan(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) vortex_XtalkHw_SetGains(vortex, asXtalkGainsAllChan);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) static void vortex_XtalkHw_GetGains(vortex_t * vortex, xtalk_gains_t gains)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) for (i = 0; i < XTGAINS_SZ; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) gains[i] = hwread(vortex->mmio, 0x244D0 + i * 4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) /* Delay parameters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) vortex_XtalkHw_SetDelay(vortex_t * vortex, unsigned short right,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) unsigned short left)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) u32 esp0 = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) esp0 &= 0x1FFFFFFF;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) esp0 |= 0xA0000000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) esp0 = (esp0 & 0xffffE0ff) | ((right & 0x1F) << 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) esp0 = (esp0 & 0xfffc1fff) | ((left & 0x1F) << 0xd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) hwwrite(vortex->mmio, 0x24660, esp0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) vortex_XtalkHw_SetLeftDline(vortex_t * vortex, xtalk_dline_t const dline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) for (i = 0; i < 0x20; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) hwwrite(vortex->mmio, 0x24000 + (i << 2), dline[i] & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) hwwrite(vortex->mmio, 0x24080 + (i << 2), dline[i] >> 0x10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) vortex_XtalkHw_SetRightDline(vortex_t * vortex, xtalk_dline_t const dline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) for (i = 0; i < 0x20; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) hwwrite(vortex->mmio, 0x24100 + (i << 2), dline[i] & 0xffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) hwwrite(vortex->mmio, 0x24180 + (i << 2), dline[i] >> 0x10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) vortex_XtalkHw_GetDelay(vortex_t * vortex, unsigned short *right,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) unsigned short *left)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) int esp0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) esp0 = hwread(vortex->mmio, 0x24660);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) *right = (esp0 >> 8) & 0x1f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) *left = (esp0 >> 0xd) & 0x1f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) static void vortex_XtalkHw_GetLeftDline(vortex_t * vortex, xtalk_dline_t dline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) for (i = 0; i < 0x20; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) dline[i] =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) (hwread(vortex->mmio, 0x24000 + (i << 2)) & 0xffff) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) (hwread(vortex->mmio, 0x24080 + (i << 2)) << 0x10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) static void vortex_XtalkHw_GetRightDline(vortex_t * vortex, xtalk_dline_t dline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) for (i = 0; i < 0x20; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) dline[i] =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) (hwread(vortex->mmio, 0x24100 + (i << 2)) & 0xffff) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) (hwread(vortex->mmio, 0x24180 + (i << 2)) << 0x10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) /* Control/Global stuff */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) static void vortex_XtalkHw_SetControlReg(vortex_t * vortex, u32 ctrl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) hwwrite(vortex->mmio, 0x24660, ctrl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) static void vortex_XtalkHw_GetControlReg(vortex_t * vortex, u32 *ctrl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) *ctrl = hwread(vortex->mmio, 0x24660);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) static void vortex_XtalkHw_SetSampleRate(vortex_t * vortex, u32 sr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) u32 temp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) temp = (hwread(vortex->mmio, 0x24660) & 0x1FFFFFFF) | 0xC0000000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) temp = (temp & 0xffffff07) | ((sr & 0x1f) << 3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) hwwrite(vortex->mmio, 0x24660, temp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) static void vortex_XtalkHw_GetSampleRate(vortex_t * vortex, u32 *sr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) *sr = (hwread(vortex->mmio, 0x24660) >> 3) & 0x1f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) static void vortex_XtalkHw_Enable(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) u32 temp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) temp = (hwread(vortex->mmio, 0x24660) & 0x1FFFFFFF) | 0xC0000000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) temp |= 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) hwwrite(vortex->mmio, 0x24660, temp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) static void vortex_XtalkHw_Disable(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) u32 temp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) temp = (hwread(vortex->mmio, 0x24660) & 0x1FFFFFFF) | 0xC0000000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) temp &= 0xfffffffe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) hwwrite(vortex->mmio, 0x24660, temp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) static void vortex_XtalkHw_ZeroIO(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) for (i = 0; i < 20; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) hwwrite(vortex->mmio, 0x24600 + (i << 2), 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) for (i = 0; i < 4; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) hwwrite(vortex->mmio, 0x24650 + (i << 2), 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) static void vortex_XtalkHw_ZeroState(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) vortex_XtalkHw_ZeroIO(vortex); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) vortex_XtalkHw_SetLeftEQ(vortex, 0, 0, asXtalkCoefsZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) vortex_XtalkHw_SetRightEQ(vortex, 0, 0, asXtalkCoefsZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) vortex_XtalkHw_SetLeftXT(vortex, 0, 0, asXtalkCoefsZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) vortex_XtalkHw_SetRightXT(vortex, 0, 0, asXtalkCoefsZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) vortex_XtalkHw_SetGains(vortex, asXtalkGainsZeros); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) vortex_XtalkHw_SetDelay(vortex, 0, 0); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) vortex_XtalkHw_SetLeftDline(vortex, alXtalkDlineZeros); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) vortex_XtalkHw_SetRightDline(vortex, alXtalkDlineZeros); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) vortex_XtalkHw_SetLeftDline(vortex, alXtalkDlineZeros); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) vortex_XtalkHw_SetRightDline(vortex, alXtalkDlineZeros); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) vortex_XtalkHw_SetLeftEQStates(vortex, asXtalkInStateZeros,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) asXtalkOutStateZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) vortex_XtalkHw_SetRightEQStates(vortex, asXtalkInStateZeros,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) asXtalkOutStateZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) vortex_XtalkHw_SetLeftXTStates(vortex, asXtalkInStateZeros,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) asXtalkOutStateZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) vortex_XtalkHw_SetRightXTStates(vortex, asXtalkInStateZeros,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) asXtalkOutStateZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) static void vortex_XtalkHw_ProgramPipe(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) vortex_XtalkHw_SetLeftEQ(vortex, 0, 1, asXtalkCoefsPipe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) vortex_XtalkHw_SetRightEQ(vortex, 0, 1, asXtalkCoefsPipe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) vortex_XtalkHw_SetLeftXT(vortex, 0, 0, asXtalkCoefsZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) vortex_XtalkHw_SetRightXT(vortex, 0, 0, asXtalkCoefsZeros);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) vortex_XtalkHw_SetDelay(vortex, 0, 0); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) static void vortex_XtalkHw_ProgramXtalkWide(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) vortex_XtalkHw_SetLeftEQ(vortex, sXtalkWideKLeftEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) sXtalkWideShiftLeftEq, asXtalkWideCoefsLeftEq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) vortex_XtalkHw_SetRightEQ(vortex, sXtalkWideKRightEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) sXtalkWideShiftRightEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) asXtalkWideCoefsRightEq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) vortex_XtalkHw_SetLeftXT(vortex, sXtalkWideKLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) sXtalkWideShiftLeftXt, asXtalkWideCoefsLeftXt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) vortex_XtalkHw_SetRightXT(vortex, sXtalkWideKLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) sXtalkWideShiftLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) asXtalkWideCoefsLeftXt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) vortex_XtalkHw_SetDelay(vortex, wXtalkWideRightDelay, wXtalkWideLeftDelay); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) static void vortex_XtalkHw_ProgramXtalkNarrow(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) vortex_XtalkHw_SetLeftEQ(vortex, sXtalkNarrowKLeftEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) sXtalkNarrowShiftLeftEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) asXtalkNarrowCoefsLeftEq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) vortex_XtalkHw_SetRightEQ(vortex, sXtalkNarrowKRightEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) sXtalkNarrowShiftRightEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) asXtalkNarrowCoefsRightEq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) vortex_XtalkHw_SetLeftXT(vortex, sXtalkNarrowKLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) sXtalkNarrowShiftLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) asXtalkNarrowCoefsLeftXt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) vortex_XtalkHw_SetRightXT(vortex, sXtalkNarrowKLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) sXtalkNarrowShiftLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) asXtalkNarrowCoefsLeftXt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) vortex_XtalkHw_SetDelay(vortex, wXtalkNarrowRightDelay, wXtalkNarrowLeftDelay); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) static void vortex_XtalkHw_ProgramDiamondXtalk(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) //sDiamondKLeftEq,sDiamondKRightXt,asDiamondCoefsLeftEq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) vortex_XtalkHw_SetLeftEQ(vortex, sDiamondKLeftEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) sDiamondShiftLeftEq, asDiamondCoefsLeftEq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) vortex_XtalkHw_SetRightEQ(vortex, sDiamondKRightEq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) sDiamondShiftRightEq, asDiamondCoefsRightEq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) vortex_XtalkHw_SetLeftXT(vortex, sDiamondKLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) sDiamondShiftLeftXt, asDiamondCoefsLeftXt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) vortex_XtalkHw_SetRightXT(vortex, sDiamondKLeftXt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) sDiamondShiftLeftXt, asDiamondCoefsLeftXt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) vortex_XtalkHw_SetDelay(vortex, wDiamondRightDelay, wDiamondLeftDelay); // inlined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) static void vortex_XtalkHw_init(vortex_t * vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) vortex_XtalkHw_ZeroState(vortex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) /* End of file */