/*************************************************************************** * au88x0_cxtalk.c * * Wed Nov 19 16:29:47 2003 * Copyright 2003 mjander * mjander@users.sourceforge.org ****************************************************************************/ #include "au88x0_xtalk.h" /* Data (a whole lot of data.... ) */ short const sXtalkWideKLeftEq = 0x269C; short const sXtalkWideKRightEq = 0x269C; short const sXtalkWideKLeftXt = 0xF25E; short const sXtalkWideKRightXt = 0xF25E; short const sXtalkWideShiftLeftEq = 1; short const sXtalkWideShiftRightEq = 1; short const sXtalkWideShiftLeftXt = 0; short const sXtalkWideShiftRightXt = 0; unsigned short const wXtalkWideLeftDelay = 0xd; unsigned short const wXtalkWideRightDelay = 0xd; short const sXtalkNarrowKLeftEq = 0x468D; short const sXtalkNarrowKRightEq = 0x468D; short const sXtalkNarrowKLeftXt = 0xF82E; short const sXtalkNarrowKRightXt = 0xF82E; short const sXtalkNarrowShiftLeftEq = 0x3; short const sXtalkNarrowShiftRightEq = 0x3; short const sXtalkNarrowShiftLeftXt = 0; short const sXtalkNarrowShiftRightXt = 0; unsigned short const wXtalkNarrowLeftDelay = 0x7; unsigned short const wXtalkNarrowRightDelay = 0x7; xtalk_gains_t const asXtalkGainsDefault = { 0x4000,0x4000,4000,0x4000,4000,0x4000,4000,0x4000,4000,0x4000 }; //short const * const asXtalkGainsTest = { xtalk_gains_t const asXtalkGainsTest = { 0x8000,0x7FFF,0,0xFFFF,0x0001,0xC000,0x4000,0xFFFE,0x0002,0 }; xtalk_gains_t const asXtalkGains1Chan = { 0x7FFF,0,0,0,0x7FFF,0,0,0,0,0 }; xtalk_gains_t const asXtalkGainsAllChan = { 0x7FFF,0x7FFF,0x7FFF,0x7FFF,0x7FFF,0,0x7FFF,0x7FFF,0x7FFF,0 }; xtalk_gains_t const asXtalkGainsZeros = { 0,0,0,0,0,0,0,0,0,0 }; xtalk_dline_t const alXtalkDlineZeros = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; xtalk_dline_t const alXtalkDlineTest = { 0xFC18,0x03E8FFFF,0x186A0,0x7960FFFE,1,0xFFFFFFFF, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; xtalk_instate_t const asXtalkInStateZeros = {0,0,0,0}; xtalk_instate_t const asXtalkInStateTest = {0xFF80,0x0080,0xFFFF,0x0001}; xtalk_state_t const asXtalkOutStateZeros = { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }; short const sDiamondKLeftEq = 0x401d; short const sDiamondKRightEq = 0x401d; short const sDiamondKLeftXt = 0xF90e; short const sDiamondKRightXt = 0xF90e; short const sDiamondShiftLeftEq = 1; /* 0xF90e Is this a bug ??? */ short const sDiamondShiftRightEq = 1; short const sDiamondShiftLeftXt = 0; short const sDiamondShiftRightXt = 0; unsigned short const wDiamondLeftDelay = 0xb; unsigned short const wDiamondRightDelay = 0xb; xtalk_coefs_t const asXtalkWideCoefsLeftEq = { {0xEC4C,0xDCE9,0xFDC2,0xFEEC,0}, {0x5F60,0xCBCB,0xFC26,0x0305,0}, {0x340B,0xf504,0x6CE8,0x0D23,0x00E4}, {0xD500,0x8D76,0xACC7,0x5B05,0x00FA}, {0x7F04,0xC0FA,0x0263,0xFDA2,0} }; xtalk_coefs_t const asXtalkWideCoefsRightEq = { {0xEC4C,0xDCE9,0xFDC2,0xFEEC,0}, {0x5F60,0xCBCB,0xFC26,0x0305,0}, {0x340B,0xF504,0x6CE8,0x0D23,0x00E4}, {0xD500,0x8D76,0xACC7,0x5B05,0x00FA}, {0x7F04,0xC0FA,0x0263,0xFDA2,0} }; xtalk_coefs_t const asXtalkWideCoefsLeftXt = { {0x86C3,0x7B55,0x89C3,0x005B,0x0047}, {0x6000,0x206A,0xC6CA,0x40FF,0}, {0x1100,0x1164,0xA1D7,0x90FC,0x0001}, {0xDC00,0x9E77,0xB8C7,0x0AFF,0}, {0,0,0,0,0} }; xtalk_coefs_t const asXtalkWideCoefsRightXt = { {0x86C3,0x7B55,0x89C3,0x005B,0x0047}, {0x6000,0x206A,0xC6CA,0x40FF,0}, {0x1100,0x1164,0xA1D7,0x90FC,0x0001}, {0xDC00,0x9E77,0xB8C7,0x0AFF,0}, {0,0,0,0,0} }; xtalk_coefs_t const asXtalkNarrowCoefsLeftEq = { {0x50B5,0xD07C,0x026D,0xFD21,0}, {0x460F,0xE44F,0xF75E,0xEFA6,0}, {0x556D,0xDCAB,0x2098,0xF0F2,0}, {0x7E03,0xC1F0,0x007D,0xFF89,0}, {0x383E,0xFD9D,0xB278,0x4547,0} }; xtalk_coefs_t const asXtalkNarrowCoefsRightEq = { {0x50B5,0xD07C,0x026D,0xFD21,0}, {0x460F,0xE44F,0xF75E,0xEFA6,0}, {0x556D,0xDCAB,0x2098,0xF0F2,0}, {0x7E03,0xC1F0,0x007D,0xFF89,0}, {0x383E,0xFD9D,0xB278,0x4547,0} }; xtalk_coefs_t const asXtalkNarrowCoefsLeftXt = { {0x3CB2,0xDF49,0xF6EA,0x095B,0}, {0x6777,0xC915,0xFEAF,0x00B1,0}, {0x7762,0xC7D9,0x025B,0xFDA6,0}, {0x6B7A,0xD2AA,0xF2FB,0x0B64,0}, {0,0,0,0,0} }; xtalk_coefs_t const asXtalkNarrowCoefsRightXt = { {0x3CB2,0xDF49,0xF6EA,0x095B,0}, {0x6777,0xC915,0xFEAF,0x00B1,0}, {0x7762,0xC7D9,0x025B,0xFDA6,0}, {0x6B7A,0xD2AA,0xF2FB,0x0B64,0}, {0,0,0,0,0} }; xtalk_coefs_t const asXtalkCoefsZeros = { {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0} }; xtalk_coefs_t const asXtalkCoefsPipe = { {0,0,0x0FA0,0,0}, {0,0,0x0FA0,0,0}, {0,0,0x0FA0,0,0}, {0,0,0x0FA0,0,0}, {0,0,0x1180,0,0}, }; xtalk_coefs_t const asXtalkCoefsNegPipe = { {0,0,0xF380,0,0}, {0,0,0xF380,0,0}, {0,0,0xF380,0,0}, {0,0,0xF380,0,0}, {0,0,0xF200,0,0} }; xtalk_coefs_t const asXtalkCoefsNumTest = { {0,0,0xF380,0x8000,0x6D60}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0} }; xtalk_coefs_t const asXtalkCoefsDenTest = { {0xC000,0x2000,0x4000,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0} }; xtalk_state_t const asXtalkOutStateTest = { {0x7FFF,0x0004,0xFFFC,0}, {0xFE00,0x0008,0xFFF8,0x4000}, {0x200,0x0010,0xFFF0,0xC000}, {0x8000,0x0020,0xFFE0,0}, {0,0,0,0} }; xtalk_coefs_t const asDiamondCoefsLeftEq = { {0x0F1E,0x2D05,0xF8E3,0x07C8,0}, {0x45E2,0xCA51,0x0448,0xFCE7,0}, {0xA93E,0xDBD5,0x022C,0x028A,0}, {0,0,0,0,0}, {0,0,0,0,0} }; xtalk_coefs_t const asDiamondCoefsRightEq = { {0x0F1E,0x2D05,0xF8E3,0x07C8,0}, {0x45E2,0xCA51,0x0448,0xFCE7,0}, {0xA93E,0xDBD5,0x022C,0x028A,0}, {0,0,0,0,0}, {0,0,0,0,0} }; xtalk_coefs_t const asDiamondCoefsLeftXt = { {0x3B50,0xFE08,0xF959,0x0060,0}, {0x9FCB,0xD8F1,0x00A2,0x003A,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0} }; xtalk_coefs_t const asDiamondCoefsRightXt = { {0x3B50,0xFE08,0xF959,0x0060,0}, {0x9FCB,0xD8F1,0x00A2,0x003A,0}, {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0} }; /**/ /* XTalk EQ and XT */ void vortex_XtalkHw_CXtalkHw(vortex_t *vortex /*class CAsp4HwIO * arg_0*/) { //this_00 = arg_0; } void vortex_XtalkHw_SetLeftEQ(vortex_t *vortex, short arg_0, short arg_4, xtalk_coefs_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x24200 + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x24204 + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x24208 + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x2420c + i*0x24, coefs[i][3]); hwwrite(vortex->mmio, 0x24210 + i*0x24, coefs[i][4]); } hwwrite(vortex->mmio, 0x24538, arg_0 & 0xffff); hwwrite(vortex->mmio, 0x2453C, arg_4 & 0xffff); } void vortex_XtalkHw_GetLeftEQ(vortex_t *vortex, short *arg_0, short *arg_4, xtalk_coefs_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x24200 + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x24204 + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x24208 + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x2420c + i*0x24); coefs[i][4] = hwread(vortex->mmio, 0x24210 + i*0x24); } *arg_0 = hwread(vortex->mmio, 0x24538) & 0xffff; *arg_4 = hwread(vortex->mmio, 0x2453c) & 0xffff; } void vortex_XtalkHw_SetRightEQ(vortex_t *vortex, short arg_0, short arg_4, xtalk_coefs_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x242b4 + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x242b8 + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x242bc + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x242c0 + i*0x24, coefs[i][3]); hwwrite(vortex->mmio, 0x242c4 + i*0x24, coefs[i][4]); } hwwrite(vortex->mmio, 0x24540, arg_0 & 0xffff); hwwrite(vortex->mmio, 0x24544, arg_4 & 0xffff); } void vortex_XtalkHw_GetRightEQ(vortex_t *vortex, short *arg_0, short *arg_4, xtalk_coefs_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x242b4 + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x242b8 + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x242bc + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x242c0 + i*0x24); coefs[i][4] = hwread(vortex->mmio, 0x242c4 + i*0x24); } *arg_0 = hwread(vortex->mmio, 0x24540) & 0xffff; *arg_4 = hwread(vortex->mmio, 0x24544) & 0xffff; } void vortex_XtalkHw_SetLeftXT(vortex_t *vortex, short arg_0, short arg_4, xtalk_coefs_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x24368 + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x2436c + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x24370 + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x24374 + i*0x24, coefs[i][3]); hwwrite(vortex->mmio, 0x24378 + i*0x24, coefs[i][4]); } hwwrite(vortex->mmio, 0x24548, arg_0 & 0xffff); hwwrite(vortex->mmio, 0x2454C, arg_4 & 0xffff); } void vortex_XtalkHw_GetLeftXT(vortex_t *vortex, short *arg_0, short *arg_4 , xtalk_coefs_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x24368 + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x2436C + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x24370 + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x24374 + i*0x24); coefs[i][4] = hwread(vortex->mmio, 0x24378 + i*0x24); } *arg_0 = hwread(vortex->mmio, 0x24548) & 0xffff; *arg_4 = hwread(vortex->mmio, 0x2454C) & 0xffff; } void vortex_XtalkHw_SetRightXT(vortex_t *vortex, short arg_0, short arg_4, xtalk_coefs_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x2441C + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x24420 + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x24424 + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x24428 + i*0x24, coefs[i][3]); hwwrite(vortex->mmio, 0x2442C + i*0x24, coefs[i][4]); } hwwrite(vortex->mmio, 0x24550, arg_0 & 0xffff); hwwrite(vortex->mmio, 0x24554, arg_4 & 0xffff); } void vortex_XtalkHw_GetRightXT(vortex_t *vortex, short *arg_0, short *arg_4 , xtalk_coefs_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x2441C + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x24420 + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x24424 + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x24428 + i*0x24); coefs[i][4] = hwread(vortex->mmio, 0x2442C + i*0x24); } *arg_0 = hwread(vortex->mmio, 0x24550) & 0xffff; *arg_4 = hwread(vortex->mmio, 0x24554) & 0xffff; } void vortex_XtalkHw_SetLeftEQStates(vortex_t *vortex, xtalk_instate_t const arg_0, xtalk_state_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x24414 + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x24418 + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x2441C + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x24420 + i*0x24, coefs[i][3]); } hwwrite(vortex->mmio, 0x244F8 + i*0x24, arg_0[0]); hwwrite(vortex->mmio, 0x244FC + i*0x24, arg_0[1]); hwwrite(vortex->mmio, 0x24500 + i*0x24, arg_0[2]); hwwrite(vortex->mmio, 0x24504 + i*0x24, arg_0[3]); } void vortex_XtalkHw_GetLeftEQStates(vortex_t *vortex, xtalk_instate_t arg_0, xtalk_state_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x24414 + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x24418 + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x2441C + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x24420 + i*0x24); } arg_0[0] = hwread(vortex->mmio, 0x244F8 + i*0x24); arg_0[1] = hwread(vortex->mmio, 0x244FC + i*0x24); arg_0[2] = hwread(vortex->mmio, 0x24500 + i*0x24); arg_0[3] = hwread(vortex->mmio, 0x24504 + i*0x24); } void vortex_XtalkHw_SetRightEQStates(vortex_t *vortex, xtalk_instate_t const arg_0, xtalk_state_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x242C8 + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x242CC + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x242D0 + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x244D4 + i*0x24, coefs[i][3]); } hwwrite(vortex->mmio, 0x24508 + i*0x24, arg_0[0]); hwwrite(vortex->mmio, 0x2450C + i*0x24, arg_0[1]); hwwrite(vortex->mmio, 0x24510 + i*0x24, arg_0[2]); hwwrite(vortex->mmio, 0x24514 + i*0x24, arg_0[3]); } void vortex_XtalkHw_GetRightEQStates(vortex_t *vortex, xtalk_instate_t arg_0, xtalk_state_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x242C8 + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x242CC + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x242D0 + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x242D4 + i*0x24); } arg_0[0] = hwread(vortex->mmio, 0x24508 + i*0x24); arg_0[1] = hwread(vortex->mmio, 0x2450C + i*0x24); arg_0[2] = hwread(vortex->mmio, 0x24510 + i*0x24); arg_0[3] = hwread(vortex->mmio, 0x24514 + i*0x24); } void vortex_XtalkHw_SetLeftXTStates(vortex_t *vortex, xtalk_instate_t const arg_0, xtalk_state_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x2437C + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x24380 + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x24384 + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x24388 + i*0x24, coefs[i][3]); } hwwrite(vortex->mmio, 0x24518 + i*0x24, arg_0[0]); hwwrite(vortex->mmio, 0x2451C + i*0x24, arg_0[1]); hwwrite(vortex->mmio, 0x24520 + i*0x24, arg_0[2]); hwwrite(vortex->mmio, 0x24524 + i*0x24, arg_0[3]); } void vortex_XtalkHw_GetLeftXTStates(vortex_t *vortex, xtalk_instate_t arg_0, xtalk_state_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x2437C + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x24380 + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x24384 + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x24388 + i*0x24); } arg_0[0] = hwread(vortex->mmio, 0x24518 + i*0x24); arg_0[1] = hwread(vortex->mmio, 0x2451C + i*0x24); arg_0[2] = hwread(vortex->mmio, 0x24520 + i*0x24); arg_0[3] = hwread(vortex->mmio, 0x24524 + i*0x24); } void vortex_XtalkHw_SetRightXTStates(vortex_t *vortex, xtalk_instate_t const arg_0, xtalk_state_t const coefs) { int i; for (i=0; i<5; i++) { hwwrite(vortex->mmio, 0x24430 + i*0x24, coefs[i][0]); hwwrite(vortex->mmio, 0x24434 + i*0x24, coefs[i][1]); hwwrite(vortex->mmio, 0x24438 + i*0x24, coefs[i][2]); hwwrite(vortex->mmio, 0x2443C + i*0x24, coefs[i][3]); } hwwrite(vortex->mmio, 0x24528 + i*0x24, arg_0[0]); hwwrite(vortex->mmio, 0x2452C + i*0x24, arg_0[1]); hwwrite(vortex->mmio, 0x24530 + i*0x24, arg_0[2]); hwwrite(vortex->mmio, 0x24534 + i*0x24, arg_0[3]); } void vortex_XtalkHw_GetRightXTStates(vortex_t *vortex, xtalk_instate_t arg_0, xtalk_state_t coefs) { int i; for (i=0; i<5; i++) { coefs[i][0] = hwread(vortex->mmio, 0x24430 + i*0x24); coefs[i][1] = hwread(vortex->mmio, 0x24434 + i*0x24); coefs[i][2] = hwread(vortex->mmio, 0x24438 + i*0x24); coefs[i][3] = hwread(vortex->mmio, 0x2443C + i*0x24); } arg_0[0] = hwread(vortex->mmio, 0x24528 + i*0x24); arg_0[1] = hwread(vortex->mmio, 0x2452C + i*0x24); arg_0[2] = hwread(vortex->mmio, 0x24530 + i*0x24); arg_0[3] = hwread(vortex->mmio, 0x24534 + i*0x24); } /* Gains */ void vortex_XtalkHw_SetGains(vortex_t *vortex, xtalk_gains_t const gains) { int i; for (i=0; i<10; i++) hwwrite(vortex->mmio, 0x244D0 + i*4, gains[i]); } void vortex_XtalkHw_GetGains(vortex_t *vortex, xtalk_gains_t gains) { int i; for (i=0; i<10; i++) gains[i] = hwread(vortex->mmio, 0x244D0 + i*4); } /* Delay parameters */ void vortex_XtalkHw_SetDelay(vortex_t *vortex, unsigned short right, unsigned short left) { int esp0=0; esp0 &= 0x1FFFFFFF; esp0 |= 0xA0000000; esp0 = (esp0 & 0xffffE0ff) | ((right & 0x1F) << 8); esp0 = (esp0 & 0xfffc1fff) | ((left & 0x1F) << 0xd); hwwrite(vortex->mmio, 0x24660, esp0); } void vortex_XtalkHw_GetDelay(vortex_t *vortex, unsigned short *right, unsigned short *left) { int esp0; esp0 = hwread(vortex->mmio, 0x24660); *right = (esp0 >> 8) & 0x1f; *left = (esp0 >> 0xd) & 0x1f; } void vortex_XtalkHw_SetLeftDline(vortex_t *vortex, xtalk_dline_t const dline) { int i; for (i=0; i<0x20; i++) { hwwrite(vortex->mmio, 0x24000 + (i<<2), dline[i] & 0xffff); hwwrite(vortex->mmio, 0x24080 + (i<<2), dline[i] >> 0x10); } } void vortex_XtalkHw_GetLeftDline(vortex_t *vortex, xtalk_dline_t dline) { int i; for (i=0; i<0x20; i++) { dline[i] = (hwread(vortex->mmio, 0x24000 + (i<<2)) & 0xffff) | (hwread(vortex->mmio, 0x24080 + (i<<2)) << 0x10); } } void vortex_XtalkHw_SetRightDline(vortex_t *vortex, xtalk_dline_t const dline) { int i; for (i=0; i<0x20; i++) { hwwrite(vortex->mmio, 0x24100 + (i<<2), dline[i] & 0xffff); hwwrite(vortex->mmio, 0x24180 + (i<<2), dline[i] >> 0x10); } } void vortex_XtalkHw_GetRightDline(vortex_t *vortex, xtalk_dline_t dline) { int i; for (i=0; i<0x20; i++) { dline[i] = (hwread(vortex->mmio, 0x24100 + (i<<2)) & 0xffff) | (hwread(vortex->mmio, 0x24180 + (i<<2)) << 0x10); } } /* Control/Global stuff */ void vortex_XtalkHw_SetControlReg(vortex_t *vortex, unsigned long ctrl) { hwwrite(vortex->mmio, 0x24660, ctrl); } void vortex_XtalkHw_GetControlReg(vortex_t *vortex, unsigned long *ctrl) { *ctrl = hwread(vortex->mmio, 0x24660); } void vortex_XtalkHw_SetSampleRate(vortex_t *vortex, int sr) { int temp; temp = (hwread(vortex->mmio, 0x24660) & 0x1FFFFFFF) | 0xC0000000; temp = (temp & 0xffffff07) | ((sr & 0x1f) << 3); hwwrite(vortex->mmio, 0x24660, temp); } void vortex_XtalkHw_GetSampleRate(vortex_t *vortex, int *sr) { *sr = (hwread(vortex->mmio, 0x24660) >> 3) & 0x1f; } void vortex_XtalkHw_Enable(vortex_t *vortex) { int temp; temp = (hwread(vortex->mmio, 0x24660) & 0x1FFFFFFF) | 0xC0000000; temp |= 1; hwwrite(vortex->mmio, 0x24660, temp); } void vortex_XtalkHw_Disable(vortex_t *vortex) { int temp; temp = (hwread(vortex->mmio, 0x24660) & 0x1FFFFFFF) | 0xC0000000; temp &= 0xfffffffe; hwwrite(vortex->mmio, 0x24660, temp); } void vortex_XtalkHw_ZeroIO(vortex_t *vortex) { int i; for (i=0; i<0x20; i++) hwwrite(vortex->mmio, 0x24600 + (i<<2), 0); for (i=0; i<4; i++) hwwrite(vortex->mmio, 0x24650 + (i<<2), 0); } void vortex_XtalkHw_ZeroState(vortex_t *vortex) { vortex_XtalkHw_ZeroIO(vortex); // inlined vortex_XtalkHw_SetLeftEQ(vortex, 0, 0, asXtalkCoefsZeros); vortex_XtalkHw_SetRightEQ(vortex, 0, 0, asXtalkCoefsZeros); vortex_XtalkHw_SetLeftXT(vortex, 0, 0, asXtalkCoefsZeros); vortex_XtalkHw_SetRightXT(vortex, 0, 0, asXtalkCoefsZeros); vortex_XtalkHw_SetGains(vortex, asXtalkGainsZeros); // inlined vortex_XtalkHw_SetDelay(vortex, 0, 0); // inlined vortex_XtalkHw_SetLeftDline(vortex, alXtalkDlineZeros); // inlined vortex_XtalkHw_SetRightDline(vortex, alXtalkDlineZeros); // inlined vortex_XtalkHw_SetLeftDline(vortex, alXtalkDlineZeros); // inlined vortex_XtalkHw_SetRightDline(vortex, alXtalkDlineZeros); // inlined vortex_XtalkHw_SetLeftEQStates(vortex, asXtalkInStateZeros, asXtalkOutStateZeros); vortex_XtalkHw_SetRightEQStates(vortex, asXtalkInStateZeros, asXtalkOutStateZeros); vortex_XtalkHw_SetLeftXTStates(vortex, asXtalkInStateZeros, asXtalkOutStateZeros); vortex_XtalkHw_SetRightXTStates(vortex, asXtalkInStateZeros, asXtalkOutStateZeros); } void vortex_XtalkHw_ProgramPipe(vortex_t *vortex) { vortex_XtalkHw_SetLeftEQ(vortex, 0, 1, asXtalkCoefsPipe); vortex_XtalkHw_SetRightEQ(vortex, 0, 1, asXtalkCoefsPipe); vortex_XtalkHw_SetLeftXT(vortex, 0, 0, asXtalkCoefsZeros); vortex_XtalkHw_SetRightXT(vortex, 0, 0, asXtalkCoefsZeros); vortex_XtalkHw_SetDelay(vortex, 0, 0); // inlined } void vortex_XtalkHw_ProgramXtalkWide(vortex_t *vortex) { vortex_XtalkHw_SetLeftEQ(vortex, sXtalkWideKLeftEq, sXtalkWideShiftLeftEq, asXtalkWideCoefsLeftEq); vortex_XtalkHw_SetRightEQ(vortex, sXtalkWideKRightEq, sXtalkWideShiftRightEq, asXtalkWideCoefsRightEq); vortex_XtalkHw_SetLeftXT(vortex, sXtalkWideKLeftXt, sXtalkWideShiftLeftXt, asXtalkWideCoefsLeftXt); vortex_XtalkHw_SetRightXT(vortex, sXtalkWideKLeftXt, sXtalkWideShiftLeftXt, asXtalkWideCoefsLeftXt); vortex_XtalkHw_SetDelay(vortex, wXtalkWideRightDelay, wXtalkWideLeftDelay); // inlined } void vortex_XtalkHw_ProgramXtalkNarrow(vortex_t *vortex) { vortex_XtalkHw_SetLeftEQ(vortex, sXtalkNarrowKLeftEq, sXtalkNarrowShiftLeftEq, asXtalkNarrowCoefsLeftEq); vortex_XtalkHw_SetRightEQ(vortex, sXtalkNarrowKRightEq, sXtalkNarrowShiftRightEq, asXtalkNarrowCoefsRightEq); vortex_XtalkHw_SetLeftXT(vortex, sXtalkNarrowKLeftXt, sXtalkNarrowShiftLeftXt, asXtalkNarrowCoefsLeftXt); vortex_XtalkHw_SetRightXT(vortex, sXtalkNarrowKLeftXt, sXtalkNarrowShiftLeftXt, asXtalkNarrowCoefsLeftXt); vortex_XtalkHw_SetDelay(vortex, wXtalkNarrowRightDelay, wXtalkNarrowLeftDelay); // inlined } void vortex_XtalkHw_ProgramDiamondXtalk(vortex_t *vortex) { //sDiamondKLeftEq,sDiamondKRightXt,asDiamondCoefsLeftEq vortex_XtalkHw_SetLeftEQ(vortex, sDiamondKLeftEq, sDiamondShiftLeftEq, asDiamondCoefsLeftEq); vortex_XtalkHw_SetRightEQ(vortex, sDiamondKRightEq, sDiamondShiftRightEq, asDiamondCoefsRightEq); vortex_XtalkHw_SetLeftXT(vortex, sDiamondKLeftXt, sDiamondShiftLeftXt, asDiamondCoefsLeftXt); vortex_XtalkHw_SetRightXT(vortex, sDiamondKLeftXt, sDiamondShiftLeftXt, asDiamondCoefsLeftXt); vortex_XtalkHw_SetDelay(vortex, wDiamondRightDelay, wDiamondLeftDelay); // inlined } /* End of file */