summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMargarita Olaya Cabrera <magi.olaya@ti.com>2010-08-30 11:54:20 -0500
committerRicardo Perez Olivares <x0081762@ti.com>2010-09-09 15:13:39 -0500
commit9ee855e3b487cc2369010a64b2525a672ffa037d (patch)
treef4fa7c7bc097b5c5b6a32a8a1be28eedf02c0750
parent67a51d55a0c1a3a8e9ffdedab8ce83dd92db8864 (diff)
ASoC: ABE DSP: Update to HAL0800
Signed-off-by: Margarita Olaya Cabrera <magi.olaya@ti.com>
-rw-r--r--sound/soc/omap/abe/C_ABE_FW.CM1236
-rw-r--r--sound/soc/omap/abe/C_ABE_FW.PM470
-rw-r--r--sound/soc/omap/abe/C_ABE_FW.SM32814
-rw-r--r--sound/soc/omap/abe/C_ABE_FW.lDM174
-rw-r--r--sound/soc/omap/abe/Makefile1
-rw-r--r--sound/soc/omap/abe/abe_api.c2164
-rw-r--r--sound/soc/omap/abe/abe_api.h1001
-rw-r--r--sound/soc/omap/abe/abe_cm_addr.h543
-rw-r--r--sound/soc/omap/abe/abe_cof.h49
-rw-r--r--sound/soc/omap/abe/abe_dat.c934
-rw-r--r--sound/soc/omap/abe/abe_dat.h1774
-rw-r--r--sound/soc/omap/abe/abe_dbg.c296
-rw-r--r--sound/soc/omap/abe/abe_dbg.h248
-rw-r--r--sound/soc/omap/abe/abe_def.h574
-rw-r--r--sound/soc/omap/abe/abe_define.h104
-rw-r--r--sound/soc/omap/abe/abe_dm_addr.h601
-rw-r--r--sound/soc/omap/abe/abe_ext.c178
-rw-r--r--sound/soc/omap/abe/abe_ext.h405
-rw-r--r--sound/soc/omap/abe/abe_firmware.c24218
-rw-r--r--sound/soc/omap/abe/abe_functionsId.h68
-rw-r--r--sound/soc/omap/abe/abe_functionsid.h80
-rw-r--r--sound/soc/omap/abe/abe_fw.h566
-rw-r--r--sound/soc/omap/abe/abe_ini.c2368
-rw-r--r--sound/soc/omap/abe/abe_initxxx_labels.h627
-rw-r--r--sound/soc/omap/abe/abe_irq.c66
-rw-r--r--sound/soc/omap/abe/abe_lib.c695
-rw-r--r--sound/soc/omap/abe/abe_lib.h98
-rw-r--r--sound/soc/omap/abe/abe_main.c308
-rw-r--r--sound/soc/omap/abe/abe_main.h61
-rw-r--r--sound/soc/omap/abe/abe_ref.h242
-rw-r--r--sound/soc/omap/abe/abe_seq.c287
-rw-r--r--sound/soc/omap/abe/abe_seq.h85
-rw-r--r--sound/soc/omap/abe/abe_sm_addr.h1015
-rw-r--r--sound/soc/omap/abe/abe_sys.h28
-rw-r--r--sound/soc/omap/abe/abe_taskId.h131
-rw-r--r--sound/soc/omap/abe/abe_taskid.h144
-rw-r--r--sound/soc/omap/abe/abe_test.c1430
-rw-r--r--sound/soc/omap/abe/abe_test.h61
-rw-r--r--sound/soc/omap/abe/abe_typ.h1252
-rw-r--r--sound/soc/omap/abe/abe_typedef.h460
-rw-r--r--sound/soc/omap/abe/c_abe_fw_size.h (renamed from sound/soc/omap/abe/C_ABE_FW_SIZE.h)2
41 files changed, 35634 insertions, 10224 deletions
diff --git a/sound/soc/omap/abe/C_ABE_FW.CM b/sound/soc/omap/abe/C_ABE_FW.CM
index 977ccdf03cde..fa9594ad74b0 100644
--- a/sound/soc/omap/abe/C_ABE_FW.CM
+++ b/sound/soc/omap/abe/C_ABE_FW.CM
@@ -8,7 +8,7 @@
0x001000,
0x001000,
0x151000,
-0x141000,
+0x201000,
0x001000,
0x001000,
0x001000,
@@ -92,21 +92,21 @@
0x001001,
0x000001,
0x001000,
-0x002e04,
+0x002e34,
0x001000,
0x001001,
0x000001,
0x001000,
-0x002e04,
+0x002e34,
0x151000,
-0x002e04,
-0x002e04,
+0x002e34,
+0x002e34,
0x151000,
0x001000,
0x001001,
0x000001,
0x001000,
-0x002e44,
+0x002e74,
0x001000,
0x001001,
0x001000,
@@ -297,11 +297,10 @@
0x000000,
0x000000,
0x000000,
+0x001000,
+0x001001,
0x000000,
-0x000000,
-0x000000,
-0x000000,
-0x000000,
+0x011001,
0x000000,
0x000008,
0x700001,
@@ -385,440 +384,440 @@
0x000000,
0x000000,
0x000000,
-0x023c94,
-0x5ed280,
-0x6a9a5d,
-0xbf42f0,
-0x056260,
-0x0f02e8,
-0xeb9d08,
-0x13f0e8,
-0xeed498,
-0x0d8628,
-0xf610e8,
-0x06dac8,
-0xfb8ca8,
-0x02b6a8,
-0x9d1d03,
-0x3411d3,
-0xe7110b,
-0x0a8b43,
0xfc4793,
-0x0208b8,
-0x6d23e0,
-0x66c791,
-0xb09170,
-0x142c90,
-0x03c304,
-0xf376f8,
-0x0eb9d8,
-0xf220d0,
-0x0b9710,
-0xf71850,
-0x0661c0,
-0xfbb618,
-0x02b430,
-0x99fe5b,
-0x37ceab,
-0xe408e3,
-0x0c8ac3,
+0x0a8b43,
+0xe7110b,
+0x3411d3,
+0x9d1cfb,
+0x02b6a8,
+0xfb8ca8,
+0x06dac8,
+0xf610e8,
+0x0d8628,
+0xeed498,
+0x13f0e8,
+0xeb9d08,
+0x0f02e8,
+0x056260,
+0xbf42f0,
+0x6a9a5d,
+0x5ed280,
+0x023c94,
0xfb2e83,
-0x0464a8,
-0x782010,
-0x61b101,
-0xa7ab80,
-0x1ef5c0,
-0xfadbf0,
-0xfa10a0,
-0x0a1678,
-0xf53c30,
-0x09a2c0,
-0xf83d98,
-0x05c418,
-0xfc0144,
-0x0296d8,
-0x9badf3,
-0x386703,
-0xe2e293,
-0x0d8413,
+0x0c8ac3,
+0xe408e3,
+0x37ceab,
+0x99fe5b,
+0x02b430,
+0xfbb618,
+0x0661c0,
+0xf71850,
+0x0b9710,
+0xf220d0,
+0x0eb9d8,
+0xf37700,
+0x03c304,
+0x142c90,
+0xb09170,
+0x66c791,
+0x6d23e0,
+0x0208b8,
0xfa9443,
-0x05d8f0,
-0x42ccf5,
-0x5b6439,
-0x9fa4a8,
-0x2a0528,
-0xf141c8,
-0x5c184b,
-0x04be58,
-0xf8ea80,
-0x073f50,
-0xf9b218,
-0x04f108,
-0xfc6e8c,
-0x0264f0,
-0xa04a13,
-0x3770b3,
-0xe2819b,
-0x0e2353,
+0x0d8413,
+0xe2e293,
+0x386703,
+0x9badeb,
+0x0296d8,
+0xfc0144,
+0x05c418,
+0xf83d98,
+0x09a2c0,
+0xf53c30,
+0x0a1678,
+0xfa10a0,
+0xfadbf0,
+0x1ef5c0,
+0xa7ab80,
+0x61b101,
+0x782010,
+0x0464a8,
0xfa1fab,
-0x07d850,
-0x498425,
-0x53f3c9,
-0x9a9170,
-0x334af8,
-0xe88c00,
-0x0875d0,
-0xdcf763,
-0xfcaf74,
-0x04b6b0,
-0xfb4d68,
-0x03fc0c,
-0xfcf654,
-0x022008,
-0xa80de3,
-0x348833,
-0xe33ce3,
-0x0e2e23,
+0x0e2353,
+0xe28193,
+0x3770b3,
+0xa04a0b,
+0x0264f0,
+0xfc6e8c,
+0x04f108,
+0xf9b218,
+0x073f50,
+0xf8ea80,
+0x04be58,
+0x5c1863,
+0xf141c8,
+0x2a0528,
+0x9fa4a8,
+0x5b6439,
+0x42ccf5,
+0x05d8f0,
0xf9f08b,
-0x0aadb0,
-0x4fdc61,
-0x4b98d9,
-0x989408,
-0x3a6068,
-0xe12888,
-0x0ec210,
-0xfa8240,
-0x14e61b,
-0x022f7c,
-0xfcf624,
-0x02f50c,
-0xfd8f38,
-0x7356ab,
-0xb24bfb,
-0x300053,
-0xe4f083,
-0x0db28b,
+0x0e2e23,
+0xe33ce3,
+0x348833,
+0xa80de3,
+0x022008,
+0xfcf654,
+0x03fc0c,
+0xfb4d68,
+0x04b6b0,
+0xfcaf74,
+0xdcf75b,
+0x0875d0,
+0xe88c00,
+0x334af8,
+0x9a9170,
+0x53f3c9,
+0x498425,
+0x07d850,
0xfa0193,
-0x0e5198,
-0x55cb8d,
-0x427b21,
-0x9968b8,
-0x3f50c0,
-0xdb27e8,
-0x143b08,
-0xf604a8,
-0x03bf5c,
-0xef1dc3,
-0xa7922b,
-0x7977cb,
-0x8ca91b,
-0x5c4373,
-0xbe654b,
-0x2a32fb,
-0xe76cb3,
-0x0cc843,
+0x0db28b,
+0xe4f083,
+0x30005b,
+0xb24bfb,
+0x7356ab,
+0xfd8f38,
+0x02f50c,
+0xfcf624,
+0x022f7c,
+0x14e623,
+0xfa8240,
+0x0ec210,
+0xe12888,
+0x3a6068,
+0x989408,
+0x4b98d9,
+0x4fdc61,
+0x0aadb0,
0xfa47fb,
-0x12b270,
-0x5b537d,
-0x716ee8,
-0x9cd140,
-0x423000,
-0xd68e40,
-0x18d298,
-0xf20c30,
-0x06e2f8,
-0xfd6ac0,
-0x0eee5b,
-0x3575db,
-0xb6e5bb,
-0x4398ab,
-0xcbda13,
-0x236a1b,
-0xea894b,
-0x0b83a3,
+0x0cc843,
+0xe76cb3,
+0x2a3303,
+0xbe6543,
+0x5c437b,
+0x8ca913,
+0x7977d3,
+0xa7922b,
+0xef1dc3,
+0x03bf5c,
+0xf604a8,
+0x143b08,
+0xdb27e8,
+0x3f50c0,
+0x9968b8,
+0x427b21,
+0x55cb8d,
+0x0e5198,
0xfaba2b,
-0x17d078,
-0x606a75,
-0x5cd070,
-0xa2a0d0,
-0x4306e0,
-0xd365f8,
-0x1c7720,
-0xeeab88,
-0x09ae08,
-0xfb4778,
-0x7127a3,
-0xf2fbcb,
-0xe1581b,
-0x2a1533,
-0xda3733,
-0x1be75b,
-0xee2313,
-0x09f65b,
+0x0b83a3,
+0xea894b,
+0x236a23,
+0xcbda13,
+0x4398b3,
+0xb6e5bb,
+0x3575db,
+0x0eee5b,
+0xfd6ac0,
+0x06e2f8,
+0xf20c30,
+0x18d298,
+0xd68e40,
+0x423000,
+0x9cd148,
+0x716ee8,
+0x5b537d,
+0x12b270,
0xfb4feb,
-0x1db640,
-0x64f695,
-0x4768e0,
-0xaaa7f0,
-0x41db98,
-0xd1bd70,
-0x1f1310,
-0xebf900,
-0x0c0d48,
-0xf961f0,
-0x032d94,
-0xb409ab,
-0x0aabc3,
-0x108f73,
-0xe8fccb,
-0x13f29b,
-0xf2141b,
-0x08330b,
+0x09f65b,
+0xee2313,
+0x1be763,
+0xda372b,
+0x2a1533,
+0xe15813,
+0xf2fbd3,
+0x7127a3,
+0xfb4778,
+0x09ae08,
+0xeeab88,
+0x1c7728,
+0xd365f8,
+0x4306e0,
+0xa2a0d0,
+0x5cd070,
+0x606a75,
+0x17d078,
0xfc00bb,
-0x2477b8,
-0x68d739,
-0x318e40,
-0xb4aec0,
-0x3ebd10,
-0xd19bf0,
-0x2095b8,
-0xea0778,
-0x0def88,
-0xf7c838,
-0x046be0,
-0xfdea24,
-0x319613,
-0xf7da9b,
-0xf7ab83,
-0x0bd423,
-0xf635fb,
-0x064ca3,
+0x08330b,
+0xf2141b,
+0x13f29b,
+0xe8fcc3,
+0x108f73,
+0x0aabc3,
+0xb409ab,
+0x032d94,
+0xf961f0,
+0x0c0d48,
+0xebf900,
+0x1f1310,
+0xd1bd70,
+0x41db98,
+0xaaa7f0,
+0x4768e0,
+0x64f695,
+0x1db640,
0xfcc40b,
-0x2c29d8,
-0x6be82d,
-0x1ba3e0,
-0xc06ee8,
-0x39c7a8,
-0xd2fe70,
-0x20f5c0,
-0xe8e4e8,
-0x0f46d0,
-0xf68680,
-0x0575e0,
-0xfd2110,
-0x54da23,
-0xe0c55b,
-0x05c47b,
-0x03d513,
-0xfa6163,
-0x0456bb,
+0x064cab,
+0xf635fb,
+0x0bd423,
+0xf7ab83,
+0xf7da9b,
+0x319613,
+0xfdea24,
+0x046be0,
+0xf7c838,
+0x0def88,
+0xea0778,
+0x2095b8,
+0xd19bf0,
+0x3ebd10,
+0xb4aec0,
+0x318e40,
+0x68d739,
+0x2477b8,
0xfd9103,
-0x34dcb8,
-0x6e0619,
-0x0617a0,
-0xcd9208,
-0x3327e0,
-0xd5d488,
-0x2033b8,
-0xe89830,
-0x1009d8,
-0xf5a608,
-0x064398,
-0xfc7b10,
-0x735b3b,
-0xcc0f3b,
-0x12cf0b,
-0xfc3c73,
-0xfe6f83,
-0x0264b3,
+0x0456bb,
+0xfa6163,
+0x03d51b,
+0x05c47b,
+0xe0c55b,
+0x54da23,
+0xfd2110,
+0x0575e0,
+0xf68680,
+0x0f46d0,
+0xe8e4e8,
+0x20f5c0,
+0xd2fe70,
+0x39c7a8,
+0xc06ee8,
+0x1ba3e0,
+0x6be82d,
+0x2c29d8,
0xfe5ef3,
-0x3ea030,
-0x6f129d,
-0xf14c40,
-0xdbbf58,
-0x2b1358,
-0xda0390,
-0x1e5960,
-0xe92088,
-0x1034f8,
-0xf52c00,
-0x06cfe8,
-0xfbfc98,
-0x023104,
-0xba501b,
-0x1e683b,
-0xf5460b,
-0x023efb,
-0x00878b,
+0x0264b3,
+0xfe6f83,
+0xfc3c73,
+0x12cf0b,
+0xcc0f3b,
+0x735b43,
+0xfc7b10,
+0x064398,
+0xf5a608,
+0x1009d8,
+0xe89830,
+0x2033b8,
+0xd5d488,
+0x3327e0,
+0xcd9208,
+0x0617a0,
+0x6e0619,
+0x34dcb8,
0xff2633,
-0x497dd8,
-0x6ef2a5,
-0xdda780,
-0xea95d0,
-0x21ca50,
-0xdf6710,
-0x1b7880,
-0xea7720,
-0x0fc900,
-0xf51a98,
-0x071778,
-0xfba8d8,
-0x027b84,
-0xac06cb,
-0x283a63,
-0xef271b,
-0x05b193,
-0xfeceb3,
+0x00878b,
+0x023efb,
+0xf54613,
+0x1e683b,
+0xba501b,
+0x023104,
+0xfbfc98,
+0x06cfe8,
+0xf52c00,
+0x1034f8,
+0xe92088,
+0x1e5960,
+0xda0390,
+0x2b1358,
+0xdbbf58,
+0xf14c40,
+0x6f129d,
+0x3ea030,
0xffdfeb,
-0x5561e0,
-0x6d93e5,
-0xcbaf78,
-0xf99118,
-0x17aaa0,
-0xe5c408,
-0x17b2e0,
-0xec89f0,
-0x0ecde0,
-0xf56fc8,
-0x071978,
-0xfb81d8,
-0x02aad0,
-0xa1a46b,
-0x2ff333,
-0xea151b,
-0x08a803,
-0xfd4a6b,
+0xfeceb3,
+0x05b193,
+0xef271b,
+0x283a63,
+0xac06cb,
+0x027b84,
+0xfba8d8,
+0x071778,
+0xf51a98,
+0x0fc900,
+0xea7720,
+0x1b7880,
+0xdf6710,
+0x21ca50,
+0xea95d0,
+0xdda780,
+0x6ef2a5,
+0x497dd8,
0x000003,
+0xfd4a6b,
+0x08a803,
+0xea151b,
+0x2ff333,
+0xa1a463,
+0x02aad0,
+0xfb81d8,
+0x071978,
+0xf56fc8,
+0x0ecde0,
+0xec89f0,
+0x17b2e0,
+0xe5c408,
+0x17aaa0,
+0xf99118,
+0xcbaf78,
+0x6d93e5,
+0x5561e0,
0x000020,
0x3fffe0,
0x000020,
0x3fffe0,
-0x01b16b,
-0xf855f3,
-0x14740b,
-0xd40cc3,
-0x539323,
-0xfdafb8,
-0x03fef8,
-0xf8cbc0,
-0x107398,
-0x7f26c5,
-0xf19bc0,
-0x06a660,
-0xfc4508,
-0x0228bc,
-0xb2821b,
-0x284343,
-0xeda3d3,
0x069cf3,
-0x03c6eb,
-0xefdbfb,
-0x2a4a93,
-0xa5ff43,
-0x02a8ac,
-0xfb4da0,
-0x081d20,
-0xf146b8,
-0x22b568,
-0x7ca649,
-0xe57730,
-0x0c8b38,
-0xf8ede8,
-0x041728,
-0xfdb6d0,
-0x4b880b,
-0xddec9b,
+0xeda3d3,
+0x284343,
+0xb2821b,
+0x0228bc,
+0xfc4508,
+0x06a660,
+0xf19bc0,
+0x7f26c5,
+0x107398,
+0xf8cbc0,
+0x03fef8,
+0xfdafb8,
+0x539323,
+0xd40cc3,
+0x14740b,
+0xf855f3,
+0x01b16b,
0x0c0373,
-0x06309b,
-0xe6e21b,
-0x40ab93,
-0xfdde98,
-0x040178,
-0xf8f1a0,
-0x0c31f8,
-0xe9b5b8,
-0x367598,
-0x788dfd,
-0xdbb070,
-0x1185c8,
-0xf61488,
-0x05bc08,
-0xfcce9c,
-0x68d11b,
-0xd13c0b,
+0xddec9b,
+0x4b880b,
+0xfdb6d0,
+0x041728,
+0xf8ede8,
+0x0c8b38,
+0xe57730,
+0x7ca649,
+0x22b568,
+0xf146b8,
+0x081d20,
+0xfb4da0,
+0x02a8ac,
+0xa5ff43,
+0x2a4a93,
+0xefdbfb,
+0x03c6eb,
0x101e33,
-0x08d62b,
-0xddc993,
-0x56a233,
-0xfd2bf0,
-0x054a20,
-0xf6b500,
-0x1012a8,
-0xe26390,
-0x4b56d0,
-0x72f70d,
-0xd45408,
-0x157878,
-0xf3cc50,
-0x070c10,
-0xfc1754,
-0x7f746f,
-0xc7c91b,
+0xd13c0b,
+0x68d11b,
+0xfcce9c,
+0x05bc08,
+0xf61488,
+0x1185c8,
+0xdbb070,
+0x788dfd,
+0x367598,
+0xe9b5b8,
+0x0c31f8,
+0xf8f1a0,
+0x040178,
+0xfdde98,
+0x40ab93,
+0xe6e21b,
+0x06309b,
0x12ea3b,
-0x0b96fb,
-0xd501e3,
-0x6b2573,
-0xfc8844,
-0x067398,
-0xf4b188,
-0x139340,
-0xdb9f08,
-0x60f058,
-0x6c0395,
-0xcf5d50,
-0x185148,
-0xf221f8,
-0x07fff0,
-0xfb9490,
-0x023c70,
-0xc1a1c3,
+0xc7c91b,
+0x7f746f,
+0xfc1754,
+0x070c10,
+0xf3cc50,
+0x157878,
+0xd45408,
+0x72f70d,
+0x4b56d0,
+0xe26390,
+0x1012a8,
+0xf6b500,
+0x054a20,
+0xfd2bf0,
+0x56a233,
+0xddc993,
+0x08d62b,
0x147503,
-0x0e4b13,
-0xcd04b3,
-0x7d228f,
-0xfbfbf8,
-0x076f18,
-0xf30060,
-0x1688a8,
-0xd5b880,
-0x76d0d4,
-0x63ddc5,
-0xccb738,
-0x1a0988,
-0xf11b68,
-0x089470,
-0xfb4790,
-0x025f04,
-0xbeae3b,
+0xc1a1c3,
+0x023c70,
+0xfb9490,
+0x07fff0,
+0xf221f8,
+0x185148,
+0xcf5d50,
+0x6c0395,
+0x60f058,
+0xdb9f08,
+0x139340,
+0xf4b188,
+0x067398,
+0xfc8844,
+0x6b2573,
+0xd501e3,
+0x0b96fb,
0x14d9d3,
-0x10c49b,
-0xc650c3,
-0x022e24,
-0xfb8f00,
-0x082ea8,
-0xf1b920,
-0x18ca30,
-0xd0ff50,
-0x4640a1,
-0x5ab67d,
-0xcc3da8,
-0x1aa578,
-0xf0b7e8,
-0x08ca48,
-0xfb2f48,
-0x0266a0,
-0xbeb5b3,
+0xbeae3b,
+0x025f04,
+0xfb4790,
+0x089470,
+0xf11b68,
+0x1a0988,
+0xccb738,
+0x63ddc5,
+0x76d0d4,
+0xd5b880,
+0x1688a8,
+0xf30060,
+0x076f18,
+0xfbfbf8,
+0x7d228f,
+0xcd04b3,
+0x0e4b13,
0x143ecb,
+0xbeb5b3,
+0x0266a0,
+0xfb2f48,
+0x08ca48,
+0xf0b7e8,
+0x1aa578,
+0xcc3da8,
+0x5ab67d,
+0x4640a1,
+0xd0ff50,
+0x18ca30,
+0xf1b920,
+0x082ea8,
+0xfb8f00,
+0x022e24,
+0xc650c3,
+0x10c49b,
0x12d1ab,
0xc1642b,
0x02555c,
@@ -837,132 +836,132 @@
0x02555c,
0xc1642b,
0x12d1ab,
-0x143ecb,
-0xbeb5b3,
-0x0266a0,
-0xfb2f48,
-0x08ca48,
-0xf0b7e8,
-0x1aa578,
-0xcc3da8,
-0x5ab67d,
-0x4640a1,
-0xd0ff50,
-0x18ca30,
-0xf1b920,
-0x082ea8,
-0xfb8f00,
-0x022e24,
-0xc650c3,
0x10c49b,
-0x14d9d3,
-0xbeae3b,
-0x025f04,
-0xfb4790,
-0x089470,
-0xf11b68,
-0x1a0988,
-0xccb738,
-0x63ddc5,
-0x76d0d4,
-0xd5b880,
-0x1688a8,
-0xf30060,
-0x076f18,
-0xfbfbf8,
-0x7d228f,
-0xcd04b3,
+0xc650c3,
+0x022e24,
+0xfb8f00,
+0x082ea8,
+0xf1b920,
+0x18ca30,
+0xd0ff50,
+0x4640a1,
+0x5ab67d,
+0xcc3da8,
+0x1aa578,
+0xf0b7e8,
+0x08ca48,
+0xfb2f48,
+0x0266a0,
+0xbeb5b3,
+0x143ecb,
0x0e4b13,
-0x147503,
-0xc1a1c3,
-0x023c70,
-0xfb9490,
-0x07fff0,
-0xf221f8,
-0x185148,
-0xcf5d50,
-0x6c0395,
-0x60f058,
-0xdb9f08,
-0x139340,
-0xf4b188,
-0x067398,
-0xfc8844,
-0x6b2573,
-0xd501e3,
+0xcd04b3,
+0x7d228f,
+0xfbfbf8,
+0x076f18,
+0xf30060,
+0x1688a8,
+0xd5b880,
+0x76d0d4,
+0x63ddc5,
+0xccb738,
+0x1a0988,
+0xf11b68,
+0x089470,
+0xfb4790,
+0x025f04,
+0xbeae3b,
+0x14d9d3,
0x0b96fb,
-0x12ea3b,
-0xc7c91b,
-0x7f746f,
-0xfc1754,
-0x070c10,
-0xf3cc50,
-0x157878,
-0xd45408,
-0x72f70d,
-0x4b56d0,
-0xe26390,
-0x1012a8,
-0xf6b500,
-0x054a20,
-0xfd2bf0,
-0x56a233,
-0xddc993,
+0xd501e3,
+0x6b2573,
+0xfc8844,
+0x067398,
+0xf4b188,
+0x139340,
+0xdb9f08,
+0x60f058,
+0x6c0395,
+0xcf5d50,
+0x185148,
+0xf221f8,
+0x07fff0,
+0xfb9490,
+0x023c70,
+0xc1a1c3,
+0x147503,
0x08d62b,
-0x101e33,
-0xd13c0b,
-0x68d11b,
-0xfcce9c,
-0x05bc08,
-0xf61488,
-0x1185c8,
-0xdbb070,
-0x788dfd,
-0x367598,
-0xe9b5b8,
-0x0c31f8,
-0xf8f1a0,
-0x040178,
-0xfdde98,
-0x40ab93,
-0xe6e21b,
+0xddc993,
+0x56a233,
+0xfd2bf0,
+0x054a20,
+0xf6b500,
+0x1012a8,
+0xe26390,
+0x4b56d0,
+0x72f70d,
+0xd45408,
+0x157878,
+0xf3cc50,
+0x070c10,
+0xfc1754,
+0x7f746f,
+0xc7c91b,
+0x12ea3b,
0x06309b,
-0x0c0373,
-0xddec9b,
-0x4b880b,
-0xfdb6d0,
-0x041728,
-0xf8ede8,
-0x0c8b38,
-0xe57730,
-0x7ca649,
-0x22b568,
-0xf146b8,
-0x081d20,
-0xfb4da0,
-0x02a8ac,
-0xa5ff43,
-0x2a4a93,
-0xefdbfb,
+0xe6e21b,
+0x40ab93,
+0xfdde98,
+0x040178,
+0xf8f1a0,
+0x0c31f8,
+0xe9b5b8,
+0x367598,
+0x788dfd,
+0xdbb070,
+0x1185c8,
+0xf61488,
+0x05bc08,
+0xfcce9c,
+0x68d11b,
+0xd13c0b,
+0x101e33,
0x03c6eb,
-0x069cf3,
-0xeda3d3,
-0x284343,
-0xb2821b,
-0x0228bc,
-0xfc4508,
-0x06a660,
-0xf19bc0,
-0x7f26c5,
-0x107398,
-0xf8cbc0,
-0x03fef8,
-0xfdafb8,
-0x539323,
-0xd40cc3,
-0x14740b,
-0xf855f3,
+0xefdbfb,
+0x2a4a93,
+0xa5ff43,
+0x02a8ac,
+0xfb4da0,
+0x081d20,
+0xf146b8,
+0x22b568,
+0x7ca649,
+0xe57730,
+0x0c8b38,
+0xf8ede8,
+0x041728,
+0xfdb6d0,
+0x4b880b,
+0xddec9b,
+0x0c0373,
0x01b16b,
+0xf855f3,
+0x14740b,
+0xd40cc3,
+0x539323,
+0xfdafb8,
+0x03fef8,
+0xf8cbc0,
+0x107398,
+0x7f26c5,
+0xf19bc0,
+0x06a660,
+0xfc4508,
+0x0228bc,
+0xb2821b,
+0x284343,
+0xeda3d3,
+0x069cf3,
0x000003,
0x000003,
0x000003,
@@ -971,8 +970,8 @@
0x000003,
0x000003,
0x000003,
-0x040002,
0x000003,
+0x040002,
0x000003,
0x000003,
0x000003,
@@ -1058,59 +1057,59 @@
0x000000,
0x000000,
0x000000,
-0x066c0c,
-0x02f7d4,
-0x08e904,
-0x08e904,
-0x02f7d4,
-0x066c0c,
-0x3fed7c,
-0xfad3ae,
-0x0bd74e,
-0xf0b986,
-0x0b091e,
-0x268848,
-0x11cef8,
-0x357618,
-0x357618,
-0x11cef8,
-0x268848,
-0x3fed7c,
-0xfad3ae,
-0x0bd74e,
-0xf0b986,
-0x0b091e,
-0x7e553d,
-0xf81aae,
-0x7e553d,
-0x82cfe5,
-0x07e942,
-0x024414,
-0xfbd614,
-0x029540,
-0x029540,
-0xfbd614,
-0x024414,
-0x42e57d,
-0xf4c9ee,
-0x18b80e,
-0xe3f162,
-0x107002,
-0x0d9878,
-0xe70478,
-0x0f7f80,
-0x0f7f80,
-0xe70478,
-0x0d9878,
-0x42e57d,
-0xf4c9ee,
-0x18b80e,
-0xe3f162,
-0x107002,
-0x8f5ee9,
-0x0a8f1e,
-0xf570e6,
-0x70a119,
+0x0695c4,
+0x7cdb3b,
+0x0870d8,
+0x0870d8,
+0x7cdb3b,
+0x0695c4,
+0x4470ec,
+0xfa825a,
+0x0c7322,
+0xf02316,
+0x0b4d9e,
+0x13c14c,
+0x05da48,
+0x195288,
+0x195288,
+0x05da48,
+0x13c14c,
+0x4470ec,
+0xfa825a,
+0x0c7322,
+0xf02316,
+0x0b4d9e,
+0x7de295,
+0xf821da,
+0x7de295,
+0x8431e5,
+0x07dde2,
+0x0271f8,
+0xfb6e08,
+0x02d334,
+0x02d334,
+0xfb6e08,
+0x0271f8,
+0x421c2d,
+0xf4e40e,
+0x188dd6,
+0xe410d6,
+0x1066c6,
+0x0eabd0,
+0xe49430,
+0x10f338,
+0x10f338,
+0xe49430,
+0x0eabd0,
+0x421c2d,
+0xf4e40e,
+0x188dd6,
+0xe410d6,
+0x1066c6,
+0x8e3ba9,
+0x0aaa6a,
+0xf5559a,
+0x71c459,
0x651dd9,
0xf5c6b6,
0x0b0ede,
@@ -1281,14 +1280,14 @@
0x18a312,
0xe445b2,
0x10419e,
-0x0b778c,
-0x2223a0,
-0x449ef0,
-0x5cd51c,
-0x5cd51c,
-0x449ef0,
-0x2223a0,
-0x0b778c,
+0x0b68e0,
+0x21f7f0,
+0x44471c,
+0x5c5e48,
+0x5c5e48,
+0x44471c,
+0x21f7f0,
+0x0b68e0,
0x20ff38,
0xb24b3d,
0x062d86,
@@ -1296,24 +1295,27 @@
0x0d3f5a,
0xf2ea1a,
0x075f92,
-0xc7b44f,
-0xfd5ef4,
-0xfb5588,
-0xfb3e38,
-0xfdee64,
-0x02119c,
-0x04c1c8,
-0x04aa78,
-0x02a10c,
-0x384bb3,
-0x1d48f4,
-0x970ef1,
-0x0bbdae,
-0xe4af72,
-0x2d79c2,
-0xc7f1fa,
-0x33c2ca,
-0xdd52be,
-0x0fe02e,
+0xc1248b,
+0xfd1080,
+0xfaca4c,
+0xfab048,
+0xfdb0ac,
+0x024f54,
+0x054fb8,
+0x0535b4,
+0x02ef80,
+0x3edb7b,
+0x1d92ec,
+0x962b59,
+0x0bd422,
+0xe48132,
+0x2dbdc2,
+0xc7a94a,
+0x33fbe6,
+0xdd3502,
+0x0fea26,
0x3c0001,
0x080002,
+0x000000,
+0x040002,
+0x040002,
diff --git a/sound/soc/omap/abe/C_ABE_FW.PM b/sound/soc/omap/abe/C_ABE_FW.PM
index 9ee53142d224..27e14d1c7b42 100644
--- a/sound/soc/omap/abe/C_ABE_FW.PM
+++ b/sound/soc/omap/abe/C_ABE_FW.PM
@@ -3,7 +3,7 @@
0x08200000,
0x08200000,
0x07800000,
-0x1602cfce,
+0x1602d2ce,
0x014000e0,
0x014000e1,
0x014000e2,
@@ -22,31 +22,31 @@
0x014000ef,
0x144000e4,
0x9e000000,
-0x0a202c30,
+0x0a202d80,
0x9e000040,
-0x0a202c30,
+0x0a202d80,
0x9e000080,
-0x0a202c30,
+0x0a202d80,
0x9e0000c0,
-0x0a202c30,
+0x0a202d80,
0x9e080000,
-0x0a202c30,
+0x0a202d80,
0x9e080100,
-0x0a202c30,
+0x0a202d80,
0x9e080200,
-0x0a202c30,
+0x0a202d80,
0x9e080300,
-0x0a202c30,
+0x0a202d80,
0x9e080400,
-0x0a202c30,
+0x0a202d80,
0x9e080500,
-0x0a202c30,
+0x0a202d80,
0x9e080600,
-0x0a202c30,
+0x0a202d80,
0x9e080700,
-0x0a202c30,
+0x0a202d80,
0x9c050800,
-0x0a202c30,
+0x0a202d80,
0x16000010,
0x16000001,
0x17000102,
@@ -101,11 +101,11 @@
0x9d01b260,
0x9d02bc70,
0x08200000,
-0x1602c548,
+0x1602c888,
0x00000089,
-0x1602c4ea,
+0x1602c82a,
0x400000ac,
-0x1602c486,
+0x1602c7c6,
0x40000066,
0x0600000c,
0x0400069b,
@@ -113,18 +113,18 @@
0x1600274d,
0x0a200480,
0x4000009c,
-0x1602c4ce,
+0x1602c80e,
0x410000ec,
0x0600000c,
0x1600274d,
0x0a800890,
-0x1602e703,
+0x1602ea03,
0x00000030,
0x00000231,
0x00000435,
0x04800211,
0x04400511,
-0x1602c604,
+0x1602c944,
0x0000004e,
0x0300010e,
0x04800211,
@@ -139,11 +139,11 @@
0x41000089,
0x05c00b90,
0x4ac00720,
-0x1602c4a5,
+0x1602c7e5,
0x40000055,
-0x1602c584,
+0x1602c8c4,
0x40000047,
-0x1602c60e,
+0x1602c94e,
0x04000599,
0x400000e1,
0x04800177,
@@ -153,9 +153,9 @@
0x410000e1,
0x06000001,
0x4aa00a40,
-0x1602c5cd,
+0x1602c90d,
0x400000d6,
-0x16022b49,
+0x16022e89,
0x400002d7,
0x04800166,
0x41000089,
@@ -163,10 +163,10 @@
0x010000d6,
0x010002d7,
0x1600c005,
-0x1602cf41,
+0x1602d241,
0x16000002,
0x40000011,
-0x1602cf00,
+0x1602d200,
0x9e0e0550,
0xdd140530,
0x160ffff4,
@@ -206,7 +206,7 @@
0x07800000,
0x07800000,
0x07800000,
-0x9d188108,
+0x9d188148,
0x98800c90,
0x08200000,
0x9f158048,
@@ -226,7 +226,7 @@
0x9d1e8148,
0x98800da0,
0x08200000,
-0x9c0c0018,
+0x9f158018,
0x9f040010,
0x07800000,
0x9f03fc10,
@@ -269,7 +269,7 @@
0x9d0c8118,
0x98801070,
0x08200000,
-0x9c1e0000,
+0x9c1e0008,
0x9f1d0010,
0x07800000,
0x07800000,
@@ -496,13 +496,13 @@
0x413ffefe,
0x16000040,
0x9c010910,
-0x0a203270,
+0x0a2033c0,
0x14400040,
0x9c030810,
0x16000171,
0x9c009f30,
0x9c019220,
-0x0a202d70,
+0x0a202ec0,
0x9c009830,
0x003ffefe,
0x048ffeff,
@@ -545,46 +545,66 @@
0x160000f0,
0x9c100400,
0x9c100480,
-0x9c1d06c8,
+0x9c1d06c4,
0x9f085030,
-0x9c180678,
+0x9c180674,
0x9c180650,
0x058001a0,
-0x0aa02540,
+0x0aa02680,
0x04800144,
0x04400044,
-0x07800000,
+0x160ffff9,
0x05800040,
-0x9d180658,
-0x0a802350,
-0x9d040008,
-0x9e090000,
-0x07800000,
-0x07800000,
-0x9e0d0500,
-0x0a002420,
+0x9d044690,
+0x0aa023d0,
0x05800160,
-0x0ac023d0,
+0x0ac02370,
0x9e090000,
0x07800000,
0x07800000,
0x9e0d0500,
0x9d040508,
-0x0a002420,
+0x0a002540,
0x9d040008,
0x9e090000,
0x07800000,
0x9d040008,
0x9e0d0500,
+0x0a002540,
+0x9d040008,
+0x9e090000,
+0x07800000,
+0x07800000,
+0x9e0d0500,
+0x1280010a,
+0x048001a9,
+0x05800940,
+0x0aa02540,
0x05800160,
-0x0ac02480,
-0x0480014b,
-0x044000bb,
-0x4a0024b0,
-0x1440004a,
+0x00000628,
+0x0ac024f0,
+0x05800180,
+0x0ae02540,
+0x160ffff6,
+0x160ffff7,
+0x04a00144,
+0x0a002540,
+0x05800810,
+0x0ae02540,
+0x16000016,
+0x16000007,
+0x04a00144,
+0x05800160,
+0x9d180674,
+0x9d180654,
+0x0ac025c0,
0x0420040a,
0x04a001ab,
+0x4a0025f0,
+0x044000bb,
+0x0480014b,
0x044000bb,
+0x1440004a,
0x120001aa,
0x42000a38,
0x120001bb,
@@ -592,66 +612,67 @@
0x12000288,
0x12000299,
0x9e0e8280,
-0xca002650,
+0xca002790,
0x1e0e8390,
-0xdd040608,
+0xdd040604,
0x05800160,
-0x0ac025f0,
+0x0ac02730,
0x9d040008,
0x9e090000,
0x07800000,
0x05800040,
0x9e0d0500,
-0x0aa02650,
+0x0aa02790,
0x9d040508,
-0x0a002650,
+0x0a002790,
0x9e090000,
0x05800040,
0x9d040008,
0x9e0d0500,
-0x0a802650,
+0x0a802790,
0x9d040508,
-0x9c1d06c8,
-0xdc1d0648,
+0x9c1d06c4,
+0xdc1d0644,
0x1f0400b0,
0x9c100700,
-0xdc1d06c8,
+0xdc1d06c4,
0x1f040010,
0x9d108480,
0x9f0940b0,
0x9d108700,
0x00000cc9,
0x06000008,
-0x0aa02840,
-0xdc1d0688,
+0x0aa02990,
+0xdc1d0684,
0x14400005,
-0x9c1d0608,
+0xdc1d0604,
+0x160fff8a,
0x04a00255,
0xdd108480,
0x16000017,
0xdd108700,
0x160ffff8,
0x05800540,
-0x0aa02800,
+0x0aa02950,
0x05800160,
-0x0ac027f0,
+0x0ac02940,
0x01000027,
-0x0a002800,
+0x0a002950,
0x01000028,
0x9e088000,
0xa0054dba,
0xa005c81a,
-0x0a0028e0,
-0xdd040608,
-0x1e088000,
+0x0a002a20,
+0x9e088000,
0xa0054dba,
0xa005c81a,
+0x160fffaa,
0x9f1f80b0,
0x9f1e0010,
0x9f040020,
0x9f040070,
0x9f020810,
-0x9d040608,
+0x9d0446a0,
0x9e0f0070,
0x9d0c8118,
0x98802210,
@@ -673,7 +694,7 @@
0x9d0c82b8,
0x07800000,
0x9d0c8318,
-0x988029d0,
+0x98802b20,
0x07800000,
0xa00602ba,
0x9c0c0118,
@@ -687,9 +708,9 @@
0x9c1d0548,
0x9f093860,
0x06000006,
-0x0aa02b50,
+0x0aa02ca0,
0x06000017,
-0x0aa02b50,
+0x0aa02ca0,
0x01800025,
0x9c0c0118,
0x9c0c01b0,
@@ -700,9 +721,9 @@
0x9c1d0548,
0x9f083860,
0x06000006,
-0x0aa02c20,
+0x0aa02d70,
0x06000017,
-0x0aa02c20,
+0x0aa02d70,
0x01800125,
0x08200000,
0x07800000,
@@ -736,7 +757,7 @@
0x9d0c8318,
0x9d0c81b8,
0x9d0c02b8,
-0x98802dc0,
+0x98802f10,
0x07800000,
0xa00602ba,
0x07800000,
@@ -761,7 +782,7 @@
0x07800000,
0x9d0c8318,
0x9d0c02b8,
-0x98802ef0,
+0x98803040,
0x9c0c0018,
0xa00602ba,
0x07800000,
@@ -786,7 +807,7 @@
0x9d0c8298,
0x9d0c8338,
0x9d0c8198,
-0x988030d0,
+0x98803220,
0x07800000,
0xa00602ba,
0xa006821a,
@@ -801,9 +822,9 @@
0xdd040008,
0x06000001,
0x04a00111,
-0x0aa031f0,
+0x0aa03340,
0x9d0c8118,
-0x988031d0,
+0x98803320,
0x08200000,
0x9c0c02b0,
0x9c0c0018,
@@ -813,8 +834,8 @@
0xdd0c81b8,
0x06000005,
0x04a00155,
-0x0aa032c0,
-0x98803280,
+0x0aa03410,
+0x988033d0,
0x08200000,
0x9f160028,
0x9f168298,
@@ -824,7 +845,7 @@
0x07800000,
0x9f160028,
0x9f168298,
-0x98803360,
+0x988034b0,
0x9d0c8128,
0x08200000,
0x9f160020,
@@ -832,14 +853,14 @@
0x07800000,
0x9d0c8108,
0x9d0c8258,
-0x988033d0,
+0x98803520,
0x08200000,
0x9f160010,
0x9f168068,
0x07800000,
0x07800000,
0x9d0c8128,
-0x98803440,
+0x98803590,
0x08200000,
0x9d008810,
0x1280020d,
@@ -863,7 +884,7 @@
0x9d0c87b8,
0x9d1082c8,
0x9d108288,
-0x98803510,
+0x98803660,
0x08200000,
0x00000003,
0x00000205,
@@ -876,21 +897,21 @@
0x07800000,
0x07800000,
0x9d0c8128,
-0x98803690,
+0x988037e0,
0x08200000,
0x010002fe,
0x00801605,
-0x16002a63,
+0x16002a83,
0x12000155,
0x0200035e,
0x0b200000,
0x00800405,
-0x16002a63,
+0x16002a83,
0x12000155,
0x0200035e,
0x0b200000,
0x00801705,
-0x16002a63,
+0x16002a83,
0x12000155,
0x0200035e,
0x0b200000,
@@ -899,68 +920,6 @@
0x08200000,
0x16000181,
0x04000101,
-0x40000215,
-0x048002ff,
-0x00800b03,
-0x00000017,
-0x9e0e0450,
-0x06000003,
-0x16000004,
-0x0aa03990,
-0x01800354,
-0x9c01b970,
-0x00800715,
-0x16002a66,
-0x9c180404,
-0x9c180480,
-0x413ffefe,
-0x12000155,
-0x00800d0d,
-0x0200056e,
-0x9c051820,
-0x0a003a40,
-0x01800054,
-0x9c01b870,
-0x00800715,
-0x16002a66,
-0x9c180404,
-0x9c180480,
-0x413ffefe,
-0x12000155,
-0x00800d0d,
-0x0200056e,
-0x9c041920,
-0x16014946,
-0x16014987,
-0x04a001dd,
-0x9e0e0260,
-0x9e0e0370,
-0x0b200000,
-0x00800b05,
-0x0000021d,
-0x003ffefe,
-0x40000806,
-0x06000005,
-0x008007d7,
-0x00000014,
-0x4a803b50,
-0x04500273,
-0x9d03a040,
-0x0a003b60,
-0x9d03a140,
-0x40800f02,
-0x04c07f77,
-0x9e0e0560,
-0x40800a02,
-0x04500273,
-0x418007d3,
-0x16000003,
-0x048ffeff,
-0x07800000,
-0x9d140530,
-0x08200000,
-0x16000181,
-0x04000101,
0x00800b03,
0x00000212,
0x00000017,
@@ -969,7 +928,7 @@
0xdc180404,
0x06000003,
0x9c180480,
-0x0aa04000,
+0x0aa03d10,
0x9c052b20,
0x9c042820,
0x9c023970,
@@ -981,29 +940,25 @@
0x00800e04,
0x00800503,
0x05800420,
-0x17c00565,
-0x0ae03ed0,
+0x0ae03c00,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae03fc0,
+0x0ae03cf0,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae03fc0,
+0x0ae03cf0,
+0x16000006,
0x04000344,
0x05800420,
-0x0ae03ff0,
+0x0ae03cf0,
0x16000016,
0x04000344,
0x05800420,
-0x0ae03fc0,
+0x0ae03cf0,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae03fc0,
-0x14400065,
-0x010000f5,
+0x0ae03cf0,
+0x010000f6,
0x12000132,
0x04000233,
0x9e088300,
@@ -1017,11 +972,9 @@
0x17800523,
0x04000377,
0x9e0f0070,
-0x000000f5,
-0x00000602,
-0x04000522,
-0x01000602,
-0x0a004330,
+0x000000f6,
+0x01000606,
+0x0a003fd0,
0x9c042b20,
0x9c052920,
0x9c023870,
@@ -1033,30 +986,25 @@
0x160ffff6,
0x00800503,
0x05800420,
-0x17c00565,
-0x0ae04220,
+0x0ae03ee0,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae04300,
+0x0ae03fc0,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae04300,
+0x0ae03fc0,
+0x16000006,
0x04000344,
0x05800420,
-0x0ae04330,
+0x0ae03fc0,
0x16000016,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae04300,
+0x0ae03fc0,
0x04000344,
0x05800420,
-0x17c00565,
-0x0ae04300,
-0x14400065,
-0x010000f5,
+0x0ae03fc0,
+0x010000f6,
0x12000132,
0x04000233,
0x9e088300,
@@ -1069,19 +1017,17 @@
0x17800523,
0x04000377,
0x9e0f0170,
-0x000000f5,
-0x00000602,
-0x04000522,
-0x01000602,
+0x000000f6,
+0x01000606,
0x00800715,
-0x16002a66,
+0x16002a86,
0x410004fe,
0x12000155,
0x00000202,
0x00800d04,
0x0200056e,
-0x16014946,
-0x16014987,
+0x16014906,
+0x16014947,
0x0400042d,
0x04a001dd,
0x9e0e0260,
@@ -1096,7 +1042,7 @@
0x06000005,
0x40800f02,
0x04c07f77,
-0x4a804560,
+0x4a804200,
0x04500273,
0x00800a02,
0x9e088100,
@@ -1132,7 +1078,7 @@
0x07800000,
0x16000003,
0x9e0c8100,
-0x1602da06,
+0x1602dd06,
0x00000064,
0x1600003d,
0x04a00122,
@@ -1147,17 +1093,19 @@
0x9d0c810c,
0x9d0c815c,
0x9d0c81ac,
-0x98804770,
-0x0aa046f0,
+0x98804410,
+0x0aa04390,
0x9e0f0120,
0x08200000,
+0x16014906,
0x40800605,
0x048004ff,
0x413ffcf8,
0x144000d3,
0x413ffef9,
0x144000e8,
-0x16002a6e,
+0x16002a8e,
+0x9e0e0260,
0x12000155,
0x420005ee,
0x04a001dd,
@@ -1172,20 +1120,20 @@
0x04200355,
0x01000e05,
0x06000005,
-0x0aa04b30,
+0x0aa047f0,
0x40000403,
0x12000f98,
0x40800a06,
0x12800f88,
0x06000008,
-0x4a804a40,
+0x4a804700,
0x1600024d,
0x40001604,
0x04800199,
0x00001405,
0x01000e04,
0x01000c05,
-0x0a004a90,
+0x0a004750,
0x40001204,
0x04800199,
0x00001005,
@@ -1195,11 +1143,11 @@
0x16000014,
0x05c00d30,
0x9e0e8050,
-0x0a804b20,
+0x0a8047e0,
0x12000233,
0x9e0e0530,
0x9d140570,
-0x0a004b30,
+0x0a0047f0,
0x01800014,
0x003ffef9,
0x003ffcf8,
@@ -1214,20 +1162,20 @@
0x00000e04,
0x9c03a950,
0x06000004,
-0x0a804ce0,
+0x0a8049a0,
0x058004d0,
-0x0ae04cd0,
+0x0ae04990,
0x042004d2,
0x1440004d,
-0x0a204810,
+0x0a2044b0,
0x00000e04,
0x05800420,
-0x0ae04ca0,
-0x0a004ce0,
+0x0ae04960,
+0x0a0049a0,
0x1440002d,
-0x0a204810,
-0x0a004ce0,
-0x0a204810,
+0x0a2044b0,
+0x0a0049a0,
+0x0a2044b0,
0x003ffefe,
0x40800905,
0x048ffeff,
@@ -1238,15 +1186,15 @@
0x1440001d,
0x013ffaf9,
0x413ffcfa,
-0x1602c5c9,
+0x1602c909,
0x413ffefb,
-0x16020002,
+0x1601fe02,
0x00000095,
0x00000296,
0x9c018202,
0x01000025,
0x41400226,
-0x16020803,
+0x16020603,
0x04800122,
0x9e088200,
0x9e090300,
@@ -1256,19 +1204,19 @@
0x01c00127,
0x01c0012b,
0x9c018202,
-0x98804e20,
+0x98804ae0,
0x04800633,
0x04800122,
0x1440001d,
0x00000034,
0x04802833,
0x01400224,
-0x98804ee0,
-0x1602e6ca,
+0x98804ba0,
+0x1602e9ca,
0x16002102,
0x12000222,
0x408000a4,
-0x1602e9cd,
+0x1602eccd,
0x408001a5,
0x16000007,
0x9e0e0220,
@@ -1288,7 +1236,7 @@
0x408002d6,
0x04500944,
0x410000d7,
-0x1602ea0a,
+0x1602ed0a,
0x408003d9,
0x12000455,
0x410002d7,
@@ -1307,8 +1255,8 @@
0x04500944,
0x12000855,
0x04500544,
-0x1602d98a,
-0x1602d9cb,
+0x1602dc8a,
+0x1602dccb,
0x12000922,
0x04500244,
0x12000a88,
@@ -1322,28 +1270,28 @@
0x16000005,
0x16000006,
0x06000008,
-0x0aa052f0,
+0x0aa04fb0,
0x16000015,
0x000002a8,
0x06000009,
-0x0aa05330,
+0x0aa04ff0,
0x16000016,
0x000002b9,
-0x1602cd82,
+0x1602d0c2,
0x410000a8,
0x12000166,
0x410000b9,
0x04500655,
0x40800021,
-0x1602c5cd,
+0x1602c90d,
0x41800027,
0x06000004,
-0x0aa05420,
+0x0aa050e0,
0x06000005,
-0x0aa054a0,
+0x0aa05160,
0x06000001,
-0x0aa05530,
-0x0a005620,
+0x0aa051f0,
+0x0a0052e0,
0x160000a8,
0x400000d6,
0x12000c88,
@@ -1351,7 +1299,7 @@
0x07800000,
0x06000005,
0x9d180078,
-0x0a805510,
+0x0a8051d0,
0x160000c8,
0x400000d6,
0x12000c88,
@@ -1360,7 +1308,7 @@
0x07800000,
0x9d180078,
0x06000001,
-0x0a8055a0,
+0x0a805260,
0x160000d8,
0x400000d6,
0x12000c88,
@@ -1376,23 +1324,23 @@
0x9d03c890,
0x07800000,
0x9d140570,
-0x1602c641,
+0x1602c981,
0x16000013,
0x00000014,
-0x1602c602,
-0x00800041,
+0x1602c942,
+0x00000041,
0x16000005,
0x160ffff6,
0x05800510,
-0x01800045,
+0x01000045,
0x17000353,
0x17800363,
0x04800233,
0x01000023,
-0x16008b60,
+0x16008b50,
0x12000200,
-0x1602f3c1,
-0x16014983,
+0x1602f6c1,
+0x16014943,
0x9e0e0000,
0x9e0e0110,
0x9e0e0330,
@@ -1416,6 +1364,58 @@
0x003ff8f8,
0x048ff8ff,
0x08200000,
+0x00000004,
+0x00000405,
+0x00000806,
+0x00000c07,
+0x05c00540,
+0x0b800000,
+0x9e0e8040,
+0x9c180034,
+0x07800000,
+0x07800000,
+0x06000033,
+0x9e0e8220,
+0x0aa05680,
+0x9c1d0004,
+0x9c1d0044,
+0x07800000,
+0x9d0c0210,
+0x0a005730,
+0x06000023,
+0x0aa056e0,
+0x9c1d0004,
+0x9d040004,
+0x9d100200,
+0x0a005730,
+0x06000043,
+0x0aa05730,
+0x9c180024,
+0x9d040004,
+0x9d180200,
+0x04800c44,
+0x05c00740,
+0x17800644,
+0x01000004,
+0x0a0055a0,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
0x00000000,
0x00000000,
0x00000000,
diff --git a/sound/soc/omap/abe/C_ABE_FW.SM32 b/sound/soc/omap/abe/C_ABE_FW.SM32
index 6db0c1468249..34822afed7e1 100644
--- a/sound/soc/omap/abe/C_ABE_FW.SM32
+++ b/sound/soc/omap/abe/C_ABE_FW.SM32
@@ -3,297 +3,297 @@
0x00000000,
0x00000000,
0x00000000,
-0x00044A03,
+0x00044903,
0x00000000,
-0x00044D02,
+0x00044C02,
0x00000000,
-0x0006C603,
+0x0006C503,
0x00000000,
-0x00049705,
+0x00049605,
0x00000000,
-0x00049C04,
+0x00049B04,
0x00000000,
-0x0006C105,
+0x0006C005,
0x00000000,
-0x00017D0C,
+0x00017C0C,
0x00000000,
-0x0004A028,
+0x00049F28,
0x00000000,
-0x0004F028,
+0x0004EF28,
0x00000000,
-0x00074E06,
+0x00074D06,
0x00000000,
-0x00022218,
+0x00022118,
0x00000000,
-0x00013412,
+0x00013312,
0x00000000,
-0x00014612,
-0x00013100,
-0x00015624,
-0x00013212,
-0x00014412,
+0x00014512,
+0x00013000,
+0x00015524,
+0x00013112,
+0x00014312,
0x00120024,
-0x00056000,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001560E,
-0x0001590C,
-0x00016404,
-0x0001590C,
-0x00016804,
-0x00000000,
-0x00016C02,
-0x00000000,
-0x00016E02,
-0x0001650C,
-0x00017004,
-0x0001650C,
-0x00017404,
-0x00000000,
-0x0001890C,
-0x00000000,
-0x0001950C,
-0x00000000,
-0x0001710C,
-0x00000000,
-0x0001650C,
-0x00000000,
-0x0001590C,
-0x0001650C,
-0x0001710C,
-0x00000000,
-0x0001A10C,
-0x00000000,
-0x0001B90C,
-0x00000000,
-0x0001C50C,
-0x00000000,
-0x0001F50C,
-0x00020109,
-0x00020109,
-0x00000000,
-0x00017A09,
+0x00055C00,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001580C,
+0x00016304,
+0x0001580C,
+0x00016704,
+0x00000000,
+0x00016B02,
+0x00000000,
+0x00016D02,
+0x0001640C,
+0x00016F04,
+0x0001640C,
+0x00017304,
+0x00000000,
+0x0001880C,
+0x00000000,
+0x0001940C,
+0x00000000,
+0x0001700C,
+0x00000000,
+0x0001640C,
+0x00000000,
+0x0001580C,
+0x0001640C,
+0x0001700C,
+0x00000000,
+0x0001A00C,
+0x00000000,
+0x0001B80C,
+0x00000000,
+0x0001C40C,
+0x00000000,
+0x0001F40C,
+0x00020009,
+0x00020009,
+0x00000000,
+0x00017909,
0x000B0009,
0x00000000,
0x00000000,
-0x0001AD0C,
+0x0001AC0C,
0x00000000,
-0x0006C90C,
+0x0006C80C,
0x00000000,
-0x0006D50C,
+0x0006D40C,
0x00000000,
-0x0006E10C,
+0x0006E00C,
0x00000000,
-0x0006ED0C,
+0x0006EC0C,
0x00000000,
-0x00023A0C,
-0x00022218,
-0x00028E0C,
-0x00022218,
-0x00029A0C,
+0x0002390C,
+0x00022118,
+0x00028D0C,
+0x00022118,
+0x0002990C,
0x00000000,
-0x0002460C,
-0x00022200,
-0x0002A60C,
-0x00022200,
-0x0002B20C,
+0x0002450C,
+0x00022100,
+0x0002A50C,
+0x00022100,
+0x0002B10C,
0x00000000,
-0x0002520C,
-0x00022218,
-0x0002BE0C,
-0x00022218,
-0x0002CA0C,
+0x0002510C,
+0x00022118,
+0x0002BD0C,
+0x00022118,
+0x0002C90C,
0x00000000,
-0x0008920C,
-0x00022218,
-0x00089E0C,
-0x00022218,
-0x0008AA0C,
-0x00022218,
-0x0002D60C,
-0x00022218,
-0x0002E20C,
+0x0008910C,
+0x00022118,
+0x00089D0C,
+0x00022118,
+0x0008A90C,
+0x00022118,
+0x0002D50C,
+0x00022118,
+0x0002E10C,
0x00000000,
-0x00025E0C,
-0x00022218,
-0x0002EE0C,
-0x00022218,
-0x0002FA0C,
+0x00025D0C,
+0x00022118,
+0x0002ED0C,
+0x00022118,
+0x0002F90C,
0x00000000,
-0x00026A18,
+0x00026918,
0x00000000,
-0x0002820C,
-0x00022218,
-0x0003060C,
-0x00022218,
-0x0003120C,
-0x00022218,
-0x00031E0C,
-0x00022218,
-0x00032A0C,
-0x00022218,
-0x0003360C,
-0x00022218,
-0x0003420C,
+0x0002810C,
+0x00022118,
+0x0003050C,
+0x00022118,
+0x0003110C,
+0x00022118,
+0x00031D0C,
+0x00022118,
+0x0003290C,
+0x00022118,
+0x0003350C,
+0x00022118,
+0x0003410C,
0x00000000,
-0x00034E78,
+0x00034D78,
0x00000000,
-0x0003C618,
+0x0003C518,
0x00000000,
-0x0003DE18,
+0x0003DD18,
0x00000000,
-0x0003F618,
+0x0003F518,
0x00000000,
-0x00040E18,
-0x00067C01,
+0x00040D18,
+0x00067B01,
0x00000202,
0x00000000,
-0x00043E0C,
+0x00043D0C,
0x000B0019,
0x00000000,
0x000B0009,
0x00000000,
0x00000000,
-0x00044F18,
+0x00044E18,
0x00000000,
-0x00046718,
+0x00046618,
0x00000000,
-0x00047F18,
-0x000B2DB8,
+0x00047E18,
+0x000B2DE8,
0x00000000,
-0x000B2DB4,
+0x000B2DE4,
0x00000000,
-0x000B2DA0,
+0x000B2DD0,
0x00000000,
0x00000000,
-0x0004A028,
-0x00019613,
-0x00018313,
-0x0004A028,
+0x00049F28,
+0x00028C13,
+0x00029F13,
+0x00049F28,
+0x0002B400,
0x0002B500,
-0x0002B600,
-0x000B7108,
+0x000B7D00,
0x005D0002,
-0x00219800,
+0x00217800,
0x00000000,
-0x0004C828,
-0x00019613,
-0x00018313,
-0x0004C828,
+0x0004C728,
+0x00028C13,
+0x00029F13,
+0x0004C728,
+0x0002B200,
0x0002B300,
-0x0002B400,
-0x000B7908,
+0x000B8500,
0x00620002,
-0x00214800,
+0x00212800,
0x00000000,
-0x0004C828,
+0x0004C728,
0x005D0004,
-0x00219800,
+0x00217800,
0x00620004,
-0x00214800,
+0x00212800,
0x00000000,
-0x0004C828,
+0x0004C728,
0x00000000,
-0x0004F028,
-0x0002C912,
-0x0002B712,
-0x0004F028,
+0x0004EF28,
+0x0003B212,
+0x0003C412,
+0x0004EF28,
+0x0003D600,
0x0003D700,
-0x0003D800,
-0x000B8908,
+0x000B9500,
0x006B000C,
-0x00208000,
-0x00000000,
-0x0005180C,
-0x0001B90C,
-0x0001590C,
-0x00000000,
-0x0005240C,
-0x00000000,
-0x0005300C,
-0x00022218,
-0x00053C0C,
-0x00022218,
-0x0005480C,
-0x00056D19,
-0x00056D19,
-0x00000000,
-0x00040B19,
-0x00055419,
-0x00055419,
-0x0003F219,
-0x0003D919,
-0x00000000,
-0x00043F0B,
-0x00000000,
-0x00044A0B,
-0x00000000,
-0x00045507,
-0x00000000,
-0x0004240B,
-0x00000000,
-0x00042F0B,
-0x00000000,
-0x00043A05,
-0x0005AA0B,
-0x0005AA0B,
-0x0005B507,
-0x0005B507,
-0x0005BC0B,
-0x0005BC0B,
-0x0005C705,
-0x0005C705,
-0x0005CC0B,
-0x0005CC0B,
-0x0005D707,
-0x0005D707,
-0x0005DE0B,
-0x0005DE0B,
-0x0005E905,
-0x0005E905,
-0x0005F00B,
-0x0005F00B,
-0x0005FB07,
-0x0005FB07,
-0x0006020B,
-0x0006020B,
-0x00060D05,
-0x00060D05,
-0x0006120B,
-0x0006120B,
-0x00061D07,
-0x00061D07,
-0x0006240B,
-0x0006240B,
-0x00062F05,
-0x00062F05,
-0x0006460B,
-0x0006460B,
-0x00065107,
-0x00065107,
-0x0006340B,
-0x0006340B,
-0x00063F05,
-0x00063F05,
-0x00000000,
-0x00069928,
-0x00000000,
-0x0005A402,
-0x00000000,
-0x0005A604,
+0x00215000,
+0x00000000,
+0x0005170C,
+0x0001B80C,
+0x0001580C,
+0x00000000,
+0x0005230C,
+0x00000000,
+0x00052F0C,
+0x00022118,
+0x00053B0C,
+0x00022118,
+0x0005470C,
+0x00056C19,
+0x00056C19,
+0x00000000,
+0x00040A19,
+0x00055319,
+0x00055319,
+0x0003F119,
+0x0003D819,
+0x00000000,
+0x00043E0B,
+0x00000000,
+0x0004490B,
+0x00000000,
+0x00045407,
+0x00000000,
+0x0004230B,
+0x00000000,
+0x00042E0B,
+0x00000000,
+0x00043905,
+0x0005A90B,
+0x0005A90B,
+0x0005B407,
+0x0005B407,
+0x0005BB0B,
+0x0005BB0B,
+0x0005C605,
+0x0005C605,
+0x0005CB0B,
+0x0005CB0B,
+0x0005D607,
+0x0005D607,
+0x0005DD0B,
+0x0005DD0B,
+0x0005E805,
+0x0005E805,
+0x0005EF0B,
+0x0005EF0B,
+0x0005FA07,
+0x0005FA07,
+0x0006010B,
+0x0006010B,
+0x00060C05,
+0x00060C05,
+0x0006110B,
+0x0006110B,
+0x00061C07,
+0x00061C07,
+0x0006230B,
+0x0006230B,
+0x00062E05,
+0x00062E05,
+0x0006450B,
+0x0006450B,
+0x00065007,
+0x00065007,
+0x0006330B,
+0x0006330B,
+0x00063E05,
+0x00063E05,
+0x00000000,
+0x00069828,
+0x00000000,
+0x0005A302,
+0x00000000,
+0x0005A504,
0x00000006,
0x00000000,
0x00000003,
@@ -306,193 +306,193 @@
0x00000000,
0x00030005,
0x00000000,
-0x0005860F,
-0x0005860F,
+0x0005850F,
+0x0005850F,
0x000B000F,
0x00000000,
-0x0005950F,
-0x0005950F,
+0x0005940F,
+0x0005940F,
0x00030007,
0x00000000,
-0x00067E09,
-0x00067E09,
-0x0004AA09,
-0x0004AA09,
+0x00067D09,
+0x00067D09,
+0x0004A909,
+0x0004A909,
0x000B0009,
0x00000000,
0x00000000,
-0x00068D02,
-0x00068703,
-0x00068703,
-0x000B9902,
-0x0004B303,
-0x00000003,
-0x002E6C00,
+0x00068C02,
+0x00068603,
+0x00068603,
+0x000BA502,
+0x0004B203,
0x00000003,
0x002E9C00,
0x00000003,
-0x002EA000,
-0x00000000,
-0x00068F02,
-0x00068A03,
-0x00068A03,
-0x000BA902,
-0x0004B603,
+0x002ECC00,
0x00000003,
-0x002E6E00,
-0x0006F909,
-0x0006F909,
-0x00070209,
-0x00070209,
-0x00000000,
-0x0004B909,
-0x00000000,
-0x0004C209,
-0x00000000,
-0x00069102,
-0x00070B03,
-0x00070B03,
-0x000BAB02,
-0x0004CB03,
-0x00000000,
-0x00069502,
-0x00070E03,
-0x00070E03,
-0x000BAF02,
-0x0004CE03,
-0x00000000,
-0x00069302,
-0x00071103,
-0x00071103,
-0x000BAD02,
-0x0004D103,
+0x002ED000,
+0x00000000,
+0x00068E02,
+0x00068903,
+0x00068903,
+0x000BB502,
+0x0004B503,
0x00000003,
0x002E9E00,
+0x0006F809,
+0x0006F809,
+0x00070109,
+0x00070109,
+0x00000000,
+0x0004B809,
+0x00000000,
+0x0004C109,
+0x00000000,
+0x00069002,
+0x00070A03,
+0x00070A03,
+0x000BB702,
+0x0004CA03,
+0x00000000,
+0x00069402,
+0x00070D03,
+0x00070D03,
+0x000BBB02,
+0x0004CD03,
+0x00000000,
+0x00069202,
+0x00071003,
+0x00071003,
+0x000BB902,
+0x0004D003,
+0x00000003,
+0x002ECE00,
0x00000000,
-0x00069702,
-0x00071403,
-0x00071403,
-0x000BB102,
-0x0004D403,
+0x00069602,
+0x00071303,
+0x00071303,
+0x000BBD02,
+0x0004D303,
0x00000003,
-0x002EA200,
+0x002ED200,
0x00000000,
-0x0007170C,
-0x00022218,
-0x0007230C,
-0x00022218,
-0x00072F0C,
+0x0007160C,
+0x00022118,
+0x0007220C,
+0x00022118,
+0x00072E0C,
0x00000000,
-0x00067C01,
+0x00067B01,
0x00000000,
-0x00067D01,
-0x00065611,
-0x00065611,
-0x00066715,
-0x00066715,
-0x00045C02,
-0x00045E15,
-0x00067D01,
-0x00066715,
-0x00047311,
0x00067C01,
+0x00065511,
+0x00065511,
+0x00066615,
+0x00066615,
+0x00045B02,
+0x00045D15,
+0x00067C01,
+0x00066615,
+0x00047211,
+0x00067B01,
0x00C40011,
0x0000C500,
-0x00073B09,
-0x00073B09,
-0x00000000,
-0x0004D909,
-0x00074409,
-0x00074409,
-0x0004EB09,
-0x0004E209,
-0x000B6300,
-0x00074D01,
-0x00002D90,
-0x00000000,
-0x00000000,
-0x00078606,
-0x00022200,
-0x0007A418,
-0x0007BC0B,
-0x0007BC0B,
-0x00000000,
-0x0004F80B,
-0x00013100,
-0x00078C18,
-0x0007BC0B,
-0x0007BC0B,
-0x0007A418,
-0x00078606,
+0x00073A09,
+0x00073A09,
+0x00000000,
+0x0004D809,
+0x00074309,
+0x00074309,
+0x0004EA09,
+0x0004E109,
+0x000B6F00,
+0x00074C01,
+0x00002DC0,
+0x00000000,
+0x00000000,
+0x00078506,
+0x00022100,
+0x0007A318,
+0x0007BB0B,
+0x0007BB0B,
+0x00000000,
+0x0004F70B,
+0x00013000,
+0x00078B18,
+0x0007BB0B,
+0x0007BB0B,
+0x0007A318,
+0x00078506,
0x00D2000B,
0x0000D300,
0x00000000,
-0x00075406,
-0x00022218,
-0x00075B18,
-0x0004F404,
-0x00075A00,
-0x00013100,
-0x00077300,
-0x000BA600,
-0x00077412,
+0x00075306,
+0x00022118,
+0x00075A18,
+0x0004F304,
+0x00075900,
+0x00013000,
+0x00077200,
+0x000BB200,
+0x00077312,
0x00EA00DA,
0x000026FF,
0x00000000,
-0x00074E06,
+0x00074D06,
0x00000000,
0x00100020,
-0x00D82CA8,
-0x0000002C,
+0x000C2CDC,
+0x0000002D,
0x00000000,
-0x0005030F,
-0x0007DF13,
-0x0007DF13,
+0x0005020F,
+0x0007DE13,
+0x0007DE13,
0x00000000,
-0x00051213,
+0x00051113,
0x00170013,
0x00000000,
-0x0007F213,
-0x0007F213,
-0x00080513,
-0x00080513,
-0x00081813,
-0x00081813,
-0x00082B13,
-0x00082B13,
-0x00F82D90,
+0x0007F113,
+0x0007F113,
+0x00080413,
+0x00080413,
+0x00081713,
+0x00081713,
+0x00082A13,
+0x00082A13,
+0x00F82DC0,
0x00000000,
-0x00002080,
+0x00002060,
0x00000000,
-0x000020A8,
+0x00002088,
0x00000000,
-0x000020D0,
+0x000020B0,
0x00000000,
-0x000020F8,
+0x000020D8,
0x00000000,
-0x00002120,
+0x00002100,
0x00000000,
-0x00002148,
+0x00002128,
0x00000000,
-0x00002170,
+0x00002150,
0x00000000,
-0x00002198,
+0x00002178,
0x00000000,
-0x000021C0,
+0x000021A0,
0x00000000,
-0x000021E8,
+0x000021C8,
0x00000000,
-0x00002210,
+0x000021F0,
0x00000000,
-0x00002238,
+0x00002218,
0x00000000,
-0x00002260,
+0x00002240,
0x00000000,
-0x00002288,
+0x00002268,
0x00000000,
-0x000022B0,
+0x00002290,
0x00000000,
-0x000022D8,
+0x000022B8,
0x00000000,
0x00000000,
0x00000000,
@@ -527,59 +527,47 @@
0x00000000,
0x00000000,
0x00000000,
-0x000B1A10,
+0x000B2710,
0x000F00F8,
0x00000000,
0x00000002,
0x00000000,
0x00000000,
-0x00013100,
+0x00013000,
0x00000000,
-0x00013B0C,
+0x00013A0C,
0x00000000,
-0x00083E02,
+0x00083D02,
0x00000000,
-0x00084004,
+0x00083F04,
0x00000000,
-0x00084406,
+0x00084306,
0x00000000,
-0x00084A0C,
+0x0008490C,
0x00000000,
-0x00085648,
+0x00085548,
0x00000000,
-0x0004260C,
+0x0004250C,
0x00000000,
-0x0004320C,
+0x0004310C,
0x00000000,
-0x0001D10C,
+0x0001D00C,
0x00000000,
-0x0001DD0C,
+0x0001DC0C,
0x00000000,
-0x0001E902,
+0x0001E802,
0x00000000,
-0x0001EB04,
+0x0001EA04,
0x00000000,
-0x0001EF02,
+0x0001EE02,
0x00000000,
-0x0001F104,
-0x00000000,
-0x00086E0C,
-0x00022218,
-0x00087A0C,
-0x00022218,
-0x0008860C,
-0x00002ECC,
-0x00000000,
-0x00002ED4,
-0x00000000,
-0x00002EDC,
-0x00000000,
-0x00002EE4,
-0x00000000,
-0x00002EEC,
-0x00000000,
-0x00002EF4,
+0x0001F004,
0x00000000,
+0x00086D0C,
+0x00022118,
+0x0008790C,
+0x00022118,
+0x0008850C,
0x00002EFC,
0x00000000,
0x00002F04,
@@ -594,18 +582,28 @@
0x00000000,
0x00002F2C,
0x00000000,
+0x00002F34,
0x00000000,
+0x00002F3C,
0x00000000,
+0x00002F44,
0x00000000,
+0x00002F4C,
0x00000000,
+0x00002F54,
0x00000000,
+0x00002F5C,
0x00000000,
0x00000000,
+0x0008B800,
0x00000000,
+0x000E4000,
+0x0008B800,
+0x00013000,
+0x00003C18,
0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
+0x00052700,
+0x00052701,
0x00000000,
0x00000000,
0x00000000,
diff --git a/sound/soc/omap/abe/C_ABE_FW.lDM b/sound/soc/omap/abe/C_ABE_FW.lDM
index 315022719db0..72e7b72a01b0 100644
--- a/sound/soc/omap/abe/C_ABE_FW.lDM
+++ b/sound/soc/omap/abe/C_ABE_FW.lDM
@@ -154,30 +154,43 @@
0x00000000,
0x00000000,
0x00000000,
-0x00006540,
-0x033202D7,
-0x031D033D,
-0x00430327,
-0x0344003A,
-0x034B0363,
-0x019E0308,
-0x037004B7,
-0x02C904D3,
+0x00006582,
+0x034702EC,
+0x03320352,
+0x0043033C,
+0x0359003A,
+0x03600378,
+0x019E031D,
+0x03850483,
+0x02DE049F,
0x01EC01C0,
-0x02EA0297,
+0x02FF02AC,
0x018E00B3,
0x020B0157,
-0x000201FD,
-0x00C900C3,
-0x00DA00D3,
-0x00F100E4,
-0x00FF00F8,
-0x010F0107,
-0x01310116,
-0x00030148,
-0x01550154,
-0x04600156,
-0x03C10383,
+0x055601FD,
+0x00C30002,
+0x00D300C9,
+0x00E400DA,
+0x00F800F1,
+0x010700FF,
+0x0116010F,
+0x01480131,
+0x01540003,
+0x01560155,
+0x0398042A,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
0x00000000,
0x00000000,
0x00000000,
@@ -2629,7 +2642,7 @@
0x00000000,
0x00CF0001,
0x00D70056,
-0x00000019,
+0x0000012E,
0x00000000,
0x00030004,
0x000C0023,
@@ -2783,9 +2796,9 @@
0x00E50038,
0x00E200E1,
0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
+0x012B0019,
+0x012C0001,
+0x012D0001,
0x00000000,
0x00000000,
0x00000000,
@@ -2835,12 +2848,11 @@
0x00000010,
0x00000000,
0x00000000,
-0x000022B4,
+0x000022E8,
0x00000000,
0x0000FFF8,
0x00000018,
-0x000022B0,
-0x00000000,
+0x000022E0,
0x00000000,
0x00000000,
0x00000000,
@@ -2943,14 +2955,14 @@
0x003FFFF0,
0x00000000,
0x00400000,
-0x01960183,
-0x01BC01A9,
-0x01E201CF,
-0x020801F5,
-0x022E021B,
-0x02540241,
-0x027A0267,
-0x02A0028D,
+0x01950182,
+0x01BB01A8,
+0x01E101CE,
+0x020701F4,
+0x022D021A,
+0x02530240,
+0x02790266,
+0x029F028C,
0x00000004,
0x00000001,
0x00000000,
@@ -2959,14 +2971,14 @@
0x003FFFF0,
0x00000000,
0x00400000,
-0x02C902B7,
-0x02ED02DB,
-0x031102FF,
-0x03350323,
-0x03590347,
-0x037D036B,
-0x03A1038F,
-0x03C503B3,
+0x02C802B6,
+0x02EC02DA,
+0x031002FE,
+0x03340322,
+0x03580346,
+0x037C036A,
+0x03A0038E,
+0x03C403B2,
0x00008363,
0x00000428,
0x00000000,
@@ -2993,53 +3005,37 @@
0x00000428,
0x00008363,
0x00000428,
-0x25542704,
-0x00002714,
-0x254426E4,
-0x000026F4,
-0x29542694,
-0x00002684,
-0x29442674,
-0x00002664,
-0x253426C4,
-0x000026D4,
-0x252426A4,
-0x000026B4,
-0x29342614,
-0x00002604,
-0x292425F4,
-0x000025E4,
-0x25142644,
-0x00002654,
-0x25042624,
-0x00002634,
-0x27342454,
-0x00002444,
-0x25742474,
-0x00002464,
-0x25842494,
-0x00002484,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
+0x25882738,
+0x00002748,
+0x25782718,
+0x00002728,
+0x298826C8,
+0x000026B8,
+0x297826A8,
+0x00002698,
+0x256826F8,
+0x00002708,
+0x255826D8,
+0x000026E8,
+0x29682648,
+0x00002638,
+0x29582628,
+0x00002618,
+0x25482678,
+0x00002688,
+0x25382658,
+0x00002668,
+0x27682488,
+0x00002478,
+0x25A824A8,
+0x00002498,
+0x25B824C8,
+0x000024B8,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
+0x00003000,
0x00000000,
0x00000000,
0x00000000,
@@ -3848,6 +3844,10 @@
0x00000000,
0x00000000,
0x00000000,
+0x00003900,
+0x00003900,
+0x00003900,
+0x00003C17,
0x00000000,
0x00000000,
0x00000000,
diff --git a/sound/soc/omap/abe/Makefile b/sound/soc/omap/abe/Makefile
index a9e0a917d36a..ed3ac9ad0bf8 100644
--- a/sound/soc/omap/abe/Makefile
+++ b/sound/soc/omap/abe/Makefile
@@ -1,5 +1,6 @@
snd-soc-abe-hal-objs += abe_api.o \
abe_dbg.o \
+ abe_dat.o \
abe_ext.o \
abe_ini.o \
abe_irq.o \
diff --git a/sound/soc/omap/abe/abe_api.c b/sound/soc/omap/abe/abe_api.c
index f8038813e57c..3ec70e1ca619 100644
--- a/sound/soc/omap/abe/abe_api.c
+++ b/sound/soc/omap/abe/abe_api.c
@@ -1,11 +1,22 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
@@ -13,134 +24,170 @@
#include "abe_initxxx_labels.h"
#include "abe_dbg.h"
-static abe_uint32 ABE_FW_PM[ABE_PMEM_SIZE / 4] = {
-#include "C_ABE_FW.PM"
-};
-static abe_uint32 ABE_FW_CM[ABE_CMEM_SIZE / 4] = {
-#include "C_ABE_FW.CM"
-};
-static abe_uint32 ABE_FW_DM[ABE_DMEM_SIZE / 4] = {
-#include "C_ABE_FW.lDM"
-};
-static abe_uint32 ABE_FW_SM[ABE_SMEM_SIZE / 4] = {
-#include "C_ABE_FW.SM32"
-};
+//#include <linux/module.h>
+
/**
-* @fn abe_reset_hal()
-*
-* Operations : reset the HAL by reloading the static variables and default AESS registers.
-* Called after a PRCM cold-start reset of ABE
-*
-* @see ABE_API.h
-*/
-void abe_reset_hal(void)
+ * abe_reset_hal - reset the ABE/HAL
+ * @rdev: regulator source
+ * @constraints: constraints to apply
+ *
+ * Operations : reset the HAL by reloading the static variables and
+ * default AESS registers.
+ * Called after a PRCM cold-start reset of ABE
+ */
+abehal_status abe_reset_hal (void)
{
- _lock_enter
_log(id_reset_hal,0,0,0)
-
+#if 0
abe_dbg_output = TERMINAL_OUTPUT;
- abe_irq_dbg_read_ptr = 0; /* IRQ & DBG circular read pointer in DMEM */
- abe_dbg_mask = (abe_dbg_t)(-1); /* set debug mask to "enable all traces" */
- abe_hw_configuration();
- _lock_exit
+ abe_dbg_activity_log_write_pointer = 0;
+
+ /* IRQ & DBG circular read pointer in DMEM */
+ abe_irq_dbg_read_ptr = 0;
+
+ /* set debug mask to "enable all traces" */
+ abe_dbg_mask = (abe_dbg_t)(0);
+#endif
+ abe_hw_configuration();
+ return 0;
}
+EXPORT_SYMBOL(abe_reset_hal);
+
+
/**
-* @fn abe_load_fwl()
-*
-* Operations :
-* loads the Audio Engine firmware, generate a single pulse on the Event generator
-* to let execution start, read the version number returned from this execution.
-*
-* @see ABE_API.h
-*/
-void abe_load_fw_param(abe_uint32 *PMEM, abe_uint32 PMEM_SIZE,
- abe_uint32 *CMEM, abe_uint32 CMEM_SIZE,
- abe_uint32 *SMEM, abe_uint32 SMEM_SIZE,
- abe_uint32 *DMEM, abe_uint32 DMEM_SIZE)
+ * abe_load_fw_param - Load ABE Firmware memories
+ * @PMEM: Pointer of Program memory data
+ * @PMEM_SIZE: Size of PMEM data
+ * @CMEM: Pointer of Coeffients memory data
+ * @CMEM_SIZE: Size of CMEM data
+ * @SMEM: Pointer of Sample memory data
+ * @SMEM_SIZE: Size of SMEM data
+ * @DMEM: Pointer of Data memory data
+ * @DMEM_SIZE: Size of DMEM data
+ *
+ * loads the Audio Engine firmware, generate a single pulse on the Event
+ * generator to let execution start, read the version number returned from
+ * this execution.
+ */
+abehal_status abe_load_fw_param (u32 *ABE_FW)
{
- static abe_uint32 warm_boot;
- abe_uint32 event_gen;
+ static u32 warm_boot;
+ u32 event_gen;
+ u32 pmem_size, dmem_size, smem_size, cmem_size;
+ u32 *pmem_ptr, *dmem_ptr, *smem_ptr, *cmem_ptr, *fw_ptr;
- _lock_enter
_log(id_load_fw_param,0,0,0)
-
#if PC_SIMULATION
- /* the code is loaded from the Checkers */
+ /* the code is loaded from the Checkers */
#else
+#define ABE_FW_OFFSET 5
+
+ fw_ptr = ABE_FW;
+ abe_firmware_version_number = *fw_ptr++;
+ pmem_size = *fw_ptr++;
+ cmem_size = *fw_ptr++;
+ dmem_size = *fw_ptr++;
+ smem_size = *fw_ptr++;
+
+ pmem_ptr = fw_ptr;
+ cmem_ptr = pmem_ptr + (pmem_size >> 2);
+ dmem_ptr = cmem_ptr + (cmem_size >> 2);
+ smem_ptr = dmem_ptr + (dmem_size >> 2);
+
/* do not load PMEM */
if (warm_boot) {
/* Stop the event Generator */
event_gen = 0;
abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC,
- EVENT_GENERATOR_START, &event_gen, 4);
+ EVENT_GENERATOR_START, &event_gen, 4);
/* Now we are sure the firmware is stalled */
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_CMEM, 0, CMEM, CMEM_SIZE);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM, 0, SMEM, SMEM_SIZE);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, 0, DMEM, DMEM_SIZE);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, 0, cmem_ptr,
+ cmem_size);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM, 0, smem_ptr,
+ smem_size);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, 0, dmem_ptr,
+ dmem_size);
/* Restore the event Generator status */
event_gen = 1;
abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC,
- EVENT_GENERATOR_START, &event_gen, 4);
+ EVENT_GENERATOR_START, &event_gen, 4);
} else {
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_PMEM, 0, PMEM, PMEM_SIZE);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_CMEM, 0, CMEM, CMEM_SIZE);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM, 0, SMEM, SMEM_SIZE);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, 0, DMEM, DMEM_SIZE);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_PMEM, 0, pmem_ptr,
+ pmem_size);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, 0, cmem_ptr,
+ cmem_size);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM, 0, smem_ptr,
+ smem_size);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, 0, dmem_ptr,
+ dmem_size);
}
warm_boot = 1;
#endif
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_load_fw_param);
+
+/**
+ * abe_load_fw - Load ABE Firmware and initialize memories
+ *
+ * loads the Audio Engine firmware, generate a single pulse on the Event
+ * generator to let execution start, read the version number returned from
+ * this execution.
+ */
-void abe_load_fw(void)
+abehal_status abe_load_fw (void)
{
- _lock_enter
+
_log(id_load_fw,0,0,0)
- abe_load_fw_param(ABE_FW_PM, sizeof (ABE_FW_PM),
- ABE_FW_CM, sizeof(ABE_FW_CM),
- ABE_FW_SM, sizeof(ABE_FW_SM),
- ABE_FW_DM, sizeof(ABE_FW_DM));
+ abe_load_fw_param ((u32 *)abe_firmware_array);
abe_reset_all_ports();
- abe_build_scheduler_table();
- abe_reset_all_sequence();
+ abe_build_scheduler_table ();
+ abe_reset_all_sequence ();
abe_select_main_port(PDM_DL_PORT);
- _lock_exit
-
+ return 0;
}
+EXPORT_SYMBOL(abe_load_fw);
-/*
- * ABE_HARDWARE_CONFIGURATION
- *
- * Parameter :
- * U : use-case description list (pointer)
- * H : pointer to the output structure
+/**
+ * abe_read_hardware_configuration - Return default HW periferals configuration
+ * @u: use-case description list (pointer)
+ * @o: opp mode (pointer)
+ * @hw: pointer to the output HW structure
*
- * Operations :
- * return a structure with the HW thresholds compatible with the HAL/FW/AESS_ATC
- * will be upgraded in FW06
+
+ * Parameter :
+ * U : use-case description list (pointer)
+ * H : pointer to the output structure
*
- * Return value :
- * None.
+ * Operations :
+ * return a structure with the HW thresholds compatible with the HAL/FW/AESS_ATC
+ * will be upgraded in FW06
+ * return a structure with the HW thresholds compatible with the HAL/FW/AESS_ATC
*/
-void abe_read_hardware_configuration(abe_use_case_id *u, abe_opp_t *o, abe_hw_config_init_t *hw)
+abehal_status abe_read_hardware_configuration (u32 *u, u32 *o, abe_hw_config_init_t *hw)
{
- _lock_enter
- _log(id_read_hardware_configuration,(abe_uint32)(u),(abe_uint32)u>>8,(abe_uint32)u>>16)
- abe_read_use_case_opp(u, o);
+ _log(id_read_hardware_configuration, (u32)u, (u32)u>>8, (u32)u>>16)
- hw->MCPDM_CTRL__DIV_SEL = 0; /* 0: 96kHz 1:192kHz */
- hw->MCPDM_CTRL__CMD_INT = 1; /* 0: no command in the FIFO, 1: 6 data on each lines (with commands) */
- hw->MCPDM_CTRL__PDMOUTFORMAT = 0; /* 0:MSB aligned 1:LSB aligned */
+ abe_read_use_case_opp (u, o);
+
+ /* 0: 96kHz 1:192kHz */
+ hw->MCPDM_CTRL__DIV_SEL = 0;
+
+ /* 0: no command in the FIFO, 1: 6 data on each lines (with commands) */
+ hw->MCPDM_CTRL__CMD_INT = 1;
+
+ /* 0:MSB aligned 1:LSB aligned */
+ hw->MCPDM_CTRL__PDMOUTFORMAT = 0;
hw->MCPDM_CTRL__PDM_DN5_EN = 1;
hw->MCPDM_CTRL__PDM_DN4_EN = 1;
hw->MCPDM_CTRL__PDM_DN3_EN = 1;
@@ -149,73 +196,92 @@ void abe_read_hardware_configuration(abe_use_case_id *u, abe_opp_t *o, abe_hw_co
hw->MCPDM_CTRL__PDM_UP3_EN = 0;
hw->MCPDM_CTRL__PDM_UP2_EN = 1;
hw->MCPDM_CTRL__PDM_UP1_EN = 1;
- hw->MCPDM_FIFO_CTRL_DN__DN_TRESH = MCPDM_DL_ITER/6; /* All the McPDM_DL FIFOs are enabled simultaneously */
- hw->MCPDM_FIFO_CTRL_UP__UP_TRESH = MCPDM_UL_ITER/2; /* number of ATC access upon AMIC DMArequests, 2 the FIFOs channels are enabled */
- hw->DMIC_CTRL__DMIC_CLK_DIV = 0; /* 0:2.4MHz 1:3.84MHz */
- hw->DMIC_CTRL__DMICOUTFORMAT = 0; /* 0:MSB aligned 1:LSB aligned */
+ /* All the McPDM_DL FIFOs are enabled simultaneously */
+ hw->MCPDM_FIFO_CTRL_DN__DN_TRESH = MCPDM_DL_ITER/6;
+
+ /* number of ATC access upon AMIC DMArequests, 2 the FIFOs channels
+ are enabled */
+ hw->MCPDM_FIFO_CTRL_UP__UP_TRESH = MCPDM_UL_ITER/2;
+
+ /* 0:2.4MHz 1:3.84MHz */
+ hw->DMIC_CTRL__DMIC_CLK_DIV = 0;
+
+ /* 0:MSB aligned 1:LSB aligned */
+ hw->DMIC_CTRL__DMICOUTFORMAT = 0;
hw->DMIC_CTRL__DMIC_UP3_EN = 1;
hw->DMIC_CTRL__DMIC_UP2_EN = 1;
hw->DMIC_CTRL__DMIC_UP1_EN = 1;
- hw->DMIC_FIFO_CTRL__DMIC_TRESH = DMIC_ITER/6; /* 1*(DMIC_UP1_EN+ 2+ 3)*2 OCP read access every 96/88.1 KHz. */
- /* MCBSP SPECIFICATION
+ /* 1*(DMIC_UP1_EN+ 2+ 3)*2 OCP read access every 96/88.1 KHz. */
+ hw->DMIC_FIFO_CTRL__DMIC_TRESH = DMIC_ITER/6;
+
+ /* MCBSP SPECIFICATION
RJUST = 00 Right justify data and zero fill MSBs in DRR[1,2]
- RJUST = 01 Right justify data and sign extend it into the MSBs in DRR[1,2]
+ RJUST = 01 Right justify data and sign extend it into the MSBs
+ in DRR[1,2]
RJUST = 10 Left justify data and zero fill LSBs in DRR[1,2]
MCBSPLP_RJUST_MODE_RIGHT_ZERO = 0x0,
MCBSPLP_RJUST_MODE_RIGHT_SIGN = 0x1,
- MCBSPLP_RJUST_MODE_LEFT_ZERO = 0x2,
+ MCBSPLP_RJUST_MODE_LEFT_ZERO = 0x2,
MCBSPLP_RJUST_MODE_MAX = MCBSPLP_RJUST_MODE_LEFT_ZERO
*/
hw->MCBSP_SPCR1_REG__RJUST = 2;
- hw->MCBSP_THRSH2_REG_REG__XTHRESHOLD = 1; /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, .... */
- hw->MCBSP_THRSH1_REG_REG__RTHRESHOLD = 1; /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, .... */
- hw->SLIMBUS_DCT_FIFO_SETUP_REG__SB_THRESHOLD = 1; /* Slimbus IP FIFO thresholds */
+ /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, .... */
+ hw->MCBSP_THRSH2_REG_REG__XTHRESHOLD = 1;
+
+ /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, .... */
+ hw->MCBSP_THRSH1_REG_REG__RTHRESHOLD = 1;
+
+ /* Slimbus IP FIFO thresholds */
+ hw->SLIMBUS_DCT_FIFO_SETUP_REG__SB_THRESHOLD = 1;
- hw->AESS_EVENT_GENERATOR_COUNTER__COUNTER_VALUE = EVENT_GENERATOR_COUNTER_DEFAULT; /* 2050 gives about 96kHz */
- hw->AESS_EVENT_SOURCE_SELECTION__SELECTION = 1; /* 0: DMAreq, 1:Counter */
- hw->AESS_AUDIO_ENGINE_SCHEDULER__DMA_REQ_SELECTION = ABE_ATC_MCPDMDL_DMA_REQ; /* 5bits DMAreq selection */
+ /* 2050 gives about 96kHz */
+ hw->AESS_EVENT_GENERATOR_COUNTER__COUNTER_VALUE =
+ EVENT_GENERATOR_COUNTER_DEFAULT;
- hw->HAL_EVENT_SELECTION = EVENT_TIMER; /* THE famous EVENT timer ! */
- _lock_exit
+ /* 0: DMAreq, 1:Counter */
+ hw->AESS_EVENT_SOURCE_SELECTION__SELECTION = 1;
+ /* 5bits DMAreq selection */
+ hw->AESS_AUDIO_ENGINE_SCHEDULER__DMA_REQ_SELECTION =
+ ABE_ATC_MCPDMDL_DMA_REQ;
+
+ /* THE famous EVENT timer ! */
+ hw->HAL_EVENT_SELECTION = EVENT_TIMER;
+ return 0;
}
+EXPORT_SYMBOL(abe_read_hardware_configuration);
-/*
- * ABE_IRQ_PROCESSING
- *
- * Parameter :
- * No parameter
- *
- * Operations :
- * This subroutine is call upon reception of "MA_IRQ_99 ABE_MPU_IRQ" ABE interrupt
- * This subroutine will check the IRQ_FIFO from the AE and act accordingly.
- * Some IRQ source are originated for the delivery of "end of time sequenced tasks"
- * notifications, some are originated from the Ping-Pong protocols, some are generated from
- * the embedded debugger when the firmware stops on programmable break-points, etc …
- *
- * Return value :
- * None.
+/**
+ * abe_irq_processing - Process ABE interrupt
+ *
+ * This subroutine is call upon reception of "MA_IRQ_99 ABE_MPU_IRQ" Audio
+ * back-end interrupt. This subroutine will check the ATC Hrdware, the
+ * IRQ_FIFO from the AE and act accordingly. Some IRQ source are originated
+ * for the delivery of "end of time sequenced tasks" notifications, some are
+ * originated from the Ping-Pong protocols, some are generated from
+ * the embedded debugger when the firmware stops on programmable break-points,
+ * etc …
*/
-void abe_irq_processing(void)
+abehal_status abe_irq_processing (void)
{
- abe_uint32 clear_abe_irq;
- abe_uint32 abe_irq_dbg_write_ptr, i, cmem_src, sm_cm = 0;
+ u32 clear_abe_irq;
+ u32 abe_irq_dbg_write_ptr, i, cmem_src, sm_cm;
abe_irq_data_t IRQ_data;
- _lock_enter
- _log(id_irq_processing,0,0,0)
+#define IrqFiFoMask ((D_McuIrqFifo_sizeof >> 2) -1)
-#define IrqFiFoMask ((D_McuIrqFifo_sizeof >> 2) - 1)
+ _log(id_irq_processing,0,0,0)
/* extract the write pointer index from CMEM memory (INITPTR format) */
/* CMEM address of the write pointer in bytes */
cmem_src = MCU_IRQ_FIFO_ptr_labelID * 4;
abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_CMEM, cmem_src,
- (abe_uint32*)&abe_irq_dbg_write_ptr,
- sizeof (abe_irq_dbg_write_ptr));
- abe_irq_dbg_write_ptr = sm_cm >> 16; /* AESS left-pointer index located on MSBs */
+ &sm_cm, sizeof (abe_irq_dbg_write_ptr));
+
+ /* AESS left-pointer index located on MSBs */
+ abe_irq_dbg_write_ptr = sm_cm >> 16;
abe_irq_dbg_write_ptr &= 0xFF;
/* loop on the IRQ FIFO content */
@@ -225,14 +291,16 @@ void abe_irq_processing(void)
break;
/* read the IRQ/DBG FIFO */
abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_McuIrqFifo_ADDR + (i << 2), (abe_uint32 *)&IRQ_data,
- sizeof (IRQ_data));
- abe_irq_dbg_read_ptr = (abe_irq_dbg_read_ptr + 1) & IrqFiFoMask;
+ (D_McuIrqFifo_ADDR + (i << 2)),
+ (u32 *)&IRQ_data,
+ sizeof (IRQ_data));
+ abe_irq_dbg_read_ptr = (abe_irq_dbg_read_ptr + 1) &
+ IrqFiFoMask;
/* select the source of the interrupt */
switch (IRQ_data.tag) {
case IRQtag_APS:
- _log(id_irq_processing,(abe_uint32)(IRQ_data.data),0,1)
+ _log(id_irq_processing,IRQ_data.data,0,1)
abe_irq_aps (IRQ_data.data);
break;
case IRQtag_PP:
@@ -240,75 +308,64 @@ void abe_irq_processing(void)
abe_irq_ping_pong ();
break;
case IRQtag_COUNT:
- _log(id_irq_processing,(abe_uint32)(IRQ_data.data),0,3)
+ _log(id_irq_processing,IRQ_data.data,0,3)
abe_irq_check_for_sequences (IRQ_data.data);
break;
default:
- break;
+ break;
}
}
- abe_monitoring();
+ abe_monitoring ();
clear_abe_irq = 1;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, ABE_MCU_IRQSTATUS,
- &clear_abe_irq, 4);
- _lock_exit
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC, ABE_MCU_IRQSTATUS,
+ &clear_abe_irq, 4);
+ return 0;
}
+EXPORT_SYMBOL(abe_irq_processing);
-/*
- * ABE_SELECT_MAIN_PORT
- *
- * Parameter :
- * id : audio port name
- *
- * Operations :
- * tells the FW which is the reference stream for adjusting
- * the processing on 23/24/25 slots
+/**
+ * abe_select_main_port - Select stynchronization port for Event generator.
+ * @id: audio port name
*
- * Return value:
- * None.
+ * tells the FW which is the reference stream for adjusting
+ * the processing on 23/24/25 slots
*/
-void abe_select_main_port (abe_port_id id)
+abehal_status abe_select_main_port (u32 id)
{
- abe_uint32 selection;
+ u32 selection;
- _lock_enter
_log(id_select_main_port,id,0,0)
/* flow control */
- selection = D_IOdescr_ADDR + id*sizeof(ABE_SIODescriptor) + flow_counter_;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_Slot23_ctrl_ADDR, &selection, 4);
-
- _lock_exit
+ selection = D_IOdescr_ADDR + id*sizeof(ABE_SIODescriptor) +
+ flow_counter_;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_Slot23_ctrl_ADDR,
+ &selection, 4);
+ return 0;
}
+EXPORT_SYMBOL(abe_select_main_port);
-/*
- * ABE_WRITE_EVENT_GENERATOR
- *
- * Parameter :
- * e: Event Generation Counter, McPDM, DMIC or default.
- *
- * Operations :
- * load the AESS event generator hardware source. Loads the firmware parameters
- * accordingly. Indicates to the FW which data stream is the most important to preserve
- * in case all the streams are asynchronous. If the parameter is "default", let the HAL
- * decide which Event source is the best appropriate based on the opened ports.
- *
- * When neither the DMIC and the McPDM are activated the AE will have its EVENT generator programmed
- * with the EVENT_COUNTER. The event counter will be tuned in order to deliver a pulse frequency higher
- * than 96 kHz. The DPLL output at 100% OPP is MCLK = (32768kHz x6000) = 196.608kHz
- * The ratio is (MCLK/96000)+(1<<1) = 2050
- * (1<<1) in order to have the same speed at 50% and 100% OPP (only 15 MSB bits are used at OPP50%)
- *
- * Return value :
- * None.
+/**
+ * abe_write_event_generator - Select event generator source
+ * @e: Event Generation Counter, McPDM, DMIC or default.
+ *
+ * load the AESS event generator hardware source. Loads the firmware parameters
+ * accordingly. Indicates to the FW which data stream is the most important to preserve
+ * in case all the streams are asynchronous. If the parameter is "default", let the HAL
+ * decide which Event source is the best appropriate based on the opened ports.
+ *
+ * When neither the DMIC and the McPDM are activated the AE will have its EVENT generator programmed
+ * with the EVENT_COUNTER. The event counter will be tuned in order to deliver a pulse frequency higher
+ * than 96 kHz. The DPLL output at 100% OPP is MCLK = (32768kHz x6000) = 196.608kHz
+ * The ratio is (MCLK/96000)+(1<<1) = 2050
+ * (1<<1) in order to have the same speed at 50% and 100% OPP (only 15 MSB bits are used at OPP50%)
*/
-void abe_write_event_generator(abe_event_id e)
+abehal_status abe_write_event_generator (u32 e)
{
- abe_uint32 event, selection, counter, start;
+ u32 event, selection, counter, start;
- _lock_enter
_log(id_write_event_generator,e,0,0)
counter = EVENT_GENERATOR_COUNTER_DEFAULT;
@@ -316,87 +373,56 @@ void abe_write_event_generator(abe_event_id e)
abe_current_event_id = e;
switch (e) {
- case EVENT_MCPDM:
- selection = EVENT_SOURCE_DMA;
- event = ABE_ATC_MCPDMDL_DMA_REQ;
- break;
- case EVENT_DMIC:
- selection = EVENT_SOURCE_DMA;
- event = ABE_ATC_DMIC_DMA_REQ;
- break;
- case EVENT_TIMER:
- selection = EVENT_SOURCE_COUNTER;
- event = 0;
- break;
- case EVENT_McBSP:
- selection = EVENT_SOURCE_COUNTER;
- event = 0;
- break;
- case EVENT_McASP:
- selection = EVENT_SOURCE_COUNTER;
- event = 0;
- break;
- case EVENT_SLIMBUS:
+ case EVENT_TIMER :
selection = EVENT_SOURCE_COUNTER;
event = 0;
break;
- case EVENT_44100:
+ case EVENT_44100 :
selection = EVENT_SOURCE_COUNTER;
event = 0;
counter = EVENT_GENERATOR_COUNTER_44100;
break;
- case EVENT_DEFAULT:
- selection = EVENT_SOURCE_COUNTER;
- event = 0;
- break;
- default:
+ default :
abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_BLOCK_COPY_ERR);
+ abe_dbg_error_log (ABE_BLOCK_COPY_ERR);
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, EVENT_GENERATOR_COUNTER, &counter, 4);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, EVENT_SOURCE_SELECTION, &selection, 4);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, EVENT_GENERATOR_START, &start, 4);
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, AUDIO_ENGINE_SCHEDULER, &event, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC,
+ EVENT_GENERATOR_COUNTER, &counter, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC,
+ EVENT_SOURCE_SELECTION, &selection, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC,
+ EVENT_GENERATOR_START, &start, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC,
+ AUDIO_ENGINE_SCHEDULER, &event, 4);
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_write_event_generator);
/**
-* abe_read_use_case_opp() description for void abe_read_use_case_opp().
-*
-* Operations : returns the expected min OPP for a given use_case list
-*
-* Parameter : No parameter
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_read_use_case_opp(abe_use_case_id *u, abe_opp_t *o)
+ * abe_read_use_case_opp() - description for void abe_read_use_case_opp().
+ *
+ * returns the expected min OPP for a given use_case list
+ */
+abehal_status abe_read_use_case_opp (u32 *u, u32 *o)
{
- abe_uint32 opp, i;
- abe_use_case_id *ptr = u;
+ u32 opp, i;
+ u32 *ptr = u;
+#define MAX_READ_USE_CASE_OPP 10
+#define OPP_25 1
+#define OPP_50 2
+#define OPP_100 4
- #define MAX_READ_USE_CASE_OPP 10 /* there is no reason to have more use_cases */
- #define OPP_25 1
- #define OPP_50 2
- #define OPP_100 4
- _lock_enter
- _log(id_read_use_case_opp,(abe_uint32)(u),(abe_uint32)u>>8,(abe_uint32)u>>16)
+ _log(id_read_use_case_opp,(u32)u,(u32)u>>8,(u32)u>>16)
opp = i = 0;
do {
/* check for pointer errors */
if (i > MAX_READ_USE_CASE_OPP) {
abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_READ_USE_CASE_OPP_ERR);
+ abe_dbg_error_log (ABE_READ_USE_CASE_OPP_ERR);
break;
}
@@ -406,37 +432,36 @@ void abe_read_use_case_opp(abe_use_case_id *u, abe_opp_t *o)
/* OPP selection based on current firmware implementation */
switch (*ptr) {
- case ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE:
+ case ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE :
opp |= OPP_25;
break;
- case ABE_DRIFT_MANAGEMENT_FOR_AUDIO_PLAYER:
+ case ABE_DRIFT_MANAGEMENT_FOR_AUDIO_PLAYER :
opp |= OPP_100;
break;
- case ABE_DRIFT_MANAGEMENT_FOR_VOICE_CALL:
+ case ABE_DRIFT_MANAGEMENT_FOR_VOICE_CALL :
opp |= OPP_100;
break;
- case ABE_VOICE_CALL_ON_HEADSET_OR_EARPHONE_OR_BT:
+ case ABE_VOICE_CALL_ON_HEADSET_OR_EARPHONE_OR_BT :
opp |= OPP_50;
break;
- case ABE_MULTIMEDIA_AUDIO_RECORDER:
+ case ABE_MULTIMEDIA_AUDIO_RECORDER :
opp |= OPP_50;
break;
- case ABE_VIBRATOR_OR_HAPTICS:
+ case ABE_VIBRATOR_OR_HAPTICS :
opp |= OPP_100;
break;
- case ABE_VOICE_CALL_ON_HANDS_FREE_SPEAKER:
+ case ABE_VOICE_CALL_ON_HANDS_FREE_SPEAKER :
opp |= OPP_100;
break;
- case ABE_RINGER_TONES:
+ case ABE_RINGER_TONES :
opp |= OPP_100;
break;
- case ABE_VOICE_CALL_WITH_EARPHONE_ACTIVE_NOISE_CANCELLER:
+ case ABE_VOICE_CALL_WITH_EARPHONE_ACTIVE_NOISE_CANCELLER :
opp |= OPP_100;
break;
default:
break;
}
-
i++;
ptr++;
} while (*ptr != 0);
@@ -448,37 +473,35 @@ void abe_read_use_case_opp(abe_use_case_id *u, abe_opp_t *o)
else
*o = ABE_OPP25;
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_read_use_case_opp);
-
-
-/*
- * ABE_SET_OPP_PROCESSING
+/**
+ * abe_set_opp_processing - Set OPP mode for ABE Firmware
+ * @opp: OOPP mode
*
- * Parameter :
- * New processing network and OPP:
- * 0: Ultra Lowest power consumption audio player (no post-processing, no mixer)
- * 1: OPP 25% (simple multimedia features, including low-power player)
- * 2: OPP 50% (multimedia and voice calls)
- * 3: OPP100% (EANC, multimedia complex use-cases)
+ * New processing network and OPP:
+ * 0: Ultra Lowest power consumption audio player (no post-processing, no mixer)
+ * 1: OPP 25% (simple multimedia features, including low-power player)
+ * 2: OPP 50% (multimedia and voice calls)
+ * 3: OPP100% ( multimedia complex use-cases)
*
- * Operations :
- * Rearranges the FW task network to the corresponding OPP list of features.
- * The corresponding AE ports are supposed to be set/reset accordingly before this switch.
+ * Rearranges the FW task network to the corresponding OPP list of features.
+ * The corresponding AE ports are supposed to be set/reset accordingly before
+ * this switch.
*
- * Return value :
- * error code when the new OPP do not corresponds the list of activated features
*/
-void abe_set_opp_processing(abe_opp_t opp)
+abehal_status abe_set_opp_processing (u32 opp)
{
- abe_uint32 dOppMode32, sio_desc_address;
+ u32 dOppMode32, sio_desc_address, sio_desc_address_pp;
ABE_SIODescriptor desc;
+ ABE_SPingPongDescriptor desc_pp;
- _lock_enter
+ _lock_enter;
_log(id_set_opp_processing,opp,0,0)
- switch(opp){
+ switch (opp) {
case ABE_OPP25:
/* OPP25% */
dOppMode32 = DOPPMODE32_OPP25;
@@ -489,728 +512,687 @@ void abe_set_opp_processing(abe_opp_t opp)
break;
default:
abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_BLOCK_COPY_ERR);
- case ABE_OPP100:
+ abe_dbg_error_log (ABE_BLOCK_COPY_ERR);
+ case ABE_OPP100:
/* OPP100% */
dOppMode32 = DOPPMODE32_OPP100;
break;
}
/* Write Multiframe inside DMEM */
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_maxTaskBytesInSlot_ADDR, &dOppMode32, sizeof(abe_uint32));
-
- sio_desc_address = dmem_port_descriptors + (MM_DL_PORT * sizeof(ABE_SIODescriptor));
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc, sizeof (desc));
- if (dOppMode32 == DOPPMODE32_OPP100)
- desc.smem_addr1 = smem_mm_dl_opp100; /* ASRC input buffer, size 40 */
- else
- desc.smem_addr1 = smem_mm_dl_opp25; /* at OPP 25/50 or without ASRC */
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc, sizeof (desc));
-
- _lock_exit
-
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_maxTaskBytesInSlot_ADDR, &dOppMode32, sizeof (u32));
+
+ sio_desc_address = dmem_port_descriptors + (MM_DL_PORT *
+ sizeof(ABE_SIODescriptor));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address,
+ (u32*)&desc, sizeof (desc));
+
+ sio_desc_address_pp = D_PingPongDesc_ADDR;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address_pp,
+ (u32*)&desc_pp, sizeof (desc_pp));
+
+ if (dOppMode32 == DOPPMODE32_OPP100) {
+ /* ASRC input buffer, size 40 */
+ desc.smem_addr1 = smem_mm_dl_opp100;
+ desc_pp.smem_addr = smem_mm_dl_opp100;
+ } else {
+ /* at OPP 25/50 or without ASRC */
+ desc.smem_addr1 = smem_mm_dl_opp25;
+ desc_pp.smem_addr = smem_mm_dl_opp25;
+ }
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
+ (u32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address_pp,
+ (u32*)&desc_pp, sizeof (desc_pp));
+ return 0;
}
-/*
- * ABE_SET_PING_PONG_BUFFER
- *
- * Parameter :
- * Port_ID :
- * New data
+EXPORT_SYMBOL(abe_set_opp_processing);
+
+/**
+ * abe_set_ping_pong_buffer
+ * @port: ABE port ID
+ * @n_bytes: Size of Ping/Pong buffer
*
- * Operations :
- * Updates the next ping-pong buffer with "size" bytes copied from the
- * host processor. This API notifies the FW that the data transfer is done.
+ * Updates the next ping-pong buffer with "size" bytes copied from the
+ * host processor. This API notifies the FW that the data transfer is done.
*/
-void abe_set_ping_pong_buffer(abe_port_id port, abe_uint32 n_bytes)
+abehal_status abe_set_ping_pong_buffer (u32 port, u32 n_bytes)
{
- abe_uint32 sio_pp_desc_address, struct_offset, *src, n_samples, datasize, base_and_size;
+ u32 sio_pp_desc_address, struct_offset, n_samples, datasize,
+ base_and_size, *src;
ABE_SPingPongDescriptor desc_pp;
- _lock_enter
+
_log(id_set_ping_pong_buffer,port,n_bytes,n_bytes>>8)
/* ping_pong is only supported on MM_DL */
if (port != MM_DL_PORT) {
- abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_PARAMETER_ERROR);
+ abe_dbg_param |= ERR_API;
+ abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
/* translates the number of bytes in samples */
/* data size in DMEM words */
datasize = abe_dma_port_iter_factor(&((abe_port[port]).format));
+
/* data size in bytes */
datasize = datasize << 2;
n_samples = n_bytes / datasize;
abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_PingPongDesc_ADDR,
- (abe_uint32 *)&desc_pp, sizeof(desc_pp));
+ (u32 *)&desc_pp, sizeof(desc_pp));
/*
* read the port SIO descriptor and extract the current pointer
- * address after reading the counter
+ * address after reading the counter
*/
if ((desc_pp.counter & 0x1) == 0) {
- struct_offset = (abe_uint32)&(desc_pp.nextbuff0_BaseAddr) -
- (abe_uint32)&(desc_pp);
+ struct_offset = (u32)&(desc_pp.nextbuff0_BaseAddr) -
+ (u32)&(desc_pp);
base_and_size = desc_pp.nextbuff0_BaseAddr;
} else {
- struct_offset = (abe_uint32)&(desc_pp.nextbuff1_BaseAddr) -
- (abe_uint32)&(desc_pp);
+ struct_offset = (u32)&(desc_pp.nextbuff1_BaseAddr) -
+ (u32)&(desc_pp);
base_and_size = desc_pp.nextbuff1_BaseAddr;
}
- base_and_size = (base_and_size & 0xFFFFL) + ((abe_uint32)n_samples << 16);
+ base_and_size = (base_and_size & 0xFFFFL) + (n_samples << 16);
sio_pp_desc_address = D_PingPongDesc_ADDR + struct_offset;
src = &base_and_size;
abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_pp_desc_address,
- (abe_uint32 *)&base_and_size, sizeof(abe_uint32));
+ (u32 *)&base_and_size, sizeof(u32));
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_set_ping_pong_buffer);
-/*
- * ABE_READ_NEXT_PING_PONG_BUFFER
- *
- * Parameter :
- * Port_ID :
- * Returned address to the next buffer (byte offset from DMEM start)
- *
- * Operations :
- * Tell the next base address of the next ping_pong Buffer and its size
- *
+/**
+ * abe_read_next_ping_pong_buffer
+ * @port: ABE portID
+ * @p: Next buffer address (pointer)
+ * @n: Next buffer size (pointer)
*
+ * Tell the next base address of the next ping_pong Buffer and its size
*/
-void abe_read_next_ping_pong_buffer(abe_port_id port, abe_uint32 *p, abe_uint32 *n)
+abehal_status abe_read_next_ping_pong_buffer (u32 port, u32 *p, u32 *n)
{
- abe_uint32 sio_pp_desc_address;
+ u32 sio_pp_desc_address;
ABE_SPingPongDescriptor desc_pp;
- _lock_enter
+
_log(id_read_next_ping_pong_buffer,port,0,0)
/* ping_pong is only supported on MM_DL */
if (port != MM_DL_PORT) {
abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_PARAMETER_ERROR);
+ abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
- /* read the port SIO descriptor and extract the current pointer address after reading the counter */
+ /* read the port SIO descriptor and extract the current pointer
+ address after reading the counter */
sio_pp_desc_address = D_PingPongDesc_ADDR;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_pp_desc_address, (abe_uint32*)&desc_pp, sizeof(ABE_SPingPongDescriptor));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_pp_desc_address,
+ (u32*)&desc_pp, sizeof(ABE_SPingPongDescriptor));
if ((desc_pp.counter & 0x1) == 0) {
- (*p) = desc_pp.nextbuff0_BaseAddr;
+ _log(id_read_next_ping_pong_buffer,port,0,0)
+ *p = desc_pp.nextbuff0_BaseAddr;
} else {
- (*p) = desc_pp.nextbuff1_BaseAddr;
+ _log(id_read_next_ping_pong_buffer,port,1,0)
+ *p = desc_pp.nextbuff1_BaseAddr;
}
/* translates the number of samples in bytes */
- (*n) = abe_size_pingpong;
+ *n = abe_size_pingpong;
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_read_next_ping_pong_buffer);
-/*
- * ABE_INIT_PING_PONG_BUFFER
- *
- * Parameter :
- * size of the ping pong
- * number of buffers (2 = ping/pong)
- * returned address of the ping-pong list of base address (byte offset from DMEM start)
- *
- * Operations :
- * Computes the base address of the ping_pong buffers
- *
+/**
+ * abe_init_ping_pong_buffer
+ * @id: ABE port ID
+ * @size_bytes:size of the ping pong
+ * @n_buffers:number of buffers (2 = ping/pong)
+ * @p:returned address of the ping-pong list of base address (byte offset
+ from DMEM start)
+ *
+ * Computes the base address of the ping_pong buffers
*/
-void abe_init_ping_pong_buffer(abe_port_id id, abe_uint32 size_bytes, abe_uint32 n_buffers, abe_uint32 *p)
+abehal_status abe_init_ping_pong_buffer (u32 id, u32 size_bytes, u32 n_buffers, u32 *p)
{
- abe_uint32 i, dmem_addr;
+ u32 i, dmem_addr;
- _lock_enter
_log(id_init_ping_pong_buffer,id,size_bytes,n_buffers)
- /* ping_pong is supported in 2 buffers configuration right now but FW is ready for ping/pong/pung/pang... */
+ /* ping_pong is supported in 2 buffers configuration right now but FW
+ is ready for ping/pong/pung/pang... */
if (id != MM_DL_PORT || n_buffers > MAX_PINGPONG_BUFFERS) {
abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_PARAMETER_ERROR);
+ abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
for (i = 0; i < n_buffers; i++) {
dmem_addr = dmem_ping_pong_buffer + (i * size_bytes);
- abe_base_address_pingpong [i] = dmem_addr; /* base addresses of the ping pong buffers in U8 unit */
+
+ /* base addresses of the ping pong buffers in U8 unit */
+ abe_base_address_pingpong [i] = dmem_addr;
}
- abe_size_pingpong = size_bytes; /* global data */
- *p = (abe_uint32)dmem_ping_pong_buffer;
- _lock_exit
+ /* global data */
+ abe_size_pingpong = size_bytes;
+ *p = (u32)dmem_ping_pong_buffer;
+
+ return 0;
}
+EXPORT_SYMBOL(abe_init_ping_pong_buffer);
-/*
- * ABE_PLUG_SUBROUTINE
- *
- * Parameter :
- * id: returned sequence index after plugging a new subroutine
- * f : subroutine address to be inserted
- * n : number of parameters of this subroutine
- *
- * Returned value : error code
- *
- * Operations : register a list of subroutines for call-back purpose
+/**
+ * abe_plug_subroutine
+ * @id: returned sequence index after plugging a new subroutine
+ * @f: subroutine address to be inserted
+ * @n: number of parameters of this subroutine
+ * @params: pointer on parameters
*
+ * register a list of subroutines for call-back purpose
*/
-void abe_plug_subroutine(abe_uint32 *id, abe_subroutine2 f, abe_uint32 n, abe_uint32* params)
+abehal_status abe_plug_subroutine (u32 *id, abe_subroutine2 f, u32 n, u32* params)
{
- _lock_enter
- _log(id_plug_subroutine,(abe_uint32)(*id),(abe_uint32)f,n)
- abe_add_subroutine((abe_uint32 *)id, (abe_subroutine2)f,
- (abe_uint32)n, (abe_uint32*)params);
- _lock_exit
+ _log(id_plug_subroutine,(u32)(*id),(u32)f,n)
+ abe_add_subroutine(id, (abe_subroutine2)f, n, (u32*)params);
+ return 0;
}
+EXPORT_SYMBOL(abe_plug_subroutine);
-/*
- * ABE_SET_SEQUENCE_TIME_ACCURACY
- *
- * Parameter :
- * patch bit field used to guarantee the code compatibility without conditionnal compilation
- * Sequence index
- *
- * Operations : two counters are implemented in the firmware:
- * - one "fast" counter, generating an IRQ to the HAL for sequences scheduling, the rate is in the range 1ms .. 100ms
- * - one "slow" counter, generating an IRQ to the HAL for the management of ASRC drift, the rate is in the range 1s .. 100s
+/**
+ * abe_set_sequence_time_accuracy
+ * @fast: fast counter
+ * @slow: slow counter
*
- * Return value :
- * None.
*/
-void abe_set_sequence_time_accuracy(abe_micros_t fast, abe_micros_t slow)
+abehal_status abe_set_sequence_time_accuracy (u32 fast, u32 slow)
{
- abe_uint32 data;
+ u32 data;
- _lock_enter
_log(id_set_sequence_time_accuracy,fast,slow,0)
- data = minimum(MAX_UINT16, (abe_uint32) fast / FW_SCHED_LOOP_FREQ_DIV1000);
+ data = minimum(MAX_UINT16, fast / FW_SCHED_LOOP_FREQ_DIV1000);
abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_fastCounter_ADDR,
- (abe_uint32 *)&data, sizeof (data));
+ &data, sizeof (data));
- data = minimum(MAX_UINT16, (abe_uint32) slow / FW_SCHED_LOOP_FREQ_DIV1000);
+ data = minimum(MAX_UINT16, slow / FW_SCHED_LOOP_FREQ_DIV1000);
abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_slowCounter_ADDR,
- (abe_uint32 *)&data, sizeof (data));
+ &data, sizeof (data));
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_set_sequence_time_accuracy);
-/*
- * ABE_RESET_PORT
- *
- * Parameters :
- * id: port name
- *
- * Returned value : error code
- *
- * Operations : stop the port activity and reload default parameters on the associated processing features.
- * Clears the internal AE buffers.
+/**
+ * abe_reset_port
+ * @id: ABE port ID
*
+ * stop the port activity and reload default parameters on the associated
+ * processing features.
+ * Clears the internal AE buffers.
*/
-void abe_reset_port(abe_port_id id)
+abehal_status abe_reset_port (u32 id)
{
- _lock_enter
+
_log(id_reset_port,id,0,0)
- abe_port[id] = ((abe_port_t *) abe_port_init) [id];
- _lock_exit
+ abe_port [id] = ((abe_port_t *)abe_port_init) [id];
+ return 0;
}
+EXPORT_SYMBOL(abe_reset_port);
-/*
- * ABE_READ_REMAINING_DATA
- *
- * Parameter :
- * Port_ID :
- * size : pointer to the remaining number of 32bits words
- *
- * Operations :
- * computes the remaining amount of data in the buffer.
+/**
+ * abe_read_remaining_data
+ * @id: ABE port_ID
+ * @n: size pointer to the remaining number of 32bits words
*
- * Return value :
- * error code
+ * computes the remaining amount of data in the buffer.
*/
-void abe_read_remaining_data(abe_port_id port, abe_uint32 *n)
+abehal_status abe_read_remaining_data (u32 port, u32 *n)
{
- abe_uint32 sio_pp_desc_address;
+ u32 sio_pp_desc_address;
ABE_SPingPongDescriptor desc_pp;
- _lock_enter
+
_log(id_read_remaining_data,port,0,0)
/*
* read the port SIO descriptor and extract the
- * current pointer address after reading the counter
+ * current pointer address after reading the counter
*/
sio_pp_desc_address = D_PingPongDesc_ADDR;
abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_pp_desc_address,
- (abe_uint32*)&desc_pp, sizeof(ABE_SPingPongDescriptor));
- (*n) = desc_pp.workbuff_Samples;
-
- _lock_exit
+ (u32*)&desc_pp, sizeof(ABE_SPingPongDescriptor));
+ *n = desc_pp.workbuff_Samples;
+
+ return 0;
}
+EXPORT_SYMBOL(abe_read_remaining_data);
-/*
- * ABE_DISABLE_DATA_TRANSFER
- *
- * Parameter :
- * p: port indentifier
- *
- * Operations :
- * disables the ATC descriptor and stop IO/port activities
- * disable the IO task (@f = 0)
- * clear ATC DMEM buffer, ATC enabled
+/**
+ * abe_disable_data_transfer
+ * @id: ABE port id
*
- * Return value :
- * None.
+ * disables the ATC descriptor and stop IO/port activities
+ * disable the IO task (@f = 0)
+ * clear ATC DMEM buffer, ATC enabled
*/
-void abe_disable_data_transfer(abe_port_id id)
+abehal_status abe_disable_data_transfer (u32 id)
{
- _lock_enter
_log(id_disable_data_transfer,id,0,0)
/* local host variable status= "port is running" */
- abe_port[id].status = IDLE_P;
+ abe_port[id].status = OMAP_ABE_PORT_ACTIVITY_IDLE;
+
/* disable DMA requests */
abe_disable_dma_request(id);
+
/* disable ATC transfers */
abe_init_atc(id);
- abe_clean_temporary_buffers(id);
-
- _lock_exit
+ abe_clean_temporary_buffers (id);
+ return 0;
}
+EXPORT_SYMBOL(abe_disable_data_transfer);
-/*
- * ABE_ENABLE_DATA_TRANSFER
- *
- * Parameter :
- * p: port indentifier
- *
- * Operations :
- * enables the ATC descriptor
- * reset ATC pointers
- * enable the IO task (@f <> 0)
+/**
+ * abe_enable_data_transfer
+ * @ip: ABE port id
*
- * Return value :
- * None.
+ * enables the ATC descriptor
+ * reset ATC pointers
+ * enable the IO task (@f <> 0)
*/
-void abe_enable_data_transfer(abe_port_id id)
+abehal_status abe_enable_data_transfer (u32 id)
{
abe_port_protocol_t *protocol;
abe_data_format_t format;
- _lock_enter
_log(id_enable_data_transfer,id,0,0)
- abe_clean_temporary_buffers(id);
+ /* check firmware status bit for this */
+ /*if (abe_port[id].status == OMAP_ABE_PORT_ACTIVITY_RUNNING)
+ return 0;*/
+
+ abe_clean_temporary_buffers (id);
if (id == PDM_UL_PORT) {
/* initializes the ABE ATC descriptors in DMEM - MCPDM_UL */
protocol = &(abe_port[PDM_UL_PORT].protocol);
format = abe_port[PDM_UL_PORT].format;
- abe_init_atc(PDM_UL_PORT);
- abe_init_io_tasks(PDM_UL_PORT, &format, protocol);
+ abe_init_atc (PDM_UL_PORT);
+ abe_init_io_tasks (PDM_UL_PORT, &format, protocol);
}
if (id == PDM_DL_PORT) {
/* initializes the ABE ATC descriptors in DMEM - MCPDM_DL */
protocol = &(abe_port[PDM_DL_PORT].protocol);
format = abe_port[PDM_DL_PORT].format;
- abe_init_atc(PDM_DL_PORT);
- abe_init_io_tasks(PDM_DL_PORT, &format, protocol);
+ abe_init_atc (PDM_DL_PORT);
+ abe_init_io_tasks (PDM_DL_PORT, &format, protocol);
}
if (id == DMIC_PORT) {
/* one DMIC port enabled = all DMICs enabled,
* since there is a single DMIC path for all DMICs */
protocol = &(abe_port[DMIC_PORT].protocol);
format = abe_port[DMIC_PORT].format;
- abe_init_atc(DMIC_PORT);
- abe_init_io_tasks(DMIC_PORT, &format, protocol);
+ abe_init_atc (DMIC_PORT);
+ abe_init_io_tasks (DMIC_PORT, &format, protocol);
+ }
+ if (id == VX_UL_PORT) {
+ /* Init VX_UL ASRC and enable its adaptation */
+ abe_init_asrc_vx_ul (250);
+ }
+ if (id == VX_DL_PORT) {
+ /* Init VX_DL ASRC and enable its adaptation */
+ abe_init_asrc_vx_dl (250);
}
/* local host variable status= "port is running" */
- abe_port[id].status = RUN_P;
+ abe_port[id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
/* enable DMA requests */
abe_enable_dma_request(id);
- _lock_exit
+
+ return 0;
}
+EXPORT_SYMBOL(abe_enable_data_transfer);
-/*
- * ABE_SET_DMIC_FILTER
- *
- * Parameter :
- * DMIC decimation ratio : 16/25/32/40
- *
- * Operations :
- * Loads in CMEM a specific list of coefficients depending on the DMIC sampling
- * frequency (2.4MHz or 3.84MHz). This table compensates the DMIC decimator roll-off at 20kHz.
- * The default table is loaded with the DMIC 2.4MHz recommended configuration.
+/**
+ * abe_set_dmic_filter
+ * @d: DMIC decimation ratio : 16/25/32/40
*
- * Return value :
- * None.
+ * Loads in CMEM a specific list of coefficients depending on the DMIC sampling
+ * frequency (2.4MHz or 3.84MHz). This table compensates the DMIC decimator
+ * roll-off at 20kHz.
+ * The default table is loaded with the DMIC 2.4MHz recommended configuration.
*/
-void abe_set_dmic_filter(abe_dmic_ratio_t d)
+abehal_status abe_set_dmic_filter (u32 d)
{
- abe_int32 *src;
+ s32 *src;
+
- _lock_enter
_log(id_set_dmic_filter,d,0,0)
- switch(d) {
- case ABE_DEC16:
- src = (abe_int32 *)abe_dmic_16;
+ switch (d) {
+ case ABE_DEC16 :
+ src = (s32 *)abe_dmic_16;
break;
- case ABE_DEC25:
- src = (abe_int32 *) abe_dmic_25;
+ case ABE_DEC25 :
+ src = (s32 *)abe_dmic_25;
break;
- case ABE_DEC32:
- src = (abe_int32 *) abe_dmic_32;
+ case ABE_DEC32 :
+ src = (s32 *)abe_dmic_32;
break;
default:
- case ABE_DEC40:
- src = (abe_int32 *) abe_dmic_40;
+ case ABE_DEC40 :
+ src = (s32 *)abe_dmic_40;
break;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_CMEM,
- C_98_48_LP_Coefs_ADDR,
- (abe_uint32 *)src, C_98_48_LP_Coefs_sizeof << 2);
- _lock_exit
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM,
+ C_98_48_LP_Coefs_ADDR,
+ (u32 *)src, C_98_48_LP_Coefs_sizeof << 2);
+
+ return 0;
}
+EXPORT_SYMBOL(abe_set_dmic_filter);
/**
-* @fn abe_connect_cbpr_dmareq_port()
-*
-* Operations : enables the data echange between a DMA and the ABE through the
-* CBPr registers of AESS.
-*
-* Parameters :
-* id: port name
-* f : desired data format
-* d : desired dma_request line (0..7)
-* a : returned pointer to the base address of the CBPr register and number of
-* samples to exchange during a DMA_request.
-*
-* @see ABE_API.h
-*/
-void abe_connect_cbpr_dmareq_port(abe_port_id id, abe_data_format_t *f, abe_uint32 d, abe_dma_t *returned_dma_t)
+ * abe_connect_cbpr_dmareq_port
+ * @id: port name
+ * @f: desired data format
+ * @d: desired dma_request line (0..7)
+ * @a: returned pointer to the base address of the CBPr register and number of
+ * samples to exchange during a DMA_request.
+ *
+ * enables the data echange between a DMA and the ABE through the
+ * CBPr registers of AESS.
+ */
+
+abehal_status abe_connect_cbpr_dmareq_port (u32 id, abe_data_format_t *f, u32 d,
+ abe_dma_t *returned_dma_t)
{
- _lock_enter
- _log(id_connect_cbpr_dmareq_port,id,f->f,f->samp_format)
- abe_port[id] = ((abe_port_t *)abe_port_init)[id];
+ _log(id_connect_cbpr_dmareq_port,id,f->f,f->samp_format)
- abe_port[id].format = *f;
+ abe_port [id] = ((abe_port_t *) abe_port_init) [id];
+ (abe_port [id]).format = (*f);
abe_port[id].protocol.protocol_switch = DMAREQ_PORT_PROT;
abe_port[id].protocol.p.prot_dmareq.iter = abe_dma_port_iteration(f);
abe_port[id].protocol.p.prot_dmareq.dma_addr = ABE_DMASTATUS_RAW;
abe_port[id].protocol.p.prot_dmareq.dma_data = (1 << d);
- abe_port[id].status = RUN_P;
+ abe_port [id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
/* load the micro-task parameters */
- abe_init_io_tasks(id, &((abe_port [id]).format), &((abe_port [id]).protocol));
+ abe_init_io_tasks (id, &((abe_port [id]).format),
+ &((abe_port [id]).protocol));
/* load the dma_t with physical information from AE memory mapping */
- abe_init_dma_t(id, &((abe_port [id]).protocol));
+ abe_init_dma_t (id, &((abe_port [id]).protocol));
/* load the ATC descriptors - disabled */
- abe_init_atc(id);
+ abe_init_atc (id);
/* return the dma pointer address */
- abe_read_port_address(id, returned_dma_t);
+ abe_read_port_address (id, returned_dma_t);
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_connect_cbpr_dmareq_port);
/**
-* @fn abe_connect_dmareq_ping_pong_port()
-*
-* Operations : enables the data echanges between a DMA and a direct access to
-* the DMEM memory of ABE. On each dma_request activation the DMA will exchange
-* "s" bytes and switch to the "pong" buffer for a new buffer exchange.
-*
-* Parameters :
-* id: port name
-* f : desired data format
-* d : desired dma_request line (0..7)
-* s : half-buffer (ping) size
-*
-* a : returned pointer to the base address of the ping-pong buffer and number of samples to exchange during a DMA_request.
-*
-* @see ABE_API.h
-*/
-void abe_connect_dmareq_ping_pong_port(abe_port_id id, abe_data_format_t *f, abe_uint32 d, abe_uint32 s, abe_dma_t *returned_dma_t)
+ * abe_connect_dmareq_ping_pong_port
+ * @id: port name
+ * @f: desired data format
+ * @d: desired dma_request line (0..7)
+ * @s: half-buffer (ping) size
+ * @a: returned pointer to the base address of the ping-pong buffer and number
+ * of samples to exchange during a DMA_request.
+ *
+ * enables the data echanges between a DMA and a direct access to
+ * the DMEM memory of ABE. On each dma_request activation the DMA will exchange
+ * "s" bytes and switch to the "pong" buffer for a new buffer exchange.
+ */
+abehal_status abe_connect_dmareq_ping_pong_port (u32 id, abe_data_format_t *f,
+ u32 d, u32 s, abe_dma_t *returned_dma_t)
{
abe_dma_t dma1;
- _lock_enter
+
_log(id_connect_dmareq_ping_pong_port,id,f->f,f->samp_format)
/* ping_pong is only supported on MM_DL */
- if (id != MM_DL_PORT)
- {
- abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_PARAMETER_ERROR);
+ if (id != MM_DL_PORT) {
+ abe_dbg_param |= ERR_API;
+ abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
/* declare PP buffer and prepare the returned dma_t */
- abe_init_ping_pong_buffer(MM_DL_PORT, s, 2, (abe_uint32 *)&(returned_dma_t->data));
+ abe_init_ping_pong_buffer (MM_DL_PORT, s, 2,
+ (u32 *)&(returned_dma_t->data));
+
- abe_port[id] = ((abe_port_t *) abe_port_init) [id];
+ abe_port [id] = ((abe_port_t *) abe_port_init) [id];
- (abe_port[id]).format = (*f);
- (abe_port[id]).protocol.protocol_switch = PINGPONG_PORT_PROT;
- (abe_port[id]).protocol.p.prot_pingpong.buf_addr = dmem_ping_pong_buffer;
- (abe_port[id]).protocol.p.prot_pingpong.buf_size = s;
- (abe_port[id]).protocol.p.prot_pingpong.irq_addr = ABE_DMASTATUS_RAW;
- (abe_port[id]).protocol.p.prot_pingpong.irq_data = (1 << d);
+ (abe_port [id]).format = (*f);
+ (abe_port [id]).protocol.protocol_switch = PINGPONG_PORT_PROT;
+ (abe_port [id]).protocol.p.prot_pingpong.buf_addr =
+ dmem_ping_pong_buffer;
+ (abe_port [id]).protocol.p.prot_pingpong.buf_size = s;
+ (abe_port [id]).protocol.p.prot_pingpong.irq_addr = ABE_DMASTATUS_RAW;
+ (abe_port [id]).protocol.p.prot_pingpong.irq_data = (1 << d);
- abe_port [id].status = RUN_P;
+ abe_port [id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
/* load the micro-task parameters DESC_IO_PP */
- abe_init_io_tasks(id, &((abe_port [id]).format), &((abe_port [id]).protocol));
+ abe_init_io_tasks (id, &((abe_port [id]).format),
+ &((abe_port [id]).protocol));
/* load the dma_t with physical information from AE memory mapping */
- abe_init_dma_t(id, &((abe_port [id]).protocol));
+ abe_init_dma_t (id, &((abe_port [id]).protocol));
- dma1.data = (abe_uint32 *)(abe_port [id].dma.data + ABE_DMEM_BASE_ADDRESS_L3);
+ dma1.data = (u32 *)(abe_port [id].dma.data + ABE_DMEM_BASE_ADDRESS_L3);
dma1.iter = abe_port [id].dma.iter;
- (*returned_dma_t) = dma1;
+ *returned_dma_t = dma1;
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_connect_dmareq_ping_pong_port);
/**
-* @fn abe_connect_irq_ping_pong_port()
-*
-* Operations : enables the data echanges between a direct access to the DMEM
-* memory of ABE using cache flush. On each IRQ activation a subroutine
-* registered with "abe_plug_subroutine" will be called. This subroutine
-* will generate an amount of samples, send them to DMEM memory and call
-* "abe_set_ping_pong_buffer" to notify the new amount of samples in the
-* pong buffer.
-*
-* Parameters :
-* id: port name
-* f : desired data format
-* I : index of the call-back subroutine to call
-* s : half-buffer (ping) size
-*
-* p: returned base address of the first (ping) buffer)
-*
-* @see ABE_API.h
-*/
-void abe_connect_irq_ping_pong_port(abe_port_id id, abe_data_format_t *f,
- abe_uint32 subroutine_id, abe_uint32 size,
- abe_uint32 *sink, abe_uint32 dsp_mcu_flag)
+ * abe_connect_irq_ping_pong_port
+ * @id: port name
+ * @f: desired data format
+ * @I: index of the call-back subroutine to call
+ * @s: half-buffer (ping) size
+ * @p: returned base address of the first (ping) buffer)
+ *
+ * enables the data echanges between a direct access to the DMEM
+ * memory of ABE using cache flush. On each IRQ activation a subroutine
+ * registered with "abe_plug_subroutine" will be called. This subroutine
+ * will generate an amount of samples, send them to DMEM memory and call
+ * "abe_set_ping_pong_buffer" to notify the new amount of samples in the
+ * pong buffer.
+ */
+abehal_status abe_connect_irq_ping_pong_port (u32 id, abe_data_format_t *f,
+ u32 subroutine_id, u32 size,
+ u32 *sink, u32 dsp_mcu_flag)
{
- _lock_enter
+
+
_log(id_connect_irq_ping_pong_port,id,f->f,f->samp_format)
/* ping_pong is only supported on MM_DL */
if (id != MM_DL_PORT) {
abe_dbg_param |= ERR_API;
- abe_dbg_error_log(ABE_PARAMETER_ERROR);
+ abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
- abe_port[id] = ((abe_port_t *) abe_port_init)[id];
- (abe_port[id]).format = (*f);
- (abe_port[id]).protocol.protocol_switch = PINGPONG_PORT_PROT;
- (abe_port[id]).protocol.p.prot_pingpong.buf_addr = dmem_ping_pong_buffer;
- (abe_port[id]).protocol.p.prot_pingpong.buf_size = size;
- (abe_port[id]).protocol.p.prot_pingpong.irq_data = (1);
+ abe_port [id] = ((abe_port_t *) abe_port_init) [id];
+ (abe_port [id]).format = (*f);
+ (abe_port [id]).protocol.protocol_switch = PINGPONG_PORT_PROT;
+ (abe_port [id]).protocol.p.prot_pingpong.buf_addr =
+ dmem_ping_pong_buffer;
+ (abe_port [id]).protocol.p.prot_pingpong.buf_size = size;
+ (abe_port [id]).protocol.p.prot_pingpong.irq_data = (1);
- abe_init_ping_pong_buffer(MM_DL_PORT, size, 2, sink);
+ abe_init_ping_pong_buffer (MM_DL_PORT, size, 2, sink);
if (dsp_mcu_flag == PING_PONG_WITH_MCU_IRQ)
- (abe_port [id]).protocol.p.prot_pingpong.irq_addr = ABE_MCU_IRQSTATUS_RAW;
+ (abe_port [id]).protocol.p.prot_pingpong.irq_addr =
+ ABE_MCU_IRQSTATUS_RAW;
if (dsp_mcu_flag == PING_PONG_WITH_DSP_IRQ)
- (abe_port [id]).protocol.p.prot_pingpong.irq_addr = ABE_DSP_IRQSTATUS_RAW;
+ (abe_port [id]).protocol.p.prot_pingpong.irq_addr =
+ ABE_DSP_IRQSTATUS_RAW;
- abe_port[id].status = RUN_P;
+ abe_port [id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
/* load the micro-task parameters */
- abe_init_io_tasks(id, &((abe_port [id]).format), &((abe_port [id]).protocol));
+ abe_init_io_tasks (id, &((abe_port [id]).format),
+ &((abe_port [id]).protocol));
/* load the ATC descriptors - disabled */
- abe_init_atc(id);
+ abe_init_atc (id);
+
+ *sink = (abe_port [id]).protocol.p.prot_pingpong.buf_addr;
- (*sink)= (abe_port [id]).protocol.p.prot_pingpong.buf_addr;
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_connect_irq_ping_pong_port);
/**
-* @fn abe_connect_serial_port()
-*
-* Operations : enables the data echanges between a McBSP and an ATC buffer in
-* DMEM. This API is used connect 48kHz McBSP streams to MM_DL and 8/16kHz
-* voice streams to VX_UL, VX_DL, BT_VX_UL, BT_VX_DL. It abstracts the
-* abe_write_port API.
-*
-* Parameters :
-* id: port name
-* f : data format
-* i : peripheral ID (McBSP #1, #2, #3)
-*
-* @see ABE_API.h
-*/
-void abe_connect_serial_port(abe_port_id id, abe_data_format_t *f, abe_mcbsp_id mcbsp_id)
+ * abe_connect_serial_port()
+ * @id: port name
+ * @f: data format
+ * @i: peripheral ID (McBSP #1, #2, #3)
+ *
+ * Operations : enables the data echanges between a McBSP and an ATC buffer in
+ * DMEM. This API is used connect 48kHz McBSP streams to MM_DL and 8/16kHz
+ * voice streams to VX_UL, VX_DL, BT_VX_UL, BT_VX_DL. It abstracts the
+ * abe_write_port API.
+ */
+abehal_status abe_connect_serial_port (u32 id, abe_data_format_t *f, u32 mcbsp_id)
{
- abe_use_case_id UC_NULL[] = {(abe_use_case_id)0};
- abe_opp_t OPP;
+ u32 UC_NULL[] = {0};
+ u32 OPP;
abe_hw_config_init_t CONFIG;
- _lock_enter
_log(id_connect_serial_port,id,f->samp_format,mcbsp_id)
abe_port [id] = ((abe_port_t *) abe_port_init) [id];
(abe_port [id]).format = (*f);
+
(abe_port [id]).protocol.protocol_switch = SERIAL_PORT_PROT;
+
/* McBSP peripheral connected to ATC */
(abe_port [id]).protocol.p.prot_serial.desc_addr = mcbsp_id*ATC_SIZE;
- abe_read_hardware_configuration(UC_NULL, &OPP, &CONFIG); /* check the iteration of ATC */
+ /* check the iteration of ATC */
+ abe_read_hardware_configuration (UC_NULL, &OPP, &CONFIG);
- (abe_port[id]).protocol.p.prot_serial.iter = abe_dma_port_iter_factor(f);
+ (abe_port [id]).protocol.p.prot_serial.iter =
+ abe_dma_port_iter_factor (f);
- abe_port[id].status = RUN_P;
+ abe_port [id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
/* load the micro-task parameters */
- abe_init_io_tasks(id, &((abe_port[id]).format), &((abe_port[id]).protocol));
- abe_init_atc(id); /* load the ATC descriptors - disabled */
-
- _lock_exit
-}
+ abe_init_io_tasks(id, &((abe_port[id]).format),
+ &((abe_port[id]).protocol));
-/*
- * ABE_READ_PORT_DESCRIPTOR
- *
- * Parameter :
- * id: port name
- * f : input pointer to the data format
- * p : input pointer to the protocol description
- * dma : output pointer to the DMA iteration and data destination pointer :
- *
- * Operations :
- * returns the port parameters from the HAL internal buffer.
- *
- * Return value :
- * error code in case the Port_id is not compatible with the current OPP value
- */
-void abe_read_port_descriptor(abe_port_id port, abe_data_format_t *f, abe_port_protocol_t *p)
-{
- (*f) = (abe_port[port]).format;
- (*p) = (abe_port[port]).protocol;
-}
-
-/*
- * ABE_READ_APS_ENERGY
- *
- * Parameter :
- * Port_ID : port ID supporting APS
- * APS data struct pointer
- *
- * Operations :
- * Returns the estimated amount of energy
- *
- * Return value :
- * error code when the Port is not activated.
- */
-void abe_read_aps_energy(abe_port_id *p, abe_gain_t *a)
-{
- just_to_avoid_the_many_warnings_abe_port_id = *p;
- just_to_avoid_the_many_warnings_abe_gain_t = *a;
+ /* load the ATC descriptors - disabled */
+ abe_init_atc (id);
+ return 0;
}
+EXPORT_SYMBOL(abe_connect_serial_port);
/**
-* @fn abe_connect_slimbus_port()
-*
-* Operations : enables the data echanges between 1/2 SB and an ATC buffers in
-* DMEM.
-*
-* Parameters :
-* id: port name
-* f : data format
-* i : peripheral ID (McBSP #1, #2, #3)
-* j : peripheral ID (McBSP #1, #2, #3)
-*
-* @see ABE_API.h
-*/
-void abe_connect_slimbus_port(abe_port_id id, abe_data_format_t *f,
- abe_slimbus_id sb_port1, abe_slimbus_id sb_port2)
+ * abe_connect_slimbus_port
+ * @id: port name
+ * @f: data format
+ * @i: peripheral ID (McBSP #1, #2, #3)
+ * @j: peripheral ID (McBSP #1, #2, #3)
+ *
+ * enables the data echanges between 1/2 SB and an ATC buffers in
+ * DMEM.
+ */
+abehal_status abe_connect_slimbus_port (u32 id, abe_data_format_t *f,
+ u32 sb_port1, u32 sb_port2)
{
- abe_use_case_id UC_NULL[] = {(abe_use_case_id)0};
- abe_opp_t OPP;
+ u32 UC_NULL[] = {0};
+ u32 OPP;
abe_hw_config_init_t CONFIG;
- abe_uint32 iter;
+ u32 iter;
+
- _lock_enter
_log(id_connect_slimbus_port,id,f->samp_format,sb_port2)
- abe_port[id] = ((abe_port_t *) abe_port_init) [id];
- (abe_port[id]).format = (*f);
- (abe_port[id]).protocol.protocol_switch = SLIMBUS_PORT_PROT;
+ abe_port [id] = ((abe_port_t *) abe_port_init) [id];
+ (abe_port [id]).format = (*f);
+ (abe_port [id]).protocol.protocol_switch = SLIMBUS_PORT_PROT;
+
/* SB1 peripheral connected to ATC */
- (abe_port[id]).protocol.p.prot_slimbus.desc_addr1= sb_port1*ATC_SIZE;
+ (abe_port [id]).protocol.p.prot_slimbus.desc_addr1=
+ sb_port1*ATC_SIZE;
+
/* SB2 peripheral connected to ATC */
- (abe_port[id]).protocol.p.prot_slimbus.desc_addr2= sb_port2*ATC_SIZE;
+ (abe_port [id]).protocol.p.prot_slimbus.desc_addr2=
+ sb_port2*ATC_SIZE;
/* check the iteration of ATC */
- abe_read_hardware_configuration(UC_NULL, &OPP, &CONFIG);
+ abe_read_hardware_configuration (UC_NULL, &OPP, &CONFIG);
iter = CONFIG.SLIMBUS_DCT_FIFO_SETUP_REG__SB_THRESHOLD;
+
/* SLIMBUS iter should be 1 */
- (abe_port[id]).protocol.p.prot_serial.iter = iter;
+ (abe_port [id]).protocol.p.prot_serial.iter = iter;
+
+ abe_port [id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
- abe_port[id].status = RUN_P;
/* load the micro-task parameters */
- abe_init_io_tasks(id, &((abe_port [id]).format), &((abe_port [id]).protocol));
+ abe_init_io_tasks (id, &((abe_port [id]).format),
+ &((abe_port [id]).protocol));
+
/* load the ATC descriptors - disabled */
- abe_init_atc(id);
+ abe_init_atc (id);
- _lock_exit
+ return 0;
}
-
+EXPORT_SYMBOL(abe_connect_slimbus_port);
/**
-* @fn abe_connect_tdm_port()
-*
-* Operations : enables the data echanges between TDM McBSP ATC buffers in
-* DMEM and 1/2 SMEM buffers
-*
-* Parameters :
-* id: port name
-* f : data format
-* i : peripheral ID (McBSP #1, #2, #3)
-* j : peripheral ID (McBSP #1, #2, #3)
-*
-* @see ABE_API.h
-*/
-
-void abe_connect_tdm_port(abe_port_id id, abe_data_format_t *f, abe_mcbsp_id mcbsp_id)
+ * abe_connect_tdm_port
+ * @id: port name
+ * @f: data format
+ * @i: peripheral ID (McBSP #1, #2, #3)
+ * @j: peripheral ID (McBSP #1, #2, #3)
+ *
+ * enables the data echanges between TDM McBSP ATC buffers in
+ * DMEM and 1/2 SMEM buffers
+ */
+abehal_status abe_connect_tdm_port (u32 id, abe_data_format_t *f, u32 mcbsp_id)
{
- abe_use_case_id UC_NULL[] = {(abe_use_case_id)0};
- abe_opp_t OPP;
+ u32 UC_NULL[] = {0};
+ u32 OPP;
abe_hw_config_init_t CONFIG;
- abe_uint32 iter;
+ u32 iter;
+
- _lock_enter
_log(id_connect_tdm_port,id,f->samp_format,mcbsp_id)
abe_port [id] = ((abe_port_t *) abe_port_init) [id];
(abe_port [id]).format = (*f);
(abe_port [id]).protocol.protocol_switch = TDM_SERIAL_PORT_PROT;
/* McBSP peripheral connected to ATC */
- (abe_port [id]).protocol.p.prot_serial.desc_addr = mcbsp_id*ATC_SIZE;
+ (abe_port [id]).protocol.p.prot_serial.desc_addr =
+ mcbsp_id*ATC_SIZE;
/* check the iteration of ATC */
- abe_read_hardware_configuration (UC_NULL, &OPP, &CONFIG);
+ abe_read_hardware_configuration (UC_NULL, &OPP, &CONFIG);
if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN)
iter = CONFIG.MCBSP_THRSH1_REG_REG__RTHRESHOLD;
else
@@ -1218,316 +1200,309 @@ void abe_connect_tdm_port(abe_port_id id, abe_data_format_t *f, abe_mcbsp_id mcb
/* McBSP iter should be 1 */
(abe_port[id]).protocol.p.prot_serial.iter = iter;
- abe_port[id].status = RUN_P;
+ abe_port [id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
+
/* load the micro-task parameters */
- abe_init_io_tasks(id, &((abe_port [id]).format), &((abe_port [id]).protocol));
+ abe_init_io_tasks(id, &((abe_port [id]).format),
+ &((abe_port [id]).protocol));
+
/* load the ATC descriptors - disabled */
abe_init_atc(id);
- _lock_exit
+
+ return 0;
}
+EXPORT_SYMBOL(abe_connect_tdm_port);
-/*
- * ABE_READ_PORT_ADDRESS
- *
- * Parameter :
- * dma : output pointer to the DMA iteration and data destination pointer
- *
- * Operations :
- * This API returns the address of the DMA register used on this audio port.
- * Depending on the protocol being used, adds the base address offset L3 (DMA) or MPU (ARM)
+/**
+ * abe_read_port_address
+ * @dma: output pointer to the DMA iteration and data destination pointer
*
- * Return value :
+ * This API returns the address of the DMA register used on this audio port.
+ * Depending on the protocol being used, adds the base address offset L3
+ * (DMA) or MPU (ARM)
*/
-void abe_read_port_address(abe_port_id port, abe_dma_t *dma2)
+abehal_status abe_read_port_address (u32 port, abe_dma_t *dma2)
{
abe_dma_t_offset dma1;
- abe_uint32 protocol_switch;
+ u32 protocol_switch;
+
- _lock_enter
_log(id_read_port_address,port,0,0)
- dma1 = (abe_port[port]).dma;
+ dma1 = (abe_port[port]).dma;
protocol_switch = abe_port[port].protocol.protocol_switch;
switch (protocol_switch) {
case PINGPONG_PORT_PROT:
- /* return the base address of the ping buffer in L3 and L4 spaces */
- (*dma2).data = (void *)(dma1.data + ABE_DMEM_BASE_ADDRESS_L3);
+ /* return the base address of the buffer in L3 and L4 spaces */
+ (*dma2).data =(void *)(dma1.data + ABE_DMEM_BASE_ADDRESS_L3);
(*dma2).l3_dmem = (void *)(dma1.data + ABE_DMEM_BASE_ADDRESS_L3);
(*dma2).l4_dmem = (void *)(dma1.data + ABE_DMEM_BASE_ADDRESS_L4);
break;
- case DMAREQ_PORT_PROT:
+ case DMAREQ_PORT_PROT :
/* return the CBPr(L3), DMEM(L3), DMEM(L4) address */
- (*dma2).data = (void *)(dma1.data + ABE_ATC_BASE_ADDRESS_L3);
+ (*dma2).data =(void *)(dma1.data + ABE_ATC_BASE_ADDRESS_L3);
(*dma2).l3_dmem =
- (void *)((abe_port[port]).protocol.p.prot_dmareq.buf_addr +
- ABE_DMEM_BASE_ADDRESS_L3);
- (*dma2).l4_dmem = (void *)((abe_port[port]).protocol.p.prot_dmareq.buf_addr + ABE_DMEM_BASE_ADDRESS_L4);
+ (void *)((abe_port[port]).protocol.p.
+ prot_dmareq.buf_addr +
+ ABE_DMEM_BASE_ADDRESS_L3);
+ (*dma2).l4_dmem =
+ (void *)((abe_port[port]).protocol.p.
+ prot_dmareq.buf_addr +
+ ABE_DMEM_BASE_ADDRESS_L4);
break;
default:
break;
}
-
- (*dma2).iter = (dma1.iter);
-
- _lock_exit
+ (*dma2).iter = (dma1.iter);
+ return 0;
}
+EXPORT_SYMBOL(abe_read_port_address);
-/*
- * ABE_WRITE_EQUALIZER
- *
- * Parameter :
- * Id : name of the equalizer
- * Param : equalizer coefficients
- *
- * Operations :
- * Load the coefficients in CMEM. This API can be called when the corresponding equalizer
- * is not activated. After reloading the firmware the default coefficients corresponds to
- * "no equalizer feature". Loading all coefficients with zeroes disables the feature.
+/**
+ * abe_write_equalizer
+ * @id: name of the equalizer
+ * @param : equalizer coefficients
*
- * Return value :
- * None.
+ * Load the coefficients in CMEM.
*/
-void abe_write_equalizer(abe_equ_id id, abe_equ_t *param)
+abehal_status abe_write_equalizer (u32 id, abe_equ_t *param)
{
- abe_uint32 eq_offset, length, *src;
+ u32 eq_offset, length, *src;
- _lock_enter
_log(id_write_equalizer,id,0,0)
- switch(id) {
+ switch (id) {
default:
- case EQ1:
+ case EQ1 :
eq_offset = C_DL1_Coefs_ADDR;
break;
- case EQ2L:
+ case EQ2L :
eq_offset = C_DL2_L_Coefs_ADDR;
break;
- case EQ2R:
+ case EQ2R :
eq_offset = C_DL2_R_Coefs_ADDR;
break;
- case EQSDT:
+ case EQSDT :
eq_offset = C_SDT_Coefs_ADDR;
break;
- case EQMIC:
+ case EQMIC :
eq_offset = C_98_48_LP_Coefs_ADDR;
break;
- case APS1:
+ case APS1 :
eq_offset = C_APS_DL1_coeffs1_ADDR;
break;
- case APS2L:
+ case APS2L :
eq_offset = C_APS_DL2_L_coeffs1_ADDR;
break;
- case APS2R:
+ case APS2R :
eq_offset = C_APS_DL2_R_coeffs1_ADDR;
break;
}
-
length = param->equ_length;
- src = (abe_uint32 *)((param->coef).type1);
+ src = (u32 *)((param->coef).type1);
- eq_offset <<=2; /* translate in bytes */
- length <<=2; /* translate in bytes */
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_CMEM, eq_offset, src, length);
- _lock_exit
-}
+ /* translate in bytes */
+ eq_offset <<=2;
-/*
- * ABE_SET_ASRC_DRIFT_CONTROL
- *
- * Parameter :
- * Id : name of the asrc
- * f: flag which enables (1) the automatic computation of drift parameters
- *
- * Operations :
- * When an audio port is connected to an hardware peripheral (MM_DL connected to a McBSP for
- * example), the drift compensation can be managed in "forced mode" (f=0) or "adaptive mode"
- * (f=1). In the first case the drift is managed with the usage of the API "abe_write_asrc".
- * In the second case the firmware will generate on periodic basis an information about the
- * observed drift, the HAL will reload the drift parameter based on those observations.
- *
- * Return value :
- * None.
- */
-void abe_set_asrc_drift_control(abe_asrc_id id, abe_uint32 f)
-{
- _lock_enter
- _log(id_set_asrc_drift_control,id,f,f>>8)
- _lock_exit
+ /* translate in bytes */
+ length <<=2;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, eq_offset,
+ src, length);
+
+ return 0;
}
+EXPORT_SYMBOL(abe_write_equalizer);
-/*
- * ABE_WRITE_ASRC
- *
- * Parameter :
- * Id : name of the asrc
- * param : drift value t compensate
- *
- * Operations :
- * Load the drift coefficients in FW memory. This API can be called when the corresponding
- * ASRC is not activated. After reloading the firmware the default coefficients corresponds
- * to "no ASRC activated". Loading the drift value with zero disables the feature.
- *
- * Return value :
- * None.
+/**
+ * abe_write_asrc
+ * @id: name of the port
+ * @param: drift value to compensate [ppm]
+ *
+ * Load the drift variables to the FW memory. This API can be called only
+ * when the corresponding port has been already opened and the ASRC has
+ * been correctly initialized with API abe_init_asrc_... If this API is
+ * used such that the drift has been changed from positive to negative drift
+ * or vice versa, there will be click in the output signal. Loading the drift
+ * value with zero disables the feature.
*/
-void abe_write_asrc(abe_asrc_id id, abe_drift_t dppm)
+abehal_status abe_write_asrc (u32 port, s32 dppm)
{
- _lock_enter
- _log(id_write_asrc,id,dppm,dppm>>8)
+ s32 dtempvalue, adppm, drift_sign, drift_sign_addr, alpha_params_addr;
+ s32 alpha_params[3];
+
+
+ _log(id_write_asrc, port, dppm, dppm>>8)
-#if 0
- abe_int32 dtempvalue, adppm, alpha_current, beta_current, asrc_params;
- abe_int32 atempvalue32[8];
/*
* x = ppm
- * - 1000000/x must be multiple of 16
- * - deltaalpha = round(2^20*x*16/1000000)=round(2^18/5^6*x) on 22 bits. then shifted by 2bits
- * - minusdeltaalpha
- * - oneminusepsilon = 1-deltaalpha/2.
- * ppm = 250
- * - 1000000/250=4000
- * - deltaalpha = 4194.3 ~ 4195 => 0x00418c
+ *
+ * - 1000000/x must be multiple of 16
+ * - deltaalpha = round(2^20*x*16/1000000)=round(2^18/5^6*x) on 22 bits.
+ * then shifted by 2bits
+ * - minusdeltaalpha
+ * - oneminusepsilon = 1-deltaalpha/2.
+ *
+ * ppm = 250
+ * - 1000000/250=4000
+ * - deltaalpha = 4194.3 ~ 4195 => 0x00418c
*/
- /* examples for -6250 ppm */
- // atempvalue32[0] = 4; /* d_constalmost0 */
- // atempvalue32[1] = -1; /* d_driftsign */
- // atempvalue32[2] = 15; /* d_subblock */
- // atempvalue32[3] = 0x00066668; /* d_deltaalpha */
- // atempvalue32[4] = 0xfff99998; /* d_minusdeltaalpha */
- // atempvalue32[5] = 0x003ccccc; /* d_oneminusepsilon */
- // atempvalue32[6] = 0x00000000; /* d_alphazero */
- // atempvalue32[7] = 0x00400000; /* d_betaone */
+
+ /* examples for -6250 ppm */
+ /* atempvalue32[1] = -1; d_driftsign */
+ /* atempvalue32[3] = 0x00066668; d_deltaalpha */
+ /* atempvalue32[4] = 0xfff99998; d_minusdeltaalpha */
+ /* atempvalue32[5] = 0x003ccccc; d_oneminusepsilon */
+
+ /* example for 100 ppm */
+ /* atempvalue32[1] = 1;* d_driftsign */
+ /* atempvalue32[3] = 0x00001a38; d_deltaalpha */
+ /* atempvalue32[4] = 0xffffe5c8; d_minusdeltaalpha */
+ /* atempvalue32[5] = 0x003ccccc; d_oneminusepsilon */
/* compute new value for the ppm */
- if (dppm > 0){
- atempvalue32[1] = 1; /* d_driftsign */
+ if (dppm >= 0) {
+ /* d_driftsign */
+ drift_sign = 1;
adppm = dppm;
} else {
- atempvalue32[1] = -1; /* d_driftsign */
+ /* d_driftsign */
+ drift_sign = -1;
adppm = (-1*dppm);
}
+ if (dppm == 0) {
+ /* delta_alpha */
+ alpha_params[0] = 0;
- dtempvalue = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
- atempvalue32[3] = dtempvalue<<2;
- atempvalue32[4] = (-dtempvalue)<<2;
- atempvalue32[5] = (0x00100000-(dtempvalue/2))<<2;
+ /* minusdelta_alpha */
+ alpha_params[1] = 0;
- switch (id) {
- case ASRC2: /* asynchronous sample-rate-converter for the uplink voice path */
- alpha_current = C_AlphaCurrent_UL_VX_ADDR;
- beta_current = C_BetaCurrent_UL_VX_ADDR;
- asrc_params = D_AsrcVars_UL_VX_ADDR;
+ /* one_minusepsilon */
+ alpha_params[2] = 0x003ffff0;
+ } else {
+ dtempvalue = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* delta_alpha */
+ alpha_params[0] = dtempvalue<<2;
+
+ /* minusdelta_alpha */
+ alpha_params[1] = (-dtempvalue)<<2;
+
+ /* one_minusepsilon */
+ alpha_params[2] = (0x00100000-(dtempvalue/2))<<2;
+ }
+
+ switch (port) {
+
+ /* asynchronous sample-rate-converter for the uplink voice path */
+ case VX_DL_PORT:
+ drift_sign_addr = D_AsrcVars_DL_VX_ADDR + 1*sizeof(s32);
+ alpha_params_addr = D_AsrcVars_DL_VX_ADDR + 3*sizeof(s32);
break;
- case ASRC1: /* asynchronous sample-rate-converter for the downlink voice path */
- alpha_current = C_AlphaCurrent_DL_VX_ADDR;
- beta_current = C_BetaCurrent_DL_VX_ADDR;
- asrc_params = D_AsrcVars_DL_VX_ADDR;
+
+ /* asynchronous sample-rate-converter for the downlink voice path */
+ case VX_UL_PORT:
+ drift_sign_addr = D_AsrcVars_UL_VX_ADDR + 1*sizeof(s32);
+ alpha_params_addr = D_AsrcVars_UL_VX_ADDR + 3*sizeof(s32);
break;
+
default:
- case ASRC3: /* asynchronous sample-rate-converter for the multimedia player */
- alpha_current = C_AlphaCurrent_DL_MM_ADDR;
- beta_current = C_BetaCurrent_DL_MM_ADDR;
- asrc_params = D_AsrcVars_DL_MM_ADDR;
+
+ /* asynchronous sample-rate-converter for the multimedia player */
+ case MM_DL_PORT:
+ drift_sign_addr = D_AsrcVars_DL_MM_ADDR + 1*sizeof(s32);
+ alpha_params_addr = D_AsrcVars_DL_MM_ADDR + 3*sizeof(s32);
break;
}
- dtempvalue = 0x00000000;
- abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, alpha_current,(abe_uint32 *)&dtempvalue, 4);
- dtempvalue = 0x00400000;
- abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, beta_current, (abe_uint32 *)&dtempvalue, 4);
- abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, asrc_params , (abe_uint32 *)&atempvalue32, sizeof(atempvalue32));
-#endif
- _lock_exit
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, drift_sign_addr,
+ (u32 *)&drift_sign, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, alpha_params_addr ,
+ (u32 *)&alpha_params[0], 12);
+
+ return 0;
}
+EXPORT_SYMBOL(abe_write_asrc);
-/*
- * ABE_WRITE_APS
- *
- * Parameter :
- * Id : name of the aps filter
- * param : table of filter coefficients
- *
- * Operations :
- * Load the filters and thresholds coefficients in FW memory. This API can be called when
- * the corresponding APS is not activated. After reloading the firmware the default coefficients
- * corresponds to "no APS activated". Loading all the coefficients value with zero disables
- * the feature.
- *
- * Return value :
- * None.
+/**
+ * abe_write_aps
+ * @id: name of the aps filter
+ * @param: table of filter coefficients
+ *
+ * Load the filters and thresholds coefficients in FW memory. This API
+ * can be called when the corresponding APS is not activated. After
+ * reloading the firmware the default coefficients corresponds to "no APS
+ * activated".
+ * Loading all the coefficients value with zero disables the feature.
*/
-void abe_write_aps(abe_aps_id id, abe_aps_t *param)
+abehal_status abe_write_aps (u32 id, abe_aps_t *param)
{
- _lock_enter
_log(id_write_aps,id,0,0)
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_write_aps);
-/*
- * ABE_WRITE_MIXER
- *
- * Parameter :
- * Id : name of the mixer
- * param : list of input gains of the mixer
- * p : list of port corresponding to the above gains
- *
- * Operations :
- * Load the gain coefficients in FW memory. This API can be called when the corresponding
- * MIXER is not activated. After reloading the firmware the default coefficients corresponds
- * to "all input and output mixer's gain in mute state". A mixer is disabled with a network
- * reconfiguration corresponding to an OPP value.
- *
- * Return value :
- * None.
+/**
+ * abe_write_mixer
+ * @id: name of the mixer
+ * @param: list of input gains of the mixer
+ * @p: list of port corresponding to the above gains
+ *
+ * Load the gain coefficients in FW memory. This API can be called when
+ * the corresponding MIXER is not activated. After reloading the firmware
+ * the default coefficients corresponds to "all input and output mixer's gain
+ * in mute state". A mixer is disabled with a network reconfiguration
+ * corresponding to an OPP value.
*/
-void abe_write_gain(abe_gain_id id, abe_gain_t f_g, abe_ramp_t f_ramp, abe_port_id p)
+abehal_status abe_write_gain (u32 id, u32 f_g, u32 ramp, u32 p)
{
- abe_uint32 lin_g, mixer_target, mixer_offset;
- abe_int32 gain_index;
+ u32 lin_g, mixer_target, mixer_offset;
+ s32 gain_index;
+ u32 alpha, beta;
+ u32 ramp_index;
- _lock_enter
_log(id_write_gain,id,f_g,p)
gain_index = ((f_g - min_mdb) / 100);
- gain_index = maximum(gain_index, 0);
- gain_index = minimum(gain_index, sizeof_db2lin_table);
+ gain_index = maximum (gain_index, 0);
+ gain_index = minimum (gain_index, sizeof_db2lin_table);
lin_g = abe_db2lin_table [gain_index];
- switch(id) {
+ switch (id) {
default:
- case GAINS_DMIC1:
+ case GAINS_DMIC1 :
mixer_offset = dmic1_gains_offset;
break;
- case GAINS_DMIC2:
+ case GAINS_DMIC2 :
mixer_offset = dmic2_gains_offset;
break;
- case GAINS_DMIC3:
+ case GAINS_DMIC3 :
mixer_offset = dmic3_gains_offset;
break;
- case GAINS_AMIC:
+ case GAINS_AMIC :
mixer_offset = amic_gains_offset;
break;
- case GAINS_DL1:
+ case GAINS_DL1 :
mixer_offset = dl1_gains_offset;
break;
- case GAINS_DL2:
+ case GAINS_DL2 :
mixer_offset = dl2_gains_offset;
break;
- case GAINS_SPLIT:
+ case GAINS_SPLIT :
mixer_offset = splitters_gains_offset;
break;
- case MIXDL1:
+
+ case MIXDL1 :
mixer_offset = mixer_dl1_offset;
break;
- case MIXDL2:
+ case MIXDL2 :
mixer_offset = mixer_dl2_offset;
break;
- case MIXECHO:
+ case MIXECHO :
mixer_offset = mixer_echo_offset;
break;
- case MIXSDT:
+ case MIXSDT :
mixer_offset = mixer_sdt_offset;
break;
case MIXVXREC:
@@ -1538,211 +1513,333 @@ void abe_write_gain(abe_gain_id id, abe_gain_t f_g, abe_ramp_t f_ramp, abe_port_
break;
}
- mixer_target = (smem_target_gain_base << 1);/* SMEM word32 address */
+ /* SMEM word32 address */
+ mixer_target = (S_GTarget1_ADDR << 1);
mixer_target += mixer_offset;
mixer_target += p;
- mixer_target <<= 2; /* translate coef address in Bytes */
+
+ /* translate coef address in Bytes */
+ mixer_target <<= 2;
/* load the S_G_Target SMEM table */
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM, mixer_target,
- (abe_uint32*)&lin_g, sizeof(lin_g));
- _lock_exit
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM, mixer_target,
+ (u32*)&lin_g, sizeof(lin_g));
+
+
+ ramp = maximum(minimum (RAMP_MAXLENGTH, ramp), RAMP_MINLENGTH);
+
+ /* ramp data should be interpolated in the table instead */
+ if (ramp < RAMP_5MS)
+ ramp_index = 8;
+ if ((RAMP_5MS <= ramp) && (ramp < RAMP_50MS))
+ ramp_index = 24;
+ if ((RAMP_50MS <= ramp) && (ramp < RAMP_500MS))
+ ramp_index = 36;
+ if (ramp > RAMP_500MS)
+ ramp_index = 48;
+
+ beta = abe_alpha_iir [ramp_index];
+ alpha = abe_1_alpha_iir [ramp_index];
+
+ /* CMEM word32 address */
+ mixer_target = C_1_Alpha_ADDR;
+
+ /* a pair of gains is updated once in the firmware */
+ mixer_target += (p + mixer_offset) >> 1;
+
+ /* translate coef address in Bytes */
+ mixer_target <<= 2;
+
+ /* load the ramp delay data */
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, mixer_target,
+ (u32*)&alpha, sizeof(alpha));
+
+ /* CMEM word32 address */
+ mixer_target = C_Alpha_ADDR;
+
+ /* a pair of gains is updated once in the firmware */
+ mixer_target += (p + mixer_offset) >> 1;
+
+ /* translate coef address in Bytes */
+ mixer_target <<= 2;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, mixer_target,
+ (u32*)&beta, sizeof(beta));
+
+ return 0;
}
+EXPORT_SYMBOL(abe_write_gain);
-void abe_write_mixer(abe_mixer_id id, abe_gain_t f_g, abe_ramp_t f_ramp, abe_port_id p)
+/**
+ * abe_write_mixer
+ * @id: name of the mixer
+ * @param: input gains and delay ramp of the mixer
+ * @p: port corresponding to the above gains
+ *
+ * Load the gain coefficients in FW memory. This API can be called when
+ * the corresponding MIXER is not activated. After reloading the firmware
+ * the default coefficients corresponds to "all input and output mixer's
+ * gain in mute state". A mixer is disabled with a network reconfiguration
+ * corresponding to an OPP value.
+ */
+abehal_status abe_write_mixer (u32 id, u32 f_g, u32 f_ramp, u32 p)
{
- _lock_enter
_log(id_write_mixer,id,f_ramp,p)
- abe_write_gain ((abe_gain_id)id, f_g, f_ramp, p);
-
- _lock_exit
+ abe_write_gain (id, f_g, f_ramp, p);
+ return 0;
}
+EXPORT_SYMBOL(abe_write_mixer);
-/*
- * ABE_SET_ROUTER_CONFIGURATION
- *
- * Parameter :
- * Id : name of the router
- * Conf : id of the configuration
- * param : list of output index of the route
+/**
+ * abe_read_gain
+ * @id: name of the mixer
+ * @param: list of input gains of the mixer
+ * @p: list of port corresponding to the above gains
*
- * Operations :
- * The uplink router takes its input from DMIC (6 samples), AMIC (2 samples) and
- * PORT1/2 (2 stereo ports). Each sample will be individually stored in an intermediate
- * table of 10 elements. The intermediate table is used to route the samples to
- * three directions : REC1 mixer, 2 EANC DMIC source of filtering and MM recording audio path.
- * For example, a use case consisting in AMIC used for uplink voice communication, DMIC 0,1,2,3
- * used for multimedia recording, , DMIC 5 used for EANC filter, DMIC 4 used for the feedback channel,
- * will be implemented with the following routing table index list :
- * [3, 2 , 1, 0, 0, 0 (two dummy indexes to data that will not be on MM_UL), 4, 5, 7, 6]
- * example
- * abe_set_router_configuration (UPROUTE, UPROUTE_CONFIG_AMIC, abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
- * Return value :
- * None.
*/
-void abe_set_router_configuration(abe_router_id id, abe_uint32 unused, abe_router_t *param)
+abehal_status abe_read_gain (u32 id, u32 *f_g, u32 p)
{
- _lock_enter
- _log(id_set_router_configuration,id,(abe_uint32)param,(abe_uint32)param>>8)
+ u32 mixer_target, mixer_offset;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_aUplinkRouting_ADDR,
- (abe_uint32 *)param, D_aUplinkRouting_ADDR_END - D_aUplinkRouting_ADDR + 1);
+ _log(id_read_gain,id,(u32)f_g,p)
- _lock_exit
+ switch (id) {
+ default:
+ case GAINS_DMIC1 :
+ mixer_offset = dmic1_gains_offset;
+ break;
+ case GAINS_DMIC2 :
+ mixer_offset = dmic2_gains_offset;
+ break;
+ case GAINS_DMIC3 :
+ mixer_offset = dmic3_gains_offset;
+ break;
+ case GAINS_AMIC :
+ mixer_offset = amic_gains_offset;
+ break;
+ case GAINS_DL1 :
+ mixer_offset = dl1_gains_offset;
+ break;
+ case GAINS_DL2 :
+ mixer_offset = dl2_gains_offset;
+ break;
+ case GAINS_SPLIT :
+ mixer_offset = splitters_gains_offset;
+ break;
+
+ case MIXDL1 :
+ mixer_offset = mixer_dl1_offset;
+ break;
+ case MIXDL2 :
+ mixer_offset = mixer_dl2_offset;
+ break;
+ case MIXECHO :
+ mixer_offset = mixer_echo_offset;
+ break;
+ case MIXSDT :
+ mixer_offset = mixer_sdt_offset;
+ break;
+ case MIXVXREC:
+ mixer_offset = mixer_vxrec_offset;
+ break;
+ case MIXAUDUL:
+ mixer_offset = mixer_audul_offset;
+ break;
+ }
+
+ /* SMEM word32 address */
+ mixer_target = (S_GTarget1_ADDR << 1);
+ mixer_target += mixer_offset;
+ mixer_target += p;
+
+ /* translate coef address in Bytes */
+ mixer_target <<= 2;
+
+ /* load the S_G_Target SMEM table */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_SMEM, mixer_target,
+ (u32*)f_g, sizeof(*f_g));
+
+ return 0;
}
+EXPORT_SYMBOL(abe_read_gain);
-/*
- * ABE_SELECT_DATA_SOURCE
- *
- * Parameter :
- *
- * Operations :
- *
- * Return value :
- * None.
+/**
+ * abe_read_mixer
+ * @id: name of the mixer
+ * @param: gains of the mixer
+ * @p: port corresponding to the above gains
+ *
+ * Load the gain coefficients in FW memory. This API can be called when
+ * the corresponding MIXER is not activated. After reloading the firmware
+ * the default coefficients corresponds to "all input and output mixer's
+ * gain in mute state". A mixer is disabled with a network reconfiguration
+ * corresponding to an OPP value.
+ */
+abehal_status abe_read_mixer (u32 id, u32 *f_g, u32 p)
+{
+ _log(id_read_mixer,id,0,p)
+
+ abe_read_gain (id, f_g, p);
+ return 0;
+}
+EXPORT_SYMBOL(abe_read_mixer);
+
+/**
+ * abe_set_router_configuration
+ * @Id: name of the router
+ * @Conf: id of the configuration
+ * @param: list of output index of the route
+ *
+ * The uplink router takes its input from DMIC (6 samples), AMIC (2 samples)
+ * and PORT1/2 (2 stereo ports). Each sample will be individually stored in
+ * an intermediate table of 10 elements.
+ *
+ * Example of router table parameter for voice uplink with phoenix microphones
+ *
+ * indexes 0 .. 9 = MM_UL description (digital MICs and MMEXTIN)
+ * DMIC1_L_labelID, DMIC1_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID,
+ * MM_EXT_IN_L_labelID, MM_EXT_IN_R_labelID, ZERO_labelID, ZERO_labelID,
+ * ZERO_labelID, ZERO_labelID,
+ * indexes 10 .. 11 = MM_UL2 description (recording on DMIC3)
+ * DMIC3_L_labelID, DMIC3_R_labelID,
+ * indexes 12 .. 13 = VX_UL description (VXUL based on PDMUL data)
+ * AMIC_L_labelID, AMIC_R_labelID,
+ * indexes 14 .. 15 = RESERVED (NULL)
+ * ZERO_labelID, ZERO_labelID,
+ */
+abehal_status abe_set_router_configuration (u32 id, u32 k, u32 *param)
+{
+
+ _log(id_set_router_configuration,id,(u32)param,(u32)param>>8)
+
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_aUplinkRouting_ADDR,
+ param, D_aUplinkRouting_sizeof);
+
+ return 0;
+}
+EXPORT_SYMBOL(abe_set_router_configuration);
+
+/**
+ * abe_select_data_source
+ * @@@
*/
-void abe_select_data_source (abe_port_id port_id, abe_dl_src_id smem_source)
+abehal_status abe_select_data_source (u32 port_id, u32 smem_source)
{
ABE_SIODescriptor desc;
- abe_uint32 sio_desc_address;
+ u32 sio_desc_address;
- _lock_enter
_log(id_select_data_source,port_id,smem_source,smem_source>>8)
- sio_desc_address = dmem_port_descriptors + (port_id * sizeof(ABE_SIODescriptor));
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc, sizeof (desc));
- desc.smem_addr1 = (abe_uint16) smem_source;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc, sizeof (desc));
+ sio_desc_address = dmem_port_descriptors + (port_id *
+ sizeof(ABE_SIODescriptor));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address,
+ (u32*)&desc, sizeof (desc));
+ desc.smem_addr1 = (u16) smem_source;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
+ (u32*)&desc, sizeof (desc));
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_select_data_source);
-
-/*
- * ABE_READ_DEBUG_TRACE
+/**
+ * ABE_READ_DEBUG_TRACE
*
- * Parameter :
+ * Parameter :
* data destination pointer
* max number of data read
*
- * Operations :
- * reads the AE circular data pointer holding pairs of debug data+timestamps, and store
- * the pairs in linear addressing to the parameter pointer. Stops the copy when the max
- * parameter is reached or when the FIFO is empty.
+ * Operations :
+ * reads the AE circular data pointer holding pairs of debug data+
+ * timestamps, and store the pairs in linear addressing to the parameter
+ * pointer. Stops the copy when the max parameter is reached or when the
+ * FIFO is empty.
*
- * Return value :
+ * Return value :
* None.
*/
-void abe_read_debug_trace(abe_uint32 *data, abe_uint32 *n)
+abehal_status abe_read_debug_trace (u32 *data, u32 *n)
{
- _lock_enter
_log(id_select_data_source,0,0,0)
-
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_read_debug_trace);
-/*
- * ABE_CONNECT_DEBUG_TRACE
- *
- * Parameter :
- * pointer to the DMEM trace buffer
- *
- * Operations :
- * returns the address and size of the real-time debug trace buffer,
- * the content of which will vary from one firmware release to an other
+/**
+ * abe_connect_debug_trace
+ * @dma2:pointer to the DMEM trace buffer
*
- * Return value :
- * None.
+ * returns the address and size of the real-time debug trace buffer,
+ * the content of which will vary from one firmware release to an other
*/
-
-void abe_connect_debug_trace (abe_dma_t *dma2)
+abehal_status abe_connect_debug_trace (abe_dma_t *dma2)
{
- _lock_enter
+
_log(id_connect_debug_trace,0,0,0)
/* return the base address of the ping buffer in L3 and L4 spaces */
- (*dma2).data = (void *)(D_DEBUG_FIFO_ADDR + ABE_DMEM_BASE_ADDRESS_L3);
+ (*dma2).data =(void *)(D_DEBUG_FIFO_ADDR + ABE_DMEM_BASE_ADDRESS_L3);
(*dma2).l3_dmem = (void *)(D_DEBUG_FIFO_ADDR + ABE_DMEM_BASE_ADDRESS_L3);
(*dma2).l4_dmem = (void *)(D_DEBUG_FIFO_ADDR + ABE_DMEM_BASE_ADDRESS_L4);
- (*dma2).iter = D_DEBUG_FIFO_ADDR_END - D_DEBUG_FIFO_ADDR;
+ (*dma2).iter = D_DEBUG_FIFO_sizeof;
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_connect_debug_trace);
-
-/*
- * ABE_SET_DEBUG_TRACE
- *
- * Parameter :
- * debug ID from a list to be defined
- *
- * Operations :
- * load a mask which filters the debug trace to dedicated types of data
+/**
+ * abe_set_debug_trace
+ * @debug: debug ID from a list to be defined
*
- * Return value :
- * None.
+ * load a mask which filters the debug trace to dedicated types of data
*/
-void abe_set_debug_trace(abe_dbg_t debug)
+abehal_status abe_set_debug_trace (abe_dbg_t debug)
{
- _lock_enter
+
_log(id_set_debug_trace,0,0,0)
abe_dbg_mask = debug;
-
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_set_debug_trace);
-/*
- * ABE_REMOTE_DEBUGGER_INTERFACE
- *
- * Parameter :
- *
- * Operations :
- * interpretation of the UART stream from the remote debugger commands.
- * The commands consist in setting break points, loading parameter
+/**
+ * abe_remote_debugger_interface
*
- * Return value :
- * None.
+ * interpretation of the UART stream from the remote debugger commands.
+ * The commands consist in setting break points, loading parameter
*/
-void abe_remote_debugger_interface(abe_uint32 n, abe_uint8 *p)
+abehal_status abe_remote_debugger_interface (u32 n, u8 *p)
{
- _lock_enter
- _log(id_remote_debugger_interface,n,0,0)
-
- _lock_exit
+ _log(id_remote_debugger_interface,n,0,0)
+ return 0;
}
+EXPORT_SYMBOL(abe_remote_debugger_interface);
-/*
- * ABE_ENABLE_TEST_PATTERN
- *
- * Parameter:
- *
- * Operations :
+
+/**
+ * abe_enable_test_pattern
*
- * Return value :
- * None.
*/
-void abe_enable_test_pattern (abe_patched_pattern_id smem_id, abe_uint32 on_off)
+abehal_status abe_enable_test_pattern (u32 smem_id, u32 on_off)
{
- abe_uint16 dbg_on, dbg_off, idx_patch, task_patch, addr_patch;
- abe_uint32 patch, task32;
+ u16 dbg_on, dbg_off, idx_patch, task_patch, addr_patch;
+ u32 patch, task32;
+
- _lock_enter
_log(id_enable_test_pattern,on_off,smem_id,smem_id>>8)
switch (smem_id) {
- case DBG_PATCH_AMIC:
+ case DBG_PATCH_AMIC :
dbg_on = DBG_48K_PATTERN_labelID;
dbg_off = AMIC_labelID;
task_patch = C_ABE_FW_TASK_AMIC_SPLIT;
idx_patch = 1;
break;
- case DBG_PATCH_DMIC1:
+ case DBG_PATCH_DMIC1 :
dbg_on = DBG_48K_PATTERN_labelID;
dbg_off = DMIC1_labelID;
task_patch = C_ABE_FW_TASK_DMIC1_SPLIT;
@@ -1808,6 +1905,7 @@ void abe_enable_test_pattern (abe_patched_pattern_id smem_id, abe_uint32 on_off)
task_patch = C_ABE_FW_TASK_MIC4_SPLIT;
idx_patch = 1;
break;
+
case DBG_PATCH_MM_DL_MIXDL1:
dbg_on = DBG_48K_PATTERN_labelID;
dbg_off = AMIC_labelID;
@@ -1821,21 +1919,25 @@ void abe_enable_test_pattern (abe_patched_pattern_id smem_id, abe_uint32 on_off)
idx_patch = 1;
break;
default:
- return;
+ return 0;
}
-
patch = (on_off != 0)? dbg_on: dbg_off;
+
/* address is on 16bits boundary */
addr_patch = D_tasksList_ADDR + 16 * task_patch + 2 * idx_patch;
+
/* read on 32bits words' boundary */
- abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, addr_patch & (~0x03), &task32, 4);
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, addr_patch & (~0x03),
+ &task32, 4);
if (addr_patch & 0x03)
task32 = (0x0000FFFFL & task32) | (patch << 16);
else
task32 = (0xFFFF0000L & task32) | (0x0000FFFF & patch);
- abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, addr_patch & (~0x03), &task32, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, addr_patch & (~0x03),
+ &task32, 4);
- _lock_exit
+ return 0;
}
+EXPORT_SYMBOL(abe_enable_test_pattern);
diff --git a/sound/soc/omap/abe/abe_api.h b/sound/soc/omap/abe/abe_api.h
index 2752530796ff..e88019d6a0fd 100644
--- a/sound/soc/omap/abe/abe_api.h
+++ b/sound/soc/omap/abe/abe_api.h
@@ -1,649 +1,500 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#ifndef _ABE_API_H_
#define _ABE_API_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * External API
- */
-#if PC_SIMULATION
-extern void target_server_read_pmem(abe_uint32 address, abe_uint32 *data, abe_uint32 nb_words_32bits);
-extern void target_server_write_pmem(abe_uint32 address, abe_uint32 *data, abe_uint32 nb_words_32bits);
-extern void target_server_read_cmem(abe_uint32 address, abe_uint32 *data, abe_uint32 nb_words_32bits);
-extern void target_server_write_cmem(abe_uint32 address, abe_uint32 *data, abe_uint32 nb_words_32bits);
-extern void target_server_read_atc(abe_uint32 address, abe_uint32 *data, abe_uint32 nb_words_32bits);
-extern void target_server_write_atc(abe_uint32 address, abe_uint32 *data, abe_uint32 nb_words_32bits);
-extern void target_server_read_smem(abe_uint32 address_48bits, abe_uint32 *data, abe_uint32 nb_words_48bits);
-extern void target_server_write_smem(abe_uint32 address_48bits, abe_uint32 *data, abe_uint32 nb_words_48bits);
-extern void target_server_read_dmem(abe_uint32 address_byte, abe_uint32 *data, abe_uint32 nb_byte);
-extern void target_server_write_dmem(abe_uint32 address_byte, abe_uint32 *data, abe_uint32 nb_byte);
-
-extern void target_server_activate_mcpdm_ul(void);
-extern void target_server_activate_mcpdm_dl(void);
-extern void target_server_activate_dmic(void);
-extern void target_server_set_voice_sampling(int dVirtAudioVoiceMode, int dVirtAudioVoiceSampleFrequency);
-extern void target_server_set_dVirtAudioMultimediaMode(int dVirtAudioMultimediaMode);
-#endif
-/*
- * Internal API
- */
-
-/**
-* abe_read_sys_clock() description for void abe_read_sys_clock().
-*
-* Operations : returns the current time indication for the LOG
-*
-* Parameter : No parameter
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_read_sys_clock(abe_micros_t *time);
-
-/**
-* abe_fprintf() description for void abe_fprintf().
-*
-* Operations : returns the current time indication for the LOG
-*
-* Parameter : No parameter
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-//void abe_fprintf(char *line);
+/**
+ * abe_reset_hal - reset the ABE/HAL
+ * @rdev: regulator source
+ * @constraints: constraints to apply
+ *
+ * Operations : reset the HAL by reloading the static variables and
+ * default AESS registers.
+ * Called after a PRCM cold-start reset of ABE
+ */
+abehal_status abe_reset_hal (void);
-/*
- * API as part of the HAL paper documentation
- */
-
-/**
-* abe_reset_hal() description for void abe_reset_hal().
-*
-* Operations : reset the HAL by reloading the static variables and default AESS registers.
-* Called after a PRCM cold-start reset of ABE
-*
-* Parameter : No parameter
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_reset_hal(void);
-
-/**
-* abe_read_use_case_opp() description for void abe_read_use_case_opp().
-*
-* Operations : returns the expected min OPP for a given use_case list
-*
-* Parameter : No parameter
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_read_use_case_opp(abe_use_case_id *u, abe_opp_t *o);
-
-/**
-* abe_load_fw() description for void abe_load_fw().
-*
-* Operations :
-* loads the Audio Engine firmware, generate a single pulse on the Event generator
-* to let execution start, read the version number returned from this execution.
-*
-* Parameter : No parameter
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code in case the firmware does not start.
-*
-* @see
-*/
-void abe_load_fw(void);
-
-/**
-* abe_read_port_address() description for void abe_read_port_address().
-*
-* Operations :
-* This API returns the address of the DMA register used on this audio port.
-*
-* Parameter : No parameter
-* @param dma : output pointer to the DMA iteration and data destination pointer
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_read_port_address(abe_port_id port, abe_dma_t *dma);
-
-/**
-* abe_irq_processing() description for void abe_irq_processing().
-*
-* Parameter :
-* No parameter
-*
-* Operations :
-* This subroutine will check the IRQ_FIFO from the AE and act accordingly.
-* Some IRQ source are originated for the delivery of "end of time sequenced tasks"
-* notifications, some are originated from the Ping-Pong protocols, some are generated from
-* the embedded debugger when the firmware stops on programmable break-points, etc …
-*
-* @param dma : output pointer to the DMA iteration and data destination pointer
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_irq_processing(void);
-
-/**
-* abe_write_event_generator () description for void abe_event_generator_switch().
-*
-* Operations :
-* load the AESS event generator hardware source. Loads the firmware parameters
-* accordingly. Indicates to the FW which data stream is the most important to preserve
-* in case all the streams are asynchronous. If the parameter is "default", let the HAL
-* decide which Event source is the best appropriate based on the opened ports.
-*
-* @param e: Event Generation Counter, McPDM, DMIC or default.
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_write_event_generator(abe_event_id e);
-
-/**
-* abe_set_opp_processing() description for void abe_set_opp_processing().
-*
-* Parameter :
-* New processing network and OPP:
-* 0: Ultra Lowest power consumption audio player (no post-processing, no mixer);
-* 1: OPP 25% (simple multimedia features, including low-power player);
-* 2: OPP 50% (multimedia and voice calls);
-* 3: OPP100% (EANC, multimedia complex use-cases);
-*
-* Operations :
-* Rearranges the FW task network to the corresponding OPP list of features.
-* The corresponding AE ports are supposed to be set/reset accordingly before this switch.
-*
-* @param o: desired opp
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_set_opp_processing(abe_opp_t opp);
-
-/**
-* abe_set_ping_pong_bufferg() description for void abe_set_ping_pong_buffer().
-*
-* Parameter :
-* Port_ID :
-* Pointer name : Read or Write pointer
-* New data
-*
-* Operations :
-* Updates the ping-pong read/write pointer with the input data.
-*
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_set_ping_pong_buffer(abe_port_id port, abe_uint32 n);
-
-/**
-* @fn abe_connect_irq_ping_pong_port()
-*
-* Operations : enables the data echanges between a direct access to the DMEM
-* memory of ABE using cache flush. On each IRQ activation a subroutine
-* registered with "abe_plug_subroutine" will be called. This subroutine
-* will generate an amount of samples, send them to DMEM memory and call
-* "abe_set_ping_pong_buffer" to notify the new amount of samples in the
-* pong buffer.
-*
-* Parameters :
-* id: port name
-* f : desired data format
-* I : index of the call-back subroutine to call
-* s : half-buffer (ping) size
-*
-* p: returned base address of the first (ping) buffer)
-*
-* @see ABE_API.h
-*/
-void abe_connect_irq_ping_pong_port(abe_port_id id, abe_data_format_t *f, abe_uint32 d,
- abe_uint32 s, abe_uint32 *p, abe_uint32 dsp_mcu_flag);
-
-/**
-* abe_plug_subroutine() description for void abe_plug_subroutine().
-*
-* Parameter :
-* id: returned sequence index after plugging a new subroutine
-* f : subroutine address to be inserted
-*
-* Operations :
-* register a list of subroutines for call-back purpose.
-*
-* @param
-*
-* @pre no pre-condition
-*
-* @post
-*
-* @return error code
-*
-* @see
-*/
-void abe_plug_subroutine(abe_uint32 *id, abe_subroutine2 f, abe_uint32 n, abe_uint32 *params);
+/**
+ * abe_load_fw_param - Load ABE Firmware memories
+ * @PMEM: Pointer of Program memory data
+ * @PMEM_SIZE: Size of PMEM data
+ * @CMEM: Pointer of Coeffients memory data
+ * @CMEM_SIZE: Size of CMEM data
+ * @SMEM: Pointer of Sample memory data
+ * @SMEM_SIZE: Size of SMEM data
+ * @DMEM: Pointer of Data memory data
+ * @DMEM_SIZE: Size of DMEM data
+ *
+ * loads the Audio Engine firmware, generate a single pulse on the Event
+ * generator to let execution start, read the version number returned from
+ * this execution.
+ */
+abehal_status abe_load_fw_param (u32 *FW);
-/*
- * ABE_RESET_PORT
- *
- * Parameters :
- * id: port name
- *
- * Returned value : error code
- *
- * Operations : stop the port activity and reload default parameters on the associated processing features.
+/**
+ * abe_load_fw - Load ABE Firmware and initialize memories
*
+ * loads the Audio Engine firmware, generate a single pulse on the Event
+ * generator to let execution start, read the version number returned from
+ * this execution.
*/
-void abe_reset_port(abe_port_id id);
+abehal_status abe_load_fw (void);
-/*
- * ABE_READ_REMAINING_DATA
- *
- * Parameter :
- * Port_ID :
- * size : pointer to the remaining number of 32bits words
+/**
+ * abe_read_hardware_configuration - Return default HW periferals configuration
+ * @u: use-case description list (pointer)
+ * @o: opp mode (pointer)
+ * @hw: pointer to the output HW structure
*
- * Operations :
- * computes the remaining amount of data in the buffer.
+
+ * Parameter :
+ * U : use-case description list (pointer)
+ * H : pointer to the output structure
*
- * Return value :
- * error code
+ * Operations :
+ * return a structure with the HW thresholds compatible with the HAL/FW/AESS_ATC
+ * will be upgraded in FW06
+ * return a structure with the HW thresholds compatible with the HAL/FW/AESS_ATC
*/
-void abe_read_remaining_data(abe_port_id port, abe_uint32 *n);
+abehal_status abe_read_hardware_configuration (u32 *u, u32 *o, abe_hw_config_init_t *hw);
-/*
- * ABE_DISABLE_DATA_TRANSFER
- *
- * Parameter :
- * p: port indentifier
+/**
+ * abe_irq_processing - Process ABE interrupt
+ *
+ * This subroutine is call upon reception of "MA_IRQ_99 ABE_MPU_IRQ" Audio
+ * back-end interrupt. This subroutine will check the ATC Hrdware, the
+ * IRQ_FIFO from the AE and act accordingly. Some IRQ source are originated
+ * for the delivery of "end of time sequenced tasks" notifications, some are
+ * originated from the Ping-Pong protocols, some are generated from
+ * the embedded debugger when the firmware stops on programmable break-points,
+ * etc …
+ */
+abehal_status abe_irq_processing (void);
+
+/**
+ * abe_select_main_port - Select stynchronization port for Event generator.
+ * @id: audio port name
*
- * Operations :
- * disables the ATC descriptor
+ * tells the FW which is the reference stream for adjusting
+ * the processing on 23/24/25 slots
+ */
+abehal_status abe_select_main_port (u32 id);
+
+/**
+ * abe_write_event_generator - Select event generator source
+ * @e: Event Generation Counter, McPDM, DMIC or default.
+ *
+ * load the AESS event generator hardware source. Loads the firmware parameters
+ * accordingly. Indicates to the FW which data stream is the most important to preserve
+ * in case all the streams are asynchronous. If the parameter is "default", let the HAL
+ * decide which Event source is the best appropriate based on the opened ports.
+ *
+ * When neither the DMIC and the McPDM are activated the AE will have its EVENT generator programmed
+ * with the EVENT_COUNTER. The event counter will be tuned in order to deliver a pulse frequency higher
+ * than 96 kHz. The DPLL output at 100% OPP is MCLK = (32768kHz x6000) = 196.608kHz
+ * The ratio is (MCLK/96000)+(1<<1) = 2050
+ * (1<<1) in order to have the same speed at 50% and 100% OPP (only 15 MSB bits are used at OPP50%)
+ */
+abehal_status abe_write_event_generator (u32 e);
+
+/**
+ * abe_read_use_case_opp() - description for void abe_read_use_case_opp().
*
- * Return value :
- * None.
+ * returns the expected min OPP for a given use_case list
*/
-void abe_disable_data_transfer (abe_port_id p);
+abehal_status abe_read_use_case_opp (u32 *u, u32 *o);
-/*
- * ABE_ENABLE_DATA_TRANSFER
+/**
+ * abe_set_opp_processing - Set OPP mode for ABE Firmware
+ * @opp: OOPP mode
*
- * Parameter :
- * p: port indentifier
+ * New processing network and OPP:
+ * 0: Ultra Lowest power consumption audio player (no post-processing, no mixer)
+ * 1: OPP 25% (simple multimedia features, including low-power player)
+ * 2: OPP 50% (multimedia and voice calls)
+ * 3: OPP100% (EANC, multimedia complex use-cases)
*
- * Operations :
- * enables the ATC descriptor
+ * Rearranges the FW task network to the corresponding OPP list of features.
+ * The corresponding AE ports are supposed to be set/reset accordingly before
+ * this switch.
*
- * Return value :
- * None.
*/
-void abe_enable_data_transfer(abe_port_id p);
+abehal_status abe_set_opp_processing (u32 opp);
-/*
- * ABE_SET_DMIC_FILTER
- *
- * Parameter :
- * DMIC decimation ratio : 16/25/32/40
- *
- * Operations :
- * Loads in CMEM a specific list of coefficients depending on the DMIC sampling
- * frequency (2.4MHz or 3.84MHz);. This table compensates the DMIC decimator roll-off at 20kHz.
- * The default table is loaded with the DMIC 2.4MHz recommended configuration.
- *
- * Return value :
- * None.
- */
-void abe_set_dmic_filter(abe_dmic_ratio_t d);
-
-/**
-* @fn abe_connect_cbpr_dmareq_port()
-*
-* Operations : enables the data echange between a DMA and the ABE through the
-* CBPr registers of AESS.
-*
-* Parameters :
-* id: port name
-* f : desired data format
-* d : desired dma_request line (0..7)
-* a : returned pointer to the base address of the CBPr register and number of
-* samples to exchange during a DMA_request.
-*
-* @see ABE_API.h
-*/
-void abe_connect_cbpr_dmareq_port(abe_port_id id, abe_data_format_t *f, abe_uint32 d, abe_dma_t *a);
-
-/**
-* @fn abe_connect_dmareq_ping_pong_port()
-*
-* Operations : enables the data echanges between a DMA and a direct access to the
-* DMEM memory of ABE. On each dma_request activation the DMA will exchange "s"
-* bytes and switch to the "pong" buffer for a new buffer exchange.ABE
-*
-* Parameters :
-* id: port name
-* f : desired data format
-* d : desired dma_request line (0..7)
-* s : half-buffer (ping) size
-*
-* a : returned pointer to the base address of the ping-pong buffer and number of samples to exchange during a DMA_request.
-*
-* @see ABE_API.h
-*/
-void abe_connect_dmareq_ping_pong_port(abe_port_id id, abe_data_format_t *f, abe_uint32 d, abe_uint32 s, abe_dma_t *a);
-
-/**
-* @fn abe_connect_serial_port()
-*
-* Operations : enables the data echanges between a McBSP and an ATC buffer in
-* DMEM. This API is used connect 48kHz McBSP streams to MM_DL and 8/16kHz
-* voice streams to VX_UL, VX_DL, BT_VX_UL, BT_VX_DL. It abstracts the
-* abe_write_port API.
-*
-* Parameters :
-* id: port name
-* f : data format
-* i : peripheral ID (McBSP #1, #2, #3)
-*
-* @see ABE_API.h
-*/
-void abe_connect_serial_port(abe_port_id id, abe_data_format_t *f, abe_mcbsp_id i);
-
-/**
-* @fn abe_connect_slimbus_port()
-*
-* Operations : enables the data echanges between 1/2 SB and an ATC buffers in
-* DMEM.
-*
-* Parameters :
-* id: port name
-* f : data format
-* i : peripheral ID (McBSP #1, #2, #3)
-* j : peripheral ID (McBSP #1, #2, #3)
-*
-* @see ABE_API.h
-*/
-void abe_connect_slimbus_port(abe_port_id id, abe_data_format_t *f,
- abe_slimbus_id sb_port1, abe_slimbus_id sb_port2);
+/**
+ * abe_set_ping_pong_buffer
+ * @port: ABE port ID
+ * @n_bytes: Size of Ping/Pong buffer
+ *
+ * Updates the next ping-pong buffer with "size" bytes copied from the
+ * host processor. This API notifies the FW that the data transfer is done.
+ */
+abehal_status abe_set_ping_pong_buffer (u32 port, u32 n_bytes);
-/*
- * ABE_WRITE_GAIN
- *
- * Parameter :
- * port : name of the port (VX_DL_PORT, MM_DL_PORT, MM_EXT_DL_PORT, TONES_DL_PORT, …);
- * dig_gain_port pointer to returned port gain and time constant
- *
- * Operations :
- * saves the gain data in the local HAL-L0 table of gains in native format.
- * Translate the gain to the AE-FW format and load it in CMEM
+/**
+ * abe_read_next_ping_pong_buffer
+ * @port: ABE portID
+ * @p: Next buffer address (pointer)
+ * @n: Next buffer size (pointer)
*
- * Return value :
- * error code in case the gain_id is not compatible with the current OPP value.
+ * Tell the next base address of the next ping_pong Buffer and its size
*/
+abehal_status abe_read_next_ping_pong_buffer (u32 port, u32 *p, u32 *n);
-void abe_write_gain(abe_gain_id id, abe_gain_t f_g, abe_ramp_t f_ramp, abe_port_id p);
+/**
+ * abe_init_ping_pong_buffer
+ * @id: ABE port ID
+ * @size_bytes:size of the ping pong
+ * @n_buffers:number of buffers (2 = ping/pong)
+ * @p:returned address of the ping-pong list of base address (byte offset
+ from DMEM start)
+ *
+ * Computes the base address of the ping_pong buffers
+ */
+abehal_status abe_init_ping_pong_buffer (u32 id, u32 size_bytes, u32 n_buffers, u32 *p);
-/*
- * ABE_WRITE_EQUALIZER
- *
- * Parameter :
- * Id : name of the equalizer
- * Param : equalizer coefficients
- *
- * Operations :
- * Load the coefficients in CMEM. This API can be called when the corresponding equalizer
- * is not activated. After reloading the firmware the default coefficients corresponds to
- * "no equalizer feature". Loading all coefficients with zeroes disables the feature.
+/**
+ * abe_plug_subroutine
+ * @id: returned sequence index after plugging a new subroutine
+ * @f: subroutine address to be inserted
+ * @n: number of parameters of this subroutine
+ * @params: pointer on parameters
*
- * Return value :
- * None.
+ * register a list of subroutines for call-back purpose
*/
-void abe_write_equalizer(abe_equ_id id, abe_equ_t *param);
+abehal_status abe_plug_subroutine (u32 *id, abe_subroutine2 f, u32 n, u32* params);
-/*
- * ABE_SELECT_MAIN_PORT
- *
- * Parameter :
- * id : audio port name
- * Operations :
- * tells the FW which is the reference stream for adjusting the processing on 23/24/25 slots
+/**
+ * abe_set_sequence_time_accuracy
+ * @fast: fast counter
+ * @slow: slow counter
*
- * Return value :
- * None.
*/
-void abe_select_main_port(abe_port_id id);
+abehal_status abe_set_sequence_time_accuracy (u32 fast, u32 slow);
-/*
- * ABE_WRITE_ASRC
- *
- * Parameter :
- * Id : name of the asrc
- * param : drift value t compensate
- *
- * Operations :
- * Load the drift coefficients in FW memory. This API can be called when the corresponding
- * ASRC is not activated. After reloading the firmware the default coefficients corresponds
- * to "no ASRC activated". Loading the drift value with zero disables the feature.
+/**
+ * abe_reset_port
+ * @id: ABE port ID
*
- * Return value :
- * None.
+ * stop the port activity and reload default parameters on the associated
+ * processing features.
+ * Clears the internal AE buffers.
*/
-void abe_write_asrc(abe_asrc_id id, abe_drift_t param);
-void abe_set_asrc_drift_control(abe_asrc_id id, abe_uint32 f);
+abehal_status abe_reset_port (u32 id);
-/*
- * ABE_WRITE_APS
- *
- * Parameter :
- * Id : name of the aps filter
- * param : table of filter coefficients
- *
- * Operations :
- * Load the filters and thresholds coefficients in FW memory. This API can be called when
- * the corresponding APS is not activated. After reloading the firmware the default coefficients
- * corresponds to "no APS activated". Loading all the coefficients value with zero disables
- * the feature.
+/**
+ * abe_read_remaining_data
+ * @id: ABE port_ID
+ * @n: size pointer to the remaining number of 32bits words
*
- * Return value :
- * None.
+ * computes the remaining amount of data in the buffer.
*/
-void abe_write_aps(abe_aps_id id, abe_aps_t *param);
+abehal_status abe_read_remaining_data (u32 port, u32 *n);
-/*
- * ABE_WRITE_MIXER
- *
- * Parameter :
- * Id : name of the mixer
- * param : list of input gains of the mixer
- * p : list of ports corresponding to the above gains
- *
- * Operations :
- * Load the gain coefficients in FW memory. This API can be called when the corresponding
- * MIXER is not activated. After reloading the firmware the default coefficients corresponds
- * to "all input and output mixer's gain in mute state". A mixer is disabled with a network
- * reconfiguration corresponding to an OPP value.
+/**
+ * abe_disable_data_transfer
+ * @id: ABE port id
*
- * Return value :
- * None.
+ * disables the ATC descriptor and stop IO/port activities
+ * disable the IO task (@f = 0)
+ * clear ATC DMEM buffer, ATC enabled
*/
-void abe_write_mixer(abe_mixer_id id, abe_gain_t g, abe_ramp_t ramp, abe_port_id p);
+abehal_status abe_disable_data_transfer (u32 id);
-/*
- * ABE_SET_ROUTER_CONFIGURATION
- *
- * Parameter :
- * Id : name of the router
- * Conf : id of the configuration
- * param : list of output index of the route
- *
- * Operations :
- * The uplink router takes its input from DMIC (6 samples), AMIC (2 samples) and
- * PORT1/2 (2 stereo ports). Each sample will be individually stored in an intermediate
- * table of 10 elements. The intermediate table is used to route the samples to
- * three directions : REC1 mixer, 2 EANC DMIC source of filtering and MM recording audio path.
- * For example, a use case consisting in AMIC used for uplink voice communication, DMIC 0,1,2,3
- * used for multimedia recording, , DMIC 5 used for EANC filter, DMIC 4 used for the feedback channel,
- * will be implemented with the following routing table index list :
- * [3, 2 , 1, 0, 0, 0 (two dummy indexes to data that will not be on MM_UL), 4, 5, 7, 6]
+/**
+ * abe_enable_data_transfer
+ * @ip: ABE port id
*
- * Return value :
- * None.
+ * enables the ATC descriptor
+ * reset ATC pointers
+ * enable the IO task (@f <> 0)
*/
-void abe_set_router_configuration(abe_router_id id, abe_uint32 configuration, abe_router_t *param);
+abehal_status abe_enable_data_transfer (u32 id);
-/*
- * ABE_READ_DEBUG_TRACE
- *
- * Parameter :
- * data destination pointer
- * max number of data read
- *
- * Operations :
- * reads the AE circular data pointer holding pairs of debug data+timestamps, and store
- * the pairs in linear addressing to the parameter pointer. Stops the copy when the max
- * parameter is reached or when the FIFO is empty.
+/**
+ * abe_set_dmic_filter
+ * @d: DMIC decimation ratio : 16/25/32/40
*
- * Return value :
- * None.
+ * Loads in CMEM a specific list of coefficients depending on the DMIC sampling
+ * frequency (2.4MHz or 3.84MHz). This table compensates the DMIC decimator
+ * roll-off at 20kHz.
+ * The default table is loaded with the DMIC 2.4MHz recommended configuration.
*/
-void abe_read_debug_trace(abe_uint32 *data, abe_uint32 *n);
+abehal_status abe_set_dmic_filter (u32 d);
-/*
- * ABE_READ_DEBUG_TRACE
- *
- * Parameter :
- * data destination pointer
- * max number of data read
- *
- * Operations :
- * reads the AE circular data pointer holding pairs of debug data+timestamps, and store
- * the pairs in linear addressing to the parameter pointer. Stops the copy when the max
- * parameter is reached or when the FIFO is empty.
- *
- * Return value :
- * None.
+/**
+ * abe_connect_cbpr_dmareq_port
+ * @id: port name
+ * @f: desired data format
+ * @d: desired dma_request line (0..7)
+ * @a: returned pointer to the base address of the CBPr register and number of
+ * samples to exchange during a DMA_request.
+ *
+ * enables the data echange between a DMA and the ABE through the
+ * CBPr registers of AESS.
*/
-void abe_read_debug_trace(abe_uint32 *data, abe_uint32 *n);
+abehal_status abe_connect_cbpr_dmareq_port (u32 id, abe_data_format_t *f, u32 d,
+ abe_dma_t *returned_dma_t);
-/*
- * ABE_CONNECT_DEBUG_TRACE
+/**
+ * abe_connect_dmareq_ping_pong_port
+ * @id: port name
+ * @f: desired data format
+ * @d: desired dma_request line (0..7)
+ * @s: half-buffer (ping) size
+ * @a: returned pointer to the base address of the ping-pong buffer and number
+ * of samples to exchange during a DMA_request.
+ *
+ * enables the data echanges between a DMA and a direct access to
+ * the DMEM memory of ABE. On each dma_request activation the DMA will exchange
+ * "s" bytes and switch to the "pong" buffer for a new buffer exchange.
+ */
+abehal_status abe_connect_dmareq_ping_pong_port (u32 id, abe_data_format_t *f,
+ u32 d, u32 s, abe_dma_t *returned_dma_t);
+
+/**
+ * abe_connect_irq_ping_pong_port
+ * @id: port name
+ * @f: desired data format
+ * @I: index of the call-back subroutine to call
+ * @s: half-buffer (ping) size
+ * @p: returned base address of the first (ping) buffer)
+ *
+ * enables the data echanges between a direct access to the DMEM
+ * memory of ABE using cache flush. On each IRQ activation a subroutine
+ * registered with "abe_plug_subroutine" will be called. This subroutine
+ * will generate an amount of samples, send them to DMEM memory and call
+ * "abe_set_ping_pong_buffer" to notify the new amount of samples in the
+ * pong buffer.
+ */
+abehal_status abe_connect_irq_ping_pong_port (u32 id, abe_data_format_t *f,
+ u32 subroutine_id, u32 size,
+ u32 *sink, u32 dsp_mcu_flag);
+
+/**
+ * abe_connect_serial_port()
+ * @id: port name
+ * @f: data format
+ * @i: peripheral ID (McBSP #1, #2, #3)
+ *
+ * Operations : enables the data echanges between a McBSP and an ATC buffer in
+ * DMEM. This API is used connect 48kHz McBSP streams to MM_DL and 8/16kHz
+ * voice streams to VX_UL, VX_DL, BT_VX_UL, BT_VX_DL. It abstracts the
+ * abe_write_port API.
+ */
+abehal_status abe_connect_serial_port (u32 id, abe_data_format_t *f, u32 mcbsp_id);
+
+/**
+ * abe_connect_slimbus_port
+ * @id: port name
+ * @f: data format
+ * @i: peripheral ID (McBSP #1, #2, #3)
+ * @j: peripheral ID (McBSP #1, #2, #3)
+ *
+ * enables the data echanges between 1/2 SB and an ATC buffers in
+ * DMEM.
+ */
+abehal_status abe_connect_slimbus_port (u32 id, abe_data_format_t *f,
+ u32 sb_port1, u32 sb_port2);
+
+/**
+ * abe_connect_tdm_port
+ * @id: port name
+ * @f: data format
+ * @i: peripheral ID (McBSP #1, #2, #3)
+ * @j: peripheral ID (McBSP #1, #2, #3)
+ *
+ * enables the data echanges between TDM McBSP ATC buffers in
+ * DMEM and 1/2 SMEM buffers
+ */
+abehal_status abe_connect_tdm_port (u32 id, abe_data_format_t *f, u32 mcbsp_id);
+
+/**
+ * abe_read_port_address
+ * @dma: output pointer to the DMA iteration and data destination pointer
*
- * Parameter :
- * pointer to the DMEM trace buffer
+ * This API returns the address of the DMA register used on this audio port.
+ * Depending on the protocol being used, adds the base address offset L3
+ * (DMA) or MPU (ARM)
+ */
+abehal_status abe_read_port_address (u32 port, abe_dma_t *dma2);
+
+/**
+ * abe_write_equalizer
+ * @id: name of the equalizer
+ * @param : equalizer coefficients
*
- * Operations :
- * returns the address and size of the real-time debug trace buffer,
- * the content of which will vary from one firmware release to an other
+ * Load the coefficients in CMEM.
+ */
+abehal_status abe_write_equalizer (u32 id, abe_equ_t *param);
+
+/**
+ * abe_write_asrc
+ * @id: name of the port
+ * @param: drift value to compensate [ppm]
+ *
+ * Load the drift variables to the FW memory. This API can be called only
+ * when the corresponding port has been already opened and the ASRC has
+ * been correctly initialized with API abe_init_asrc_... If this API is
+ * used such that the drift has been changed from positive to negative drift
+ * or vice versa, there will be click in the output signal. Loading the drift
+ * value with zero disables the feature.
+ */
+abehal_status abe_write_asrc (u32 port, s32 dppm);
+
+/**
+ * abe_write_aps
+ * @id: name of the aps filter
+ * @param: table of filter coefficients
+ *
+ * Load the filters and thresholds coefficients in FW memory. This API
+ * can be called when the corresponding APS is not activated. After
+ * reloading the firmware the default coefficients corresponds to "no APS
+ * activated".
+ * Loading all the coefficients value with zero disables the feature.
+ */
+abehal_status abe_write_aps (u32 id, abe_aps_t *param);
+
+/**
+ * abe_write_mixer
+ * @id: name of the mixer
+ * @param: list of input gains of the mixer
+ * @p: list of port corresponding to the above gains
+ *
+ * Load the gain coefficients in FW memory. This API can be called when
+ * the corresponding MIXER is not activated. After reloading the firmware
+ * the default coefficients corresponds to "all input and output mixer's gain
+ * in mute state". A mixer is disabled with a network reconfiguration
+ * corresponding to an OPP value.
+ */
+abehal_status abe_write_gain (u32 id, u32 f_g, u32 ramp, u32 p);
+
+/**
+ * abe_write_mixer
+ * @id: name of the mixer
+ * @param: input gains and delay ramp of the mixer
+ * @p: port corresponding to the above gains
+ *
+ * Load the gain coefficients in FW memory. This API can be called when
+ * the corresponding MIXER is not activated. After reloading the firmware
+ * the default coefficients corresponds to "all input and output mixer's
+ * gain in mute state". A mixer is disabled with a network reconfiguration
+ * corresponding to an OPP value.
+ */
+abehal_status abe_write_mixer (u32 id, u32 f_g, u32 f_ramp, u32 p);
+
+/**
+ * abe_read_gain
+ * @id: name of the mixer
+ * @param: list of input gains of the mixer
+ * @p: list of port corresponding to the above gains
*
- * Return value :
- * None.
*/
+abehal_status abe_read_gain (u32 id, u32 *f_g, u32 p);
-void abe_connect_debug_trace(abe_dma_t *a);
+/**
+ * abe_read_mixer
+ * @id: name of the mixer
+ * @param: gains of the mixer
+ * @p: port corresponding to the above gains
+ *
+ * Load the gain coefficients in FW memory. This API can be called when
+ * the corresponding MIXER is not activated. After reloading the firmware
+ * the default coefficients corresponds to "all input and output mixer's
+ * gain in mute state". A mixer is disabled with a network reconfiguration
+ * corresponding to an OPP value.
+ */
+abehal_status abe_read_mixer (u32 id, u32 *f_g, u32 p);
+/**
+ * abe_set_router_configuration
+ * @Id: name of the router
+ * @Conf: id of the configuration
+ * @param: list of output index of the route
+ *
+ * The uplink router takes its input from DMIC (6 samples), AMIC (2 samples)
+ * and PORT1/2 (2 stereo ports). Each sample will be individually stored in
+ * an intermediate table of 10 elements. The intermediate table is used to
+ * route the samples to three directions : REC1 mixer, 2 EANC DMIC source of
+ * filtering and MM recording audio path.
+ */
+abehal_status abe_set_router_configuration (u32 id, u32 k, u32 *param);
-/*
- * ABE_SET_DEBUG_TRACE
+/**
+ * abe_select_data_source
+ * @@@
+ */
+abehal_status abe_select_data_source (u32 port_id, u32 smem_source);
+
+/**
+ * ABE_READ_DEBUG_TRACE
*
- * Parameter :
- * debug ID from a list to be defined
+ * Parameter :
+ * data destination pointer
+ * max number of data read
*
- * Operations :
- * load a mask which filters the debug trace to dedicated types of data
+ * Operations :
+ * reads the AE circular data pointer holding pairs of debug data+
+ * timestamps, and store the pairs in linear addressing to the parameter
+ * pointer. Stops the copy when the max parameter is reached or when the
+ * FIFO is empty.
*
- * Return value :
- * None.
+ * Return value :
+ * None.
*/
-void abe_set_debug_trace(abe_dbg_t debug);
+abehal_status abe_read_debug_trace (u32 *data, u32 *n);
-/*
- * ABE_ENABLE_TEST_PATTERN
+/**
+ * abe_connect_debug_trace
+ * @dma2:pointer to the DMEM trace buffer
*
- * Parameter :
+ * returns the address and size of the real-time debug trace buffer,
+ * the content of which will vary from one firmware release to an other
+ */
+abehal_status abe_connect_debug_trace (abe_dma_t *dma2);
+
+/**
+ * abe_set_debug_trace
+ * @debug: debug ID from a list to be defined
*
- * Operations :
+ * load a mask which filters the debug trace to dedicated types of data
+ */
+abehal_status abe_set_debug_trace (abe_dbg_t debug);
+
+/**
+ * abe_remote_debugger_interface
*
- * Return value :
- * None.
+ * interpretation of the UART stream from the remote debugger commands.
+ * The commands consist in setting break points, loading parameter
*/
+abehal_status abe_remote_debugger_interface (u32 n, u8 *p);
-void abe_enable_test_pattern(abe_patched_pattern_id smem_id, abe_uint32 on_off);
+/**
+ * abe_enable_test_pattern
+ *
+ */
+abehal_status abe_enable_test_pattern (u32 smem_id, u32 on_off);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _ABE_API_H_ */
+#endif/* _ABE_API_H_ */
diff --git a/sound/soc/omap/abe/abe_cm_addr.h b/sound/soc/omap/abe/abe_cm_addr.h
index 71edea36a338..1096e28ab9a8 100644
--- a/sound/soc/omap/abe/abe_cm_addr.h
+++ b/sound/soc/omap/abe/abe_cm_addr.h
@@ -1,354 +1,373 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
*/
-
#ifndef _ABE_CM_ADDR_H_
#define _ABE_CM_ADDR_H_
-#define init_CM_ADDR 0
-#define init_CM_ADDR_END 304
-#define init_CM_sizeof 305
+#define init_CM_ADDR 0
+#define init_CM_ADDR_END 303
+#define init_CM_sizeof 304
+
+#define C_Data_LSB_2_ADDR 304
+#define C_Data_LSB_2_ADDR_END 304
+#define C_Data_LSB_2_sizeof 1
+
+#define C_1_Alpha_ADDR 305
+#define C_1_Alpha_ADDR_END 322
+#define C_1_Alpha_sizeof 18
+
+#define C_Alpha_ADDR 323
+#define C_Alpha_ADDR_END 340
+#define C_Alpha_sizeof 18
-#define C_Data_LSB_2_ADDR 305
-#define C_Data_LSB_2_ADDR_END 305
-#define C_Data_LSB_2_sizeof 1
+#define C_GainsWRamp_ADDR 341
+#define C_GainsWRamp_ADDR_END 354
+#define C_GainsWRamp_sizeof 14
-#define C_1_Alpha_ADDR 306
-#define C_1_Alpha_ADDR_END 323
-#define C_1_Alpha_sizeof 18
+#define C_Gains_DL1M_ADDR 355
+#define C_Gains_DL1M_ADDR_END 358
+#define C_Gains_DL1M_sizeof 4
-#define C_Alpha_ADDR 324
-#define C_Alpha_ADDR_END 341
-#define C_Alpha_sizeof 18
+#define C_Gains_DL2M_ADDR 359
+#define C_Gains_DL2M_ADDR_END 362
+#define C_Gains_DL2M_sizeof 4
-#define C_GainsWRamp_ADDR 342
-#define C_GainsWRamp_ADDR_END 355
-#define C_GainsWRamp_sizeof 14
+#define C_Gains_EchoM_ADDR 363
+#define C_Gains_EchoM_ADDR_END 364
+#define C_Gains_EchoM_sizeof 2
-#define C_Gains_DL1M_ADDR 356
-#define C_Gains_DL1M_ADDR_END 359
-#define C_Gains_DL1M_sizeof 4
+#define C_Gains_SDTM_ADDR 365
+#define C_Gains_SDTM_ADDR_END 366
+#define C_Gains_SDTM_sizeof 2
-#define C_Gains_DL2M_ADDR 360
-#define C_Gains_DL2M_ADDR_END 363
-#define C_Gains_DL2M_sizeof 4
+#define C_Gains_VxRecM_ADDR 367
+#define C_Gains_VxRecM_ADDR_END 370
+#define C_Gains_VxRecM_sizeof 4
-#define C_Gains_EchoM_ADDR 364
-#define C_Gains_EchoM_ADDR_END 365
-#define C_Gains_EchoM_sizeof 2
+#define C_Gains_ULM_ADDR 371
+#define C_Gains_ULM_ADDR_END 374
+#define C_Gains_ULM_sizeof 4
-#define C_Gains_SDTM_ADDR 366
-#define C_Gains_SDTM_ADDR_END 367
-#define C_Gains_SDTM_sizeof 2
+#define C_Gains_unused_ADDR 375
+#define C_Gains_unused_ADDR_END 376
+#define C_Gains_unused_sizeof 2
-#define C_Gains_VxRecM_ADDR 368
-#define C_Gains_VxRecM_ADDR_END 371
-#define C_Gains_VxRecM_sizeof 4
+#define C_SDT_Coefs_ADDR 377
+#define C_SDT_Coefs_ADDR_END 385
+#define C_SDT_Coefs_sizeof 9
-#define C_Gains_ULM_ADDR 372
-#define C_Gains_ULM_ADDR_END 375
-#define C_Gains_ULM_sizeof 4
+#define C_CoefASRC1_VX_ADDR 386
+#define C_CoefASRC1_VX_ADDR_END 404
+#define C_CoefASRC1_VX_sizeof 19
-#define C_Gains_unused_ADDR 376
-#define C_Gains_unused_ADDR_END 377
-#define C_Gains_unused_sizeof 2
+#define C_CoefASRC2_VX_ADDR 405
+#define C_CoefASRC2_VX_ADDR_END 423
+#define C_CoefASRC2_VX_sizeof 19
-#define C_SDT_Coefs_ADDR 378
-#define C_SDT_Coefs_ADDR_END 386
-#define C_SDT_Coefs_sizeof 9
+#define C_CoefASRC3_VX_ADDR 424
+#define C_CoefASRC3_VX_ADDR_END 442
+#define C_CoefASRC3_VX_sizeof 19
-#define C_CoefASRC1_VX_ADDR 387
-#define C_CoefASRC1_VX_ADDR_END 405
-#define C_CoefASRC1_VX_sizeof 19
+#define C_CoefASRC4_VX_ADDR 443
+#define C_CoefASRC4_VX_ADDR_END 461
+#define C_CoefASRC4_VX_sizeof 19
-#define C_CoefASRC2_VX_ADDR 406
-#define C_CoefASRC2_VX_ADDR_END 424
-#define C_CoefASRC2_VX_sizeof 19
+#define C_CoefASRC5_VX_ADDR 462
+#define C_CoefASRC5_VX_ADDR_END 480
+#define C_CoefASRC5_VX_sizeof 19
-#define C_CoefASRC3_VX_ADDR 425
-#define C_CoefASRC3_VX_ADDR_END 443
-#define C_CoefASRC3_VX_sizeof 19
+#define C_CoefASRC6_VX_ADDR 481
+#define C_CoefASRC6_VX_ADDR_END 499
+#define C_CoefASRC6_VX_sizeof 19
-#define C_CoefASRC4_VX_ADDR 444
-#define C_CoefASRC4_VX_ADDR_END 462
-#define C_CoefASRC4_VX_sizeof 19
+#define C_CoefASRC7_VX_ADDR 500
+#define C_CoefASRC7_VX_ADDR_END 518
+#define C_CoefASRC7_VX_sizeof 19
-#define C_CoefASRC5_VX_ADDR 463
-#define C_CoefASRC5_VX_ADDR_END 481
-#define C_CoefASRC5_VX_sizeof 19
+#define C_CoefASRC8_VX_ADDR 519
+#define C_CoefASRC8_VX_ADDR_END 537
+#define C_CoefASRC8_VX_sizeof 19
-#define C_CoefASRC6_VX_ADDR 482
-#define C_CoefASRC6_VX_ADDR_END 500
-#define C_CoefASRC6_VX_sizeof 19
+#define C_CoefASRC9_VX_ADDR 538
+#define C_CoefASRC9_VX_ADDR_END 556
+#define C_CoefASRC9_VX_sizeof 19
-#define C_CoefASRC7_VX_ADDR 501
-#define C_CoefASRC7_VX_ADDR_END 519
-#define C_CoefASRC7_VX_sizeof 19
+#define C_CoefASRC10_VX_ADDR 557
+#define C_CoefASRC10_VX_ADDR_END 575
+#define C_CoefASRC10_VX_sizeof 19
-#define C_CoefASRC8_VX_ADDR 520
-#define C_CoefASRC8_VX_ADDR_END 538
-#define C_CoefASRC8_VX_sizeof 19
+#define C_CoefASRC11_VX_ADDR 576
+#define C_CoefASRC11_VX_ADDR_END 594
+#define C_CoefASRC11_VX_sizeof 19
-#define C_CoefASRC9_VX_ADDR 539
-#define C_CoefASRC9_VX_ADDR_END 557
-#define C_CoefASRC9_VX_sizeof 19
+#define C_CoefASRC12_VX_ADDR 595
+#define C_CoefASRC12_VX_ADDR_END 613
+#define C_CoefASRC12_VX_sizeof 19
-#define C_CoefASRC10_VX_ADDR 558
-#define C_CoefASRC10_VX_ADDR_END 576
-#define C_CoefASRC10_VX_sizeof 19
+#define C_CoefASRC13_VX_ADDR 614
+#define C_CoefASRC13_VX_ADDR_END 632
+#define C_CoefASRC13_VX_sizeof 19
-#define C_CoefASRC11_VX_ADDR 577
-#define C_CoefASRC11_VX_ADDR_END 595
-#define C_CoefASRC11_VX_sizeof 19
+#define C_CoefASRC14_VX_ADDR 633
+#define C_CoefASRC14_VX_ADDR_END 651
+#define C_CoefASRC14_VX_sizeof 19
-#define C_CoefASRC12_VX_ADDR 596
-#define C_CoefASRC12_VX_ADDR_END 614
-#define C_CoefASRC12_VX_sizeof 19
+#define C_CoefASRC15_VX_ADDR 652
+#define C_CoefASRC15_VX_ADDR_END 670
+#define C_CoefASRC15_VX_sizeof 19
-#define C_CoefASRC13_VX_ADDR 615
-#define C_CoefASRC13_VX_ADDR_END 633
-#define C_CoefASRC13_VX_sizeof 19
+#define C_CoefASRC16_VX_ADDR 671
+#define C_CoefASRC16_VX_ADDR_END 689
+#define C_CoefASRC16_VX_sizeof 19
-#define C_CoefASRC14_VX_ADDR 634
-#define C_CoefASRC14_VX_ADDR_END 652
-#define C_CoefASRC14_VX_sizeof 19
+#define C_AlphaCurrent_UL_VX_ADDR 690
+#define C_AlphaCurrent_UL_VX_ADDR_END 690
+#define C_AlphaCurrent_UL_VX_sizeof 1
-#define C_CoefASRC15_VX_ADDR 653
-#define C_CoefASRC15_VX_ADDR_END 671
-#define C_CoefASRC15_VX_sizeof 19
+#define C_BetaCurrent_UL_VX_ADDR 691
+#define C_BetaCurrent_UL_VX_ADDR_END 691
+#define C_BetaCurrent_UL_VX_sizeof 1
-#define C_CoefASRC16_VX_ADDR 672
-#define C_CoefASRC16_VX_ADDR_END 690
-#define C_CoefASRC16_VX_sizeof 19
+#define C_AlphaCurrent_DL_VX_ADDR 692
+#define C_AlphaCurrent_DL_VX_ADDR_END 692
+#define C_AlphaCurrent_DL_VX_sizeof 1
-#define C_AlphaCurrent_UL_VX_ADDR 691
-#define C_AlphaCurrent_UL_VX_ADDR_END 691
-#define C_AlphaCurrent_UL_VX_sizeof 1
+#define C_BetaCurrent_DL_VX_ADDR 693
+#define C_BetaCurrent_DL_VX_ADDR_END 693
+#define C_BetaCurrent_DL_VX_sizeof 1
-#define C_BetaCurrent_UL_VX_ADDR 692
-#define C_BetaCurrent_UL_VX_ADDR_END 692
-#define C_BetaCurrent_UL_VX_sizeof 1
+#define C_CoefASRC1_DL_MM_ADDR 694
+#define C_CoefASRC1_DL_MM_ADDR_END 711
+#define C_CoefASRC1_DL_MM_sizeof 18
-#define C_AlphaCurrent_DL_VX_ADDR 693
-#define C_AlphaCurrent_DL_VX_ADDR_END 693
-#define C_AlphaCurrent_DL_VX_sizeof 1
+#define C_CoefASRC2_DL_MM_ADDR 712
+#define C_CoefASRC2_DL_MM_ADDR_END 729
+#define C_CoefASRC2_DL_MM_sizeof 18
-#define C_BetaCurrent_DL_VX_ADDR 694
-#define C_BetaCurrent_DL_VX_ADDR_END 694
-#define C_BetaCurrent_DL_VX_sizeof 1
+#define C_CoefASRC3_DL_MM_ADDR 730
+#define C_CoefASRC3_DL_MM_ADDR_END 747
+#define C_CoefASRC3_DL_MM_sizeof 18
-#define C_CoefASRC1_DL_MM_ADDR 695
-#define C_CoefASRC1_DL_MM_ADDR_END 712
-#define C_CoefASRC1_DL_MM_sizeof 18
+#define C_CoefASRC4_DL_MM_ADDR 748
+#define C_CoefASRC4_DL_MM_ADDR_END 765
+#define C_CoefASRC4_DL_MM_sizeof 18
-#define C_CoefASRC2_DL_MM_ADDR 713
-#define C_CoefASRC2_DL_MM_ADDR_END 730
-#define C_CoefASRC2_DL_MM_sizeof 18
+#define C_CoefASRC5_DL_MM_ADDR 766
+#define C_CoefASRC5_DL_MM_ADDR_END 783
+#define C_CoefASRC5_DL_MM_sizeof 18
-#define C_CoefASRC3_DL_MM_ADDR 731
-#define C_CoefASRC3_DL_MM_ADDR_END 748
-#define C_CoefASRC3_DL_MM_sizeof 18
+#define C_CoefASRC6_DL_MM_ADDR 784
+#define C_CoefASRC6_DL_MM_ADDR_END 801
+#define C_CoefASRC6_DL_MM_sizeof 18
-#define C_CoefASRC4_DL_MM_ADDR 749
-#define C_CoefASRC4_DL_MM_ADDR_END 766
-#define C_CoefASRC4_DL_MM_sizeof 18
+#define C_CoefASRC7_DL_MM_ADDR 802
+#define C_CoefASRC7_DL_MM_ADDR_END 819
+#define C_CoefASRC7_DL_MM_sizeof 18
-#define C_CoefASRC5_DL_MM_ADDR 767
-#define C_CoefASRC5_DL_MM_ADDR_END 784
-#define C_CoefASRC5_DL_MM_sizeof 18
+#define C_CoefASRC8_DL_MM_ADDR 820
+#define C_CoefASRC8_DL_MM_ADDR_END 837
+#define C_CoefASRC8_DL_MM_sizeof 18
-#define C_CoefASRC6_DL_MM_ADDR 785
-#define C_CoefASRC6_DL_MM_ADDR_END 802
-#define C_CoefASRC6_DL_MM_sizeof 18
+#define C_CoefASRC9_DL_MM_ADDR 838
+#define C_CoefASRC9_DL_MM_ADDR_END 855
+#define C_CoefASRC9_DL_MM_sizeof 18
-#define C_CoefASRC7_DL_MM_ADDR 803
-#define C_CoefASRC7_DL_MM_ADDR_END 820
-#define C_CoefASRC7_DL_MM_sizeof 18
+#define C_CoefASRC10_DL_MM_ADDR 856
+#define C_CoefASRC10_DL_MM_ADDR_END 873
+#define C_CoefASRC10_DL_MM_sizeof 18
-#define C_CoefASRC8_DL_MM_ADDR 821
-#define C_CoefASRC8_DL_MM_ADDR_END 838
-#define C_CoefASRC8_DL_MM_sizeof 18
+#define C_CoefASRC11_DL_MM_ADDR 874
+#define C_CoefASRC11_DL_MM_ADDR_END 891
+#define C_CoefASRC11_DL_MM_sizeof 18
-#define C_CoefASRC9_DL_MM_ADDR 839
-#define C_CoefASRC9_DL_MM_ADDR_END 856
-#define C_CoefASRC9_DL_MM_sizeof 18
+#define C_CoefASRC12_DL_MM_ADDR 892
+#define C_CoefASRC12_DL_MM_ADDR_END 909
+#define C_CoefASRC12_DL_MM_sizeof 18
-#define C_CoefASRC10_DL_MM_ADDR 857
-#define C_CoefASRC10_DL_MM_ADDR_END 874
-#define C_CoefASRC10_DL_MM_sizeof 18
+#define C_CoefASRC13_DL_MM_ADDR 910
+#define C_CoefASRC13_DL_MM_ADDR_END 927
+#define C_CoefASRC13_DL_MM_sizeof 18
-#define C_CoefASRC11_DL_MM_ADDR 875
-#define C_CoefASRC11_DL_MM_ADDR_END 892
-#define C_CoefASRC11_DL_MM_sizeof 18
+#define C_CoefASRC14_DL_MM_ADDR 928
+#define C_CoefASRC14_DL_MM_ADDR_END 945
+#define C_CoefASRC14_DL_MM_sizeof 18
-#define C_CoefASRC12_DL_MM_ADDR 893
-#define C_CoefASRC12_DL_MM_ADDR_END 910
-#define C_CoefASRC12_DL_MM_sizeof 18
+#define C_CoefASRC15_DL_MM_ADDR 946
+#define C_CoefASRC15_DL_MM_ADDR_END 963
+#define C_CoefASRC15_DL_MM_sizeof 18
-#define C_CoefASRC13_DL_MM_ADDR 911
-#define C_CoefASRC13_DL_MM_ADDR_END 928
-#define C_CoefASRC13_DL_MM_sizeof 18
+#define C_CoefASRC16_DL_MM_ADDR 964
+#define C_CoefASRC16_DL_MM_ADDR_END 981
+#define C_CoefASRC16_DL_MM_sizeof 18
-#define C_CoefASRC14_DL_MM_ADDR 929
-#define C_CoefASRC14_DL_MM_ADDR_END 946
-#define C_CoefASRC14_DL_MM_sizeof 18
+#define C_AlphaCurrent_DL_MM_ADDR 982
+#define C_AlphaCurrent_DL_MM_ADDR_END 982
+#define C_AlphaCurrent_DL_MM_sizeof 1
-#define C_CoefASRC15_DL_MM_ADDR 947
-#define C_CoefASRC15_DL_MM_ADDR_END 964
-#define C_CoefASRC15_DL_MM_sizeof 18
+#define C_BetaCurrent_DL_MM_ADDR 983
+#define C_BetaCurrent_DL_MM_ADDR_END 983
+#define C_BetaCurrent_DL_MM_sizeof 1
-#define C_CoefASRC16_DL_MM_ADDR 965
-#define C_CoefASRC16_DL_MM_ADDR_END 982
-#define C_CoefASRC16_DL_MM_sizeof 18
+#define C_DL2_L_Coefs_ADDR 984
+#define C_DL2_L_Coefs_ADDR_END 1008
+#define C_DL2_L_Coefs_sizeof 25
-#define C_AlphaCurrent_DL_MM_ADDR 983
-#define C_AlphaCurrent_DL_MM_ADDR_END 983
-#define C_AlphaCurrent_DL_MM_sizeof 1
+#define C_DL2_R_Coefs_ADDR 1009
+#define C_DL2_R_Coefs_ADDR_END 1033
+#define C_DL2_R_Coefs_sizeof 25
-#define C_BetaCurrent_DL_MM_ADDR 984
-#define C_BetaCurrent_DL_MM_ADDR_END 984
-#define C_BetaCurrent_DL_MM_sizeof 1
+#define C_DL1_Coefs_ADDR 1034
+#define C_DL1_Coefs_ADDR_END 1058
+#define C_DL1_Coefs_sizeof 25
-#define C_DL2_L_Coefs_ADDR 985
-#define C_DL2_L_Coefs_ADDR_END 1009
-#define C_DL2_L_Coefs_sizeof 25
+#define C_SRC_3_LP_Coefs_ADDR 1059
+#define C_SRC_3_LP_Coefs_ADDR_END 1069
+#define C_SRC_3_LP_Coefs_sizeof 11
-#define C_DL2_R_Coefs_ADDR 1010
-#define C_DL2_R_Coefs_ADDR_END 1034
-#define C_DL2_R_Coefs_sizeof 25
+#define C_SRC_3_LP_GAIN_Coefs_ADDR 1070
+#define C_SRC_3_LP_GAIN_Coefs_ADDR_END 1080
+#define C_SRC_3_LP_GAIN_Coefs_sizeof 11
-#define C_DL1_Coefs_ADDR 1035
-#define C_DL1_Coefs_ADDR_END 1059
-#define C_DL1_Coefs_sizeof 25
+#define C_SRC_3_HP_Coefs_ADDR 1081
+#define C_SRC_3_HP_Coefs_ADDR_END 1085
+#define C_SRC_3_HP_Coefs_sizeof 5
-#define C_SRC_3_LP_Coefs_ADDR 1060
-#define C_SRC_3_LP_Coefs_ADDR_END 1070
-#define C_SRC_3_LP_Coefs_sizeof 11
+#define C_SRC_6_LP_Coefs_ADDR 1086
+#define C_SRC_6_LP_Coefs_ADDR_END 1096
+#define C_SRC_6_LP_Coefs_sizeof 11
-#define C_SRC_3_LP_GAIN_Coefs_ADDR 1071
-#define C_SRC_3_LP_GAIN_Coefs_ADDR_END 1081
-#define C_SRC_3_LP_GAIN_Coefs_sizeof 11
+#define C_SRC_6_LP_GAIN_Coefs_ADDR 1097
+#define C_SRC_6_LP_GAIN_Coefs_ADDR_END 1107
+#define C_SRC_6_LP_GAIN_Coefs_sizeof 11
-#define C_SRC_3_HP_Coefs_ADDR 1082
-#define C_SRC_3_HP_Coefs_ADDR_END 1086
-#define C_SRC_3_HP_Coefs_sizeof 5
+#define C_SRC_6_HP_Coefs_ADDR 1108
+#define C_SRC_6_HP_Coefs_ADDR_END 1114
+#define C_SRC_6_HP_Coefs_sizeof 7
-#define C_SRC_6_LP_Coefs_ADDR 1087
-#define C_SRC_6_LP_Coefs_ADDR_END 1097
-#define C_SRC_6_LP_Coefs_sizeof 11
+#define C_EANC_WarpCoeffs_ADDR 1115
+#define C_EANC_WarpCoeffs_ADDR_END 1116
+#define C_EANC_WarpCoeffs_sizeof 2
-#define C_SRC_6_LP_GAIN_Coefs_ADDR 1098
-#define C_SRC_6_LP_GAIN_Coefs_ADDR_END 1108
-#define C_SRC_6_LP_GAIN_Coefs_sizeof 11
+#define C_EANC_FIRcoeffs_ADDR 1117
+#define C_EANC_FIRcoeffs_ADDR_END 1137
+#define C_EANC_FIRcoeffs_sizeof 21
-#define C_SRC_6_HP_Coefs_ADDR 1109
-#define C_SRC_6_HP_Coefs_ADDR_END 1115
-#define C_SRC_6_HP_Coefs_sizeof 7
+#define C_EANC_IIRcoeffs_ADDR 1138
+#define C_EANC_IIRcoeffs_ADDR_END 1154
+#define C_EANC_IIRcoeffs_sizeof 17
-#define C_EANC_WarpCoeffs_ADDR 1116
-#define C_EANC_WarpCoeffs_ADDR_END 1117
-#define C_EANC_WarpCoeffs_sizeof 2
+#define C_EANC_FIRcoeffs_2nd_ADDR 1155
+#define C_EANC_FIRcoeffs_2nd_ADDR_END 1175
+#define C_EANC_FIRcoeffs_2nd_sizeof 21
-#define C_EANC_FIRcoeffs_ADDR 1118
-#define C_EANC_FIRcoeffs_ADDR_END 1138
-#define C_EANC_FIRcoeffs_sizeof 21
+#define C_EANC_IIRcoeffs_2nd_ADDR 1176
+#define C_EANC_IIRcoeffs_2nd_ADDR_END 1192
+#define C_EANC_IIRcoeffs_2nd_sizeof 17
-#define C_EANC_IIRcoeffs_ADDR 1139
-#define C_EANC_IIRcoeffs_ADDR_END 1155
-#define C_EANC_IIRcoeffs_sizeof 17
+#define C_APS_DL1_coeffs1_ADDR 1193
+#define C_APS_DL1_coeffs1_ADDR_END 1201
+#define C_APS_DL1_coeffs1_sizeof 9
-#define C_EANC_FIRcoeffs_2nd_ADDR 1156
-#define C_EANC_FIRcoeffs_2nd_ADDR_END 1176
-#define C_EANC_FIRcoeffs_2nd_sizeof 21
+#define C_APS_DL1_M_coeffs2_ADDR 1202
+#define C_APS_DL1_M_coeffs2_ADDR_END 1204
+#define C_APS_DL1_M_coeffs2_sizeof 3
-#define C_EANC_IIRcoeffs_2nd_ADDR 1177
-#define C_EANC_IIRcoeffs_2nd_ADDR_END 1193
-#define C_EANC_IIRcoeffs_2nd_sizeof 17
+#define C_APS_DL1_C_coeffs2_ADDR 1205
+#define C_APS_DL1_C_coeffs2_ADDR_END 1207
+#define C_APS_DL1_C_coeffs2_sizeof 3
-#define C_APS_DL1_coeffs1_ADDR 1194
-#define C_APS_DL1_coeffs1_ADDR_END 1202
-#define C_APS_DL1_coeffs1_sizeof 9
+#define C_APS_DL2_L_coeffs1_ADDR 1208
+#define C_APS_DL2_L_coeffs1_ADDR_END 1216
+#define C_APS_DL2_L_coeffs1_sizeof 9
-#define C_APS_DL1_M_coeffs2_ADDR 1203
-#define C_APS_DL1_M_coeffs2_ADDR_END 1205
-#define C_APS_DL1_M_coeffs2_sizeof 3
+#define C_APS_DL2_R_coeffs1_ADDR 1217
+#define C_APS_DL2_R_coeffs1_ADDR_END 1225
+#define C_APS_DL2_R_coeffs1_sizeof 9
-#define C_APS_DL1_C_coeffs2_ADDR 1206
-#define C_APS_DL1_C_coeffs2_ADDR_END 1208
-#define C_APS_DL1_C_coeffs2_sizeof 3
+#define C_APS_DL2_L_M_coeffs2_ADDR 1226
+#define C_APS_DL2_L_M_coeffs2_ADDR_END 1228
+#define C_APS_DL2_L_M_coeffs2_sizeof 3
-#define C_APS_DL2_L_coeffs1_ADDR 1209
-#define C_APS_DL2_L_coeffs1_ADDR_END 1217
-#define C_APS_DL2_L_coeffs1_sizeof 9
+#define C_APS_DL2_R_M_coeffs2_ADDR 1229
+#define C_APS_DL2_R_M_coeffs2_ADDR_END 1231
+#define C_APS_DL2_R_M_coeffs2_sizeof 3
-#define C_APS_DL2_R_coeffs1_ADDR 1218
-#define C_APS_DL2_R_coeffs1_ADDR_END 1226
-#define C_APS_DL2_R_coeffs1_sizeof 9
+#define C_APS_DL2_L_C_coeffs2_ADDR 1232
+#define C_APS_DL2_L_C_coeffs2_ADDR_END 1234
+#define C_APS_DL2_L_C_coeffs2_sizeof 3
-#define C_APS_DL2_L_M_coeffs2_ADDR 1227
-#define C_APS_DL2_L_M_coeffs2_ADDR_END 1229
-#define C_APS_DL2_L_M_coeffs2_sizeof 3
+#define C_APS_DL2_R_C_coeffs2_ADDR 1235
+#define C_APS_DL2_R_C_coeffs2_ADDR_END 1237
+#define C_APS_DL2_R_C_coeffs2_sizeof 3
-#define C_APS_DL2_R_M_coeffs2_ADDR 1230
-#define C_APS_DL2_R_M_coeffs2_ADDR_END 1232
-#define C_APS_DL2_R_M_coeffs2_sizeof 3
+#define C_AlphaCurrent_ECHO_REF_ADDR 1238
+#define C_AlphaCurrent_ECHO_REF_ADDR_END 1238
+#define C_AlphaCurrent_ECHO_REF_sizeof 1
-#define C_APS_DL2_L_C_coeffs2_ADDR 1233
-#define C_APS_DL2_L_C_coeffs2_ADDR_END 1235
-#define C_APS_DL2_L_C_coeffs2_sizeof 3
+#define C_BetaCurrent_ECHO_REF_ADDR 1239
+#define C_BetaCurrent_ECHO_REF_ADDR_END 1239
+#define C_BetaCurrent_ECHO_REF_sizeof 1
-#define C_APS_DL2_R_C_coeffs2_ADDR 1236
-#define C_APS_DL2_R_C_coeffs2_ADDR_END 1238
-#define C_APS_DL2_R_C_coeffs2_sizeof 3
+#define C_APS_DL1_EQ_ADDR 1240
+#define C_APS_DL1_EQ_ADDR_END 1248
+#define C_APS_DL1_EQ_sizeof 9
-#define C_AlphaCurrent_ECHO_REF_ADDR 1239
-#define C_AlphaCurrent_ECHO_REF_ADDR_END 1239
-#define C_AlphaCurrent_ECHO_REF_sizeof 1
+#define C_APS_DL2_L_EQ_ADDR 1249
+#define C_APS_DL2_L_EQ_ADDR_END 1257
+#define C_APS_DL2_L_EQ_sizeof 9
-#define C_BetaCurrent_ECHO_REF_ADDR 1240
-#define C_BetaCurrent_ECHO_REF_ADDR_END 1240
-#define C_BetaCurrent_ECHO_REF_sizeof 1
+#define C_APS_DL2_R_EQ_ADDR 1258
+#define C_APS_DL2_R_EQ_ADDR_END 1266
+#define C_APS_DL2_R_EQ_sizeof 9
-#define C_APS_DL1_EQ_ADDR 1241
-#define C_APS_DL1_EQ_ADDR_END 1249
-#define C_APS_DL1_EQ_sizeof 9
+#define C_Vibra2_consts_ADDR 1267
+#define C_Vibra2_consts_ADDR_END 1270
+#define C_Vibra2_consts_sizeof 4
-#define C_APS_DL2_L_EQ_ADDR 1250
-#define C_APS_DL2_L_EQ_ADDR_END 1258
-#define C_APS_DL2_L_EQ_sizeof 9
+#define C_Vibra1_coeffs_ADDR 1271
+#define C_Vibra1_coeffs_ADDR_END 1281
+#define C_Vibra1_coeffs_sizeof 11
-#define C_APS_DL2_R_EQ_ADDR 1259
-#define C_APS_DL2_R_EQ_ADDR_END 1267
-#define C_APS_DL2_R_EQ_sizeof 9
+#define C_48_96_LP_Coefs_ADDR 1282
+#define C_48_96_LP_Coefs_ADDR_END 1296
+#define C_48_96_LP_Coefs_sizeof 15
-#define C_Vibra2_consts_ADDR 1268
-#define C_Vibra2_consts_ADDR_END 1271
-#define C_Vibra2_consts_sizeof 4
+#define C_98_48_LP_Coefs_ADDR 1297
+#define C_98_48_LP_Coefs_ADDR_END 1315
+#define C_98_48_LP_Coefs_sizeof 19
-#define C_Vibra1_coeffs_ADDR 1272
-#define C_Vibra1_coeffs_ADDR_END 1282
-#define C_Vibra1_coeffs_sizeof 11
+#define C_INPUT_SCALE_ADDR 1316
+#define C_INPUT_SCALE_ADDR_END 1316
+#define C_INPUT_SCALE_sizeof 1
-#define C_48_96_LP_Coefs_ADDR 1283
-#define C_48_96_LP_Coefs_ADDR_END 1297
-#define C_48_96_LP_Coefs_sizeof 15
+#define C_OUTPUT_SCALE_ADDR 1317
+#define C_OUTPUT_SCALE_ADDR_END 1317
+#define C_OUTPUT_SCALE_sizeof 1
-#define C_98_48_LP_Coefs_ADDR 1298
-#define C_98_48_LP_Coefs_ADDR_END 1316
-#define C_98_48_LP_Coefs_sizeof 19
+#define C_MUTE_SCALING_ADDR 1318
+#define C_MUTE_SCALING_ADDR_END 1318
+#define C_MUTE_SCALING_sizeof 1
-#define C_INPUT_SCALE_ADDR 1317
-#define C_INPUT_SCALE_ADDR_END 1317
-#define C_INPUT_SCALE_sizeof 1
+#define C_GAINS_0DB_ADDR 1319
+#define C_GAINS_0DB_ADDR_END 1320
+#define C_GAINS_0DB_sizeof 2
-#define C_OUTPUT_SCALE_ADDR 1318
-#define C_OUTPUT_SCALE_ADDR_END 1318
-#define C_OUTPUT_SCALE_sizeof 1
#endif /* _ABECM_ADDR_H_ */
diff --git a/sound/soc/omap/abe/abe_cof.h b/sound/soc/omap/abe/abe_cof.h
index 7426208dee35..f33cf05348f9 100644
--- a/sound/soc/omap/abe/abe_cof.h
+++ b/sound/soc/omap/abe/abe_cof.h
@@ -1,31 +1,24 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+/* =============================================================================
+* Texas Instruments OMAP(TM) Platform Software
+* (c) Copyright 2009 Texas Instruments Incorporated. All Rights Reserved.
+*
+* Use of this software is controlled by the terms and conditions found
+* in the license agreement under which this software has been supplied.
+* =========================================================================== */
+/**
+ * @file ABE_COF.H
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
- */
-const abe_int32 abe_dmic_40[C_98_48_LP_Coefs_sizeof] = {
- -4119413, -192384, -341428, -348088, -151380, 151380,
- 348088, 341428, 192384, 4119415, 1938156, -6935719,
- 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982
- };
+ * 'ABE_COF.H' coefficients used to tune the firmware
+ *
+ * @path
+ * @rev 01.00
+ * =========================================================================== */
-const abe_int32 abe_dmic_32 [C_98_48_LP_Coefs_sizeof] = {
- -4119413, -192384, -341428, -348088, -151380, 151380,
- 348088, 341428, 192384, 4119415, 1938156, -6935719,
- 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982
- };
+/*
+ * ABE CONST AREA FOR DMIC DECIMATION FILTERS -------------------------------------------------------
+ */
+const abe_int32 abe_dmic_40 [C_98_48_LP_Coefs_sizeof] = { -4119413, -192384, -341428, -348088, -151380, 151380, 348088, 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982 };
+const abe_int32 abe_dmic_32 [C_98_48_LP_Coefs_sizeof] = { -4119413, -192384, -341428, -348088, -151380, 151380, 348088, 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982 };
+const abe_int32 abe_dmic_25 [C_98_48_LP_Coefs_sizeof] = { -4119413, -192384, -341428, -348088, -151380, 151380, 348088, 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982 };
+const abe_int32 abe_dmic_16 [C_98_48_LP_Coefs_sizeof] = { -4119413, -192384, -341428, -348088, -151380, 151380, 348088, 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982 };
-const abe_int32 abe_dmic_25 [C_98_48_LP_Coefs_sizeof] = {
- -4119413, -192384, -341428, -348088, -151380, 151380,
- 348088, 341428, 192384, 4119415, 1938156, -6935719,
- 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982
- };
-const abe_int32 abe_dmic_16 [C_98_48_LP_Coefs_sizeof] = {
- -4119413, -192384, -341428, -348088, -151380, 151380,
- 348088, 341428, 192384, 4119415, 1938156, -6935719,
- 775202, -1801934, 2997698, -3692214, 3406822, -2280190, 1042982
- };
diff --git a/sound/soc/omap/abe/abe_dat.c b/sound/soc/omap/abe/abe_dat.c
new file mode 100644
index 000000000000..d0c353fde68a
--- /dev/null
+++ b/sound/soc/omap/abe/abe_dat.c
@@ -0,0 +1,934 @@
+/*
+ * ALSA SoC OMAP ABE driver
+ *
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include "abe_main.h"
+
+#ifndef abe_dat_c
+#define abe_dat_c
+
+
+const u32 abe_firmware_array[ABE_FIRMWARE_MAX_SIZE] = {
+#include "abe_firmware.c"
+};
+
+u32 abe_firmware_version_number;
+
+/*
+ * HAL/FW ports status / format / sampling / protocol(call_back) / features
+ * / gain / name
+ */
+
+abe_port_t abe_port [LAST_PORT_ID]; /* list of ABE ports */
+const abe_port_t abe_port_init [LAST_PORT_ID] = {
+
+ /* Status Data Format Drift Call-Back Protocol+selector desc_addr;
+ buf_addr; buf_size; iter; irq_addr irq_data DMA_T $Features
+ reseted at start Port Name for the debug trace */
+ /* DMIC */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {96000, SIX_MSB},
+ NODRIFT, NOCALLBACK, 0, 0,
+ {
+ SNK_P, DMIC_PORT_PROT,
+ {dmem_dmic, dmem_dmic_size, DMIC_ITER}
+ },
+ {0, 0},
+ {EQMIC, 0}, "DMIC"
+ },
+ /* PDM_UL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {96000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_amic, 0,
+ {
+ SNK_P, MCPDMUL_PORT_PROT,
+ {dmem_amic, dmem_amic_size, MCPDM_UL_ITER}
+ },
+ {0, 0},
+ {EQMIC, 0}, "PDM_UL"
+ },
+ /* BT_VX_UL*/ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, { 8000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_bt_vx_ul, 0,
+ {
+ SNK_P, SERIAL_PORT_PROT, {
+ MCBSP1_DMA_TX*ATC_SIZE,
+ dmem_bt_vx_ul,dmem_bt_vx_ul_size,
+ 1 * SCHED_LOOP_8kHz
+ }
+ },
+ {0, 0}, {0}, "BT_VX_UL"
+ },
+ /* MM_UL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_mm_ul, 0,
+ {
+ SRC_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX3*ATC_SIZE,
+ dmem_mm_ul,dmem_mm_ul_size,
+ 10 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<3)
+ }
+ },
+ {CIRCULAR_BUFFER_PERIPHERAL_R__3, 120},
+ {UPROUTE, 0}, "MM_UL"
+ },
+ /* MM_UL2 */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_mm_ul2,0,
+ {
+ SRC_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX4*ATC_SIZE,
+ dmem_mm_ul2,dmem_mm_ul2_size,
+ 2 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<4)
+ }
+ },
+ {CIRCULAR_BUFFER_PERIPHERAL_R__4, 24},
+ {UPROUTE, 0}, "MM_UL2"
+ },
+ /* VX_UL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, { 8000, MONO_MSB},
+ NODRIFT, NOCALLBACK, smem_vx_ul, 0,
+ {
+ SRC_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX2*ATC_SIZE,
+ dmem_vx_ul,dmem_vx_ul_size,
+ 1 * SCHED_LOOP_8kHz, ABE_DMASTATUS_RAW,(1<<2)
+ }
+ }, {
+ CIRCULAR_BUFFER_PERIPHERAL_R__2, 2
+ },
+ {ASRC2, 0}, "VX_UL"
+ },
+ /* MM_DL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_mm_dl_opp100, 0,
+ {
+ SNK_P, PINGPONG_PORT_PROT, {
+ CBPr_DMA_RTX0*ATC_SIZE,
+ dmem_mm_dl,dmem_mm_dl_size,
+ 2 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<0)
+ }
+ },
+ {CIRCULAR_BUFFER_PERIPHERAL_R__0, 24},
+ {ASRC3, 0}, "MM_DL"
+ },
+ /* VX_DL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, { 8000, MONO_MSB},
+ NODRIFT, NOCALLBACK, smem_vx_dl, 0,
+ {
+ SNK_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX1*ATC_SIZE,
+ dmem_vx_dl,dmem_vx_dl_size,
+ 1 * SCHED_LOOP_8kHz, ABE_DMASTATUS_RAW,(1<<1)
+ }
+ },
+ {CIRCULAR_BUFFER_PERIPHERAL_R__1, 2},
+ {ASRC1, 0}, "VX_DL"
+ },
+ /* TONES_DL*/ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_tones_dl, 0,
+ {
+ SNK_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX5*ATC_SIZE,
+ dmem_tones_dl,dmem_tones_dl_size,
+ 2 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<5)
+ }
+ },
+ {CIRCULAR_BUFFER_PERIPHERAL_R__5, 24},
+ {0}, "TONES_DL"
+ },
+ /* VIB_DL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {24000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_vib, 0,
+ {
+ SNK_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX6*ATC_SIZE,
+ dmem_vib_dl,dmem_vib_dl_size,
+ 2 * SCHED_LOOP_24kHz, ABE_DMASTATUS_RAW,(1<<6)
+ }
+ },
+ {CIRCULAR_BUFFER_PERIPHERAL_R__6, 12},
+ {0}, "VIB_DL"
+ },
+ /* BT_VX_DL*/ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, { 8000, MONO_MSB},
+ NODRIFT, NOCALLBACK, smem_bt_vx_dl, 0,
+ {
+ SRC_P, SERIAL_PORT_PROT, {
+ MCBSP1_DMA_RX*ATC_SIZE,
+ dmem_bt_vx_dl,dmem_bt_vx_dl_size,
+ 1 * SCHED_LOOP_8kHz,
+ }
+ },
+ {0, 0}, {0}, "BT_VX_DL"
+ },
+
+ /* PDM_DL */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {96000, SIX_MSB},
+ NODRIFT, NOCALLBACK, 0,0,
+ {SRC_P, MCPDMDL_PORT_PROT, {dmem_mcpdm, dmem_mcpdm_size}}, {0, 0},
+ {MIXDL1, EQ1, APS1, MIXDL2, EQ2L, EQ2R, APS2L, APS2R,0}, "PDM_DL"
+ },
+
+ /* MM_EXT_OUT*/
+ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_mm_ext_out, 0,
+ {
+ SRC_P, SERIAL_PORT_PROT, {
+ MCBSP1_DMA_TX*ATC_SIZE,
+ dmem_mm_ext_out,dmem_mm_ext_out_size,
+ 2 * SCHED_LOOP_48kHz
+ }
+ }, {0, 0}, {0}, "MM_EXT_OUT"
+ },
+
+ /* MM_EXT_IN */
+ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, smem_mm_ext_in, 0,
+ {
+ SNK_P, SERIAL_PORT_PROT, {
+ MCBSP1_DMA_RX*ATC_SIZE,
+ dmem_mm_ext_in ,dmem_mm_ext_in_size,
+ 2 * SCHED_LOOP_48kHz
+ }
+ },
+ {0, 0}, {0}, "MM_EXT_IN"
+ },
+
+ /* PCM3_TX */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, 0, 0,
+ {
+ SRC_P, TDM_SERIAL_PORT_PROT,{
+ MCBSP3_DMA_TX*ATC_SIZE,
+ dmem_mm_ext_out,dmem_mm_ext_out_size,
+ 2 * SCHED_LOOP_48kHz
+ }
+ },
+ {0, 0}, {0}, "TDM_OUT"
+ },
+
+ /* PCM3_RX */ {
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, STEREO_MSB},
+ NODRIFT, NOCALLBACK, 0, 0,
+ {
+ SRC_P, TDM_SERIAL_PORT_PROT,{
+ MCBSP3_DMA_RX*ATC_SIZE,
+ dmem_mm_ext_in ,dmem_mm_ext_in_size,
+ 2 * SCHED_LOOP_48kHz
+ }
+ },
+ {0, 0}, {0}, "TDM_IN"
+ },
+
+ /* SCHD_DBG_PORT */{
+ OMAP_ABE_PORT_ACTIVITY_IDLE, {48000, MONO_MSB},
+ NODRIFT, NOCALLBACK, 0,0,
+ {
+ SRC_P, DMAREQ_PORT_PROT, {
+ CBPr_DMA_RTX7*ATC_SIZE,
+ dmem_mm_trace,dmem_mm_trace_size,
+ 2 * SCHED_LOOP_48kHz,ABE_DMASTATUS_RAW,(1<<4)
+ }
+ }, {CIRCULAR_BUFFER_PERIPHERAL_R__7, 24},
+ {FEAT_SEQ, FEAT_CTL, FEAT_GAINS, 0}, "SCHD_DBG"
+ },
+};
+/* abe_port_init : smem content for DMIC/PDM must be 0 or Dummy_AM_labelID */
+
+/*
+ * Firmware features
+ */
+abe_feature_t all_feature [MAXNBFEATURE];
+const abe_feature_t all_feature_init [] = {
+ /* ON_reset OFF READ WRITE STATUS INPUT OUTPUT SLOT/S OPP NAME */
+ /* equalizer downlink path headset + earphone */
+ /* EQ1 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq1,
+ c_write_eq1, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ1"
+ },
+
+ /* equalizer downlink path integrated handsfree LEFT */
+ /* EQ2L */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq2,
+ c_write_eq2, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," DLEQ2L"
+ },
+
+ /* equalizer downlink path integrated handsfree RIGHT */
+ /* EQ2R */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," DLEQ2R"
+ },
+
+ /* equalizer downlink path side-tone */
+ /* EQSDT */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQSDT"
+ },
+
+ /* SRC+equalizer uplink DMIC 1st pair */
+ /* EQDMIC1 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQDMIC1"
+ },
+
+ /* SRC+equalizer uplink DMIC 2nd pair */
+ /* EQDMIC2 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQDMIC2"
+ },
+
+ /* SRC+equalizer uplink DMIC 3rd pair */
+ /* EQDMIC3 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQDMIC3"
+ },
+
+ /* SRC+equalizer uplink AMIC */
+ /* EQAMIC */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQAMIC"
+ },
+
+ /* Acoustic protection for headset */
+ /* APS1 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " APS1"
+ },
+
+ /* acoustic protection high-pass filter for handsfree "Left" */
+ /* APS2 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," APS2"
+ },
+
+ /* acoustic protection high-pass filter for handsfree "Right" */
+ /* APS3 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," APS3"
+ },
+
+ /* asynchronous sample-rate-converter for the downlink voice path */
+ /* ASRC1 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " ASRC_VXDL"
+ },
+
+ /* asynchronous sample-rate-converter for the uplink voice path */
+ /* ASRC2 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " ASRC_VXUL"
+ },
+
+ /* asynchronous sample-rate-converter for the multimedia player */
+ /* ASRC3 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," ASRC_MMDL"
+ },
+
+ /* asynchronous sample-rate-converter for the echo reference */
+ /* ASRC4 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " ASRC_ECHO"
+ },
+
+ /* mixer of the headset and earphone path */
+ /* MXDL1 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " MIX_DL1"
+ },
+
+ /* mixer of the hands-free path */
+ /* MXDL2 */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," MIX_DL2"
+ },
+
+ /* mixer for uplink tone mixer */
+ /* MXAUDUL */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MXSAUDUL"
+ },
+
+ /* mixer for voice recording */
+ /* MXVXREC */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MXVXREC"
+ },
+
+ /* mixer for side-tone */
+ /* MXSDT */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MIX_SDT"
+ },
+
+ /* mixer for echo reference */
+ /* MXECHO */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MIX_ECHO"
+ },
+
+ /* router of the uplink path */
+ /* UPROUTE */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " DLEQ3"
+ },
+
+ /* all gains */
+ /* GAINS */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ3"
+ },
+
+ /* active noise canceller */
+ /* EANC */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," DLEQ3"
+ },
+
+ /* sequencing queue of micro tasks */
+ /* SEQ */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ3"
+ },
+
+ /* Phoenix control queue through McPDM */
+ /* CTL */
+ {
+ c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3,
+ 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ3"
+ },
+};
+
+
+
+/*
+ * MEMORY MAPPING OF THE DMEM FIFOs
+ */
+
+/* DMEM port map */
+u32 abe_map_dmem [LAST_PORT_ID];
+u32 abe_map_dmem_secondary [LAST_PORT_ID];
+
+/* DMEM port buffer sizes */
+u32 abe_map_dmem_size [LAST_PORT_ID];
+
+
+/*
+ * AESS/ATC destination and source address translation (except McASPs)
+ * from the original 64bits words address
+ */
+const u32 abe_atc_dstid [ABE_ATC_DESC_SIZE>>3] = {
+ /* DMA_0 DMIC PDM_DL PDM_UL McB1TX McB1RX McB2TX McB2RX 0 .. 7 */
+ 0, 0, 12, 0, 1, 0, 2, 0,
+ /* McB3TX McB3RX SLIMT0 SLIMT1 SLIMT2 SLIMT3 SLIMT4 SLIMT5 8 .. 15 */
+ 3, 0, 4, 5, 6, 7, 8, 9,
+ /* SLIMT6 SLIMT7 SLIMR0 SLIMR1 SLIMR2 SLIMR3 SLIMR4 SLIMR5 16 .. 23 */
+ 10, 11, 0, 0, 0, 0, 0, 0,
+ /* SLIMR6 SLIMR7 McASP1X ----- ----- McASP1R ----- ----- 24 .. 31 */
+ 0, 0, 14, 0, 0, 0, 0, 0,
+ /* CBPrT0 CBPrT1 CBPrT2 CBPrT3 CBPrT4 CBPrT5 CBPrT6 CBPrT7 32 .. 39 */
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ /* CBP_T0 CBP_T1 CBP_T2 CBP_T3 CBP_T4 CBP_T5 CBP_T6 CBP_T7 40 .. 47 */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* CBP_T8 CBP_T9 CBP_T10 CBP_T11 CBP_T12 CBP_T13 CBP_T14
+ CBP_T15 48 .. 63 */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+};
+const u32 abe_atc_srcid [ABE_ATC_DESC_SIZE>>3] = {
+ /* DMA_0 DMIC PDM_DL PDM_UL McB1TX McB1RX McB2TX McB2RX 0 .. 7 */
+ 0, 12, 0, 13, 0, 1, 0, 2,
+ /* McB3TX McB3RX SLIMT0 SLIMT1 SLIMT2 SLIMT3 SLIMT4 SLIMT5 8 .. 15 */
+ 0, 3, 0, 0, 0, 0, 0, 0,
+ /* SLIMT6 SLIMT7 SLIMR0 SLIMR1 SLIMR2 SLIMR3 SLIMR4 SLIMR5 16 .. 23 */
+ 0, 0, 4, 5, 6, 7, 8, 9,
+ /* SLIMR6 SLIMR7 McASP1X ----- ----- McASP1R ----- ----- 24 .. 31 */
+ 10, 11, 0, 0, 0, 14, 0, 0,
+ /* CBPrT0 CBPrT1 CBPrT2 CBPrT3 CBPrT4 CBPrT5 CBPrT6 CBPrT7 32 .. 39 */
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ /* CBP_T0 CBP_T1 CBP_T2 CBP_T3 CBP_T4 CBP_T5 CBP_T6 CBP_T7 40 .. 47 */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* CBP_T8 CBP_T9 CBP_T10 CBP_T11 CBP_T12 CBP_T13 CBP_T14
+ CBP_T15 48 .. 63 */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+
+/*
+ * preset default routing configurations
+ * This is given as implementation EXAMPLES
+ * the programmer uses "abe_set_router_configuration" with its own tables
+ */
+
+const abe_router_t abe_router_ul_table_preset [NBROUTE_CONFIG][NBROUTE_UL] = { {
+
+ /* VOICE UPLINK WITH PHOENIX MICROPHONES - UPROUTE_CONFIG_AMIC */
+
+ /* 0 .. 9 = MM_UL */
+ DMIC1_L_labelID, DMIC1_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID,
+ MM_EXT_IN_L_labelID, MM_EXT_IN_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+
+ /* 10 .. 11 = MM_UL2 */
+ DMIC3_L_labelID, DMIC3_R_labelID,
+
+ /* 12 .. 13 = VX_UL */
+ AMIC_L_labelID, AMIC_R_labelID,
+
+ /* 14 .. 15 = RESERVED */
+ ZERO_labelID, ZERO_labelID,
+ },
+
+ /* VOICE UPLINK WITH THE FIRST DMIC PAIR - UPROUTE_CONFIG_DMIC1*/
+ {
+ /* 0 .. 9 = MM_UL */
+ DMIC2_L_labelID, DMIC2_R_labelID, DMIC3_L_labelID, DMIC3_R_labelID,
+ DMIC1_L_labelID, DMIC1_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+
+ /* 10 .. 11 = MM_UL2 */
+ DMIC1_L_labelID, DMIC1_R_labelID,
+
+ /* 12 .. 13 = VX_UL */
+ DMIC1_L_labelID, DMIC1_R_labelID,
+
+ /* 14 .. 15 = RESERVED */
+ ZERO_labelID, ZERO_labelID,
+ },
+
+ /* VOICE UPLINK WITH THE SECOND DMIC PAIR - UPROUTE_CONFIG_DMIC2 */
+ {
+ /* 0 .. 9 = MM_UL */
+ DMIC3_L_labelID, DMIC3_R_labelID, DMIC1_L_labelID, DMIC1_R_labelID,
+ DMIC2_L_labelID, DMIC2_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+
+ /* 10 .. 11 = MM_UL2 */
+ DMIC2_L_labelID, DMIC2_R_labelID,
+
+ /* 12 .. 13 = VX_UL */
+ DMIC2_L_labelID, DMIC2_R_labelID,
+
+ /* 14 .. 15 = RESERVED */
+ ZERO_labelID, ZERO_labelID,
+ },
+
+ /* VOICE UPLINK WITH THE LAST DMIC PAIR - UPROUTE_CONFIG_DMIC3 */
+ {
+ /* 0 .. 9 = MM_UL */
+ AMIC_L_labelID, AMIC_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID,
+ DMIC3_L_labelID, DMIC3_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+
+ /* 10 .. 11 = MM_UL2 */
+ DMIC3_L_labelID, DMIC3_R_labelID,
+
+ /* 12 .. 13 = VX_UL */
+ DMIC3_L_labelID, DMIC3_R_labelID,
+
+ /* 14 .. 15 = RESERVED */
+ ZERO_labelID, ZERO_labelID,
+ },
+
+ /* VOICE UPLINK WITH THE BT - UPROUTE_CONFIG_BT */
+ {
+ /* 0 .. 9 = MM_UL */
+ BT_UL_L_labelID, BT_UL_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID,
+ DMIC3_L_labelID, DMIC3_R_labelID, DMIC1_L_labelID, DMIC1_R_labelID,
+ ZERO_labelID, ZERO_labelID,
+
+ /* 10 .. 11 = MM_UL2 */
+ AMIC_L_labelID, AMIC_R_labelID,
+
+ /* 12 .. 13 = VX_UL */
+ BT_UL_L_labelID, BT_UL_R_labelID,
+
+ /* 14 .. 15 = RESERVED */
+ ZERO_labelID, ZERO_labelID,
+ },
+};
+
+/* all default routing configurations */
+abe_router_t abe_router_ul_table [NBROUTE_CONFIG_MAX][NBROUTE_UL];
+
+/*
+ * ABE SUBROUTINES AND SEQUENCES
+ */
+
+
+/*
+const abe_seq_t abe_seq_array [MAXNBSEQUENCE] [MAXSEQUENCESTEPS] =
+ {{0, 0, 0, 0}, {-1, 0, 0, 0}},
+ {{0, 0, 0, 0}, {-1, 0, 0, 0}},
+const seq_t setup_hw_sequence2 [ ] = { 0, C_AE_FUNC1, 0, 0, 0, 0,
+ -1, C_CALLBACK1, 0, 0, 0, 0 };
+
+const abe_subroutine2 abe_sub_array [MAXNBSUBROUTINE] =
+ abe_init_atc, 0, 0,
+ abe_init_atc, 0, 0,
+
+ typedef double (*PtrFun) (double);
+PtrFun pFun;
+pFun = sin;
+y = (* pFun) (x);
+*/ /* mask, { time id param tag1} */
+const abe_sequence_t seq_null = {NOMASK, {CL_M1, 0, 0,0,0,0, 0 },
+ {CL_M1, 0, 0,0,0,0, 0 }
+};
+
+/* table of new subroutines called in the sequence */
+abe_subroutine2 abe_all_subsubroutine [MAXNBSUBROUTINE];
+
+/* number of parameters per calls */
+u32 abe_all_subsubroutine_nparam [MAXNBSUBROUTINE];
+
+/* index of the subroutine */
+u32 abe_subroutine_id [MAXNBSUBROUTINE];
+
+/* paramters of the subroutine (if any) */
+u32* abe_all_subroutine_params[MAXNBSUBROUTINE];
+u32 abe_subroutine_write_pointer;
+
+/* table of all sequences */
+abe_sequence_t abe_all_sequence[MAXNBSEQUENCE];
+u32 abe_sequence_write_pointer;
+
+/* current number of pending sequences (avoids to look in the table) */
+u32 abe_nb_pending_sequences;
+
+/* pending sequences due to ressource collision */
+u32 abe_pending_sequences [MAXNBSEQUENCE];
+
+/* mask of unsharable ressources among other sequences */
+u32 abe_global_sequence_mask;
+
+/* table of active sequences */
+abe_seq_t abe_active_sequence[MAXACTIVESEQUENCE] [MAXSEQUENCESTEPS];
+
+/* index of the plugged subroutine doing ping-pong cache-flush DMEM accesses */
+u32 abe_irq_pingpong_player_id;
+
+/* index of the plugged subroutine doing acoustics protection adaptation */
+u32 abe_irq_aps_adaptation_id;
+
+/* base addresses of the ping pong buffers in bytes addresses */
+u32 abe_base_address_pingpong [MAX_PINGPONG_BUFFERS];
+
+/* size of each ping/pong buffers */
+u32 abe_size_pingpong;
+
+/* number of ping/pong buffer being used */
+u32 abe_nb_pingpong;
+
+/* current EVENT */
+u32 abe_current_event_id;
+
+/*
+ * ABE CONST AREA FOR PARAMETERS TRANSLATION
+ */
+const u32 abe_db2lin_table [sizeof_db2lin_table] = {
+
+ 0x00000000, /* SMEM coding of -120 dB */
+ 0x00000000, /* SMEM coding of -119 dB */
+ 0x00000000, /* SMEM coding of -118 dB */
+ 0x00000000, /* SMEM coding of -117 dB */
+ 0x00000000, /* SMEM coding of -116 dB */
+ 0x00000000, /* SMEM coding of -115 dB */
+ 0x00000000, /* SMEM coding of -114 dB */
+ 0x00000000, /* SMEM coding of -113 dB */
+ 0x00000000, /* SMEM coding of -112 dB */
+ 0x00000000, /* SMEM coding of -111 dB */
+ 0x00000000, /* SMEM coding of -110 dB */
+ 0x00000000, /* SMEM coding of -109 dB */
+ 0x00000001, /* SMEM coding of -108 dB */
+ 0x00000001, /* SMEM coding of -107 dB */
+ 0x00000001, /* SMEM coding of -106 dB */
+ 0x00000001, /* SMEM coding of -105 dB */
+ 0x00000001, /* SMEM coding of -104 dB */
+ 0x00000001, /* SMEM coding of -103 dB */
+ 0x00000002, /* SMEM coding of -102 dB */
+ 0x00000002, /* SMEM coding of -101 dB */
+ 0x00000002, /* SMEM coding of -100 dB */
+ 0x00000002, /* SMEM coding of -99 dB */
+ 0x00000003, /* SMEM coding of -98 dB */
+ 0x00000003, /* SMEM coding of -97 dB */
+ 0x00000004, /* SMEM coding of -96 dB */
+ 0x00000004, /* SMEM coding of -95 dB */
+ 0x00000005, /* SMEM coding of -94 dB */
+ 0x00000005, /* SMEM coding of -93 dB */
+ 0x00000006, /* SMEM coding of -92 dB */
+ 0x00000007, /* SMEM coding of -91 dB */
+ 0x00000008, /* SMEM coding of -90 dB */
+ 0x00000009, /* SMEM coding of -89 dB */
+ 0x0000000A, /* SMEM coding of -88 dB */
+ 0x0000000B, /* SMEM coding of -87 dB */
+ 0x0000000D, /* SMEM coding of -86 dB */
+ 0x0000000E, /* SMEM coding of -85 dB */
+ 0x00000010, /* SMEM coding of -84 dB */
+ 0x00000012, /* SMEM coding of -83 dB */
+ 0x00000014, /* SMEM coding of -82 dB */
+ 0x00000017, /* SMEM coding of -81 dB */
+ 0x0000001A, /* SMEM coding of -80 dB */
+ 0x0000001D, /* SMEM coding of -79 dB */
+ 0x00000021, /* SMEM coding of -78 dB */
+ 0x00000025, /* SMEM coding of -77 dB */
+ 0x00000029, /* SMEM coding of -76 dB */
+ 0x0000002E, /* SMEM coding of -75 dB */
+ 0x00000034, /* SMEM coding of -74 dB */
+ 0x0000003A, /* SMEM coding of -73 dB */
+ 0x00000041, /* SMEM coding of -72 dB */
+ 0x00000049, /* SMEM coding of -71 dB */
+ 0x00000052, /* SMEM coding of -70 dB */
+ 0x0000005D, /* SMEM coding of -69 dB */
+ 0x00000068, /* SMEM coding of -68 dB */
+ 0x00000075, /* SMEM coding of -67 dB */
+ 0x00000083, /* SMEM coding of -66 dB */
+ 0x00000093, /* SMEM coding of -65 dB */
+ 0x000000A5, /* SMEM coding of -64 dB */
+ 0x000000B9, /* SMEM coding of -63 dB */
+ 0x000000D0, /* SMEM coding of -62 dB */
+ 0x000000E9, /* SMEM coding of -61 dB */
+ 0x00000106, /* SMEM coding of -60 dB */
+ 0x00000126, /* SMEM coding of -59 dB */
+ 0x0000014A, /* SMEM coding of -58 dB */
+ 0x00000172, /* SMEM coding of -57 dB */
+ 0x0000019F, /* SMEM coding of -56 dB */
+ 0x000001D2, /* SMEM coding of -55 dB */
+ 0x0000020B, /* SMEM coding of -54 dB */
+ 0x0000024A, /* SMEM coding of -53 dB */
+ 0x00000292, /* SMEM coding of -52 dB */
+ 0x000002E2, /* SMEM coding of -51 dB */
+ 0x0000033C, /* SMEM coding of -50 dB */
+ 0x000003A2, /* SMEM coding of -49 dB */
+ 0x00000413, /* SMEM coding of -48 dB */
+ 0x00000492, /* SMEM coding of -47 dB */
+ 0x00000521, /* SMEM coding of -46 dB */
+ 0x000005C2, /* SMEM coding of -45 dB */
+ 0x00000676, /* SMEM coding of -44 dB */
+ 0x0000073F, /* SMEM coding of -43 dB */
+ 0x00000822, /* SMEM coding of -42 dB */
+ 0x00000920, /* SMEM coding of -41 dB */
+ 0x00000A3D, /* SMEM coding of -40 dB */
+ 0x00000B7D, /* SMEM coding of -39 dB */
+ 0x00000CE4, /* SMEM coding of -38 dB */
+ 0x00000E76, /* SMEM coding of -37 dB */
+ 0x0000103A, /* SMEM coding of -36 dB */
+ 0x00001235, /* SMEM coding of -35 dB */
+ 0x0000146E, /* SMEM coding of -34 dB */
+ 0x000016EC, /* SMEM coding of -33 dB */
+ 0x000019B8, /* SMEM coding of -32 dB */
+ 0x00001CDC, /* SMEM coding of -31 dB */
+ 0x00002061, /* SMEM coding of -30 dB */
+ 0x00002455, /* SMEM coding of -29 dB */
+ 0x000028C4, /* SMEM coding of -28 dB */
+ 0x00002DBD, /* SMEM coding of -27 dB */
+ 0x00003352, /* SMEM coding of -26 dB */
+ 0x00003995, /* SMEM coding of -25 dB */
+ 0x0000409C, /* SMEM coding of -24 dB */
+ 0x0000487E, /* SMEM coding of -23 dB */
+ 0x00005156, /* SMEM coding of -22 dB */
+ 0x00005B43, /* SMEM coding of -21 dB */
+ 0x00006666, /* SMEM coding of -20 dB */
+ 0x000072E5, /* SMEM coding of -19 dB */
+ 0x000080E9, /* SMEM coding of -18 dB */
+ 0x000090A4, /* SMEM coding of -17 dB */
+ 0x0000A24B, /* SMEM coding of -16 dB */
+ 0x0000B618, /* SMEM coding of -15 dB */
+ 0x0000CC50, /* SMEM coding of -14 dB */
+ 0x0000E53E, /* SMEM coding of -13 dB */
+ 0x00010137, /* SMEM coding of -12 dB */
+ 0x0001209A, /* SMEM coding of -11 dB */
+ 0x000143D1, /* SMEM coding of -10 dB */
+ 0x00016B54, /* SMEM coding of -9 dB */
+ 0x000197A9, /* SMEM coding of -8 dB */
+ 0x0001C967, /* SMEM coding of -7 dB */
+ 0x00020137, /* SMEM coding of -6 dB */
+ 0x00023FD6, /* SMEM coding of -5 dB */
+ 0x00028619, /* SMEM coding of -4 dB */
+ 0x0002D4EF, /* SMEM coding of -3 dB */
+ 0x00032D64, /* SMEM coding of -2 dB */
+ 0x000390A4, /* SMEM coding of -1 dB */
+ 0x00040000, /* SMEM coding of 0 dB */
+ 0x00047CF2, /* SMEM coding of 1 dB */
+ 0x00050923, /* SMEM coding of 2 dB */
+ 0x0005A670, /* SMEM coding of 3 dB */
+ 0x000656EE, /* SMEM coding of 4 dB */
+ 0x00071CF5, /* SMEM coding of 5 dB */
+ 0x0007FB26, /* SMEM coding of 6 dB */
+ 0x0008F473, /* SMEM coding of 7 dB */
+ 0x000A0C2B, /* SMEM coding of 8 dB */
+ 0x000B4606, /* SMEM coding of 9 dB */
+ 0x000CA62C, /* SMEM coding of 10 dB */
+ 0x000E314A, /* SMEM coding of 11 dB */
+ 0x000FEC9E, /* SMEM coding of 12 dB */
+ 0x0011DE0A, /* SMEM coding of 13 dB */
+ 0x00140C28, /* SMEM coding of 14 dB */
+ 0x00167E60, /* SMEM coding of 15 dB */
+ 0x00193D00, /* SMEM coding of 16 dB */
+ 0x001C515D, /* SMEM coding of 17 dB */
+ 0x001FC5EB, /* SMEM coding of 18 dB */
+ 0x0023A668, /* SMEM coding of 19 dB */
+ 0x00280000, /* SMEM coding of 20 dB */
+ 0x002CE178, /* SMEM coding of 21 dB */
+ 0x00325B65, /* SMEM coding of 22 dB */
+ 0x00388062, /* SMEM coding of 23 dB */
+ 0x003F654E, /* SMEM coding of 24 dB */
+ 0x00472194, /* SMEM coding of 25 dB */
+ 0x004FCF7C, /* SMEM coding of 26 dB */
+ 0x00598C81, /* SMEM coding of 27 dB */
+ 0x006479B7, /* SMEM coding of 28 dB */
+ 0x0070BC3D, /* SMEM coding of 29 dB */
+ 0x007E7DB9, /* SMEM coding of 30 dB */
+
+};
+
+const u32 abe_1_alpha_iir [64] = {
+ 0x040002, 0x040002, 0x040002, 0x040002, /* 0 */
+ 0x50E955, 0x48CA65, 0x40E321, 0x72BE78, /* 1 [ms] */
+ 0x64BA68, 0x57DF14, 0x4C3D60, 0x41D690, /* 2 */
+ 0x38A084, 0x308974, 0x297B00, 0x235C7C, /* 4 */
+ 0x1E14B0, 0x198AF0, 0x15A800, 0x125660, /* 8 */
+ 0x0F82A0, 0x0D1B5C, 0x0B113C, 0x0956CC, /* 16 */
+ 0x07E054, 0x06A3B8, 0x059844, 0x04B680, /* 32 */
+ 0x03F80C, 0x035774, 0x02D018, 0x025E0C, /* 64 */
+ 0x7F8057, 0x6B482F, 0x5A4297, 0x4BEECB, /* 128 */
+ 0x3FE00B, 0x35BAA7, 0x2D3143, 0x2602AF, /* 256 */
+ 0x1FF803, 0x1AE2FB, 0x169C9F, 0x13042B, /* 512 */
+ 0x0FFE03, 0x0D72E7, 0x0B4F4F, 0x0982CB, /* 1.024 [s] */
+ 0x07FF83, 0x06B9CF, 0x05A7E7, 0x04C193, /* 2.048 */
+ 0x03FFE3, 0x035CFF, 0x02D403, 0x0260D7, /* 4.096 */
+ 0x01FFFB, 0x01AE87, 0x016A07, 0x01306F, /* 8.192 */
+ 0x00FFFF, 0x00D743, 0x00B503, 0x009837,
+};
+
+const u32 abe_alpha_iir [64] = {
+ 0x000000, 0x000000, 0x000000, 0x000000, /* 0 */
+ 0x5E2D58, 0x6E6B3C, 0x7E39C0, 0x46A0C5, /* 1 [ms] */
+ 0x4DA2CD, 0x541079, 0x59E151, 0x5F14B9, /* 2 */
+ 0x63AFC1, 0x67BB45, 0x6B4281, 0x6E51C1, /* 4 */
+ 0x70F5A9, 0x733A89, 0x752C01, 0x76D4D1, /* 8 */
+ 0x783EB1, 0x797251, 0x7A7761, 0x7B549D, /* 16 */
+ 0x7C0FD5, 0x7CAE25, 0x7D33DD, 0x7DA4C1, /* 32 */
+ 0x7E03FD, 0x7E5449, 0x7E97F5, 0x7ED0F9, /* 64 */
+ 0x7F0101, 0x7F2971, 0x7F4B7D, 0x7F6825, /* 128 */
+ 0x7F8041, 0x7F948D, 0x7FA59D, 0x7FB3FD, /* 256 */
+ 0x7FC011, 0x7FCA3D, 0x7FD2C9, 0x7FD9F9, /* 512 */
+ 0x7FE005, 0x7FE51D, 0x7FE961, 0x7FECFD, /* 1.024 [s] */
+ 0x7FF001, 0x7FF28D, 0x7FF4B1, 0x7FF67D, /* 2.048 */
+ 0x7FF801, 0x7FF949, 0x7FFA59, 0x7FFB41, /* 4.096 */
+ 0x7FFC01, 0x7FFCA5, 0x7FFD2D, 0x7FFDA1, /* 8.192 */
+ 0x7FFE01, 0x7FFE51, 0x7FFE95, 0x7FFED1,
+};
+
+/*
+ * ABE_DEBUG DATA
+ */
+
+/*
+ * IRQ and trace pointer in DMEM:
+ * FW updates a write pointer at "MCU_IRQ_FIFO_ptr_labelID", the read pointer is in HAL
+ */
+u32 abe_irq_dbg_read_ptr;
+
+/*
+ * General circular buffer used to trace APIs calls and AE activity.
+ */
+u32 abe_dbg_activity_log [D_DEBUG_HAL_TASK_sizeof];
+u32 abe_dbg_activity_log_write_pointer;
+u32 abe_dbg_mask;
+
+/*
+ * Global variable holding parameter errors
+ */
+
+u32 abe_dbg_param;
+
+
+/*
+ * Output of messages selector
+ */
+u32 abe_dbg_output;
+
+/*
+ * last parameters
+ */
+
+#define SIZE_PARAM 10
+
+u32 param1[SIZE_PARAM];
+u32 param2[SIZE_PARAM];
+u32 param3[SIZE_PARAM];
+u32 param4[SIZE_PARAM];
+u32 param5[SIZE_PARAM];
+
+/*
+ * END ABE_DEBUG DATA
+ */
+
+
+
+/*
+ * ABE CONST AREA FOR DMIC DECIMATION FILTERS
+ */
+const s32 abe_dmic_40 [C_98_48_LP_Coefs_sizeof] = {
+ -4119413, -192384, -341428, -348088, -151380, 151380, 348088,
+ 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934,
+ 2997698, -3692214, 3406822, -2280190, 1042982 };
+const s32 abe_dmic_32 [C_98_48_LP_Coefs_sizeof] = {
+ -4119413, -192384, -341428, -348088, -151380, 151380, 348088,
+ 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934,
+ 2997698, -3692214, 3406822, -2280190, 1042982 };
+const s32 abe_dmic_25 [C_98_48_LP_Coefs_sizeof] = {
+ -4119413, -192384, -341428, -348088, -151380, 151380, 348088,
+ 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934,
+ 2997698, -3692214, 3406822, -2280190, 1042982 };
+const s32 abe_dmic_16 [C_98_48_LP_Coefs_sizeof] = {
+ -4119413, -192384, -341428, -348088, -151380, 151380, 348088,
+ 341428, 192384, 4119415, 1938156, -6935719, 775202, -1801934,
+ 2997698, -3692214, 3406822, -2280190, 1042982 };
+
+
+#endif /* abe_dat_c */
diff --git a/sound/soc/omap/abe/abe_dat.h b/sound/soc/omap/abe/abe_dat.h
index dd90ce3964b3..df83490489d7 100644
--- a/sound/soc/omap/abe/abe_dat.h
+++ b/sound/soc/omap/abe/abe_dat.h
@@ -1,1325 +1,520 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+/* =============================================================================
+* Texas Instruments OMAP(TM) Platform Software
+* (c) Copyright 2009 Texas Instruments Incorporated. All Rights Reserved.
+*
+* Use of this software is controlled by the terms and conditions found
+* in the license agreement under which this software has been supplied.
+* =========================================================================== */
+/**
+ * @file ABE_DAT.H
+ *
+ * All the visible API for the audio drivers
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * @path
+ * @rev 01.00
*/
-
-#ifndef _ABE_DAT_H_
-#define _ABE_DAT_H_
+/* ----------------------------------------------------------------------------
+*!
+*! Revision History
+*! ===================================
+*! 27-Nov-2008 Original (LLF)
+*! 05-Jun-2009 V05 release
+* =========================================================================== */
+
+
+#ifndef abe_dat_def
+#define abe_dat_def
#ifdef __cplusplus
+
extern "C" {
#endif
-
/*
- * Callbacks
+ * Call-backs
*/
-abe_subroutine2 callbacks[MAXCALLBACK]; /* 2 parameters subroutine pointers */
-abe_port_t abe_port [LAST_PORT_ID]; /* list of ABE ports */
-const abe_port_t abe_port_init [LAST_PORT_ID] = {
-/* status, data format, drift, callback, io-task buffer 1, io-task buffer 2,
- * protocol, dma offset, features, name
- * - Features reseted at start
- */
+abe_subroutine2 callbacks [MAXCALLBACK]; /* 2 parameters subroutine pointers */
- /* DMIC */
- {
- IDLE_P,
- {96000, SIX_MSB},
- NODRIFT,
- NOCALLBACK,
- 0,
- 0,
- {
- SNK_P,
- DMIC_PORT_PROT,
- {{
- dmem_dmic,
- dmem_dmic_size,
- DMIC_ITER
- }},
- },
- {0, 0},
- {EQMIC, 0},
- "DMIC",
- },
- /* PDM_UL */
- {
- IDLE_P,
- {96000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_amic,
- 0,
- {
- SNK_P,
- MCPDMUL_PORT_PROT,
- {{
- dmem_amic,
- dmem_amic_size,
- MCPDM_UL_ITER,
- }},
- },
- {0, 0},
- {EQMIC, 0},
- "PDM_UL",
- },
- /* BT_VX_UL */
- {
- IDLE_P,
- {8000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_bt_vx_ul,
- 0,
- {
- SNK_P,
- SERIAL_PORT_PROT,
- {{
- MCBSP1_DMA_TX * ATC_SIZE,
- dmem_bt_vx_ul,
- dmem_bt_vx_ul_size,
- 1 * SCHED_LOOP_8kHz,
- }},
- },
- {0, 0},
- {0},
- "BT_VX_UL",
- },
- /* MM_UL */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_mm_ul,
- 0,
- {
- SRC_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX3 * ATC_SIZE,
- dmem_mm_ul,
- dmem_mm_ul_size,
- 10 * SCHED_LOOP_48kHz,
- ABE_DMASTATUS_RAW,
- 1 << 3,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__3, 120},
- {UPROUTE, 0},
- "MM_UL",
- },
- /* MM_UL2 */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_mm_ul2,
- 0,
- {
- SRC_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX4 * ATC_SIZE,
- dmem_mm_ul2,
- dmem_mm_ul2_size,
- 2 * SCHED_LOOP_48kHz,
- ABE_DMASTATUS_RAW,
- 1 << 4,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__4, 24},
- {UPROUTE, 0},
- "MM_UL2",
- },
- /* VX_UL */
- {
- IDLE_P,
- {8000, MONO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_vx_ul,
- 0,
- {
- SRC_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX2*ATC_SIZE,
- dmem_vx_ul,
- dmem_vx_ul_size / 2,
- 1 * SCHED_LOOP_8kHz,
- ABE_DMASTATUS_RAW,
- 1 << 2,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__2, 2},
- {ASRC2, 0},
- "VX_UL",
- },
- /* MM_DL */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_mm_dl_opp100,
- 0,
- {
- SNK_P,
- PINGPONG_PORT_PROT,
- {{
- CBPr_DMA_RTX0 * ATC_SIZE,
- dmem_mm_dl,
- dmem_mm_dl_size,
- 2 * SCHED_LOOP_48kHz,
- ABE_DMASTATUS_RAW,
- 1 << 0,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__0, 24},
- {ASRC3, 0},
- "MM_DL",
- },
- /* VX_DL */
- {
- IDLE_P,
- {8000, MONO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_vx_dl,
- 0,
- {
- SNK_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX1 * ATC_SIZE,
- dmem_vx_dl,
- dmem_vx_dl_size,
- 1 * SCHED_LOOP_8kHz,
- ABE_DMASTATUS_RAW,
- 1 << 1,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__1, 2},
- {ASRC1, 0},
- "VX_DL",
- },
- /* TONES_DL */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_tones_dl,
- 0,
- {
- SNK_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX5 * ATC_SIZE,
- dmem_tones_dl,
- dmem_tones_dl_size,
- 2 * SCHED_LOOP_48kHz,
- ABE_DMASTATUS_RAW,
- 1 << 5,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__5, 24},
- {0},
- "TONES_DL",
- },
- /* VIB_DL */
- {
- IDLE_P,
- {24000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_vib,
- 0,
- {
- SNK_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX6 * ATC_SIZE,
- dmem_vib_dl,
- dmem_vib_dl_size,
- 2 * SCHED_LOOP_24kHz,
- ABE_DMASTATUS_RAW,
- 1 << 6,
- }},
- },
- {CIRCULAR_BUFFER_PERIPHERAL_R__6, 12},
- {0},
- "VIB_DL",
- },
- /* BT_VX_DL */
- {
- IDLE_P,
- {8000, MONO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_bt_vx_dl,
- 0,
- {
- SRC_P,
- SERIAL_PORT_PROT,
- {{
- MCBSP1_DMA_RX * ATC_SIZE,
- dmem_bt_vx_dl,
- dmem_bt_vx_dl_size,
- 1 * SCHED_LOOP_8kHz,
- }},
- },
- {0, 0},
- {0},
- "BT_VX_DL",
- },
- /* PDM_DL1 */
- {
- IDLE_P,
- {96000, SIX_MSB},
- NODRIFT,
- NOCALLBACK,
- 0,
- 0,
- {
- SRC_P,
- MCPDMDL_PORT_PROT,
- {{
- dmem_mcpdm,
- dmem_mcpdm_size,
- }},
- },
- {0, 0},
- {MIXDL1, EQ1, APS1, MIXDL2, EQ2L, EQ2R, APS2L, APS2R, 0},
- "PDM_DL",
- },
- /* MM_EXT_OUT */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_mm_ext_out,
- 0,
- {
- SRC_P,
- SERIAL_PORT_PROT,
- {{
- MCBSP1_DMA_TX * ATC_SIZE,
- dmem_mm_ext_out,
- dmem_mm_ext_out_size,
- 2 * SCHED_LOOP_48kHz,
- }},
- },
- {0, 0},
- {0},
- "MM_EXT_OUT",
- },
- /* MM_EXT_IN */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- smem_mm_ext_in,
- 0,
- {
- SRC_P,
- SERIAL_PORT_PROT,
- {{
- MCBSP1_DMA_RX * ATC_SIZE,
- dmem_mm_ext_in,
- dmem_mm_ext_in_size,
- 2 * SCHED_LOOP_48kHz,
- }},
- },
- {0, 0},
- {0},
- "MM_EXT_IN",
- },
- /* PCM3_TX */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- 0,
- 0,
- {
- SRC_P,
- TDM_SERIAL_PORT_PROT,
- {{
- MCBSP3_DMA_TX*ATC_SIZE,
- dmem_mm_ext_out,
- dmem_mm_ext_out_size,
- 2 * SCHED_LOOP_48kHz,
- }}
- },
- {0, 0},
- {0},
- "MM_EXT_OUT",
- },
- /* PCM3_RX */
- {
- IDLE_P,
- {48000, STEREO_MSB},
- NODRIFT,
- NOCALLBACK,
- 0,
- 0,
- {
- SRC_P,
- TDM_SERIAL_PORT_PROT,
- {{
- MCBSP3_DMA_RX*ATC_SIZE,
- dmem_mm_ext_in,
- dmem_mm_ext_in_size,
- 2 * SCHED_LOOP_48kHz
- }}
- },
- {0, 0},
- {0},
- "MM_EXT_IN"
- },
- /* SCHD_DBG_PORT */
- {
- IDLE_P,
- {48000, MONO_MSB},
- NODRIFT,
- NOCALLBACK,
- 0,
- 0,
- {
- SRC_P,
- DMAREQ_PORT_PROT,
- {{
- CBPr_DMA_RTX7*ATC_SIZE,
- dmem_mm_trace,
- dmem_mm_trace_size,
- 2 * SCHED_LOOP_48kHz,
- ABE_DMASTATUS_RAW,
- (1<<4)
- }}
- },
- {
- CIRCULAR_BUFFER_PERIPHERAL_R__7,
- 24
- },
- {
- SEQUENCE,
- CONTROL,
- GAINS,
- 0
- },
- "SCHD_DBG"
- },
-};
-const abe_port_info_t abe_port_info [LAST_PORT_ID] = {
- /* DMIC */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* PDM_UL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* BT_VX_UL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* MM_UL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* MM_UL2 */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* VX_UL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* MM_DL */
- {
- ABE_OPP50,
- {SUB_WRITE_MIXER, {MM_DL_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* VX_DL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* TONES_DL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* VIB_DL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* BT_VX_DL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* PDM_DL */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* MM_EXT_OUT */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /* MM_EXT_IN */
- {
- ABE_OPP50,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- /*
- SCHD_DBG_PORT
- {
- ABE_OPP25,
- {SUB_WRITE_PORT_GAIN, {DMIC_PORT, MUTE_GAIN, 0, 0}},
- {0, {0, 0, 0, 0}}
- },
- */
-};
/*
- * Firmware features
+ * HAL/FW ports status / format / sampling / protocol(call_back) / features / gain / name
*/
-abe_feature_t all_feature[MAXNBFEATURE];
-
-const abe_feature_t all_feature_init[] = {
-/* on_reset, off, read, write, status, input, output, slots, opp, name */
- /* EQ1: equalizer downlink path headset + earphone */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq1,
- c_write_eq1,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP25,
- " DLEQ1",
- },
- /* EQ2L: equalizer downlink path integrated handsfree left */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq2,
- c_write_eq2,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " DLEQ2L",
- },
- /* EQ2R: equalizer downlink path integrated handsfree right */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " DLEQ2R",
- },
- /* EQSDT: equalizer downlink path side-tone */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " EQSDT",
- },
- /* EQDMIC1: SRC+equalizer uplink DMIC 1st pair */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " EQDMIC1",
- },
- /* EQDMIC2: SRC+equalizer uplink DMIC 2nd pair */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " EQDMIC2",
- },
- /* EQDMIC3: SRC+equalizer uplink DMIC 3rd pair */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " EQDMIC3",
- },
- /* EQAMIC: SRC+equalizer uplink AMIC */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " EQAMIC",
- },
- /* APS1: Acoustic protection for headset */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP25,
- " APS1",
- },
- /* APS2: acoustic protection high-pass filter for handsfree left */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " APS2",
- },
- /* APS3: acoustic protection high-pass filter for handsfree right */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " APS3",
- },
- /* ASRC1: asynchronous sample-rate-converter for the downlink voice path */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " ASRC_VXDL"
- },
- /* ASRC2: asynchronous sample-rate-converter for the uplink voice path */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " ASRC_VXUL",
- },
- /* ASRC3: asynchronous sample-rate-converter for the multimedia player */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " ASRC_MMDL",
- },
- /* ASRC4: asynchronous sample-rate-converter for the echo reference */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " ASRC_ECHO",
- },
- /* MXDL1: mixer of the headset and earphone path */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP25,
- " MIX_DL1",
- },
- /* MXDL2: mixer of the hands-free path */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " MIX_DL2",
- },
- /* MXAUDUL: mixer for uplink tone mixer */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " MXSAUDUL",
- },
- /* MXVXREC: mixer for voice recording */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " MXVXREC",
- },
- /* MXSDT: mixer for side-tone */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " MIX_SDT",
- },
- /* MXECHO: mixer for echo reference */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " MIX_ECHO",
- },
- /* UPROUTE: router of the uplink path */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP50,
- " DLEQ3",
- },
- /* GAINS: all gains */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP25,
- " DLEQ3",
- },
- /* EANC: active noise canceller */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP100,
- " DLEQ3",
- },
- /* SEQ: sequencing queue of micro tasks */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP25,
- " DLEQ3",
- },
- /* CTL: Phoenix control queue through McPDM */
- {
- c_feat_init_eq,
- c_feat_init_eq,
- c_feat_read_eq3,
- c_write_eq3,
- 0,
- 0x1000,
- 0x1010,
- 2,
- 0,
- ABE_OPP25,
- " DLEQ3",
- },
-};
+ abe_port_t abe_port [LAST_PORT_ID]; /* list of ABE ports */
+const abe_port_t abe_port_init [LAST_PORT_ID] = {
+
+ /* Status Data Format Drift Call-Back Protocol+selector desc_addr; buf_addr; buf_size; iter; irq_addr irq_data DMA_T $Features reseted at start Port Name for the debug trace */
+/* DMIC */ { IDLE_P, {96000, SIX_MSB}, NODRIFT, NOCALLBACK, 0, 0, {SNK_P, DMIC_PORT_PROT, {dmem_dmic, dmem_dmic_size, DMIC_ITER}}, {0, 0}, {EQMIC, 0}, "DMIC" },
+/* PDM_UL */ { IDLE_P, {96000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_amic, 0, {SNK_P, MCPDMUL_PORT_PROT, {dmem_amic, dmem_amic_size, MCPDM_UL_ITER}}, {0, 0}, {EQMIC, 0}, "PDM_UL" },
+/* BT_VX_UL*/ { IDLE_P, { 8000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_bt_vx_ul, 0, {SNK_P, SERIAL_PORT_PROT, {MCBSP1_DMA_TX*ATC_SIZE,dmem_bt_vx_ul,dmem_bt_vx_ul_size, 1 * SCHED_LOOP_8kHz}}, {0, 0}, {0}, "BT_VX_UL" },
+/* MM_UL */ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_mm_ul, 0, {SRC_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX3*ATC_SIZE,dmem_mm_ul,dmem_mm_ul_size, 10 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<3)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__3, 120}, {UPROUTE, 0}, "MM_UL" },
+/* MM_UL2 */ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_mm_ul2,0, {SRC_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX4*ATC_SIZE,dmem_mm_ul2,dmem_mm_ul2_size, 2 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<4)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__4, 24}, {UPROUTE, 0}, "MM_UL2" },
+/* VX_UL */ { IDLE_P, { 8000, MONO_MSB}, NODRIFT, NOCALLBACK, smem_vx_ul, 0, {SRC_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX2*ATC_SIZE,dmem_vx_ul,dmem_vx_ul_size, 1 * SCHED_LOOP_8kHz, ABE_DMASTATUS_RAW,(1<<2)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__2, 2}, {ASRC2, 0}, "VX_UL" },
+/* MM_DL */ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_mm_dl_opp100, 0, {SNK_P, PINGPONG_PORT_PROT, {CBPr_DMA_RTX0*ATC_SIZE,dmem_mm_dl,dmem_mm_dl_size, 2 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<0)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__0, 24}, {ASRC3, 0}, "MM_DL" },
+/* VX_DL */ { IDLE_P, { 8000, MONO_MSB}, NODRIFT, NOCALLBACK, smem_vx_dl, 0, {SNK_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX1*ATC_SIZE,dmem_vx_dl,dmem_vx_dl_size, 1 * SCHED_LOOP_8kHz, ABE_DMASTATUS_RAW,(1<<1)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__1, 2}, {ASRC1, 0}, "VX_DL" },
+/* TONES_DL*/ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_tones_dl, 0, {SNK_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX5*ATC_SIZE,dmem_tones_dl,dmem_tones_dl_size, 2 * SCHED_LOOP_48kHz, ABE_DMASTATUS_RAW,(1<<5)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__5, 24}, {0}, "TONES_DL" },
+/* VIB_DL */ { IDLE_P, {24000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_vib, 0, {SNK_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX6*ATC_SIZE,dmem_vib_dl,dmem_vib_dl_size, 2 * SCHED_LOOP_24kHz, ABE_DMASTATUS_RAW,(1<<6)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__6, 12}, {0}, "VIB_DL" },
+/* BT_VX_DL*/ { IDLE_P, { 8000, MONO_MSB}, NODRIFT, NOCALLBACK, smem_bt_vx_dl, 0, {SRC_P, SERIAL_PORT_PROT, {MCBSP1_DMA_RX*ATC_SIZE,dmem_bt_vx_dl,dmem_bt_vx_dl_size, 1 * SCHED_LOOP_8kHz,}}, {0, 0}, {0}, "BT_VX_DL" },
+/* PDM_DL */ { IDLE_P, {96000, SIX_MSB}, NODRIFT, NOCALLBACK, 0,0, {SRC_P, MCPDMDL_PORT_PROT, {dmem_mcpdm, dmem_mcpdm_size}}, {0, 0}, {MIXDL1, EQ1, APS1, MIXDL2, EQ2L, EQ2R, APS2L, APS2R,0}, "PDM_DL" },
+/* MM_EXT_OUT*/ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_mm_ext_out, 0, {SRC_P, SERIAL_PORT_PROT, {MCBSP1_DMA_TX*ATC_SIZE,dmem_mm_ext_out,dmem_mm_ext_out_size, 2 * SCHED_LOOP_48kHz}}, {0, 0}, {0}, "MM_EXT_OUT" },
+/* MM_EXT_IN */ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, smem_mm_ext_in, 0, {SNK_P, SERIAL_PORT_PROT, {MCBSP1_DMA_RX*ATC_SIZE,dmem_mm_ext_in ,dmem_mm_ext_in_size, 2 * SCHED_LOOP_48kHz}}, {0, 0}, {0}, "MM_EXT_IN" },
+/* PCM3_TX */ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, 0, 0, {SRC_P, TDM_SERIAL_PORT_PROT,{MCBSP3_DMA_TX*ATC_SIZE,dmem_mm_ext_out,dmem_mm_ext_out_size, 2 * SCHED_LOOP_48kHz}}, {0, 0}, {0}, "TDM_OUT" },
+/* PCM3_RX */ { IDLE_P, {48000, STEREO_MSB}, NODRIFT, NOCALLBACK, 0, 0, {SRC_P, TDM_SERIAL_PORT_PROT,{MCBSP3_DMA_RX*ATC_SIZE,dmem_mm_ext_in ,dmem_mm_ext_in_size, 2 * SCHED_LOOP_48kHz}}, {0, 0}, {0}, "TDM_IN" },
+/* SCHD_DBG_PORT */{ IDLE_P, {48000, MONO_MSB}, NODRIFT, NOCALLBACK, 0,0, {SRC_P, DMAREQ_PORT_PROT, {CBPr_DMA_RTX7*ATC_SIZE,dmem_mm_trace,dmem_mm_trace_size, 2 * SCHED_LOOP_48kHz,ABE_DMASTATUS_RAW,(1<<4)}}, {CIRCULAR_BUFFER_PERIPHERAL_R__7, 24}, {SEQUENCE, CONTROL, GAINS, 0}, "SCHD_DBG" },
+ };
+// abe_port_init : smem content for DMIC/PDM must be 0 or Dummy_AM_labelID
+
+const abe_port_info_t abe_port_info [LAST_PORT_ID] = {
+/* DMIC */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0}},
+/* PDM_UL */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* BT_VX_UL*/ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* MM_UL */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* MM_UL2 */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* VX_UL */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* MM_DL */ { ABE_OPP50, {SUB_WRITE_MIXER, MM_DL_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* VX_DL */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* TONES_DL*/ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* VIB_DL */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* BT_VX_DL*/ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* PDM_DL */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* MM_EXT_OUT*/ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* MM_EXT_IN */ { ABE_OPP50, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+/* SCHD_DBG_PORT { ABE_OPP25, {SUB_WRITE_PORT_GAIN, DMIC_PORT, MUTE_GAIN, 0, 0}, {0,0,0,0,0} },
+ */ };
+
/*
- * Memory mapping of DMEM FIFOs
+ * Firmware features
*/
-abe_uint32 abe_map_dmem[LAST_PORT_ID]; /* DMEM port map */
-abe_uint32 abe_map_dmem_secondary[LAST_PORT_ID];
-abe_uint32 abe_map_dmem_size[LAST_PORT_ID]; /* DMEM port buffer sizes */
+ abe_feature_t all_feature [MAXNBFEATURE];
+const abe_feature_t all_feature_init [] = {
+ /* ON_reset OFF READ WRITE STATUS INPUT OUTPUT SLOT/S OPP NAME */
+ /* EQ1 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq1, c_write_eq1, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ1" }, /* equalizer downlink path headset + earphone */
+ /* EQ2L */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq2, c_write_eq2, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," DLEQ2L" }, /* equalizer downlink path integrated handsfree LEFT */
+ /* EQ2R */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," DLEQ2R"}, /* equalizer downlink path integrated handsfree RIGHT */
+ /* EQSDT */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQSDT" }, /* equalizer downlink path side-tone */
+ /* EQDMIC1 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQDMIC1" }, /* SRC+equalizer uplink DMIC 1st pair */
+ /* EQDMIC2 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQDMIC2" }, /* SRC+equalizer uplink DMIC 2nd pair */
+ /* EQDMIC3 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQDMIC3" }, /* SRC+equalizer uplink DMIC 3rd pair */
+ /* EQAMIC */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " EQAMIC" }, /* SRC+equalizer uplink AMIC */
+ /* APS1 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " APS1" }, /* Acoustic protection for headset */
+ /* APS2 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," APS2" }, /* acoustic protection high-pass filter for handsfree "Left" */
+ /* APS3 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," APS3" }, /* acoustic protection high-pass filter for handsfree "Right" */
+ /* ASRC1 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " ASRC_VXDL" }, /* asynchronous sample-rate-converter for the downlink voice path */
+ /* ASRC2 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " ASRC_VXUL" }, /* asynchronous sample-rate-converter for the uplink voice path */
+ /* ASRC3 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," ASRC_MMDL" }, /* asynchronous sample-rate-converter for the multimedia player */
+ /* ASRC4 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " ASRC_ECHO" }, /* asynchronous sample-rate-converter for the echo reference */
+ /* MXDL1 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " MIX_DL1" }, /* mixer of the headset and earphone path */
+ /* MXDL2 */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," MIX_DL2" }, /* mixer of the hands-free path */
+ /* MXAUDUL */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MXSAUDUL" }, /* mixer for uplink tone mixer */
+ /* MXVXREC */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MXVXREC" }, /* mixer for voice recording */
+ /* MXSDT */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MIX_SDT" }, /* mixer for side-tone */
+ /* MXECHO */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " MIX_ECHO" }, /* mixer for echo reference */
+ /* UPROUTE */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP50, " DLEQ3" }, /* router of the uplink path */
+ /* GAINS */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ3" }, /* all gains */
+ /* EANC */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP100," DLEQ3" }, /* active noise canceller */
+ /* SEQ */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ3" }, /* sequencing queue of micro tasks */
+ /* CTL */ { c_feat_init_eq, c_feat_init_eq, c_feat_read_eq3, c_write_eq3, 0, 0x1000, 0x1010, 2, 0, ABE_OPP25, " DLEQ3" }, /* Phoenix control queue through McPDM */
+ };
-/*
- * AESS/ATC destination and source address translation
- * (except McASPs) from the original 64bits words address
- */
-const abe_uint32 abe_atc_dstid[ABE_ATC_DESC_SIZE >> 3] = {
- /* DMA_0 DMIC PDM_DL PDM_UL McB1TX McB1RX McB2TX McB2RX 0-7 */
- 0, 0, 12, 0, 1, 0, 2, 0,
- /* McB3TX McB3RX SLIMT0 SLIMT1 SLIMT2 SLIMT3 SLIMT4 SLIMT5 8-15 */
- 3, 0, 4, 5, 6, 7, 8, 9,
- /* SLIMT6 SLIMT7 SLIMR0 SLIMR1 SLIMR2 SLIMR3 SLIMR4 SLIMR5 16-23 */
- 10, 11, 0, 0, 0, 0, 0, 0,
- /* SLIMR6 SLIMR7 McASP1X ------ ------ McASP1R ----- ------ 24-31 */
- 0, 0, 14, 0, 0, 0, 0, 0,
- /* CBPrT0 CBPrT1 CBPrT2 CBPrT3 CBPrT4 CBPrT5 CBPrT6 CBPrT7 32-39 */
- 63, 63, 63, 63, 63, 63, 63, 63,
- /* CBP_T0 CBP_T1 CBP_T2 CBP_T3 CBP_T4 CBP_T5 CBP_T6 CBP_T7 40-47 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- /* CBP_T8 CBP_T9 CBP_T10 CBP_T11 CBP_T12 CBP_T13 CBP_T14 CBP_T15 48-63 */
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-const abe_uint32 abe_atc_srcid[ABE_ATC_DESC_SIZE >> 3] = {
- /* DMA_0 DMIC PDM_DL PDM_UL McB1TX McB1RX McB2TX McB2RX 0-7 */
- 0, 12, 0, 13, 0, 1, 0, 2,
- /* McB3TX McB3RX SLIMT0 SLIMT1 SLIMT2 SLIMT3 SLIMT4 SLIMT5 8-15 */
- 0, 3, 0, 0, 0, 0, 0, 0,
- /* SLIMT6 SLIMT7 SLIMR0 SLIMR1 SLIMR2 SLIMR3 SLIMR4 SLIMR5 16-23 */
- 0, 0, 4, 5, 6, 7, 8, 9,
- /* SLIMR6 SLIMR7 McASP1X ------ ------ McASP1R ------ ------ 24-31 */
- 10, 11, 0, 0, 0, 14, 0, 0,
- /* CBPrT0 CBPrT1 CBPrT2 CBPrT3 CBPrT4 CBPrT5 CBPrT6 CBPrT7 32-39 */
- 63, 63, 63, 63, 63, 63, 63, 63,
- /* CBP_T0 CBP_T1 CBP_T2 CBP_T3 CBP_T4 CBP_T5 CBP_T6 CBP_T7 40-47 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- /* CBP_T8 CBP_T9 CBP_T10 CBP_T11 CBP_T12 CBP_T13 CBP_T14 CBP_T15 48-63 */
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
/*
- * preset default routing configurations
- * This is given as implementation EXAMPLES
- * the programmer uses "abe_set_router_configuration" with its own tables
-*/
-const abe_router_t abe_router_ul_table_preset[NBROUTE_CONFIG][NBROUTE_UL] = {
- /* Voice uplink with Phoenix microphones - Uproute config_dmic1 */
- {
- /* 0 .. 9 = MM_UL */
- DMIC1_L_labelID,
- DMIC1_R_labelID,
- DMIC2_L_labelID,
- DMIC2_R_labelID,
- MM_EXT_IN_L_labelID,
- MM_EXT_IN_R_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- /* 10 .. 11 = MM_UL2 */
- AMIC_L_labelID,
- AMIC_R_labelID,
- /* 12 .. 13 = VX_UL */
- AMIC_L_labelID,
- AMIC_R_labelID,
- /* 14 .. 15 = RESERVED */
- ZERO_labelID,
- ZERO_labelID,
- },
- /* Voice uplink with the first DMIC pair - Uproute config_dmic2 */
- {
- /* 0 .. 9 = MM_UL */
- DMIC2_L_labelID,
- DMIC2_R_labelID,
- DMIC3_L_labelID,
- DMIC3_R_labelID,
- DMIC1_L_labelID,
- DMIC1_R_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- /* 10 .. 11 = MM_UL2 */
- DMIC1_L_labelID,
- DMIC1_R_labelID,
- /* 12 .. 13 = VX_UL */
- DMIC1_L_labelID,
- DMIC1_R_labelID,
- /* 14 .. 15 = RESERVED */
- ZERO_labelID,
- ZERO_labelID,
- },
- /* Voice uplink with the second DMIC pair - Uproute config_dmic3 */
- {
- /* 0 .. 9 = MM_UL */
- DMIC3_L_labelID,
- DMIC3_R_labelID,
- DMIC1_L_labelID,
- DMIC1_R_labelID,
- DMIC2_L_labelID,
- DMIC2_R_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- /* 10 .. 11 = MM_UL2 */
- DMIC2_L_labelID,
- DMIC2_R_labelID,
- /* 12 .. 13 = VX_UL */
- DMIC2_L_labelID,
- DMIC2_R_labelID,
- /* 14 .. 15 = RESERVED */
- ZERO_labelID,
- ZERO_labelID,
- },
- /* VOICE UPLINK WITH THE LAST DMIC PAIR - UPROUTE_CONFIG_DMIC3 */
- {
- AMIC_L_labelID, /* 0 .. 9 = MM_UL */
- AMIC_R_labelID,
- DMIC2_L_labelID,
- DMIC2_R_labelID,
- DMIC3_L_labelID,
- DMIC3_R_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- ZERO_labelID,
- DMIC3_L_labelID,
- DMIC3_R_labelID, /* 10 .. 11 = MM_UL2 */
- DMIC3_L_labelID,
- DMIC3_R_labelID, /* 12 .. 13 = VX_UL */
- ZERO_labelID,
- ZERO_labelID, /* 14 .. 15 = RESERVED */
- },
- /* VOICE UPLINK WITH THE BT - UPROUTE_CONFIG_BT */
- {
- BT_UL_L_labelID,
- BT_UL_R_labelID,
- DMIC2_L_labelID,
- DMIC2_R_labelID, /* 0 .. 9 = MM_UL */
- DMIC3_L_labelID,
- DMIC3_R_labelID,
- DMIC1_L_labelID,
- DMIC1_R_labelID,
- ZERO_labelID,
- ZERO_labelID,
- AMIC_L_labelID,
- AMIC_R_labelID, /* 10 .. 11 = MM_UL2 */
- BT_UL_L_labelID,
- BT_UL_R_labelID, /* 12 .. 13 = VX_UL */
- ZERO_labelID,
- ZERO_labelID, /* 14 .. 15 = RESERVED */
- },
-};
-
-/* all default routing configurations */
-abe_router_t abe_router_ul_table[NBROUTE_CONFIG_MAX][NBROUTE_UL];
+ * MEMORY MAPPING OF THE DMEM FIFOs
+ */
+
+abe_uint32 abe_map_dmem [LAST_PORT_ID]; /* DMEM port map */
+abe_uint32 abe_map_dmem_secondary [LAST_PORT_ID];
+abe_uint32 abe_map_dmem_size [LAST_PORT_ID]; /* DMEM port buffer sizes */
+
/*
- * ABE_GLOBAL DATA
+ * AESS/ATC destination and source address translation (except McASPs) from the original 64bits words address
*/
-/* flag, indicates the allowed control of Phoenix through McPDM slot 6 */
-abe_uint32 abe_global_mcpdm_control;
+const abe_uint32 abe_atc_dstid [ABE_ATC_DESC_SIZE>>3] =
+ {
+ // DMA_0 DMIC PDM_DL PDM_UL McB1TX McB1RX McB2TX McB2RX 0 .. 7
+ 0, 0, 12, 0, 1, 0, 2, 0,
+ // McB3TX McB3RX SLIMT0 SLIMT1 SLIMT2 SLIMT3 SLIMT4 SLIMT5 8 .. 15
+ 3, 0, 4, 5, 6, 7, 8, 9,
+ // SLIMT6 SLIMT7 SLIMR0 SLIMR1 SLIMR2 SLIMR3 SLIMR4 SLIMR5 16 .. 23
+ 10, 11, 0, 0, 0, 0, 0, 0,
+ // SLIMR6 SLIMR7 McASP1X ----- ----- McASP1R ----- ----- 24 .. 31
+ 0, 0, 14, 0, 0, 0, 0, 0,
+ // CBPrT0 CBPrT1 CBPrT2 CBPrT3 CBPrT4 CBPrT5 CBPrT6 CBPrT7 32 .. 39
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ // CBP_T0 CBP_T1 CBP_T2 CBP_T3 CBP_T4 CBP_T5 CBP_T6 CBP_T7 40 .. 47
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ // CBP_T8 CBP_T9 CBP_T10 CBP_T11 CBP_T12 CBP_T13 CBP_T14 CBP_T15 48 .. 63
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+const abe_uint32 abe_atc_srcid [ABE_ATC_DESC_SIZE>>3] =
+ {
+ // DMA_0 DMIC PDM_DL PDM_UL McB1TX McB1RX McB2TX McB2RX 0 .. 7
+ 0, 12, 0, 13, 0, 1, 0, 2,
+ // McB3TX McB3RX SLIMT0 SLIMT1 SLIMT2 SLIMT3 SLIMT4 SLIMT5 8 .. 15
+ 0, 3, 0, 0, 0, 0, 0, 0,
+ // SLIMT6 SLIMT7 SLIMR0 SLIMR1 SLIMR2 SLIMR3 SLIMR4 SLIMR5 16 .. 23
+ 0, 0, 4, 5, 6, 7, 8, 9,
+ // SLIMR6 SLIMR7 McASP1X ----- ----- McASP1R ----- ----- 24 .. 31
+ 10, 11, 0, 0, 0, 14, 0, 0,
+ // CBPrT0 CBPrT1 CBPrT2 CBPrT3 CBPrT4 CBPrT5 CBPrT6 CBPrT7 32 .. 39
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ // CBP_T0 CBP_T1 CBP_T2 CBP_T3 CBP_T4 CBP_T5 CBP_T6 CBP_T7 40 .. 47
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ // CBP_T8 CBP_T9 CBP_T10 CBP_T11 CBP_T12 CBP_T13 CBP_T14 CBP_T15 48 .. 63
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+
+
+/* -------------------------------------------------------------------------
+ preset default routing configurations
+ This is given as implementation EXAMPLES
+ the programmer uses "abe_set_router_configuration" with its own tables
+*/
+
+const abe_router_t abe_router_ul_table_preset [NBROUTE_CONFIG][NBROUTE_UL] =
+ { { /* VOICE UPLINK WITH PHOENIX MICROPHONES - UPROUTE_CONFIG_AMIC */
+ DMIC1_L_labelID, DMIC1_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID, /* 0 .. 9 = MM_UL */
+ MM_EXT_IN_L_labelID, MM_EXT_IN_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+ DMIC3_L_labelID, DMIC3_R_labelID, /* 10 .. 11 = MM_UL2 */
+ AMIC_L_labelID, AMIC_R_labelID, /* 12 .. 13 = VX_UL */
+ ZERO_labelID, ZERO_labelID, /* 14 .. 15 = RESERVED */
+ },
+ { /* VOICE UPLINK WITH THE FIRST DMIC PAIR - UPROUTE_CONFIG_DMIC1*/
+ DMIC2_L_labelID, DMIC2_R_labelID, DMIC3_L_labelID, DMIC3_R_labelID, /* 0 .. 9 = MM_UL */
+ DMIC1_L_labelID, DMIC1_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+ DMIC1_L_labelID, DMIC1_R_labelID, /* 10 .. 11 = MM_UL2 */
+ DMIC1_L_labelID, DMIC1_R_labelID, /* 12 .. 13 = VX_UL */
+ ZERO_labelID, ZERO_labelID, /* 14 .. 15 = RESERVED */
+ },
+ { /* VOICE UPLINK WITH THE SECOND DMIC PAIR - UPROUTE_CONFIG_DMIC2 */
+ DMIC3_L_labelID, DMIC3_R_labelID, DMIC1_L_labelID, DMIC1_R_labelID, /* 0 .. 9 = MM_UL */
+ DMIC2_L_labelID, DMIC2_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+ DMIC2_L_labelID, DMIC2_R_labelID, /* 10 .. 11 = MM_UL2 */
+ DMIC2_L_labelID, DMIC2_R_labelID, /* 12 .. 13 = VX_UL */
+ ZERO_labelID, ZERO_labelID, /* 14 .. 15 = RESERVED */
+ },
+ { /* VOICE UPLINK WITH THE LAST DMIC PAIR - UPROUTE_CONFIG_DMIC3 */
+ AMIC_L_labelID, AMIC_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID, /* 0 .. 9 = MM_UL */
+ DMIC3_L_labelID, DMIC3_R_labelID, ZERO_labelID, ZERO_labelID,
+ ZERO_labelID, ZERO_labelID,
+ DMIC3_L_labelID, DMIC3_R_labelID, /* 10 .. 11 = MM_UL2 */
+ DMIC3_L_labelID, DMIC3_R_labelID, /* 12 .. 13 = VX_UL */
+ ZERO_labelID, ZERO_labelID, /* 14 .. 15 = RESERVED */
+ },
+ { /* VOICE UPLINK WITH THE BT - UPROUTE_CONFIG_BT */
+ BT_UL_L_labelID, BT_UL_R_labelID, DMIC2_L_labelID, DMIC2_R_labelID, /* 0 .. 9 = MM_UL */
+ DMIC3_L_labelID, DMIC3_R_labelID, DMIC1_L_labelID, DMIC1_R_labelID,
+ ZERO_labelID, ZERO_labelID,
+ AMIC_L_labelID, AMIC_R_labelID, /* 10 .. 11 = MM_UL2 */
+ BT_UL_L_labelID, BT_UL_R_labelID, /* 12 .. 13 = VX_UL */
+ ZERO_labelID, ZERO_labelID, /* 14 .. 15 = RESERVED */
+ },
+ };
+
+abe_router_t abe_router_ul_table [NBROUTE_CONFIG_MAX][NBROUTE_UL]; /* all default routing configurations */
+
+/*
+ * ABE_GLOBAL DATA -------------------------------------------------------------------------
+ */
+
+abe_uint32 abe_global_mcpdm_control; /* flag, indicates the allowed control of Phoenix through McPDM slot #6 */
abe_event_id abe_current_event_id;
-/*
- * ABE SUBROUTINES AND SEQUENCES
+/*
+ * ABE SUBROUTINES AND SEQUENCES -----------------------------------------------------------
*/
+
/*
-const abe_seq_t abe_seq_array [MAXNBSEQUENCE] [MAXSEQUENCESTEPS] =
- {{0, 0, 0, 0}, {-1, 0, 0, 0}},
- {{0, 0, 0, 0}, {-1, 0, 0, 0}},
+const abe_seq_t abe_seq_array [MAXNBSEQUENCE] [MAXSEQUENCESTEPS] =
+ {{0, 0, 0, 0}, {-1, 0, 0, 0}},
+ {{0, 0, 0, 0}, {-1, 0, 0, 0}},
const seq_t setup_hw_sequence2 [ ] = { 0, C_AE_FUNC1, 0, 0, 0, 0,
- -1, C_CALLBACK1, 0, 0, 0, 0 };
+ -1, C_CALLBACK1, 0, 0, 0, 0 };
-const abe_subroutine2 abe_sub_array [MAXNBSUBROUTINE] =
- abe_init_atc, 0, 0,
- abe_init_atc, 0, 0,
+const abe_subroutine2 abe_sub_array [MAXNBSUBROUTINE] =
+ abe_init_atc, 0, 0,
+ abe_init_atc, 0, 0,
typedef double (*PtrFun) (double);
PtrFun pFun;
pFun = sin;
-y = (* pFun) (x);
-*/
+y = (* pFun) (x);
+*/ /* mask, { time id param tag1} */
+const abe_sequence_t seq_null = {NOMASK, {CL_M1, 0, 0,0,0,0, 0 }, {CL_M1, 0, 0,0,0,0, 0 } };
+
+abe_subroutine2 abe_all_subsubroutine [MAXNBSUBROUTINE]; /* table of new subroutines called in the sequence */
+abe_uint32 abe_all_subsubroutine_nparam [MAXNBSUBROUTINE]; /* number of parameters per calls */
+abe_uint32 abe_subroutine_id [MAXNBSUBROUTINE]; /* index of the subroutine */
+abe_uint32* abe_all_subroutine_params[MAXNBSUBROUTINE]; /* paramters of the subroutine (if any) */
+abe_uint32 abe_subroutine_write_pointer;
+
+abe_sequence_t abe_all_sequence[MAXNBSEQUENCE]; /* table of all sequences */
+abe_uint32 abe_sequence_write_pointer;
+abe_uint32 abe_nb_pending_sequences; /* current number of pending sequences (avoids to look in the table) */
+abe_uint32 abe_pending_sequences [MAXNBSEQUENCE]; /* pending sequences due to ressource collision */
+
+abe_uint32 abe_global_sequence_mask; /* mask of unsharable ressources among other sequences */
+
+abe_seq_t abe_active_sequence[MAXACTIVESEQUENCE] [MAXSEQUENCESTEPS]; /* table of active sequences */
+
+abe_uint32 abe_irq_pingpong_player_id; /* index of the plugged subroutine doing ping-pong cache-flush DMEM accesses */
+abe_uint32 abe_irq_aps_adaptation_id; /* index of the plugged subroutine doing acoustics protection adaptation */
+
+abe_uint32 abe_base_address_pingpong [MAX_PINGPONG_BUFFERS]; /* base addresses of the ping pong buffers in bytes addresses */
+abe_uint32 abe_size_pingpong; /* size of each ping/pong buffers */
+abe_uint32 abe_nb_pingpong; /* number of ping/pong buffer being used */
+
+/* @!!! in "ABE_SPingPongDescriptor", the offset address of the field
+ "nextbuff0_BaseAddr" must be aligned on 32bits boundaries
+ typedef struct abepingpongdescriptorTag{
+ ...
+ ABE_uint16 workbuff_BaseAddr; 12 * current Base address of the working buffer
+ ABE_uint16 workbuff_Samples; 14 * samples left in the working buffer *
+ ABE_uint16 nextbuff0_BaseAddr; 16 * Base address of the pingpong buffer 0 *
+ ABE_uint16 nextbuff0_Samples; 18 * samples available in the pingpong buffer 0 *
+ ABE_uint16 nextbuff1_BaseAddr; 20 * Base address of the pingpong buffer 1 *
+ ABE_uint16 nextbuff1_Samples; 22 * samples available in the pingpong buffer 1 *
+ } ABE_SPingPongDescriptor;
+ */
+
+
+/*
+ * ABE CONST AREA FOR PARAMETERS TRANSLATION -------------------------------------------------------
+ */
+const abe_uint32 abe_db2lin_table [sizeof_db2lin_table] = {
-const abe_sequence_t seq_null = {
- NOMASK,
- {
- CL_M1,
- 0,
- {0, 0, 0, 0},
- 0,
- },
- {
- CL_M1,
- 0,
- {0, 0, 0, 0},
- 0,
- },
+ 0x00000000, /* SMEM coding of -120 dB */
+ 0x00000000, /* SMEM coding of -119 dB */
+ 0x00000000, /* SMEM coding of -118 dB */
+ 0x00000000, /* SMEM coding of -117 dB */
+ 0x00000000, /* SMEM coding of -116 dB */
+ 0x00000000, /* SMEM coding of -115 dB */
+ 0x00000000, /* SMEM coding of -114 dB */
+ 0x00000000, /* SMEM coding of -113 dB */
+ 0x00000000, /* SMEM coding of -112 dB */
+ 0x00000000, /* SMEM coding of -111 dB */
+ 0x00000000, /* SMEM coding of -110 dB */
+ 0x00000000, /* SMEM coding of -109 dB */
+ 0x00000001, /* SMEM coding of -108 dB */
+ 0x00000001, /* SMEM coding of -107 dB */
+ 0x00000001, /* SMEM coding of -106 dB */
+ 0x00000001, /* SMEM coding of -105 dB */
+ 0x00000001, /* SMEM coding of -104 dB */
+ 0x00000001, /* SMEM coding of -103 dB */
+ 0x00000002, /* SMEM coding of -102 dB */
+ 0x00000002, /* SMEM coding of -101 dB */
+ 0x00000002, /* SMEM coding of -100 dB */
+ 0x00000002, /* SMEM coding of -99 dB */
+ 0x00000003, /* SMEM coding of -98 dB */
+ 0x00000003, /* SMEM coding of -97 dB */
+ 0x00000004, /* SMEM coding of -96 dB */
+ 0x00000004, /* SMEM coding of -95 dB */
+ 0x00000005, /* SMEM coding of -94 dB */
+ 0x00000005, /* SMEM coding of -93 dB */
+ 0x00000006, /* SMEM coding of -92 dB */
+ 0x00000007, /* SMEM coding of -91 dB */
+ 0x00000008, /* SMEM coding of -90 dB */
+ 0x00000009, /* SMEM coding of -89 dB */
+ 0x0000000A, /* SMEM coding of -88 dB */
+ 0x0000000B, /* SMEM coding of -87 dB */
+ 0x0000000D, /* SMEM coding of -86 dB */
+ 0x0000000E, /* SMEM coding of -85 dB */
+ 0x00000010, /* SMEM coding of -84 dB */
+ 0x00000012, /* SMEM coding of -83 dB */
+ 0x00000014, /* SMEM coding of -82 dB */
+ 0x00000017, /* SMEM coding of -81 dB */
+ 0x0000001A, /* SMEM coding of -80 dB */
+ 0x0000001D, /* SMEM coding of -79 dB */
+ 0x00000021, /* SMEM coding of -78 dB */
+ 0x00000025, /* SMEM coding of -77 dB */
+ 0x00000029, /* SMEM coding of -76 dB */
+ 0x0000002E, /* SMEM coding of -75 dB */
+ 0x00000034, /* SMEM coding of -74 dB */
+ 0x0000003A, /* SMEM coding of -73 dB */
+ 0x00000041, /* SMEM coding of -72 dB */
+ 0x00000049, /* SMEM coding of -71 dB */
+ 0x00000052, /* SMEM coding of -70 dB */
+ 0x0000005D, /* SMEM coding of -69 dB */
+ 0x00000068, /* SMEM coding of -68 dB */
+ 0x00000075, /* SMEM coding of -67 dB */
+ 0x00000083, /* SMEM coding of -66 dB */
+ 0x00000093, /* SMEM coding of -65 dB */
+ 0x000000A5, /* SMEM coding of -64 dB */
+ 0x000000B9, /* SMEM coding of -63 dB */
+ 0x000000D0, /* SMEM coding of -62 dB */
+ 0x000000E9, /* SMEM coding of -61 dB */
+ 0x00000106, /* SMEM coding of -60 dB */
+ 0x00000126, /* SMEM coding of -59 dB */
+ 0x0000014A, /* SMEM coding of -58 dB */
+ 0x00000172, /* SMEM coding of -57 dB */
+ 0x0000019F, /* SMEM coding of -56 dB */
+ 0x000001D2, /* SMEM coding of -55 dB */
+ 0x0000020B, /* SMEM coding of -54 dB */
+ 0x0000024A, /* SMEM coding of -53 dB */
+ 0x00000292, /* SMEM coding of -52 dB */
+ 0x000002E2, /* SMEM coding of -51 dB */
+ 0x0000033C, /* SMEM coding of -50 dB */
+ 0x000003A2, /* SMEM coding of -49 dB */
+ 0x00000413, /* SMEM coding of -48 dB */
+ 0x00000492, /* SMEM coding of -47 dB */
+ 0x00000521, /* SMEM coding of -46 dB */
+ 0x000005C2, /* SMEM coding of -45 dB */
+ 0x00000676, /* SMEM coding of -44 dB */
+ 0x0000073F, /* SMEM coding of -43 dB */
+ 0x00000822, /* SMEM coding of -42 dB */
+ 0x00000920, /* SMEM coding of -41 dB */
+ 0x00000A3D, /* SMEM coding of -40 dB */
+ 0x00000B7D, /* SMEM coding of -39 dB */
+ 0x00000CE4, /* SMEM coding of -38 dB */
+ 0x00000E76, /* SMEM coding of -37 dB */
+ 0x0000103A, /* SMEM coding of -36 dB */
+ 0x00001235, /* SMEM coding of -35 dB */
+ 0x0000146E, /* SMEM coding of -34 dB */
+ 0x000016EC, /* SMEM coding of -33 dB */
+ 0x000019B8, /* SMEM coding of -32 dB */
+ 0x00001CDC, /* SMEM coding of -31 dB */
+ 0x00002061, /* SMEM coding of -30 dB */
+ 0x00002455, /* SMEM coding of -29 dB */
+ 0x000028C4, /* SMEM coding of -28 dB */
+ 0x00002DBD, /* SMEM coding of -27 dB */
+ 0x00003352, /* SMEM coding of -26 dB */
+ 0x00003995, /* SMEM coding of -25 dB */
+ 0x0000409C, /* SMEM coding of -24 dB */
+ 0x0000487E, /* SMEM coding of -23 dB */
+ 0x00005156, /* SMEM coding of -22 dB */
+ 0x00005B43, /* SMEM coding of -21 dB */
+ 0x00006666, /* SMEM coding of -20 dB */
+ 0x000072E5, /* SMEM coding of -19 dB */
+ 0x000080E9, /* SMEM coding of -18 dB */
+ 0x000090A4, /* SMEM coding of -17 dB */
+ 0x0000A24B, /* SMEM coding of -16 dB */
+ 0x0000B618, /* SMEM coding of -15 dB */
+ 0x0000CC50, /* SMEM coding of -14 dB */
+ 0x0000E53E, /* SMEM coding of -13 dB */
+ 0x00010137, /* SMEM coding of -12 dB */
+ 0x0001209A, /* SMEM coding of -11 dB */
+ 0x000143D1, /* SMEM coding of -10 dB */
+ 0x00016B54, /* SMEM coding of -9 dB */
+ 0x000197A9, /* SMEM coding of -8 dB */
+ 0x0001C967, /* SMEM coding of -7 dB */
+ 0x00020137, /* SMEM coding of -6 dB */
+ 0x00023FD6, /* SMEM coding of -5 dB */
+ 0x00028619, /* SMEM coding of -4 dB */
+ 0x0002D4EF, /* SMEM coding of -3 dB */
+ 0x00032D64, /* SMEM coding of -2 dB */
+ 0x000390A4, /* SMEM coding of -1 dB */
+ 0x00040000, /* SMEM coding of 0 dB */
+ 0x00047CF2, /* SMEM coding of 1 dB */
+ 0x00050923, /* SMEM coding of 2 dB */
+ 0x0005A670, /* SMEM coding of 3 dB */
+ 0x000656EE, /* SMEM coding of 4 dB */
+ 0x00071CF5, /* SMEM coding of 5 dB */
+ 0x0007FB26, /* SMEM coding of 6 dB */
+ 0x0008F473, /* SMEM coding of 7 dB */
+ 0x000A0C2B, /* SMEM coding of 8 dB */
+ 0x000B4606, /* SMEM coding of 9 dB */
+ 0x000CA62C, /* SMEM coding of 10 dB */
+ 0x000E314A, /* SMEM coding of 11 dB */
+ 0x000FEC9E, /* SMEM coding of 12 dB */
+ 0x0011DE0A, /* SMEM coding of 13 dB */
+ 0x00140C28, /* SMEM coding of 14 dB */
+ 0x00167E60, /* SMEM coding of 15 dB */
+ 0x00193D00, /* SMEM coding of 16 dB */
+ 0x001C515D, /* SMEM coding of 17 dB */
+ 0x001FC5EB, /* SMEM coding of 18 dB */
+ 0x0023A668, /* SMEM coding of 19 dB */
+ 0x00280000, /* SMEM coding of 20 dB */
+ 0x002CE178, /* SMEM coding of 21 dB */
+ 0x00325B65, /* SMEM coding of 22 dB */
+ 0x00388062, /* SMEM coding of 23 dB */
+ 0x003F654E, /* SMEM coding of 24 dB */
+ 0x00472194, /* SMEM coding of 25 dB */
+ 0x004FCF7C, /* SMEM coding of 26 dB */
+ 0x00598C81, /* SMEM coding of 27 dB */
+ 0x006479B7, /* SMEM coding of 28 dB */
+ 0x0070BC3D, /* SMEM coding of 29 dB */
+ 0x007E7DB9, /* SMEM coding of 30 dB */
+
+ };
+
+const abe_uint32 abe_1_alpha_iir [64] = {
+ 0x040002, 0x040002, 0x040002, 0x040002, // 0
+ 0x50E955, 0x48CA65, 0x40E321, 0x72BE78, // 1 [ms]
+ 0x64BA68, 0x57DF14, 0x4C3D60, 0x41D690, // 2
+ 0x38A084, 0x308974, 0x297B00, 0x235C7C, // 4
+ 0x1E14B0, 0x198AF0, 0x15A800, 0x125660, // 8
+ 0x0F82A0, 0x0D1B5C, 0x0B113C, 0x0956CC, // 16
+ 0x07E054, 0x06A3B8, 0x059844, 0x04B680, // 32
+ 0x03F80C, 0x035774, 0x02D018, 0x025E0C, // 64
+ 0x7F8057, 0x6B482F, 0x5A4297, 0x4BEECB, // 128
+ 0x3FE00B, 0x35BAA7, 0x2D3143, 0x2602AF, // 256
+ 0x1FF803, 0x1AE2FB, 0x169C9F, 0x13042B, // 512
+ 0x0FFE03, 0x0D72E7, 0x0B4F4F, 0x0982CB, //1.024 [s]
+ 0x07FF83, 0x06B9CF, 0x05A7E7, 0x04C193, //2.048
+ 0x03FFE3, 0x035CFF, 0x02D403, 0x0260D7, //4.096
+ 0x01FFFB, 0x01AE87, 0x016A07, 0x01306F, //8.192
+ 0x00FFFF, 0x00D743, 0x00B503, 0x009837,
};
-/* table of new subroutines called in the sequence */
-abe_subroutine2 abe_all_subsubroutine[MAXNBSUBROUTINE];
-/* number of parameters per calls */
-abe_uint32 abe_all_subsubroutine_nparam[MAXNBSUBROUTINE];
-/* index of the subroutine */
-abe_uint32 abe_subroutine_id[MAXNBSUBROUTINE];
-abe_uint32* abe_all_subroutine_params[MAXNBSUBROUTINE];
-abe_uint32 abe_subroutine_write_pointer;
-
-/* table of all sequences */
-abe_sequence_t abe_all_sequence[MAXNBSEQUENCE];
-
-abe_uint32 abe_sequence_write_pointer;
-
-/* current number of pending sequences (avoids to look in the table) */
-abe_uint32 abe_nb_pending_sequences;
-
-/* pending sequences due to ressource collision */
-abe_uint32 abe_pending_sequences[MAXNBSEQUENCE];
-
-/* mask of unsharable ressources among other sequences */
-abe_uint32 abe_global_sequence_mask;
-
-/* table of active sequences */
-abe_seq_t abe_active_sequence[MAXACTIVESEQUENCE][MAXSEQUENCESTEPS];
-
-/* index of the plugged subroutine doing ping-pong cache-flush DMEM accesses */
-abe_uint32 abe_irq_pingpong_player_id;
-/* index of the plugged subroutine doing acoustics protection adaptation */
-abe_uint32 abe_irq_aps_adaptation_id;
-
-/* base addresses of the ping pong buffers in bytes addresses */
-abe_uint32 abe_base_address_pingpong[MAX_PINGPONG_BUFFERS];
-
-/* size of each ping/pong buffers */
-abe_uint32 abe_size_pingpong;
-
-/* number of ping/pong buffer being used */
-abe_uint32 abe_nb_pingpong;
+const abe_uint32 abe_alpha_iir [64] = {
+ 0x000000, 0x000000, 0x000000, 0x000000, // 0
+ 0x5E2D58, 0x6E6B3C, 0x7E39C0, 0x46A0C5, // 1 [ms]
+ 0x4DA2CD, 0x541079, 0x59E151, 0x5F14B9, // 2
+ 0x63AFC1, 0x67BB45, 0x6B4281, 0x6E51C1, // 4
+ 0x70F5A9, 0x733A89, 0x752C01, 0x76D4D1, // 8
+ 0x783EB1, 0x797251, 0x7A7761, 0x7B549D, // 16
+ 0x7C0FD5, 0x7CAE25, 0x7D33DD, 0x7DA4C1, // 32
+ 0x7E03FD, 0x7E5449, 0x7E97F5, 0x7ED0F9, // 64
+ 0x7F0101, 0x7F2971, 0x7F4B7D, 0x7F6825, // 128
+ 0x7F8041, 0x7F948D, 0x7FA59D, 0x7FB3FD, // 256
+ 0x7FC011, 0x7FCA3D, 0x7FD2C9, 0x7FD9F9, // 512
+ 0x7FE005, 0x7FE51D, 0x7FE961, 0x7FECFD, //1.024 [s]
+ 0x7FF001, 0x7FF28D, 0x7FF4B1, 0x7FF67D, //2.048
+ 0x7FF801, 0x7FF949, 0x7FFA59, 0x7FFB41, //4.096
+ 0x7FFC01, 0x7FFCA5, 0x7FFD2D, 0x7FFDA1, //8.192
+ 0x7FFE01, 0x7FFE51, 0x7FFE95, 0x7FFED1,
+ };
+
+/*
+ * ABE_DEBUG DATA -------------------------------------------------------------------------
+ */
/*
- * ABE CONST AREA FOR PARAMETERS TRANSLATION
+ * IRQ and trace pointer in DMEM:
+ * FW updates a write pointer at "MCU_IRQ_FIFO_ptr_labelID", the read pointer is in HAL
*/
-const abe_uint32 abe_db2lin_table [sizeof_db2lin_table] = {
- 0x00000000, /* SMEM coding of -120 dB */
- 0x00000000, /* SMEM coding of -119 dB */
- 0x00000000, /* SMEM coding of -118 dB */
- 0x00000000, /* SMEM coding of -117 dB */
- 0x00000000, /* SMEM coding of -116 dB */
- 0x00000000, /* SMEM coding of -115 dB */
- 0x00000000, /* SMEM coding of -114 dB */
- 0x00000000, /* SMEM coding of -113 dB */
- 0x00000000, /* SMEM coding of -112 dB */
- 0x00000000, /* SMEM coding of -111 dB */
- 0x00000000, /* SMEM coding of -110 dB */
- 0x00000000, /* SMEM coding of -109 dB */
- 0x00000001, /* SMEM coding of -108 dB */
- 0x00000001, /* SMEM coding of -107 dB */
- 0x00000001, /* SMEM coding of -106 dB */
- 0x00000001, /* SMEM coding of -105 dB */
- 0x00000001, /* SMEM coding of -104 dB */
- 0x00000001, /* SMEM coding of -103 dB */
- 0x00000002, /* SMEM coding of -102 dB */
- 0x00000002, /* SMEM coding of -101 dB */
- 0x00000002, /* SMEM coding of -100 dB */
- 0x00000002, /* SMEM coding of -99 dB */
- 0x00000003, /* SMEM coding of -98 dB */
- 0x00000003, /* SMEM coding of -97 dB */
- 0x00000004, /* SMEM coding of -96 dB */
- 0x00000004, /* SMEM coding of -95 dB */
- 0x00000005, /* SMEM coding of -94 dB */
- 0x00000005, /* SMEM coding of -93 dB */
- 0x00000006, /* SMEM coding of -92 dB */
- 0x00000007, /* SMEM coding of -91 dB */
- 0x00000008, /* SMEM coding of -90 dB */
- 0x00000009, /* SMEM coding of -89 dB */
- 0x0000000A, /* SMEM coding of -88 dB */
- 0x0000000B, /* SMEM coding of -87 dB */
- 0x0000000D, /* SMEM coding of -86 dB */
- 0x0000000E, /* SMEM coding of -85 dB */
- 0x00000010, /* SMEM coding of -84 dB */
- 0x00000012, /* SMEM coding of -83 dB */
- 0x00000014, /* SMEM coding of -82 dB */
- 0x00000017, /* SMEM coding of -81 dB */
- 0x0000001A, /* SMEM coding of -80 dB */
- 0x0000001D, /* SMEM coding of -79 dB */
- 0x00000021, /* SMEM coding of -78 dB */
- 0x00000025, /* SMEM coding of -77 dB */
- 0x00000029, /* SMEM coding of -76 dB */
- 0x0000002E, /* SMEM coding of -75 dB */
- 0x00000034, /* SMEM coding of -74 dB */
- 0x0000003A, /* SMEM coding of -73 dB */
- 0x00000041, /* SMEM coding of -72 dB */
- 0x00000049, /* SMEM coding of -71 dB */
- 0x00000052, /* SMEM coding of -70 dB */
- 0x0000005D, /* SMEM coding of -69 dB */
- 0x00000068, /* SMEM coding of -68 dB */
- 0x00000075, /* SMEM coding of -67 dB */
- 0x00000083, /* SMEM coding of -66 dB */
- 0x00000093, /* SMEM coding of -65 dB */
- 0x000000A5, /* SMEM coding of -64 dB */
- 0x000000B9, /* SMEM coding of -63 dB */
- 0x000000D0, /* SMEM coding of -62 dB */
- 0x000000E9, /* SMEM coding of -61 dB */
- 0x00000106, /* SMEM coding of -60 dB */
- 0x00000126, /* SMEM coding of -59 dB */
- 0x0000014A, /* SMEM coding of -58 dB */
- 0x00000172, /* SMEM coding of -57 dB */
- 0x0000019F, /* SMEM coding of -56 dB */
- 0x000001D2, /* SMEM coding of -55 dB */
- 0x0000020B, /* SMEM coding of -54 dB */
- 0x0000024A, /* SMEM coding of -53 dB */
- 0x00000292, /* SMEM coding of -52 dB */
- 0x000002E2, /* SMEM coding of -51 dB */
- 0x0000033C, /* SMEM coding of -50 dB */
- 0x000003A2, /* SMEM coding of -49 dB */
- 0x00000413, /* SMEM coding of -48 dB */
- 0x00000492, /* SMEM coding of -47 dB */
- 0x00000521, /* SMEM coding of -46 dB */
- 0x000005C2, /* SMEM coding of -45 dB */
- 0x00000676, /* SMEM coding of -44 dB */
- 0x0000073F, /* SMEM coding of -43 dB */
- 0x00000822, /* SMEM coding of -42 dB */
- 0x00000920, /* SMEM coding of -41 dB */
- 0x00000A3D, /* SMEM coding of -40 dB */
- 0x00000B7D, /* SMEM coding of -39 dB */
- 0x00000CE4, /* SMEM coding of -38 dB */
- 0x00000E76, /* SMEM coding of -37 dB */
- 0x0000103A, /* SMEM coding of -36 dB */
- 0x00001235, /* SMEM coding of -35 dB */
- 0x0000146E, /* SMEM coding of -34 dB */
- 0x000016EC, /* SMEM coding of -33 dB */
- 0x000019B8, /* SMEM coding of -32 dB */
- 0x00001CDC, /* SMEM coding of -31 dB */
- 0x00002061, /* SMEM coding of -30 dB */
- 0x00002455, /* SMEM coding of -29 dB */
- 0x000028C4, /* SMEM coding of -28 dB */
- 0x00002DBD, /* SMEM coding of -27 dB */
- 0x00003352, /* SMEM coding of -26 dB */
- 0x00003995, /* SMEM coding of -25 dB */
- 0x0000409C, /* SMEM coding of -24 dB */
- 0x0000487E, /* SMEM coding of -23 dB */
- 0x00005156, /* SMEM coding of -22 dB */
- 0x00005B43, /* SMEM coding of -21 dB */
- 0x00006666, /* SMEM coding of -20 dB */
- 0x000072E5, /* SMEM coding of -19 dB */
- 0x000080E9, /* SMEM coding of -18 dB */
- 0x000090A4, /* SMEM coding of -17 dB */
- 0x0000A24B, /* SMEM coding of -16 dB */
- 0x0000B618, /* SMEM coding of -15 dB */
- 0x0000CC50, /* SMEM coding of -14 dB */
- 0x0000E53E, /* SMEM coding of -13 dB */
- 0x00010137, /* SMEM coding of -12 dB */
- 0x0001209A, /* SMEM coding of -11 dB */
- 0x000143D1, /* SMEM coding of -10 dB */
- 0x00016B54, /* SMEM coding of -9 dB */
- 0x000197A9, /* SMEM coding of -8 dB */
- 0x0001C967, /* SMEM coding of -7 dB */
- 0x00020137, /* SMEM coding of -6 dB */
- 0x00023FD6, /* SMEM coding of -5 dB */
- 0x00028619, /* SMEM coding of -4 dB */
- 0x0002D4EF, /* SMEM coding of -3 dB */
- 0x00032D64, /* SMEM coding of -2 dB */
- 0x000390A4, /* SMEM coding of -1 dB */
- 0x00040000, /* SMEM coding of 0 dB */
- 0x00047CF2, /* SMEM coding of 1 dB */
- 0x00050923, /* SMEM coding of 2 dB */
- 0x0005A670, /* SMEM coding of 3 dB */
- 0x000656EE, /* SMEM coding of 4 dB */
- 0x00071CF5, /* SMEM coding of 5 dB */
- 0x0007FB26, /* SMEM coding of 6 dB */
- 0x0008F473, /* SMEM coding of 7 dB */
- 0x000A0C2B, /* SMEM coding of 8 dB */
- 0x000B4606, /* SMEM coding of 9 dB */
- 0x000CA62C, /* SMEM coding of 10 dB */
- 0x000E314A, /* SMEM coding of 11 dB */
- 0x000FEC9E, /* SMEM coding of 12 dB */
- 0x0011DE0A, /* SMEM coding of 13 dB */
- 0x00140C28, /* SMEM coding of 14 dB */
- 0x00167E60, /* SMEM coding of 15 dB */
- 0x00193D00, /* SMEM coding of 16 dB */
- 0x001C515D, /* SMEM coding of 17 dB */
- 0x001FC5EB, /* SMEM coding of 18 dB */
- 0x0023A668, /* SMEM coding of 19 dB */
- 0x00280000, /* SMEM coding of 20 dB */
- 0x002CE178, /* SMEM coding of 21 dB */
- 0x00325B65, /* SMEM coding of 22 dB */
- 0x00388062, /* SMEM coding of 23 dB */
- 0x003F654E, /* SMEM coding of 24 dB */
- 0x00472194, /* SMEM coding of 25 dB */
- 0x004FCF7C, /* SMEM coding of 26 dB */
- 0x00598C81, /* SMEM coding of 27 dB */
- 0x006479B7, /* SMEM coding of 28 dB */
- 0x0070BC3D, /* SMEM coding of 29 dB */
- 0x007E7DB9, /* SMEM coding of 30 dB */
-};
-
+abe_uint32 abe_irq_dbg_read_ptr;
-const abe_uint32 abe_sin_table [] = { 0 };
/*
- * ABE_DEBUG DATA
+ * General circular buffer used to trace APIs calls and AE activity.
*/
+abe_uint32 abe_dbg_activity_log [D_DEBUG_HAL_TASK_sizeof];
+abe_uint32 abe_dbg_activity_log_write_pointer;
+abe_uint32 abe_dbg_mask;
/*
- * IRQ and trace pointer in DMEM:
- * FW updates a write pointer at "MCU_IRQ_FIFO_ptr_labelID", the read pointer is in HAL
+ * Global variable holding parameter errors
*/
-abe_uint32 abe_irq_dbg_read_ptr;
-/* General circular buffer used to trace APIs calls and AE activity */
-abe_uint32 abe_dbg_activity_log[D_DEBUG_HAL_TASK_sizeof];
-abe_uint32 abe_dbg_activity_log_write_pointer;
-abe_uint32 abe_dbg_mask;
+abe_uint32 abe_dbg_param;
-/* Global variable holding parameter errors */
-abe_uint32 abe_dbg_param;
+
+/*
+ * Output of messages selector
+ */
+abe_uint32 abe_dbg_output;
-/* Output of messages selector */
-abe_uint32 abe_dbg_output;
+/*
+ * last parameters
+ */
-/* Last parameters */
-#define SIZE_PARAM 10
+#define SIZE_PARAM 10
abe_uint32 param1[SIZE_PARAM];
abe_uint32 param2[SIZE_PARAM];
@@ -1327,24 +522,29 @@ abe_uint32 param3[SIZE_PARAM];
abe_uint32 param4[SIZE_PARAM];
abe_uint32 param5[SIZE_PARAM];
-volatile abe_uint32 just_to_avoid_the_many_warnings;
-volatile abe_gain_t just_to_avoid_the_many_warnings_abe_gain_t;
-volatile abe_ramp_t just_to_avoid_the_many_warnings_abe_ramp_t;
-volatile abe_dma_t just_to_avoid_the_many_warnings_abe_dma_t;
-volatile abe_port_id just_to_avoid_the_many_warnings_abe_port_id;
-volatile abe_millis_t just_to_avoid_the_many_warnings_abe_millis_t;
-volatile abe_micros_t just_to_avoid_the_many_warnings_abe_micros_t;
-volatile abe_patch_rev just_to_avoid_the_many_warnings_abe_patch_rev;
-volatile abe_sequence_t just_to_avoid_the_many_warnings_abe_sequence_t;
-volatile abe_ana_port_id just_to_avoid_the_many_warnings_abe_ana_port_id;
-volatile abe_time_stamp_t just_to_avoid_the_many_warnings_abe_time_stamp_t;
-volatile abe_data_format_t just_to_avoid_the_many_warnings_abe_data_format_t;
-volatile abe_port_protocol_t just_to_avoid_the_many_warnings_abe_port_protocol_t;
-volatile abe_router_t just_to_avoid_the_many_warnings_abe_router_t;
-volatile abe_router_id just_to_avoid_the_many_warnings_abe_router_id;
+/*
+ * END ABE_DEBUG DATA -------------------------------------------------------------------------
+ */
+
+volatile abe_uint32 just_to_avoid_the_many_warnings;
+volatile abe_gain_t just_to_avoid_the_many_warnings_abe_gain_t;
+volatile abe_ramp_t just_to_avoid_the_many_warnings_abe_ramp_t;
+volatile abe_dma_t just_to_avoid_the_many_warnings_abe_dma_t;
+volatile abe_port_id just_to_avoid_the_many_warnings_abe_port_id;
+volatile abe_millis_t just_to_avoid_the_many_warnings_abe_millis_t;
+volatile abe_micros_t just_to_avoid_the_many_warnings_abe_micros_t;
+volatile abe_patch_rev just_to_avoid_the_many_warnings_abe_patch_rev;
+volatile abe_sequence_t just_to_avoid_the_many_warnings_abe_sequence_t;
+volatile abe_ana_port_id just_to_avoid_the_many_warnings_abe_ana_port_id;
+volatile abe_time_stamp_t just_to_avoid_the_many_warnings_abe_time_stamp_t;
+volatile abe_data_format_t just_to_avoid_the_many_warnings_abe_data_format_t;
+volatile abe_port_protocol_t just_to_avoid_the_many_warnings_abe_port_protocol_t;
+volatile abe_router_t just_to_avoid_the_many_warnings_abe_router_t;
+volatile abe_router_id just_to_avoid_the_many_warnings_abe_router_id;
+
#ifdef __cplusplus
}
#endif
-#endif /* _ABE_DAT_H_ */
+#endif // abe_dat_def
diff --git a/sound/soc/omap/abe/abe_dbg.c b/sound/soc/omap/abe/abe_dbg.c
index 1592501aa7ac..ec0360f0661d 100644
--- a/sound/soc/omap/abe/abe_dbg.c
+++ b/sound/soc/omap/abe/abe_dbg.c
@@ -1,49 +1,70 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
-
-/*
- * ABE_DBG_LOG
- *
+/**
+ * abe_dbg_log - Log ABE trace inside circular buffer
+ * @x: data to be logged
+ * @y: data to be logged
+ * @z: data to be logged
+ * @t: data to be logged
* Parameter :
- * x : data to be logged
*
* abe_dbg_activity_log : global circular buffer holding the data
* abe_dbg_activity_log_write_pointer : circular write pointer
*
- * Operations :
* saves data in the log file
- *
- * Return value :
- * none
*/
-
-void abe_dbg_log(abe_uint32 x, abe_uint32 y, abe_uint32 z, abe_uint32 t)
+void abe_dbg_log (u32 x, u32 y, u32 z, u32 t)
{
- abe_uint32 time_stamp, data;
+ u32 time_stamp, data;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_loopCounter_ADDR,
- (abe_uint32 *)&time_stamp, sizeof (time_stamp));
+ if (abe_dbg_activity_log_write_pointer >= (D_DEBUG_HAL_TASK_sizeof - 2))
+ abe_dbg_activity_log_write_pointer = 0;
+
+ /* copy in DMEM trace buffer and CortexA9 local buffer and a small 7
+ words circular buffer of the DMA trace ending with 0x55555555
+ (tag for last word) */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_loopCounter_ADDR,
+ (u32 *)&time_stamp, sizeof (time_stamp));
abe_dbg_activity_log [abe_dbg_activity_log_write_pointer] = time_stamp;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_DEBUG_HAL_TASK_ADDR +
- (abe_dbg_activity_log_write_pointer<<2),
- (abe_uint32 *)&time_stamp, sizeof (time_stamp));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_DEBUG_HAL_TASK_ADDR +
+ (abe_dbg_activity_log_write_pointer<<2), (u32 *)&time_stamp,
+ sizeof (time_stamp));
abe_dbg_activity_log_write_pointer ++;
- data = ((x&MAX_UINT8)<< 24) | ((y&MAX_UINT8)<< 16) | ((z&MAX_UINT8)<< 8) | (t&MAX_UINT8);
- abe_dbg_activity_log[abe_dbg_activity_log_write_pointer] = data;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_DEBUG_HAL_TASK_ADDR +
- (abe_dbg_activity_log_write_pointer<<2),
- (abe_uint32 *)&data, sizeof (data));
+ data = ((x&MAX_UINT8)<< 24) | ((y&MAX_UINT8)<< 16) | ((z&MAX_UINT8)<< 8)
+ | (t&MAX_UINT8);
+ abe_dbg_activity_log [abe_dbg_activity_log_write_pointer] = data;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_DEBUG_HAL_TASK_ADDR +
+ (abe_dbg_activity_log_write_pointer<<2), (u32 *)&data, sizeof (data));
+
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_DEBUG_FIFO_HAL_ADDR +
+ ((abe_dbg_activity_log_write_pointer<<2) & (D_DEBUG_FIFO_HAL_sizeof -1)),
+ (u32 *)&data, sizeof (data));
+ data = ABE_DBG_MAGIC_NUMBER;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_DEBUG_FIFO_HAL_ADDR +
+ (((abe_dbg_activity_log_write_pointer+1)<<2) & (D_DEBUG_FIFO_HAL_sizeof -1)),
+ (u32 *)&data, sizeof (data));
abe_dbg_activity_log_write_pointer ++;
if (abe_dbg_activity_log_write_pointer >= D_DEBUG_HAL_TASK_sizeof)
@@ -51,156 +72,135 @@ void abe_dbg_log(abe_uint32 x, abe_uint32 y, abe_uint32 z, abe_uint32 t)
}
-/*
- * ABE_DEBUG_OUTPUT_PINS
- *
- * Parameter :
- * x : d
- *
- * Operations :
- * set the debug output pins of AESS
- *
- * Return value :
+/**
+ * abe_debug_output_pins
+ * @x: d
*
+ * set the debug output pins of AESS
*/
-void abe_debug_output_pins (abe_uint32 x)
+void abe_debug_output_pins (u32 x)
{
-just_to_avoid_the_many_warnings = x;
}
-
-/*
- * ABE_DBG_ERROR_LOG
- *
- * Parameter :
- * x : d
- *
- * Operations :
- * log the error codes
- *
- * Return value :
+/**
+ * abe_dbg_error_log - Log ABE error
+ * @x: error to log
*
+ * log the error codes
*/
-void abe_dbg_error_log (abe_uint32 x)
+void abe_dbg_error_log (u32 x)
{
abe_dbg_log (x, MAX_UINT8, MAX_UINT8, MAX_UINT8);
}
-
-/*
- * ABE_DEBUGGER
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_debugger
+ * @x: error to log
*
+ * log error for debugger
*/
-void abe_debugger (abe_uint32 x)
+void abe_debugger (u32 x)
{
-just_to_avoid_the_many_warnings = x;
}
-
-
-
-/*
- S = power (2, 31) * 0.25;
- N = 4; B = 2; F=[1/N 1/N]; gen_and_save('dbg_8k_2.txt', B, F, N, S);
- N = 8; B = 2; F=[1/N 2/N]; gen_and_save('dbg_16k_2.txt', B, F, N, S);
- N = 12; B = 2; F=[1/N 2/N]; gen_and_save('dbg_48k_2.txt', B, F, N, S);
- N = 60; B = 2; F=[4/N 8/N]; gen_and_save('dbg_amic.txt', B, F, N, S);
- N = 10; B = 6; F=[1/N 2/N 3/N 1/N 2/N 3/N]; gen_and_save('dbg_dmic.txt', B, F, N, S);
+/**
+ * abe_load_embeddded_patterns
+ *
+ * load test patterns
+ *
+ * S = power (2, 31) * 0.25;
+ * N = 4; B = 2; F=[1/N 1/N]; gen_and_save('dbg_8k_2.txt', B, F, N, S);
+ * N = 8; B = 2; F=[1/N 2/N]; gen_and_save('dbg_16k_2.txt', B, F, N, S);
+ * N = 12; B = 2; F=[1/N 2/N]; gen_and_save('dbg_48k_2.txt', B, F, N, S);
+ * N = 60; B = 2; F=[4/N 8/N]; gen_and_save('dbg_amic.txt', B, F, N, S);
+ * N = 10; B = 6; F=[1/N 2/N 3/N 1/N 2/N 3/N]; gen_and_save('dbg_dmic.txt', B, F, N, S);
*/
void abe_load_embeddded_patterns (void)
{
- abe_uint32 i;
+ u32 i;
#define patterns_96k_len 48
-const long patterns_96k[patterns_96k_len] = {
- 1620480, 1452800,
- 1452800, 838656,
- 1186304, 0,
- 838656, -838912,
- 434176, -1453056,
- 0, -1677824,
- -434432, -1453056,
- -838912, -838912,
- -1186560, -256,
- -1453056, 838656,
- -1620736, 1452800,
- -1677824, 1677568,
- -1620736, 1452800,
- -1453056, 838656,
- -1186560, 0,
- -838912, -838912,
- -434432, -1453056,
- -256, -1677824,
- 434176, -1453056,
- 838656, -838912,
- 1186304, -256,
- 1452800, 838656,
- 1620480, 1452800,
- 1677568, 1677568,
-};
+ const long patterns_96k[patterns_96k_len] = {
+ 1620480, 1452800,
+ 1452800, 838656,
+ 1186304, 0,
+ 838656, -838912,
+ 434176, -1453056,
+ 0, -1677824,
+ -434432, -1453056,
+ -838912, -838912,
+ -1186560, -256,
+ -1453056, 838656,
+ -1620736, 1452800,
+ -1677824, 1677568,
+ -1620736, 1452800,
+ -1453056, 838656,
+ -1186560, 0,
+ -838912, -838912,
+ -434432, -1453056,
+ -256, -1677824,
+ 434176, -1453056,
+ 838656, -838912,
+ 1186304, -256,
+ 1452800, 838656,
+ 1620480, 1452800,
+ 1677568, 1677568,
+ };
#define patterns_48k_len 24
-const long patterns_48k[patterns_48k_len] = {
- 1452800, 838656,
- 838656, -838912,
- 0, -1677824,
- -838912, -838912,
- -1453056, 838656,
- -1677824, 1677568,
- -1453056, 838656,
- -838912, -838912,
- -256, -1677824,
- 838656, -838912,
- 1452800, 838656,
- 1677568, 1677568,
-};
+ const long patterns_48k[patterns_48k_len] = {
+ 1452800, 838656,
+ 838656, -838912,
+ 0, -1677824,
+ -838912, -838912,
+ -1453056, 838656,
+ -1677824, 1677568,
+ -1453056, 838656,
+ -838912, -838912,
+ -256, -1677824,
+ 838656, -838912,
+ 1452800, 838656,
+ 1677568, 1677568,
+ };
#define patterns_24k_len 12
const long patterns_24k[patterns_24k_len] = {
- 838656, -838912,
- -838912, -838912,
- -1677824, 1677568,
- -838912, -838912,
- 838656, -838912,
- 1677568, 1677568,
-};
+ 838656, -838912,
+ -838912, -838912,
+ -1677824, 1677568,
+ -838912, -838912,
+ 838656, -838912,
+ 1677568, 1677568,
+ };
#define patterns_16k_len 8
-const long patterns_16k[patterns_16k_len] = {
- 0, 0,
- -1677824, -1677824,
- -256, -256,
- 1677568, 1677568,
-};
+ const long patterns_16k[patterns_16k_len] = {
+ 0, 0,
+ -1677824, -1677824,
+ -256, -256,
+ 1677568, 1677568,
+ };
#define patterns_8k_len 4
-const long patterns_8k[patterns_8k_len] = {
- 1677568, -1677824,
- 1677568, 1677568,
-};
+ const long patterns_8k[patterns_8k_len] = {
+ 1677568, -1677824,
+ 1677568, 1677568,
+ };
for (i = 0; i < patterns_8k_len; i++)
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM,
- (S_DBG_8K_PATTERN_ADDR *8)+(i*4),
- (abe_uint32 *)(&(patterns_8k[i])), 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM,
+ (S_DBG_8K_PATTERN_ADDR *8)+(i*4),
+ (u32 *)(&(patterns_8k[i])), 4);
for (i = 0; i < patterns_16k_len; i++)
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM,
- (S_DBG_16K_PATTERN_ADDR *8)+(i*4),
- (abe_uint32 *)(&(patterns_16k[i])), 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM,
+ (S_DBG_16K_PATTERN_ADDR *8)+(i*4),
+ (u32 *)(&(patterns_16k[i])), 4);
for (i = 0; i < patterns_24k_len; i++)
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM,
- (S_DBG_24K_PATTERN_ADDR *8)+(i*4),
- (abe_uint32 *)(&(patterns_24k[i])), 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM,
+ (S_DBG_24K_PATTERN_ADDR *8)+(i*4),
+ (u32 *)(&(patterns_24k[i])), 4);
for (i = 0; i < patterns_48k_len; i++)
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM,
- (S_DBG_48K_PATTERN_ADDR *8)+(i*4),
- (abe_uint32 *)(&(patterns_48k[i])), 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM,
+ (S_DBG_48K_PATTERN_ADDR *8)+(i*4),
+ (u32 *)(&(patterns_48k[i])), 4);
for (i = 0; i < patterns_96k_len; i++)
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_SMEM,
- (S_DBG_96K_PATTERN_ADDR *8)+(i*4),
- (abe_uint32 *)(&(patterns_96k[i])), 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM,
+ (S_DBG_96K_PATTERN_ADDR *8)+(i*4),
+ (u32 *)(&(patterns_96k[i])), 4);
}
diff --git a/sound/soc/omap/abe/abe_dbg.h b/sound/soc/omap/abe/abe_dbg.h
index 66a5f8907c55..8c28ee76895a 100644
--- a/sound/soc/omap/abe/abe_dbg.h
+++ b/sound/soc/omap/abe/abe_dbg.h
@@ -1,150 +1,170 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/*
* DEFINE
*/
-#define NO_OUTPUT 0
-#define TERMINAL_OUTPUT 1
-#define LINE_OUTPUT 2
-#define DEBUG_TRACE_OUTPUT 3
+#define NO_OUTPUT 0
+#define TERMINAL_OUTPUT 1
+#define LINE_OUTPUT 2
+#define DEBUG_TRACE_OUTPUT 3
/*
* Debug trace format
* TIME 2 bytes from ABE : 4kHz period of the FW scheduler
* SUBID 1 byte : HAL API index
- * From 0 to 16 bytes : parameters of the subroutine
- * on every 32 dumps a tag is pushed on the debug trace : 0x55555555
+ * From 0 to 16 bytes : parameters of the subroutine
+ * on every 32 dumps a tag is pushed on the debug trace : 0x55555555
*/
-#define dbg_bitfield_offset 8
+#define dbg_bitfield_offset 8
-#define dbg_api_calls 0
-#define dbg_mapi (1L << (dbg_api_calls + dbg_bitfield_offset))
+#define dbg_api_calls 0
+#define dbg_mapi (1L << (dbg_api_calls + dbg_bitfield_offset))
-#define dbg_external_data_access 1
-#define dbg_mdata (1L << (dbg_external_data_access + dbg_bitfield_offset))
+#define dbg_external_data_access 1
+#define dbg_mdata (1L << (dbg_external_data_access + dbg_bitfield_offset))
-#define dbg_err_codes 2
-#define dbg_merr (1L << (dbg_api_calls + dbg_bitfield_offset))
+#define dbg_err_codes 2
+#define dbg_merr (1L << (dbg_api_calls + dbg_bitfield_offset))
+
+#define ABE_DBG_MAGIC_NUMBER 0x55555555
/*
* IDs used for traces
*/
-#define id_reset_hal (1 + dbg_mapi)
-#define id_load_fw (2 + dbg_mapi)
-#define id_default_configuration (3 + dbg_mapi)
-#define id_irq_processing (4 + dbg_mapi)
-#define id_event_generator_switch (5 + dbg_mapi)
-#define id_read_hardware_configuration (6 + dbg_mapi)
-#define id_read_lowest_opp (7 + dbg_mapi)
-#define id_write_gain (8 + dbg_mapi)
-#define id_set_asrc_drift_control (9 + dbg_mapi)
-#define id_plug_subroutine (10 + dbg_mapi)
-#define id_unplug_subroutine (11 + dbg_mapi)
-#define id_plug_sequence (12 + dbg_mapi)
-#define id_launch_sequence (13 + dbg_mapi)
-#define id_launch_sequence_param (14 + dbg_mapi)
-#define id_connect_irq_ping_pong_port (15 + dbg_mapi)
-#define id_read_analog_gain_dl (16 + dbg_mapi)
-#define id_read_analog_gain_ul (17 + dbg_mapi)
-#define id_enable_dyn_ul_gain (18 + dbg_mapi)
-#define id_disable_dyn_ul_gain (19 + dbg_mapi)
-#define id_enable_dyn_extension (20 + dbg_mapi)
-#define id_disable_dyn_extension (21 + dbg_mapi)
-#define id_notify_analog_gain_changed (22 + dbg_mapi)
-#define id_reset_port (23 + dbg_mapi)
-#define id_read_remaining_data (24 + dbg_mapi)
-#define id_disable_data_transfer (25 + dbg_mapi)
-#define id_enable_data_transfer (26 + dbg_mapi)
-#define id_read_global_counter (27 + dbg_mapi)
-#define id_set_dmic_filter (28 + dbg_mapi)
-#define id_set_opp_processing (29 + dbg_mapi)
-#define id_set_ping_pong_buffer (30 + dbg_mapi)
-#define id_read_port_address (31 + dbg_mapi)
-#define id_load_fw_param (32 + dbg_mapi)
-#define id_write_headset_offset (33 + dbg_mapi)
-#define id_read_gain_ranges (34 + dbg_mapi)
-#define id_write_equalizer (35 + dbg_mapi)
-#define id_write_asrc (36 + dbg_mapi)
-#define id_write_aps (37 + dbg_mapi)
-#define id_write_mixer (38 + dbg_mapi)
-#define id_write_eanc (39 + dbg_mapi)
-#define id_write_router (40 + dbg_mapi)
-#define id_read_port_gain (41 + dbg_mapi)
-#define id_read_asrc (42 + dbg_mapi)
-#define id_read_aps (43 + dbg_mapi)
-#define id_read_aps_energy (44 + dbg_mapi)
-#define id_read_mixer (45 + dbg_mapi)
-#define id_read_eanc (46 + dbg_mapi)
-#define id_read_router (47 + dbg_mapi)
-#define id_read_debug_trace (48 + dbg_mapi)
-#define id_set_sequence_time_accuracy (49 + dbg_mapi)
-#define id_set_debug_pins (50 + dbg_mapi)
-#define id_select_main_port (51 + dbg_mapi)
-#define id_write_event_generator (52 + dbg_mapi)
-#define id_read_use_case_opp (53 + dbg_mapi)
-#define id_select_data_source (54 + dbg_mapi)
-#define id_read_next_ping_pong_buffer (55 + dbg_mapi)
-#define id_init_ping_pong_buffer (56 + dbg_mapi)
-#define id_connect_cbpr_dmareq_port (57 + dbg_mapi)
-#define id_connect_dmareq_port (58 + dbg_mapi)
-#define id_connect_dmareq_ping_pong_port (59 + dbg_mapi)
-#define id_connect_serial_port (60 + dbg_mapi)
-#define id_connect_slimbus_port (61 + dbg_mapi)
-#define id_5 (62 + dbg_mapi)
-#define id_set_router_configuration (63 + dbg_mapi)
-#define id_connect_debug_trace (64 + dbg_mapi)
-#define id_set_debug_trace (65 + dbg_mapi)
-#define id_remote_debugger_interface (66 + dbg_mapi)
-#define id_enable_test_pattern (67 + dbg_mapi)
-#define id_connect_tdm_port (68 + dbg_mapi)
+#define id_reset_hal (1 + dbg_mapi)
+#define id_load_fw (2 + dbg_mapi)
+#define id_default_configuration (3 + dbg_mapi)
+#define id_irq_processing (4 + dbg_mapi)
+#define id_event_generator_switch (5 + dbg_mapi)
+#define id_read_hardware_configuration (6 + dbg_mapi)
+#define id_read_lowest_opp (7 + dbg_mapi)
+#define id_write_gain (8 + dbg_mapi)
+#define id_set_asrc_drift_control (9 + dbg_mapi)
+#define id_plug_subroutine (10 + dbg_mapi)
+#define id_unplug_subroutine (11 + dbg_mapi)
+#define id_plug_sequence (12 + dbg_mapi)
+#define id_launch_sequence (13 + dbg_mapi)
+#define id_launch_sequence_param (14 + dbg_mapi)
+#define id_connect_irq_ping_pong_port (15 + dbg_mapi)
+#define id_read_analog_gain_dl (16 + dbg_mapi)
+#define id_read_analog_gain_ul (17 + dbg_mapi)
+#define id_enable_dyn_ul_gain (18 + dbg_mapi)
+#define id_disable_dyn_ul_gain (19 + dbg_mapi)
+#define id_enable_dyn_extension (20 + dbg_mapi)
+#define id_disable_dyn_extension (21 + dbg_mapi)
+#define id_notify_analog_gain_changed (22 + dbg_mapi)
+#define id_reset_port (23 + dbg_mapi)
+#define id_read_remaining_data (24 + dbg_mapi)
+#define id_disable_data_transfer (25 + dbg_mapi)
+#define id_enable_data_transfer (26 + dbg_mapi)
+#define id_read_global_counter (27 + dbg_mapi)
+#define id_set_dmic_filter (28 + dbg_mapi)
+#define id_set_opp_processing (29 + dbg_mapi)
+#define id_set_ping_pong_buffer (30 + dbg_mapi)
+#define id_read_port_address (31 + dbg_mapi)
+#define id_load_fw_param (32 + dbg_mapi)
+#define id_write_headset_offset (33 + dbg_mapi)
+#define id_read_gain_ranges (34 + dbg_mapi)
+#define id_write_equalizer (35 + dbg_mapi)
+#define id_write_asrc (36 + dbg_mapi)
+#define id_write_aps (37 + dbg_mapi)
+#define id_write_mixer (38 + dbg_mapi)
+#define id_write_eanc (39 + dbg_mapi)
+#define id_write_router (40 + dbg_mapi)
+#define id_read_port_gain (41 + dbg_mapi)
+#define id_read_asrc (42 + dbg_mapi)
+#define id_read_aps (43 + dbg_mapi)
+#define id_read_aps_energy (44 + dbg_mapi)
+#define id_read_mixer (45 + dbg_mapi)
+#define id_read_eanc (46 + dbg_mapi)
+#define id_read_router (47 + dbg_mapi)
+#define id_read_debug_trace (48 + dbg_mapi)
+#define id_set_sequence_time_accuracy (49 + dbg_mapi)
+#define id_set_debug_pins (50 + dbg_mapi)
+#define id_select_main_port (51 + dbg_mapi)
+#define id_write_event_generator (52 + dbg_mapi)
+#define id_read_use_case_opp (53 + dbg_mapi)
+#define id_select_data_source (54 + dbg_mapi)
+#define id_read_next_ping_pong_buffer (55 + dbg_mapi)
+#define id_init_ping_pong_buffer (56 + dbg_mapi)
+#define id_connect_cbpr_dmareq_port (57 + dbg_mapi)
+#define id_connect_dmareq_port (58 + dbg_mapi)
+#define id_connect_dmareq_ping_pong_port (59 + dbg_mapi)
+#define id_connect_serial_port (60 + dbg_mapi)
+#define id_connect_slimbus_port (61 + dbg_mapi)
+#define id_read_gain (62 + dbg_mapi)
+#define id_set_router_configuration (63 + dbg_mapi)
+#define id_connect_debug_trace (64 + dbg_mapi)
+#define id_set_debug_trace (65 + dbg_mapi)
+#define id_remote_debugger_interface (66 + dbg_mapi)
+#define id_enable_test_pattern (67 + dbg_mapi)
+#define id_connect_tdm_port (68 + dbg_mapi)
+
/*
* IDs used for error codes
*/
-#define NOERR 0
-#define ABE_SET_MEMORY_CONFIG_ERR (1 + dbg_merr)
-#define ABE_BLOCK_COPY_ERR (2 + dbg_merr)
-#define ABE_SEQTOOLONG (3 + dbg_merr)
-#define ABE_BADSAMPFORMAT (4 + dbg_merr)
-#define ABE_SET_ATC_MEMORY_CONFIG_ERR (5 + dbg_merr)
-#define ABE_PROTOCOL_ERROR (6 + dbg_merr)
-#define ABE_PARAMETER_ERROR (7 + dbg_merr)
-/* port programmed while still running */
-#define ABE_PORT_REPROGRAMMING (8 + dbg_merr)
-#define ABE_READ_USE_CASE_OPP_ERR (9 + dbg_merr)
-#define ABE_PARAMETER_OVERFLOW (10 + dbg_merr)
+#define NOERR 0
+#define ABE_SET_MEMORY_CONFIG_ERR (1 + dbg_merr)
+#define ABE_BLOCK_COPY_ERR (2 + dbg_merr)
+#define ABE_SEQTOOLONG (3 + dbg_merr)
+#define ABE_BADSAMPFORMAT (4 + dbg_merr)
+#define ABE_SET_ATC_MEMORY_CONFIG_ERR (5 + dbg_merr)
+#define ABE_PROTOCOL_ERROR (6 + dbg_merr)
+#define ABE_PARAMETER_ERROR (7 + dbg_merr)
+
+/* port programmed while still running */
+#define ABE_PORT_REPROGRAMMING (8 + dbg_merr)
+#define ABE_READ_USE_CASE_OPP_ERR (9 + dbg_merr)
+#define ABE_PARAMETER_OVERFLOW (10 + dbg_merr)
+#define ABE_FW_FIFO_WRITE_PTR_ERR (11 + dbg_merr)
+
/*
* IDs used for error codes
*/
-#define ERR_LIB (1 << 1) /* error in the LIB.C file */
-#define ERR_API (1 << 2) /* error in the API.C file */
-#define ERR_INI (1 << 3) /* error in the INI.C file */
-#define ERR_SEQ (1 << 4) /* error in the SEQ.C file */
-#define ERR_DBG (1 << 5) /* error in the DBG.C file */
-#define ERR_EXT (1 << 6) /* error in the EXT.C file */
+/* error in the LIB.C file */
+#define ERR_LIB (1 << 1)
+
+/* error in the API.C file */
+#define ERR_API (1 << 2)
+
+/* error in the INI.C file */
+#define ERR_INI (1 << 3)
+
+/* error in the SEQ.C file */
+#define ERR_SEQ (1 << 4)
+
+/* error in the DBG.C file */
+#define ERR_DBG (1 << 5)
+
+/* error in the DBG.C file */
+#define ERR_EXT (1 << 6)
/*
* MACROS
*/
-#define _log(x,y,z,t) {if(x&abe_dbg_mask)abe_dbg_log(x,y,z,t);}
-
-#ifdef __cplusplus
-}
-#endif
+//#define _log(x,y,z,t) {if(x&abe_dbg_mask)abe_dbg_log(x,y,z,t);} #define _log(x,y,z,t) ;
diff --git a/sound/soc/omap/abe/abe_def.h b/sound/soc/omap/abe/abe_def.h
index e80e9eb5b700..f524cc266019 100644
--- a/sound/soc/omap/abe/abe_def.h
+++ b/sound/soc/omap/abe/abe_def.h
@@ -1,11 +1,22 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#ifndef _ABE_DEF_H_
@@ -15,287 +26,332 @@
* HARDWARE AND PERIPHERAL DEFINITIONS
*/
-#define ABE_DMAREQ_REGISTER(desc) (abe_uint32 *)((desc/8) + CIRCULAR_BUFFER_PERIPHERAL_R__0)
+/* MM_DL */
+#define ABE_CBPR0_IDX 0
-//#define ABE_SEND_DMAREQ(dma) (*((abe_uint32 *)(ABE_ATC_BASE_ADDRESS_MPU+ABE_DMASTATUS_RAW)) = (dma))
+/* VX_DL */
+#define ABE_CBPR1_IDX 1
-#define ABE_CBPR0_IDX 0 /* MM_DL */
-#define ABE_CBPR1_IDX 1 /* VX_DL */
-#define ABE_CBPR2_IDX 2 /* VX_UL */
-#define ABE_CBPR3_IDX 3 /* MM_UL */
-#define ABE_CBPR4_IDX 4 /* MM_UL2 */
-#define ABE_CBPR5_IDX 5 /* TONES */
-#define ABE_CBPR6_IDX 6 /* VIB */
-#define ABE_CBPR7_IDX 7 /* DEBUG/CTL */
+/* VX_UL */
+#define ABE_CBPR2_IDX 2
-#define CIRCULAR_BUFFER_PERIPHERAL_R__0 (0x100 + ABE_CBPR0_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__1 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR1_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__2 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR2_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__3 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR3_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__4 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR4_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__5 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR5_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__6 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR6_IDX * 4)
-#define CIRCULAR_BUFFER_PERIPHERAL_R__7 (CIRCULAR_BUFFER_PERIPHERAL_R__0 + ABE_CBPR7_IDX * 4)
+/* MM_UL */
+#define ABE_CBPR3_IDX 3
-/*
- * cache-flush mechanism
- */
-#define NB_BYTES_CACHELINE_SHFT 4
-#define NB_BYTES_IN_CACHE_LINE (1<<NB_BYTES_CACHELINE_SHFT) /* there are 16 bytes in each cache lines */
+/* MM_UL2 */
+#define ABE_CBPR4_IDX 4
-/*
- * DEFINITIONS SHARED WITH VIRTAUDIO
- */
+/* TONES */
+#define ABE_CBPR5_IDX 5
+
+/* VIB */
+#define ABE_CBPR6_IDX 6
+
+/* DEBUG/CTL */
+#define ABE_CBPR7_IDX 7
+
+#define CIRCULAR_BUFFER_PERIPHERAL_R__0 (0x100 + ABE_CBPR0_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__1 (0x100 + ABE_CBPR1_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__2 (0x100 + ABE_CBPR2_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__3 (0x100 + ABE_CBPR3_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__4 (0x100 + ABE_CBPR4_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__5 (0x100 + ABE_CBPR5_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__6 (0x100 + ABE_CBPR6_IDX*4)
+#define CIRCULAR_BUFFER_PERIPHERAL_R__7 (0x100 + ABE_CBPR7_IDX*4)
-#define UC1_LP 1 /* MP3 low-power player use-case */
-#define UC2_VOICE_CALL_AND_IHF_MMDL 2 /* enables voice ul/dl on earpiece + MM_DL on IHF */
-#define UC5_PINGPONG_MMDL 5 /* Test MM_DL with Ping-Pong */
-#define UC6_PINGPONG_MMDL_WITH_IRQ 6 /* ping-pong with IRQ instead of sDMA */
-
-#define UC31_VOICE_CALL_8KMONO 31
-#define UC32_VOICE_CALL_8KSTEREO 32
-#define UC33_VOICE_CALL_16KMONO 33
-#define UC34_VOICE_CALL_16KSTEREO 34
-#define UC35_MMDL_MONO 35
-#define UC36_MMDL_STEREO 36
-#define UC37_MMUL2_MONO 37
-#define UC38_MMUL2_STEREO 38
-
-#define UC41_____ 40
-#define UC71_STOP_ALL 71 /* stop all activities */
-#define UC72_ENABLE_ALL 72 /* stop all activities */
-#define UC81_ROUTE_AMIC 81
-#define UC82_ROUTE_DMIC01 82
-#define UC83_ROUTE_DMIC23 83
-#define UC84_ROUTE_DMIC45 84
-
-#define UC91_ASRC_DRIFT1 91
-#define UC92_ASRC_DRIFT2 92
-#define UC93_EANC 93
-
-#define PING_PONG_WITH_MCU_IRQ 1
-#define PING_PONG_WITH_DSP_IRQ 2
-
-#define HAL_RESET_HAL 10 /* abe_reset_hal () */
-#define HAL_WRITE_MIXER 11 /* abe_write_mixer () */
-
-#define COPY_FROM_ABE_TO_HOST 1 /* ID used for LIB memory copy subroutines */
-#define COPY_FROM_HOST_TO_ABE 2
+#define PING_PONG_WITH_MCU_IRQ 1
+#define PING_PONG_WITH_DSP_IRQ 2
+
+/* ID used for LIB memory copy subroutines */
+#define COPY_FROM_ABE_TO_HOST 1
+#define COPY_FROM_HOST_TO_ABE 2
/*
* INTERNAL DEFINITIONS
*/
-#define CC_M1 0xFF /* unsigned version of (-1) */
-#define CS_M1 0xFFFF /* unsigned version of (-1) */
-#define CL_M1 0xFFFFFFFFL /* unsigned version of (-1) */
-
-#define NBEANC1 20 /* 20 Q6.26 coef for the FIR */
-#define NBEANC2 16 /* 16 Q6.26 coef for the IIR */
-
-#define NBEQ1 25 /* 24 Q6.26 coefficients */
-#define NBEQ2 13 /* 2x12 Q6.26 coefficients */
-
-#define NBAPS1 10 /* TBD APS first set of parameters */
-#define NBAPS2 10 /* TBD APS second set of parameters */
-
-#define NBMIX_AUDIO_UL 2 /* Mixer used for sending tones to the uplink voice path */
-#define NBMIX_DL1 4 /* Main downlink mixer */
-#define NBMIX_DL2 4 /* Handsfree downlink mixer */
-#define NBMIX_SDT 2 /* Side-tone mixer */
-#define NBMIX_ECHO 2 /* Echo reference mixer */
-#define NBMIX_VXREC 4 /* Voice record mixer */
- /*
- Mixer ID Input port ID Comments
- DL1_MIXER 0 MMDL path
- 1 MMUL2 path
- 2 VXDL path
- 3 TONES path
-
- SDT_MIXER 0 Uplink path
- 1 Downlink path
-
- ECHO_MIXER 0 DL1_MIXER path
- 1 DL2_MIXER path
-
- AUDUL_MIXER 0 TONES_DL path
- 1 Uplink path
- 2 MM_DL path
-
- VXREC_MIXER 0 TONES_DL path
- 1 VX_DL path
- 2 MM_DL path
- 3 VX_UL path
- */
-#define MIX_VXUL_INPUT_MM_DL (abe_port_id)0
-#define MIX_VXUL_INPUT_TONES (abe_port_id)1
-#define MIX_VXUL_INPUT_VX_UL (abe_port_id)2
-#define MIX_VXUL_INPUT_VX_DL (abe_port_id)3
-
-#define MIX_DL1_INPUT_MM_DL (abe_port_id)0
-#define MIX_DL1_INPUT_MM_UL2 (abe_port_id)1
-#define MIX_DL1_INPUT_VX_DL (abe_port_id)2
-#define MIX_DL1_INPUT_TONES (abe_port_id)3
-
-#define MIX_DL2_INPUT_MM_DL (abe_port_id)0
-#define MIX_DL2_INPUT_MM_UL2 (abe_port_id)1
-#define MIX_DL2_INPUT_VX_DL (abe_port_id)2
-#define MIX_DL2_INPUT_TONES (abe_port_id)3
-
-#define MIX_SDT_INPUT_UP_MIXER (abe_port_id)0
-#define MIX_SDT_INPUT_DL1_MIXER (abe_port_id)1
-
-#define MIX_AUDUL_INPUT_MM_DL (abe_port_id)0
-#define MIX_AUDUL_INPUT_TONES (abe_port_id)1
-#define MIX_AUDUL_INPUT_UPLINK (abe_port_id)2
-#define MIX_AUDUL_INPUT_VX_DL (abe_port_id)3
-
-#define MIX_VXREC_INPUT_MM_DL (abe_port_id)0
-#define MIX_VXREC_INPUT_TONES (abe_port_id)1
-#define MIX_VXREC_INPUT_VX_UL (abe_port_id)2
-#define MIX_VXREC_INPUT_VX_DL (abe_port_id)3
-
-#define NBROUTE_UL 16 /* nb of samples to route */
-#define NBROUTE_CONFIG_MAX 10 /* 10 routing tables max */
-
-#define NBROUTE_CONFIG 5 /* 5 pre-computed routing tables */
-#define UPROUTE_CONFIG_AMIC 0 /* AMIC on VX_UL */
-#define UPROUTE_CONFIG_DMIC1 1 /* DMIC first pair on VX_UL */
-#define UPROUTE_CONFIG_DMIC2 2 /* DMIC second pair on VX_UL */
-#define UPROUTE_CONFIG_DMIC3 3 /* DMIC last pair on VX_UL */
-#define UPROUTE_CONFIG_BT 4 /* BT_UL on VX_UL */
-
-#define ABE_PMEM 1
-#define ABE_CMEM 2
-#define ABE_SMEM 3
-#define ABE_DMEM 4
-#define ABE_ATC 5
-
-#define MAXCALLBACK 100 /* call-back indexes */
-#define MAXNBSUBROUTINE 100 /* subroutines */
-
-#define MAXNBSEQUENCE 20 /* time controlled sequenced */
-#define MAXACTIVESEQUENCE 20 /* maximum simultaneous active sequences */
-#define MAXSEQUENCESTEPS 2 /* max number of steps in the sequences */
-#define MAXFEATUREPORT 12 /* max number of feature associated to a port */
-#define SUB_0_PARAM 0
-#define SUB_1_PARAM 1 /* number of parameters per sequence calls */
-#define SUB_2_PARAM 2
-#define SUB_3_PARAM 3
-#define SUB_4_PARAM 4
-
-#define FREE_LINE 0 /* active sequence mask = 0 means the line is free */
-#define NOMASK (1 << 0) /* no ask for collision protection */
-#define MASK_PDM_OFF (1 << 1) /* do not allow a PDM OFF during the execution of this sequence */
-#define MASK_PDM_ON (1 << 2) /* do not allow a PDM ON during the execution of this sequence */
-
-#define NBCHARFEATURENAME 16 /* explicit name of the feature */
-#define NBCHARPORTNAME 16 /* explicit name of the port */
-
-#define SNK_P ABE_ATC_DIRECTION_IN /* sink / input port from Host point of view (or AESS for DMIC/McPDM/.. */
-#define SRC_P ABE_ATC_DIRECTION_OUT /* source / ouptut port */
-
-#define NODRIFT 0 /* no ASRC applied */
-#define FORCED_DRIFT_CONTROL 1 /* for abe_set_asrc_drift_control */
-#define ADPATIVE_DRIFT_CONTROL 2 /* for abe_set_asrc_drift_control */
-
-#define DOPPMODE32_OPP100 (0x00000010 | (0x00000000<<16))
-#define DOPPMODE32_OPP50 (0x0000000C | (0x0000004<<16))
-#define DOPPMODE32_OPP25 (0x0000004 | (0x0000000C<<16))
+#define ABE_FIRMWARE_MAX_SIZE 26629
+
+/* 24 Q6.26 coefficients */
+#define NBEQ1 25
+
+/* 2x12 Q6.26 coefficients */
+#define NBEQ2 13
+
+/* TBD APS first set of parameters */
+#define NBAPS1 10
+
+/* TBD APS second set of parameters */
+#define NBAPS2 10
+
+/* Mixer used for sending tones to the uplink voice path */
+#define NBMIX_AUDIO_UL 2
+
+/* Main downlink mixer */
+#define NBMIX_DL1 4
+
+/* Handsfree downlink mixer */
+#define NBMIX_DL2 4
+
+/* Side-tone mixer */
+#define NBMIX_SDT 2
+
+/* Echo reference mixer */
+#define NBMIX_ECHO 2
+
+/* Voice record mixer */
+#define NBMIX_VXREC 4
+
+/* unsigned version of (-1) */
+#define CC_M1 0xFF
+#define CS_M1 0xFFFF
+#define CL_M1 0xFFFFFFFFL
+
+/*
+ Mixer ID Input port ID Comments
+ DL1_MIXER 0 MMDL path
+ 1 MMUL2 path
+ 2 VXDL path
+ 3 TONES path
+
+ SDT_MIXER 0 Uplink path
+ 1 Downlink path
+
+ ECHO_MIXER 0 DL1_MIXER path
+ 1 DL2_MIXER path
+
+ AUDUL_MIXER 0 TONES_DL path
+ 1 Uplink path
+ 2 MM_DL path
+
+ VXREC_MIXER 0 TONES_DL path
+ 1 VX_DL path
+ 2 MM_DL path
+ 3 VX_UL path
+*/
+#define MIX_VXUL_INPUT_MM_DL 0
+#define MIX_VXUL_INPUT_TONES 1
+#define MIX_VXUL_INPUT_VX_UL 2
+#define MIX_VXUL_INPUT_VX_DL 3
+
+#define MIX_DL1_INPUT_MM_DL 0
+#define MIX_DL1_INPUT_MM_UL2 1
+#define MIX_DL1_INPUT_VX_DL 2
+#define MIX_DL1_INPUT_TONES 3
+
+#define MIX_DL2_INPUT_MM_DL 0
+#define MIX_DL2_INPUT_MM_UL2 1
+#define MIX_DL2_INPUT_VX_DL 2
+#define MIX_DL2_INPUT_TONES 3
+
+#define MIX_SDT_INPUT_UP_MIXER 0
+#define MIX_SDT_INPUT_DL1_MIXER 1
+
+#define MIX_AUDUL_INPUT_MM_DL 0
+#define MIX_AUDUL_INPUT_TONES 1
+#define MIX_AUDUL_INPUT_UPLINK 2
+#define MIX_AUDUL_INPUT_VX_DL 3
+
+#define MIX_VXREC_INPUT_MM_DL 0
+#define MIX_VXREC_INPUT_TONES 1
+#define MIX_VXREC_INPUT_VX_UL 2
+#define MIX_VXREC_INPUT_VX_DL 3
+
+/* nb of samples to route */
+#define NBROUTE_UL 16
+
+/* 10 routing tables max */
+#define NBROUTE_CONFIG_MAX 10
+
+/* 5 pre-computed routing tables */
+#define NBROUTE_CONFIG 5
+
+/* AMIC on VX_UL */
+#define UPROUTE_CONFIG_AMIC 0
+
+/* DMIC first pair on VX_UL */
+#define UPROUTE_CONFIG_DMIC1 1
+
+/* DMIC second pair on VX_UL */
+#define UPROUTE_CONFIG_DMIC2 2
+
+/* DMIC last pair on VX_UL */
+#define UPROUTE_CONFIG_DMIC3 3
+
+/* BT_UL on VX_UL */
+#define UPROUTE_CONFIG_BT 4
+
+/* call-back indexes */
+#define MAXCALLBACK 100
+
+/* subroutines */
+#define MAXNBSUBROUTINE 100
+
+/* time controlled sequenced */
+#define MAXNBSEQUENCE 20
+
+/* maximum simultaneous active sequences */
+#define MAXACTIVESEQUENCE 20
+
+/* max number of steps in the sequences */
+#define MAXSEQUENCESTEPS 2
+
+/* max number of feature associated to a port */
+#define MAXFEATUREPORT 12
+#define SUB_0_PARAM 0
+
+/* number of parameters per sequence calls */
+#define SUB_1_PARAM 1
+#define SUB_2_PARAM 2
+#define SUB_3_PARAM 3
+#define SUB_4_PARAM 4
+
+/* active sequence mask = 0 means the line is free */
+#define FREE_LINE 0
+
+/* no ask for collision protection */
+#define NOMASK (1 << 0)
+
+/* do not allow a PDM OFF during the execution of this sequence */
+#define MASK_PDM_OFF (1 << 1)
+
+/* do not allow a PDM ON during the execution of this sequence */
+#define MASK_PDM_ON (1 << 2)
+
+/* explicit name of the feature */
+#define NBCHARFEATURENAME 16
+
+/* explicit name of the port */
+#define NBCHARPORTNAME 16
+
+/* sink / input port from Host point of view (or AESS for DMIC/McPDM/.. */
+#define SNK_P ABE_ATC_DIRECTION_IN
+
+/* source / ouptut port */
+#define SRC_P ABE_ATC_DIRECTION_OUT
+
+/* no ASRC applied */
+#define NODRIFT 0
+
+/* for abe_set_asrc_drift_control */
+#define FORCED_DRIFT_CONTROL 1
+
+/* for abe_set_asrc_drift_control */
+#define ADPATIVE_DRIFT_CONTROL 2
+
+#define DOPPMODE32_OPP100 (0x00000010 | (0x00000000<<16))
+#define DOPPMODE32_OPP50 (0x0000000C | (0x0000004<<16))
+#define DOPPMODE32_OPP25 (0x0000004 | (0x0000000C<<16))
/*
* ABE CONST AREA FOR PARAMETERS TRANSLATION
*/
#define min_mdb (-12000)
-#define max_mdb ( 3000)
+#define max_mdb ( 3000)
#define sizeof_db2lin_table (1+ ((max_mdb - min_mdb)/100))
+#define sizeof_alpha_iir_table 61
+#define sizeof_beta_iir_table 61
+
+#define GAIN_MAXIMUM 3000L
+#define GAIN_24dB 2400L
+#define GAIN_18dB 1800L
+#define GAIN_12dB 1200L
+#define GAIN_6dB 600L
+
+/* default gain = 1 */
+#define GAIN_0dB 0L
+#define GAIN_M6dB -600L
+#define GAIN_M12dB -1200L
+#define GAIN_M18dB -1800L
+#define GAIN_M24dB -2400L
+#define GAIN_M30dB -3000L
+#define GAIN_M40dB -4000L
+#define GAIN_M50dB -5000L
+
+/* muted gain = -120 decibels */
+#define MUTE_GAIN -12000L
+#define GAIN_MUTE MUTE_GAIN
+
+#define RAMP_MINLENGTH 3L
+
+/* ramp_t is in milli- seconds */
+#define RAMP_0MS 0L
+#define RAMP_1MS 1L
+#define RAMP_2MS 2L
+#define RAMP_5MS 5L
+#define RAMP_10MS 10L
+#define RAMP_20MS 20L
+#define RAMP_50MS 50L
+#define RAMP_100MS 100L
+#define RAMP_200MS 200L
+#define RAMP_500MS 500L
+#define RAMP_1000MS 1000L
+#define RAMP_MAXLENGTH 10000L
+
+/* for abe_translate_gain_format */
+#define LINABE_TO_DECIBELS 1
+#define DECIBELS_TO_LINABE 2
+
+/* for abe_translate_ramp_format */
+#define IIRABE_TO_MICROS 1
+#define MICROS_TO_IIABE 2
+
+/*
+ * ABE CONST AREA FOR PERIPHERAL TUNING
+ */
+
+/* port idled IDLE_P */
+#define OMAP_ABE_PORT_ACTIVITY_IDLE 1
-#define GAIN_MAXIMUM (abe_gain_t)3000L
-#define GAIN_24dB (abe_gain_t)2400L
-#define GAIN_18dB (abe_gain_t)1800L
-#define GAIN_12dB (abe_gain_t)1200L
-#define GAIN_6dB (abe_gain_t)600L
-#define GAIN_0dB (abe_gain_t) 0L /* default gain = 1 */
-#define GAIN_M6dB (abe_gain_t)-600L
-#define GAIN_M12dB (abe_gain_t)-1200L
-#define GAIN_M18dB (abe_gain_t)-1800L
-#define GAIN_M24dB (abe_gain_t)-2400L
-#define GAIN_M30dB (abe_gain_t)-3000L
-#define GAIN_M40dB (abe_gain_t)-4000L
-#define GAIN_M50dB (abe_gain_t)-5000L
-#define MUTE_GAIN (abe_gain_t)-12000L
-
-#define RAMP_0MS (abe_ramp_t)0L /* ramp_t is in milli- seconds */
-#define RAMP_1MS (abe_ramp_t)1L
-#define RAMP_2MS (abe_ramp_t)2L
-#define RAMP_5MS (abe_ramp_t)5L
-#define RAMP_10MS (abe_ramp_t)10L
-#define RAMP_20MS (abe_ramp_t)20L
-#define RAMP_50MS (abe_ramp_t)50L
-#define RAMP_100MS (abe_ramp_t)100L
-#define RAMP_200MS (abe_ramp_t) 200L
-#define RAMP_500MS (abe_ramp_t) 500L
-#define RAMP_1000MS (abe_ramp_t) 1000L
-#define RAMP_MAXLENGTH (abe_ramp_t) 10000L
-
-#define LINABE_TO_DECIBELS 1 /* for abe_translate_gain_format */
-#define DECIBELS_TO_LINABE 2
-#define IIRABE_TO_MICROS 1 /* for abe_translate_ramp_format */
-#define MICROS_TO_IIABE 2
-
-#define IDLE_P 1 /* port idled */
-#define RUN_P 2 /* port running */
-#define NOCALLBACK 0
-#define NOPARAMETER 0
- /* HAL 06: those numbers may be x4 */
-#define MCPDM_UL_ITER 4 /* number of ATC access upon AMIC DMArequests, all the FIFOs are enabled */
-#define MCPDM_DL_ITER 12 /* All the McPDM FIFOs are enabled simultaneously */
-#define DMIC_ITER 6 /* All the DMIC FIFOs are enabled simultaneously */
-
-#define DEFAULT_THR_READ 1 /* port / flow management */
-#define DEFAULT_THR_WRITE 1 /* port / flow management */
-
-#define DEFAULT_CONTROL_MCPDMDL 1 /* allows control on the PDM line */
-
-#define MAX_PINGPONG_BUFFERS 2 /* TBD later if needed */
+/* port activated RUN_P */
+#define OMAP_ABE_PORT_ACTIVITY_RUNNING 2
+
+#define NOCALLBACK 0
+#define NOPARAMETER 0
+
+/* number of ATC access upon AMIC DMArequests, all the FIFOs are enabled */
+#define MCPDM_UL_ITER 4
+
+/* All the McPDM FIFOs are enabled simultaneously */
+#define MCPDM_DL_ITER 12
+
+/* All the DMIC FIFOs are enabled simultaneously */
+#define DMIC_ITER 12
+
+/* port / flow management */
+#define DEFAULT_THR_READ 1
+
+/* port / flow management */
+#define DEFAULT_THR_WRITE 1
+
+/* allows control on the PDM line */
+#define DEFAULT_CONTROL_MCPDMDL 1
+
+/* TBD later if needed */
+#define MAX_PINGPONG_BUFFERS 2
/*
* Indexes to the subroutines
*/
-#define SUB_WRITE_MIXER 1
-#define SUB_WRITE_PORT_GAIN 2
+#define SUB_WRITE_MIXER 1
+#define SUB_WRITE_PORT_GAIN 2
/* OLD WAY */
-#define c_feat_init_eq 1
-#define c_feat_read_eq1 2
-#define c_write_eq1 3
-#define c_feat_read_eq2 4
-#define c_write_eq2 5
-#define c_feat_read_eq3 6
-#define c_write_eq3 7
+#define c_feat_init_eq 1
+#define c_feat_read_eq1 2
+#define c_write_eq1 3
+#define c_feat_read_eq2 4
+#define c_write_eq2 5
+#define c_feat_read_eq3 6
+#define c_write_eq3 7
/*
* MACROS
*/
-#define LOAD_ABEREG(reg,data) {abe_uint32 *ocp_addr = (abe_uint32 *)((reg)+ABE_ATC_BASE_ADDRESS_MPU); *ocp_addr= (data);}
-
-#define maximum(a,b) (((a)<(b))?(b):(a))
-#define minimum(a,b) (((a)>(b))?(b):(a))
-#define absolute(a) ( ((a)>0) ? (a):((-1)*(a)) )
-
-// Gives 1% errors
-//#define abe_power_of_two(x) (abe_float)(1 + x*(0.69315 + x*(0.24022 + x*(0.056614 + x*(0.00975 ))))) /* for x = [-1..+1] */
-//#define abe_log_of_two(i) (abe_float)(-2.4983 + i*(4.0321 + i*(-2.0843 + i*(0.63 + i*(-0.0793))))) /* for i = [+1..+2[ */
-// Gives 0.1% errors
-//#define abe_power_of_two(xx) (abe_float)(1 + xx*(0.69314718055995 + xx*(0.24022650695909 + xx*(0.05661419083812 + xx*(0.0096258236109 ))))) /* for x = [-1..+1] */
-//#define abe_log_of_two(i) (abe_float)(-3.02985297173966 + i*(6.07170945221999 + i*(-5.27332161514862 + i*(3.22638187067771 + i*(-1.23767101624897 + i*(0.26766043958616 + i*(-0.02490211314987))))))) /* for i = [+1..+2[ */
-
-#if 0
-#define abe_power_of_two(xx) (abe_float)(0.9999999924494 + xx*(0.69314847688495 + xx*(0.24022677604481 + xx*(0.05549256818679 + xx*(0.00961666477618 + xx*(0.0013584351075 + xx*(0.00015654359307))))))) /* for x = [-1..+1] */
-#define abe_log_of_two(xx) (abe_float)(-3.02985297175803 + xx*(6.07170945229365 + xx*(-5.27332161527062 + xx*(3.22638187078450 + xx*(-1.23767101630110 + xx*(0.26766043959961 + xx*(-0.02490211315130))))))) /* for x = [+1..+2] */
-#define abe_sine(xx) (abe_float)(-0.000000389441 + xx*(6.283360925789 + xx*(-0.011140658372 + xx*(-41.073653348384 + xx*(-3.121196875959 + xx*(100.619954580736 + xx*( -59.133359355846))))))) /* for x = [0 .. pi/2] */
-#define abe_sqrt(xx) (abe_float)(0.32298238417665 + xx*(0.93621865220393 + xx*(-0.36276443369703 + xx*(0.13008602653101+ xx*(-0.03017833169073 + xx*(0.00393731964847 + xx*-0.00021858629159 )))))) /* for x = [1 .. 4] */
-#endif
+#define maximum(a,b) (((a)<(b))?(b):(a))
+#define minimum(a,b) (((a)>(b))?(b):(a))
+#define absolute(a) (((a)>0)?(a):((-1)*(a)))
+
#endif /* _ABE_DEF_H_ */
diff --git a/sound/soc/omap/abe/abe_define.h b/sound/soc/omap/abe/abe_define.h
index 314f78f3a6f3..49ce1b581a62 100644
--- a/sound/soc/omap/abe/abe_define.h
+++ b/sound/soc/omap/abe/abe_define.h
@@ -1,51 +1,67 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
*/
-
#ifndef _ABE_DEFINE_H_
#define _ABE_DEFINE_H_
-#define ATC_DESCRIPTOR_NUMBER 64
-#define PROCESSING_SLOTS 25
-#define TASK_POOL_LENGTH 128
-#define MCU_IRQ 0x24
-#define MCU_IRQ_SHIFT2 0x90
-#define DMA_REQ_SHIFT2 0x210
-#define DSP_IRQ 0x4c
-#define IRQtag_APS 0x000a
-#define IRQtag_COUNT 0x000c
-#define IRQtag_PP 0x000d
-#define DMAreq_7 0x0080
-#define IRQ_FIFO_LENGTH 16
-#define SDT_EQ_ORDER 4
-#define DL_EQ_ORDER 12
-#define MIC_FILTER_ORDER 4
-#define GAINS_WITH_RAMP1 14
-#define GAINS_WITH_RAMP2 22
-#define GAINS_WITH_RAMP_TOTAL 36
-#define EANC_FIR_TAPS 21
-#define EANC_IIR_ORDER 8
-#define ASRC_MEMLENGTH 40
-#define ASRC_UL_VX_FIR_L 19
-#define ASRC_DL_VX_FIR_L 19
-#define ASRC_DL_MM_FIR_L 18
-#define ASRC_N_8k 2
-#define ASRC_N_16k 4
-#define ASRC_N_48k 12
-#define VIBRA_N 5
-#define VIBRA1_IIR_MEMSIZE 11
-#define SAMP_LOOP_96K 24
-#define SAMP_LOOP_48K 12
-#define SAMP_LOOP_16K 4
-#define SAMP_LOOP_8K 2
-#define INPUT_SCALE_SHIFTM2 5268
-#define OUTPUT_SCALE_SHIFTM2 5272
-
+#define ATC_DESCRIPTOR_NUMBER 64
+#define PROCESSING_SLOTS 25
+#define TASK_POOL_LENGTH 128
+#define MCU_IRQ 0x24
+#define MCU_IRQ_SHIFT2 0x90
+#define DMA_REQ_SHIFT2 0x210
+#define DSP_IRQ 0x4c
+#define IRQtag_APS 0x000a
+#define IRQtag_COUNT 0x000c
+#define IRQtag_PP 0x000d
+#define DMAreq_7 0x0080
+#define IRQ_FIFO_LENGTH 16
+#define SDT_EQ_ORDER 4
+#define DL_EQ_ORDER 12
+#define MIC_FILTER_ORDER 4
+#define GAINS_WITH_RAMP1 14
+#define GAINS_WITH_RAMP2 22
+#define GAINS_WITH_RAMP_TOTAL 36
+#define EANC_FIR_TAPS 21
+#define EANC_IIR_ORDER 8
+#define ASRC_MEMLENGTH 40
+#define ASRC_UL_VX_FIR_L 19
+#define ASRC_DL_VX_FIR_L 19
+#define ASRC_DL_MM_FIR_L 18
+#define ASRC_margin 2
+#define ASRC_N_8k 2
+#define ASRC_N_16k 4
+#define ASRC_N_48k 12
+#define VIBRA_N 5
+#define VIBRA1_IIR_MEMSIZE 11
+#define SAMP_LOOP_96K 24
+#define SAMP_LOOP_48K 12
+#define SAMP_LOOP_16K 4
+#define SAMP_LOOP_8K 2
+#define INPUT_SCALE_SHIFTM2 5264
+#define OUTPUT_SCALE_SHIFTM2 5268
+#define MUTE_SCALING 5272
+#define ABE_PMEM 1
+#define ABE_CMEM 2
+#define ABE_SMEM 3
+#define ABE_DMEM 4
+#define ABE_ATC 5
-#endif /* _ABE_DEFINE_H_ */
+#endif /* _ABE_DEFINE_H_ */
diff --git a/sound/soc/omap/abe/abe_dm_addr.h b/sound/soc/omap/abe/abe_dm_addr.h
index cd3ce9856558..93243de470f7 100644
--- a/sound/soc/omap/abe/abe_dm_addr.h
+++ b/sound/soc/omap/abe/abe_dm_addr.h
@@ -1,386 +1,413 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
*/
-
#ifndef _ABE_DM_ADDR_H_
#define _ABE_DM_ADDR_H_
-#define D_atcDescriptors_ADDR 0
-#define D_atcDescriptors_ADDR_END 511
-#define D_atcDescriptors_sizeof 512
+#define D_atcDescriptors_ADDR 0
+#define D_atcDescriptors_ADDR_END 511
+#define D_atcDescriptors_sizeof 512
+
+#define stack_ADDR 512
+#define stack_ADDR_END 623
+#define stack_sizeof 112
+
+#define D_version_ADDR 624
+#define D_version_ADDR_END 627
+#define D_version_sizeof 4
+
+#define D_BT_DL_FIFO_ADDR 1024
+#define D_BT_DL_FIFO_ADDR_END 1503
+#define D_BT_DL_FIFO_sizeof 480
+
+#define D_BT_UL_FIFO_ADDR 1536
+#define D_BT_UL_FIFO_ADDR_END 2015
+#define D_BT_UL_FIFO_sizeof 480
+
+#define D_MM_EXT_OUT_FIFO_ADDR 2048
+#define D_MM_EXT_OUT_FIFO_ADDR_END 2527
+#define D_MM_EXT_OUT_FIFO_sizeof 480
-#define stack_ADDR 512
-#define stack_ADDR_END 623
-#define stack_sizeof 112
+#define D_MM_EXT_IN_FIFO_ADDR 2560
+#define D_MM_EXT_IN_FIFO_ADDR_END 3039
+#define D_MM_EXT_IN_FIFO_sizeof 480
-#define D_version_ADDR 624
-#define D_version_ADDR_END 627
-#define D_version_sizeof 4
+#define D_MM_UL2_FIFO_ADDR 3072
+#define D_MM_UL2_FIFO_ADDR_END 3551
+#define D_MM_UL2_FIFO_sizeof 480
-#define D_BT_DL_FIFO_ADDR 1024
-#define D_BT_DL_FIFO_ADDR_END 1503
-#define D_BT_DL_FIFO_sizeof 480
+#define D_VX_UL_FIFO_ADDR 3584
+#define D_VX_UL_FIFO_ADDR_END 4063
+#define D_VX_UL_FIFO_sizeof 480
-#define D_BT_UL_FIFO_ADDR 1536
-#define D_BT_UL_FIFO_ADDR_END 2015
-#define D_BT_UL_FIFO_sizeof 480
+#define D_VX_DL_FIFO_ADDR 4096
+#define D_VX_DL_FIFO_ADDR_END 4575
+#define D_VX_DL_FIFO_sizeof 480
-#define D_MM_EXT_OUT_FIFO_ADDR 2048
-#define D_MM_EXT_OUT_FIFO_ADDR_END 2527
-#define D_MM_EXT_OUT_FIFO_sizeof 480
+#define D_DMIC_UL_FIFO_ADDR 4608
+#define D_DMIC_UL_FIFO_ADDR_END 5087
+#define D_DMIC_UL_FIFO_sizeof 480
-#define D_MM_EXT_IN_FIFO_ADDR 2560
-#define D_MM_EXT_IN_FIFO_ADDR_END 3039
-#define D_MM_EXT_IN_FIFO_sizeof 480
+#define D_MM_UL_FIFO_ADDR 5120
+#define D_MM_UL_FIFO_ADDR_END 5599
+#define D_MM_UL_FIFO_sizeof 480
-#define D_MM_UL2_FIFO_ADDR 3072
-#define D_MM_UL2_FIFO_ADDR_END 3551
-#define D_MM_UL2_FIFO_sizeof 480
+#define D_MM_DL_FIFO_ADDR 5632
+#define D_MM_DL_FIFO_ADDR_END 6111
+#define D_MM_DL_FIFO_sizeof 480
-#define D_VX_UL_FIFO_ADDR 3584
-#define D_VX_UL_FIFO_ADDR_END 4063
-#define D_VX_UL_FIFO_sizeof 480
+#define D_TONES_DL_FIFO_ADDR 6144
+#define D_TONES_DL_FIFO_ADDR_END 6623
+#define D_TONES_DL_FIFO_sizeof 480
-#define D_VX_DL_FIFO_ADDR 4096
-#define D_VX_DL_FIFO_ADDR_END 4575
-#define D_VX_DL_FIFO_sizeof 480
+#define D_VIB_DL_FIFO_ADDR 6656
+#define D_VIB_DL_FIFO_ADDR_END 7135
+#define D_VIB_DL_FIFO_sizeof 480
-#define D_DMIC_UL_FIFO_ADDR 4608
-#define D_DMIC_UL_FIFO_ADDR_END 5087
-#define D_DMIC_UL_FIFO_sizeof 480
+#define D_McPDM_DL_FIFO_ADDR 7168
+#define D_McPDM_DL_FIFO_ADDR_END 7647
+#define D_McPDM_DL_FIFO_sizeof 480
-#define D_MM_UL_FIFO_ADDR 5120
-#define D_MM_UL_FIFO_ADDR_END 5599
-#define D_MM_UL_FIFO_sizeof 480
+#define D_McPDM_UL_FIFO_ADDR 7680
+#define D_McPDM_UL_FIFO_ADDR_END 8159
+#define D_McPDM_UL_FIFO_sizeof 480
-#define D_MM_DL_FIFO_ADDR 5632
-#define D_MM_DL_FIFO_ADDR_END 6111
-#define D_MM_DL_FIFO_sizeof 480
+#define D_DEBUG_FIFO_ADDR 8160
+#define D_DEBUG_FIFO_ADDR_END 8255
+#define D_DEBUG_FIFO_sizeof 96
-#define D_TONES_DL_FIFO_ADDR 6144
-#define D_TONES_DL_FIFO_ADDR_END 6623
-#define D_TONES_DL_FIFO_sizeof 480
+#define D_DEBUG_FIFO_HAL_ADDR 8256
+#define D_DEBUG_FIFO_HAL_ADDR_END 8287
+#define D_DEBUG_FIFO_HAL_sizeof 32
-#define D_VIB_DL_FIFO_ADDR 6656
-#define D_VIB_DL_FIFO_ADDR_END 7135
-#define D_VIB_DL_FIFO_sizeof 480
+#define D_IOdescr_ADDR 8288
+#define D_IOdescr_ADDR_END 8927
+#define D_IOdescr_sizeof 640
-#define D_McPDM_DL_FIFO_ADDR 7168
-#define D_McPDM_DL_FIFO_ADDR_END 7647
-#define D_McPDM_DL_FIFO_sizeof 480
+#define d_zero_ADDR 8928
+#define d_zero_ADDR_END 8931
+#define d_zero_sizeof 4
-#define D_McPDM_UL_FIFO_ADDR 7680
-#define D_McPDM_UL_FIFO_ADDR_END 8159
-#define D_McPDM_UL_FIFO_sizeof 480
+#define dbg_trace1_ADDR 8932
+#define dbg_trace1_ADDR_END 8932
+#define dbg_trace1_sizeof 1
-#define D_DEBUG_FIFO_ADDR 8192
-#define D_DEBUG_FIFO_ADDR_END 8319
-#define D_DEBUG_FIFO_sizeof 128
+#define dbg_trace2_ADDR 8933
+#define dbg_trace2_ADDR_END 8933
+#define dbg_trace2_sizeof 1
-#define D_IOdescr_ADDR 8320
-#define D_IOdescr_ADDR_END 8879
-#define D_IOdescr_sizeof 560
+#define dbg_trace3_ADDR 8934
+#define dbg_trace3_ADDR_END 8934
+#define dbg_trace3_sizeof 1
-#define d_zero_ADDR 8880
-#define d_zero_ADDR_END 8880
-#define d_zero_sizeof 1
+#define D_multiFrame_ADDR 8936
+#define D_multiFrame_ADDR_END 9335
+#define D_multiFrame_sizeof 400
-#define dbg_trace1_ADDR 8881
-#define dbg_trace1_ADDR_END 8881
-#define dbg_trace1_sizeof 1
+#define D_tasksList_ADDR 9336
+#define D_tasksList_ADDR_END 11383
+#define D_tasksList_sizeof 2048
-#define dbg_trace2_ADDR 8882
-#define dbg_trace2_ADDR_END 8882
-#define dbg_trace2_sizeof 1
+#define D_idleTask_ADDR 11384
+#define D_idleTask_ADDR_END 11385
+#define D_idleTask_sizeof 2
-#define dbg_trace3_ADDR 8883
-#define dbg_trace3_ADDR_END 8883
-#define dbg_trace3_sizeof 1
+#define D_typeLengthCheck_ADDR 11386
+#define D_typeLengthCheck_ADDR_END 11387
+#define D_typeLengthCheck_sizeof 2
-#define D_multiFrame_ADDR 8884
-#define D_multiFrame_ADDR_END 9283
-#define D_multiFrame_sizeof 400
+#define D_maxTaskBytesInSlot_ADDR 11388
+#define D_maxTaskBytesInSlot_ADDR_END 11389
+#define D_maxTaskBytesInSlot_sizeof 2
-#define D_tasksList_ADDR 9284
-#define D_tasksList_ADDR_END 11331
-#define D_tasksList_sizeof 2048
+#define D_rewindTaskBytes_ADDR 11390
+#define D_rewindTaskBytes_ADDR_END 11391
+#define D_rewindTaskBytes_sizeof 2
-#define D_idleTask_ADDR 11332
-#define D_idleTask_ADDR_END 11333
-#define D_idleTask_sizeof 2
+#define D_pCurrentTask_ADDR 11392
+#define D_pCurrentTask_ADDR_END 11393
+#define D_pCurrentTask_sizeof 2
-#define D_typeLengthCheck_ADDR 11334
-#define D_typeLengthCheck_ADDR_END 11335
-#define D_typeLengthCheck_sizeof 2
+#define D_pFastLoopBack_ADDR 11394
+#define D_pFastLoopBack_ADDR_END 11395
+#define D_pFastLoopBack_sizeof 2
-#define D_maxTaskBytesInSlot_ADDR 11336
-#define D_maxTaskBytesInSlot_ADDR_END 11337
-#define D_maxTaskBytesInSlot_sizeof 2
+#define D_pNextFastLoopBack_ADDR 11396
+#define D_pNextFastLoopBack_ADDR_END 11399
+#define D_pNextFastLoopBack_sizeof 4
-#define D_rewindTaskBytes_ADDR 11338
-#define D_rewindTaskBytes_ADDR_END 11339
-#define D_rewindTaskBytes_sizeof 2
+#define D_ppCurrentTask_ADDR 11400
+#define D_ppCurrentTask_ADDR_END 11401
+#define D_ppCurrentTask_sizeof 2
-#define D_pCurrentTask_ADDR 11340
-#define D_pCurrentTask_ADDR_END 11341
-#define D_pCurrentTask_sizeof 2
+#define D_slotCounter_ADDR 11404
+#define D_slotCounter_ADDR_END 11405
+#define D_slotCounter_sizeof 2
-#define D_pFastLoopBack_ADDR 11342
-#define D_pFastLoopBack_ADDR_END 11343
-#define D_pFastLoopBack_sizeof 2
+#define D_loopCounter_ADDR 11408
+#define D_loopCounter_ADDR_END 11411
+#define D_loopCounter_sizeof 4
-#define D_pNextFastLoopBack_ADDR 11344
-#define D_pNextFastLoopBack_ADDR_END 11347
-#define D_pNextFastLoopBack_sizeof 4
+#define D_RewindFlag_ADDR 11412
+#define D_RewindFlag_ADDR_END 11413
+#define D_RewindFlag_sizeof 2
-#define D_ppCurrentTask_ADDR 11348
-#define D_ppCurrentTask_ADDR_END 11349
-#define D_ppCurrentTask_sizeof 2
+#define D_Slot23_ctrl_ADDR 11416
+#define D_Slot23_ctrl_ADDR_END 11419
+#define D_Slot23_ctrl_sizeof 4
-#define D_slotCounter_ADDR 11352
-#define D_slotCounter_ADDR_END 11353
-#define D_slotCounter_sizeof 2
+#define D_McuIrqFifo_ADDR 11420
+#define D_McuIrqFifo_ADDR_END 11483
+#define D_McuIrqFifo_sizeof 64
-#define D_loopCounter_ADDR 11356
-#define D_loopCounter_ADDR_END 11359
-#define D_loopCounter_sizeof 4
+#define D_PingPongDesc_ADDR 11484
+#define D_PingPongDesc_ADDR_END 11531
+#define D_PingPongDesc_sizeof 48
-#define D_RewindFlag_ADDR 11360
-#define D_RewindFlag_ADDR_END 11361
-#define D_RewindFlag_sizeof 2
+#define D_PP_MCU_IRQ_ADDR 11532
+#define D_PP_MCU_IRQ_ADDR_END 11533
+#define D_PP_MCU_IRQ_sizeof 2
-#define D_Slot23_ctrl_ADDR 11364
-#define D_Slot23_ctrl_ADDR_END 11367
-#define D_Slot23_ctrl_sizeof 4
+#define D_ctrlPortFifo_ADDR 11536
+#define D_ctrlPortFifo_ADDR_END 11551
+#define D_ctrlPortFifo_sizeof 16
-#define D_McuIrqFifo_ADDR 11368
-#define D_McuIrqFifo_ADDR_END 11431
-#define D_McuIrqFifo_sizeof 64
+#define D_Idle_State_ADDR 11552
+#define D_Idle_State_ADDR_END 11555
+#define D_Idle_State_sizeof 4
-#define D_PingPongDesc_ADDR 11432
-#define D_PingPongDesc_ADDR_END 11479
-#define D_PingPongDesc_sizeof 48
+#define D_Stop_Request_ADDR 11556
+#define D_Stop_Request_ADDR_END 11559
+#define D_Stop_Request_sizeof 4
-#define D_PP_MCU_IRQ_ADDR 11480
-#define D_PP_MCU_IRQ_ADDR_END 11481
-#define D_PP_MCU_IRQ_sizeof 2
+#define D_Ref0_ADDR 11560
+#define D_Ref0_ADDR_END 11561
+#define D_Ref0_sizeof 2
-#define D_ctrlPortFifo_ADDR 11488
-#define D_ctrlPortFifo_ADDR_END 11503
-#define D_ctrlPortFifo_sizeof 16
+#define D_DebugRegister_ADDR 11564
+#define D_DebugRegister_ADDR_END 11703
+#define D_DebugRegister_sizeof 140
-#define D_Idle_State_ADDR 11504
-#define D_Idle_State_ADDR_END 11507
-#define D_Idle_State_sizeof 4
+#define D_Gcount_ADDR 11704
+#define D_Gcount_ADDR_END 11705
+#define D_Gcount_sizeof 2
-#define D_Stop_Request_ADDR 11508
-#define D_Stop_Request_ADDR_END 11511
-#define D_Stop_Request_sizeof 4
+#define D_DCcounter_ADDR 11708
+#define D_DCcounter_ADDR_END 11711
+#define D_DCcounter_sizeof 4
-#define D_Ref0_ADDR 11512
-#define D_Ref0_ADDR_END 11513
-#define D_Ref0_sizeof 2
+#define D_DCsum_ADDR 11712
+#define D_DCsum_ADDR_END 11719
+#define D_DCsum_sizeof 8
-#define D_DebugRegister_ADDR 11516
-#define D_DebugRegister_ADDR_END 11655
-#define D_DebugRegister_sizeof 140
+#define D_fastCounter_ADDR 11720
+#define D_fastCounter_ADDR_END 11723
+#define D_fastCounter_sizeof 4
-#define D_Gcount_ADDR 11656
-#define D_Gcount_ADDR_END 11657
-#define D_Gcount_sizeof 2
+#define D_slowCounter_ADDR 11724
+#define D_slowCounter_ADDR_END 11727
+#define D_slowCounter_sizeof 4
-#define D_DCcounter_ADDR 11660
-#define D_DCcounter_ADDR_END 11663
-#define D_DCcounter_sizeof 4
+#define D_aUplinkRouting_ADDR 11728
+#define D_aUplinkRouting_ADDR_END 11759
+#define D_aUplinkRouting_sizeof 32
-#define D_DCsum_ADDR 11664
-#define D_DCsum_ADDR_END 11671
-#define D_DCsum_sizeof 8
+#define D_VirtAudioLoop_ADDR 11760
+#define D_VirtAudioLoop_ADDR_END 11763
+#define D_VirtAudioLoop_sizeof 4
-#define D_fastCounter_ADDR 11672
-#define D_fastCounter_ADDR_END 11675
-#define D_fastCounter_sizeof 4
+#define D_AsrcVars_DL_VX_ADDR 11764
+#define D_AsrcVars_DL_VX_ADDR_END 11795
+#define D_AsrcVars_DL_VX_sizeof 32
-#define D_slowCounter_ADDR 11676
-#define D_slowCounter_ADDR_END 11679
-#define D_slowCounter_sizeof 4
+#define D_AsrcVars_UL_VX_ADDR 11796
+#define D_AsrcVars_UL_VX_ADDR_END 11827
+#define D_AsrcVars_UL_VX_sizeof 32
-#define D_aUplinkRouting_ADDR 11680
-#define D_aUplinkRouting_ADDR_END 11711
-#define D_aUplinkRouting_sizeof 32
+#define D_CoefAddresses_VX_ADDR 11828
+#define D_CoefAddresses_VX_ADDR_END 11859
+#define D_CoefAddresses_VX_sizeof 32
-#define D_VirtAudioLoop_ADDR 11712
-#define D_VirtAudioLoop_ADDR_END 11715
-#define D_VirtAudioLoop_sizeof 4
+#define D_AsrcVars_DL_MM_ADDR 11860
+#define D_AsrcVars_DL_MM_ADDR_END 11891
+#define D_AsrcVars_DL_MM_sizeof 32
-#define D_AsrcVars_DL_VX_ADDR 11716
-#define D_AsrcVars_DL_VX_ADDR_END 11747
-#define D_AsrcVars_DL_VX_sizeof 32
+#define D_CoefAddresses_DL_MM_ADDR 11892
+#define D_CoefAddresses_DL_MM_ADDR_END 11923
+#define D_CoefAddresses_DL_MM_sizeof 32
-#define D_AsrcVars_UL_VX_ADDR 11748
-#define D_AsrcVars_UL_VX_ADDR_END 11779
-#define D_AsrcVars_UL_VX_sizeof 32
+#define D_APS_DL1_M_thresholds_ADDR 11924
+#define D_APS_DL1_M_thresholds_ADDR_END 11931
+#define D_APS_DL1_M_thresholds_sizeof 8
-#define D_CoefAddresses_VX_ADDR 11780
-#define D_CoefAddresses_VX_ADDR_END 11811
-#define D_CoefAddresses_VX_sizeof 32
+#define D_APS_DL1_M_IRQ_ADDR 11932
+#define D_APS_DL1_M_IRQ_ADDR_END 11933
+#define D_APS_DL1_M_IRQ_sizeof 2
-#define D_AsrcVars_DL_MM_ADDR 11812
-#define D_AsrcVars_DL_MM_ADDR_END 11843
-#define D_AsrcVars_DL_MM_sizeof 32
+#define D_APS_DL1_C_IRQ_ADDR 11934
+#define D_APS_DL1_C_IRQ_ADDR_END 11935
+#define D_APS_DL1_C_IRQ_sizeof 2
-#define D_CoefAddresses_DL_MM_ADDR 11844
-#define D_CoefAddresses_DL_MM_ADDR_END 11875
-#define D_CoefAddresses_DL_MM_sizeof 32
+#define D_TraceBufAdr_ADDR 11936
+#define D_TraceBufAdr_ADDR_END 11937
+#define D_TraceBufAdr_sizeof 2
-#define D_APS_DL1_M_thresholds_ADDR 11876
-#define D_APS_DL1_M_thresholds_ADDR_END 11883
-#define D_APS_DL1_M_thresholds_sizeof 8
+#define D_TraceBufOffset_ADDR 11938
+#define D_TraceBufOffset_ADDR_END 11939
+#define D_TraceBufOffset_sizeof 2
-#define D_APS_DL1_M_IRQ_ADDR 11884
-#define D_APS_DL1_M_IRQ_ADDR_END 11885
-#define D_APS_DL1_M_IRQ_sizeof 2
+#define D_TraceBufLength_ADDR 11940
+#define D_TraceBufLength_ADDR_END 11941
+#define D_TraceBufLength_sizeof 2
-#define D_APS_DL1_C_IRQ_ADDR 11886
-#define D_APS_DL1_C_IRQ_ADDR_END 11887
-#define D_APS_DL1_C_IRQ_sizeof 2
+#define D_AsrcVars_ECHO_REF_ADDR 11944
+#define D_AsrcVars_ECHO_REF_ADDR_END 11975
+#define D_AsrcVars_ECHO_REF_sizeof 32
-#define D_TraceBufAdr_ADDR 11888
-#define D_TraceBufAdr_ADDR_END 11889
-#define D_TraceBufAdr_sizeof 2
+#define D_Pempty_ADDR 11976
+#define D_Pempty_ADDR_END 11979
+#define D_Pempty_sizeof 4
-#define D_TraceBufOffset_ADDR 11890
-#define D_TraceBufOffset_ADDR_END 11891
-#define D_TraceBufOffset_sizeof 2
+#define D_APS_DL2_L_M_IRQ_ADDR 11980
+#define D_APS_DL2_L_M_IRQ_ADDR_END 11981
+#define D_APS_DL2_L_M_IRQ_sizeof 2
-#define D_TraceBufLength_ADDR 11892
-#define D_TraceBufLength_ADDR_END 11893
-#define D_TraceBufLength_sizeof 2
+#define D_APS_DL2_L_C_IRQ_ADDR 11982
+#define D_APS_DL2_L_C_IRQ_ADDR_END 11983
+#define D_APS_DL2_L_C_IRQ_sizeof 2
-#define D_AsrcVars_ECHO_REF_ADDR 11896
-#define D_AsrcVars_ECHO_REF_ADDR_END 11927
-#define D_AsrcVars_ECHO_REF_sizeof 32
+#define D_APS_DL2_R_M_IRQ_ADDR 11984
+#define D_APS_DL2_R_M_IRQ_ADDR_END 11985
+#define D_APS_DL2_R_M_IRQ_sizeof 2
-#define D_Pempty_ADDR 11928
-#define D_Pempty_ADDR_END 11931
-#define D_Pempty_sizeof 4
+#define D_APS_DL2_R_C_IRQ_ADDR 11986
+#define D_APS_DL2_R_C_IRQ_ADDR_END 11987
+#define D_APS_DL2_R_C_IRQ_sizeof 2
-#define D_APS_DL2_L_M_IRQ_ADDR 11932
-#define D_APS_DL2_L_M_IRQ_ADDR_END 11933
-#define D_APS_DL2_L_M_IRQ_sizeof 2
+#define D_APS_DL1_C_thresholds_ADDR 11988
+#define D_APS_DL1_C_thresholds_ADDR_END 11995
+#define D_APS_DL1_C_thresholds_sizeof 8
-#define D_APS_DL2_L_C_IRQ_ADDR 11934
-#define D_APS_DL2_L_C_IRQ_ADDR_END 11935
-#define D_APS_DL2_L_C_IRQ_sizeof 2
+#define D_APS_DL2_L_M_thresholds_ADDR 11996
+#define D_APS_DL2_L_M_thresholds_ADDR_END 12003
+#define D_APS_DL2_L_M_thresholds_sizeof 8
-#define D_APS_DL2_R_M_IRQ_ADDR 11936
-#define D_APS_DL2_R_M_IRQ_ADDR_END 11937
-#define D_APS_DL2_R_M_IRQ_sizeof 2
+#define D_APS_DL2_L_C_thresholds_ADDR 12004
+#define D_APS_DL2_L_C_thresholds_ADDR_END 12011
+#define D_APS_DL2_L_C_thresholds_sizeof 8
-#define D_APS_DL2_R_C_IRQ_ADDR 11938
-#define D_APS_DL2_R_C_IRQ_ADDR_END 11939
-#define D_APS_DL2_R_C_IRQ_sizeof 2
+#define D_APS_DL2_R_M_thresholds_ADDR 12012
+#define D_APS_DL2_R_M_thresholds_ADDR_END 12019
+#define D_APS_DL2_R_M_thresholds_sizeof 8
-#define D_APS_DL1_C_thresholds_ADDR 11940
-#define D_APS_DL1_C_thresholds_ADDR_END 11947
-#define D_APS_DL1_C_thresholds_sizeof 8
+#define D_APS_DL2_R_C_thresholds_ADDR 12020
+#define D_APS_DL2_R_C_thresholds_ADDR_END 12027
+#define D_APS_DL2_R_C_thresholds_sizeof 8
-#define D_APS_DL2_L_M_thresholds_ADDR 11948
-#define D_APS_DL2_L_M_thresholds_ADDR_END 11955
-#define D_APS_DL2_L_M_thresholds_sizeof 8
+#define D_ECHO_REF_48_16_WRAP_ADDR 12028
+#define D_ECHO_REF_48_16_WRAP_ADDR_END 12035
+#define D_ECHO_REF_48_16_WRAP_sizeof 8
-#define D_APS_DL2_L_C_thresholds_ADDR 11956
-#define D_APS_DL2_L_C_thresholds_ADDR_END 11963
-#define D_APS_DL2_L_C_thresholds_sizeof 8
+#define D_ECHO_REF_48_8_WRAP_ADDR 12036
+#define D_ECHO_REF_48_8_WRAP_ADDR_END 12043
+#define D_ECHO_REF_48_8_WRAP_sizeof 8
-#define D_APS_DL2_R_M_thresholds_ADDR 11964
-#define D_APS_DL2_R_M_thresholds_ADDR_END 11971
-#define D_APS_DL2_R_M_thresholds_sizeof 8
+#define D_BT_UL_16_48_WRAP_ADDR 12044
+#define D_BT_UL_16_48_WRAP_ADDR_END 12051
+#define D_BT_UL_16_48_WRAP_sizeof 8
-#define D_APS_DL2_R_C_thresholds_ADDR 11972
-#define D_APS_DL2_R_C_thresholds_ADDR_END 11979
-#define D_APS_DL2_R_C_thresholds_sizeof 8
+#define D_BT_UL_8_48_WRAP_ADDR 12052
+#define D_BT_UL_8_48_WRAP_ADDR_END 12059
+#define D_BT_UL_8_48_WRAP_sizeof 8
-#define D_ECHO_REF_48_16_WRAP_ADDR 11980
-#define D_ECHO_REF_48_16_WRAP_ADDR_END 11987
-#define D_ECHO_REF_48_16_WRAP_sizeof 8
+#define D_BT_DL_48_16_WRAP_ADDR 12060
+#define D_BT_DL_48_16_WRAP_ADDR_END 12067
+#define D_BT_DL_48_16_WRAP_sizeof 8
-#define D_ECHO_REF_48_8_WRAP_ADDR 11988
-#define D_ECHO_REF_48_8_WRAP_ADDR_END 11995
-#define D_ECHO_REF_48_8_WRAP_sizeof 8
+#define D_BT_DL_48_8_WRAP_ADDR 12068
+#define D_BT_DL_48_8_WRAP_ADDR_END 12075
+#define D_BT_DL_48_8_WRAP_sizeof 8
-#define D_BT_UL_16_48_WRAP_ADDR 11996
-#define D_BT_UL_16_48_WRAP_ADDR_END 12003
-#define D_BT_UL_16_48_WRAP_sizeof 8
+#define D_VX_DL_16_48_WRAP_ADDR 12076
+#define D_VX_DL_16_48_WRAP_ADDR_END 12083
+#define D_VX_DL_16_48_WRAP_sizeof 8
-#define D_BT_UL_8_48_WRAP_ADDR 12004
-#define D_BT_UL_8_48_WRAP_ADDR_END 12011
-#define D_BT_UL_8_48_WRAP_sizeof 8
+#define D_VX_DL_8_48_WRAP_ADDR 12084
+#define D_VX_DL_8_48_WRAP_ADDR_END 12091
+#define D_VX_DL_8_48_WRAP_sizeof 8
-#define D_BT_DL_48_16_WRAP_ADDR 12012
-#define D_BT_DL_48_16_WRAP_ADDR_END 12019
-#define D_BT_DL_48_16_WRAP_sizeof 8
+#define D_VX_UL_48_16_WRAP_ADDR 12092
+#define D_VX_UL_48_16_WRAP_ADDR_END 12099
+#define D_VX_UL_48_16_WRAP_sizeof 8
-#define D_BT_DL_48_8_WRAP_ADDR 12020
-#define D_BT_DL_48_8_WRAP_ADDR_END 12027
-#define D_BT_DL_48_8_WRAP_sizeof 8
+#define D_VX_UL_48_8_WRAP_ADDR 12100
+#define D_VX_UL_48_8_WRAP_ADDR_END 12107
+#define D_VX_UL_48_8_WRAP_sizeof 8
-#define D_VX_DL_16_48_WRAP_ADDR 12028
-#define D_VX_DL_16_48_WRAP_ADDR_END 12035
-#define D_VX_DL_16_48_WRAP_sizeof 8
+#define D_APS_DL1_IRQs_WRAP_ADDR 12108
+#define D_APS_DL1_IRQs_WRAP_ADDR_END 12115
+#define D_APS_DL1_IRQs_WRAP_sizeof 8
-#define D_VX_DL_8_48_WRAP_ADDR 12036
-#define D_VX_DL_8_48_WRAP_ADDR_END 12043
-#define D_VX_DL_8_48_WRAP_sizeof 8
+#define D_APS_DL2_L_IRQs_WRAP_ADDR 12116
+#define D_APS_DL2_L_IRQs_WRAP_ADDR_END 12123
+#define D_APS_DL2_L_IRQs_WRAP_sizeof 8
-#define D_VX_UL_48_16_WRAP_ADDR 12044
-#define D_VX_UL_48_16_WRAP_ADDR_END 12051
-#define D_VX_UL_48_16_WRAP_sizeof 8
+#define D_APS_DL2_R_IRQs_WRAP_ADDR 12124
+#define D_APS_DL2_R_IRQs_WRAP_ADDR_END 12131
+#define D_APS_DL2_R_IRQs_WRAP_sizeof 8
-#define D_VX_UL_48_8_WRAP_ADDR 12052
-#define D_VX_UL_48_8_WRAP_ADDR_END 12059
-#define D_VX_UL_48_8_WRAP_sizeof 8
+#define D_nextMultiFrame_ADDR 12132
+#define D_nextMultiFrame_ADDR_END 12139
+#define D_nextMultiFrame_sizeof 8
-#define D_APS_DL1_IRQs_WRAP_ADDR 12060
-#define D_APS_DL1_IRQs_WRAP_ADDR_END 12067
-#define D_APS_DL1_IRQs_WRAP_sizeof 8
+#define D_HW_TEST_ADDR 12140
+#define D_HW_TEST_ADDR_END 12147
+#define D_HW_TEST_sizeof 8
-#define D_APS_DL2_L_IRQs_WRAP_ADDR 12068
-#define D_APS_DL2_L_IRQs_WRAP_ADDR_END 12075
-#define D_APS_DL2_L_IRQs_WRAP_sizeof 8
+#define D_TraceBufAdr_HAL_ADDR 12148
+#define D_TraceBufAdr_HAL_ADDR_END 12151
+#define D_TraceBufAdr_HAL_sizeof 4
-#define D_APS_DL2_R_IRQs_WRAP_ADDR 12076
-#define D_APS_DL2_R_IRQs_WRAP_ADDR_END 12083
-#define D_APS_DL2_R_IRQs_WRAP_sizeof 8
+#define D_DEBUG_HAL_TASK_ADDR 12288
+#define D_DEBUG_HAL_TASK_ADDR_END 14335
+#define D_DEBUG_HAL_TASK_sizeof 2048
-#define D_nextMultiFrame_ADDR 12084
-#define D_nextMultiFrame_ADDR_END 12091
-#define D_nextMultiFrame_sizeof 8
+#define D_DEBUG_FW_TASK_ADDR 14336
+#define D_DEBUG_FW_TASK_ADDR_END 14591
+#define D_DEBUG_FW_TASK_sizeof 256
-#define D_HW_TEST_ADDR 12092
-#define D_HW_TEST_ADDR_END 12099
-#define D_HW_TEST_sizeof 8
+#define D_FwMemInit_ADDR 14592
+#define D_FwMemInit_ADDR_END 15383
+#define D_FwMemInit_sizeof 792
-#define D_DEBUG_HAL_TASK_ADDR 12288
-#define D_DEBUG_HAL_TASK_ADDR_END 14335
-#define D_DEBUG_HAL_TASK_sizeof 2048
+#define D_FwMemInitDescr_ADDR 15384
+#define D_FwMemInitDescr_ADDR_END 15399
+#define D_FwMemInitDescr_sizeof 16
-#define D_DEBUG_FW_TASK_ADDR 14336
-#define D_DEBUG_FW_TASK_ADDR_END 14591
-#define D_DEBUG_FW_TASK_sizeof 256
+#define D_PING_ADDR 16384
+#define D_PING_ADDR_END 40959
+#define D_PING_sizeof 24576
-#define D_PING_ADDR 16384
-#define D_PING_ADDR_END 40959
-#define D_PING_sizeof 24576
+#define D_PONG_ADDR 40960
+#define D_PONG_ADDR_END 65535
+#define D_PONG_sizeof 24576
-#define D_PONG_ADDR 40960
-#define D_PONG_ADDR_END 65535
-#define D_PONG_sizeof 24576
-#endif /* _ABE_DM_ADDR_H_ */
+#endif /* _ABEDM_ADDR_H_ */
diff --git a/sound/soc/omap/abe/abe_ext.c b/sound/soc/omap/abe/abe_ext.c
index c609f5684927..de63de534a68 100644
--- a/sound/soc/omap/abe/abe_ext.c
+++ b/sound/soc/omap/abe/abe_ext.c
@@ -1,176 +1,146 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
-#if 0
-/*
- * ABE_DEFAULT_IRQ_PINGPONG_PLAYER
- *
- *
- * Operations :
- * generates data for the cache-flush buffer MODE 16+16
+/**
+ * abe_default_irq_pingpong_player
*
- * Return value :
- * None.
+ * generates data for the cache-flush buffer MODE 16+16
*/
-void abe_default_irq_pingpong_player(void)
+void abe_default_irq_pingpong_player (void)
{
- /* ping-pong access to MM_DL at 48kHz Mono with 20ms packet sizes */
- #define N_SAMPLES_MAX ((int)(1024))
-
- static abe_int32 idx;
- abe_uint32 i, dst, n_samples, n_bytes;
- abe_int32 temp [N_SAMPLES_MAX], audio_sample;
-#define DATA_SIZE 20
- const abe_int32 audio_pattern [DATA_SIZE] =
- {
- 0, 5063, 9630, 13254, 15581, 16383, 15581, 13254, 9630,
- 5063, 0, -5063, -9630, -13254, -15581, -16383, -15581,
+#define N_SAMPLES_MAX ((int)(1024)) /* ping-pong access to MM_DL at 48kHz Mono with 20ms packet sizes */
+
+ static s32 idx;
+ u32 i, dst, n_samples, n_bytes;
+ s32 temp [N_SAMPLES_MAX], audio_sample;
+#define DATA_SIZE 20 /* t = [0:N-1]/N; x = round(16383*sin(2*pi*t)) */
+ const s32 audio_pattern [DATA_SIZE] = {
+ 0, 5063, 9630, 13254, 15581, 16383, 15581, 13254, 9630,
+5063, 0, -5063, -9630, -13254, -15581, -16383, -15581,
-13254, -9630, -5063
};
+#if 0
+#define DATA_SIZE 8
+ const s32 audio_pattern [DATA_SIZE] = {0, 11585, 16384, 11585, 0, -11586, -16384, -11586 };
+
+#define DATA_SIZE 12
+ const s32 audio_pattern [DATA_SIZE] = {0, 8191, 14188, 16383, 14188, 8191, 0, -8192, -14188, -16383, -14188, -8192};
+
+const s32 audio_pattern [8] = {16383,16383,16383,16383,-16384,-16384,-16384,-16384};
+#endif
/* read the address of the Pong buffer */
- abe_read_next_ping_pong_buffer(MM_DL_PORT, &dst, &n_bytes);
+ abe_read_next_ping_pong_buffer (MM_DL_PORT, &dst, &n_bytes);
+
+
+ n_samples = n_bytes / 4; /* each stereo sample weights 4 bytes (format 16|16) */
- n_samples = n_bytes / 4;
/* generate a test pattern */
for (i = 0; i < n_samples; i++) {
audio_sample = audio_pattern [idx];
idx = (idx >= (DATA_SIZE-1))? 0: (idx+1);
- temp[i] = ((audio_sample << 16) + audio_sample);
+ temp [i] = ((audio_sample << 16) + audio_sample); /* format 16|16 */
}
/* copy the pattern (flush it) to DMEM pointer update
* not necessary here because the buffer size do not
* change from one ping to the other pong
*/
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, dst, (abe_uint32 *)&(temp[0]), n_samples * 4);
- abe_set_ping_pong_buffer(MM_DL_PORT, n_bytes);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, dst, (u32 *)&(temp[0]), n_bytes);
+ abe_set_ping_pong_buffer (MM_DL_PORT, n_bytes);
}
-/*
- * ABE_DEFAULT_IRQ_PINGPONG_PLAYER_32BITS
+/**
+ * abe_default_irq_pingpong_player_32bits
*
- * Operations:
* generates data for the cache-flush buffer MODE 32 BITS
* Return value:
* None.
*/
-void abe_default_irq_pingpong_player_32bits(void)
+void abe_default_irq_pingpong_player_32bits (void)
{
-/* ping-pong access to MM_DL at 48kHz Mono with 20ms packet sizes */
-#define N_SAMPLES_MAX ((int)(1024))
- static abe_int32 idx;
- abe_uint32 i, dst, n_samples, n_bytes;
- abe_int32 temp[N_SAMPLES_MAX], audio_sample;
+ /* ping-pong access to MM_DL at 48kHz Mono with 20ms packet sizes */
+ static s32 idx;
+ u32 i, dst, n_samples, n_bytes;
+ s32 temp [N_SAMPLES_MAX], audio_sample;
#define DATA_SIZE 20 /* t = [0:N-1]/N; x = round(16383*sin(2*pi*t)) */
- const abe_int32 audio_pattern [DATA_SIZE] =
- {
+ const s32 audio_pattern [DATA_SIZE] = {
0, 5063, 9630, 13254, 15581, 16383, 15581, 13254,
9630, 5063, 0, -5063, -9630, -13254, -15581, -16383,
-15581, -13254, -9630, -5063
};
/* read the address of the Pong buffer */
- abe_read_next_ping_pong_buffer(MM_DL_PORT, &dst, &n_bytes);
+ abe_read_next_ping_pong_buffer (MM_DL_PORT, &dst, &n_bytes);
n_samples = n_bytes / 8; /* each stereo sample weights 8 bytes (format 32|32) */
/* generate a test pattern */
for (i = 0; i < n_samples; i++) {
/* circular addressing */
- audio_sample = audio_pattern[idx];
+ audio_sample = audio_pattern [idx];
idx = (idx >= (DATA_SIZE-1))? 0: (idx+1);
- temp[i*2 +0] = (audio_sample << 16);
- temp[i*2 +1] = (audio_sample << 16);
+ temp [i*2 +0] = (audio_sample << 16);
+ temp [i*2 +1] = (audio_sample << 16);
}
/* copy the pattern (flush it) to DMEM pointer update
* not necessary here because the buffer size do not
* change from one ping to the other pong
*/
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, dst,
- (abe_uint32 *)&(temp[0]), n_samples * 4 *2);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, dst, (u32 *)&(temp[0]), n_bytes);
- abe_set_ping_pong_buffer(MM_DL_PORT, n_bytes);
+ abe_set_ping_pong_buffer (MM_DL_PORT, n_bytes);
}
-#endif
-/*
- * ABE_DEFAULT_IRQ_APS_ADAPTATION
+
+/**
+ * abe_default_irq_aps_adaptation
*
- * Operations :
* updates the APS filter and gain
- *
- * Return value :
- * None.
*/
-void abe_default_irq_aps_adaptation(void)
+void abe_default_irq_aps_adaptation (void)
{
}
-/*
- * ABE_READ_SYS_CLOCK
- *
- * Parameter :
- * pointer to the system clock
- *
- * Operations :
- * returns the current time indication for the LOG
+/**
+ * abe_read_sys_clock
+ * @time: pointer to the system clock
*
- * Return value :
- * None.
+ * returns the current time indication for the LOG
*/
-void abe_read_sys_clock(abe_micros_t *time)
+void abe_read_sys_clock (u32 *time)
{
- static abe_micros_t clock;
+ static u32 clock;
*time = clock;
clock ++;
}
-/*
- * ABE_APS_TUNING
- *
- * Parameter :
- *
- *
- * Operations :
- *
+/**
+ * abe_aps_tuning
*
- * Return value :
+ * Tune APS parameters
*
*/
-void abe_aps_tuning(void)
-{
-}
-
-/**
-* @fn abe_lock_executione()
-*
-* Operations : set a spin-lock and wait in case of collision
-*
-*
-* @see ABE_API.h
-*/
-void abe_lock_execution(void)
-{
-}
-
-/**
-* @fn abe_unlock_executione()
-*
-* Operations : reset a spin-lock (end of subroutine)
-*
-*
-* @see ABE_API.h
-*/
-void abe_unlock_execution(void)
+void abe_aps_tuning (void)
{
}
diff --git a/sound/soc/omap/abe/abe_ext.h b/sound/soc/omap/abe/abe_ext.h
index d83b4331a904..caab2c697cea 100644
--- a/sound/soc/omap/abe/abe_ext.h
+++ b/sound/soc/omap/abe/abe_ext.h
@@ -1,18 +1,48 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#ifndef _ABE_EXT_H_
#define _ABE_EXT_H_
-#include <linux/io.h>
-#define PC_SIMULATION 0 /* Tuning is done on PC ? */
+/* Tuning is done on PC ? */
+#define PC_SIMULATION 0
+
+#if PC_SIMULATION
+extern void target_server_read_pmem (u32 address, u32 *data, u32 nb_words_32bits);
+extern void target_server_write_pmem (u32 address, u32 *data, u32 nb_words_32bits);
+extern void target_server_read_cmem (u32 address, u32 *data, u32 nb_words_32bits);
+extern void target_server_write_cmem (u32 address, u32 *data, u32 nb_words_32bits);
+extern void target_server_read_atc (u32 address, u32 *data, u32 nb_words_32bits);
+extern void target_server_write_atc (u32 address, u32 *data, u32 nb_words_32bits);
+extern void target_server_read_smem (u32 address_48bits, u32 *data, u32 nb_words_48bits);
+extern void target_server_write_smem (u32 address_48bits, u32 *data, u32 nb_words_48bits);
+extern void target_server_read_dmem (u32 address_byte, u32 *data, u32 nb_byte);
+extern void target_server_write_dmem (u32 address_byte, u32 *data, u32 nb_byte);
+
+extern void target_server_activate_mcpdm_ul (void);
+extern void target_server_activate_mcpdm_dl (void);
+extern void target_server_activate_dmic (void);
+extern void target_server_set_voice_sampling (int dVirtAudioVoiceMode, int dVirtAudioVoiceSampleFrequency);
+extern void target_server_set_dVirtAudioMultimediaMode (int dVirtAudioMultimediaMode);
+#endif
/*
* OS DEPENDENT MMU CONFIGURATION
@@ -21,150 +51,255 @@
#define _lock_enter
#define _lock_exit
-#define ABE_ATC_BASE_ADDRESS_L3 0x490F1000L /* base address used for L3/DMA access */
-#define ABE_ATC_BASE_ADDRESS_L4 0x401F1000L /* base address used for L4/MCU access */
-#define ABE_DMEM_BASE_ADDRESS_L3 0x49080000L /* 64kB as seen from DMA access */
-#define ABE_DMEM_BASE_ADDRESS_L4 0x40180000L /* 64kB as seen from MCU access */
-
-
-#if 0
-#define ABE_PMEM_BASE_ADDRESS_MPU 0x401E0000L /* 8kB as seen from MPU access */
-#define ABE_CMEM_BASE_ADDRESS_MPU 0x401A0000L /* 8kB +++++++++++++++++++++++ */
-#define ABE_SMEM_BASE_ADDRESS_MPU 0x401C0000L /* 24kB */
-#define ABE_DMEM_BASE_ADDRESS_MPU 0x40180000L /* 64kB */
-#define ABE_ATC_BASE_ADDRESS_MPU 0x401F1000L
-#else
-#define ABE_PMEM_BASE_ADDRESS_MPU 0x490E0000L /* 8kB as seen from MPU access */
-#define ABE_CMEM_BASE_ADDRESS_MPU 0x490A0000L /* 8kB +++++++++++++++++++++++ */
-#define ABE_SMEM_BASE_ADDRESS_MPU 0x490C0000L /* 24kB */
-#define ABE_DMEM_BASE_ADDRESS_MPU 0x49080000L /* 64kB */
-#define ABE_ATC_BASE_ADDRESS_MPU 0x490F1000L
-#endif
+/* base address used for L3/DMA access */
+#define ABE_ATC_BASE_ADDRESS_L3 0x490F1000L
+
+/* base address used for L4/MCU access */
+#define ABE_ATC_BASE_ADDRESS_L4 0x401F1000L
+
+/* 64kB as seen from DMA access */
+#define ABE_DMEM_BASE_ADDRESS_L3 0x49080000L
+
+/* 64kB as seen from MCU access */
+#define ABE_DMEM_BASE_ADDRESS_L4 0x40180000L
+
+/* 8kB as seen from MPU access */
+#define ABE_PMEM_BASE_ADDRESS_MPU 0x490E0000L
+
+/* 8kB */
+#define ABE_CMEM_BASE_ADDRESS_MPU 0x490A0000L
+
+/* 24kB */
+#define ABE_SMEM_BASE_ADDRESS_MPU 0x490C0000L
+
+/* 64kB */
+#define ABE_DMEM_BASE_ADDRESS_MPU 0x49080000L
+#define ABE_ATC_BASE_ADDRESS_MPU 0x490F1000L
/*
* HARDWARE AND PERIPHERAL DEFINITIONS
*/
-#define ABE_PMEM_SIZE 8192 /* PMEM SIZE in bytes (1024 words of 64 bits: : #32bits words x 4)*/
-#define ABE_CMEM_SIZE 8192 /* CMEM SIZE in bytes (2048 coeff : #32bits words x 4)*/
-#define ABE_SMEM_SIZE 24576 /* SMEM SIZE in bytes (3072 stereo samples : #32bits words x 4)*/
-#define ABE_DMEM_SIZE 65536L /* DMEM SIZE in bytes */
-#define ABE_ATC_DESC_SIZE 512 /* ATC REGISTERS SIZE in bytes */
+/* PMEM SIZE in bytes (1024 words of 64 bits: : #32bits words x 4)*/
+#define ABE_PMEM_SIZE 8192
+
+/* CMEM SIZE in bytes (2048 coeff : #32bits words x 4)*/
+#define ABE_CMEM_SIZE 8192
+
+/* SMEM SIZE in bytes (3072 stereo samples : #32bits words x 4)*/
+#define ABE_SMEM_SIZE 24576
+/* DMEM SIZE in bytes */
+#define ABE_DMEM_SIZE 65536L
-#define ABE_MCU_IRQSTATUS_RAW 0x24 /* holds the MCU Irq signal */
-#define ABE_MCU_IRQSTATUS 0x28 /* status : clear the IRQ */
-#define ABE_DSP_IRQSTATUS_RAW 0x4C /* holds the DSP Irq signal */
-#define ABE_DMASTATUS_RAW 0x84 /* holds the DMA req lines to the sDMA */
+/* ATC REGISTERS SIZE in bytes */
+#define ABE_ATC_DESC_SIZE 512
+/* holds the MCU Irq signal */
+#define ABE_MCU_IRQSTATUS_RAW 0x24
-#define EVENT_GENERATOR_COUNTER 0x68
-#define EVENT_GENERATOR_COUNTER_DEFAULT 2048 /* PLL output/desired sampling rate = (32768 * 6000)/96000 */
-#define EVENT_GENERATOR_COUNTER_44100 2229 /* PLL output/desired sampling rate = (32768 * 6000)/88200 */
+/* status : clear the IRQ */
+#define ABE_MCU_IRQSTATUS 0x28
-#define EVENT_GENERATOR_START 0x6C /* start / stop the EVENT generator */
-#define EVENT_GENERATOR_ON 1
-#define EVENT_GENERATOR_OFF 0
+/* holds the DSP Irq signal */
+#define ABE_DSP_IRQSTATUS_RAW 0x4C
-#define EVENT_SOURCE_SELECTION 0x70 /* selection of the EVENT generator source */
-#define EVENT_SOURCE_DMA 0
-#define EVENT_SOURCE_COUNTER 1
+/* holds the DMA req lines to the sDMA */
+#define ABE_DMASTATUS_RAW 0x84
-#define AUDIO_ENGINE_SCHEDULER 0x74 /* selection of the ABE DMA req line from ATC */
-#define ABE_ATC_DMIC_DMA_REQ 1
-#define ABE_ATC_MCPDMDL_DMA_REQ 2
-#define ABE_ATC_MCPDMUL_DMA_REQ 3
-#define ABE_ATC_DIRECTION_IN 0 /* Direction=0 means input from ABE point of view */
-#define ABE_ATC_DIRECTION_OUT 1 /* Direction=1 means output from ABE point of view */
+
+#define EVENT_GENERATOR_COUNTER 0x68
+
+/* PLL output/desired sampling rate = (32768 * 6000)/96000 */
+#define EVENT_GENERATOR_COUNTER_DEFAULT 2048
+
+/* PLL output/desired sampling rate = (32768 * 6000)/88200 */
+#define EVENT_GENERATOR_COUNTER_44100 2228
+
+/* start / stop the EVENT generator */
+#define EVENT_GENERATOR_START 0x6C
+#define EVENT_GENERATOR_ON 1
+#define EVENT_GENERATOR_OFF 0
+
+/* selection of the EVENT generator source */
+#define EVENT_SOURCE_SELECTION 0x70
+#define EVENT_SOURCE_DMA 0
+#define EVENT_SOURCE_COUNTER 1
+
+/* selection of the ABE DMA req line from ATC */
+#define AUDIO_ENGINE_SCHEDULER 0x74
+#define ABE_ATC_DMIC_DMA_REQ 1
+#define ABE_ATC_MCPDMDL_DMA_REQ 2
+#define ABE_ATC_MCPDMUL_DMA_REQ 3
+
+/* Direction=0 means input from ABE point of view */
+#define ABE_ATC_DIRECTION_IN 0
+
+/* Direction=1 means output from ABE point of view */
+#define ABE_ATC_DIRECTION_OUT 1
/*
- * * DMA requests
- * */
-#define External_DMA_0 0 /*Internal connection doesn't connect at ABE boundary */
-#define DMIC_DMA_REQ 1 /*Transmit request digital microphone */
-#define McPDM_DMA_DL 2 /*Multichannel PDM downlink */
-#define McPDM_DMA_UP 3 /*Multichannel PDM uplink */
-#define MCBSP1_DMA_TX 4 /*MCBSP module 1 - transmit request */
-#define MCBSP1_DMA_RX 5 /*MCBSP module 1 - receive request */
-#define MCBSP2_DMA_TX 6 /*MCBSP module 2 - transmit request */
-#define MCBSP2_DMA_RX 7 /*MCBSP module 2 - receive request */
-#define MCBSP3_DMA_TX 8 /*MCBSP module 3 - transmit request */
-#define MCBSP3_DMA_RX 9 /*MCBSP module 3 - receive request */
-#define SLIMBUS1_DMA_TX0 10 /*SLIMBUS module 1 - transmit request channel 0 */
-#define SLIMBUS1_DMA_TX1 11 /*SLIMBUS module 1 - transmit request channel 1 */
-#define SLIMBUS1_DMA_TX2 12 /*SLIMBUS module 1 - transmit request channel 2 */
-#define SLIMBUS1_DMA_TX3 13 /*SLIMBUS module 1 - transmit request channel 3 */
-#define SLIMBUS1_DMA_TX4 14 /*SLIMBUS module 1 - transmit request channel 4 */
-#define SLIMBUS1_DMA_TX5 15 /*SLIMBUS module 1 - transmit request channel 5 */
-#define SLIMBUS1_DMA_TX6 16 /*SLIMBUS module 1 - transmit request channel 6 */
-#define SLIMBUS1_DMA_TX7 17 /*SLIMBUS module 1 - transmit request channel 7 */
-#define SLIMBUS1_DMA_RX0 18 /*SLIMBUS module 1 - receive request channel 0 */
-#define SLIMBUS1_DMA_RX1 19 /*SLIMBUS module 1 - receive request channel 1 */
-#define SLIMBUS1_DMA_RX2 20 /*SLIMBUS module 1 - receive request channel 2 */
-#define SLIMBUS1_DMA_RX3 21 /*SLIMBUS module 1 - receive request channel 3 */
-#define SLIMBUS1_DMA_RX4 22 /*SLIMBUS module 1 - receive request channel 4 */
-#define SLIMBUS1_DMA_RX5 23 /*SLIMBUS module 1 - receive request channel 5 */
-#define SLIMBUS1_DMA_RX6 24 /*SLIMBUS module 1 - receive request channel 6 */
-#define SLIMBUS1_DMA_RX7 25 /*SLIMBUS module 1 - receive request channel 7 */
-#define McASP1_AXEVT 26 /*McASP - Data transmit DMA request line */
-#define McASP1_AREVT 29 /*McASP - Data receive DMA request line */
-#define _DUMMY_FIFO_ 30 /*DUMMY FIFO @@@ */
-#define CBPr_DMA_RTX0 32 /*DMA of the Circular buffer peripheral 0 */
-#define CBPr_DMA_RTX1 33 /*DMA of the Circular buffer peripheral 1 */
-#define CBPr_DMA_RTX2 34 /*DMA of the Circular buffer peripheral 2 */
-#define CBPr_DMA_RTX3 35 /*DMA of the Circular buffer peripheral 3 */
-#define CBPr_DMA_RTX4 36 /*DMA of the Circular buffer peripheral 4 */
-#define CBPr_DMA_RTX5 37 /*DMA of the Circular buffer peripheral 5 */
-#define CBPr_DMA_RTX6 38 /*DMA of the Circular buffer peripheral 6 */
-#define CBPr_DMA_RTX7 39 /*DMA of the Circular buffer peripheral 7 */
+ * DMA requests
+ */
+/*Internal connection doesn't connect at ABE boundary */
+#define External_DMA_0 0
+
+/*Transmit request digital microphone */
+#define DMIC_DMA_REQ 1
+
+/*Multichannel PDM downlink */
+#define McPDM_DMA_DL 2
+
+/*Multichannel PDM uplink */
+#define McPDM_DMA_UP 3
+
+/*MCBSP module 1 - transmit request */
+#define MCBSP1_DMA_TX 4
+
+/*MCBSP module 1 - receive request */
+#define MCBSP1_DMA_RX 5
+
+/*MCBSP module 2 - transmit request */
+#define MCBSP2_DMA_TX 6
+
+/*MCBSP module 2 - receive request */
+#define MCBSP2_DMA_RX 7
+
+/*MCBSP module 3 - transmit request */
+#define MCBSP3_DMA_TX 8
+
+/*MCBSP module 3 - receive request */
+#define MCBSP3_DMA_RX 9
+
+/*SLIMBUS module 1 - transmit request channel 0 */
+#define SLIMBUS1_DMA_TX0 10
+
+/*SLIMBUS module 1 - transmit request channel 1 */
+#define SLIMBUS1_DMA_TX1 11
+
+/*SLIMBUS module 1 - transmit request channel 2 */
+#define SLIMBUS1_DMA_TX2 12
+
+/*SLIMBUS module 1 - transmit request channel 3 */
+#define SLIMBUS1_DMA_TX3 13
+
+/*SLIMBUS module 1 - transmit request channel 4 */
+#define SLIMBUS1_DMA_TX4 14
+
+/*SLIMBUS module 1 - transmit request channel 5 */
+#define SLIMBUS1_DMA_TX5 15
+
+/*SLIMBUS module 1 - transmit request channel 6 */
+#define SLIMBUS1_DMA_TX6 16
+
+/*SLIMBUS module 1 - transmit request channel 7 */
+#define SLIMBUS1_DMA_TX7 17
+
+/*SLIMBUS module 1 - receive request channel 0 */
+#define SLIMBUS1_DMA_RX0 18
+
+/*SLIMBUS module 1 - receive request channel 1 */
+#define SLIMBUS1_DMA_RX1 19
+
+/*SLIMBUS module 1 - receive request channel 2 */
+#define SLIMBUS1_DMA_RX2 20
+
+/*SLIMBUS module 1 - receive request channel 3 */
+#define SLIMBUS1_DMA_RX3 21
+
+/*SLIMBUS module 1 - receive request channel 4 */
+#define SLIMBUS1_DMA_RX4 22
+
+/*SLIMBUS module 1 - receive request channel 5 */
+#define SLIMBUS1_DMA_RX5 23
+
+/*SLIMBUS module 1 - receive request channel 6 */
+#define SLIMBUS1_DMA_RX6 24
+
+/*SLIMBUS module 1 - receive request channel 7 */
+#define SLIMBUS1_DMA_RX7 25
+
+/*McASP - Data transmit DMA request line */
+#define McASP1_AXEVT 26
+
+/*McASP - Data receive DMA request line */
+#define McASP1_AREVT 29
+
+/*DUMMY FIFO @@@ */
+#define _DUMMY_FIFO_ 30
+
+/*DMA of the Circular buffer peripheral 0 */
+#define CBPr_DMA_RTX0 32
+
+/*DMA of the Circular buffer peripheral 1 */
+#define CBPr_DMA_RTX1 33
+
+/*DMA of the Circular buffer peripheral 2 */
+#define CBPr_DMA_RTX2 34
+
+/*DMA of the Circular buffer peripheral 3 */
+#define CBPr_DMA_RTX3 35
+
+/*DMA of the Circular buffer peripheral 4 */
+#define CBPr_DMA_RTX4 36
+
+/*DMA of the Circular buffer peripheral 5 */
+#define CBPr_DMA_RTX5 37
+
+/*DMA of the Circular buffer peripheral 6 */
+#define CBPr_DMA_RTX6 38
+
+/*DMA of the Circular buffer peripheral 7 */
+#define CBPr_DMA_RTX7 39
/*
- * * ATC DESCRIPTORS - DESTINATIONS
- * */
+ * ATC DESCRIPTORS - DESTINATIONS
+ */
#define DEST_DMEM_access 0x00
-#define DEST_MCBSP1_TX 0x01
-#define DEST_MCBSP2_TX 0x02
-#define DEST_MCBSP3_TX 0x03
-#define DEST_SLIMBUS1_TX0 0x04
-#define DEST_SLIMBUS1_TX1 0x05
-#define DEST_SLIMBUS1_TX2 0x06
-#define DEST_SLIMBUS1_TX3 0x07
-#define DEST_SLIMBUS1_TX4 0x08
-#define DEST_SLIMBUS1_TX5 0x09
-#define DEST_SLIMBUS1_TX6 0x0A
-#define DEST_SLIMBUS1_TX7 0x0B
-#define DEST_MCPDM_DL 0x0C
-#define DEST_MCASP_TX0 0x0D
-#define DEST_MCASP_TX1 0x0E
-#define DEST_MCASP_TX2 0x0F
-#define DEST_MCASP_TX3 0x10
-#define DEST_EXTPORT0 0x11
-#define DEST_EXTPORT1 0x12
-#define DEST_EXTPORT2 0x13
-#define DEST_EXTPORT3 0x14
-#define DEST_MCPDM_ON 0x15
-#define DEST_CBP_CBPr 0x3F
+#define DEST_MCBSP1_ TX 0x01
+#define DEST_MCBSP2_ TX 0x02
+#define DEST_MCBSP3_TX 0x03
+#define DEST_SLIMBUS1_TX0 0x04
+#define DEST_SLIMBUS1_TX1 0x05
+#define DEST_SLIMBUS1_TX2 0x06
+#define DEST_SLIMBUS1_TX3 0x07
+#define DEST_SLIMBUS1_TX4 0x08
+#define DEST_SLIMBUS1_TX5 0x09
+#define DEST_SLIMBUS1_TX6 0x0A
+#define DEST_SLIMBUS1_TX7 0x0B
+#define DEST_MCPDM_DL 0x0C
+#define DEST_MCASP_TX0 0x0D
+#define DEST_MCASP_TX1 0x0E
+#define DEST_MCASP_TX2 0x0F
+#define DEST_MCASP_TX3 0x10
+#define DEST_EXTPORT0 0x11
+#define DEST_EXTPORT1 0x12
+#define DEST_EXTPORT2 0x13
+#define DEST_EXTPORT3 0x14
+#define DEST_MCPDM_ON 0x15
+#define DEST_CBP_CBPr 0x3F
/*
- * * ATC DESCRIPTORS - SOURCES
- * */
-#define SRC_DMEM_access 0x0
-#define SRC_MCBSP1_RX 0x01
-#define SRC_MCBSP2_RX 0x02
-#define SRC_MCBSP3_RX 0x03
-#define SRC_SLIMBUS1_RX0 0x04
-#define SRC_SLIMBUS1_RX1 0x05
-#define SRC_SLIMBUS1_RX2 0x06
-#define SRC_SLIMBUS1_RX3 0x07
-#define SRC_SLIMBUS1_RX4 0x08
-#define SRC_SLIMBUS1_RX5 0x09
-#define SRC_SLIMBUS1_RX6 0x0A
-#define SRC_SLIMBUS1_RX7 0x0B
-#define SRC_DMIC_UP 0x0C
-#define SRC_MCPDM_UP 0x0D
-#define SRC_MCASP_RX0 0x0E
-#define SRC_MCASP_RX1 0x0F
-#define SRC_MCASP_RX2 0x10
-#define SRC_MCASP_RX3 0x11
-#define SRC_CBP_CBPr 0x3F
+ * ATC DESCRIPTORS - SOURCES
+ */
+#define SRC_DMEM_access 0x0
+#define SRC_MCBSP1_ RX 0x01
+#define SRC_MCBSP2_RX 0x02
+#define SRC_MCBSP3_RX 0x03
+#define SRC_SLIMBUS1_RX0 0x04
+#define SRC_SLIMBUS1_RX1 0x05
+#define SRC_SLIMBUS1_RX2 0x06
+#define SRC_SLIMBUS1_RX3 0x07
+#define SRC_SLIMBUS1_RX4 0x08
+#define SRC_SLIMBUS1_RX5 0x09
+#define SRC_SLIMBUS1_RX6 0x0A
+#define SRC_SLIMBUS1_RX7 0x0B
+#define SRC_DMIC_UP 0x0C
+#define SRC_MCPDM_UP 0x0D
+#define SRC_MCASP_RX0 0x0E
+#define SRC_MCASP_RX1 0x0F
+#define SRC_MCASP_RX2 0x10
+#define SRC_MCASP_RX3 0x11
+#define SRC_CBP_CBPr 0x3F
+
#endif /* _ABE_EXT_H_ */
diff --git a/sound/soc/omap/abe/abe_firmware.c b/sound/soc/omap/abe/abe_firmware.c
new file mode 100644
index 000000000000..e725cf4ddc3b
--- /dev/null
+++ b/sound/soc/omap/abe/abe_firmware.c
@@ -0,0 +1,24218 @@
+0x00008000, /* VERSION NUMBER */
+0x00002000, /* PMEM LENGTH IN BYTES */
+0x000014A4, /* CMEM LENGTH IN BYTES */
+0x00010000, /* DMEM LENGTH IN BYTES */
+0x000045B0, /* SMEM LENGTH IN BYTES */
+0x1600200f,
+0x0a000670,
+0x08200000,
+0x08200000,
+0x07800000,
+0x1602d2ce,
+0x014000e0,
+0x014000e1,
+0x014000e2,
+0x014000e3,
+0x014000e4,
+0x014000e5,
+0x014000e6,
+0x014000e7,
+0x014000e8,
+0x014000e9,
+0x014000ea,
+0x014000eb,
+0x014000ec,
+0x014000ed,
+0x014000ef,
+0x014000ef,
+0x144000e4,
+0x9e000000,
+0x0a202d70,
+0x9e000040,
+0x0a202d70,
+0x9e000080,
+0x0a202d70,
+0x9e0000c0,
+0x0a202d70,
+0x9e080000,
+0x0a202d70,
+0x9e080100,
+0x0a202d70,
+0x9e080200,
+0x0a202d70,
+0x9e080300,
+0x0a202d70,
+0x9e080400,
+0x0a202d70,
+0x9e080500,
+0x0a202d70,
+0x9e080600,
+0x0a202d70,
+0x9e080700,
+0x0a202d70,
+0x9c050800,
+0x0a202d70,
+0x16000010,
+0x16000001,
+0x17000102,
+0x01400042,
+0x17800103,
+0x01400043,
+0x98020000,
+0x9d0c8118,
+0x07800000,
+0x9f16001a,
+0x9f12021a,
+0x9f12031a,
+0x9f12051a,
+0x98800380,
+0x9d0c8118,
+0x08200000,
+0x9d0c8118,
+0x07800000,
+0x9f15001a,
+0x9f11041a,
+0x98800410,
+0x9d0c8118,
+0x08200000,
+0x400002c0,
+0x048002ff,
+0x000000c5,
+0x000004c6,
+0x9c028000,
+0x400006c7,
+0x12000155,
+0x013ffefe,
+0xc00008c4,
+0x1e080000,
+0x020005de,
+0x00000ac3,
+0xdc02b160,
+0x04c3ff2d,
+0xdc01ba70,
+0x128002dd,
+0xdc02a440,
+0x048fffdd,
+0x9c061830,
+0x0b200000,
+0x003ffefe,
+0x000002c4,
+0x400004c5,
+0x048ffeff,
+0x000006c6,
+0x000008c7,
+0x9d02a040,
+0x9d02a950,
+0x9d01b260,
+0x9d02bc70,
+0x08200000,
+0x1602c888,
+0x00000089,
+0x1602c82a,
+0x400000ac,
+0x1602c7c6,
+0x40000066,
+0x0600000c,
+0x0400069b,
+0x4a800720,
+0x1600274d,
+0x0a200480,
+0x4000009c,
+0x1602c80e,
+0x410000ec,
+0x0600000c,
+0x1600274d,
+0x0a800890,
+0x1602ea03,
+0x00000030,
+0x00000231,
+0x00000435,
+0x04800211,
+0x04400511,
+0x1602c944,
+0x0000004e,
+0x0300010e,
+0x04800211,
+0x04400511,
+0x0300010c,
+0x04800211,
+0x04400511,
+0x03000109,
+0x01000231,
+0x0a200480,
+0x04800299,
+0x41000089,
+0x05c00b90,
+0x4ac00720,
+0x1602c7e5,
+0x40000055,
+0x1602c8c4,
+0x40000047,
+0x1602c94e,
+0x04000599,
+0x400000e1,
+0x04800177,
+0x01000089,
+0x41000047,
+0x04a00111,
+0x410000e1,
+0x06000001,
+0x4aa00a40,
+0x1602c90d,
+0x400000d6,
+0x16022e89,
+0x400002d7,
+0x04800166,
+0x41000089,
+0x04900077,
+0x010000d6,
+0x010002d7,
+0x1600c005,
+0x1602d241,
+0x16000002,
+0x40000011,
+0x1602d200,
+0x9e0e0550,
+0xdd140530,
+0x160ffff4,
+0x41000002,
+0x06000001,
+0x08400000,
+0x01000004,
+0x9d140550,
+0x0a800670,
+0x0a000a40,
+0x048006ff,
+0x013ffafb,
+0x013ffcfc,
+0x413ffefe,
+0x04a0020b,
+0x004002bc,
+0x0600000c,
+0x1600274d,
+0x0a800be0,
+0x0a200480,
+0x0a000b80,
+0x003ffefe,
+0x003ffcfc,
+0x003ffafb,
+0x048ffaff,
+0x08200000,
+0x9f158048,
+0x07800000,
+0x07800000,
+0x9d088118,
+0x98800c30,
+0x08200000,
+0x9f158048,
+0x9f040040,
+0x07800000,
+0x9f03fc10,
+0x07800000,
+0x07800000,
+0x07800000,
+0x9d188148,
+0x98800c90,
+0x08200000,
+0x9f158048,
+0x07800000,
+0x07800000,
+0x9d188148,
+0x9d188108,
+0x98800d30,
+0x08200000,
+0x9f158048,
+0x07800000,
+0x07800000,
+0x9d0e0040,
+0x07800000,
+0x07800000,
+0x9d1e8148,
+0x9d1e8108,
+0x98800da0,
+0x08200000,
+0x9f158018,
+0x9f040010,
+0x07800000,
+0x9f03fc10,
+0x07800000,
+0x07800000,
+0x07800000,
+0x9d0e0010,
+0x07800000,
+0x07800000,
+0x9d1e8108,
+0x98800e40,
+0x08200000,
+0x9c080048,
+0x9f1d0010,
+0x07800000,
+0x07800000,
+0x9d0c8118,
+0x98800f10,
+0x08200000,
+0x9c180028,
+0x9f1d0010,
+0x07800000,
+0x07800000,
+0x9d0c8108,
+0x98800f80,
+0x08200000,
+0x9c180068,
+0x9c180028,
+0x9f1d0010,
+0x07800000,
+0x07800000,
+0x9d0c8148,
+0x98800ff0,
+0x08200000,
+0x9c1e0048,
+0x9c1e0008,
+0x9f1d0010,
+0x07800000,
+0x07800000,
+0x9d0c8148,
+0x98801070,
+0x08200000,
+0x9c1e0008,
+0x9f1d0010,
+0x07800000,
+0x07800000,
+0x9d0c8108,
+0x988010f0,
+0x08200000,
+0x160004d4,
+0x160004e5,
+0x160004f6,
+0x160000bd,
+0x9c032340,
+0x9c032c50,
+0x9c033560,
+0x9c180028,
+0x9c180068,
+0x9f1d0010,
+0x9c1800a8,
+0x9c1800e8,
+0x9f1d00b0,
+0x07800000,
+0x9d0c8318,
+0x9d0c84b8,
+0x9c180028,
+0x9c180068,
+0x9f1d0010,
+0x07800000,
+0x07800000,
+0x9d0c8518,
+0x988011d0,
+0x9d032340,
+0x9d032c50,
+0x9d033560,
+0x08200000,
+0x16000544,
+0x16000555,
+0x16000566,
+0x9c03a440,
+0x9c03ad50,
+0x9c03b660,
+0x160000bd,
+0x9f158418,
+0x9f1585b8,
+0x07800000,
+0x9d188108,
+0x9d188148,
+0x9d188188,
+0x9c0c0618,
+0x07800000,
+0x9d1881c8,
+0x9d188108,
+0x9d188148,
+0x98801380,
+0x9d032440,
+0x9d032d50,
+0x9d033660,
+0x08200000,
+0x1600000d,
+0x9e0f00d0,
+0x00800e0d,
+0x9f158038,
+0x07800000,
+0x04a002dd,
+0x9d188108,
+0x9f158038,
+0x07800000,
+0x988014e0,
+0x9d188108,
+0x08200000,
+0x08200000,
+0x08200000,
+0x08200000,
+0x9c0c00c0,
+0x9c030f10,
+0x9c009020,
+0x9c0c0468,
+0x9d0c8530,
+0x1600007d,
+0x9f130462,
+0x9f13056a,
+0x9c0c0428,
+0x9f130422,
+0x9d0c8570,
+0x16000004,
+0x9f1780ea,
+0x9f13052a,
+0x9c0c0468,
+0x9f130462,
+0x9d0c8530,
+0x16000005,
+0x9f1380ea,
+0x9f13056a,
+0x9c0c0428,
+0x9f130422,
+0x9d0c8570,
+0x07800000,
+0x9f1380ea,
+0x9f13052a,
+0x9c0c0468,
+0x9f130462,
+0x9d0c8530,
+0x98801690,
+0x9f1380ea,
+0x9f13056a,
+0x9c0c0428,
+0x9f13042a,
+0x9d0c8570,
+0x16000006,
+0x9f1380ea,
+0x9f13052a,
+0x16000007,
+0x07800000,
+0x9d0c8538,
+0x9e048000,
+0x9f1380ea,
+0x9f1380ea,
+0x9c031830,
+0x07800000,
+0x9d0c83c8,
+0x07800000,
+0x07800000,
+0xa007026a,
+0x9f0628b0,
+0x07800000,
+0x9d0c8248,
+0x9d0c8190,
+0x08200000,
+0x9c180004,
+0x9c180080,
+0x16000004,
+0x07800000,
+0x9c043e60,
+0x9c043f60,
+0x9c0c02b0,
+0x9c180628,
+0xdc180668,
+0x1f040030,
+0x9f040070,
+0x9e0f0040,
+0x9d0c8138,
+0x9d188708,
+0x9d188748,
+0x08200000,
+0x9c028c10,
+0x1440000d,
+0x00000004,
+0x9c0c04b8,
+0x9d06a40a,
+0x9d06a40a,
+0x9d06a40a,
+0x9d06a40a,
+0x9d06a40a,
+0x40000205,
+0x16000002,
+0x40000406,
+0x16000003,
+0x400006d7,
+0x16000000,
+0x9d028c10,
+0x16000011,
+0x9f03a0b0,
+0x9e048000,
+0xdc1803e0,
+0x1f040020,
+0x9e040040,
+0x9f0400d0,
+0x9c0c0090,
+0x9e008000,
+0x9d1883c0,
+0x9c0c0240,
+0xc10000d4,
+0x1f040090,
+0x010002d5,
+0x010004d6,
+0x010006d7,
+0x9d0c8120,
+0x08200000,
+0x9c038600,
+0x07800000,
+0x07800000,
+0x9c180770,
+0xdc100348,
+0x160fff05,
+0x9f000810,
+0x9f118412,
+0x9f001010,
+0x9f002810,
+0x9c0c00b8,
+0x160ffd80,
+0x9d0c8410,
+0x9f1d8012,
+0x9f001810,
+0x9f0400d0,
+0x9c0c0210,
+0x16000204,
+0xdd0e00b0,
+0x16000005,
+0x9f1d80b2,
+0x9f0000b0,
+0x9f0020b0,
+0x9f0400d0,
+0x05800560,
+0x0a801dc0,
+0x9c0c0510,
+0x0a001dd0,
+0x9c0c0618,
+0x16000014,
+0x9d0c81e8,
+0x9d0c8148,
+0x0a801e40,
+0x9c0c05b0,
+0x9c0c0510,
+0x0a001e60,
+0x9c0c06b8,
+0x9c0c0618,
+0x07800000,
+0x9d0c81e8,
+0x9d0c8148,
+0x98801c40,
+0x9d180750,
+0x08200000,
+0x9d019220,
+0x048002ff,
+0x14400004,
+0x413ffefe,
+0x16000040,
+0x9c010910,
+0x0a2033b0,
+0x14400040,
+0x9c030810,
+0x16000171,
+0x9c009f30,
+0x9c019220,
+0x0a202eb0,
+0x9c009830,
+0x003ffefe,
+0x048ffeff,
+0x08200000,
+0x40000024,
+0x048002ff,
+0x41000224,
+0x16000005,
+0x413ffefe,
+0x04000400,
+0x9e0f0150,
+0x01000025,
+0x0a202170,
+0x403ffefe,
+0x16000007,
+0x9e0f0170,
+0x048ffeff,
+0x08200000,
+0x048002ff,
+0x413ffefe,
+0x16000005,
+0x01000025,
+0x0a202170,
+0x40000024,
+0x16000005,
+0x403ffefe,
+0x04200454,
+0x41000224,
+0x048ffeff,
+0x08200000,
+0x048008ff,
+0x413ff8f8,
+0x1440000d,
+0x9c038e10,
+0x413ffaf9,
+0x04a001dd,
+0x413ffcfa,
+0x16000001,
+0x413ffefb,
+0x160000f0,
+0x9c100400,
+0x9c100480,
+0x9c1d06c4,
+0x9f085030,
+0x9c180674,
+0x9c180650,
+0x058001a0,
+0x0aa02670,
+0x04800144,
+0x04400044,
+0x05800040,
+0x0aa023b0,
+0x05800160,
+0x0ac02350,
+0x9e090000,
+0x07800000,
+0x07800000,
+0x9e0d0500,
+0x9d040508,
+0x0a002540,
+0x9d040008,
+0x9e090000,
+0x07800000,
+0x9d040008,
+0x9e0d0500,
+0x0a002540,
+0x9d040008,
+0x9e090000,
+0x07800000,
+0x07800000,
+0x9e0d0500,
+0x1280010a,
+0x048001a9,
+0x05800940,
+0x0aa02540,
+0x05800160,
+0x40000628,
+0x160ffff9,
+0x0ac024d0,
+0x05800180,
+0x0ae02540,
+0x160ffff6,
+0x160ffff7,
+0x0a002510,
+0x05800810,
+0x0ae02540,
+0x16000016,
+0x16000007,
+0x9d044690,
+0x04a00144,
+0x9d180674,
+0x05800160,
+0x9d180654,
+0x0ac025b0,
+0x0420040a,
+0x04a001ab,
+0x4a0025e0,
+0x044000bb,
+0x0480014b,
+0x044000bb,
+0x1440004a,
+0x120001aa,
+0x42000a38,
+0x120001bb,
+0x42000b39,
+0x12000288,
+0x12000299,
+0x9e0e8280,
+0xca002780,
+0x1e0e8390,
+0xdd040604,
+0x05800160,
+0x0ac02720,
+0x9d040008,
+0x9e090000,
+0x07800000,
+0x05800040,
+0x9e0d0500,
+0x0aa02780,
+0x9d040508,
+0x0a002780,
+0x9e090000,
+0x05800040,
+0x9d040008,
+0x9e0d0500,
+0x0a802780,
+0x9d040508,
+0x9c1d06c4,
+0xdc1d0644,
+0x1f0400b0,
+0x9c100700,
+0xdc1d06c4,
+0x1f040010,
+0x9d108480,
+0x9f0940b0,
+0x9d108700,
+0x00000cc9,
+0x06000008,
+0x0aa02980,
+0xdc1d0684,
+0x14400005,
+0xdc1d0604,
+0x160fff8a,
+0x04a00255,
+0xdd108480,
+0x16000017,
+0xdd108700,
+0x160ffff8,
+0x05800540,
+0x0aa02940,
+0x05800160,
+0x0ac02930,
+0x01000027,
+0x0a002940,
+0x01000028,
+0x9e088000,
+0xa0054dba,
+0xa005c81a,
+0x0a002a10,
+0x9e088000,
+0xa0054dba,
+0xa005c81a,
+0x160fffaa,
+0x9f1f80b0,
+0x9f1e0010,
+0x9f040020,
+0x9f040070,
+0x9f020810,
+0x9d0446a0,
+0x9e0f0070,
+0x9d0c8118,
+0x98802210,
+0x003ffefb,
+0x003ffcfa,
+0x003ffaf9,
+0x003ff8f8,
+0x048ff8ff,
+0x08200000,
+0x9c0c0018,
+0x9f0b0010,
+0x04a001dd,
+0x07800000,
+0x9d0c8318,
+0x07800000,
+0xa00602ba,
+0x9c0c0018,
+0x9f0b0010,
+0x9d0c82b8,
+0x07800000,
+0x9d0c8318,
+0x98802b10,
+0x07800000,
+0xa00602ba,
+0x9c0c0118,
+0x16000015,
+0x9d0c81b8,
+0x9d0c82b8,
+0x9f092010,
+0x9f0920b0,
+0x9c1d05c0,
+0x9f0930c0,
+0x9c1d0548,
+0x9f093860,
+0x06000006,
+0x0aa02c90,
+0x06000017,
+0x0aa02c90,
+0x01800025,
+0x9c0c0118,
+0x9c0c01b0,
+0x9f082010,
+0x9f0820b0,
+0x9c1d05c0,
+0x9f0830c0,
+0x9c1d0548,
+0x9f083860,
+0x06000006,
+0x0aa02d60,
+0x06000017,
+0x0aa02d60,
+0x01800125,
+0x08200000,
+0x07800000,
+0x01400040,
+0x01400041,
+0x01400042,
+0x01400043,
+0x08200000,
+0x160004d4,
+0x160004e5,
+0x160004f6,
+0x16000007,
+0x9c032040,
+0x9c032950,
+0x9c033260,
+0x9e0f0070,
+0x9e0f0170,
+0x9e0f0270,
+0x9d032040,
+0x9d032950,
+0x9d033260,
+0x08200000,
+0x9c0c0018,
+0x1440001d,
+0x04a001dd,
+0x9d0c8318,
+0x07800000,
+0x9c0c0018,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c81b8,
+0x9d0c02b8,
+0x98802f00,
+0x07800000,
+0xa00602ba,
+0x07800000,
+0x07800000,
+0x9d0c81b8,
+0x9d0c82b8,
+0x08200000,
+0x9c0c0018,
+0x160000ad,
+0x07800000,
+0x9d0c8318,
+0x07800000,
+0x9c0c0018,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c81b8,
+0x9d0c02b8,
+0x07800000,
+0x9c0c0018,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c02b8,
+0x98803030,
+0x9c0c0018,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c81b8,
+0x9d0c02b8,
+0x07800000,
+0xa00602ba,
+0x07800000,
+0x07800000,
+0x9d0c02b8,
+0x08200000,
+0x9c0c0038,
+0x1440001d,
+0x04a001dd,
+0x9d0c8338,
+0x07800000,
+0xa00602ba,
+0xa006821a,
+0x9c0c0038,
+0x07800000,
+0x9d0c8298,
+0x9d0c8338,
+0x9d0c8198,
+0x98803210,
+0x07800000,
+0xa00602ba,
+0xa006821a,
+0x07800000,
+0x07800000,
+0x9d0c8298,
+0x9d0c8198,
+0x08200000,
+0xdc0c0018,
+0x04a00201,
+0x04a001dd,
+0xdd040008,
+0x06000001,
+0x04a00111,
+0x0aa03330,
+0x9d0c8118,
+0x98803310,
+0x08200000,
+0x9c0c02b0,
+0x9c0c0018,
+0x04a00205,
+0x07800000,
+0x9d0c8118,
+0xdd0c81b8,
+0x06000005,
+0x04a00155,
+0x0aa03400,
+0x988033c0,
+0x08200000,
+0x9c0c0018,
+0x9e0e0620,
+0x1600004d,
+0x9d0c8318,
+0x07800000,
+0x9c0c0610,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c81b8,
+0x9d0c02b8,
+0x07800000,
+0x9c0c0018,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c81b8,
+0x9d0c02b8,
+0x988034b0,
+0x9c0c0610,
+0xa00602ba,
+0x07800000,
+0x9d0c8318,
+0x9d0c81b8,
+0x9d0c02b8,
+0x07800000,
+0xa00602ba,
+0x07800000,
+0x07800000,
+0x9d0c81b8,
+0x9d0c82b8,
+0x08200000,
+0x9f160028,
+0x9f168298,
+0x04a001dd,
+0x07800000,
+0x9d0c8128,
+0x07800000,
+0x9f160028,
+0x9f168298,
+0x988036a0,
+0x9d0c8128,
+0x08200000,
+0x9f160020,
+0x9f168098,
+0x07800000,
+0x9d0c8108,
+0x9d0c8258,
+0x98803710,
+0x08200000,
+0x9f160010,
+0x9f168068,
+0x07800000,
+0x07800000,
+0x9d0c8128,
+0x98803780,
+0x08200000,
+0x9d008810,
+0x1280020d,
+0x07800000,
+0x9c038810,
+0x9e0e0620,
+0x04a001dd,
+0x9f16801a,
+0x9f12011a,
+0x9f039810,
+0x9f026810,
+0x9f118610,
+0x9f1680ba,
+0x9f1201ba,
+0x9f0398b0,
+0x9f0268b0,
+0x9f1186b0,
+0x9d0c8718,
+0x9d108248,
+0x9d108208,
+0x9d0c87b8,
+0x9d1082c8,
+0x9d108288,
+0x98803850,
+0x08200000,
+0x00000003,
+0x00000205,
+0x1440001d,
+0x9c039830,
+0x9c03aa50,
+0x07800000,
+0x9c0c0018,
+0x9c0c02b8,
+0x07800000,
+0x07800000,
+0x9d0c8128,
+0x988039d0,
+0x08200000,
+0x010002fe,
+0x00801605,
+0x16002ac3,
+0x12000155,
+0x0200035e,
+0x0b200000,
+0x00800405,
+0x16002ac3,
+0x12000155,
+0x0200035e,
+0x0b200000,
+0x00801705,
+0x16002ac3,
+0x12000155,
+0x0200035e,
+0x0b200000,
+0x000002fe,
+0x07800000,
+0x08200000,
+0x16000181,
+0x04000101,
+0x00800b03,
+0x00000212,
+0x00000017,
+0x9e0e0420,
+0x00000416,
+0xdc180404,
+0x06000003,
+0x9c180480,
+0x0aa03f00,
+0x9c052b20,
+0x9c042820,
+0x9c023970,
+0x07800000,
+0x07800000,
+0x9d01b060,
+0x16000005,
+0x160ffff6,
+0x00800e04,
+0x00800503,
+0x05800420,
+0x0ae03df0,
+0x04000344,
+0x05800420,
+0x0ae03ee0,
+0x04000344,
+0x05800420,
+0x0ae03ee0,
+0x16000006,
+0x04000344,
+0x05800420,
+0x0ae03ee0,
+0x16000016,
+0x04000344,
+0x05800420,
+0x0ae03ee0,
+0x04000344,
+0x05800420,
+0x0ae03ee0,
+0x010000f6,
+0x12000132,
+0x04000233,
+0x9e088300,
+0x40800e02,
+0x16000005,
+0x04000233,
+0x12000233,
+0x04200377,
+0x05800570,
+0x16001e02,
+0x17800523,
+0x04000377,
+0x9e0f0070,
+0x000000f6,
+0x01000606,
+0x0a0041c0,
+0x9c042b20,
+0x9c052920,
+0x9c023870,
+0x07800000,
+0x07800000,
+0x9d00b360,
+0x16000004,
+0x16000005,
+0x160ffff6,
+0x00800503,
+0x05800420,
+0x0ae040d0,
+0x04000344,
+0x05800420,
+0x0ae041b0,
+0x04000344,
+0x05800420,
+0x0ae041b0,
+0x16000006,
+0x04000344,
+0x05800420,
+0x0ae041b0,
+0x16000016,
+0x04000344,
+0x05800420,
+0x0ae041b0,
+0x04000344,
+0x05800420,
+0x0ae041b0,
+0x010000f6,
+0x12000132,
+0x04000233,
+0x9e088300,
+0x16000005,
+0x12000233,
+0x04000377,
+0x04a1e077,
+0x05800570,
+0x16001e02,
+0x17800523,
+0x04000377,
+0x9e0f0170,
+0x000000f6,
+0x01000606,
+0x00800715,
+0x16002ac6,
+0x410004fe,
+0x12000155,
+0x00000202,
+0x00800d04,
+0x0200056e,
+0x16014906,
+0x16014947,
+0x0400042d,
+0x04a001dd,
+0x9e0e0260,
+0x9e0e0370,
+0x0b200000,
+0x00000806,
+0x000004fe,
+0x0000021d,
+0x9e0e0560,
+0x00800b05,
+0x408007d7,
+0x06000005,
+0x40800f02,
+0x04c07f77,
+0x4a8043f0,
+0x04500273,
+0x00800a02,
+0x9e088100,
+0x00000011,
+0x418007d3,
+0x16000003,
+0x12800277,
+0x018003d7,
+0x9d140530,
+0x9d038810,
+0x08200000,
+0x00800a02,
+0x9e088000,
+0x00000011,
+0x418007d3,
+0x16000003,
+0x12800277,
+0x018000d7,
+0x9d140530,
+0x9d038910,
+0x08200000,
+0x00001807,
+0x00801e02,
+0x07800000,
+0x9c01b970,
+0x12000c23,
+0x07800000,
+0x9e088100,
+0x07800000,
+0x07800000,
+0x04c3ff66,
+0x04500366,
+0x07800000,
+0x16000003,
+0x9e0c8100,
+0x1602dd06,
+0x00000064,
+0x1600003d,
+0x04a00122,
+0x9c03a040,
+0x04800266,
+0x9e0f0130,
+0x04800433,
+0x06000002,
+0x9c0c0038,
+0x9c0c0078,
+0x9c0c00b8,
+0x9d0c810c,
+0x9d0c815c,
+0x9d0c81ac,
+0x98804600,
+0x0aa04580,
+0x9e0f0120,
+0x08200000,
+0x16014906,
+0x40800605,
+0x048004ff,
+0x413ffcf8,
+0x144000d3,
+0x413ffef9,
+0x144000e8,
+0x16002ace,
+0x9e0e0260,
+0x12000155,
+0x420005ee,
+0x04a001dd,
+0x0b200000,
+0x9e088000,
+0x40000e05,
+0x1440008e,
+0x40800b09,
+0x16000007,
+0x9e0e8040,
+0x9e0f0070,
+0x04200355,
+0x01000e05,
+0x06000005,
+0x0aa049e0,
+0x40000403,
+0x12000f98,
+0x40800a06,
+0x12800f88,
+0x06000008,
+0x4a8048f0,
+0x1600024d,
+0x40001604,
+0x04800199,
+0x00001405,
+0x01000e04,
+0x01000c05,
+0x0a004940,
+0x40001204,
+0x04800199,
+0x00001005,
+0x01000e04,
+0x01000c05,
+0x41800b09,
+0x16000014,
+0x05c00d30,
+0x9e0e8050,
+0x0a8049d0,
+0x12000233,
+0x9e0e0530,
+0x9d140570,
+0x0a0049e0,
+0x01800014,
+0x003ffef9,
+0x003ffcf8,
+0x048ffcff,
+0x08200000,
+0x0080070d,
+0x00800203,
+0x40800905,
+0x048002ff,
+0x413ffefe,
+0x040003dd,
+0x00000e04,
+0x9c03a950,
+0x06000004,
+0x0a804b90,
+0x058004d0,
+0x0ae04b80,
+0x042004d2,
+0x1440004d,
+0x0a2046a0,
+0x00000e04,
+0x05800420,
+0x0ae04b50,
+0x0a004b90,
+0x1440002d,
+0x0a2046a0,
+0x0a004b90,
+0x0a2046a0,
+0x003ffefe,
+0x40800905,
+0x048ffeff,
+0x9d03a950,
+0x08200000,
+0x048008ff,
+0x413ff8f8,
+0x1440001d,
+0x013ffaf9,
+0x413ffcfa,
+0x1602c909,
+0x413ffefb,
+0x1601fe02,
+0x00000095,
+0x00000296,
+0x9c018201,
+0x01000025,
+0x41400226,
+0x16020603,
+0x04800122,
+0x9e088200,
+0x9e090300,
+0x07800000,
+0x12800277,
+0x128002bb,
+0x01c00127,
+0x01c0012b,
+0x9c018201,
+0x98804cd0,
+0x04800633,
+0x1440001d,
+0x00000034,
+0x04802833,
+0x01c00124,
+0x98804d80,
+0x1602e9ca,
+0x16002102,
+0x12000222,
+0x408000a4,
+0x1602eccd,
+0x408001a5,
+0x16000007,
+0x9e0e0220,
+0x408002a8,
+0x16000806,
+0x408003a9,
+0x12000155,
+0x410000a7,
+0x04500544,
+0x9d140270,
+0x408000d5,
+0x12000288,
+0x410002a7,
+0x04500844,
+0x408001d8,
+0x12000399,
+0x408002d6,
+0x04500944,
+0x410000d7,
+0x1602ed0a,
+0x408003d9,
+0x12000455,
+0x410002d7,
+0x04500544,
+0x408000a5,
+0x12000588,
+0x408001a2,
+0x04500844,
+0x408002a8,
+0x12000666,
+0x410000a7,
+0x04500644,
+0x408003a6,
+0x12000799,
+0x410002a7,
+0x04500944,
+0x12000855,
+0x04500544,
+0x1602dc8a,
+0x1602dccb,
+0x12000922,
+0x04500244,
+0x12000a88,
+0x04500844,
+0x400000a8,
+0x12000b66,
+0x400000b9,
+0x04500644,
+0x04a00188,
+0x04a00199,
+0x16000005,
+0x16000006,
+0x06000008,
+0x0aa05190,
+0x16000015,
+0x000002a8,
+0x06000009,
+0x0aa051d0,
+0x16000016,
+0x000002b9,
+0x1602d0c2,
+0x410000a8,
+0x12000166,
+0x410000b9,
+0x04500655,
+0x40800021,
+0x1602c90d,
+0x41800027,
+0x06000004,
+0x0aa052c0,
+0x06000005,
+0x0aa05340,
+0x06000001,
+0x0aa053d0,
+0x0a0054c0,
+0x160000a8,
+0x400000d6,
+0x12000c88,
+0x04500487,
+0x07800000,
+0x06000005,
+0x9d180078,
+0x0a8053b0,
+0x160000c8,
+0x400000d6,
+0x12000c88,
+0x04500587,
+0x07800000,
+0x07800000,
+0x9d180078,
+0x06000001,
+0x0a805440,
+0x160000d8,
+0x400000d6,
+0x12000c88,
+0x04500187,
+0x07800000,
+0x07800000,
+0x9d180078,
+0x16000903,
+0x16001089,
+0x16000016,
+0x9e0e0530,
+0x16000007,
+0x9d03c890,
+0x07800000,
+0x9d140570,
+0x1602c988,
+0x16000013,
+0x00000084,
+0x1602c942,
+0x00000049,
+0x16000005,
+0x160ffff6,
+0x05800590,
+0x01000045,
+0x17000353,
+0x17800363,
+0x04800233,
+0x01000023,
+0x003ffefb,
+0x003ffcfa,
+0x003ffaf9,
+0x003ff8f8,
+0x048ff8ff,
+0x08200000,
+0x048008ff,
+0x413ff8f8,
+0x1601fe02,
+0x013ffaf9,
+0x013ffcfa,
+0x413ffefb,
+0x04803322,
+0x1602e145,
+0x16000edd,
+0x00000454,
+0x00000856,
+0x9c0768d0,
+0x01c00124,
+0x01c00126,
+0x40000087,
+0x16002b29,
+0x0000028d,
+0x40000c54,
+0x12000299,
+0x00000e56,
+0x01c00127,
+0x0180012d,
+0x9e0e0490,
+0x41400224,
+0x16002b38,
+0x41400226,
+0x12000288,
+0x9c100480,
+0x9f03e0b0,
+0x9e0e0580,
+0x9e010080,
+0xdc1005c0,
+0x1600064d,
+0x9f03e0b0,
+0x01400229,
+0x9e0080c0,
+0x0140022a,
+0x9c01ead0,
+0x01400225,
+0x41400226,
+0x16000673,
+0x9e090200,
+0x04800122,
+0x9c029c30,
+0x128002bb,
+0x01c0012b,
+0x160005fd,
+0x9e088400,
+0x07800000,
+0x9c01ead0,
+0x12800277,
+0x01c00127,
+0x9e090200,
+0x16000023,
+0x1600005d,
+0x128002bb,
+0x9c029c30,
+0x01c0012b,
+0x04800122,
+0x9e088400,
+0x9c01ead0,
+0x07800000,
+0x12800277,
+0x9e090200,
+0x07800000,
+0x01c00127,
+0x128002bb,
+0x01c0012b,
+0x04800222,
+0x1602df45,
+0x16000efd,
+0x00000454,
+0x00000856,
+0x9c0768d0,
+0x01c00124,
+0x01c00126,
+0x40000087,
+0x16002b49,
+0x0000028d,
+0x40000c54,
+0x12000299,
+0x00000e56,
+0x01c00127,
+0x0180012d,
+0x9e0e0490,
+0x41400224,
+0x16002b58,
+0x41400226,
+0x12000288,
+0x9c100480,
+0x9f03e0b0,
+0x9e0e0580,
+0x9e010080,
+0xdc1005c0,
+0x1600009d,
+0x9f03e0b0,
+0x01400229,
+0x9e0080c0,
+0x0140022a,
+0x9c01ead0,
+0x01400225,
+0x160005a3,
+0x01400226,
+0x9e090200,
+0x9c029c30,
+0x07800000,
+0x128002bb,
+0x9e088400,
+0x01c0022b,
+0x07800000,
+0x12800277,
+0x01c00227,
+0x003ffefb,
+0x003ffcfa,
+0x003ffaf9,
+0x003ff8f8,
+0x048ff8ff,
+0x08200000,
+0x00000004,
+0x00000405,
+0x00000806,
+0x00000c07,
+0x05c00540,
+0x0b800000,
+0x9e0e8040,
+0x9c180034,
+0x07800000,
+0x07800000,
+0x06000033,
+0x9e0e8220,
+0x0aa05e70,
+0x9c1d0004,
+0x9c1d0044,
+0x07800000,
+0x9d0c0210,
+0x0a005f20,
+0x06000023,
+0x0aa05ed0,
+0x9c1d0004,
+0x9d040004,
+0x9d100200,
+0x0a005f20,
+0x06000043,
+0x0aa05f20,
+0x9c180024,
+0x9d040004,
+0x9d180200,
+0x04800c44,
+0x05c00740,
+0x17800644,
+0x01000004,
+0x0a005d90,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x07800000,
+0x07800000,
+0x07800000,
+0x08400000,
+0x0a000000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00151000,
+0x00201000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00000000,
+0x00001011,
+0x00001011,
+0x00021031,
+0x00041051,
+0x00061071,
+0x00081091,
+0x000a10b1,
+0x000c10d1,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001041,
+0x00001000,
+0x00000000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00001001,
+0x00000001,
+0x00001000,
+0x00002e34,
+0x00001000,
+0x00001001,
+0x00000001,
+0x00001000,
+0x00002e34,
+0x00151000,
+0x00002e34,
+0x00002e34,
+0x00151000,
+0x00001000,
+0x00001001,
+0x00000001,
+0x00001000,
+0x00002e74,
+0x00001000,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x000010c1,
+0x00001000,
+0x000010c1,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001051,
+0x00001031,
+0x00001051,
+0x00001021,
+0x00001051,
+0x00001031,
+0x00001051,
+0x00001021,
+0x00001051,
+0x00001031,
+0x00001051,
+0x00001021,
+0x00001051,
+0x00001031,
+0x00001051,
+0x00001021,
+0x00001051,
+0x00001031,
+0x00001051,
+0x00001021,
+0x00151000,
+0x00001000,
+0x00001000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00001071,
+0x00000000,
+0x00001071,
+0x00000000,
+0x00001041,
+0x00001001,
+0x00000000,
+0x00001000,
+0x00001011,
+0x00001001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00001011,
+0x00001001,
+0x00000000,
+0x00001041,
+0x00001041,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001011,
+0x00001001,
+0x00001000,
+0x00001011,
+0x00001001,
+0x00001000,
+0x00001011,
+0x00001001,
+0x00000000,
+0x00001000,
+0x00001011,
+0x00001001,
+0x00000000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001000,
+0x00001000,
+0x00001081,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001001,
+0x000000c6,
+0x00001041,
+0x00001000,
+0x00001041,
+0x00001001,
+0x00001001,
+0x00000000,
+0x00001001,
+0x00001000,
+0x00001051,
+0x00001000,
+0x00001001,
+0x00001051,
+0x00001001,
+0x000000d4,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00001001,
+0x00001001,
+0x0000fff9,
+0x00001000,
+0x00001000,
+0x00000000,
+0x00001000,
+0x00001091,
+0x00001000,
+0x00000000,
+0x00001091,
+0x00001091,
+0x00001091,
+0x00001091,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001000,
+0x00001001,
+0x00001001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00001001,
+0x00000000,
+0x00011001,
+0x00000000,
+0x00000008,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00700001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00100001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00fc4793,
+0x000a8b43,
+0x00e7110b,
+0x003411d3,
+0x009d1cfb,
+0x0002b6a8,
+0x00fb8ca8,
+0x0006dac8,
+0x00f610e8,
+0x000d8628,
+0x00eed498,
+0x0013f0e8,
+0x00eb9d08,
+0x000f02e8,
+0x00056260,
+0x00bf42f0,
+0x006a9a5d,
+0x005ed280,
+0x00023c94,
+0x00fb2e83,
+0x000c8ac3,
+0x00e408e3,
+0x0037ceab,
+0x0099fe5b,
+0x0002b430,
+0x00fbb618,
+0x000661c0,
+0x00f71850,
+0x000b9710,
+0x00f220d0,
+0x000eb9d8,
+0x00f37700,
+0x0003c304,
+0x00142c90,
+0x00b09170,
+0x0066c791,
+0x006d23e0,
+0x000208b8,
+0x00fa9443,
+0x000d8413,
+0x00e2e293,
+0x00386703,
+0x009badeb,
+0x000296d8,
+0x00fc0144,
+0x0005c418,
+0x00f83d98,
+0x0009a2c0,
+0x00f53c30,
+0x000a1678,
+0x00fa10a0,
+0x00fadbf0,
+0x001ef5c0,
+0x00a7ab80,
+0x0061b101,
+0x00782010,
+0x000464a8,
+0x00fa1fab,
+0x000e2353,
+0x00e28193,
+0x003770b3,
+0x00a04a0b,
+0x000264f0,
+0x00fc6e8c,
+0x0004f108,
+0x00f9b218,
+0x00073f50,
+0x00f8ea80,
+0x0004be58,
+0x005c1863,
+0x00f141c8,
+0x002a0528,
+0x009fa4a8,
+0x005b6439,
+0x0042ccf5,
+0x0005d8f0,
+0x00f9f08b,
+0x000e2e23,
+0x00e33ce3,
+0x00348833,
+0x00a80de3,
+0x00022008,
+0x00fcf654,
+0x0003fc0c,
+0x00fb4d68,
+0x0004b6b0,
+0x00fcaf74,
+0x00dcf75b,
+0x000875d0,
+0x00e88c00,
+0x00334af8,
+0x009a9170,
+0x0053f3c9,
+0x00498425,
+0x0007d850,
+0x00fa0193,
+0x000db28b,
+0x00e4f083,
+0x0030005b,
+0x00b24bfb,
+0x007356ab,
+0x00fd8f38,
+0x0002f50c,
+0x00fcf624,
+0x00022f7c,
+0x0014e623,
+0x00fa8240,
+0x000ec210,
+0x00e12888,
+0x003a6068,
+0x00989408,
+0x004b98d9,
+0x004fdc61,
+0x000aadb0,
+0x00fa47fb,
+0x000cc843,
+0x00e76cb3,
+0x002a3303,
+0x00be6543,
+0x005c437b,
+0x008ca913,
+0x007977d3,
+0x00a7922b,
+0x00ef1dc3,
+0x0003bf5c,
+0x00f604a8,
+0x00143b08,
+0x00db27e8,
+0x003f50c0,
+0x009968b8,
+0x00427b21,
+0x0055cb8d,
+0x000e5198,
+0x00faba2b,
+0x000b83a3,
+0x00ea894b,
+0x00236a23,
+0x00cbda13,
+0x004398b3,
+0x00b6e5bb,
+0x003575db,
+0x000eee5b,
+0x00fd6ac0,
+0x0006e2f8,
+0x00f20c30,
+0x0018d298,
+0x00d68e40,
+0x00423000,
+0x009cd148,
+0x00716ee8,
+0x005b537d,
+0x0012b270,
+0x00fb4feb,
+0x0009f65b,
+0x00ee2313,
+0x001be763,
+0x00da372b,
+0x002a1533,
+0x00e15813,
+0x00f2fbd3,
+0x007127a3,
+0x00fb4778,
+0x0009ae08,
+0x00eeab88,
+0x001c7728,
+0x00d365f8,
+0x004306e0,
+0x00a2a0d0,
+0x005cd070,
+0x00606a75,
+0x0017d078,
+0x00fc00bb,
+0x0008330b,
+0x00f2141b,
+0x0013f29b,
+0x00e8fcc3,
+0x00108f73,
+0x000aabc3,
+0x00b409ab,
+0x00032d94,
+0x00f961f0,
+0x000c0d48,
+0x00ebf900,
+0x001f1310,
+0x00d1bd70,
+0x0041db98,
+0x00aaa7f0,
+0x004768e0,
+0x0064f695,
+0x001db640,
+0x00fcc40b,
+0x00064cab,
+0x00f635fb,
+0x000bd423,
+0x00f7ab83,
+0x00f7da9b,
+0x00319613,
+0x00fdea24,
+0x00046be0,
+0x00f7c838,
+0x000def88,
+0x00ea0778,
+0x002095b8,
+0x00d19bf0,
+0x003ebd10,
+0x00b4aec0,
+0x00318e40,
+0x0068d739,
+0x002477b8,
+0x00fd9103,
+0x000456bb,
+0x00fa6163,
+0x0003d51b,
+0x0005c47b,
+0x00e0c55b,
+0x0054da23,
+0x00fd2110,
+0x000575e0,
+0x00f68680,
+0x000f46d0,
+0x00e8e4e8,
+0x0020f5c0,
+0x00d2fe70,
+0x0039c7a8,
+0x00c06ee8,
+0x001ba3e0,
+0x006be82d,
+0x002c29d8,
+0x00fe5ef3,
+0x000264b3,
+0x00fe6f83,
+0x00fc3c73,
+0x0012cf0b,
+0x00cc0f3b,
+0x00735b43,
+0x00fc7b10,
+0x00064398,
+0x00f5a608,
+0x001009d8,
+0x00e89830,
+0x002033b8,
+0x00d5d488,
+0x003327e0,
+0x00cd9208,
+0x000617a0,
+0x006e0619,
+0x0034dcb8,
+0x00ff2633,
+0x0000878b,
+0x00023efb,
+0x00f54613,
+0x001e683b,
+0x00ba501b,
+0x00023104,
+0x00fbfc98,
+0x0006cfe8,
+0x00f52c00,
+0x001034f8,
+0x00e92088,
+0x001e5960,
+0x00da0390,
+0x002b1358,
+0x00dbbf58,
+0x00f14c40,
+0x006f129d,
+0x003ea030,
+0x00ffdfeb,
+0x00feceb3,
+0x0005b193,
+0x00ef271b,
+0x00283a63,
+0x00ac06cb,
+0x00027b84,
+0x00fba8d8,
+0x00071778,
+0x00f51a98,
+0x000fc900,
+0x00ea7720,
+0x001b7880,
+0x00df6710,
+0x0021ca50,
+0x00ea95d0,
+0x00dda780,
+0x006ef2a5,
+0x00497dd8,
+0x00000003,
+0x00fd4a6b,
+0x0008a803,
+0x00ea151b,
+0x002ff333,
+0x00a1a463,
+0x0002aad0,
+0x00fb81d8,
+0x00071978,
+0x00f56fc8,
+0x000ecde0,
+0x00ec89f0,
+0x0017b2e0,
+0x00e5c408,
+0x0017aaa0,
+0x00f99118,
+0x00cbaf78,
+0x006d93e5,
+0x005561e0,
+0x00000020,
+0x003fffe0,
+0x00000020,
+0x003fffe0,
+0x00069cf3,
+0x00eda3d3,
+0x00284343,
+0x00b2821b,
+0x000228bc,
+0x00fc4508,
+0x0006a660,
+0x00f19bc0,
+0x007f26c5,
+0x00107398,
+0x00f8cbc0,
+0x0003fef8,
+0x00fdafb8,
+0x00539323,
+0x00d40cc3,
+0x0014740b,
+0x00f855f3,
+0x0001b16b,
+0x000c0373,
+0x00ddec9b,
+0x004b880b,
+0x00fdb6d0,
+0x00041728,
+0x00f8ede8,
+0x000c8b38,
+0x00e57730,
+0x007ca649,
+0x0022b568,
+0x00f146b8,
+0x00081d20,
+0x00fb4da0,
+0x0002a8ac,
+0x00a5ff43,
+0x002a4a93,
+0x00efdbfb,
+0x0003c6eb,
+0x00101e33,
+0x00d13c0b,
+0x0068d11b,
+0x00fcce9c,
+0x0005bc08,
+0x00f61488,
+0x001185c8,
+0x00dbb070,
+0x00788dfd,
+0x00367598,
+0x00e9b5b8,
+0x000c31f8,
+0x00f8f1a0,
+0x00040178,
+0x00fdde98,
+0x0040ab93,
+0x00e6e21b,
+0x0006309b,
+0x0012ea3b,
+0x00c7c91b,
+0x007f746f,
+0x00fc1754,
+0x00070c10,
+0x00f3cc50,
+0x00157878,
+0x00d45408,
+0x0072f70d,
+0x004b56d0,
+0x00e26390,
+0x001012a8,
+0x00f6b500,
+0x00054a20,
+0x00fd2bf0,
+0x0056a233,
+0x00ddc993,
+0x0008d62b,
+0x00147503,
+0x00c1a1c3,
+0x00023c70,
+0x00fb9490,
+0x0007fff0,
+0x00f221f8,
+0x00185148,
+0x00cf5d50,
+0x006c0395,
+0x0060f058,
+0x00db9f08,
+0x00139340,
+0x00f4b188,
+0x00067398,
+0x00fc8844,
+0x006b2573,
+0x00d501e3,
+0x000b96fb,
+0x0014d9d3,
+0x00beae3b,
+0x00025f04,
+0x00fb4790,
+0x00089470,
+0x00f11b68,
+0x001a0988,
+0x00ccb738,
+0x0063ddc5,
+0x0076d0d4,
+0x00d5b880,
+0x001688a8,
+0x00f30060,
+0x00076f18,
+0x00fbfbf8,
+0x007d228f,
+0x00cd04b3,
+0x000e4b13,
+0x00143ecb,
+0x00beb5b3,
+0x000266a0,
+0x00fb2f48,
+0x0008ca48,
+0x00f0b7e8,
+0x001aa578,
+0x00cc3da8,
+0x005ab67d,
+0x004640a1,
+0x00d0ff50,
+0x0018ca30,
+0x00f1b920,
+0x00082ea8,
+0x00fb8f00,
+0x00022e24,
+0x00c650c3,
+0x0010c49b,
+0x0012d1ab,
+0x00c1642b,
+0x0002555c,
+0x00fb48b0,
+0x0008a5d0,
+0x00f0f0a0,
+0x001a3350,
+0x00cdbf38,
+0x0050c415,
+0x0050c415,
+0x00cdbf38,
+0x001a3350,
+0x00f0f0a0,
+0x0008a5d0,
+0x00fb48b0,
+0x0002555c,
+0x00c1642b,
+0x0012d1ab,
+0x0010c49b,
+0x00c650c3,
+0x00022e24,
+0x00fb8f00,
+0x00082ea8,
+0x00f1b920,
+0x0018ca30,
+0x00d0ff50,
+0x004640a1,
+0x005ab67d,
+0x00cc3da8,
+0x001aa578,
+0x00f0b7e8,
+0x0008ca48,
+0x00fb2f48,
+0x000266a0,
+0x00beb5b3,
+0x00143ecb,
+0x000e4b13,
+0x00cd04b3,
+0x007d228f,
+0x00fbfbf8,
+0x00076f18,
+0x00f30060,
+0x001688a8,
+0x00d5b880,
+0x0076d0d4,
+0x0063ddc5,
+0x00ccb738,
+0x001a0988,
+0x00f11b68,
+0x00089470,
+0x00fb4790,
+0x00025f04,
+0x00beae3b,
+0x0014d9d3,
+0x000b96fb,
+0x00d501e3,
+0x006b2573,
+0x00fc8844,
+0x00067398,
+0x00f4b188,
+0x00139340,
+0x00db9f08,
+0x0060f058,
+0x006c0395,
+0x00cf5d50,
+0x00185148,
+0x00f221f8,
+0x0007fff0,
+0x00fb9490,
+0x00023c70,
+0x00c1a1c3,
+0x00147503,
+0x0008d62b,
+0x00ddc993,
+0x0056a233,
+0x00fd2bf0,
+0x00054a20,
+0x00f6b500,
+0x001012a8,
+0x00e26390,
+0x004b56d0,
+0x0072f70d,
+0x00d45408,
+0x00157878,
+0x00f3cc50,
+0x00070c10,
+0x00fc1754,
+0x007f746f,
+0x00c7c91b,
+0x0012ea3b,
+0x0006309b,
+0x00e6e21b,
+0x0040ab93,
+0x00fdde98,
+0x00040178,
+0x00f8f1a0,
+0x000c31f8,
+0x00e9b5b8,
+0x00367598,
+0x00788dfd,
+0x00dbb070,
+0x001185c8,
+0x00f61488,
+0x0005bc08,
+0x00fcce9c,
+0x0068d11b,
+0x00d13c0b,
+0x00101e33,
+0x0003c6eb,
+0x00efdbfb,
+0x002a4a93,
+0x00a5ff43,
+0x0002a8ac,
+0x00fb4da0,
+0x00081d20,
+0x00f146b8,
+0x0022b568,
+0x007ca649,
+0x00e57730,
+0x000c8b38,
+0x00f8ede8,
+0x00041728,
+0x00fdb6d0,
+0x004b880b,
+0x00ddec9b,
+0x000c0373,
+0x0001b16b,
+0x00f855f3,
+0x0014740b,
+0x00d40cc3,
+0x00539323,
+0x00fdafb8,
+0x0003fef8,
+0x00f8cbc0,
+0x00107398,
+0x007f26c5,
+0x00f19bc0,
+0x0006a660,
+0x00fc4508,
+0x000228bc,
+0x00b2821b,
+0x00284343,
+0x00eda3d3,
+0x00069cf3,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00040002,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000003,
+0x00000020,
+0x003fffe0,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x000695c4,
+0x007cdb3b,
+0x000870d8,
+0x000870d8,
+0x007cdb3b,
+0x000695c4,
+0x004470ec,
+0x00fa825a,
+0x000c7322,
+0x00f02316,
+0x000b4d9e,
+0x0013c14c,
+0x0005da48,
+0x00195288,
+0x00195288,
+0x0005da48,
+0x0013c14c,
+0x004470ec,
+0x00fa825a,
+0x000c7322,
+0x00f02316,
+0x000b4d9e,
+0x007de295,
+0x00f821da,
+0x007de295,
+0x008431e5,
+0x0007dde2,
+0x000271f8,
+0x00fb6e08,
+0x0002d334,
+0x0002d334,
+0x00fb6e08,
+0x000271f8,
+0x00421c2d,
+0x00f4e40e,
+0x00188dd6,
+0x00e410d6,
+0x001066c6,
+0x000eabd0,
+0x00e49430,
+0x0010f338,
+0x0010f338,
+0x00e49430,
+0x000eabd0,
+0x00421c2d,
+0x00f4e40e,
+0x00188dd6,
+0x00e410d6,
+0x001066c6,
+0x008e3ba9,
+0x000aaa6a,
+0x00f5559a,
+0x0071c459,
+0x00651dd9,
+0x00f5c6b6,
+0x000b0ede,
+0x00666669,
+0x00999999,
+0x00000003,
+0x0008c704,
+0x00000003,
+0x00f4b6f8,
+0x00000003,
+0x000fcca4,
+0x00000003,
+0x00e5aaf0,
+0x00000003,
+0x004eff30,
+0x007c1680,
+0x004eff30,
+0x00000003,
+0x00e5aaf0,
+0x00000003,
+0x000fcca4,
+0x00000003,
+0x00f4b6f8,
+0x00000003,
+0x0008c704,
+0x00000003,
+0x00028e88,
+0x00b46d8b,
+0x00051de8,
+0x00183def,
+0x0004d91c,
+0x00183def,
+0x00051de8,
+0x00b46d8b,
+0x00028e88,
+0x00fd245c,
+0x0022e2b4,
+0x009f3a1d,
+0x0009cf9e,
+0x00eb653a,
+0x001cb806,
+0x00e5ac1e,
+0x000ea2c6,
+0x00000003,
+0x0008c704,
+0x00000003,
+0x00f4b6f8,
+0x00000003,
+0x000fcca4,
+0x00000003,
+0x00e5aaf0,
+0x00000003,
+0x004eff30,
+0x007c1680,
+0x004eff30,
+0x00000003,
+0x00e5aaf0,
+0x00000003,
+0x000fcca4,
+0x00000003,
+0x00f4b6f8,
+0x00000003,
+0x0008c704,
+0x00000003,
+0x00028e88,
+0x00b46d8b,
+0x00051de8,
+0x00183def,
+0x0004d91c,
+0x00183def,
+0x00051de8,
+0x00b46d8b,
+0x00028e88,
+0x00fd245c,
+0x0022e2b4,
+0x009f3a1d,
+0x0009cf9e,
+0x00eb653a,
+0x001cb806,
+0x00e5ac1e,
+0x000ea2c6,
+0x00000003,
+0x00000003,
+0x0002c197,
+0x0005832b,
+0x0002c197,
+0x00000003,
+0x00000003,
+0x0084a705,
+0x0007da1a,
+0x00000003,
+0x000430ab,
+0x007ff7a1,
+0x00000003,
+0x000430ab,
+0x007ff7a1,
+0x00000003,
+0x00000003,
+0x0002c197,
+0x0005832b,
+0x0002c197,
+0x00000003,
+0x00000003,
+0x0084a705,
+0x0007da1a,
+0x00000003,
+0x00000003,
+0x0002c197,
+0x0005832b,
+0x0002c197,
+0x00000003,
+0x00000003,
+0x0084a705,
+0x0007da1a,
+0x00000003,
+0x000430ab,
+0x007ff7a1,
+0x00000003,
+0x000430ab,
+0x007ff7a1,
+0x00000003,
+0x000430ab,
+0x007ff7a1,
+0x00000003,
+0x000430ab,
+0x007ff7a1,
+0x00000020,
+0x003fffe0,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00269ec3,
+0x000d0ff4,
+0x00051eba,
+0x00640001,
+0x0002f290,
+0x00fdd340,
+0x0002a810,
+0x0002a810,
+0x00fdd340,
+0x0002f290,
+0x0045a895,
+0x00f4a186,
+0x0018a312,
+0x00e445b2,
+0x0010419e,
+0x000b68e0,
+0x0021f7f0,
+0x0044471c,
+0x005c5e48,
+0x005c5e48,
+0x0044471c,
+0x0021f7f0,
+0x000b68e0,
+0x0020ff38,
+0x00b24b3d,
+0x00062d86,
+0x00f4f6ea,
+0x000d3f5a,
+0x00f2ea1a,
+0x00075f92,
+0x00c1248b,
+0x00fd1080,
+0x00faca4c,
+0x00fab048,
+0x00fdb0ac,
+0x00024f54,
+0x00054fb8,
+0x000535b4,
+0x0002ef80,
+0x003edb7b,
+0x001d92ec,
+0x00962b59,
+0x000bd422,
+0x00e48132,
+0x002dbdc2,
+0x00c7a94a,
+0x0033fbe6,
+0x00dd3502,
+0x000fea26,
+0x003c0001,
+0x00080002,
+0x00000000,
+0x00040002,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00008000,
+0x036602EB,
+0x03310371,
+0x0043033B,
+0x0378003A,
+0x037F0397,
+0x019E031C,
+0x03A404A2,
+0x02DD04BE,
+0x01EC01C0,
+0x02FE02AB,
+0x018E00B3,
+0x020B0157,
+0x05D501FD,
+0x0346055F,
+0x00C30002,
+0x00D300C9,
+0x00E400DA,
+0x00F800F1,
+0x010700FF,
+0x0116010F,
+0x01480131,
+0x01540003,
+0x01560155,
+0x03B70449,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x002E0012,
+0x00A200A1,
+0x00A400A3,
+0x00000000,
+0x002E0012,
+0x00A800A7,
+0x00AA00A9,
+0x00000000,
+0x00BE0012,
+0x00B000AF,
+0x00A500B1,
+0x00000000,
+0x00BE0012,
+0x00B600B5,
+0x00B800B7,
+0x00000000,
+0x00BF0012,
+0x00B300B2,
+0x00A600B4,
+0x00000000,
+0x00BF0012,
+0x00BA00B9,
+0x00BC00BB,
+0x00000000,
+0x005A0017,
+0x005B0003,
+0x005E005C,
+0x00000013,
+0x005A0017,
+0x005B0006,
+0x0065005C,
+0x00000013,
+0x00680017,
+0x00690008,
+0x006C006A,
+0x00000012,
+0x005F0018,
+0x00600002,
+0x00630061,
+0x00000013,
+0x005F0018,
+0x00600005,
+0x00660061,
+0x00000013,
+0x0001000B,
+0x00CC00C0,
+0x00E70001,
+0x00000000,
+0x01120003,
+0x00010092,
+0x00940001,
+0x00000000,
+0x01130003,
+0x00010093,
+0x00950001,
+0x00000000,
+0x01140003,
+0x00010116,
+0x00940001,
+0x00000000,
+0x01140003,
+0x00010117,
+0x00950001,
+0x00000000,
+0x00510003,
+0x00010092,
+0x00940001,
+0x00000000,
+0x00510003,
+0x00010093,
+0x00950001,
+0x00000000,
+0x0031000A,
+0x0075002F,
+0x00520076,
+0x00000000,
+0x00BE0000,
+0x00AB00BE,
+0x00A000AD,
+0x00000000,
+0x00BF0000,
+0x00AC00BF,
+0x00A000AE,
+0x00000000,
+0x002F000A,
+0x00CA002F,
+0x00A000CB,
+0x00000000,
+0x00010014,
+0x00010001,
+0x011D0001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x011E0001,
+0x00000000,
+0x000D0009,
+0x000F000E,
+0x00110010,
+0x00000000,
+0x00270000,
+0x002A0029,
+0x002C002B,
+0x00000000,
+0x00230000,
+0x007D0023,
+0x00960078,
+0x00000000,
+0x00030000,
+0x007E0003,
+0x00970079,
+0x00000000,
+0x00230000,
+0x007F0023,
+0x0098007B,
+0x00000000,
+0x00060000,
+0x00800006,
+0x0099007C,
+0x00000000,
+0x00280000,
+0x00810112,
+0x00960077,
+0x00000000,
+0x00920000,
+0x00820064,
+0x00970079,
+0x00000000,
+0x00280000,
+0x00830113,
+0x0098007A,
+0x00000000,
+0x00930000,
+0x00840067,
+0x0099007C,
+0x00000000,
+0x01150000,
+0x00850115,
+0x00960078,
+0x00000000,
+0x01180000,
+0x00860118,
+0x00970079,
+0x00000000,
+0x01150000,
+0x00870115,
+0x0098007B,
+0x00000000,
+0x01190000,
+0x00880119,
+0x0099007C,
+0x00000000,
+0x002D0000,
+0x00890114,
+0x00960077,
+0x00000000,
+0x01160000,
+0x008A0116,
+0x00970079,
+0x00000000,
+0x002D0000,
+0x008B0114,
+0x0098007A,
+0x00000000,
+0x01170000,
+0x008C0117,
+0x0099007C,
+0x00000000,
+0x00260000,
+0x008F0051,
+0x00960077,
+0x00000000,
+0x00920000,
+0x00900091,
+0x00970079,
+0x00000000,
+0x00260000,
+0x008D0051,
+0x0098007A,
+0x00000000,
+0x00930000,
+0x008E0091,
+0x0099007C,
+0x00000000,
+0x00300000,
+0x0073002E,
+0x00520074,
+0x00000000,
+0x002E0000,
+0x009E00BD,
+0x00A0009F,
+0x00000000,
+0x002E0000,
+0x00C8002E,
+0x00A000C9,
+0x00000000,
+0x002F001B,
+0x009C0055,
+0x009B00DF,
+0x00000000,
+0x002E001B,
+0x009A0054,
+0x009B00DF,
+0x00000000,
+0x002D0007,
+0x00010030,
+0x00000017,
+0x00000000,
+0x00210007,
+0x00010031,
+0x00000018,
+0x00000000,
+0x00DD000C,
+0x00010001,
+0x00DE0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00E80001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00E90001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00EA0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00EB0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00EC0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00ED0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00EE0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00EF0001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F00001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F10001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F20001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F30001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F40001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F50001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F60001,
+0x00000000,
+0x0001000D,
+0x00010001,
+0x00F70001,
+0x00000000,
+0x0108000E,
+0x00010001,
+0x01090001,
+0x00000000,
+0x00200005,
+0x001C0026,
+0x00000021,
+0x00000000,
+0x00290005,
+0x001D002D,
+0x00000020,
+0x00000000,
+0x00080006,
+0x00250020,
+0x0000001A,
+0x00000000,
+0x00080006,
+0x00250021,
+0x0000001B,
+0x00000000,
+0x00080006,
+0x006E006D,
+0x0000001E,
+0x00000000,
+0x00080006,
+0x006E0028,
+0x0000001F,
+0x00000000,
+0x00CF0001,
+0x00D70056,
+0x0000012E,
+0x00000000,
+0x00030004,
+0x000C0023,
+0x00940001,
+0x00000000,
+0x00060004,
+0x000C0023,
+0x00950001,
+0x00000000,
+0x01180004,
+0x000C0115,
+0x00940001,
+0x00000000,
+0x01190004,
+0x000C0115,
+0x00950001,
+0x00000000,
+0x002F0004,
+0x010B0055,
+0x010A0001,
+0x00000000,
+0x002E0004,
+0x010B0054,
+0x010A0001,
+0x00000000,
+0x00400002,
+0x00420041,
+0x00000016,
+0x00000000,
+0x00320002,
+0x00340033,
+0x00000013,
+0x00000000,
+0x00350002,
+0x00370036,
+0x00000014,
+0x00000000,
+0x00380002,
+0x003A0039,
+0x00000015,
+0x00000000,
+0x006D0002,
+0x0070006F,
+0x00000019,
+0x00000000,
+0x01150002,
+0x003F003E,
+0x00000019,
+0x00000000,
+0x00080002,
+0x004A0049,
+0x00000019,
+0x00000000,
+0x002F0002,
+0x00BF00BE,
+0x00000019,
+0x00000000,
+0x00DC0002,
+0x00D600CE,
+0x00000019,
+0x00000000,
+0x011A0002,
+0x011C011B,
+0x00000019,
+0x00000000,
+0x00440002,
+0x00460045,
+0x00000019,
+0x00000000,
+0x003B0002,
+0x003D003C,
+0x00000019,
+0x00000000,
+0x00010008,
+0x00010027,
+0x00570001,
+0x00000000,
+0x00010008,
+0x00010022,
+0x00580001,
+0x00000000,
+0x00CE0011,
+0x00D000CF,
+0x00D500D1,
+0x00000000,
+0x00D60010,
+0x00D800D7,
+0x00DB00D9,
+0x00000000,
+0x00010014,
+0x00010001,
+0x011F0001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01200001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01210001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01220001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01230001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01240001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01250001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01260001,
+0x00000000,
+0x0001000F,
+0x00010001,
+0x00010001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01270001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01280001,
+0x00000000,
+0x00010014,
+0x00010001,
+0x01290001,
+0x00000000,
+0x004C0013,
+0x00E00040,
+0x00E200E1,
+0x00000000,
+0x004D0013,
+0x00E30032,
+0x00E200E1,
+0x00000000,
+0x004E0013,
+0x00E40035,
+0x00E200E1,
+0x00000000,
+0x004F0013,
+0x00E50038,
+0x00E200E1,
+0x00000000,
+0x012B0019,
+0x012C0001,
+0x012D0001,
+0x00000000,
+0x0001001A,
+0x00010001,
+0x00000001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000010,
+0x00000000,
+0x00000000,
+0x000022E8,
+0x00000000,
+0x00000000,
+0x00000018,
+0x000022E0,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0000000A,
+0x00000000,
+0x00000000,
+0x00000000,
+0x7FFF7FFF,
+0x7FFF7FFF,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000004,
+0x00000001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x003FFFF0,
+0x00000000,
+0x00400000,
+0x00000004,
+0x00000001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x003FFFF0,
+0x00000000,
+0x00400000,
+0x01950182,
+0x01BB01A8,
+0x01E101CE,
+0x020701F4,
+0x022D021A,
+0x02530240,
+0x02790266,
+0x029F028C,
+0x00000004,
+0x00000001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x003FFFF0,
+0x00000000,
+0x00400000,
+0x02C802B6,
+0x02EC02DA,
+0x031002FE,
+0x03340322,
+0x03580346,
+0x037C036A,
+0x03A0038E,
+0x03C403B2,
+0x00008363,
+0x00000428,
+0x00000000,
+0x00003800,
+0x000000FF,
+0x00000004,
+0x00000001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x003FFFF0,
+0x00000000,
+0x00400000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00008363,
+0x00000428,
+0x00008363,
+0x00000428,
+0x00008363,
+0x00000428,
+0x00008363,
+0x00000428,
+0x00008363,
+0x00000428,
+0x25882738,
+0x00002748,
+0x25782718,
+0x00002728,
+0x298826C8,
+0x000026B8,
+0x297826A8,
+0x00002698,
+0x256826F8,
+0x00002708,
+0x255826D8,
+0x000026E8,
+0x29682648,
+0x00002638,
+0x29582628,
+0x00002618,
+0x25482678,
+0x00002688,
+0x25382658,
+0x00002668,
+0x27682488,
+0x00002478,
+0x25A824A8,
+0x00002498,
+0x25B824C8,
+0x000024B8,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00003000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00003900,
+0x00003900,
+0x00003900,
+0x00003C17,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00044903,
+0x00000000,
+0x00044C02,
+0x00000000,
+0x0006C503,
+0x00000000,
+0x00049605,
+0x00000000,
+0x00049B04,
+0x00000000,
+0x0006C005,
+0x00000000,
+0x00017C0C,
+0x00000000,
+0x00049F28,
+0x00000000,
+0x0004EF28,
+0x00000000,
+0x00074D06,
+0x00000000,
+0x00022118,
+0x00000000,
+0x00013312,
+0x00000000,
+0x00014512,
+0x00013000,
+0x00015524,
+0x00013112,
+0x00014312,
+0x00120024,
+0x00055C00,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001550E,
+0x0001580C,
+0x00016304,
+0x0001580C,
+0x00016704,
+0x00000000,
+0x00016B02,
+0x00000000,
+0x00016D02,
+0x0001640C,
+0x00016F04,
+0x0001640C,
+0x00017304,
+0x00000000,
+0x0001880C,
+0x00000000,
+0x0001940C,
+0x00000000,
+0x0001700C,
+0x00000000,
+0x0001640C,
+0x00000000,
+0x0001580C,
+0x0001640C,
+0x0001700C,
+0x00000000,
+0x0001A00C,
+0x00000000,
+0x0001B80C,
+0x00000000,
+0x0001C40C,
+0x00000000,
+0x0001F40C,
+0x00020009,
+0x00020009,
+0x00000000,
+0x00017909,
+0x000B0009,
+0x00000000,
+0x00000000,
+0x0001AC0C,
+0x00000000,
+0x0006C80C,
+0x00000000,
+0x0006D40C,
+0x00000000,
+0x0006E00C,
+0x00000000,
+0x0006EC0C,
+0x00000000,
+0x0002390C,
+0x00022118,
+0x00028D0C,
+0x00022118,
+0x0002990C,
+0x00000000,
+0x0002450C,
+0x00022100,
+0x0002A50C,
+0x00022100,
+0x0002B10C,
+0x00000000,
+0x0002510C,
+0x00022118,
+0x0002BD0C,
+0x00022118,
+0x0002C90C,
+0x00000000,
+0x0008910C,
+0x00022118,
+0x00089D0C,
+0x00022118,
+0x0008A90C,
+0x00022118,
+0x0002D50C,
+0x00022118,
+0x0002E10C,
+0x00000000,
+0x00025D0C,
+0x00022118,
+0x0002ED0C,
+0x00022118,
+0x0002F90C,
+0x00000000,
+0x00026918,
+0x00000000,
+0x0002810C,
+0x00022118,
+0x0003050C,
+0x00022118,
+0x0003110C,
+0x00022118,
+0x00031D0C,
+0x00022118,
+0x0003290C,
+0x00022118,
+0x0003350C,
+0x00022118,
+0x0003410C,
+0x00000000,
+0x00034D78,
+0x00000000,
+0x0003C518,
+0x00000000,
+0x0003DD18,
+0x00000000,
+0x0003F518,
+0x00000000,
+0x00040D18,
+0x00067B01,
+0x00000202,
+0x00000000,
+0x00043D0C,
+0x000B0019,
+0x00000000,
+0x000B0009,
+0x00000000,
+0x00000000,
+0x00044E18,
+0x00000000,
+0x00046618,
+0x00000000,
+0x00047E18,
+0x000B2DE8,
+0x00000000,
+0x000B2DE4,
+0x00000000,
+0x000B2DD0,
+0x00000000,
+0x00000000,
+0x00049F28,
+0x00028C13,
+0x00029F13,
+0x00049F28,
+0x0002B400,
+0x0002B500,
+0x000B7D00,
+0x005D0002,
+0x00217800,
+0x00000000,
+0x0004C728,
+0x00028C13,
+0x00029F13,
+0x0004C728,
+0x0002B200,
+0x0002B300,
+0x000B8500,
+0x00620002,
+0x00212800,
+0x00000000,
+0x0004C728,
+0x005D0004,
+0x00217800,
+0x00620004,
+0x00212800,
+0x00000000,
+0x0004C728,
+0x00000000,
+0x0004EF28,
+0x0003B212,
+0x0003C412,
+0x0004EF28,
+0x0003D600,
+0x0003D700,
+0x000B9500,
+0x006B000C,
+0x00215000,
+0x00000000,
+0x0005170C,
+0x0001B80C,
+0x0001580C,
+0x00000000,
+0x0005230C,
+0x00000000,
+0x00052F0C,
+0x00022118,
+0x00053B0C,
+0x00022118,
+0x0005470C,
+0x00056C19,
+0x00056C19,
+0x00000000,
+0x00040A19,
+0x00055319,
+0x00055319,
+0x0003F119,
+0x0003D819,
+0x00000000,
+0x00043E0B,
+0x00000000,
+0x0004490B,
+0x00000000,
+0x00045407,
+0x00000000,
+0x0004230B,
+0x00000000,
+0x00042E0B,
+0x00000000,
+0x00043905,
+0x0005A90B,
+0x0005A90B,
+0x0005B407,
+0x0005B407,
+0x0005BB0B,
+0x0005BB0B,
+0x0005C605,
+0x0005C605,
+0x0005CB0B,
+0x0005CB0B,
+0x0005D607,
+0x0005D607,
+0x0005DD0B,
+0x0005DD0B,
+0x0005E805,
+0x0005E805,
+0x0005EF0B,
+0x0005EF0B,
+0x0005FA07,
+0x0005FA07,
+0x0006010B,
+0x0006010B,
+0x00060C05,
+0x00060C05,
+0x0006110B,
+0x0006110B,
+0x00061C07,
+0x00061C07,
+0x0006230B,
+0x0006230B,
+0x00062E05,
+0x00062E05,
+0x0006450B,
+0x0006450B,
+0x00065007,
+0x00065007,
+0x0006330B,
+0x0006330B,
+0x00063E05,
+0x00063E05,
+0x00000000,
+0x00069828,
+0x00000000,
+0x0005A302,
+0x00000000,
+0x0005A504,
+0x00000006,
+0x00000000,
+0x00000003,
+0x00000000,
+0x000B000B,
+0x00000000,
+0x00010007,
+0x00000000,
+0x000B000B,
+0x00000000,
+0x00030005,
+0x00000000,
+0x0005850F,
+0x0005850F,
+0x000B000F,
+0x00088400,
+0x0005940F,
+0x0005940F,
+0x00030007,
+0x00000000,
+0x00067D09,
+0x00067D09,
+0x0004A909,
+0x0004A909,
+0x000B0009,
+0x00000000,
+0x00000000,
+0x00068C02,
+0x00068603,
+0x00068603,
+0x000BA502,
+0x0004B203,
+0x00000003,
+0x002E9C00,
+0x00000003,
+0x002ECC00,
+0x00000003,
+0x002ED000,
+0x00000000,
+0x00068E02,
+0x00068903,
+0x00068903,
+0x000BB502,
+0x0004B503,
+0x00000003,
+0x002E9E00,
+0x0006F809,
+0x0006F809,
+0x00070109,
+0x00070109,
+0x00000000,
+0x0004B809,
+0x00000000,
+0x0004C109,
+0x00000000,
+0x00069002,
+0x00070A03,
+0x00070A03,
+0x000BB702,
+0x0004CA03,
+0x00000000,
+0x00069402,
+0x00070D03,
+0x00070D03,
+0x000BBB02,
+0x0004CD03,
+0x00000000,
+0x00069202,
+0x00071003,
+0x00071003,
+0x000BB902,
+0x0004D003,
+0x00000003,
+0x002ECE00,
+0x00000000,
+0x00069602,
+0x00071303,
+0x00071303,
+0x000BBD02,
+0x0004D303,
+0x00000003,
+0x002ED200,
+0x00000000,
+0x0007160C,
+0x00022118,
+0x0007220C,
+0x00022118,
+0x00072E0C,
+0x00000000,
+0x00067B01,
+0x00000000,
+0x00067C01,
+0x00065511,
+0x00065511,
+0x00066615,
+0x00066615,
+0x00045B02,
+0x00045D15,
+0x00067C01,
+0x00066615,
+0x00047211,
+0x00067B01,
+0x00C40011,
+0x0000C500,
+0x00073A09,
+0x00073A09,
+0x00000000,
+0x0004D809,
+0x00074309,
+0x00074309,
+0x0004EA09,
+0x0004E109,
+0x000B6F00,
+0x00074C01,
+0x00002DC0,
+0x00000000,
+0x00000000,
+0x00078506,
+0x00022100,
+0x0007A318,
+0x0007BB0B,
+0x0007BB0B,
+0x00000000,
+0x0004F70B,
+0x00013000,
+0x00078B18,
+0x0007BB0B,
+0x0007BB0B,
+0x0007A318,
+0x00078506,
+0x00D2000B,
+0x0000D300,
+0x00000000,
+0x00075306,
+0x00022118,
+0x00075A18,
+0x0004F304,
+0x00075900,
+0x00013000,
+0x00077200,
+0x000BB200,
+0x00077312,
+0x00EA00DA,
+0x000026FF,
+0x00000000,
+0x00074D06,
+0x00000000,
+0x00100020,
+0x000C2CDC,
+0x0000002D,
+0x00000000,
+0x0005020F,
+0x0007DE13,
+0x0007DE13,
+0x00000000,
+0x00051113,
+0x00170013,
+0x00000000,
+0x0007F113,
+0x0007F113,
+0x00080413,
+0x00080413,
+0x00081713,
+0x00081713,
+0x00082A13,
+0x00082A13,
+0x00F82DC0,
+0x00000000,
+0x00002060,
+0x00000000,
+0x00002088,
+0x00000000,
+0x000020B0,
+0x00000000,
+0x000020D8,
+0x00000000,
+0x00002100,
+0x00000000,
+0x00002128,
+0x00000000,
+0x00002150,
+0x00000000,
+0x00002178,
+0x00000000,
+0x000021A0,
+0x00000000,
+0x000021C8,
+0x00000000,
+0x000021F0,
+0x00000000,
+0x00002218,
+0x00000000,
+0x00002240,
+0x00000000,
+0x00002268,
+0x00000000,
+0x00002290,
+0x00000000,
+0x000022B8,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x000B2710,
+0x000F00F8,
+0x00000000,
+0x00000002,
+0x00000000,
+0x00000000,
+0x00013000,
+0x00000000,
+0x00013A0C,
+0x00000000,
+0x00083D02,
+0x00000000,
+0x00083F04,
+0x00000000,
+0x00084306,
+0x00000000,
+0x0008490C,
+0x00000000,
+0x00085548,
+0x00000000,
+0x0004250C,
+0x00000000,
+0x0004310C,
+0x00000000,
+0x0001D00C,
+0x00000000,
+0x0001DC0C,
+0x00000000,
+0x0001E802,
+0x00000000,
+0x0001EA04,
+0x00000000,
+0x0001EE02,
+0x00000000,
+0x0001F004,
+0x00000000,
+0x00086D0C,
+0x00022118,
+0x0008790C,
+0x00022118,
+0x0008850C,
+0x00002EFC,
+0x00000000,
+0x00002F04,
+0x00000000,
+0x00002F0C,
+0x00000000,
+0x00002F14,
+0x00000000,
+0x00002F1C,
+0x00000000,
+0x00002F24,
+0x00000000,
+0x00002F2C,
+0x00000000,
+0x00002F34,
+0x00000000,
+0x00002F3C,
+0x00000000,
+0x00002F44,
+0x00000000,
+0x00002F4C,
+0x00000000,
+0x00002F54,
+0x00000000,
+0x00002F5C,
+0x00000000,
+0x00000000,
+0x0008B800,
+0x00000000,
+0x000E4000,
+0x0008B800,
+0x00013000,
+0x00003C18,
+0x00000000,
+0x00052700,
+0x00052701,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040000,
+0x00040000,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000001,
+0x00000010,
+0x00000000,
+0x00000000,
+0x00400000,
+0x00400000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0000001B,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000003,
+0x00000000,
+0x00000003,
+0x00000000,
+0x00000003,
+0x00000000,
+0x00000006,
+0x00000000,
+0x00000006,
+0x00000000,
+0x00000006,
+0x00000000,
+0x00000009,
+0x00000000,
+0x00000009,
+0x00000000,
+0x00000009,
+0x00000000,
+0x00000005,
+0x00000000,
+0x00000005,
+0x00000000,
+0x00000005,
+0x00000000,
+0x00000007,
+0x00000000,
+0x00000007,
+0x00000000,
+0x00000007,
+0x00000000,
+0x00000008,
+0x00000000,
+0x00000008,
+0x00000000,
+0x00000008,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00E66666,
+0x00199999,
+0x00199999,
+0x00199999,
+0x00000000,
+0x00000000,
+0x00E66666,
+0x00E66666,
+0x00FFFFFF,
+0x00FFFFFF,
+0x00199999,
+0x00199999,
+0x00F33333,
+0x000CCCCC,
+0x00F33333,
+0x00F33333,
+0x00199999,
+0x00E66666,
+0x00F33333,
+0x00F33333,
+0x00F33333,
+0x000CCCCC,
+0x00199999,
+0x00199999,
+0x000CCCCC,
+0x00162B95,
+0x00F33333,
+0x000CCCCC,
+0x00E66666,
+0x00000000,
+0x00F33333,
+0x00F33333,
+0x000CCCCC,
+0x00E9D46A,
+0x00199999,
+0x00E66666,
+0x000CCCCC,
+0x00E9D46A,
+0x00F33333,
+0x00F33333,
+0x00E66666,
+0x00FFFFFF,
+0x00F33333,
+0x000CCCCC,
+0x000CCCCC,
+0x00162B95,
+0x00199999,
+0x00199999,
+0x00162B95,
+0x0018BA4A,
+0x000CCCCC,
+0x00162B95,
+0x00000000,
+0x00121A18,
+0x00F33333,
+0x000CCCCC,
+0x00E9D46A,
+0x0006A032,
+0x00E66666,
+0x00000000,
+0x00E9D46A,
+0x00F95FCD,
+0x00F33333,
+0x00F33333,
+0x00FFFFFF,
+0x00EDE5E7,
+0x000CCCCC,
+0x00E9D46A,
+0x00162B95,
+0x00E745B5,
+0x00199999,
+0x00E66666,
+0x00162B95,
+0x00E745B5,
+0x000CCCCC,
+0x00E9D46A,
+0x00000000,
+0x00EDE5E7,
+0x00F33333,
+0x00F33333,
+0x00E9D46A,
+0x00F95FCF,
+0x00E66666,
+0x00FFFFFF,
+0x00E9D46A,
+0x0006A032,
+0x00F33333,
+0x000CCCCC,
+0x00FFFFFF,
+0x00121A18,
+0x000CCCCC,
+0x00162B95,
+0x00162B95,
+0x0018BA4A,
+0x00199999,
+0x00199999,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00010000,
+0x00010000,
diff --git a/sound/soc/omap/abe/abe_functionsId.h b/sound/soc/omap/abe/abe_functionsId.h
deleted file mode 100644
index b4b03983bc0d..000000000000
--- a/sound/soc/omap/abe/abe_functionsId.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
- *
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
- */
-
-#ifndef _ABE_FUNCTIONSID_H_
-#define _ABE_FUNCTIONSID_H_
-
-/*
- * TASK function ID definitions
- */
-#define C_ABE_FW_FUNCTION_IIR 0
-#define C_ABE_FW_FUNCTION_monoToStereoPack 1
-#define C_ABE_FW_FUNCTION_stereoToMonoSplit 2
-#define C_ABE_FW_FUNCTION_decimator 3
-#define C_ABE_FW_FUNCTION_OS0Fill 4
-#define C_ABE_FW_FUNCTION_mixer2 5
-#define C_ABE_FW_FUNCTION_mixer4 6
-#define C_ABE_FW_FUNCTION_inplaceGain 7
-#define C_ABE_FW_FUNCTION_StreamRouting 8
-#define C_ABE_FW_FUNCTION_gainConverge 9
-#define C_ABE_FW_FUNCTION_dualIir 10
-#define C_ABE_FW_FUNCTION_DCOFFSET 11
-#define C_ABE_FW_FUNCTION_IO_DL_pp 12
-#define C_ABE_FW_FUNCTION_IO_generic 13
-#define C_ABE_FW_FUNCTION_irq_fifo_debug 14
-#define C_ABE_FW_FUNCTION_synchronize_pointers 15
-#define C_ABE_FW_FUNCTION_VIBRA2 16
-#define C_ABE_FW_FUNCTION_VIBRA1 17
-#define C_ABE_FW_FUNCTION_APS_core 18
-#define C_ABE_FW_FUNCTION_IIR_SRC_MIC 19
-#define C_ABE_FW_FUNCTION_wrappers 20
-#define C_ABE_FW_FUNCTION_EANCUpdateOutSample 21
-#define C_ABE_FW_FUNCTION_EANC 22
-#define C_ABE_FW_FUNCTION_ASRC_DL_wrapper 23
-#define C_ABE_FW_FUNCTION_ASRC_UL_wrapper 24
-
-/*
- * COPY function ID definitions
- */
-#define NULL_COPY_CFPID 0
-#define S2D_STEREO_16_16_CFPID 1
-#define S2D_MONO_MSB_CFPID 2
-#define S2D_STEREO_MSB_CFPID 3
-#define S2D_STEREO_RSHIFTED_16_CFPID 4
-#define S2D_MONO_RSHIFTED_16_CFPID 5
-#define D2S_STEREO_16_16_CFPID 6
-#define D2S_MONO_MSB_CFPID 7
-#define D2S_STEREO_MSB_CFPID 8
-#define D2S_STEREO_RSHIFTED_16_CFPID 9
-#define D2S_MONO_RSHIFTED_16_CFPID 10
-#define COPY_DMIC_CFPID 11
-#define COPY_MCPDM_DL_CFPID 12
-#define COPY_MM_UL_CFPID 13
-#define SPLIT_SMEM_CFPID 14
-#define MERGE_SMEM_CFPID 15
-#define SPLIT_TDM_CFPID 16
-#define MERGE_TDM_CFPID 17
-#define ROUTE_MM_UL_CFPID 18
-#define IO_DMAREQ_CFPID 19
-#define IO_IP_CFPID 20
-
-#endif /* _ABE_FUNCTIONSID_H_ */
diff --git a/sound/soc/omap/abe/abe_functionsid.h b/sound/soc/omap/abe/abe_functionsid.h
new file mode 100644
index 000000000000..6d62ee56b84d
--- /dev/null
+++ b/sound/soc/omap/abe/abe_functionsid.h
@@ -0,0 +1,80 @@
+/*
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef _ABE_FUNCTIONSID_H_
+#define _ABE_FUNCTIONSID_H_
+
+/*
+ * TASK function ID definitions
+ */
+#define C_ABE_FW_FUNCTION_IIR 0
+#define C_ABE_FW_FUNCTION_monoToStereoPack 1
+#define C_ABE_FW_FUNCTION_stereoToMonoSplit 2
+#define C_ABE_FW_FUNCTION_decimator 3
+#define C_ABE_FW_FUNCTION_OS0Fill 4
+#define C_ABE_FW_FUNCTION_mixer2 5
+#define C_ABE_FW_FUNCTION_mixer4 6
+#define C_ABE_FW_FUNCTION_inplaceGain 7
+#define C_ABE_FW_FUNCTION_StreamRouting 8
+#define C_ABE_FW_FUNCTION_gainConverge 9
+#define C_ABE_FW_FUNCTION_dualIir 10
+#define C_ABE_FW_FUNCTION_DCOFFSET 11
+#define C_ABE_FW_FUNCTION_IO_DL_pp 12
+#define C_ABE_FW_FUNCTION_IO_generic 13
+#define C_ABE_FW_FUNCTION_irq_fifo_debug 14
+#define C_ABE_FW_FUNCTION_synchronize_pointers 15
+#define C_ABE_FW_FUNCTION_VIBRA2 16
+#define C_ABE_FW_FUNCTION_VIBRA1 17
+#define C_ABE_FW_FUNCTION_APS_core 18
+#define C_ABE_FW_FUNCTION_IIR_SRC_MIC 19
+#define C_ABE_FW_FUNCTION_wrappers 20
+#define C_ABE_FW_FUNCTION_EANCUpdateOutSample 21
+#define C_ABE_FW_FUNCTION_EANC 22
+#define C_ABE_FW_FUNCTION_ASRC_DL_wrapper 23
+#define C_ABE_FW_FUNCTION_ASRC_UL_wrapper 24
+#define C_ABE_FW_FUNCTION_mem_init 25
+#define C_ABE_FW_FUNCTION_debug_vx_asrc 26
+#define C_ABE_FW_FUNCTION_IIR_SRC2 27
+
+/*
+ * COPY function ID definitions
+ */
+#define NULL_COPY_CFPID 0
+#define S2D_STEREO_16_16_CFPID 1
+#define S2D_MONO_MSB_CFPID 2
+#define S2D_STEREO_MSB_CFPID 3
+#define S2D_STEREO_RSHIFTED_16_CFPID 4
+#define S2D_MONO_RSHIFTED_16_CFPID 5
+#define D2S_STEREO_16_16_CFPID 6
+#define D2S_MONO_MSB_CFPID 7
+#define D2S_STEREO_MSB_CFPID 8
+#define D2S_STEREO_RSHIFTED_16_CFPID 9
+#define D2S_MONO_RSHIFTED_16_CFPID 10
+#define COPY_DMIC_CFPID 11
+#define COPY_MCPDM_DL_CFPID 12
+#define COPY_MM_UL_CFPID 13
+#define SPLIT_SMEM_CFPID 14
+#define MERGE_SMEM_CFPID 15
+#define SPLIT_TDM_CFPID 16
+#define MERGE_TDM_CFPID 17
+#define ROUTE_MM_UL_CFPID 18
+#define IO_IP_CFPID 19
+
+#endif /* _ABE_FUNCTIONSID_H_ */
diff --git a/sound/soc/omap/abe/abe_fw.h b/sound/soc/omap/abe/abe_fw.h
index 71f899f6a885..828f400474f1 100644
--- a/sound/soc/omap/abe/abe_fw.h
+++ b/sound/soc/omap/abe/abe_fw.h
@@ -1,11 +1,21 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software`
+ * 02110-1301 USA
*/
#include "abe_cm_addr.h"
@@ -17,288 +27,281 @@
* GLOBAL DEFINITION
*/
/* one scheduler loop = 4kHz = 12 samples at 48kHz */
-#define FW_SCHED_LOOP_FREQ 4000
+#define FW_SCHED_LOOP_FREQ 4000
+
/* one scheduler loop = 4kHz = 12 samples at 48kHz */
#define FW_SCHED_LOOP_FREQ_DIV1000 (FW_SCHED_LOOP_FREQ/1000)
-#define EVENT_FREQUENCY 96000
-#define SLOTS_IN_SCHED_LOOP (96000/FW_SCHED_LOOP_FREQ)
+#define EVENT_FREQUENCY 96000
+#define SLOTS_IN_SCHED_LOOP (96000/FW_SCHED_LOOP_FREQ)
-#define SCHED_LOOP_8kHz ( 8000/FW_SCHED_LOOP_FREQ)
-#define SCHED_LOOP_16kHz (16000/FW_SCHED_LOOP_FREQ)
-#define SCHED_LOOP_24kHz (24000/FW_SCHED_LOOP_FREQ)
-#define SCHED_LOOP_48kHz (48000/FW_SCHED_LOOP_FREQ)
+#define SCHED_LOOP_8kHz ( 8000/FW_SCHED_LOOP_FREQ)
+#define SCHED_LOOP_16kHz (16000/FW_SCHED_LOOP_FREQ)
+#define SCHED_LOOP_24kHz (24000/FW_SCHED_LOOP_FREQ)
+#define SCHED_LOOP_48kHz (48000/FW_SCHED_LOOP_FREQ)
-#define TASKS_IN_SLOT 8
+#define TASKS_IN_SLOT 8
/*
* DMEM AREA - SCHEDULER
*/
-#define dmem_mm_trace D_DEBUG_FIFO_ADDR
-#define dmem_mm_trace_size ((D_DEBUG_FIFO_ADDR_END-D_DEBUG_FIFO_ADDR+1)/4)
+#define dmem_mm_trace D_DEBUG_FIFO_ADDR
+#define dmem_mm_trace_size ((D_DEBUG_FIFO_ADDR_END-D_DEBUG_FIFO_ADDR+1)/4)
-#define ATC_SIZE 8 /* 8 bytes per descriptors */
+#define ATC_SIZE 8 /* 8 bytes per descriptors */
typedef struct {
- unsigned rdpt:7; /* first 32bits word of the descriptor */
- unsigned reserved0:1;
- unsigned cbsize:7;
- unsigned irqdest:1;
- unsigned cberr:1;
- unsigned reserved1:5;
- unsigned cbdir:1;
- unsigned nw:1;
- unsigned wrpt:7;
- unsigned reserved2:1;
- unsigned badd:12; /* second 32bits word of the descriptor */
- unsigned iter:7; /* iteration field overlaps the 16 bits boundary */
- unsigned srcid:6;
- unsigned destid:6;
- unsigned desen:1;
+unsigned rdpt :
+ 7; /* first 32bits word of the descriptor */
+unsigned reserved0 :
+ 1;
+unsigned cbsize :
+ 7;
+unsigned irqdest :
+ 1;
+unsigned cberr :
+ 1;
+unsigned reserved1 :
+ 5;
+unsigned cbdir :
+ 1;
+unsigned nw :
+ 1;
+unsigned wrpt :
+ 7;
+unsigned reserved2 :
+ 1;
+unsigned badd :
+ 12; /* second 32bits word of the descriptor */
+unsigned iter :
+ 7; /* iteration field overlaps the 16 bits boundary */
+unsigned srcid :
+ 6;
+unsigned destid :
+ 6;
+unsigned desen :
+ 1;
} abe_satcdescriptor_aess;
/*
- * table of scheduler tasks :
- * char scheduler_table[24 x 4] : four bytes used at OPP100%
+ * table of scheduler tasks :
+ * char scheduler_table[24 x 4] : four bytes used at OPP100%
*/
-#define dmem_scheduler_table D_multiFrame_ADDR
+#define dmem_scheduler_table D_multiFrame_ADDR
-#define dmem_eanc_task_pointer D_pFastLoopBack_ADDR
+#define dmem_eanc_task_pointer D_pFastLoopBack_ADDR
/*
- * OPP value :
- * pointer increment steps in the scheduler table
+ * OPP value :
+ * pointer increment steps in the scheduler table
*/
#define dmem_scheduler_table_step D_taskStep_ADDR
/*
- * table of scheduler tasks (max 64) :
- * char task_descriptors[64 x 8] : eight bytes per task
- * TASK INDEX, INITPTR 1,2,3, INITREG, Loop Counter, Reserved 1,2
- */
-#define dmem_task_descriptor D_tasksList_ADDR
-
-/*
- * table of task function addresses:
- * short task_function_descriptors[32 x 1] : 16bits addresses to PMEM using TASK_INDEX above
- */
-
-/*
- * IDs of the micro tasks
+ * table of scheduler tasks (max 64) :
+ * char task_descriptors[64 x 8] : eight bytes per task
+ * TASK INDEX, INITPTR 1,2,3, INITREG, Loop Counter, Reserved 1,2
*/
-
-// from ABE_FunctionsId.h
-/*#define id_ copyMultiFrame_TFID
-#define id_ inplaceGain_TFID
-#define id_ mixer_TFID
-#define id_ IIR_TFID
-#define id_ gainConverge_TFID
-#define id_ sinGen_TFID
-#define id_ OSR0Fill_TFID
-#define id_ IOtask_TFID
-
-#define id_mixer
-#define id_eq
-#define id_upsample_src
-#define id_downsample_src
-#define id_asrc
-#define id_gain_update
-#define id_aps_hs
-#define id_aps_ihf
-#define id_dither
-#define id_eanc
-#define id_io
-#define id_router
-#define id_dynamic_dl
-#define id_dynamic_ul
-#define id_sequence_reader
-#define id_ ..
-*/
+#define dmem_task_descriptor D_tasksList_ADDR
/*
- * I/O DESCRIPTORS
+ * I/O DESCRIPTORS
*/
-#define dmem_port_descriptors D_IOdescr_ADDR
+#define dmem_port_descriptors D_IOdescr_ADDR
/* ping_pong_t descriptors table
- * structure of 8 bytes:
- * uint16 base_address1
- * uint16 size1 (16bits address format)
- * uint16 base_address2
- * uint16 size2
- * } ping_pong_t
- * ping_pong_t dmem_ping_pong_t [8]
+ * structure of 8 bytes:
+ * uint16 base_address1
+ * uint16 size1 (16bits address format)
+ * uint16 base_address2
+ * uint16 size2
+ * } ping_pong_t
+ * ping_pong_t dmem_ping_pong_t [8]
*/
-#define dmem_ping_pong_buffer D_PING_ADDR /* U8 address */
+
+/* U8 address */
+#define dmem_ping_pong_buffer D_PING_ADDR
/*
- * IRQ mask used with ports with IRQ (DMA or host)
- * uint32 dmem_irq_masks [8]
+ * IRQ mask used with ports with IRQ (DMA or host)
+ * uint32 dmem_irq_masks [8]
*/
-#define dmem_irq_masks D_IRQMask_ADDR
+#define dmem_irq_masks D_IRQMask_ADDR
/*
- * tables of to the 8 FIFO sequences (delayed commands) holding 12bytes tasks in the format
- * structure {
- * 1) Down counter delay on 16bits, decremented on each scheduler period
- * 2) Code on 8 bits for the type of operation to execute : call or data move.
- * 3) Three 16bits parameters (for data move example example : source/destination/counter)
- * 4) Three bytes reserved
- * } seq_fw_task_t
+ * tables of to the 8 FIFO sequences (delayed commands) holding 12bytes tasks
+ * in the format
+ * structure {
+ * 1) Down counter delay on 16bits, decremented on each scheduler period
+ * 2) Code on 8 bits for the type of operation to execute : call or data move.
+ * 3) Three 16bits parameters (for data move example example : source/
+ * destination/counter)
+ * 4) Three bytes reserved
+ * } seq_fw_task_t
*
- * structure {
- * uint32 : base address(MSB) + read pointer(LSB)
- * uint32 : max address (MSB) + write pointer (LSB)
- * } FIFO_generic;
- * seq_fw_task_t FIFO_CONTENT [8]; 96 bytes
+ * structure {
+ * uint32 : base address(MSB) + read pointer(LSB)
+ * uint32 : max address (MSB) + write pointer (LSB)
+ * } FIFO_generic;
+ * seq_fw_task_t FIFO_CONTENT [8]; 96 bytes
*
- * FIFO_SEQ dmem_fifo_sequences [8]; all FIFO sequences
+ * FIFO_SEQ dmem_fifo_sequences [8]; all FIFO sequences
*/
-#define dmem_fifo_sequences D_DCFifo_ADDR
+#define dmem_fifo_sequences D_DCFifo_ADDR
#define dmem_fifo_sequences_descriptors D_DCFifoDesc_ADDR
/*
- * IRQ FIFOs
+ * IRQ FIFOs
*
- * structure {
- * uint32 : base address(MSB) + read pointer(LSB)
- * uint32 : max address (MSB) + write pointer (LSB)
- * uint32 IRQ_CODES [6];
- * } dmem_fifo_irq_mcu; 32 bytes
- * } dmem_fifo_irq_dsp; 32 bytes
+ * structure {
+ * uint32 : base address(MSB) + read pointer(LSB)
+ * uint32 : max address (MSB) + write pointer (LSB)
+ * uint32 IRQ_CODES [6];
+ * } dmem_fifo_irq_mcu; 32 bytes
+ * } dmem_fifo_irq_dsp; 32 bytes
*/
#define dmem_fifo_irq_mcu_descriptor D_McuIrqFifoDesc_ADDR
#define dmem_fifo_irq_dsp_descriptor D_DspIrqFifoDesc_ADDR
-#define dmem_fifo_irq_mcu D_McuIrqFifo_ADDR
-#define dmem_fifo_irq_dsp D_DspIrqFifo_ADDR
+#define dmem_fifo_irq_mcu D_McuIrqFifo_ADDR
+#define dmem_fifo_irq_dsp D_DspIrqFifo_ADDR
/*
- * remote debugger exchange buffer
- * uint32 dmem_debug_ae2hal [32]
- * uint32 dmem_debug_hal2ae [32]
+ * remote debugger exchange buffer
+ * uint32 dmem_debug_ae2hal [32]
+ * uint32 dmem_debug_hal2ae [32]
*/
-#define dmem_debug_ae2hal D_DebugAbe2hal_ADDR
-#define dmem_debug_hal2ae D_Debug_hal2abe_ADDR
+#define dmem_debug_ae2hal D_DebugAbe2hal_ADDR
+#define dmem_debug_hal2ae D_Debug_hal2abe_ADDR
/*
- * DMEM address of the ASRC ppm drift parameter for ASRCs (voice and multimedia paths)
- * uint32 smem_asrc(x)_drift
+ * DMEM address of the ASRC ppm drift parameter for ASRCs (voice and multimedia
+ * paths)
+ * uint32 smem_asrc(x)_drift
*/
-#define dmem_asrc1_drift D_ASRC1drift_ADDR
-#define dmem_asrc2_drift D_ASRC2drift_ADDR
+#define dmem_asrc1_drift D_ASRC1drift_ADDR
+#define dmem_asrc2_drift D_ASRC2drift_ADDR
/*
- * DMEM indexes of the router uplink paths
- * uint8 dmem_router_index [8]
+ * DMEM indexes of the router uplink paths
+ * uint8 dmem_router_index [8]
*/
// OC: TBD ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//#define dmem_router_index
+
/*
- * analog control circular buffer commands to Phoenix
- * structure {
- * uint32 : base address(MSB) + read pointer(LSB)
- * uint32 : max address (MSB) + write pointer (LSB)
- * uint32 FIFO_CONTENT [6];
- * } dmem_commands_to_phoenix; 32 bytes
+ * analog control circular buffer commands to Phoenix
+ * structure {
+ * uint32 : base address(MSB) + read pointer(LSB)
+ * uint32 : max address (MSB) + write pointer (LSB)
+ * uint32 FIFO_CONTENT [6];
+ * } dmem_commands_to_phoenix; 32 bytes
*/
-#define dmem_commands_to_phoenix D_Cmd2PhenixFifo_ADDR
-#define dmem_commands_to_phoenix_descriptor D_Cmd2PhenixFifoDesc_ADDR
+#define dmem_commands_to_phoenix D_Cmd2PhenixFifo_ADDR
+#define dmem_commands_to_phoenix_descriptor D_Cmd2PhenixFifoDesc_ADDR
/*
- * analog control circular buffer commands from Phoenix (status line)
- * structure {
- * uint32 : base address(MSB) + read pointer(LSB)
- * uint32 : max address (MSB) + write pointer (LSB)
- * uint32 FIFO_CONTENT [6];
- * } dmem_commands_to_phoenix; 32 bytes
+ * analog control circular buffer commands from Phoenix (status line)
+ * structure {
+ * uint32 : base address(MSB) + read pointer(LSB)
+ * uint32 : max address (MSB) + write pointer (LSB)
+ * uint32 FIFO_CONTENT [6];
+ * } dmem_commands_to_phoenix; 32 bytes
*/
-#define dmem_commands_from_phoenix D_StatusFromPhenixFifo_ADDR
-#define dmem_commands_from_phoenix_descriptor D_StatusFromPhenixFifoDesc_ADDR
+#define dmem_commands_from_phoenix D_StatusFromPhenixFifo_ADDR
+#define dmem_commands_from_phoenix_descriptor D_StatusFromPhenixFifoDesc_ADDR
/*
- * DEBUG mask
- * uint16 dmem_debug_trace_mask
- * each bit of this word enables a type a trace in the debug circular buffer
+ * DEBUG mask
+ * uint16 dmem_debug_trace_mask
+ * each bit of this word enables a type a trace in the debug circular buffer
*/
// OC: TBD ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//#define dmem_debug_trace_mask
/*
- * DEBUG circular buffer
- * structure {
- * uint32 : base address(MSB) + read pointer(LSB)
- * uint32 : max address (MSB) + write pointer (LSB)
- * uint32 FIFO_CONTENT [14]; = TIMESTAMP + CODE
- * } dmem_debug_trace_buffer; 64 bytes
- * should be much larger (depends on the DMEM mapping...)
+ * DEBUG circular buffer
+ * structure {
+ * uint32 : base address(MSB) + read pointer(LSB)
+ * uint32 : max address (MSB) + write pointer (LSB)
+ * uint32 FIFO_CONTENT [14]; = TIMESTAMP + CODE
+ * } dmem_debug_trace_buffer; 64 bytes
+ * should be much larger (depends on the DMEM mapping...)
*/
#define dmem_debug_trace_buffer
-#define dmem_debug_trace_fifo D_debugFifo_ADDR
+#define dmem_debug_trace_fifo D_debugFifo_ADDR
#define dmem_debug_trace_descriptor D_debugFifoDesc_ADDR
/*
- * Infinite counter incremented on each sheduler periods (~250 us)
- * uint16 dmem_debug_time_stamp
+ * Infinite counter incremented on each sheduler periods (~250 us)
+ * uint16 dmem_debug_time_stamp
*/
-#define dmem_debug_time_stamp D_loopCounter_ADDR
+#define dmem_debug_time_stamp D_loopCounter_ADDR
/*
- * ATC BUFFERS + IO TASKS SMEM buffers
+ * ATC BUFFERS + IO TASKS SMEM buffers
*/
-#define dmem_dmic D_DMIC_UL_FIFO_ADDR
-#define dmem_dmic_size ((D_DMIC_UL_FIFO_ADDR_END-D_DMIC_UL_FIFO_ADDR+1)/4)
+#define dmem_dmic D_DMIC_UL_FIFO_ADDR
+#define dmem_dmic_size (D_DMIC_UL_FIFO_sizeof/4)
+
+#define dmem_amic D_McPDM_UL_FIFO_ADDR
+#define dmem_amic_size (D_McPDM_UL_FIFO_sizeof/4)
+#define smem_amic AMIC_96_labelID
-#define dmem_amic D_McPDM_UL_FIFO_ADDR
-#define dmem_amic_size ((D_McPDM_UL_FIFO_ADDR_END-D_McPDM_UL_FIFO_ADDR+1)/4)
-#define smem_amic AMIC_96_labelID
+#define dmem_mcpdm D_McPDM_DL_FIFO_ADDR
+#define dmem_mcpdm_size (D_McPDM_DL_FIFO_sizeof/4)
-#define dmem_mcpdm D_McPDM_DL_FIFO_ADDR
-#define dmem_mcpdm_size ((D_McPDM_DL_FIFO_ADDR_END-D_McPDM_DL_FIFO_ADDR+1)/4)
+#define dmem_mm_ul D_MM_UL_FIFO_ADDR
+#define dmem_mm_ul_size (D_MM_UL_FIFO_sizeof/4)
-#define dmem_mm_ul D_MM_UL_FIFO_ADDR
-#define dmem_mm_ul_size ((D_MM_UL_FIFO_ADDR_END-D_MM_UL_FIFO_ADDR+1)/4)
-#define smem_mm_ul MM_UL_labelID /* managed directly by the router */
+/* managed directly by the router */
+#define smem_mm_ul MM_UL_labelID
-#define dmem_mm_ul2 D_MM_UL2_FIFO_ADDR
-#define dmem_mm_ul2_size ((D_MM_UL2_FIFO_ADDR_END-D_MM_UL2_FIFO_ADDR+1)/4)
-#define smem_mm_ul2 MM_UL2_labelID /* managed directly by the router */
+#define dmem_mm_ul2 D_MM_UL2_FIFO_ADDR
+#define dmem_mm_ul2_size (D_MM_UL2_FIFO_sizeof/4)
-#define dmem_mm_dl D_MM_DL_FIFO_ADDR
-#define dmem_mm_dl_size ((D_MM_DL_FIFO_ADDR_END-D_MM_DL_FIFO_ADDR+1)/4)
-#define smem_mm_dl_opp100 MM_DL_labelID
-#define smem_mm_dl_opp25 MM_DL_labelID /* @@@ at OPP 25/50 or without ASRC */
+/* managed directly by the router */
+#define smem_mm_ul2 MM_UL2_labelID
-#define dmem_vx_dl D_VX_DL_FIFO_ADDR
-#define dmem_vx_dl_size ((D_VX_DL_FIFO_ADDR_END-D_VX_DL_FIFO_ADDR+1)/4)
-#define smem_vx_dl IO_VX_DL_ASRC_labelID /* Voice_16k_DL_labelID */
+#define dmem_mm_dl D_MM_DL_FIFO_ADDR
+#define dmem_mm_dl_size (D_MM_DL_FIFO_sizeof/4)
-#define dmem_vx_ul D_VX_UL_FIFO_ADDR
-#define dmem_vx_ul_size ((D_VX_UL_FIFO_ADDR_END-D_VX_UL_FIFO_ADDR+1)/4)
-#define smem_vx_ul Voice_16k_UL_labelID
+/*IO_MM_DL_ASRC_labelID ASRC input buffer, size 40 */
+#define smem_mm_dl_opp100 MM_DL_labelID
-#define dmem_tones_dl D_TONES_DL_FIFO_ADDR
-#define dmem_tones_dl_size ((D_TONES_DL_FIFO_ADDR_END-D_TONES_DL_FIFO_ADDR+1)/4)
-#define smem_tones_dl Tones_labelID
+/* at OPP 25/50 or without ASRC */
+#define smem_mm_dl_opp25 MM_DL_labelID
-#define dmem_vib_dl D_VIB_DL_FIFO_ADDR
-#define dmem_vib_dl_size ((D_VIB_DL_FIFO_ADDR_END-D_VIB_DL_FIFO_ADDR+1)/4)
-#define smem_vib IO_VIBRA_DL_labelID
+#define dmem_vx_dl D_VX_DL_FIFO_ADDR
+#define dmem_vx_dl_size (D_VX_DL_FIFO_sizeof/4)
+#define smem_vx_dl IO_VX_DL_ASRC_labelID /* Voice_16k_DL_labelID */
-#define dmem_mm_ext_out D_MM_EXT_OUT_FIFO_ADDR
-#define dmem_mm_ext_out_size ((D_MM_EXT_OUT_FIFO_ADDR_END-D_MM_EXT_OUT_FIFO_ADDR+1)/4)
-#define smem_mm_ext_out DL1_GAIN_out_labelID
+#define dmem_vx_ul D_VX_UL_FIFO_ADDR
+#define dmem_vx_ul_size (D_VX_UL_FIFO_sizeof/4)
+#define smem_vx_ul Voice_16k_UL_labelID
-#define dmem_mm_ext_in D_MM_EXT_IN_FIFO_ADDR
-#define dmem_mm_ext_in_size ((D_MM_EXT_IN_FIFO_ADDR_END-D_MM_EXT_IN_FIFO_ADDR+1)/4)
-#define smem_mm_ext_in MM_EXT_IN_labelID
+#define dmem_tones_dl D_TONES_DL_FIFO_ADDR
+#define dmem_tones_dl_size (D_TONES_DL_FIFO_sizeof/4)
+#define smem_tones_dl Tones_labelID
-#define dmem_bt_vx_dl D_BT_DL_FIFO_ADDR
-#define dmem_bt_vx_dl_size ((D_BT_DL_FIFO_ADDR_END-D_BT_DL_FIFO_ADDR+1)/4)
-#define smem_bt_vx_dl BT_DL_8k_labelID
+#define dmem_vib_dl D_VIB_DL_FIFO_ADDR
+#define dmem_vib_dl_size (D_VIB_DL_FIFO_sizeof/4)
+#define smem_vib IO_VIBRA_DL_labelID
-#define dmem_bt_vx_ul D_BT_UL_FIFO_ADDR
-#define dmem_bt_vx_ul_size ((D_BT_UL_FIFO_ADDR_END-D_BT_UL_FIFO_ADDR+1)/4)
-#define smem_bt_vx_ul BT_UL_8k_labelID
+#define dmem_mm_ext_out D_MM_EXT_OUT_FIFO_ADDR
+#define dmem_mm_ext_out_size (D_MM_EXT_OUT_FIFO_sizeof/4)
+#define smem_mm_ext_out DL1_GAIN_out_labelID
+
+#define dmem_mm_ext_in D_MM_EXT_IN_FIFO_ADDR
+#define dmem_mm_ext_in_size (D_MM_EXT_IN_FIFO_sizeof/4)
+#define smem_mm_ext_in MM_EXT_IN_labelID
+
+#define dmem_bt_vx_dl D_BT_DL_FIFO_ADDR
+#define dmem_bt_vx_dl_size (D_BT_DL_FIFO_sizeof/4)
+#define smem_bt_vx_dl BT_DL_8k_labelID
+
+#define dmem_bt_vx_ul D_BT_UL_FIFO_ADDR
+#define dmem_bt_vx_ul_size (D_BT_UL_FIFO_sizeof/4)
+#define smem_bt_vx_ul BT_UL_8k_labelID
/*
@@ -306,10 +309,10 @@ typedef struct {
*/
/*
- * POINTER - used for the port descriptor programming
- * corresponds to 8bits addresses to the INITPTR area
+ * POINTER - used for the port descriptor programming
+ * corresponds to 8bits addresses to the INITPTR area
*
- * List from ABE_INITxxx_labels.h
+ * List from ABE_INITxxx_labels.h
*/
#define ptr_ul_rec
#define ptr_vx_dl
@@ -323,131 +326,128 @@ typedef struct {
*/
/*
- * PHOENIX OFFSET in SMEM
- * used to subtract a DC offset on the headset path (power consumption optimization)
+ * PHOENIX OFFSET in SMEM
+ * used to subtract a DC offset on the headset path (power consumption optimization)
*/
/* OC: exact usage to be detailled */
-#define smem_phoenix_offset S_PhoenixOffset_ADDR
-
-/*
- * EQUALIZERS Z AREA
- * used to reset the filter memory - IIR-8 (max)
- * int24 stereo smem_equ(x) [8x2 + 1]
- */
-#define smem_equ1 S_EQU1_data_ADDR
-#define smem_equ2 S_EQU2_data_ADDR
-#define smem_equ3 S_EQU3_data_ADDR
-#define smem_equ4 S_EQU4_data_ADDR
-#define smem_sdt S_SDT_data_ADDR
-
-/*
- * GAIN SMEM on PORT
- * int32 smem_G0 [18] : desired gain on the ports
- * format of G0 = 6 bits left shifted desired gain in linear 24bits format
- * int24 stereo G0 [18] = G0
- * int24 stereo GI [18] current value of the gain in the same format of G0
- * List of smoothed gains :
- * 6 DMIC 0 1 2 3 4 5
- * 2 AMIC L R
- * 4 PORT1/2_RX L R
- * 2 MM_EXT L R
- * 2 MM_VX_DL L R
- * 2 IHF L R
+#define smem_phoenix_offset S_PhoenixOffset_ADDR
+
+/*
+ * EQUALIZERS Z AREA
+ * used to reset the filter memory - IIR-8 (max)
+ * int24 stereo smem_equ(x) [8x2 + 1]
+ */
+#define smem_equ1 S_EQU1_data_ADDR
+#define smem_equ2 S_EQU2_data_ADDR
+#define smem_equ3 S_EQU3_data_ADDR
+#define smem_equ4 S_EQU4_data_ADDR
+#define smem_sdt S_SDT_data_ADDR
+
+/*
+ * GAIN SMEM on PORT
+ * int32 smem_G0 [18] : desired gain on the ports
+ * format of G0 = 6 bits left shifted desired gain in linear 24bits format
+ * int24 stereo G0 [18] = G0
+ * int24 stereo GI [18] current value of the gain in the same format of G0
+ * List of smoothed gains :
+ * 6 DMIC 0 1 2 3 4 5
+ * 2 AMIC L R
+ * 4 PORT1/2_RX L R
+ * 2 MM_EXT L R
+ * 2 MM_VX_DL L R
+ * 2 IHF L R
* ---------------
* 18 = TOTAL
*/
-//#define smem_g0 S_GTarget_ADDR /* [9] 2 gains in 1 SM address */
-//#define smem_g1 S_GCurrent_ADDR /* [9] 2 gains in 1 SM address */
+#if 0
+#define smem_g0 S_GTarget_ADDR // [9] 2 gains in 1 SM address
+#define smem_g1 S_GCurrent_ADDR // [9] 2 gains in 1 SM address
+#endif
/*
* COEFFICIENTS AREA
*/
/*
- * delay coefficients used in the IIR-1 filters
- * int24 cmem_gain_delay_iir1[9 x 2] (a, (1-a))
+ * delay coefficients used in the IIR-1 filters
+ * int24 cmem_gain_delay_iir1[9 x 2] (a, (1-a))
*
- * 3 for 6 DMIC 0 1 2 3 4 5
- * 1 for 2 AMIC L R
- * 2 for 4 PORT1/2_RX L R
- * 1 for 2 MM_EXT L R
- * 1 for 2 MM_VX_DL L R
- * 1 for 2 IHF L R
+ * 3 for 6 DMIC 0 1 2 3 4 5
+ * 1 for 2 AMIC L R
+ * 2 for 4 PORT1/2_RX L R
+ * 1 for 2 MM_EXT L R
+ * 1 for 2 MM_VX_DL L R
+ * 1 for 2 IHF L R
*/
-#define cmem_gain_alpha C_Alpha_ADDR /* [9] */
+#define cmem_gain_alpha C_Alpha_ADDR
#define cmem_gain_1_alpha C_1_Alpha_ADDR
/*
* gain controls
*/
-#define GAIN_LEFT_OFFSET (abe_port_id)0
-#define GAIN_RIGHT_OFFSET (abe_port_id)1
+#define GAIN_LEFT_OFFSET 0
+#define GAIN_RIGHT_OFFSET 1
-#define cmem_gains_base C_GainsWRamp_ADDR
-#define smem_target_gain_base S_GTarget1_ADDR
-#define cmem_1_Alpha_base C_1_Alpha_ADDR
-#define cmem_Alpha_base C_Alpha_ADDR
+/* stereo gains */
+#define dmic1_gains_offset 0
+#define dmic2_gains_offset 2
+#define dmic3_gains_offset 4
+#define amic_gains_offset 6
+#define dl1_gains_offset 8
+#define dl2_gains_offset 10
+#define splitters_gains_offset 12
+
+#define mixer_dl1_offset 14
+#define mixer_dl2_offset 18
+#define mixer_echo_offset 22
+#define mixer_sdt_offset 24
+#define mixer_vxrec_offset 26
+#define mixer_audul_offset 30
+#define gain_unused_offset 34
-#define dmic1_gains_offset 0 /* stereo gains */
-#define dmic2_gains_offset 2 /* stereo gains */
-#define dmic3_gains_offset 4 /* stereo gains */
-#define amic_gains_offset 6 /* stereo gains */
-#define dl1_gains_offset 8 /* stereo gains */
-#define dl2_gains_offset 10 /* stereo gains */
-#define splitters_gains_offset 12 /* stereo gains */
-#define mixer_dl1_offset 14
-#define mixer_dl2_offset 18
-#define mixer_echo_offset 22
-#define mixer_sdt_offset 24
-#define mixer_vxrec_offset 26
-#define mixer_audul_offset 30
-#define gain_unused_offset 34
/*
- * DMIC SRC 96->48
- * the filter is changed depending on the decimatio ratio used (16/25/32/40)
- * int32 cmem_src2_dmic [6] IIR with 2 coefs in the recursive part and 4 coefs in the direct part
+ * DMIC SRC 96->48
+ * the filter is changed depending on the decimatio ratio used (16/25/32/40)
+ * int32 cmem_src2_dmic [6] IIR with 2 coefs in the recursive part and 4 coefs
+ * in the direct part
*/
#define cmem_src2_dmic
/*
- * EANC coefficients
- * structure of :
- * 20 Q6.26 coef for the FIR
- * 16 Q6.26 coef for the IIR
- * 1 Q6.26 coef for Lambda
+ * EANC coefficients
+ * structure of :
+ * 20 Q6.26 coef for the FIR
+ * 16 Q6.26 coef for the IIR
+ * 1 Q6.26 coef for Lambda
*/
#define cmem_eanc_coef_fir
#define cmem_eanc_coef_iir
#define cmem_eanc_coef_lambda
/*
- * EQUALIZERS - SDT - COEF AREA
- * int24 cmem_equ(x) [8x2+1]
+ * EQUALIZERS - SDT - COEF AREA
+ * int24 cmem_equ(x) [8x2+1]
*/
-#define cmem_equ1 C_EQU1_data_ADDR
-#define cmem_equ2 C_EQU2_data_ADDR
-#define cmem_equ3 C_EQU3_data_ADDR
-#define cmem_equ4 C_EQU4_data_ADDR
-#define cmem_sdt C_SDT_data_ADDR
+#define cmem_equ1 C_EQU1_data_ADDR
+#define cmem_equ2 C_EQU2_data_ADDR
+#define cmem_equ3 C_EQU3_data_ADDR
+#define cmem_equ4 C_EQU4_data_ADDR
+#define cmem_sdt C_SDT_data_ADDR
/*
- * APS - COEF AREA
- * int24 cmem_aps(x) [16]
+ * APS - COEF AREA
+ * int24 cmem_aps(x) [16]
*/
#define cmem_aps1
#define cmem_aps2
#define cmem_aps3
/*
- * DITHER - COEF AREA
- * int24 cmem_dither(x) [4]
+ * DITHER - COEF AREA
+ * int24 cmem_dither(x) [4]
*/
#define cmem_dither
-
-//#ifdef __cplusplus
-//}
-//#endif
diff --git a/sound/soc/omap/abe/abe_ini.c b/sound/soc/omap/abe/abe_ini.c
index 0be0570d54e3..50028ae9c01f 100644
--- a/sound/soc/omap/abe/abe_ini.c
+++ b/sound/soc/omap/abe/abe_ini.c
@@ -1,353 +1,359 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
-#include "abe_dat.h" /* data declaration */
-#include "abe_cof.h"
+#include "abe_dm_addr.h"
+
+short MultiFrame[PROCESSING_SLOTS][TASKS_IN_SLOT];
/*
- * initialize the default values for call-backs to subroutines
- * - FIFO IRQ call-backs for sequenced tasks
- * - FIFO IRQ call-backs for audio player/recorders (ping-pong protocols)
- * - Remote debugger interface
- * - Error monitoring
- * - Activity Tracing
+ * initialize the default values for call-backs to subroutines
+ * - FIFO IRQ call-backs for sequenced tasks
+ * - FIFO IRQ call-backs for audio player/recorders (ping-pong protocols)
+ * - Remote debugger interface
+ * - Error monitoring
+ * - Activity Tracing
*/
-/*
- * ABE_HW_CONFIGURATION
- *
- * Parameter :
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_hw_configuration
*
*/
-void abe_hw_configuration()
+void abe_hw_configuration ()
{
- abe_uint32 atc_reg;
+ u32 atc_reg;
- /* enables the DMAreq from AESS AESS_DMAENABLE_SET = 255 */
+ /* enables the DMAreq from AESS AESS_DMAENABLE_SET = 255 */
atc_reg = 0xFF;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, 0x60, &atc_reg, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC, 0x60, &atc_reg, 4);
}
-/*
- * ABE_BUILD_SCHEDULER_TABLE
- *
- * Parameter :
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_build_scheduler_table
*
*/
-char aUplinkMuxing[D_aUplinkRouting_sizeof];
-
-void abe_build_scheduler_table()
+void abe_build_scheduler_table ()
{
- short MultiFrame[PROCESSING_SLOTS][TASKS_IN_SLOT];
- abe_uint16 i, n;
- abe_uint8 *ptr;
-
+ u16 i, n;
+ u8 *ptr;
+ char aUplinkMuxing[16];
+#define ABE_TASK_ID(ID) (D_tasksList_ADDR + sizeof(ABE_STask)*(ID))
/* LOAD OF THE TASKS' MULTIFRAME */
- /* WARNING ON THE LOCATION OF IO_MM_DL WHICH IS PATCHED IN "abe_init_io_tasks" */
+ /* WARNING ON THE LOCATION OF IO_MM_DL WHICH IS PATCHED
+ IN "abe_init_io_tasks" */
- for (ptr = (abe_uint8 *)&(MultiFrame[0][0]), i=0; i < sizeof (MultiFrame); i++)
+ for (ptr = (u8 *)&(MultiFrame[0][0]), i=0;
+ i < sizeof (MultiFrame); i++)
*ptr++ = 0;
- //MultiFrame[0][0] = 0;
- //MultiFrame[0][1] = 0;
- MultiFrame[0][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_VX_DL;
- //MultiFrame[0][3] = 0;
- //MultiFrame[0][4] = 0;
- //MultiFrame[0][5] = 0;
- MultiFrame[0][6] = 0;
- //MultiFrame[0][7] = 0;
- //MultiFrame[1][0] = 0;
- //MultiFrame[1][1] = 0;
+ /* MultiFrame[0][0] = 0; */
+ /* MultiFrame[0][1] = 0; */
+ MultiFrame[0][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_DL);
+ /* MultiFrame[0][3] = 0; */
+ /* MultiFrame[0][4] = 0; */
+ /* MultiFrame[0][5] = 0; */
+ /* MultiFrame[0][6] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_MM_DL);*/
+ /* MultiFrame[0][7] = 0; */
+
+ /* MultiFrame[1][0] = 0; */
+ /* MultiFrame[1][1] = 0; */
#define TASK_ASRC_VX_DL_SLT 1
#define TASK_ASRC_VX_DL_IDX 2
- MultiFrame[1][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_DL_16;
+ MultiFrame[1][2] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_16);
#define TASK_VX_DL_SLT 1
#define TASK_VX_DL_IDX 3
- MultiFrame[1][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_DL_16_48;
- //MultiFrame[1][4] = 0;
- //MultiFrame[1][5] = 0;
- MultiFrame[1][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2Mixer;
- MultiFrame[1][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_VIB_DL;
- MultiFrame[2][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1Mixer;
- MultiFrame[2][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_SDTMixer;
- //MultiFrame[2][2] = 0;
- //MultiFrame[2][3] = 0;
- //MultiFrame[2][4] = 0;
- MultiFrame[2][5] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_DMIC;
- //MultiFrame[2][6] = 0;
- //MultiFrame[2][7] = 0;
-
- MultiFrame[3][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_GAIN;
- MultiFrame[3][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_APS_EQ;
- MultiFrame[3][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EchoMixer;
- //MultiFrame[3][3] = 0;
- //MultiFrame[3][4] = 0;
- //MultiFrame[3][5] = 0;
- MultiFrame[3][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_GAIN;
- MultiFrame[3][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_APS_EQ;
-
- MultiFrame[4][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_EQ;
- //MultiFrame[4][1] = 0;
- MultiFrame[4][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VXRECMixer;
-
- MultiFrame[4][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VXREC_SPLIT;
- //MultiFrame[4][4] = 0;
- //MultiFrame[4][5] = 0;
- MultiFrame[4][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA1;
- MultiFrame[4][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA2;
-
- MultiFrame[5][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EARP_48_96_0SR;
- MultiFrame[5][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EARP_48_96_LP;
- MultiFrame[5][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PDM_UL;
- //MultiFrame[5][3] = 0;
- //MultiFrame[5][4] = 0;
- //MultiFrame[5][5] = 0;
- MultiFrame[5][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_EQ;
- MultiFrame[5][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA_SPLIT;
-
- MultiFrame[6][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EARP_48_96_LP;
- MultiFrame[6][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PDM_DL;
- //MultiFrame[6][2] = 0;
-
- //MultiFrame[6][3] = 0;
- //MultiFrame[6][4] = 0;
- //MultiFrame[6][5] = 0;
- MultiFrame[6][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_APS_SPLIT;
- //MultiFrame[6][7] = 0;
-
- //MultiFrame[7][0] = 0;
- //MultiFrame[7][1] = 0;
- MultiFrame[7][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_SPLIT;
- MultiFrame[7][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DBG_SYNC;
- //MultiFrame[7][4] = 0;
- //MultiFrame[7][5] = 0;
- MultiFrame[7][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_R_APS_CORE;
- MultiFrame[7][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_L_APS_CORE;
-
- //MultiFrame[8][0] = 0;
- //MultiFrame[8][1] = 0;
- MultiFrame[8][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC1_96_48_LP;
- //MultiFrame[8][3] = 0;
- MultiFrame[8][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC1_SPLIT;
- //MultiFrame[8][5] = 0;
- //MultiFrame[8][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_FBK_96_48;
- //MultiFrame[8][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_FBK_SPLIT;
-
- //MultiFrame[9][0] = 0;
- //MultiFrame[9][1] = 0;
- MultiFrame[9][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC2_96_48_LP;
- //MultiFrame[9][3] = 0;
- MultiFrame[9][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC2_SPLIT;
- //MultiFrame[9][5] = 0;
- MultiFrame[9][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IHF_48_96_0SR;
- MultiFrame[9][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IHF_48_96_LP;
-
- //MultiFrame[10][0] = 0;
- //MultiFrame[10][1] = 0;
- MultiFrame[10][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC3_96_48_LP;
- //MultiFrame[10][3] = 0;
- MultiFrame[10][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC3_SPLIT;
- //MultiFrame[10][5] = 0;
- //MultiFrame[10][6] = 0; // D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_COPY; // NEW: copy EANC coefs to working CMEM areas
- MultiFrame[10][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IHF_48_96_LP;
-
- //MultiFrame[11][0] = 0;
- //MultiFrame[11][1] = 0;
- MultiFrame[11][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_AMIC_96_48_LP;
- //MultiFrame[11][3] = 0;
- MultiFrame[11][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_AMIC_SPLIT;
- //MultiFrame[11][5] = 0;
- //MultiFrame[11][6] = 0;
- MultiFrame[11][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA_PACK;
-
- //MultiFrame[12][0] = 0;
- //MultiFrame[12][1] = 0;
- MultiFrame[12][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_BT_VX_DL;
- MultiFrame[12][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_ROUTING;
- MultiFrame[12][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ULMixer;
+ MultiFrame[1][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_16_48);
+ /* MultiFrame[1][4] = 0; */
+ /* MultiFrame[1][5] = 0; */
+ MultiFrame[1][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2Mixer);
+ MultiFrame[1][7] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VIB_DL);
+
+ MultiFrame[2][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1Mixer);
+ MultiFrame[2][1] = ABE_TASK_ID(C_ABE_FW_TASK_SDTMixer);
+ /* MultiFrame[2][2] = 0; */
+ /* MultiFrame[2][3] = 0; */
+ /* MultiFrame[2][4] = 0; */
+ MultiFrame[2][5] = ABE_TASK_ID(C_ABE_FW_TASK_IO_DMIC);
+ /* MultiFrame[2][6] = 0; */
+ /* MultiFrame[2][7] = 0; */
+
+ MultiFrame[3][1] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_GAIN);
+ MultiFrame[3][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_APS_EQ);
+ MultiFrame[3][2] = ABE_TASK_ID(C_ABE_FW_TASK_EchoMixer);
+ /* MultiFrame[3][3] = 0; */
+ /* MultiFrame[3][4] = 0; */
+ /* MultiFrame[3][5] = 0; */
+ MultiFrame[3][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_GAIN);
+ MultiFrame[3][7] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_APS_EQ);
+
+ MultiFrame[4][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_EQ);
+ /* MultiFrame[4][1] = 0; */
+ MultiFrame[4][2] = ABE_TASK_ID(C_ABE_FW_TASK_VXRECMixer);
+ MultiFrame[4][3] = ABE_TASK_ID(C_ABE_FW_TASK_VXREC_SPLIT);
+ /* MultiFrame[4][4] = 0; */
+ /* MultiFrame[4][5] = 0; */
+ MultiFrame[4][6] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA1);
+ MultiFrame[4][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA2);
+
+
+ MultiFrame[5][0] = 0;
+ MultiFrame[5][1] = ABE_TASK_ID(C_ABE_FW_TASK_EARP_48_96_LP);
+ MultiFrame[5][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_UL);
+ /* MultiFrame[5][3] = 0; */
+ /* MultiFrame[5][4] = 0; */
+ /* MultiFrame[5][5] = 0; */
+ MultiFrame[5][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_EQ);
+ MultiFrame[5][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA_SPLIT);
+
+ MultiFrame[6][0] = ABE_TASK_ID(C_ABE_FW_TASK_EARP_48_96_LP);
+ /* MultiFrame[6][1] = 0; */
+ /* MultiFrame[6][2] = 0; */
+ /* MultiFrame[6][3] = 0; */
+ /* MultiFrame[6][4] = 0; */
+ /* MultiFrame[6][5] = 0; */
+ MultiFrame[6][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_APS_SPLIT);
+ /* MultiFrame[6][7] = 0; */
+
+ MultiFrame[7][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_DL);
+ /* MultiFrame[7][1] = 0; */
+ MultiFrame[7][2] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_SPLIT);
+ MultiFrame[7][3] = ABE_TASK_ID(C_ABE_FW_TASK_DBG_SYNC);
+ /* MultiFrame[7][4] = 0; */
+ /* MultiFrame[7][5] = 0; */
+ MultiFrame[7][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_R_APS_CORE);
+ MultiFrame[7][7] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_L_APS_CORE);
+
+ /* MultiFrame[8][0] = 0; */
+ /* MultiFrame[8][1] = 0; */
+ MultiFrame[8][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC1_96_48_LP);
+ /* MultiFrame[8][3] = 0; */
+ MultiFrame[8][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC1_SPLIT);
+ /* MultiFrame[8][5] = 0; */
+ /* MultiFrame[8][6] = 0; */
+ /* MultiFrame[8][7] = 0; */
+
+ /* MultiFrame[9][0] = 0; */
+ /* MultiFrame[9][1] = 0; */
+ MultiFrame[9][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC2_96_48_LP);
+ /* MultiFrame[9][3] = 0; */
+ MultiFrame[9][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC2_SPLIT);
+ /* MultiFrame[9][5] = 0; */
+ MultiFrame[9][6] = 0;
+ MultiFrame[9][7] = ABE_TASK_ID(C_ABE_FW_TASK_IHF_48_96_LP);
+
+ /* MultiFrame[10][0] = 0; */
+ /* MultiFrame[10][1] = 0; */
+ MultiFrame[10][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC3_96_48_LP);
+ /* MultiFrame[10][3] = 0; */
+ MultiFrame[10][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC3_SPLIT);
+ /* MultiFrame[10][5] = 0; */
+ /* MultiFrame[10][6] = 0; */
+ MultiFrame[10][7] = ABE_TASK_ID(C_ABE_FW_TASK_IHF_48_96_LP);
+
+ /* MultiFrame[11][0] = 0; */
+ /* MultiFrame[11][1] = 0; */
+ MultiFrame[11][2] = ABE_TASK_ID(C_ABE_FW_TASK_AMIC_96_48_LP);
+ /* MultiFrame[11][3] = 0; */
+ MultiFrame[11][4] = ABE_TASK_ID(C_ABE_FW_TASK_AMIC_SPLIT);
+ /* MultiFrame[11][5] = 0; */
+ /* MultiFrame[11][6] = 0; */
+ MultiFrame[11][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA_PACK);
+
+ /* MultiFrame[12][0] = 0; */
+ /* MultiFrame[12][1] = 0; */
+ /* MultiFrame[12][2] = 0; */
+ MultiFrame[12][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_ROUTING);
+ MultiFrame[12][4] = ABE_TASK_ID(C_ABE_FW_TASK_ULMixer);
#define TASK_VX_UL_SLT 12
#define TASK_VX_UL_IDX 5
- MultiFrame[12][5] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_48_16;
- //MultiFrame[12][6] = 0;
- //MultiFrame[12][7] = 0;
- //MultiFrame[13][0] = 0;
- //MultiFrame[13][1] = 0;
- MultiFrame[13][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_MM_UL2_ROUTING;
- MultiFrame[13][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_SideTone;
- MultiFrame[13][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_UL;
- //MultiFrame[13][5] = 0;
- //MultiFrame[13][6] = 0;
- //MultiFrame[13][7] = 0;
-
- //MultiFrame[14][0] = 0;
- //MultiFrame[14][1] = 0;
- //MultiFrame[14][2] = 0;
- MultiFrame[14][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_DMIC;
-#define TASK_BT_DL_48_8_SLT 14
-#define TASK_BT_DL_48_8_IDX 4
- MultiFrame[14][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_DL_48_8;
- //MultiFrame[14][5] = 0;
-#define TASK_ECHO_SLT 14
-#define TASK_ECHO_IDX 6
- MultiFrame[14][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ECHO_REF_48_16;
- //MultiFrame[14][7] = 0;
-
- MultiFrame[15][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_APS_IIR;
- MultiFrame[15][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_APS_CORE;
- //MultiFrame[15][2] = 0;
- MultiFrame[15][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_BT_VX_UL;
- //MultiFrame[15][4] = 0;
- //MultiFrame[15][5] = 0;
- //MultiFrame[15][6] = 0;
- //MultiFrame[15][7] = 0;
-
- //MultiFrame[16][0] = 0;
- //MultiFrame[16][1] = 0;
+ MultiFrame[12][5] = ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_16);
+ /* MultiFrame[12][6] = 0; */
+ /* MultiFrame[12][7] = 0; */
+
+ /* MultiFrame[13][0] = 0; */
+ /* MultiFrame[13][1] = 0; */
+ MultiFrame[13][2] = ABE_TASK_ID(C_ABE_FW_TASK_MM_UL2_ROUTING);
+ MultiFrame[13][3] = ABE_TASK_ID(C_ABE_FW_TASK_SideTone);
+ /* MultiFrame[13][4] = 0; */
+ MultiFrame[13][5] = ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_DL);
+ /* MultiFrame[13][6] = 0; */
+ /* MultiFrame[13][7] = 0; */
+
+ /* MultiFrame[14][0] = 0; */
+ /* MultiFrame[14][1] = 0; */
+ /* MultiFrame[14][2] = 0; */
+ MultiFrame[14][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_DMIC);
+#define TASK_BT_DL_48_8_SLT 14
+#define TASK_BT_DL_48_8_IDX 4
+ MultiFrame[14][4] = ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
+ /* MultiFrame[14][5] = 0; */
+ /* MultiFrame[14][6] = 0; */
+ /* MultiFrame[14][7] = 0; */
+
+ MultiFrame[15][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_APS_IIR);
+ MultiFrame[15][1] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_APS_CORE);
+ /* MultiFrame[15][2] = 0; */
+ MultiFrame[15][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_UL);
+ /* MultiFrame[15][4] = 0; */
+ /* MultiFrame[15][5] = 0; */
+ /* MultiFrame[15][6] = 0; */
+ /* MultiFrame[15][7] = 0; */
+
+ /* MultiFrame[16][0] = 0; */
+ /* MultiFrame[16][1] = 0; */
#define TASK_ASRC_VX_UL_SLT 16
#define TASK_ASRC_VX_UL_IDX 2
- MultiFrame[16][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_UL_16;
- MultiFrame[16][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_VX_UL; // USING ECHO REF MERGED
- //MultiFrame[16][4] = 0;
- //MultiFrame[16][5] = 0;
- //MultiFrame[16][6] = 0;
- //MultiFrame[16][7] = 0;
-
- //MultiFrame[17][0] = 0;
- //MultiFrame[17][1] = 0;
-#define TASK_BT_UL_8_48_SLT 17
-#define TASK_BT_UL_8_48_IDX 2
- MultiFrame[17][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_8_48;
- MultiFrame[17][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_UL2;
- //MultiFrame[17][4] = 0;
- //MultiFrame[17][5] = 0;
- //MultiFrame[17][6] = 0;
- //MultiFrame[17][7] = 0;
-
- MultiFrame[18][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PDM_DL;
- //MultiFrame[18][1] = 0;
- //MultiFrame[18][2] = 0;
- //MultiFrame[18][3] = 0;
- //MultiFrame[18][4] = 0;
- //MultiFrame[18][5] = 0;
- //MultiFrame[18][6] = 0;
- //MultiFrame[18][7] = 0;
-
-#define TASK_IO_MM_DL_SLT 19
+ MultiFrame[16][2] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_16);
+ MultiFrame[16][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_UL);
+ /* MultiFrame[16][4] = 0; */
+ /* MultiFrame[16][5] = 0; */
+ /* MultiFrame[16][6] = 0; */
+ /* MultiFrame[16][7] = 0; */
+
+ /* MultiFrame[17][0] = 0; */
+ /* MultiFrame[17][1] = 0; */
+#define TASK_BT_UL_8_48_SLT 17
+#define TASK_BT_UL_8_48_IDX 2
+ MultiFrame[17][2] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_8_48);
+ MultiFrame[17][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_UL2);
+ /* MultiFrame[17][4] = 0; */
+ /* MultiFrame[17][5] = 0; */
+ /* MultiFrame[17][6] = 0; */
+ /* MultiFrame[17][7] = 0; */
+
+#define TASK_IO_MM_DL_SLT 18
#define TASK_IO_MM_DL_IDX 0
- MultiFrame[19][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_DL;
- //MultiFrame[19][1] = 0
- //MultiFrame[19][2] = 0;
- //MultiFrame[19][3] = 0;
- //MultiFrame[19][4] = 0;
- //MultiFrame[19][5] = 0;
- //MultiFrame[19][6] = 0;
- //MultiFrame[19][7] = 0;
-
- MultiFrame[20][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_TONES_DL;
- MultiFrame[20][1] = 0;
- MultiFrame[20][2] = 0;
- //MultiFrame[20][3] = 0;
- //MultiFrame[20][4] = 0;
- //MultiFrame[20][5] = 0;
- //MultiFrame[20][6] = 0;
- //MultiFrame[20][7] = 0;
-
- //MultiFrame[21][0] = 0;
- //MultiFrame[21][1] = 0;
- //MultiFrame[21][2] = 0;
- //MultiFrame[21][3] = 0;
- //MultiFrame[21][4] = 0;
- //MultiFrame[21][5] = 0;
- //MultiFrame[21][6] = 0;
- //MultiFrame[21][7] = 0;
-
- MultiFrame[22][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DEBUG_IRQFIFO; // MUST STAY ON SLOT 22
- //MultiFrame[22][1] = 0;
- MultiFrame[22][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_EXT_OUT;
- MultiFrame[22][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_EXT_IN;
- MultiFrame[22][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_MM_EXT_IN_SPLIT;
-
- //MultiFrame[22][5] = 0;
- //MultiFrame[22][6] = 0;
- //MultiFrame[22][7] = 0;
-
- MultiFrame[23][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_GAIN_UPDATE;
- //MultiFrame[23][1] = 0;
- //MultiFrame[23][2] = 0;
- //MultiFrame[23][3] = 0;
- //MultiFrame[23][4] = 0;
- //MultiFrame[23][5] = 0;
- //MultiFrame[23][6] = 0;
- //MultiFrame[23][7] = 0;
-
- //MultiFrame[24][0] = 0;
- //MultiFrame[24][1] = 0;
- //MultiFrame[24][2] = 0;
- //MultiFrame[24][3] = 0;
- //MultiFrame[24][4] = 0;
- //MultiFrame[24][5] = 0;
- //MultiFrame[24][6] = 0;
- //MultiFrame[24][7] = 0;
-
- abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
-
- // EANC Fast Loopback
- // dFastLoopback = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_WRAP2;
- // abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_pFastLoopBack_ADDR, (abe_uint32*)&dFastLoopback, sizeof (dFastLoopback));
+ MultiFrame[18][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_DL);
+ /* MultiFrame[18][1] = 0; */
+ /* MultiFrame[18][2] = 0; */
+ /* MultiFrame[18][3] = 0; */
+ /* MultiFrame[18][4] = 0; */
+ /* MultiFrame[18][5] = 0; */
+ /* MultiFrame[18][6] = 0; */
+ /* MultiFrame[18][7] = 0; */
+
+ MultiFrame[19][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_DL);
+ /* MultiFrame[19][1] = 0 */
+ /* MultiFrame[19][2] = 0; */
+ /* MultiFrame[19][3] = 0; */
+ /* MultiFrame[19][4] = 0; */
+ /* MultiFrame[19][5] = 0; */
+ /* MM_UL is moved to OPP 100% */
+ MultiFrame[19][6] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_UL);
+ /* MultiFrame[19][7] = 0; */
+
+
+ MultiFrame[20][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_TONES_DL);
+ /* MultiFrame[20][1] = 0; */
+ /* MultiFrame[20][2] = 0; */
+ /* MultiFrame[20][3] = 0; */
+ /* MultiFrame[20][4] = 0; */
+ /* MultiFrame[20][5] = 0; */
+ /* MultiFrame[20][6] = 0; */
+ /* MultiFrame[20][7] = 0; */
+
+ /* MultiFrame[21][0] = 0; */
+ MultiFrame[21][1] = ABE_TASK_ID(C_ABE_FW_TASK_DEBUGTRACE_VX_ASRCs);
+ MultiFrame[21][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_EXT_OUT);
+ /* MultiFrame[21][3] = 0; */
+ /* MultiFrame[21][4] = 0; */
+ /* MultiFrame[21][5] = 0; */
+ /* MultiFrame[21][6] = 0; */
+ /* MultiFrame[21][7] = 0; */
+
+ /* MUST STAY ON SLOT 22 */
+ MultiFrame[22][0] = ABE_TASK_ID(C_ABE_FW_TASK_DEBUG_IRQFIFO);
+ MultiFrame[22][1] = ABE_TASK_ID(C_ABE_FW_TASK_INIT_FW_MEMORY);
+ MultiFrame[22][2] = 0;
+ MultiFrame[22][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_EXT_IN);
+ MultiFrame[22][4] = ABE_TASK_ID(C_ABE_FW_TASK_MM_EXT_IN_SPLIT);
+ /* MultiFrame[22][5] = 0; */
+ /* MultiFrame[22][6] = 0; */
+ /* MultiFrame[22][7] = 0; */
+
+ MultiFrame[23][0] = ABE_TASK_ID(C_ABE_FW_TASK_GAIN_UPDATE);
+ /* MultiFrame[23][1] = 0; */
+ /* MultiFrame[23][2] = 0; */
+ /* MultiFrame[23][3] = 0; */
+ /* MultiFrame[23][4] = 0; */
+ /* MultiFrame[23][5] = 0; */
+ /* MultiFrame[23][6] = 0; */
+ /* MultiFrame[23][7] = 0; */
+
+ /* MultiFrame[24][0] = 0; */
+ /* MultiFrame[24][1] = 0; */
+ /* MultiFrame[24][2] = 0; */
+ /* MultiFrame[24][3] = 0; */
+ /* MultiFrame[24][4] = 0; */
+ /* MultiFrame[24][5] = 0; */
+ /* MultiFrame[24][6] = 0; */
+ /* MultiFrame[24][7] = 0; */
+
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR,
+ (u32*)MultiFrame, sizeof (MultiFrame));
/* reset the uplink router */
- n = sizeof(aUplinkMuxing);
- for(i = 0; i < n; i++)
+ n = (D_aUplinkRouting_sizeof)>>1;
+ for (i = 0; i < n; i++)
aUplinkMuxing[i] = ZERO_labelID;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_aUplinkRouting_ADDR, (abe_uint32 *)aUplinkMuxing, sizeof(aUplinkMuxing));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_aUplinkRouting_ADDR,
+ (u32 *)aUplinkMuxing, sizeof (aUplinkMuxing));
}
-/*
- * ABE_INIT_ATC
- *
- * Parameter :
- * prot : protocol being used
- *
- * Operations :
- * load the DMEM ATC/AESS descriptors
- *
- * Return value :
+/**
+ * abe_init_atc
+ * @id: ABE port ID
*
+ * load the DMEM ATC/AESS descriptors
*/
-void abe_init_atc(abe_port_id id)
+void abe_init_atc (u32 id)
{
abe_satcdescriptor_aess desc;
- abe_uint8 iter;
- abe_int32 datasize;
+ u8 iter;
+ s32 datasize;
- // load default values of the descriptor
- desc.rdpt = desc.wrpt = desc.irqdest = desc.cberr = desc.desen = desc.nw =0;
+ /* load default values of the descriptor */
+ desc.rdpt = desc.wrpt = desc.irqdest = desc.cberr = 0;
+ desc.desen = desc.nw =0;
desc.reserved0 = desc.reserved1 = desc.reserved2 = 0;
desc.srcid = desc.destid = desc.badd = desc.iter = desc.cbsize = 0;
datasize = abe_dma_port_iter_factor (&((abe_port[id]).format));
- iter = (abe_uint8) abe_dma_port_iteration (&((abe_port[id]).format));
-
- if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN) /* IN from AESS point of view */
+ iter = (u8) abe_dma_port_iteration (&((abe_port[id]).format));
+
+
+ /* if the ATC FIFO is too small there will be two ABE firmware
+ utasks to do the copy this happems on DMIC and MCPDMDL */
+ /* VXDL_8kMono = 4 = 2 + 2x1 */
+ /* VXDL_16kstereo = 12 = 8 + 2x2 */
+ /* MM_DL_1616 = 14 = 12 + 2x1 */
+ /* DMIC = 84 = 72 + 2x6 */
+ /* VXUL_8kMono = 2 */
+ /* VXUL_16kstereo = 4 */
+ /* MM_UL2_Stereo = 4 */
+ /* PDMDL = 12 */
+
+ /* IN from AESS point of view */
+ if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN)
if (iter + 2*datasize > 126)
desc.wrpt = (iter >>1) + (3*datasize);
else
@@ -356,167 +362,152 @@ void abe_init_atc(abe_port_id id)
desc.wrpt = 0 + 3*datasize;
switch ((abe_port[id]).protocol.protocol_switch) {
- case SLIMBUS_PORT_PROT:
+ case SLIMBUS_PORT_PROT :
desc.cbdir = (abe_port[id]).protocol.direction;
- desc.cbsize = (abe_port[id]).protocol.p.prot_slimbus.buf_size;
+ desc.cbsize = (abe_port[id]).
+ protocol.p.prot_slimbus.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_slimbus.buf_addr1) >> 4;
desc.iter = (abe_port[id]).protocol.p.prot_slimbus.iter;
- desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.prot_slimbus.desc_addr1 >> 3];
+ desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.
+ prot_slimbus.desc_addr1 >> 3];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
(abe_port[id]).protocol.p.prot_slimbus.desc_addr1,
- (abe_uint32*)&desc, sizeof(desc));
+ (u32*)&desc, sizeof (desc));
desc.badd = (abe_port[id]).protocol.p.prot_slimbus.buf_addr2;
- desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.prot_slimbus.desc_addr2 >> 3];
+ desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.
+ prot_slimbus.desc_addr2 >> 3];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
(abe_port[id]).protocol.p.prot_slimbus.desc_addr2,
- (abe_uint32*)&desc, sizeof(desc));
+ (u32*)&desc, sizeof (desc));
break;
- case SERIAL_PORT_PROT:
+ case SERIAL_PORT_PROT :
desc.cbdir = (abe_port[id]).protocol.direction;
desc.cbsize = (abe_port[id]).protocol.p.prot_serial.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_serial.buf_addr) >> 4;
desc.iter = (abe_port[id]).protocol.p.prot_serial.iter;
- desc.srcid = abe_atc_srcid[(abe_port[id]).protocol.p.prot_serial.desc_addr >> 3];
- desc.destid = abe_atc_dstid[(abe_port[id]).protocol.p.prot_serial.desc_addr >> 3];
+ desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.
+ prot_serial.desc_addr >> 3];
+ desc.destid = abe_atc_dstid [(abe_port[id]).protocol.p.
+ prot_serial.desc_addr >> 3];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
(abe_port[id]).protocol.p.prot_serial.desc_addr,
- (abe_uint32*)&desc, sizeof(desc));
+ (u32*)&desc, sizeof (desc));
break;
- case DMIC_PORT_PROT:
+ case DMIC_PORT_PROT :
desc.cbdir = ABE_ATC_DIRECTION_IN;
desc.cbsize = (abe_port[id]).protocol.p.prot_dmic.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_dmic.buf_addr) >> 4;
desc.iter = DMIC_ITER;
- desc.srcid = abe_atc_srcid[ABE_ATC_DMIC_DMA_REQ];
+ desc.srcid = abe_atc_srcid [ABE_ATC_DMIC_DMA_REQ];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_DMIC_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof(desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ ABE_ATC_DMIC_DMA_REQ * ATC_SIZE, (u32*)&desc,
+ sizeof (desc));
break;
- case MCPDMDL_PORT_PROT:
- abe_global_mcpdm_control = abe_port[id].protocol.p.prot_mcpdmdl.control; /* Control allowed on McPDM DL */
+ case MCPDMDL_PORT_PROT :
desc.cbdir = ABE_ATC_DIRECTION_OUT;
desc.cbsize = (abe_port[id]).protocol.p.prot_mcpdmdl.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_mcpdmdl.buf_addr) >> 4;
desc.iter = MCPDM_DL_ITER;
- desc.destid = abe_atc_dstid[ABE_ATC_MCPDMDL_DMA_REQ];
+ desc.destid = abe_atc_dstid [ABE_ATC_MCPDMDL_DMA_REQ];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_MCPDMDL_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof(desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ ABE_ATC_MCPDMDL_DMA_REQ * ATC_SIZE, (u32*)&desc,
+ sizeof (desc));
break;
- case MCPDMUL_PORT_PROT:
+ case MCPDMUL_PORT_PROT :
desc.cbdir = ABE_ATC_DIRECTION_IN;
desc.cbsize = (abe_port[id]).protocol.p.prot_mcpdmul.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_mcpdmul.buf_addr) >> 4;
desc.iter = MCPDM_UL_ITER;
- desc.srcid = abe_atc_srcid[ABE_ATC_MCPDMUL_DMA_REQ];
+ desc.srcid = abe_atc_srcid [ABE_ATC_MCPDMUL_DMA_REQ];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_MCPDMUL_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof(desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ ABE_ATC_MCPDMUL_DMA_REQ * ATC_SIZE, (u32*)&desc,
+ sizeof (desc));
break;
case PINGPONG_PORT_PROT:
/* software protocol, nothing to do on ATC */
break;
- case DMAREQ_PORT_PROT:
+ case DMAREQ_PORT_PROT :
desc.cbdir = (abe_port[id]).protocol.direction;
desc.cbsize = (abe_port[id]).protocol.p.prot_dmareq.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_dmareq.buf_addr) >> 4;
- desc.iter = 1; /* CBPr needs ITER=1. this is the eDMA job to do the iterations */
+
+ /* CBPr needs ITER=1. this is the eDMA job to do the iterations */
+ desc.iter = 1;
+
/* input from ABE point of view */
if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN) {
- desc.rdpt = 127;
- desc.wrpt = 0;
- desc.srcid = abe_atc_srcid[(abe_port[id]).protocol.p.prot_dmareq.desc_addr >> 3];
+
+ /* desc.rdpt = 127; */
+ /* desc.wrpt = 0; */
+ desc.srcid = abe_atc_srcid
+ [(abe_port[id]).protocol.p.
+ prot_dmareq.desc_addr >> 3];
} else {
- desc.rdpt = 0;
- desc.wrpt = 127;
- desc.destid = abe_atc_dstid[(abe_port[id]).protocol.p.prot_dmareq.desc_addr >> 3];
+
+ /* desc.rdpt = 0; */
+ /* desc.wrpt = 127; */
+ desc.destid = abe_atc_dstid
+ [(abe_port[id]).protocol.p.
+ prot_dmareq.desc_addr >> 3];
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr, (abe_uint32*)&desc, sizeof (desc));
- break;
- default:
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ (abe_port[id]).protocol.p.
+ prot_dmareq.desc_addr,
+ (u32*)&desc, sizeof (desc));
break;
}
}
-/*
- * ABE_RESET_ATC
- *
- * Parameter:
- * prot : protocol being used
- *
- * Operations:
- * reset R/W pointers of a FIFO
- *
- * Return value:
+/**
+ * abe_init_dma_t
+ * @ id: ABE port ID
+ * @ prot: protocol being used
*
+ * load the dma_t with physical information from AE memory mapping
*/
-void abe_reset_atc(abe_uint32 atc_index)
-{
- abe_satcdescriptor_aess desc;
-
- desc.rdpt = desc.wrpt = desc.irqdest = desc.cberr = desc.desen = desc.nw =0;
- desc.reserved0 = desc.reserved1 = desc.reserved2 = 0;
- desc.srcid = desc.destid = desc.badd = desc.iter = desc.cbsize = 0;
-
- desc.cbdir = ABE_ATC_DIRECTION_IN;
- desc.cbsize = 4;
- desc.badd = 448 >> 4;
- desc.iter = 1;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_DMIC_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof (desc));
-}
-
-/*
- *
- * ABE_INIT_DMA_T
- * Parameter :
- * prot : protocol being used
- *
- * Operations :
- * load the dma_t with physical information from AE memory mapping
- *
- * Return value :
- *
- */
-void abe_init_dma_t(abe_port_id id, abe_port_protocol_t *prot)
+void abe_init_dma_t (u32 id, abe_port_protocol_t *prot)
{
abe_dma_t_offset dma;
- abe_uint32 idx;
+ u32 idx;
- dma.data = 0; /* default dma_t points to address 0000... */
+ /* default dma_t points to address 0000... */
+ dma.data = 0;
dma.iter = 0;
switch (prot->protocol_switch) {
case PINGPONG_PORT_PROT:
for (idx = 0; idx < 32; idx++) {
- if (((prot->p).prot_pingpong.irq_data) == (abe_uint32)(1 << idx))
+ if (((prot->p).prot_pingpong.irq_data) == (u32)(1 << idx))
break;
}
(prot->p).prot_dmareq.desc_addr = (CBPr_DMA_RTX0+idx)*ATC_SIZE;
+ /* translate byte address/size in DMEM words */
dma.data = (prot->p).prot_pingpong.buf_addr >> 2;
dma.iter = (prot->p).prot_pingpong.buf_size >> 2;
break;
- case DMAREQ_PORT_PROT:
+ case DMAREQ_PORT_PROT :
for (idx = 0; idx < 32; idx++) {
- if (((prot->p).prot_dmareq.dma_data) == (abe_uint32)(1 << idx))
+ if (((prot->p).prot_dmareq.dma_data) == (u32)(1 << idx))
break;
}
dma.data = (CIRCULAR_BUFFER_PERIPHERAL_R__0 + idx*4);
dma.iter = (prot->p).prot_dmareq.iter;
(prot->p).prot_dmareq.desc_addr = (CBPr_DMA_RTX0+idx)*ATC_SIZE;
break;
- case SLIMBUS_PORT_PROT:
- case SERIAL_PORT_PROT:
- case DMIC_PORT_PROT:
- case MCPDMDL_PORT_PROT:
- case MCPDMUL_PORT_PROT:
- default:
+ case SLIMBUS_PORT_PROT :
+ case SERIAL_PORT_PROT :
+ case DMIC_PORT_PROT :
+ case MCPDMDL_PORT_PROT :
+ case MCPDMUL_PORT_PROT :
+ default :
break;
}
@@ -524,188 +515,206 @@ void abe_init_dma_t(abe_port_id id, abe_port_protocol_t *prot)
abe_port [id].dma = dma;
}
-/*
- * ABE_DISENABLE_DMA_REQUEST
+/**
+ * abe_disenable_dma_request
* Parameter:
* Operations:
* Return value:
*/
-void abe_disable_enable_dma_request(abe_port_id id, abe_uint32 on_off)
+void abe_disable_enable_dma_request (u32 id, u32 on_off)
{
ABE_SIODescriptor desc;
ABE_SPingPongDescriptor desc_pp;
- abe_uint8 desc_third_word[4], irq_dmareq_field;
- abe_uint32 sio_desc_address;
- abe_uint32 struct_offset;
+ u8 desc_third_word[4], irq_dmareq_field;
+ u32 sio_desc_address;
+ u32 struct_offset;
if (abe_port[id].protocol.protocol_switch == PINGPONG_PORT_PROT) {
- irq_dmareq_field = (abe_uint8)(on_off * abe_port[id].protocol.p.prot_pingpong.irq_data);
+ irq_dmareq_field = (u8)(on_off * abe_port[id].protocol.p.prot_pingpong.irq_data);
sio_desc_address = D_PingPongDesc_ADDR;
- struct_offset = (abe_uint32)&(desc_pp.data_size) - (abe_uint32)&(desc_pp);
-
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address + struct_offset, (abe_uint32 *)desc_third_word, 4);
- desc_third_word[2] = irq_dmareq_field;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address + struct_offset, (abe_uint32 *)desc_third_word, 4);
+ struct_offset = (u32)&(desc_pp.data_size) - (u32)&(desc_pp);
+
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ sio_desc_address + struct_offset,
+ (u32 *)desc_third_word, 4);
+ desc_third_word [2] = irq_dmareq_field;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ sio_desc_address + struct_offset,
+ (u32 *)desc_third_word, 4);
} else {
- sio_desc_address = dmem_port_descriptors + (id * sizeof(ABE_SIODescriptor));
- abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address, (abe_uint32*)&desc, sizeof (desc));
+ sio_desc_address = dmem_port_descriptors + (
+ id * sizeof(ABE_SIODescriptor));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ sio_desc_address, (u32*)&desc,
+ sizeof (desc));
if (on_off) {
- desc.atc_irq_data = (abe_uint8) abe_port[id].protocol.p.prot_dmareq.dma_data;
+ desc.atc_irq_data = (u8) abe_port[id].protocol.p.
+ prot_dmareq.dma_data;
desc.on_off = 0x80;
} else {
desc.atc_irq_data = 0;
desc.on_off = 0;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
+ (u32*)&desc, sizeof (desc));
}
}
-void abe_enable_dma_request(abe_port_id id)
+void abe_enable_dma_request (u32 id)
{
- abe_disable_enable_dma_request(id, 1);
+ abe_disable_enable_dma_request (id, 1);
}
-/*
- * ABE_DISABLE_DMA_REQUEST
+/**
+ * abe_disable_dma_request
*
* Parameter:
* Operations:
* Return value:
*
*/
-void abe_disable_dma_request(abe_port_id id)
+void abe_disable_dma_request (u32 id)
{
- abe_disable_enable_dma_request(id, 0);
+ abe_disable_enable_dma_request (id, 0);
}
-
-/*
- * ABE_ENABLE_ATC
+/**
+ * abe_enable_atc
* Parameter:
* Operations:
* Return value:
*/
-void abe_enable_atc(abe_port_id id)
+void abe_enable_atc (u32 id)
{
- just_to_avoid_the_many_warnings = (abe_port_id)id;
-#if 0
- abe_satcdescriptor_aess desc;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
- desc.desen = 1;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
-#endif
}
-/*
- * ABE_DISABLE_ATC
+/**
+ * abe_disable_atc
* Parameter:
* Operations:
* Return value:
*/
-void abe_disable_atc(abe_port_id id)
+void abe_disable_atc (u32 id)
{
abe_satcdescriptor_aess desc;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
+ (u32*)&desc, sizeof (desc));
desc.desen = 0;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
+ (u32*)&desc, sizeof (desc));
}
-/*
- * ABE_INIT_IO_TASKS
+/**
+ * abe_init_io_tasks
+ * @prot : protocol being used
*
- * Parameter :
- * prot : protocol being used
- *
- * Operations :
- * load the micro-task parameters doing to DMEM <==> SMEM data moves
- *
- * I/O descriptors input parameters :
- * For Read from DMEM usually THR1/THR2 = X+1/X-1
- * For Write to DMEM usually THR1/THR2 = 2/0
- * UP_1/2 =X+1/X-1
- *
- * Return value :
+ * load the micro-task parameters doing to DMEM <==> SMEM data moves
*
+ * I/O descriptors input parameters :
+ * For Read from DMEM usually THR1/THR2 = X+1/X-1
+ * For Write to DMEM usually THR1/THR2 = 2/0
+ * UP_1/2 =X+1/X-1
*/
-void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_protocol_t *prot)
+void abe_init_io_tasks (u32 id, abe_data_format_t *format, abe_port_protocol_t *prot)
{
ABE_SIODescriptor desc;
ABE_SPingPongDescriptor desc_pp;
- abe_uint32 x_io, direction, iter_samples, smem1, smem2, smem3, io_sub_id;
- abe_uint32 copy_func_index, before_func_index, after_func_index;
- abe_uint32 dmareq_addr, dmareq_field;
- abe_uint32 sio_desc_address, datasize, iter, nsamp, datasize2, dOppMode32;
- abe_uint32 atc_ptr_saved, atc_ptr_saved2, copy_func_index1;
- abe_uint32 copy_func_index2, atc_desc_address1, atc_desc_address2;
- short MultiFrame[PROCESSING_SLOTS][TASKS_IN_SLOT];
+ u32 x_io, direction, iter_samples, smem1, smem2, smem3, io_sub_id;
+ u32 copy_func_index, before_func_index, after_func_index;
+ u32 dmareq_addr, dmareq_field;
+ u32 sio_desc_address, datasize, iter, nsamp, datasize2, dOppMode32;
+ u32 atc_ptr_saved, atc_ptr_saved2, copy_func_index1;
+ u32 copy_func_index2, atc_desc_address1, atc_desc_address2;
if (prot->protocol_switch == PINGPONG_PORT_PROT) {
+
+ /* MM_DL managed in ping-pong */
if (MM_DL_PORT == id) {
- // @@@@ reset local memory
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame,
+ sizeof (MultiFrame));
MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PING_PONG;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ ABE_TASK_ID(C_ABE_FW_TASK_IO_PING_PONG);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
} else {
abe_dbg_param |= ERR_API;
abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
- smem1 = (abe_uint8) abe_port[id].smem_buffer1;
- copy_func_index = (abe_uint8) abe_dma_port_copy_subroutine_id (id);
- dmareq_addr = abe_port[id].protocol.p.prot_pingpong.irq_addr;
+ /* set the SMEM buffer -- programming sequence */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_maxTaskBytesInSlot_ADDR,
+ &dOppMode32, sizeof (u32));
+ if (dOppMode32 == DOPPMODE32_OPP100)
+ /* ASRC input buffer, size 40 */
+ smem1 = smem_mm_dl_opp100;
+ else
+ /* at OPP 25/50 or without ASRC */
+ smem1 = smem_mm_dl_opp25;
+
+ copy_func_index = (u8) abe_dma_port_copy_subroutine_id (id);
+ dmareq_addr = abe_port[id].protocol.p.prot_pingpong.irq_addr;
dmareq_field = abe_port[id].protocol.p.prot_pingpong.irq_data;
datasize = abe_dma_port_iter_factor (format);
+
+ /* number of "samples" either mono or stereo */
iter = abe_dma_port_iteration (format);
- iter_samples = (iter / datasize); /* number of "samples" either mono or stereo */
+ iter_samples = (iter / datasize);
/* load the IO descriptor */
- desc_pp.drift_ASRC = 0; /* no drift */
- desc_pp.drift_io = 0; /* no drift */
- desc_pp.hw_ctrl_addr = (abe_uint16) dmareq_addr;
- desc_pp.copy_func_index = (abe_uint8) copy_func_index;
- desc_pp.smem_addr = (abe_uint8) smem1;
- desc_pp.atc_irq_data = (abe_uint8) dmareq_field; /* DMA req 0 is used for CBPr0 */
- desc_pp.x_io = (abe_uint8) iter_samples; /* size of block transfer */
- desc_pp.data_size = (abe_uint8) datasize;
- desc_pp.workbuff_BaseAddr = (abe_uint16) (abe_base_address_pingpong [0]); /* address comunicated in Bytes */
- desc_pp.workbuff_Samples = (abe_uint16) iter_samples; /* size comunicated in XIO sample */
- desc_pp.nextbuff0_BaseAddr = (abe_uint16) (abe_base_address_pingpong [0]);
- desc_pp.nextbuff0_Samples = (abe_uint16) ((abe_size_pingpong >> 2)/datasize);
- desc_pp.nextbuff1_BaseAddr = (abe_uint16) (abe_base_address_pingpong [1]);
- desc_pp.nextbuff1_Samples = (abe_uint16) ((abe_size_pingpong >> 2)/datasize);
+
+ /* no drift */
+ desc_pp.drift_ASRC = 0;
+
+ /* no drift */
+ desc_pp.drift_io = 0;
+ desc_pp.hw_ctrl_addr = (u16) dmareq_addr;
+ desc_pp.copy_func_index = (u8) copy_func_index;
+ desc_pp.smem_addr = (u8) smem1;
+
+ /* DMA req 0 is used for CBPr0 */
+ desc_pp.atc_irq_data = (u8) dmareq_field;
+
+ /* size of block transfer */
+ desc_pp.x_io = (u8) iter_samples;
+ desc_pp.data_size = (u8) datasize;
+
+ /* address comunicated in Bytes */
+ desc_pp.workbuff_BaseAddr = (u16) (abe_base_address_pingpong [1]);
+
+ /* size comunicated in XIO sample */
+ desc_pp.workbuff_Samples = (u16) iter_samples;
+
+ desc_pp.nextbuff0_BaseAddr = (u16) (abe_base_address_pingpong [0]);
+ desc_pp.nextbuff0_Samples = (u16) ((abe_size_pingpong >> 2)/datasize);
+ desc_pp.nextbuff1_BaseAddr = (u16) (abe_base_address_pingpong [1]);
+ desc_pp.nextbuff1_Samples = (u16) ((abe_size_pingpong >> 2)/datasize);
+
+ /* next buffer to send is B1, first IRQ fills B0 */
desc_pp.counter = 1;
/* send a DMA req to fill B0 with N samples
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, ABE_DMASTATUS_RAW, &(abe_port[id].protocol.p.prot_pingpong.irq_data), 4); */
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC, ABE_DMASTATUS_RAW,
+ &(abe_port[id].protocol.p.prot_pingpong.irq_data), 4); */
sio_desc_address = D_PingPongDesc_ADDR;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc_pp, sizeof (desc_pp));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
+ (u32*)&desc_pp, sizeof (desc_pp));
} else {
io_sub_id = dmareq_addr = ABE_DMASTATUS_RAW;
dmareq_field = 0;
atc_desc_address1 = atc_desc_address2 = 0;
- datasize2=datasize = abe_dma_port_iter_factor(format);
- x_io = (abe_uint8) abe_dma_port_iteration(format);
+ datasize2=datasize = abe_dma_port_iter_factor (format);
+ x_io = (u8) abe_dma_port_iteration (format);
nsamp = (x_io / datasize);
atc_ptr_saved2=atc_ptr_saved = DMIC_ATC_PTR_labelID + id;
@@ -713,74 +722,82 @@ void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_proto
smem1 = abe_port[id].smem_buffer1;
smem3 = smem2 = abe_port[id].smem_buffer2;
- copy_func_index1 = (abe_uint8) abe_dma_port_copy_subroutine_id(id);
- before_func_index = after_func_index = copy_func_index2 = NULL_COPY_CFPID;
+ copy_func_index1 = (u8) abe_dma_port_copy_subroutine_id (id);
+ before_func_index = after_func_index =
+ copy_func_index2 = NULL_COPY_CFPID;
/* MM_DL managed in non-ping-pong mode */
if (MM_DL_PORT == id) {
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame, sizeof (MultiFrame));
- MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] = D_tasksList_ADDR +
- sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_DL;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR,
- (abe_uint32 *)MultiFrame, sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame,
+ sizeof (MultiFrame));
+ MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] =
+ D_tasksList_ADDR +
+ sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_DL;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame, sizeof (MultiFrame));
}
switch (prot->protocol_switch) {
- case DMIC_PORT_PROT:
+ case DMIC_PORT_PROT :
/* DMIC port is read in two steps */
x_io = x_io >> 1;
nsamp = nsamp >> 1;
atc_desc_address1 = ABE_ATC_DMIC_DMA_REQ*ATC_SIZE;
io_sub_id = IO_IP_CFPID;
break;
- case MCPDMDL_PORT_PROT:
- /* PDMDL port is written to in two steps */
+ case MCPDMDL_PORT_PROT :
+ /* PDMDL port is written to in two steps */
x_io = x_io >> 1;
atc_desc_address1 = ABE_ATC_MCPDMDL_DMA_REQ*ATC_SIZE;
io_sub_id = IO_IP_CFPID;
break;
- case MCPDMUL_PORT_PROT:
+ case MCPDMUL_PORT_PROT :
atc_desc_address1 = ABE_ATC_MCPDMUL_DMA_REQ*ATC_SIZE;
io_sub_id = IO_IP_CFPID;
break;
- case SLIMBUS_PORT_PROT:
- atc_desc_address1 = abe_port[id].protocol.p.prot_slimbus.desc_addr1;
- atc_desc_address2 = abe_port[id].protocol.p.prot_slimbus.desc_addr2;
+ case SLIMBUS_PORT_PROT :
+ atc_desc_address1 = abe_port[id].protocol.p.
+ prot_slimbus.desc_addr1;
+ atc_desc_address2 = abe_port[id].protocol.p.
+ prot_slimbus.desc_addr2;
copy_func_index2 = NULL_COPY_CFPID;
-/* @@@@@@
-#define SPLIT_SMEM_CFPID 9
-#define MERGE_SMEM_CFPID 10
-#define SPLIT_TDM_12_CFPID 11
-#define MERGE_TDM_12_CFPID 12
-*/
- io_sub_id = IO_IP_CFPID;
- case SERIAL_PORT_PROT: /* McBSP/McASP */
- atc_desc_address1 = (abe_int16) abe_port[id].protocol.p.prot_serial.desc_addr;
- io_sub_id = IO_IP_CFPID;
+ /* @@@@@@
+ #define SPLIT_SMEM_CFPID 9
+ #define MERGE_SMEM_CFPID 10
+ #define SPLIT_TDM_12_CFPID 11
+ #define MERGE_TDM_12_CFPID 12
+ */
+ io_sub_id = IO_IP_CFPID;
break;
- case DMAREQ_PORT_PROT: /* DMA w/wo CBPr */
- dmareq_addr = abe_port[id].protocol.p.prot_dmareq.dma_addr;
- dmareq_field = 0;
- atc_desc_address1 = abe_port[id].protocol.p.prot_dmareq.desc_addr;
- io_sub_id = IO_DMAREQ_CFPID;
+ case SERIAL_PORT_PROT : /* McBSP/McASP */
+ atc_desc_address1 = (s16) abe_port[id].protocol.p.
+ prot_serial.desc_addr;
+ io_sub_id = IO_IP_CFPID;
break;
- default:
+ case DMAREQ_PORT_PROT : /* DMA w/wo CBPr */
+ dmareq_addr = abe_port[id].protocol.p.
+ prot_dmareq.dma_addr;
+ dmareq_field = 0;
+ atc_desc_address1 = abe_port[id].protocol.p.
+ prot_dmareq.desc_addr;
+ io_sub_id = IO_IP_CFPID;
break;
}
/* special situation of the PING_PONG protocol which has its own SIO descriptor format */
- /* Sequence of operations on ping-pong buffers B0/B1
- * ---------- time --------------------------------------------->>>>
- * Host Application is ready to send data from DDR to B0
- * SDMA is initialized from "abe_connect_irq_ping_pong_port" to B0
- * ABE HAL init FW to B0
- * send DMAreq to fill B0
- * FIRMWARE starts sending B1 data, sends DMAreq v
- * continue with B0, sends DMAreq v continue with B1
- * DMAreq v (direct access from HAL to AESS regs)
- * v (from ABE_FW) v (from ABE_FW)
- * SDMA | fills B0 | fills B1...| fills B0...
+ /*
+ Sequence of operations on ping-pong buffers B0/B1
+
+ ----------------------------------------------------------------- time --------------------------------------------->>>>
+ Host Application is ready to send data from DDR to B0
+ SDMA is initialized from "abe_connect_irq_ping_pong_port" to B0
+
+ FIRMWARE starts with #12 B1 data, sends IRQ/DMAreq sens #pong B1 data sends IRQ/DMAreq sends #ping B0 v sends B1 samples
+ ARM / SDMA | fills B0 | fills B1 ... | fills B0 ...
+ Counter 0 1 2 3
*/
if (MM_UL_PORT == id) {
@@ -791,202 +808,203 @@ void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_proto
/* check for 8kHz/16kHz */
if (VX_DL_PORT == id) {
abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_DL_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8);
MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_DL_8_48;
- smem1 = IO_VX_DL_ASRC_labelID; /*Voice_8k_DL_labelID*/
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_8_48);
+
+ /*Voice_8k_DL_labelID*/
+ smem1 = IO_VX_DL_ASRC_labelID;
} else {
- MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_DL_16;
- MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_DL_16_48;
- smem1 = IO_VX_DL_ASRC_labelID; /* Voice_16k_DL_labelID */
+ MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_16);
+ MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_16_48);
+
+ /* Voice_16k_DL_labelID */
+ smem1 = IO_VX_DL_ASRC_labelID;
}
abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
/* check for 8kHz/16kHz */
if (VX_UL_PORT == id) {
abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_UL_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_8);
MultiFrame[TASK_VX_UL_SLT][TASK_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_48_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_8);
/* MultiFrame[TASK_ECHO_SLT][TASK_ECHO_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ECHO_REF_48_8; */
+ ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_48_8); */
smem1 = Voice_8k_UL_labelID;
} else {
MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_UL_16;
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_16);
MultiFrame[TASK_VX_UL_SLT][TASK_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_48_16;
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_16);
/* MultiFrame[TASK_ECHO_SLT][TASK_ECHO_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ECHO_REF_48_16; */
+ ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_48_16); */
smem1 = Voice_16k_UL_labelID;
}
abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
/* check for 8kHz/16kHz */
if (BT_VX_DL_PORT == id) {
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ (u32*)MultiFrame, sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_DL_48_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
smem1 = BT_DL_8k_labelID;
} else {
MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_DL_48_16;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_16);
smem1 = BT_DL_16k_labelID;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
/* check for 8kHz/16kHz */
if (BT_VX_UL_PORT == id) {
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame, sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_BT_UL_8_48_SLT][TASK_BT_UL_8_48_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_8_48;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_8_48);
smem1 = BT_UL_8k_labelID;
} else {
MultiFrame[TASK_BT_UL_8_48_SLT][TASK_BT_UL_8_48_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_16_48;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_16_48);
smem1 = BT_UL_16k_labelID;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
if (MM_DL_PORT == id) {
- //@@@ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
- //@@@ MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO2_MM_DL;
- //@@@ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
- /* set the SMEM buffer @@@@@ programming sequence : OPP must be set before channel is defined */
- abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_maxTaskBytesInSlot_ADDR, &dOppMode32, sizeof(abe_uint32));
+ /* check for CBPr / serial_port / Ping-pong access */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
+ MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_DL);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
+
+ /* set the SMEM buffer -- programming sequence */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_maxTaskBytesInSlot_ADDR, &dOppMode32,
+ sizeof (u32));
+
if (dOppMode32 == DOPPMODE32_OPP100)
- smem1 = smem_mm_dl_opp100; /* ASRC input buffer, size 40 */
+ /* ASRC input buffer, size 40 */
+ smem1 = smem_mm_dl_opp100;
else
- smem1 = smem_mm_dl_opp25; /* at OPP 25/50 or without ASRC */
+ /* at OPP 25/50 or without ASRC */
+ smem1 = smem_mm_dl_opp25;
}
if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN)
direction = 0;
else
- direction = 3; /* offset of the write pointer in the ATC descriptor */
+ /* offset of the write pointer in the ATC descriptor */
+ direction = 3;
desc.drift_ASRC = 0;
desc.drift_io = 0;
- desc.io_type_idx = (abe_uint8) io_sub_id;
- desc.samp_size = (abe_uint8) datasize;
- //desc.unused1 = (abe_uint8)0;
- //desc.unused2 = (abe_uint8)0;
-
- desc.hw_ctrl_addr = (abe_uint16) (dmareq_addr << 2);
- desc.atc_irq_data = (abe_uint8) dmareq_field;
- desc.flow_counter = (abe_uint16) 0;
-
- desc.direction_rw = (abe_uint8) direction;
- desc.nsamp = (abe_uint8) nsamp;
- desc.x_io = (abe_uint8) x_io;
- desc.on_off = 0x80; // set ATC ON
-
- desc.split_addr1 = (abe_uint16) smem1;
- desc.split_addr2 = (abe_uint16) smem2;
- desc.split_addr3 = (abe_uint16) smem3;
- desc.before_f_index = (abe_uint8) before_func_index;
- desc.after_f_index = (abe_uint8) after_func_index;
-
- desc.smem_addr1 = (abe_uint16) smem1;
- desc.atc_address1 = (abe_uint16) atc_desc_address1;
- desc.atc_pointer_saved1 = (abe_uint16) atc_ptr_saved;
- desc.data_size1 = (abe_uint8) datasize;
- desc.copy_f_index1 = (abe_uint8) copy_func_index1;
-
- desc.smem_addr2 = (abe_uint16) smem2;
- desc.atc_address2 = (abe_uint16) atc_desc_address2;
- desc.atc_pointer_saved2 = (abe_uint16) atc_ptr_saved2;
- desc.data_size2 = (abe_uint8) datasize2;
- desc.copy_f_index2 = (abe_uint8) copy_func_index2;
-
- sio_desc_address = dmem_port_descriptors + (id * sizeof(ABE_SIODescriptor));
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- sio_desc_address, (abe_uint32*)&desc, sizeof(desc));
+ desc.io_type_idx = (u8) io_sub_id;
+ desc.samp_size = (u8) datasize;
+
+ desc.hw_ctrl_addr = (u16) (dmareq_addr << 2);
+ desc.atc_irq_data = (u8) dmareq_field;
+ desc.flow_counter = (u16) 0;
+
+ desc.direction_rw = (u8) direction;
+ desc.nsamp = (u8) nsamp;
+ desc.x_io = (u8) x_io;
+ desc.on_off = 0x80; /* set ATC ON */
+
+ desc.split_addr1 = (u16) smem1;
+ desc.split_addr2 = (u16) smem2;
+ desc.split_addr3 = (u16) smem3;
+ desc.before_f_index = (u8) before_func_index;
+ desc.after_f_index = (u8) after_func_index;
+
+ desc.smem_addr1 = (u16) smem1;
+ desc.atc_address1 = (u16) atc_desc_address1;
+ desc.atc_pointer_saved1 = (u16) atc_ptr_saved;
+ desc.data_size1 = (u8) datasize;
+ desc.copy_f_index1 = (u8) copy_func_index1;
+
+ desc.smem_addr2 = (u16) smem2;
+ desc.atc_address2 = (u16) atc_desc_address2;
+ desc.atc_pointer_saved2 = (u16) atc_ptr_saved2;
+ desc.data_size2 = (u8) datasize2;
+ desc.copy_f_index2 = (u8) copy_func_index2;
+
+ sio_desc_address = dmem_port_descriptors + (id *
+ sizeof(ABE_SIODescriptor));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ sio_desc_address,
+ (u32*)&desc, sizeof (desc));
}
}
-/*
- * ABE_INIT_DMIC
- *
- * Parameter :
- * x : d
- *
- * Operations :
+/**
+ * abe_init_dmic
+ * @x: d
*
*
- * Return value :
- *
*/
-void abe_init_dmic(abe_uint32 x)
+void abe_init_dmic (u32 x)
{
- just_to_avoid_the_many_warnings = x;
+
}
-/*
- * ABE_INIT_MCPDM
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_init_mcpdm
+ * @x: d
*
*/
-void abe_init_mcpdm(abe_uint32 x)
+void abe_init_mcpdm (u32 x)
{
- just_to_avoid_the_many_warnings = x;
+
}
-/*
- * ABE_RESET_FEATURE
- *
- * Parameter :
- * x : index of the feature to be initialized
- *
- * Operations :
- * reload the configuration
- *
- * Return value :
+/**
+ * abe_reset_feature
+ * @x: index of the feature to be initialized
*
+ * reload the configuration
*/
-void abe_reset_one_feature(abe_uint32 x)
+void abe_reset_one_feature (u32 x)
{
- all_feature[x] = all_feature_init[x]; /* load default fields */
- /* abe_call_subroutine ((all_feature[x]).disable_feature, NOPARAMETER, NOPARAMETER, NOPARAMETER, NOPARAMETER); */
+ all_feature [x] = all_feature_init [x]; /* load default fields */
+ /* abe_call_subroutine ((all_feature[x]).disable_feature, NOPARAMETER,
+ NOPARAMETER, NOPARAMETER, NOPARAMETER); */
}
-/*
- * ABE_RESET_ALL_FEATURE
+/**
+ * abe_reset_all_feature
*
- * Parameter :
- * none
- *
- * Operations :
- * load default configuration for all features
- * struct {
+ * load default configuration for all features
+ * struct {
* uint16 load_default_data;
* uint16 read_parameter;
* uint16 write_parameter;
@@ -997,194 +1015,932 @@ void abe_reset_one_feature(abe_uint32 x)
* uint16 fw_scheduler_subslot_position;
* uint16 min_opp;
* char name[NBCHARFEATURENAME];
- * } abe_feature_t;
- *
- * Return value :
- *
+ * } abe_feature_t;
*/
-void abe_reset_all_features(void)
+void abe_reset_all_features (void)
{
- abe_uint16 i;
+ u16 i;
- //for (i = 0; i < FEAT_GAINS_DMIC1; i++)
- for (i = 0; i < LAST_PORT_ID; i++)
- abe_reset_one_feature(i);
+ for (i = 0; i < MAXNBFEATURE; i++)
+ abe_reset_one_feature (i);
}
-/*
- * ABE_RESET_ALL_PORTS
- *
- * Parameter :
- * none
- *
- * Operations :
- * load default configuration for all features
- *
- * Return value :
+/**
+ * abe_reset_all_ports
*
+ * load default configuration for all features
*/
-void abe_reset_all_ports(void)
+void abe_reset_all_ports (void)
{
- abe_uint16 i;
+ u16 i;
for (i = 0; i < LAST_PORT_ID; i++)
- abe_reset_port (i);
+ abe_reset_port (i);
/* mixers' configuration */
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_UL2);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_TONES);
-
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_100MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, GAIN_0dB , RAMP_100MS, MIX_SDT_INPUT_DL1_MIXER);
-
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
-
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_MM_DL);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_TONES);
- abe_write_mixer(MIXAUDUL, GAIN_0dB, RAMP_100MS, MIX_AUDUL_INPUT_UPLINK);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_VX_DL);
-
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_TONES);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_MM_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_UL);
-
- abe_write_gain(GAINS_DMIC1,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC1,GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DMIC2,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC2,GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DMIC3,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC3,GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_AMIC,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_AMIC, GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
-
- abe_write_gain(GAINS_SPLIT, GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_SPLIT, GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- //abe_write_gain(GAINS_EANC ,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
- //abe_write_gain(GAINS_EANC, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_UL2);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_TONES);
+
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_TONES);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_VX_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_UL2);
+
+ abe_write_mixer (MIXSDT, MUTE_GAIN, RAMP_100MS, MIX_SDT_INPUT_UP_MIXER);
+ abe_write_mixer (MIXSDT, GAIN_0dB , RAMP_100MS, MIX_SDT_INPUT_DL1_MIXER);
+
+ abe_write_mixer (MIXECHO, GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_mixer (MIXECHO, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_MM_DL);
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_TONES);
+ abe_write_mixer (MIXAUDUL, GAIN_0dB , RAMP_100MS, MIX_AUDUL_INPUT_UPLINK);
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_VX_DL);
+
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_TONES);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_DL);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_MM_DL);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_UL);
+
+ abe_write_gain(GAINS_DMIC1,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC1,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_DMIC2,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC2,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_DMIC3,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC3,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_AMIC ,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_AMIC, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_gain(GAINS_SPLIT ,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_SPLIT, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
/*@@@Gain set to -6dB due to McPDM Limitation*/
- /* cf CDDS 00635*/
- abe_write_gain(GAINS_DL1, GAIN_M6dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DL1, GAIN_M6dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DL2, GAIN_M6dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DL2, GAIN_M6dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
+ /* cf CDDS 00635*/
+ abe_write_gain (GAINS_DL1,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain (GAINS_DL1,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain (GAINS_DL2,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain (GAINS_DL2,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
}
-/*
- * ABE_CLEAN_TEMPORARY_BUFFERS
- *
- * Parameter :
- * none
- *
- * Operations :
- * clear temporary buffers
- *
- * Return value :
+/**
+ * abe_clean_temporay buffers
*
+ * clear temporary buffers
*/
-void abe_clean_temporary_buffers(abe_port_id id)
+void abe_clean_temporary_buffers (u32 id)
{
switch (id) {
- case DMIC_PORT:
- abe_reset_mem(ABE_DMEM, D_DMIC_UL_FIFO_ADDR,D_DMIC_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_DMIC0_96_48_data_ADDR << 3, S_DMIC0_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DMIC1_96_48_data_ADDR << 3, S_DMIC1_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3, S_DMIC1_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+dmic1_gains_offset) << 2, 6 << 2); /* reset current gains */
- abe_reset_mem(ABE_SMEM, (S_GCurrent_ADDR+dmic1_gains_offset) << 3, 6 << 3);
+ case DMIC_PORT:
+ abe_reset_mem (ABE_DMEM, D_DMIC_UL_FIFO_ADDR,
+ D_DMIC_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_DMIC0_96_48_data_ADDR << 3,
+ S_DMIC0_96_48_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DMIC1_96_48_data_ADDR << 3,
+ S_DMIC1_96_48_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3,
+ S_DMIC1_96_48_data_sizeof << 3);
+ abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+dmic1_gains_offset) << 2,
+ 6 << 2); /* reset current gains */
+ abe_reset_mem (ABE_SMEM, (S_GCurrent_ADDR+dmic1_gains_offset) << 3,
+ 6 << 3);
break;
- case PDM_UL_PORT:
- abe_reset_mem(ABE_DMEM, D_McPDM_UL_FIFO_ADDR, D_McPDM_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_BT_UL_ADDR << 3, S_BT_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_AMIC_96_48_data_ADDR << 3, S_AMIC_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+amic_gains_offset) << 2, 2 << 2); /* reset current gains */
- abe_reset_mem(ABE_SMEM, (S_GCurrent_ADDR+amic_gains_offset) << 3, 6 << 3);
+ case PDM_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_McPDM_UL_FIFO_ADDR,
+ D_McPDM_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_ADDR << 3,
+ S_BT_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_AMIC_96_48_data_ADDR << 3,
+ S_AMIC_96_48_data_sizeof << 3);
+ abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+amic_gains_offset) << 2,
+ 2 << 2); /* reset current gains */
+ abe_reset_mem (ABE_SMEM, (S_GCurrent_ADDR+amic_gains_offset) << 3,
+ 6 << 3);
break;
- case BT_VX_UL_PORT: // ABE <-- BT (8/16kHz)
- abe_reset_mem(ABE_DMEM, D_BT_UL_FIFO_ADDR, D_BT_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_BT_UL_ADDR << 3, S_BT_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_ADDR << 3, S_BT_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_8_48_HP_data_ADDR << 3,
- S_BT_UL_8_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_8_48_LP_data_ADDR << 3,
- S_BT_UL_8_48_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_16_48_HP_data_ADDR << 3,
- S_BT_UL_16_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_16_48_LP_data_ADDR << 3,
- S_BT_UL_16_48_LP_data_sizeof << 3);
+ case BT_VX_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_BT_UL_FIFO_ADDR,
+ D_BT_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_ADDR << 3,
+ S_BT_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_ADDR << 3,
+ S_BT_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_8_48_HP_data_ADDR << 3,
+ S_BT_UL_8_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_8_48_LP_data_ADDR << 3,
+ S_BT_UL_8_48_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_16_48_HP_data_ADDR << 3,
+ S_BT_UL_16_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_16_48_LP_data_ADDR << 3,
+ S_BT_UL_16_48_LP_data_sizeof << 3);
break;
- case MM_UL_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_UL_FIFO_ADDR, D_MM_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_MM_UL_ADDR << 3, S_MM_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_MM_UL2_ADDR << 3, D_MM_UL2_FIFO_sizeof << 3);
+ case MM_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_UL_FIFO_ADDR,
+ D_MM_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_MM_UL_ADDR << 3,
+ S_MM_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_MM_UL2_ADDR << 3,
+ D_MM_UL2_FIFO_sizeof << 3);
break;
- case MM_UL2_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_UL2_FIFO_ADDR, D_MM_UL2_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_MM_UL2_ADDR << 3, S_MM_UL2_sizeof << 3);
+ case MM_UL2_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_UL2_FIFO_ADDR,
+ D_MM_UL2_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_MM_UL2_ADDR << 3,
+ S_MM_UL2_sizeof << 3);
break;
- case VX_UL_PORT:
- abe_reset_mem(ABE_DMEM, D_VX_UL_FIFO_ADDR, D_VX_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_VX_UL_ADDR << 3, S_VX_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_8_HP_data_ADDR << 3, S_VX_UL_48_8_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_8_LP_data_ADDR << 3, S_VX_UL_48_8_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_16_HP_data_ADDR << 3, S_VX_UL_48_16_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_16_LP_data_ADDR << 3, S_VX_UL_48_16_LP_data_sizeof << 3);
+ case VX_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_VX_UL_FIFO_ADDR,
+ D_VX_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_ADDR << 3,
+ S_VX_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_8_HP_data_ADDR << 3,
+ S_VX_UL_48_8_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_8_LP_data_ADDR << 3,
+ S_VX_UL_48_8_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_16_HP_data_ADDR << 3,
+ S_VX_UL_48_16_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_16_LP_data_ADDR << 3,
+ S_VX_UL_48_16_LP_data_sizeof << 3);
break;
- case MM_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_DL_FIFO_ADDR, D_MM_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_MM_DL_ADDR << 3, S_MM_DL_sizeof << 3);
+ case MM_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_DL_FIFO_ADDR,
+ D_MM_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_MM_DL_ADDR << 3,
+ S_MM_DL_sizeof << 3);
break;
- case VX_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_VX_DL_FIFO_ADDR, D_VX_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_VX_DL_ADDR << 3, S_VX_DL_sizeof << 3);
- abe_reset_mem (ABE_SMEM, S_VX_DL_8_48_HP_data_ADDR << 3, S_VX_DL_8_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_DL_8_48_LP_data_ADDR << 3, S_VX_DL_8_48_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_DL_16_48_HP_data_ADDR << 3, S_VX_DL_16_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_DL_16_48_LP_data_ADDR << 3, S_VX_DL_16_48_LP_data_sizeof << 3);
+ case VX_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_VX_DL_FIFO_ADDR,
+ D_VX_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_ADDR << 3,
+ S_VX_DL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_8_48_HP_data_ADDR << 3,
+ S_VX_DL_8_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_8_48_LP_data_ADDR << 3,
+ S_VX_DL_8_48_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_16_48_HP_data_ADDR << 3,
+ S_VX_DL_16_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_16_48_LP_data_ADDR << 3,
+ S_VX_DL_16_48_LP_data_sizeof << 3);
break;
- case TONES_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_TONES_DL_FIFO_ADDR, D_TONES_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_Tones_ADDR << 3, S_Tones_sizeof << 3);
+ case TONES_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_TONES_DL_FIFO_ADDR,
+ D_TONES_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_Tones_ADDR << 3,
+ S_Tones_sizeof << 3);
break;
- case VIB_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_VIB_DL_FIFO_ADDR, D_VIB_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_VIBRA_ADDR << 3, S_VIBRA_sizeof << 3);
+ case VIB_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_VIB_DL_FIFO_ADDR,
+ D_VIB_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_VIBRA_ADDR << 3,
+ S_VIBRA_sizeof << 3);
break;
- case BT_VX_DL_PORT:// ABE --> BT (8/16kHz)
- abe_reset_mem(ABE_DMEM, D_BT_DL_FIFO_ADDR, D_BT_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_BT_DL_ADDR << 3, S_BT_DL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_8_HP_data_ADDR << 3, S_BT_DL_48_8_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_8_LP_data_ADDR << 3, S_BT_DL_48_8_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_16_HP_data_ADDR << 3, S_BT_DL_48_16_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_16_LP_data_ADDR << 3, S_BT_DL_48_16_LP_data_sizeof << 3);
+ case BT_VX_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_BT_DL_FIFO_ADDR,
+ D_BT_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_ADDR << 3,
+ S_BT_DL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_8_HP_data_ADDR << 3,
+ S_BT_DL_48_8_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_8_LP_data_ADDR << 3,
+ S_BT_DL_48_8_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_16_HP_data_ADDR << 3,
+ S_BT_DL_48_16_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_16_LP_data_ADDR << 3,
+ S_BT_DL_48_16_LP_data_sizeof << 3);
break;
- case PDM_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_McPDM_DL_FIFO_ADDR, D_McPDM_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3, S_DMIC1_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DL2_M_LR_EQ_data_ADDR << 3, S_DL2_M_LR_EQ_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DL1_M_EQ_data_ADDR << 3, S_DL1_M_EQ_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_EARP_48_96_LP_data_ADDR << 3, S_EARP_48_96_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_IHF_48_96_LP_data_ADDR << 3, S_IHF_48_96_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_APS_DL1_EQ_data_ADDR << 3, S_APS_DL1_EQ_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_APS_DL2_EQ_data_ADDR << 3, S_APS_DL2_EQ_data_sizeof << 3);
- break;
- case MM_EXT_OUT_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_EXT_OUT_FIFO_ADDR, D_MM_EXT_OUT_FIFO_sizeof);
+ case PDM_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_McPDM_DL_FIFO_ADDR,
+ D_McPDM_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3,
+ S_DMIC1_96_48_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DL2_M_LR_EQ_data_ADDR << 3,
+ S_DL2_M_LR_EQ_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DL1_M_EQ_data_ADDR << 3,
+ S_DL1_M_EQ_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_EARP_48_96_LP_data_ADDR << 3,
+ S_EARP_48_96_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_IHF_48_96_LP_data_ADDR << 3,
+ S_IHF_48_96_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_APS_DL1_EQ_data_ADDR << 3,
+ S_APS_DL1_EQ_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_APS_DL2_EQ_data_ADDR << 3,
+ S_APS_DL2_EQ_data_sizeof << 3);
break;
- case MM_EXT_IN_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_EXT_IN_FIFO_ADDR, D_MM_EXT_IN_FIFO_sizeof);
+ case MM_EXT_OUT_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_EXT_OUT_FIFO_ADDR,
+ D_MM_EXT_OUT_FIFO_sizeof);
break;
- default:
+ case MM_EXT_IN_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_EXT_IN_FIFO_ADDR,
+ D_MM_EXT_IN_FIFO_sizeof);
break;
}
+
+}
+
+/**
+ * abe_init_asrc_vx_dl
+ *
+ * Initialize the following ASRC VX_DL parameters :
+ * 1. DriftSign = D_AsrcVars[1] = 1 or -1
+ * 2. Subblock = D_AsrcVars[2] = 0
+ * 3. DeltaAlpha = D_AsrcVars[3] = (round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 4. MinusDeltaAlpha = D_AsrcVars[4] = (-round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 5. OneMinusEpsilon = D_AsrcVars[5] = 1 - DeltaAlpha/2
+ * 6. AlphaCurrent = 0x000020 (CMEM), initial value of Alpha parameter
+ * 7. BetaCurrent = 0x3fffe0 (CMEM), initial value of Beta parameter
+ * AlphaCurrent + BetaCurrent = 1 (=0x400000 in CMEM = 2^20 << 2)
+ * 8. drift_ASRC = 0 & drift_io = 0
+ * 9. SMEM for ASRC_DL_VX_Coefs pointer
+ * 10. CMEM for ASRC_DL_VX_Coefs pointer
+ * ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
+ * C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1
+ * 11. SMEM for XinASRC_DL_VX pointer
+ * 12. CMEM for XinASRC_DL_VX pointer
+ * XinASRC_DL_VX = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/0/1/0/0/0/0
+ * 13. SMEM for IO_VX_DL_ASRC pointer
+ * 14. CMEM for IO_VX_DL_ASRC pointer
+ * IO_VX_DL_ASRC = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/ASRC_DL_VX_FIR_L+ASRC_margin/1/0/0/0/0
+ */
+void abe_init_asrc_vx_dl ( s32 dppm)
+{
+ s32 el[45];
+ s32 temp0, temp1, adppm, dtemp, mem_tag, mem_addr;
+ u32 i = 0;
+
+ temp0 = 0;
+ temp1 = 1;
+
+ /* 1. DriftSign = D_AsrcVars[1] = 1 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 1*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm >= 0) {
+ el[i+1] = 1;
+ adppm = dppm;
+ } else {
+ el[i+1] = -1;
+ adppm = (-1*dppm);
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ dtemp = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* 2. Subblock = D_AsrcVars[2] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 2*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 3. DeltaAlpha = D_AsrcVars[3] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 3*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = dtemp<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 4. MinusDeltaAlpha = D_AsrcVars[4] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 4*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = (-dtemp)<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /*5. OneMinusEpsilon = D_AsrcVars[5] = 0x00400000 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 5*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0x00400000;
+ } else {
+ el[i+1] = (0x00100000-(dtemp/2))<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 6. AlphaCurrent = 0x000020 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_AlphaCurrent_DL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x00000020;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 7. BetaCurrent = 0x3fffe0 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_BetaCurrent_DL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x003fffe0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 8. drift_ASRC = 0 & drift_io = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_IOdescr_ADDR + VX_DL_PORT*sizeof(ABE_SIODescriptor)
+ + drift_asrc_;
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 9. SMEM for ASRC_DL_VX_Coefs pointer */
+ /* ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0
+ /1/C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_SMEM;
+ mem_addr = ASRC_DL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = C_CoefASRC16_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + C_CoefASRC16_VX_sizeof;
+
+ el[i+2] = C_CoefASRC15_VX_ADDR;
+ el[i+2] = (el[i+2]<<8) + C_CoefASRC15_VX_sizeof;
+ i = i + 3;
+
+
+ /* 10. CMEM for ASRC_DL_VX_Coefs pointer */
+ /* ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/
+ 1/C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_CMEM;
+ mem_addr = ASRC_DL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp1;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 11. SMEM for XinASRC_DL_VX pointer */
+ /* XinASRC_DL_VX = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = XinASRC_DL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 12. CMEM for XinASRC_DL_VX pointer */
+ /* XinASRC_DL_VX = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = XinASRC_DL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 13. SMEM for IO_VX_DL_ASRC pointer */
+ /* IO_VX_DL_ASRC = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/
+ ASRC_DL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = IO_VX_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 14. CMEM for IO_VX_DL_ASRC pointer */
+ /* IO_VX_DL_ASRC = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/
+ ASRC_DL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = IO_VX_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_DL_VX_FIR_L+ASRC_margin)<<16) + (temp1<<12)
+ + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+
+
+ abe_write_fifo (ABE_DMEM, D_FwMemInitDescr_ADDR,(u32 *) &el[0], 42);
+
+}
+
+/**
+ * abe_init_asrc_vx_ul
+ *
+ * Initialize the following ASRC VX_UL parameters :
+ * 1. DriftSign = D_AsrcVars[1] = 1 or -1
+ * 2. Subblock = D_AsrcVars[2] = 0
+ * 3. DeltaAlpha = D_AsrcVars[3] = (round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 4. MinusDeltaAlpha = D_AsrcVars[4] = (-round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 5. OneMinusEpsilon = D_AsrcVars[5] = 1 - DeltaAlpha/2
+ * 6. AlphaCurrent = 0x000020 (CMEM), initial value of Alpha parameter
+ * 7. BetaCurrent = 0x3fffe0 (CMEM), initial value of Beta parameter
+ * AlphaCurrent + BetaCurrent = 1 (=0x400000 in CMEM = 2^20 << 2)
+ * 8. drift_ASRC = 0 & drift_io = 0
+ * 9. SMEM for ASRC_UL_VX_Coefs pointer
+ * 10. CMEM for ASRC_UL_VX_Coefs pointer
+ * ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof
+ * /0/1/C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1
+ * 11. SMEM for XinASRC_UL_VX pointer
+ * 12. CMEM for XinASRC_UL_VX pointer
+ * XinASRC_UL_VX = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/0/1/0/0/0/0
+ * 13. SMEM for UL_48_8_DEC pointer
+ * 14. CMEM for UL_48_8_DEC pointer
+ * UL_48_8_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ * ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0
+ * 15. SMEM for UL_48_16_DEC pointer
+ * 16. CMEM for UL_48_16_DEC pointer
+ * UL_48_16_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ * ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0
+ */
+void abe_init_asrc_vx_ul ( s32 dppm)
+{
+ s32 el[51];
+ s32 temp0, temp1, adppm, dtemp, mem_tag, mem_addr;
+ u32 i = 0;
+
+ temp0 = 0;
+ temp1 = 1;
+
+
+ /* 1. DriftSign = D_AsrcVars[1] = 1 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 1*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm >= 0) {
+ el[i+1] = 1;
+ adppm = dppm;
+ } else {
+ el[i+1] = -1;
+ adppm = (-1*dppm);
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ dtemp = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* 2. Subblock = D_AsrcVars[2] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 2*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 3. DeltaAlpha = D_AsrcVars[3] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 3*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = dtemp<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ /* 4. MinusDeltaAlpha = D_AsrcVars[4] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 4*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = (-dtemp)<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 5. OneMinusEpsilon = D_AsrcVars[5] = 0x00400000 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 5*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0x00400000;
+ } else {
+ el[i+1] = (0x00100000-(dtemp/2))<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 6. AlphaCurrent = 0x000020 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_AlphaCurrent_UL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x00000020;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 7. BetaCurrent = 0x3fffe0 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_BetaCurrent_UL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x003fffe0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 8. drift_ASRC = 0 & drift_io = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_IOdescr_ADDR + VX_UL_PORT*sizeof(ABE_SIODescriptor)
+ + drift_asrc_;
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 9. SMEM for ASRC_UL_VX_Coefs pointer */
+ /* ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
+ C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_SMEM;
+ mem_addr = ASRC_UL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = C_CoefASRC16_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + C_CoefASRC16_VX_sizeof;
+
+ el[i+2] = C_CoefASRC15_VX_ADDR;
+ el[i+2] = (el[i+2]<<8) + C_CoefASRC15_VX_sizeof;
+ i = i + 3;
+
+
+ /* 10. CMEM for ASRC_UL_VX_Coefs pointer */
+ /* ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
+ C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_CMEM;
+ mem_addr = ASRC_UL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp1;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 11. SMEM for XinASRC_UL_VX pointer */
+ /* XinASRC_UL_VX = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = XinASRC_UL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_UL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_UL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 12. CMEM for XinASRC_UL_VX pointer */
+ /* XinASRC_UL_VX = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = XinASRC_UL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 13. SMEM for UL_48_8_DEC pointer */
+ /* UL_48_8_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = UL_48_8_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_UL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_UL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 14. CMEM for UL_48_8_DEC pointer */
+ /* UL_48_8_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = UL_48_8_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_UL_VX_FIR_L+ASRC_margin)<<16) + (temp1<<12)
+ + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 15. SMEM for UL_48_16_DEC pointer */
+ /* UL_48_16_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = UL_48_16_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_UL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_UL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 16. CMEM for UL_48_16_DEC pointer */
+ /* UL_48_16_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = UL_48_16_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_UL_VX_FIR_L+ASRC_margin)<<16) + (temp1<<12)
+ + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+
+
+ abe_write_fifo (ABE_DMEM, D_FwMemInitDescr_ADDR, (u32 *)&el[0], 48);
+
+}
+
+/**
+ * abe_init_asrc_mm_dl
+ *
+ * Initialize the following ASRC MM_DL parameters :
+ * 1. DriftSign = D_AsrcVars[1] = 1 or -1
+ * 2. Subblock = D_AsrcVars[2] = 0
+ * 3. DeltaAlpha = D_AsrcVars[3] = (round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 4. MinusDeltaAlpha = D_AsrcVars[4] = (-round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 5. OneMinusEpsilon = D_AsrcVars[5] = 1 - DeltaAlpha/2
+ * 6. AlphaCurrent = 0x000020 (CMEM), initial value of Alpha parameter
+ * 7. BetaCurrent = 0x3fffe0 (CMEM), initial value of Beta parameter
+ * AlphaCurrent + BetaCurrent = 1 (=0x400000 in CMEM = 2^20 << 2)
+ * 8. drift_ASRC = 0 & drift_io = 0
+ * 9. SMEM for ASRC_DL_MM_Coefs pointer
+ * 10. CMEM for ASRC_DL_MM_Coefs pointer
+ * ASRC_DL_MM_Coefs = C_CoefASRC16_DL_MM_ADDR/C_CoefASRC16_DL_MM_sizeof/
+ * 0/1/C_CoefASRC15_DL_MM_ADDR/C_CoefASRC15_DL_MM_sizeof/0/1
+ * 11. SMEM for XinASRC_DL_MM pointer
+ * 12. CMEM for XinASRC_DL_MM pointer
+ * XinASRC_DL_MM = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/0/1/0/0/0/0
+ * 13. SMEM for IO_MM_DL_ASRC pointer
+ * 14. CMEM for IO_MM_DL_ASRC pointer
+ * IO_MM_DL_ASRC = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/
+ * ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k/1/0/0/0/0
+ */
+void abe_init_asrc_mm_dl ( s32 dppm)
+{
+ s32 el[45];
+ s32 temp0, temp1, adppm, dtemp, mem_tag, mem_addr;
+ u32 i = 0;
+
+ temp0 = 0;
+ temp1 = 1;
+
+ /* 1. DriftSign = D_AsrcVars[1] = 1 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 1*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm >= 0) {
+ el[i+1] = 1;
+ adppm = dppm;
+ } else {
+ el[i+1] = -1;
+ adppm = (-1*dppm);
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ dtemp = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* 2. Subblock = D_AsrcVars[2] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 2*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 3. DeltaAlpha = D_AsrcVars[3] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 3*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = dtemp<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 4. MinusDeltaAlpha = D_AsrcVars[4] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 4*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = (-dtemp)<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 5. OneMinusEpsilon = D_AsrcVars[5] = 0x00400000 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 5*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0x00400000;
+ } else {
+ el[i+1] = (0x00100000-(dtemp/2))<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 6. AlphaCurrent = 0x000020 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_AlphaCurrent_DL_MM_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x00000020;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 7. BetaCurrent = 0x3fffe0 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_BetaCurrent_DL_MM_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x003fffe0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 8. drift_ASRC = 0 & drift_io = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_IOdescr_ADDR + MM_DL_PORT*sizeof(ABE_SIODescriptor)
+ + drift_asrc_;
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 9. SMEM for ASRC_DL_MM_Coefs pointer */
+ /* ASRC_DL_MM_Coefs = C_CoefASRC16_DL_MM_ADDR/C_CoefASRC16_DL_MM_sizeof
+ /0/1/C_CoefASRC15_DL_MM_ADDR/C_CoefASRC15_DL_MM_sizeof/0/1 */
+ mem_tag = ABE_SMEM;
+ mem_addr = ASRC_DL_MM_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = C_CoefASRC16_DL_MM_ADDR;
+ el[i+1] = (el[i+1]<<8) + C_CoefASRC16_DL_MM_sizeof;
+
+ el[i+2] = C_CoefASRC15_DL_MM_ADDR;
+ el[i+2] = (el[i+2]<<8) + C_CoefASRC15_DL_MM_sizeof;
+ i = i + 3;
+
+
+ /*10. 11. CMEM for ASRC_DL_MM_Coefs pointer */
+ /* ASRC_DL_MM_Coefs = C_CoefASRC16_DL_MM_ADDR/C_CoefASRC16_DL_MM_sizeof
+ /0/1/C_CoefASRC15_DL_MM_ADDR/C_CoefASRC15_DL_MM_sizeof/0/1 */
+ mem_tag = ABE_CMEM;
+ mem_addr = ASRC_DL_MM_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp1;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 11. SMEM for XinASRC_DL_MM pointer */
+ /* XinASRC_DL_MM = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = XinASRC_DL_MM_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_MM_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_MM_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+
+ /* 12. CMEM for XinASRC_DL_MM pointer */
+ /* XinASRC_DL_MM = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = XinASRC_DL_MM_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 13. SMEM for IO_MM_DL_ASRC pointer */
+ /* IO_MM_DL_ASRC = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/
+ ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = IO_MM_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_MM_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_MM_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 14. CMEM for IO_MM_DL_ASRC pointer */
+ /* IO_MM_DL_ASRC = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/
+ ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = IO_MM_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k)<<16) +
+ (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+
+
+ abe_write_fifo (ABE_DMEM, D_FwMemInitDescr_ADDR, (u32 *)&el[0], 42);
+
}
diff --git a/sound/soc/omap/abe/abe_initxxx_labels.h b/sound/soc/omap/abe/abe_initxxx_labels.h
index 4408a952e8d3..5057be313abf 100644
--- a/sound/soc/omap/abe/abe_initxxx_labels.h
+++ b/sound/soc/omap/abe/abe_initxxx_labels.h
@@ -1,313 +1,328 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
*/
-
#ifndef _ABE_INITXXX_LABELS_H_
#define _ABE_INITXXX_LABELS_H_
-#define Dummy_Regs_labelID 0
-#define Dummy_AM_labelID 1
-#define Voice_8k_UL_labelID 2
-#define Voice_8k_DL_labelID 3
-#define ECHO_REF_8K_labelID 4
-#define Voice_16k_UL_labelID 5
-#define Voice_16k_DL_labelID 6
-#define ECHO_REF_16K_labelID 7
-#define MM_DL_labelID 8
-#define IO_VX_DL_ASRC_labelID 9
-#define IO_MM_DL_ASRC_labelID 10
-#define IO_VIBRA_DL_labelID 11
-#define ZERO_labelID 12
-#define GTarget_labelID 13
-#define GCurrent_labelID 14
-#define Gr_1_labelID 15
-#define Gr_2_labelID 16
-#define Gr_Regs_labelID 17
-#define DMIC0_Gain_labelID 18
-#define DMIC1_Gain_labelID 19
-#define DMIC2_Gain_labelID 20
-#define DMIC3_Gain_labelID 21
-#define AMIC_Gain_labelID 22
-#define MIXDL1_Gain_labelID 23
-#define MIXDL2_Gain_labelID 24
-#define DEFAULT_Gain_labelID 25
-#define DL1_M_G_Tones_labelID 26
-#define DL2_M_G_Tones_labelID 27
-#define Echo_M_G_labelID 28
-#define SDT_M_G_labelID 29
-#define VXREC_M_G_VX_DL_labelID 30
-#define UL_M_G_VX_DL_labelID 31
-#define DL1_M_labelID 32
-#define DL2_M_labelID 33
-#define MM_UL2_labelID 34
-#define VX_DL_labelID 35
-#define Tones_labelID 36
-#define DL_M_MM_UL2_VX_DL_labelID 37
-#define Echo_M_labelID 38
-#define VX_UL_labelID 39
-#define VX_UL_M_labelID 40
-#define SDT_F_labelID 41
-#define SDT_F_data_labelID 42
-#define SDT_Coef_labelID 43
-#define SDT_Regs_labelID 44
-#define SDT_M_labelID 45
-#define DL1_EQ_labelID 46
-#define DL2_EQ_labelID 47
-#define DL1_GAIN_out_labelID 48
-#define DL2_GAIN_out_labelID 49
-#define DMIC1_labelID 50
-#define DMIC1_L_labelID 51
-#define DMIC1_R_labelID 52
-#define DMIC2_labelID 53
-#define DMIC2_L_labelID 54
-#define DMIC2_R_labelID 55
-#define DMIC3_labelID 56
-#define DMIC3_L_labelID 57
-#define DMIC3_R_labelID 58
-#define MIC4_labelID 59
-#define MIC4_L_labelID 60
-#define MIC4_R_labelID 61
-#define BT_UL_L_labelID 62
-#define BT_UL_R_labelID 63
-#define AMIC_labelID 64
-#define AMIC_L_labelID 65
-#define AMIC_R_labelID 66
-#define EANC_FBK_In_labelID 67
-#define EANC_FBK_Out_labelID 68
-#define EANC_FBK_L_labelID 69
-#define EANC_FBK_R_labelID 70
-#define EchoRef_L_labelID 71
-#define EchoRef_R_labelID 72
-#define MM_DL_L_labelID 73
-#define MM_DL_R_labelID 74
-#define MM_UL_labelID 75
-#define AMIC_96_labelID 76
-#define DMIC0_96_labelID 77
-#define DMIC1_96_labelID 78
-#define DMIC2_96_labelID 79
-#define DMIC_desc_labelID 80
-#define UL_MIC_48K_labelID 81
-#define EQ_DL_48K_labelID 82
-#define EQ_48K_labelID 83
-#define McPDM_Out1_labelID 84
-#define McPDM_Out2_labelID 85
-#define McPDM_Out3_labelID 86
-#define VX_UL_MUX_labelID 87
-#define MM_UL2_MUX_labelID 88
-#define MM_UL_MUX_labelID 89
-#define XinASRC_DL_VX_labelID 90
-#define ASRC_DL_VX_Coefs_labelID 91
-#define ASRC_DL_VX_Alpha_labelID 92
-#define ASRC_DL_VX_VarsBeta_labelID 93
-#define ASRC_DL_VX_8k_Regs_labelID 94
-#define XinASRC_UL_VX_labelID 95
-#define ASRC_UL_VX_Coefs_labelID 96
-#define ASRC_UL_VX_Alpha_labelID 97
-#define ASRC_UL_VX_VarsBeta_labelID 98
-#define ASRC_UL_VX_8k_Regs_labelID 99
-#define UL_48_8_DEC_labelID 100
-#define ASRC_DL_VX_16k_Regs_labelID 101
-#define ASRC_UL_VX_16k_Regs_labelID 102
-#define UL_48_16_DEC_labelID 103
-#define XinASRC_DL_MM_labelID 104
-#define ASRC_DL_MM_Coefs_labelID 105
-#define ASRC_DL_MM_Alpha_labelID 106
-#define ASRC_DL_MM_VarsBeta_labelID 107
-#define ASRC_DL_MM_Regs_labelID 108
-#define VX_REC_labelID 109
-#define VXREC_UL_M_Tones_VX_UL_labelID 110
-#define VX_REC_L_labelID 111
-#define VX_REC_R_labelID 112
-#define DL2_M_L_labelID 113
-#define DL2_M_R_labelID 114
-#define DL1_M_data_labelID 115
-#define DL1_M_Coefs_labelID 116
-#define DL2_M_LR_data_labelID 117
-#define DL2_M_LR_Coefs_labelID 118
-#define SRC_6_LP_COEFS_labelID 119
-#define SRC_6_LP_GAIN_COEFS_labelID 120
-#define SRC_6_HP_COEFS_labelID 121
-#define SRC_3_LP_COEFS_labelID 122
-#define SRC_3_LP_GAIN_COEFS_labelID 123
-#define SRC_3_HP_COEFS_labelID 124
-#define VX_DL_8_48_LP_DATA_labelID 125
-#define VX_DL_8_48_HP_DATA_labelID 126
-#define VX_DL_16_48_LP_DATA_labelID 127
-#define VX_DL_16_48_HP_DATA_labelID 128
-#define VX_UL_48_8_LP_DATA_labelID 129
-#define VX_UL_48_8_HP_DATA_labelID 130
-#define VX_UL_48_16_LP_DATA_labelID 131
-#define VX_UL_48_16_HP_DATA_labelID 132
-#define BT_UL_8_48_LP_DATA_labelID 133
-#define BT_UL_8_48_HP_DATA_labelID 134
-#define BT_UL_16_48_LP_DATA_labelID 135
-#define BT_UL_16_48_HP_DATA_labelID 136
-#define BT_DL_48_8_LP_DATA_labelID 137
-#define BT_DL_48_8_HP_DATA_labelID 138
-#define BT_DL_48_16_LP_DATA_labelID 139
-#define BT_DL_48_16_HP_DATA_labelID 140
-#define ECHO_REF_48_16_LP_DATA_labelID 141
-#define ECHO_REF_48_16_HP_DATA_labelID 142
-#define ECHO_REF_48_8_LP_DATA_labelID 143
-#define ECHO_REF_48_8_HP_DATA_labelID 144
-#define ECHO_REF_DEC_labelID 145
-#define VX_UL_8_TEMP_labelID 146
-#define VX_UL_16_TEMP_labelID 147
-#define UP_DOWN_8_48_labelID 148
-#define UP_DOWN_16_48_labelID 149
-#define SRC_6_LP_48k_labelID 150
-#define SRC_6_HP_labelID 151
-#define SRC_3_LP_48k_labelID 152
-#define SRC_3_HP_labelID 153
-#define EARP_48_96_LP_DATA_labelID 154
-#define SRC_48_96_LP_labelID 155
-#define IHF_48_96_LP_DATA_labelID 156
-#define EQ_VX_UL_16K_labelID 157
-#define pAPS_iir1_p23_labelID 158
-#define pAPS_iir1_p45_labelID 159
-#define APS_IIR_Regs_labelID 160
-#define pAPS_core_DL1_p1_labelID 161
-#define pAPS_core_DL1_p23_labelID 162
-#define pAPS_core_DL1_p45_labelID 163
-#define pAPS_core_DL1_r_labelID 164
-#define pAPS_DL2L_core_r_labelID 165
-#define pAPS_DL2R_core_r_labelID 166
-#define pAPS_COIL_core_DL1_p1_labelID 167
-#define pAPS_COIL_core_DL1_p23_labelID 168
-#define pAPS_COIL_core_DL1_p45_labelID 169
-#define pAPS_COIL_core_DL1_r_labelID 170
-#define DL2_L_APS_IIR_p23_labelID 171
-#define DL2_R_APS_IIR_p23_labelID 172
-#define DL2_L_APS_IIR_p45_labelID 173
-#define DL2_R_APS_IIR_p45_labelID 174
-#define DL2_L_APS_CORE_p1_labelID 175
-#define DL2_L_APS_CORE_p23_labelID 176
-#define DL2_L_APS_CORE_p45_labelID 177
-#define DL2_R_APS_CORE_p1_labelID 178
-#define DL2_R_APS_CORE_p23_labelID 179
-#define DL2_R_APS_CORE_p45_labelID 180
-#define DL2_L_APS_COIL_CORE_p1_labelID 181
-#define DL2_L_APS_COIL_CORE_p23_labelID 182
-#define DL2_L_APS_COIL_CORE_p45_labelID 183
-#define pAPS_COIL_DL2L_core_r_labelID 184
-#define DL2_R_APS_COIL_CORE_p1_labelID 185
-#define DL2_R_APS_COIL_CORE_p23_labelID 186
-#define DL2_R_APS_COIL_CORE_p45_labelID 187
-#define pAPS_COIL_DL2R_core_r_labelID 188
-#define DL1_APS_labelID 189
-#define DL2_L_APS_labelID 190
-#define DL2_R_APS_labelID 191
-#define pEANC_p0_labelID 192
-#define pEANC_p1_labelID 193
-#define pEANC_p23_labelID 194
-#define pEANC_p45_labelID 195
-#define pEANC_reg1_labelID 196
-#define pEANC_reg2_labelID 197
-#define pEANC_reg3_labelID 198
-#define pEANC_r_labelID 199
-#define DL1_APS_EQ_p23_labelID 200
-#define DL1_APS_EQ_p45_labelID 201
-#define DL2_APS_EQ_p23_labelID 202
-#define DL2_APS_EQ_p45_labelID 203
-#define pDC_EANC_p23_labelID 204
-#define pDC_EANC_r_labelID 205
-#define pVIBRA1_p0_labelID 206
-#define pVIBRA1_p1_labelID 207
-#define pVIBRA1_p23_labelID 208
-#define pVIBRA1_p45_labelID 209
-#define pVibra1_pR1_labelID 210
-#define pVibra1_pR2_labelID 211
-#define pVibra1_pR3_labelID 212
-#define pVIBRA1_r_labelID 213
-#define pVIBRA2_p0_labelID 214
-#define pVIBRA2_p1_labelID 215
-#define pVIBRA2_p23_labelID 216
-#define pVIBRA2_p45_labelID 217
-#define pCtrl_p67_labelID 218
-#define pVIBRA2_r_labelID 219
-#define VIBRA_labelID 220
-#define PING_labelID 221
-#define PING_Regs_labelID 222
-#define UP_48_96_LP_COEFS_labelID 223
-#define AMIC_96_48_data_labelID 224
-#define DOWN_96_48_Coefs_labelID 225
-#define DOWN_96_48_Regs_labelID 226
-#define DMIC0_96_48_data_labelID 227
-#define DMIC1_96_48_data_labelID 228
-#define DMIC2_96_48_data_labelID 229
-#define EANC_FBK_96_48_data_labelID 230
-#define pDC_EANC_r2_labelID 231
-#define SIO_DMIC_labelID 232
-#define SIO_PDM_UL_labelID 233
-#define SIO_BT_VX_UL_labelID 234
-#define SIO_MM_UL_labelID 235
-#define SIO_MM_UL2_labelID 236
-#define SIO_VX_UL_labelID 237
-#define SIO_MM_DL_labelID 238
-#define SIO_VX_DL_labelID 239
-#define SIO_TONES_DL_labelID 240
-#define SIO_VIB_DL_labelID 241
-#define SIO_BT_VX_DL_labelID 242
-#define SIO_PDM_DL_labelID 243
-#define SIO_MM_EXT_OUT_labelID 244
-#define SIO_MM_EXT_IN_labelID 245
-#define SIO_TDM_OUT_labelID 246
-#define SIO_TDM_IN_labelID 247
-#define DMIC_ATC_PTR_labelID 248
-#define MCPDM_UL_ATC_PTR_labelID 249
-#define BT_VX_UL_ATC_PTR_labelID 250
-#define MM_UL_ATC_PTR_labelID 251
-#define MM_UL2_ATC_PTR_labelID 252
-#define VX_UL_ATC_PTR_labelID 253
-#define MM_DL_ATC_PTR_labelID 254
-#define VX_DL_ATC_PTR_labelID 255
-#define TONES_DL_ATC_PTR_labelID 256
-#define VIB_DL_ATC_PTR_labelID 257
-#define BT_VX_DL_ATC_PTR_labelID 258
-#define PDM_DL_ATC_PTR_labelID 259
-#define MM_EXT_OUT_ATC_PTR_labelID 260
-#define MM_EXT_IN_ATC_PTR_labelID 261
-#define TDM_OUT_ATC_PTR_labelID 262
-#define TDM_IN_ATC_PTR_labelID 263
-#define MCU_IRQ_FIFO_ptr_labelID 264
-#define DEBUG_IRQ_FIFO_reg_labelID 265
-#define UP_DOWN_48_96_labelID 266
-#define OSR96_2_labelID 267
-#define DEBUG_GAINS_labelID 268
-#define DBG_8K_PATTERN_labelID 269
-#define DBG_16K_PATTERN_labelID 270
-#define DBG_24K_PATTERN_labelID 271
-#define DBG_48K_PATTERN_labelID 272
-#define DBG_96K_PATTERN_labelID 273
-#define UL_VX_UL_48_8K_labelID 274
-#define UL_VX_UL_48_16K_labelID 275
-#define BT_DL_labelID 276
-#define BT_UL_labelID 277
-#define BT_DL_8k_labelID 278
-#define BT_DL_16k_labelID 279
-#define BT_UL_8k_labelID 280
-#define BT_UL_16k_labelID 281
-#define MM_EXT_IN_labelID 282
-#define MM_EXT_IN_L_labelID 283
-#define MM_EXT_IN_R_labelID 284
-#define ECHO_REF_48_16_WRAP_labelID 285
-#define ECHO_REF_48_8_WRAP_labelID 286
-#define BT_UL_16_48_WRAP_labelID 287
-#define BT_UL_8_48_WRAP_labelID 288
-#define BT_DL_48_16_WRAP_labelID 289
-#define BT_DL_48_8_WRAP_labelID 290
-#define VX_DL_16_48_WRAP_labelID 291
-#define VX_DL_8_48_WRAP_labelID 292
-#define VX_UL_48_16_WRAP_labelID 293
-#define VX_UL_48_8_WRAP_labelID 294
-#define APS_DL1_IRQs_WRAP_labelID 295
-#define APS_DL2_L_IRQs_WRAP_labelID 296
-#define APS_DL2_R_IRQs_WRAP_labelID 297
+#define Dummy_Regs_labelID 0
+#define Dummy_AM_labelID 1
+#define Voice_8k_UL_labelID 2
+#define Voice_8k_DL_labelID 3
+#define ECHO_REF_8K_labelID 4
+#define Voice_16k_UL_labelID 5
+#define Voice_16k_DL_labelID 6
+#define ECHO_REF_16K_labelID 7
+#define MM_DL_labelID 8
+#define IO_VX_DL_ASRC_labelID 9
+#define IO_MM_DL_ASRC_labelID 10
+#define IO_VIBRA_DL_labelID 11
+#define ZERO_labelID 12
+#define GTarget_labelID 13
+#define GCurrent_labelID 14
+#define Gr_1_labelID 15
+#define Gr_2_labelID 16
+#define Gr_Regs_labelID 17
+#define DMIC0_Gain_labelID 18
+#define DMIC1_Gain_labelID 19
+#define DMIC2_Gain_labelID 20
+#define DMIC3_Gain_labelID 21
+#define AMIC_Gain_labelID 22
+#define MIXDL1_Gain_labelID 23
+#define MIXDL2_Gain_labelID 24
+#define DEFAULT_Gain_labelID 25
+#define DL1_M_G_Tones_labelID 26
+#define DL2_M_G_Tones_labelID 27
+#define Echo_M_G_labelID 28
+#define SDT_M_G_labelID 29
+#define VXREC_M_G_VX_DL_labelID 30
+#define UL_M_G_VX_DL_labelID 31
+#define DL1_M_labelID 32
+#define DL2_M_labelID 33
+#define MM_UL2_labelID 34
+#define VX_DL_labelID 35
+#define Tones_labelID 36
+#define DL_M_MM_UL2_VX_DL_labelID 37
+#define Echo_M_labelID 38
+#define VX_UL_labelID 39
+#define VX_UL_M_labelID 40
+#define SDT_F_labelID 41
+#define SDT_F_data_labelID 42
+#define SDT_Coef_labelID 43
+#define SDT_Regs_labelID 44
+#define SDT_M_labelID 45
+#define DL1_EQ_labelID 46
+#define DL2_EQ_labelID 47
+#define DL1_GAIN_out_labelID 48
+#define DL2_GAIN_out_labelID 49
+#define DMIC1_labelID 50
+#define DMIC1_L_labelID 51
+#define DMIC1_R_labelID 52
+#define DMIC2_labelID 53
+#define DMIC2_L_labelID 54
+#define DMIC2_R_labelID 55
+#define DMIC3_labelID 56
+#define DMIC3_L_labelID 57
+#define DMIC3_R_labelID 58
+#define MIC4_labelID 59
+#define MIC4_L_labelID 60
+#define MIC4_R_labelID 61
+#define BT_UL_L_labelID 62
+#define BT_UL_R_labelID 63
+#define AMIC_labelID 64
+#define AMIC_L_labelID 65
+#define AMIC_R_labelID 66
+#define EANC_FBK_In_labelID 67
+#define EANC_FBK_Out_labelID 68
+#define EANC_FBK_L_labelID 69
+#define EANC_FBK_R_labelID 70
+#define EchoRef_L_labelID 71
+#define EchoRef_R_labelID 72
+#define MM_DL_L_labelID 73
+#define MM_DL_R_labelID 74
+#define MM_UL_labelID 75
+#define AMIC_96_labelID 76
+#define DMIC0_96_labelID 77
+#define DMIC1_96_labelID 78
+#define DMIC2_96_labelID 79
+#define DMIC_desc_labelID 80
+#define UL_MIC_48K_labelID 81
+#define EQ_DL_48K_labelID 82
+#define EQ_48K_labelID 83
+#define McPDM_Out1_labelID 84
+#define McPDM_Out2_labelID 85
+#define McPDM_Out3_labelID 86
+#define VX_UL_MUX_labelID 87
+#define MM_UL2_MUX_labelID 88
+#define MM_UL_MUX_labelID 89
+#define XinASRC_DL_VX_labelID 90
+#define ASRC_DL_VX_Coefs_labelID 91
+#define ASRC_DL_VX_Alpha_labelID 92
+#define ASRC_DL_VX_VarsBeta_labelID 93
+#define ASRC_DL_VX_8k_Regs_labelID 94
+#define XinASRC_UL_VX_labelID 95
+#define ASRC_UL_VX_Coefs_labelID 96
+#define ASRC_UL_VX_Alpha_labelID 97
+#define ASRC_UL_VX_VarsBeta_labelID 98
+#define ASRC_UL_VX_8k_Regs_labelID 99
+#define UL_48_8_DEC_labelID 100
+#define ASRC_DL_VX_16k_Regs_labelID 101
+#define ASRC_UL_VX_16k_Regs_labelID 102
+#define UL_48_16_DEC_labelID 103
+#define XinASRC_DL_MM_labelID 104
+#define ASRC_DL_MM_Coefs_labelID 105
+#define ASRC_DL_MM_Alpha_labelID 106
+#define ASRC_DL_MM_VarsBeta_labelID 107
+#define ASRC_DL_MM_Regs_labelID 108
+#define VX_REC_labelID 109
+#define VXREC_UL_M_Tones_VX_UL_labelID 110
+#define VX_REC_L_labelID 111
+#define VX_REC_R_labelID 112
+#define DL2_M_L_labelID 113
+#define DL2_M_R_labelID 114
+#define DL1_M_data_labelID 115
+#define DL1_M_Coefs_labelID 116
+#define DL2_M_LR_data_labelID 117
+#define DL2_M_LR_Coefs_labelID 118
+#define SRC_6_LP_COEFS_labelID 119
+#define SRC_6_LP_GAIN_COEFS_labelID 120
+#define SRC_6_HP_COEFS_labelID 121
+#define SRC_3_LP_COEFS_labelID 122
+#define SRC_3_LP_GAIN_COEFS_labelID 123
+#define SRC_3_HP_COEFS_labelID 124
+#define VX_DL_8_48_LP_DATA_labelID 125
+#define VX_DL_8_48_HP_DATA_labelID 126
+#define VX_DL_16_48_LP_DATA_labelID 127
+#define VX_DL_16_48_HP_DATA_labelID 128
+#define VX_UL_48_8_LP_DATA_labelID 129
+#define VX_UL_48_8_HP_DATA_labelID 130
+#define VX_UL_48_16_LP_DATA_labelID 131
+#define VX_UL_48_16_HP_DATA_labelID 132
+#define BT_UL_8_48_LP_DATA_labelID 133
+#define BT_UL_8_48_HP_DATA_labelID 134
+#define BT_UL_16_48_LP_DATA_labelID 135
+#define BT_UL_16_48_HP_DATA_labelID 136
+#define BT_DL_48_8_LP_DATA_labelID 137
+#define BT_DL_48_8_HP_DATA_labelID 138
+#define BT_DL_48_16_LP_DATA_labelID 139
+#define BT_DL_48_16_HP_DATA_labelID 140
+#define ECHO_REF_48_16_LP_DATA_labelID 141
+#define ECHO_REF_48_16_HP_DATA_labelID 142
+#define ECHO_REF_48_8_LP_DATA_labelID 143
+#define ECHO_REF_48_8_HP_DATA_labelID 144
+#define ECHO_REF_DEC_labelID 145
+#define VX_UL_8_TEMP_labelID 146
+#define VX_UL_16_TEMP_labelID 147
+#define UP_DOWN_8_48_labelID 148
+#define UP_DOWN_16_48_labelID 149
+#define SRC_6_LP_48k_labelID 150
+#define SRC_6_HP_labelID 151
+#define SRC_3_LP_48k_labelID 152
+#define SRC_3_HP_labelID 153
+#define EARP_48_96_LP_DATA_labelID 154
+#define SRC_48_96_LP_labelID 155
+#define IHF_48_96_LP_DATA_labelID 156
+#define EQ_VX_UL_16K_labelID 157
+#define pAPS_iir1_p23_labelID 158
+#define pAPS_iir1_p45_labelID 159
+#define APS_IIR_Regs_labelID 160
+#define pAPS_core_DL1_p1_labelID 161
+#define pAPS_core_DL1_p23_labelID 162
+#define pAPS_core_DL1_p45_labelID 163
+#define pAPS_core_DL1_r_labelID 164
+#define pAPS_DL2L_core_r_labelID 165
+#define pAPS_DL2R_core_r_labelID 166
+#define pAPS_COIL_core_DL1_p1_labelID 167
+#define pAPS_COIL_core_DL1_p23_labelID 168
+#define pAPS_COIL_core_DL1_p45_labelID 169
+#define pAPS_COIL_core_DL1_r_labelID 170
+#define DL2_L_APS_IIR_p23_labelID 171
+#define DL2_R_APS_IIR_p23_labelID 172
+#define DL2_L_APS_IIR_p45_labelID 173
+#define DL2_R_APS_IIR_p45_labelID 174
+#define DL2_L_APS_CORE_p1_labelID 175
+#define DL2_L_APS_CORE_p23_labelID 176
+#define DL2_L_APS_CORE_p45_labelID 177
+#define DL2_R_APS_CORE_p1_labelID 178
+#define DL2_R_APS_CORE_p23_labelID 179
+#define DL2_R_APS_CORE_p45_labelID 180
+#define DL2_L_APS_COIL_CORE_p1_labelID 181
+#define DL2_L_APS_COIL_CORE_p23_labelID 182
+#define DL2_L_APS_COIL_CORE_p45_labelID 183
+#define pAPS_COIL_DL2L_core_r_labelID 184
+#define DL2_R_APS_COIL_CORE_p1_labelID 185
+#define DL2_R_APS_COIL_CORE_p23_labelID 186
+#define DL2_R_APS_COIL_CORE_p45_labelID 187
+#define pAPS_COIL_DL2R_core_r_labelID 188
+#define DL1_APS_labelID 189
+#define DL2_L_APS_labelID 190
+#define DL2_R_APS_labelID 191
+#define pEANC_p0_labelID 192
+#define pEANC_p1_labelID 193
+#define pEANC_p23_labelID 194
+#define pEANC_p45_labelID 195
+#define pEANC_reg1_labelID 196
+#define pEANC_reg2_labelID 197
+#define pEANC_reg3_labelID 198
+#define pEANC_r_labelID 199
+#define DL1_APS_EQ_p23_labelID 200
+#define DL1_APS_EQ_p45_labelID 201
+#define DL2_APS_EQ_p23_labelID 202
+#define DL2_APS_EQ_p45_labelID 203
+#define pDC_EANC_p23_labelID 204
+#define pDC_EANC_r_labelID 205
+#define pVIBRA1_p0_labelID 206
+#define pVIBRA1_p1_labelID 207
+#define pVIBRA1_p23_labelID 208
+#define pVIBRA1_p45_labelID 209
+#define pVibra1_pR1_labelID 210
+#define pVibra1_pR2_labelID 211
+#define pVibra1_pR3_labelID 212
+#define pVIBRA1_r_labelID 213
+#define pVIBRA2_p0_labelID 214
+#define pVIBRA2_p1_labelID 215
+#define pVIBRA2_p23_labelID 216
+#define pVIBRA2_p45_labelID 217
+#define pCtrl_p67_labelID 218
+#define pVIBRA2_r_labelID 219
+#define VIBRA_labelID 220
+#define PING_labelID 221
+#define PING_Regs_labelID 222
+#define UP_48_96_LP_COEFS_labelID 223
+#define AMIC_96_48_data_labelID 224
+#define DOWN_96_48_Coefs_labelID 225
+#define DOWN_96_48_Regs_labelID 226
+#define DMIC0_96_48_data_labelID 227
+#define DMIC1_96_48_data_labelID 228
+#define DMIC2_96_48_data_labelID 229
+#define EANC_FBK_96_48_data_labelID 230
+#define pDC_EANC_r2_labelID 231
+#define SIO_DMIC_labelID 232
+#define SIO_PDM_UL_labelID 233
+#define SIO_BT_VX_UL_labelID 234
+#define SIO_MM_UL_labelID 235
+#define SIO_MM_UL2_labelID 236
+#define SIO_VX_UL_labelID 237
+#define SIO_MM_DL_labelID 238
+#define SIO_VX_DL_labelID 239
+#define SIO_TONES_DL_labelID 240
+#define SIO_VIB_DL_labelID 241
+#define SIO_BT_VX_DL_labelID 242
+#define SIO_PDM_DL_labelID 243
+#define SIO_MM_EXT_OUT_labelID 244
+#define SIO_MM_EXT_IN_labelID 245
+#define SIO_TDM_OUT_labelID 246
+#define SIO_TDM_IN_labelID 247
+#define DMIC_ATC_PTR_labelID 248
+#define MCPDM_UL_ATC_PTR_labelID 249
+#define BT_VX_UL_ATC_PTR_labelID 250
+#define MM_UL_ATC_PTR_labelID 251
+#define MM_UL2_ATC_PTR_labelID 252
+#define VX_UL_ATC_PTR_labelID 253
+#define MM_DL_ATC_PTR_labelID 254
+#define VX_DL_ATC_PTR_labelID 255
+#define TONES_DL_ATC_PTR_labelID 256
+#define VIB_DL_ATC_PTR_labelID 257
+#define BT_VX_DL_ATC_PTR_labelID 258
+#define PDM_DL_ATC_PTR_labelID 259
+#define MM_EXT_OUT_ATC_PTR_labelID 260
+#define MM_EXT_IN_ATC_PTR_labelID 261
+#define TDM_OUT_ATC_PTR_labelID 262
+#define TDM_IN_ATC_PTR_labelID 263
+#define MCU_IRQ_FIFO_ptr_labelID 264
+#define DEBUG_IRQ_FIFO_reg_labelID 265
+#define UP_DOWN_48_96_labelID 266
+#define OSR96_2_labelID 267
+#define DEBUG_GAINS_labelID 268
+#define DBG_8K_PATTERN_labelID 269
+#define DBG_16K_PATTERN_labelID 270
+#define DBG_24K_PATTERN_labelID 271
+#define DBG_48K_PATTERN_labelID 272
+#define DBG_96K_PATTERN_labelID 273
+#define UL_VX_UL_48_8K_labelID 274
+#define UL_VX_UL_48_16K_labelID 275
+#define BT_DL_labelID 276
+#define BT_UL_labelID 277
+#define BT_DL_8k_labelID 278
+#define BT_DL_16k_labelID 279
+#define BT_UL_8k_labelID 280
+#define BT_UL_16k_labelID 281
+#define MM_EXT_IN_labelID 282
+#define MM_EXT_IN_L_labelID 283
+#define MM_EXT_IN_R_labelID 284
+#define ECHO_REF_48_16_WRAP_labelID 285
+#define ECHO_REF_48_8_WRAP_labelID 286
+#define BT_UL_16_48_WRAP_labelID 287
+#define BT_UL_8_48_WRAP_labelID 288
+#define BT_DL_48_16_WRAP_labelID 289
+#define BT_DL_48_8_WRAP_labelID 290
+#define VX_DL_16_48_WRAP_labelID 291
+#define VX_DL_8_48_WRAP_labelID 292
+#define VX_UL_48_16_WRAP_labelID 293
+#define VX_UL_48_8_WRAP_labelID 294
+#define APS_DL1_IRQs_WRAP_labelID 295
+#define APS_DL2_L_IRQs_WRAP_labelID 296
+#define APS_DL2_R_IRQs_WRAP_labelID 297
+#define ATC_NULL_BUFFER_labelID 298
+#define MEM_INIT_hal_mem_labelID 299
+#define MEM_INIT_write_mem_labelID 300
+#define MEM_INIT_regs_labelID 301
+#define GAIN_0DB_labelID 302
-#endif /* _ABE_INITXXXX_LABELS_H_ */
+#endif /* _ABE_INITXXXX_LABELS_H_ */
diff --git a/sound/soc/omap/abe/abe_irq.c b/sound/soc/omap/abe/abe_irq.c
index 61bd1263c0da..1a8efa599e52 100644
--- a/sound/soc/omap/abe/abe_irq.c
+++ b/sound/soc/omap/abe/abe_irq.c
@@ -1,11 +1,22 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
@@ -19,53 +30,38 @@
* - Activity Tracing
*/
-/*
- * ABE_IRQ_PING_PONG
- * Parameter :
- * No parameter
+/**
+ * abe_irq_ping_pong
*
- * Operations :
* Call the respective subroutine depending on the IRQ FIFO content:
* APS interrupts : IRQtag_APS to [31:28], APS_IRQs to [27:16], loopCounter to [15:0]
* SEQ interrupts : IRQtag_COUNT to [31:28], Count_IRQs to [27:16], loopCounter to [15:0]
* Ping-Pong Interrupts : IRQtag_PP to [31:28], PP_MCU_IRQ to [27:16], loopCounter to [15:0]
- * Check for ping-pong subroutines (low-power players)
- *
- * Return value :
- * None.
*/
-void abe_irq_ping_pong(void)
+void abe_irq_ping_pong (void)
{
- abe_call_subroutine(abe_irq_pingpong_player_id, NOPARAMETER, NOPARAMETER, NOPARAMETER, NOPARAMETER);
+ abe_call_subroutine (abe_irq_pingpong_player_id, NOPARAMETER, NOPARAMETER,
+ NOPARAMETER, NOPARAMETER);
}
-/*
- * ABE_IRQ_CHECK_FOR_SEQUENCES
- * Parameter :
- * No parameter
+/**
+ * abe_irq_check_for_sequences
+* @i: sequence ID
*
- * Operations :
* check the active sequence list
*
- * Return value :
- * None.
*/
-void abe_irq_check_for_sequences(abe_uint32 i)
+void abe_irq_check_for_sequences (u32 i)
{
}
-/*
- * ABE_IRQ_APS
- * Parameter :
- * No parameter
+/**
+ * abe_irq_aps
*
- * Operations :
* call the application subroutines that updates the acoustics protection filters
- *
- * Return value :
- * None.
*/
-void abe_irq_aps(abe_uint32 aps_info)
+void abe_irq_aps (u32 aps_info)
{
- abe_call_subroutine(abe_irq_aps_adaptation_id, NOPARAMETER, NOPARAMETER, NOPARAMETER, NOPARAMETER);
+ abe_call_subroutine (abe_irq_aps_adaptation_id, NOPARAMETER, NOPARAMETER,
+ NOPARAMETER, NOPARAMETER);
}
diff --git a/sound/soc/omap/abe/abe_lib.c b/sound/soc/omap/abe/abe_lib.c
index f27b1485c548..dde165abeac1 100644
--- a/sound/soc/omap/abe/abe_lib.c
+++ b/sound/soc/omap/abe/abe_lib.c
@@ -1,22 +1,27 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
-#include "abe_main.h"
-#include <linux/io.h>
-
-void __iomem *io_base;
-void abe_init_mem(void __iomem *_io_base)
-{
- io_base = _io_base;
-}
+#include "abe_main.h"
+#include "abe_ext.h"
#define ABE_PMEM_BASE_OFFSET_MPU 0xe0000
#define ABE_CMEM_BASE_OFFSET_MPU 0xa0000
@@ -24,416 +29,159 @@ void abe_init_mem(void __iomem *_io_base)
#define ABE_DMEM_BASE_OFFSET_MPU 0x80000
#define ABE_ATC_BASE_OFFSET_MPU 0xf1000
-#if 0
-/*
- * ABE_TRANSLATE_TO_XMEM_FORMAT
+void __iomem *io_base;
+
+/**
+ * abe_init_mem - Allocate Kernel space memory map for ABE
*
- * Parameter :
- * Operations :
- * translates a floating point data to the cmem/smem/dmem data format
- * Return value :
- * None.
+ * Memory map of ABE memory space for PMEM/DMEM/SMEM/DMEM
*/
-void abe_translate_to_xmem_format(abe_int32 memory_bank, abe_float fc, abe_uint32 *c)
+void abe_init_mem(void __iomem *_io_base)
{
- abe_int32 l;
- abe_float afc;
-
- l = 0;
- afc = absolute(fc);
+ io_base = _io_base;
+}
- switch (memory_bank) {
- case ABE_CMEM:
- if (afc >= 1.0 && afc < 32.0) {
- /* ALU post shifter +6 */
- l = (abe_int32)(fc * (1 << 16));
- l = (l << 2) + 2;
- } else if (afc >= 0.5 && afc < 1.0) {
- /* ALU post shifter +1 */
- l = (abe_int32)(fc * (1 << 21));
- l = (l << 2) + 1;
- } else if (afc >= 0.25 && afc < 0.5) {
- /* ALU post shifter 0 */
- l = (abe_int32)(fc * (1 << 22));
- l = (l << 2) + 0;
- } else if (afc < 0.25) {
- /* ALU post shifter -6 */
- l = (abe_int32)(fc * (1 << 28));
- l = (l << 2) + 3;
- }
- break;
- case ABE_SMEM:
- /* Q23 data format */
- l = (abe_int32)(fc * (1 << 23));
- break;
- case ABE_DMEM:
- /* Q31 data format (1<<31)=0 */
- l = (abe_int32)(fc * 2* (1 << 30));
- break;
- default: /* ABE_PMEM */
- /* Q31 data format */
- l = (abe_int32)(2 * fc * 2* (1 << 30));
- break;
- }
+#if PC_SIMULATION
+#include <stdlib.h>
+#endif
- *c = l;
-}
+/**
+* abe_fprintf
+* @line: character line to be printed
+*
+* Print ABE debug messages.
+*/
-/*
- * ABE_TRANSLATE_GAIN_FORMAT
- *
- * Parameter :
- * Operations :
- * f: original format name for gain or frequency.
- * 1=linear ABE => decibels
- * 2=decibels => linear ABE firmware format
+/**
+ * abe_read_feature_from_port
+ * @x: d
*
- * lin = power(2, decibel/602); lin = [0.0001 .. 30.0]
- * decibel = 6.02 * log2(lin), decibel = [-70 .. +30]
+ * TBD
*
- * g1: pointer to the original data
- * g2: pointer to the translated gain data
- *
- * Return value :
- * None.
*/
-void abe_translate_gain_format(abe_uint32 f, abe_float g1, abe_float *g2)
+void abe_read_feature_from_port (u32 x)
{
- abe_float g, frac_part, gg1, gg2;
- abe_int32 int_part, i;
-
- #define C_20LOG2 ((abe_float)6.020599913)
-
- gg1 = (g1);
- int_part = 0;
- frac_part = gg2 = 0;
-
- switch (f) {
- case DECIBELS_TO_LINABE:
- g = gg1 / C_20LOG2;
- int_part = (abe_int32) g;
- frac_part = g - int_part;
-
- gg2 = abe_power_of_two(frac_part);
-
- if (int_part > 0)
- gg2 = gg2 * (1 << int_part);
- else
- gg2 = gg2 / (1 << (-int_part));
-
- break;
- case LINABE_TO_DECIBELS:
- if (gg1 == 1.0) {
- gg2 = 0.0;
- return;
- }
-
- /* find the power of 2 by iteration */
- if (gg1 > 1.0) {
- for (i = 0; i < 63; i++) {
- if ((1 << i) > gg1) {
- int_part = (i-1);
- frac_part = gg1 / (1 << int_part);
- break;
- }
- }
- gg2 = C_20LOG2 * (int_part + abe_log_of_two(frac_part));
- } else {
- for (i = 0; i < 63; i++) {
- if (((1 << i) * gg1) > 1) {
- int_part = i;
- frac_part = gg1 * (1 << int_part);
- break;
- }
- }
- /* compute the dB using polynomial
- * interpolation in the [1..2] range
- */
- gg2 = C_20LOG2 * (((-1)*int_part) + abe_log_of_two(frac_part));}
- break;
- }
-
- *g2 = gg2;
- }
+}
-/*
- * ABE_TRANSLATE_RAMP_FORMAT
+/**
+ * abe_write_feature_to_port
+ * @x: d
*
- * Parameter :
- * Operations :
- * f: original format name for gain or frequency.
- * 1=ABE IIR coef => microseconds
- * 2=microseconds => ABE IIR coef
+ * TBD
*
- * g1: pointer to the original data
- * g2: pointer to the translated gain data
- *
- * Return value :
- * None.
*/
-void abe_translate_ramp_format(abe_float ramp, abe_float *ramp_iir1)
+void abe_write_feature_to_port (u32 x)
{
- *ramp_iir1 = 0.125;
}
-/*
- * ABE_TRANSLATE_EQU_FORMAT
- *
- * Parameter :
- * Operations :
- * Translate
+/**
+ * abe_read_fifo
+ * @x: d
*
- * Return value :
- * None.
+ * TBD
*/
-void abe_translate_equ_format(abe_equ_t *p, abe_float *iir, abe_uint32 n)
+void abe_read_fifo (u32 x)
{
-#if 0
- switch (p->type
-typedef struct {
- abe_iir_t equ_param1; /* type of filter */
- abe_uint32 equ_param2; /* filter length */
- union { /* parameters are the direct and recursive coefficients in */
- abe_int32 type1 [NBEQ1]; /* Q6.26 integer fixed-point format. */
- struct {
- abe_int32 freq [NBEQ2]; /* parameters are the frequency (type "freq") and Q factors */
- abe_int32 gain [NBEQ2]; /* (type "gain") of each band. */
- } type2;
- } coef;
- abe_int32 equ_param3;
- } abe_equ_t;
-
- Fs = 48000;
- f0 = 19000;
- Q = sqrt(0.5)
- dBgain = -40
-
-
- A = sqrt (power (10, dBgain/20));
- w0 = 2*pi*f0/Fs
- alpha = sin(w0) / (2*Q);
-
- %PeakingEQ ==========================================
- b_peak = print_ABE_data ([1+alpha*A -2*cos(w0) 1-alpha*A],3);
- a_peak = print_ABE_data ([1+alpha/A -2*cos(w0) 1-alpha/A],3);
-
-#endif
}
-#endif
-/*
- * ABE_FPRINTF
+/**
+ * abe_write_fifo
+ * @mem_bank: currently only ABE_DMEM supported
+ * @addr: FIFO descriptor address ( descriptor fields : READ ptr, WRITE ptr,
+ * FIFO START_ADDR, FIFO END_ADDR)
+ * @data: data to write to FIFO
+ * @number: number of 32-bit words to write to DMEM FIFO
*
- * Parameter :
- * character line to be printed
- *
- * Operations :
- *
- * Return value :
- * None.
+ * write DMEM FIFO and update FIFO descriptor, it is assumed that FIFO descriptor
+ * is located in DMEM
*/
-#if 0
-void abe_fprintf(char *line)
+void abe_write_fifo (u32 memory_bank, u32 descr_addr, u32 *data, u32 nb_data32)
{
- switch (abe_dbg_output) {
- case NO_OUTPUT:
- break;
- case TERMINAL_OUTPUT:
- break;
- case LINE_OUTPUT:
- break;
- case DEBUG_TRACE_OUTPUT:
+ u32 fifo_addr[4];
+ u32 i;
+
+ /* read FIFO descriptor from DMEM */
+ abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, descr_addr,
+ &fifo_addr[0], 4*sizeof(u32));
+
+ /* WRITE ptr < FIFO start address */
+ if ( fifo_addr[1] < fifo_addr[2])
+ abe_dbg_error_log (ABE_FW_FIFO_WRITE_PTR_ERR);
+
+ /* WRITE ptr > FIFO end address */
+ if ( fifo_addr[1] > fifo_addr[3])
+ abe_dbg_error_log (ABE_FW_FIFO_WRITE_PTR_ERR);
+
+ switch ( memory_bank ) {
+ case ABE_DMEM :
+ for (i=0; i<nb_data32; i++) {
+ abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ (s32) fifo_addr[1], (u32*) (data+i), 4);
+
+ /* increment WRITE pointer */
+ fifo_addr[1] = fifo_addr[1] + 4;
+ if (fifo_addr[1] > fifo_addr[3])
+ fifo_addr[1] = fifo_addr[2];
+ if (fifo_addr[1] == fifo_addr[0])
+ abe_dbg_error_log (ABE_FW_FIFO_WRITE_PTR_ERR);
+ }
+ /* update WRITE pointer in DMEM */
+ abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, descr_addr+
+ sizeof(u32), &fifo_addr[1], 4);
break;
- default:
+ default :
+ /* printf("currently only DMEM FIFO write supported ERROR\n"); */
break;
}
-}
-#endif
-
-/*
- * ABE_READ_FEATURE_FROM_PORT
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
- *
- */
-void abe_read_feature_from_port(abe_uint32 x)
-{
- just_to_avoid_the_many_warnings = x;
-}
-
-/*
- * ABE_WRITE_FEATURE_TO_PORT
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
- *
- */
-void abe_write_feature_to_port(abe_uint32 x)
-{
- just_to_avoid_the_many_warnings = x;
-}
-/*
- * ABE_READ_FIFO
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
- *
- */
-void abe_read_fifo(abe_uint32 x)
-{
- just_to_avoid_the_many_warnings = x;
-}
-/*
- * ABE_WRITE_FIFO
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
- *
- */
-void abe_write_fifo(abe_uint32 x)
-{
- just_to_avoid_the_many_warnings = x;
}
-/*
- * ABE_BLOCK_COPY
+/**
+ * abe_block_copy
+ * @direction: direction of the data move (Read/Write)
+ * @memory_bamk:memory bank among PMEM, DMEM, CMEM, SMEM, ATC/IO
+ * @address: address of the memory copy (byte addressing)
+ * @data: pointer to the data to transfer
+ * @nb_bytes: number of data to move
*
- * Parameter :
- * direction of the data move (Read/Write)
- * memory bank among PMEM, DMEM, CMEM, SMEM, ATC/IO
- * address of the memory copy (byte addressing)
- * long pointer to the data
- * number of data to move
- *
- * Operations :
- * block data move
- *
- * Return value :
- * none
+ * Memory transfer to/from ABE to MPU
*/
-void abe_block_copy(abe_int32 direction, abe_int32 memory_bank, abe_int32 address, abe_uint32 *data, abe_uint32 nb_bytes)
+void abe_block_copy (u32 direction, u32 memory_bank, u32 address,
+ u32 *data, u32 nb_bytes)
{
-#if PC_SIMULATION
- abe_uint32 *smem_tmp, smem_offset, smem_base, nb_words48;
-
- if (direction == COPY_FROM_HOST_TO_ABE) {
- switch (memory_bank) {
- case ABE_PMEM:
- target_server_write_pmem(address/4, data, nb_bytes/4);
- break;
- case ABE_CMEM:
- target_server_write_cmem(address/4, data, nb_bytes/4);
- break;
- case ABE_ATC:
- target_server_write_atc(address/4, data, nb_bytes/4);
- break;
- case ABE_SMEM:
- nb_words48 = (nb_bytes +7)>>3;
- /* temporary buffer manages the OCP access to 32bits boundaries */
- smem_tmp = malloc(nb_bytes + 64);
- /* address is on SMEM 48bits lines boundary */
- smem_base = address - (address & 7);
- target_server_read_smem(smem_base/8, smem_tmp, 2 + nb_words48);
- smem_offset = address & 7;
- memcpy(&(smem_tmp[smem_offset>>2]), data, nb_bytes);
- target_server_write_smem(smem_base/8, smem_tmp, 2 + nb_words48);
- free(smem_tmp);
- break;
- case ABE_DMEM:
- target_server_write_dmem(address, data, nb_bytes);
- break;
- default:
- abe_dbg_param |= ERR_LIB;
- abe_dbg_error_log(ABE_BLOCK_COPY_ERR);
- break;
- }
- } else {
- switch (memory_bank) {
- case ABE_PMEM:
- target_server_read_pmem(address/4, data, nb_bytes/4);
- break;
- case ABE_CMEM:
- target_server_read_cmem(address/4, data, nb_bytes/4);
- break;
- case ABE_ATC:
- target_server_read_atc(address/4, data, nb_bytes/4);
- break;
- case ABE_SMEM:
- nb_words48 = (nb_bytes +7)>>3;
- /* temporary buffer manages the OCP access to 32bits boundaries */
- smem_tmp = malloc(nb_bytes + 64);
- /* address is on SMEM 48bits lines boundary */
- smem_base = address - (address & 7);
- target_server_read_smem(smem_base/8, smem_tmp, 2 + nb_words48);
- smem_offset = address & 7;
- memcpy(data, &(smem_tmp[smem_offset>>2]), nb_bytes);
- free(smem_tmp);
- break;
- case ABE_DMEM:
- target_server_read_dmem(address, data, nb_bytes);
- break;
- default:
- abe_dbg_param |= ERR_LIB;
- abe_dbg_error_log(ABE_BLOCK_COPY_ERR);
- break;
- }
- }
-#else
- abe_uint32 i;
- abe_uint32 base_address = 0, *src_ptr, *dst_ptr, n;
+ u32 i;
+ u32 base_address = 0, *src_ptr, *dst_ptr, n;
switch (memory_bank) {
case ABE_PMEM:
- base_address = (abe_uint32) io_base + ABE_PMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_PMEM_BASE_OFFSET_MPU;
break;
case ABE_CMEM:
- base_address = (abe_uint32) io_base + ABE_CMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_CMEM_BASE_OFFSET_MPU;
break;
case ABE_SMEM:
- base_address = (abe_uint32) io_base + ABE_SMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_SMEM_BASE_OFFSET_MPU;
break;
case ABE_DMEM:
- base_address = (abe_uint32) io_base + ABE_DMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_DMEM_BASE_OFFSET_MPU;
break;
case ABE_ATC:
- base_address = (abe_uint32) io_base + ABE_ATC_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_ATC_BASE_OFFSET_MPU;
break;
default:
- base_address = (abe_uint32) io_base + ABE_SMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_SMEM_BASE_OFFSET_MPU;
abe_dbg_param |= ERR_LIB;
abe_dbg_error_log(ABE_BLOCK_COPY_ERR);
break;
}
if (direction == COPY_FROM_HOST_TO_ABE) {
- dst_ptr = (abe_uint32 *)(base_address + address);
- src_ptr = (abe_uint32 *)data;
+ dst_ptr = (u32 *)(base_address + address);
+ src_ptr = (u32 *)data;
} else {
- dst_ptr = (abe_uint32 *)data;
- src_ptr = (abe_uint32 *)(base_address + address);
+ dst_ptr = (u32 *)data;
+ src_ptr = (u32 *)(base_address + address);
}
n = (nb_bytes/4);
@@ -441,130 +189,125 @@ void abe_block_copy(abe_int32 direction, abe_int32 memory_bank, abe_int32 addres
for (i = 0; i < n; i++)
*dst_ptr++ = *src_ptr++;
-#endif
}
+
+
+#if 0
/*
- * ABE_RESET_MEM
+ * ABE_SINGLE_COPY
*
- * Parameter :
- * memory bank among DMEM, SMEM
- * address of the memory copy (byte addressing)
- * number of data to move
+ * Parameter :
+ * address of the memory copy (byte addressing)
+ * long pointer to the data
+ * number of data to move
*
- * Operations :
- * reset memory
+ * Operations :
+ * 32bits data move
*
- * Return value :
- * none
+ * Return value :
+ * none
*/
-void abe_reset_mem(abe_int32 memory_bank, abe_int32 address, abe_uint32 nb_bytes)
-{
-#if PC_SIMULATION
- extern void target_server_write_smem(abe_uint32 address_48bits, abe_uint32 *data, abe_uint32 nb_words_48bits);
- extern void target_server_write_dmem(abe_uint32 address_byte, abe_uint32 *data, abe_uint32 nb_byte);
-
- abe_uint32 *smem_tmp, *data, smem_offset, smem_base, nb_words48;
+void abe_write_dmem (u32 address, u32 *data, u32 nb_bytes)
+void abe_read_dmem (u32 address, u32 *data, u32 nb_bytes)
+void abe_write_cmem (u32 address, u32 *data, u32 nb_bytes)
+void abe_read_cmem (u32 address, u32 *data, u32 nb_bytes)
+void abe_write_smem (u32 address, u32 *data, u32 nb_bytes)
+void abe_read_smem (u32 address, u32 *data, u32 nb_bytes)
+void abe_write_atc (u32 address, u32 *data, u32 nb_bytes)
+void abe_read_atc (u32 address, u32 *data, u32 nb_bytes)
+#endif
- data = calloc(nb_bytes, 1);
- switch (memory_bank) {
- case ABE_SMEM:
- nb_words48 = (nb_bytes +7)>>3;
- /* temporary buffer manages the OCP access to 32bits boundaries */
- smem_tmp = malloc (nb_bytes + 64);
- /* address is on SMEM 48bits lines boundary */
- smem_base = address - (address & 7);
- target_server_read_smem (smem_base/8, smem_tmp, 2 + nb_words48);
- smem_offset = address & 7;
- memcpy (&(smem_tmp[smem_offset>>2]), data, nb_bytes);
- target_server_write_smem (smem_base/8, smem_tmp, 2 + nb_words48);
- free (smem_tmp);
- break;
- case ABE_DMEM:
- target_server_write_dmem(address, data, nb_bytes);
- break;
- default:
- abe_dbg_param |= ERR_LIB;
- abe_dbg_error_log(ABE_BLOCK_COPY_ERR);
- }
- free(data);
-#else
- abe_uint32 i;
- abe_uint32 *dst_ptr, n;
- abe_uint32 base_address = 0;
+/**
+ * abe_reset_mem
+ *
+ * @memory_bank: memory bank among DMEM, SMEM
+ * @address: address of the memory copy (byte addressing)
+ * @nb_bytes: number of data to move
+ *
+ * Reset ABE memory
+ */
+void abe_reset_mem (u32 memory_bank, u32 address, u32 nb_bytes)
+{
+ u32 i;
+ u32 *dst_ptr, n;
+ u32 base_address = 0;
switch (memory_bank) {
case ABE_SMEM:
- base_address = (abe_uint32) io_base + ABE_SMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_SMEM_BASE_OFFSET_MPU;
break;
case ABE_DMEM:
- base_address = (abe_uint32) io_base + ABE_DMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_DMEM_BASE_OFFSET_MPU;
break;
case ABE_CMEM:
- base_address = (abe_uint32) io_base + ABE_CMEM_BASE_OFFSET_MPU;
+ base_address = (u32) io_base + ABE_CMEM_BASE_OFFSET_MPU;
break;
}
- dst_ptr = (abe_uint32 *) (base_address + address);
+ dst_ptr = (u32 *) (base_address + address);
n = (nb_bytes/4);
for (i = 0; i < n; i++)
*dst_ptr++ = 0;
-#endif
}
-/*
- * ABE_MONITORING
- *
- * Parameter :
+/**
+ * abe_monitoring
*
- * Operations :
- * checks the internal status of ABE and HAL
- *
- * Return value :
- * Call Backs on Errors
+ * checks the internal status of ABE and HAL
*/
-void abe_monitoring(void)
+void abe_monitoring (void)
{
abe_dbg_param = 0;
}
-/*
- * ABE_FORMAT_SWITCH
- *
- * Parameter :
+/**
+ * abe_format_switch
+ * @f: port format
+ * @iter: port iteration
+ * @mulfac: multiplication factor
*
- * Operations :
- * translates the sampling and data length to ITER number for the DMA
- * and the multiplier factor to apply during data move with DMEM
+ * translates the sampling and data length to ITER number for the DMA
+ * and the multiplier factor to apply during data move with DMEM
*
- * Return value :
- * Call Backs on Errors
*/
-void abe_format_switch(abe_data_format_t *f, abe_uint32 *iter, abe_uint32 *mulfac)
+void abe_format_switch (abe_data_format_t *f, u32 *iter, u32 *mulfac)
{
- abe_uint32 n_freq;
+ u32 n_freq;
#if FW_SCHED_LOOP_FREQ==4000
switch (f->f) {
- /* nb of samples processed by scheduling loop */
- case 8000: n_freq = 2; break;
- case 16000: n_freq = 4; break;
- case 24000: n_freq = 6; break;
- case 44100: n_freq = 12; break;
- case 96000: n_freq = 24; break;
- default /*case 48000*/: n_freq = 12; break;
+
+ /* nb of samples processed by scheduling loop */
+ case 8000:
+ n_freq = 2;
+ break;
+ case 16000:
+ n_freq = 4;
+ break;
+ case 24000:
+ n_freq = 6;
+ break;
+ case 44100:
+ n_freq = 12;
+ break;
+ case 96000:
+ n_freq = 24;
+ break;
+ default /*case 48000*/:
+ n_freq = 12;
+ break;
}
#else
- n_freq = 0; /* erroneous cases */
+ /* erroneous cases */
+ n_freq = 0;
#endif
switch (f->samp_format) {
case MONO_MSB:
case MONO_RSHIFTED_16:
- *mulfac = 1;
- break;
case STEREO_16_16:
*mulfac = 1;
break;
@@ -597,64 +340,50 @@ void abe_format_switch(abe_data_format_t *f, abe_uint32 *iter, abe_uint32 *mulfa
*mulfac = 1;
break;
}
-
*iter = (n_freq * (*mulfac));
}
-/*
- * ABE_DMA_PORT_ITERATION
+/**
+ * abe_dma_port_iteration
+ * @f: port format
*
- * Parameter :
- *
- * Operations :
- * translates the sampling and data length to ITER number for the DMA
- *
- * Return value :
- * Call Backs on Errors
+ * translates the sampling and data length to ITER number for the DMA
*/
-abe_uint32 abe_dma_port_iteration(abe_data_format_t *f)
+u32 abe_dma_port_iteration (abe_data_format_t *f)
{
- abe_uint32 iter, mulfac;
+ u32 iter, mulfac;
- abe_format_switch(f, &iter, &mulfac);
+ abe_format_switch (f, &iter, &mulfac);
return iter;
}
-/*
- * ABE_DMA_PORT_ITER_FACTOR
+/**
+ * abe_dma_port_iter_factor
+ * @f: port format
*
- * Parameter :
- *
- * Operations :
- * returns the multiplier factor to apply during data move with DMEM
- *
- * Return value :
- * Call Backs on Errors
+ * returns the multiplier factor to apply during data move with DMEM
*/
-abe_uint32 abe_dma_port_iter_factor(abe_data_format_t *f)
+u32 abe_dma_port_iter_factor (abe_data_format_t *f)
{
- abe_uint32 iter, mulfac;
+ u32 iter, mulfac;
- abe_format_switch(f, &iter, &mulfac);
+ abe_format_switch (f, &iter, &mulfac);
return mulfac;
}
-/*
- * ABE_DMA_PORT_COPY_SUBROUTINE_ID
+/**
+ * abe_dma_port_copy_subroutine_id
*
- * Parameter :
+ * @port_id: ABE port ID
*
- * Operations :
- * returns the index of the function doing the copy in I/O tasks
- *
- * Return value :
- * Call Backs on Errors
+ * returns the index of the function doing the copy in I/O tasks
*/
-abe_uint32 abe_dma_port_copy_subroutine_id(abe_port_id port_id)
+u32 abe_dma_port_copy_subroutine_id (u32 port_id)
{
- abe_uint32 sub_id;
+ u32 sub_id;
+
if (abe_port[port_id].protocol.direction == ABE_ATC_DIRECTION_IN) {
switch (abe_port[port_id].format.samp_format) {
case MONO_MSB:
diff --git a/sound/soc/omap/abe/abe_lib.h b/sound/soc/omap/abe/abe_lib.h
index e7e6b6cee759..8dc219e69229 100644
--- a/sound/soc/omap/abe/abe_lib.h
+++ b/sound/soc/omap/abe/abe_lib.h
@@ -1,33 +1,36 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void abe_init_mem(void __iomem *io_base);
-void abe_translate_gain_format(abe_uint32 f, abe_float g1, abe_float *g2);
-void abe_translate_ramp_format(abe_float g1, abe_float *g2);
-
-/*
- * ABE_FPRINTF
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
*
- * Parameter :
- * character line to be printed
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
*
- * Operations :
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
*
- * Return value :
- * None.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
-void abe_fprintf(char *line);
+void abe_init_mem(void __iomem *io_base);
+/**
+ * abe_fprintf
+ *
+ * Parameter :
+ * character line to be printed
+ *
+ * Operations :
+ *
+ * Return value :
+ * None.
+ */
+void abe_fprintf (char *line);
/*
* ABE_READ_FEATURE_FROM_PORT
@@ -41,7 +44,7 @@ void abe_fprintf(char *line);
* Return value :
*
*/
-void abe_read_feature_from_port(abe_uint32 x);
+void abe_read_feature_from_port (u32 x);
/*
* ABE_WRITE_FEATURE_TO_PORT
@@ -55,7 +58,7 @@ void abe_read_feature_from_port(abe_uint32 x);
* Return value :
*
*/
-void abe_write_feature_to_port(abe_uint32 x);
+void abe_write_feature_to_port (u32 x);
/*
* ABE_READ_FIFO
@@ -69,21 +72,27 @@ void abe_write_feature_to_port(abe_uint32 x);
* Return value :
*
*/
-void abe_read_fifo(abe_uint32 x);
+void abe_read_fifo (u32 x);
/*
* ABE_WRITE_FIFO
*
* Parameter :
- * x : d
+ * mem_bank : currently only ABE_DMEM supported
+ * addr : FIFO descriptor address ( descriptor fields : READ ptr,
+ * WRITE ptr, FIFO START_ADDR, FIFO END_ADDR)
+ * data to write to FIFO
+ * number of 32-bit words to write to DMEM FIFO
*
* Operations :
- *
+ * write DMEM FIFO and update FIFO descriptor, it is assumed that FIFO
+ * descriptor is located in DMEM
*
* Return value :
- *
+ * none
*/
-void abe_write_fifo(abe_uint32 x);
+void abe_write_fifo (u32 mem_bank, u32 addr, u32 *data, u32 nb_data32);
+
/*
* ABE_BLOCK_COPY
@@ -101,24 +110,23 @@ void abe_write_fifo(abe_uint32 x);
* Return value :
* none
*/
-void abe_block_copy(abe_int32 direction, abe_int32 memory_bank, abe_int32 address, abe_uint32 *data, abe_uint32 nb);
+void abe_block_copy (u32 direction, u32 memory_bank, u32 address, u32 *data,
+ u32 nb);
/*
- * ABE_RESET_MEM
+ * ABE_RESET_MEM
*
- *Parameter:
- * memory bank among DMEM, SMEM
- * address of the memory copy (byte addressing)
- * number of data to move
+ * Parameter :
+ * memory bank among DMEM, SMEM
+ * address of the memory copy (byte addressing)
+ * number of data to move
*
- * Operations:
- * reset memory
+ * Operations :
+ * reset memory
*
- * Return value:
- * none
+ * Return value :
+ * none
*/
-void abe_reset_mem(abe_int32 memory_bank, abe_int32 address, abe_uint32 nb_bytes);
+void abe_reset_mem (u32 memory_bank, u32 address, u32 nb_bytes);
+
-#ifdef __cplusplus
-}
-#endif
diff --git a/sound/soc/omap/abe/abe_main.c b/sound/soc/omap/abe/abe_main.c
index 3423fe62e50a..51c5997b360f 100644
--- a/sound/soc/omap/abe/abe_main.c
+++ b/sound/soc/omap/abe/abe_main.c
@@ -1,26 +1,23 @@
-/* =============================================================================
-* Texas Instruments OMAP(TM) Platform Software
-* (c) Copyright 2009 Texas Instruments Incorporated. All Rights Reserved.
-*
-* Use of this software is controlled by the terms and conditions found
-* in the license agreement under which this software has been supplied.
-* =========================================================================== */
-/**
- * @file ABE_MAIN.C
+/*
+ * ALSA SoC OMAP ABE driver
+ *
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
*
- * 'ABEMAIN.C' dummy main of the HAL
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*
- * @path
- * @rev 01.00
*/
-/* ----------------------------------------------------------------------------
-*!
-*! Revision History
-*! ===================================
-*! 27-Nov-2008 Original (LLF)
-*! 05-Jun-2009 V05 release
-* =========================================================================== */
-
#if !PC_SIMULATION
@@ -31,69 +28,250 @@
void main (void)
{
- abe_dma_t dma_sink, dma_source;
- abe_data_format_t format;
- abe_uint32 base_address;
+ abe_dma_t dma_sink, dma_source;
+ abe_data_format_t format;
+ abe_uint32 base_address;
- abe_auto_check_data_format_translation();
- abe_reset_hal();
- abe_check_opp();
- abe_check_dma();
+ abe_auto_check_data_format_translation ();
+ abe_reset_hal ();
+ abe_check_opp ();
+ abe_check_dma ();
- /*
- To be added here :
- Device driver initialization:
- McPDM_DL : threshold=1, 6 slots activated
- DMIC : threshold=1, 6 microphones activated
- McPDM_UL : threshold=1, two microphones activated
- */
+ /*
+ To be added here :
+ Device driver initialization:
+ McPDM_DL : threshold=1, 6 slots activated
+ DMIC : threshold=1, 6 microphones activated
+ McPDM_UL : threshold=1, two microphones activated
+ */
- /* MM_DL INIT
- connect a DMA channel to MM_DL port (ATC FIFO)
+ /* MM_DL INIT
+ connect a DMA channel to MM_DL port (ATC FIFO)
format.f = 48000;
format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
+ abe_connect_cbpr_dmareq_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
- connect a Ping-Pong SDMA protocol to MM_DL port with Ping-Pong 576 stereo samples
+ connect a Ping-Pong SDMA protocol to MM_DL port with Ping-Pong 576 stereo samples
format.f = 48000;
format.samp_format = STEREO_MSB;
- abe_connect_dmareq_ping_pong_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, (576 * 4), &dma_sink);
+ abe_connect_dmareq_ping_pong_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, (576 * 4), &dma_sink);
- connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate
- */
- abe_add_subroutine(&abe_irq_pingpong_player_id,
- (abe_subroutine2) abe_default_irq_pingpong_player, SUB_0_PARAM, (abe_uint32*)0 );
- format.f = 48000;
- format.samp_format = STEREO_MSB;
-/* ping-pong access to MM_DL at 48kHz Mono with 20ms packet sizes */
-#define N_SAMPLES ((int)(48000 * 0.020))
- abe_connect_irq_ping_pong_port(MM_DL_PORT, &format, abe_irq_pingpong_player_id,
- N_SAMPLES, &base_address, PING_PONG_WITH_MCU_IRQ);
-
- /* VX_DL INIT
- connect a DMA channel to VX_DL port (ATC FIFO)
- */
+ connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate
+ */
+ abe_add_subroutine (&abe_irq_pingpong_player_id,
+(abe_subroutine2) abe_default_irq_pingpong_player, SUB_0_PARAM, (abe_uint32*)0 );
+ format.f = 48000;
+format.samp_format = STEREO_MSB;
+ /* ping-pong access to MM_DL at 48kHz Mono with 20ms packet sizes */
+ #define N_SAMPLES ((int)(48000 * 0.020))
+ abe_connect_irq_ping_pong_port (MM_DL_PORT, &format, abe_irq_pingpong_player_id,
+N_SAMPLES, &base_address, PING_PONG_WITH_MCU_IRQ);
+
+ /* VX_DL INIT
+ connect a DMA channel to VX_DL port (ATC FIFO)
+ */
format.f = 8000;
format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
+ abe_connect_cbpr_dmareq_port (VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- /* VX_UL INIT
- connect a DMA channel to VX_UL port (ATC FIFO)
- */
+ /* VX_UL INIT
+ connect a DMA channel to VX_UL port (ATC FIFO)
+ */
format.f = 8000;
format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_source);
+ abe_connect_cbpr_dmareq_port (VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_source);
+
+ /* make the AE waking event to be the McPDM DMA requests */
+ abe_write_event_generator (EVENT_MCPDM);
+
+ abe_enable_data_transfer (MM_DL_PORT );
+ abe_enable_data_transfer (VX_DL_PORT );
+ abe_enable_data_transfer (VX_UL_PORT );
+ abe_enable_data_transfer (PDM_UL_PORT);
+ abe_enable_data_transfer (PDM_DL1_PORT);
+
+}
+
+#endif
+
+
+/* ========================================================================== */
+/**
+* @fn ABE_AUTO_CHECK_DATA_FORMAT_TRANSLATION()
+*/
+/* ========================================================================= */
+
+
+void abe_auto_check_data_format_translation (void)
+{
+#if 0
+ abe_float test, f_decibel, f_linear, max_error;
+ abe_uint32 data_mem;
+#define C_20LOG2 ((abe_float)6.020599913)
+
+ for (max_error = 0, f_decibel = -70; f_decibel < 30; f_decibel += 0.1) {
+ f_linear = 0;
+ abe_translate_gain_format (DECIBELS_TO_LINABE, f_decibel, &f_linear);
+ abe_translate_to_xmem_format (ABE_CMEM, f_linear, &data_mem);
+ abe_translate_to_xmem_format (ABE_SMEM, f_linear, &data_mem);
+ abe_translate_to_xmem_format (ABE_DMEM, f_linear, &data_mem);
+
+ test = (abe_float) pow (2, f_decibel/C_20LOG2);
+ if ( (absolute(f_linear - test) / 1) > max_error)
+ max_error = (absolute(f_linear - test) / 1);
+
+ abe_translate_gain_format (LINABE_TO_DECIBELS, f_linear, &f_decibel);
+ test = (abe_float) (C_20LOG2 * log(f_linear) / log(2));
+
+ if ( (absolute(f_decibel - test) / 1) > max_error)
+ max_error = (absolute(f_decibel - test) / 1);
+
+ /* the observed max gain error is 0.0001 decibel (0.002%) */
+ }
+
+ #if 0
+ {
+ FILE *outf;
+ outf = fopen("buff.txt", "wt");
+ for (f_decibel = -120; f_decibel < 31; f_decibel += 1) {
+ f_linear = 0;
+ abe_translate_gain_format (DECIBELS_TO_LINABE, f_decibel, &f_linear);
+ abe_translate_to_xmem_format (ABE_CMEM, f_linear, &data_mem);
+
+
+ fprintf (outf, "\n 0x%08lX, /* CMEM coding of %4d dB */", data_mem, (short)(f_decibel));
+ }
+ fclose (outf);
+ }
+ #endif
+ #if 1
+ {
+ FILE *outf;
+ outf = fopen("buff.txt", "wt");
+ for (f_decibel = -120; f_decibel < 31; f_decibel += 1) {
+ //f_linear = 0;
+ //abe_translate_gain_format (DECIBELS_TO_LINABE, f_decibel, &f_linear);
+ //abe_translate_to_xmem_format (ABE_SMEM, f_linear, &data_mem);
+
+
+
+ fprintf (outf, "\n 0x%08lX, /* SMEM coding of %4d dB */", (long)(0x40000L * pow(10, f_decibel/20.0)), (short)(f_decibel));
+ //fprintf (outf, "\n 0x%08lX, /* SMEM coding of %4d dB */", data_mem, (short)(f_decibel));
+ }
+ fclose (outf);
+ }
+ #endif
+#endif
+}
+
+#if 0
+
+/* ========================================================================== */
+/**
+* @fn ABE_AUTO_CHECK_DATA_FORMAT_TRANSLATION()
+*/
+/* ========================================================================= */
+
+void abe_check_opp (void)
+{
+#if PC_SIMULATION
+ abe_use_case_id UC[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, 0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ abe_read_hardware_configuration (UC, &OPP, &CONFIG); /* check HW config and OPP config */
+#endif
+}
+
+/* ========================================================================== */
+/**
+* @fn ABE_AUTO_CHECK_DATA_FORMAT_TRANSLATION()
+*/
+/* ========================================================================= */
+
+void abe_check_dma (void)
+{
+#if PC_SIMULATION
+ abe_port_id id;
+ abe_data_format_t format;
+ abe_uint32 d;
+ abe_dma_t dma_sink;
+
+
+ /* check abe_read_port_address () */
+ id = VX_UL_PORT;
+ abe_read_port_address (id, &dma_sink);
+
+ format.f = 8000;
+ format.samp_format = STEREO_MSB;
+ d = abe_dma_port_iter_factor (&format);
+ d = abe_dma_port_iteration (&format);
+ abe_connect_cbpr_dmareq_port (VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
+ abe_read_port_address (id, &dma_sink);
+#endif
+}
- /* make the AE waking event to be the McPDM DMA requests */
- abe_write_event_generator(EVENT_MCPDM);
- abe_enable_data_transfer(MM_DL_PORT );
- abe_enable_data_transfer(VX_DL_PORT );
- abe_enable_data_transfer(VX_UL_PORT );
- abe_enable_data_transfer(PDM_UL_PORT);
- abe_enable_data_transfer(PDM_DL1_PORT);
+/* ========================================================================== */
+/**
+* @fn ABE_CHECK_MIXERS_GAIN_UPDATE()
+*/
+/* ========================================================================= */
+void abe_check_mixers_gain_update (void)
+{
+#if PC_SIMULATION
+ abe_write_mixer (MIXDL1, GAIN_12dB, RAMP_0MS, MIX_DL1_INPUT_TONES);
+ abe_write_mixer (MIXDL1, GAIN_12dB, RAMP_1MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, GAIN_M12dB, RAMP_2MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, GAIN_0dB, RAMP_5MS, MIX_DL1_INPUT_MM_UL2);
+#endif
}
+void abe_debug_and_non_regression (void)
+{
+#if PC_SIMULATION
+ abe_uint32 i, j;
+ abe_dma_t d;
+
+
+ abe_set_ping_pong_buffer (MM_DL_PORT, 4); //bug 23 & 24
+ abe_read_next_ping_pong_buffer (MM_DL_PORT, &i, &j);
+
+ abe_read_port_address (6, &d);
+
+#endif
+}
+
+void abe_debug_check_mem (void)
+{
+#if 1
+ abe_uint32 pmem[512], i;
+ for (i = 0; i < 512; i++) {
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_PMEM, i *4 , &(pmem[i]), 4);
+ }
+ i = 0;
+#endif
+#if 0
+ abe_uint32 cmem[512], i;
+ for (i = 0; i < 512; i++) {
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_CMEM, i *4 , &(cmem[i]), 4);
+ }
+ i = 0;
+#endif
+#if 0
+ static int flag;
+
+ if (flag == 0) {
+ abe_uint32 data[4] = {0x11111111L, 0x22222222L, 0x33333333L, 0x44444444L};
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC, 0xf00, data, 8); // @ = 0xF00/3 0x3C0 0X11111111
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_CMEM, 0x2000, data, 8); // @ = 0x2000/4 0x800 0x111111
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_SMEM, 0x1100, data, 8); // @ = 0x1100/8 0x220 0x2222221111111
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, 0x5000, data, 8); // @ = 0x5000(B) 0x1111
+
+ flag = 0;
+ }
+#endif
+}
#endif
diff --git a/sound/soc/omap/abe/abe_main.h b/sound/soc/omap/abe/abe_main.h
index 213c38a57cf3..8ef0dd830fe7 100644
--- a/sound/soc/omap/abe/abe_main.h
+++ b/sound/soc/omap/abe/abe_main.h
@@ -1,48 +1,63 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#ifndef _ABE_MAIN_H_
#define _ABE_MAIN_H_
+#ifdef __cplusplus
+
+extern "C" {
+#endif
+
+#include <linux/io.h>
+
#include "abe_dm_addr.h"
+#include "abe_sm_addr.h"
#include "abe_cm_addr.h"
+
#include "abe_def.h"
#include "abe_typ.h"
-#include "abe_dbg.h"
#include "abe_ext.h"
+#include "abe_dbg.h"
#include "abe_lib.h"
#include "abe_ref.h"
#include "abe_api.h"
-//#include "ABE_DAT.h"
+
+
#include "abe_typedef.h"
-#include "abe_functionsId.h"
-#include "abe_taskId.h"
-#include "abe_dm_addr.h"
-#include "abe_sm_addr.h"
-#include "abe_cm_addr.h"
+#include "abe_functionsid.h"
+#include "abe_taskid.h"
#include "abe_initxxx_labels.h"
#include "abe_fw.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
+/* pipe connection to the TARGET simulator */
+#define ABE_DEBUG_CHECKERS 0
-#define ABE_HAL_VERSION 0x00000002L
-#define ABE_FW_VERSION 0x00000000L
-#define ABE_HW_VERSION 0x00000000L
+/* simulator data extracted from a text-file */
+#define ABE_DEBUG_HWFILE 0
-#define ABE_DEBUG_CHECKERS 0 /* pipe connection to the TARGET simulator */
-#define ABE_DEBUG_HWFILE 0 /* simulator data extracted from a text-file */
-#define ABE_DEBUG_LL_LOG 0 /* low-level log files */
+/* low-level log files */
+#define ABE_DEBUG_LL_LOG 0
#define ABE_DEBUG (ABE_DEBUG_CHECKERS | ABE_DEBUG_HWFILE | ABE_DEBUG_LL_LOG)
@@ -50,4 +65,4 @@ extern "C" {
}
#endif
-#endif /* _ABE_MAIN_H_ */
+#endif /* _ABE_MAIN_H_ */
diff --git a/sound/soc/omap/abe/abe_ref.h b/sound/soc/omap/abe/abe_ref.h
index cc69b8770dce..c215750e8a01 100644
--- a/sound/soc/omap/abe/abe_ref.h
+++ b/sound/soc/omap/abe/abe_ref.h
@@ -1,22 +1,29 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
-
#ifndef _ABE_REF_H_
#define _ABE_REF_H_
/*
- * 'ABE_PRO.H' all non-API prototypes for INI, IRQ, SEQ ...
+ * 'ABE_PRO.H' all non-API prototypes for INI, IRQ, SEQ ...
*/
-#ifdef __cplusplus
-extern "C" {
-#endif
/*
* HAL EXTERNAL API
@@ -25,124 +32,131 @@ extern "C" {
/*
* HAL INTERNAL API
*/
-void abe_load_embedded_patterns(void);
-void abe_build_scheduler_table(void);
-void abe_reset_all_features(void);
-void abe_reset_one_port(abe_uint32 x);
-void abe_reset_all_ports(void);
-void abe_reset_all_fifo(void);
-void abe_reset_all_sequence(void);
-abe_uint32 abe_dma_port_iteration(abe_data_format_t *format);
-void abe_read_sys_clock(abe_micros_t *time);
-void abe_enable_dma_request(abe_port_id id);
-void abe_disable_dma_request(abe_port_id id);
-void abe_enable_atc(abe_port_id id);
-void abe_disable_atc(abe_port_id id);
-void abe_init_atc(abe_port_id id);
-void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_protocol_t *prot);
-void abe_init_dma_t(abe_port_id id, abe_port_protocol_t *prot);
-abe_uint32 abe_dma_port_iter_factor(abe_data_format_t *f);
-abe_uint32 abe_dma_port_copy_subroutine_id(abe_port_id i);
-void abe_call_subroutine(abe_uint32 idx, abe_uint32 p1, abe_uint32 p2, abe_uint32 p3, abe_uint32 p4);
-void abe_monitoring(void);
-void abe_lock_execution(void);
-void abe_unlock_execution(void);
-void abe_hw_configuration(void);
-void abe_add_subroutine(abe_uint32 *id, abe_subroutine2 f,
- abe_uint32 nparam, abe_uint32* params);
-void abe_read_next_ping_pong_buffer(abe_port_id port,
- abe_uint32 *p, abe_uint32 *n);
-void abe_irq_ping_pong(void);
-void abe_irq_check_for_sequences(abe_uint32 seq_info);
+void abe_load_embeddded_patterns (void);
+void abe_build_scheduler_table (void);
+void abe_reset_one_feature (u32 x);
+void abe_reset_all_features (void);
+void abe_reset_all_ports (void);
+void abe_reset_all_fifo (void);
+void abe_reset_all_sequence (void);
+u32 abe_dma_port_iteration (abe_data_format_t *format);
+void abe_read_sys_clock (u32 *time);
+void abe_enable_dma_request (u32 id);
+void abe_disable_dma_request (u32 id);
+void abe_enable_atc (u32 id);
+void abe_disable_atc (u32 id);
+void abe_init_atc (u32 id);
+void abe_init_io_tasks (u32 id, abe_data_format_t *format,
+ abe_port_protocol_t *prot);
+void abe_init_dma_t (u32 id, abe_port_protocol_t *prot);
+u32 abe_dma_port_iter_factor (abe_data_format_t *f);
+u32 abe_dma_port_copy_subroutine_id (u32 i);
+void abe_call_subroutine (u32 idx, u32 p1, u32 p2, u32 p3, u32 p4);
+void abe_monitoring (void);
+void abe_lock_execution (void);
+void abe_unlock_execution (void);
+void abe_hw_configuration (void);
+void abe_add_subroutine (u32 *id, abe_subroutine2 f, u32 nparam,
+ u32* params);
+abehal_status abe_read_next_ping_pong_buffer (u32 port, u32 *p, u32 *n);
+void abe_irq_ping_pong (void);
+void abe_irq_check_for_sequences (u32 seq_info);
void abe_default_irq_pingpong_player(void);
-void abe_default_irq_pingping_player_32bits(void);
+void abe_default_irq_pingpong_player_32bits(void);
void abe_default_irq_aps_adaptation(void);
-void abe_read_hardware_configuration(abe_use_case_id *u,
- abe_opp_t *o, abe_hw_config_init_t *hw);
-void abe_irq_aps(abe_uint32 aps_info);
-void abe_clean_temporary_buffers(abe_port_id id);
-void abe_reset_atc(abe_uint32 atc_index);
-void abe_dbg_log(abe_uint32 x, abe_uint32 y, abe_uint32 z, abe_uint32 t);
-void abe_dbg_error_log(abe_uint32 x);
-
-
-void abe_translate_to_xmem_format(abe_int32 memory_bank,
- float fc, abe_uint32 *c);
+void abe_irq_aps (u32 aps_info);
+void abe_clean_temporary_buffers (u32 id);
+void abe_dbg_log (u32 x, u32 y, u32 z, u32 t);
+void abe_dbg_error_log (u32 x);
+void abe_init_asrc_vx_dl ( s32 dppm);
+void abe_init_asrc_vx_ul ( s32 dppm);
+void abe_init_asrc_mm_dl ( s32 dppm);
+//u8 *memmove(u8 *dst, u8 *src, u32 n);
+//u32 __get_unaligned_memmove32(void *p);
+//void __put_unaligned_memmove32(u32 val, void *p);
/*
* HAL INTERNAL DATA
*/
-
+extern const u32 abe_firmware_array[ABE_FIRMWARE_MAX_SIZE];
+extern u32 abe_firmware_version_number;
+extern const u32 abe_atc_srcid [];
+extern const u32 abe_atc_dstid [];
extern abe_port_t abe_port[];
-extern abe_feature_t feature[];
-extern abe_subroutine2 callbacks[];
+extern abe_feature_t feature [];
-extern abe_port_t abe_port[];
-extern const abe_port_t abe_port_init[];
+extern const abe_port_t abe_port_init [];
-extern abe_feature_t all_feature[];
-extern const abe_feature_t all_feature_init[];
+extern abe_feature_t all_feature [];
+extern const abe_feature_t all_feature_init [];
-extern abe_seq_t all_sequence[];
+extern abe_seq_t all_sequence [];
extern const abe_seq_t all_sequence_init[];
-extern const abe_router_t abe_router_ul_table_preset[NBROUTE_CONFIG][NBROUTE_UL];
-extern abe_router_t abe_router_ul_table[NBROUTE_CONFIG_MAX][NBROUTE_UL];
+extern const abe_router_t abe_router_ul_table_preset
+[NBROUTE_CONFIG][NBROUTE_UL];
+extern abe_router_t abe_router_ul_table [NBROUTE_CONFIG_MAX][NBROUTE_UL];
-extern abe_uint32 abe_dbg_output;
-extern abe_uint32 abe_dbg_mask;
-extern abe_uint32 abe_dbg_activity_log [D_DEBUG_HAL_TASK_sizeof];
-extern abe_uint32 abe_dbg_activity_log_write_pointer;
-extern abe_uint32 abe_dbg_param;
+extern u32 abe_dbg_output;
+extern u32 abe_dbg_mask;
+extern u32 abe_dbg_activity_log [D_DEBUG_HAL_TASK_sizeof];
+extern u32 abe_dbg_activity_log_write_pointer;
+extern u32 abe_dbg_param;
-extern abe_uint32 abe_global_mcpdm_control;
-extern abe_event_id abe_current_event_id;
+extern u32 abe_current_event_id;
extern const abe_sequence_t seq_null;
-extern abe_subroutine2 abe_all_subsubroutine[MAXNBSUBROUTINE]; /* table of new subroutines called in the sequence */
-extern abe_uint32 abe_all_subsubroutine_nparam[MAXNBSUBROUTINE]; /* number of parameters per calls */
-extern abe_uint32 abe_subroutine_id[MAXNBSUBROUTINE];
-extern abe_uint32* abe_all_subroutine_params[MAXNBSUBROUTINE];
-extern abe_uint32 abe_subroutine_write_pointer;
-extern abe_sequence_t abe_all_sequence[MAXNBSEQUENCE]; /* table of all sequences */
-extern abe_uint32 abe_sequence_write_pointer;
-extern abe_uint32 abe_nb_pending_sequences; /* current number of pending sequences (avoids to look in the table) */
-extern abe_uint32 abe_pending_sequences[MAXNBSEQUENCE]; /* pending sequences due to ressource collision */
-extern abe_uint32 abe_global_sequence_mask; /* mask of unsharable ressources among other sequences */
-extern abe_seq_t abe_active_sequence[MAXACTIVESEQUENCE][MAXSEQUENCESTEPS]; /* table of active sequences */
-extern abe_uint32 abe_irq_pingpong_player_id; /* index of the plugged subroutine doing ping-pong cache-flush DMEM accesses */
-extern abe_uint32 abe_irq_aps_adaptation_id;
-extern abe_uint32 abe_base_address_pingpong[MAX_PINGPONG_BUFFERS]; /* base addresses of the ping pong buffers */
-extern abe_uint32 abe_size_pingpong; /* size of each ping/pong buffers */
-extern abe_uint32 abe_nb_pingpong; /* number of ping/pong buffer being used */
-
-extern abe_uint32 abe_irq_dbg_read_ptr;
-
-extern volatile abe_uint32 just_to_avoid_the_many_warnings;
-extern volatile abe_gain_t just_to_avoid_the_many_warnings_abe_gain_t;
-extern volatile abe_ramp_t just_to_avoid_the_many_warnings_abe_ramp_t;
-extern volatile abe_dma_t just_to_avoid_the_many_warnings_abe_dma_t;
-extern volatile abe_port_id just_to_avoid_the_many_warnings_abe_port_id;
-extern volatile abe_millis_t just_to_avoid_the_many_warnings_abe_millis_t;
-extern volatile abe_micros_t just_to_avoid_the_many_warnings_abe_micros_t;
-extern volatile abe_patch_rev just_to_avoid_the_many_warnings_abe_patch_rev;
-extern volatile abe_sequence_t just_to_avoid_the_many_warnings_abe_sequence_t;
-extern volatile abe_ana_port_id just_to_avoid_the_many_warnings_abe_ana_port_id;
-extern volatile abe_time_stamp_t just_to_avoid_the_many_warnings_abe_time_stamp_t;
-extern volatile abe_data_format_t just_to_avoid_the_many_warnings_abe_data_format_t;
-extern volatile abe_port_protocol_t just_to_avoid_the_many_warnings_abe_port_protocol_t;
-extern volatile abe_router_t just_to_avoid_the_many_warnings_abe_router_t;
-extern volatile abe_router_id just_to_avoid_the_many_warnings_abe_router_id;
-
-extern const abe_int32 abe_dmic_40[C_98_48_LP_Coefs_sizeof];
-extern const abe_int32 abe_dmic_32[C_98_48_LP_Coefs_sizeof];
-extern const abe_int32 abe_dmic_25[C_98_48_LP_Coefs_sizeof];
-extern const abe_int32 abe_dmic_16[C_98_48_LP_Coefs_sizeof];
-
-extern const abe_uint32 abe_db2lin_table [];
-
-#ifdef __cplusplus
-}
-#endif
+
+/* table of new subroutines called in the sequence */
+extern abe_subroutine2 abe_all_subsubroutine [MAXNBSUBROUTINE];
+
+/* number of parameters per calls */
+extern u32 abe_all_subsubroutine_nparam [MAXNBSUBROUTINE];
+extern u32 abe_subroutine_id [MAXNBSUBROUTINE];
+extern u32* abe_all_subroutine_params[MAXNBSUBROUTINE];
+extern u32 abe_subroutine_write_pointer;
+
+
+extern abe_sequence_t abe_all_sequence[MAXNBSEQUENCE];
+extern u32 abe_sequence_write_pointer;
+
+/* current number of pending sequences (avoids to look in the table) */
+extern u32 abe_nb_pending_sequences;
+
+/* pending sequences due to ressource collision */
+extern u32 abe_pending_sequences [MAXNBSEQUENCE];
+
+/* mask of unsharable ressources among other sequences */
+extern u32 abe_global_sequence_mask;
+
+/* table of active sequences */
+extern abe_seq_t abe_active_sequence[MAXACTIVESEQUENCE] [MAXSEQUENCESTEPS];
+
+/* index of the plugged subroutine doing ping-pong cache-flush
+ DMEM accesses */
+extern u32 abe_irq_pingpong_player_id;
+extern u32 abe_irq_aps_adaptation_id;
+
+/* base addresses of the ping pong buffers */
+extern u32 abe_base_address_pingpong [MAX_PINGPONG_BUFFERS];
+
+/* size of each ping/pong buffers */
+extern u32 abe_size_pingpong;
+
+/* number of ping/pong buffer being used */
+extern u32 abe_nb_pingpong;
+
+/* circular read pointer to IRQ/DBG DMEM buffer */
+extern u32 abe_irq_dbg_read_ptr;
+
+extern const s32 abe_dmic_40 [C_98_48_LP_Coefs_sizeof];
+extern const s32 abe_dmic_32 [C_98_48_LP_Coefs_sizeof];
+extern const s32 abe_dmic_25 [C_98_48_LP_Coefs_sizeof];
+extern const s32 abe_dmic_16 [C_98_48_LP_Coefs_sizeof];
+
+extern const u32 abe_db2lin_table [];
+extern const u32 abe_alpha_iir [64];
+extern const u32 abe_1_alpha_iir [64];
+
#endif /* _ABE_REF_H_ */
diff --git a/sound/soc/omap/abe/abe_seq.c b/sound/soc/omap/abe/abe_seq.c
index e042fb317eec..9f7e1e96fcdb 100644
--- a/sound/soc/omap/abe/abe_seq.c
+++ b/sound/soc/omap/abe/abe_seq.c
@@ -1,105 +1,103 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
-/*
- * SEQUENCES
- * struct {
- * micros_t time; Waiting time before executing next line
- * seq_code_t code Subroutine index interpreted in the HAL and translated to
- * FW subroutine codes in case of ABE tasks
- * int32 param[2] Two parameters
- * char param_tag[2] Flags used for parameters when launching the sequences
- * } seq_t
- *
- */
-/*
- * ABE_NULL_SUBROUTINE
+/**
+ * abe_null_subroutine
*
- * Operations : nothing
*/
-void abe_null_subroutine_0(void) { }
-void abe_null_subroutine_2 (abe_uint32 a, abe_uint32 b) {
- just_to_avoid_the_many_warnings = a;
- just_to_avoid_the_many_warnings = b;
+void abe_null_subroutine_0 (void) { }
+void abe_null_subroutine_2 (u32 a, u32 b)
+{
}
-void abe_null_subroutine_4 (abe_uint32 a, abe_uint32 b, abe_uint32 c, abe_uint32 d) {
- just_to_avoid_the_many_warnings = a;
- just_to_avoid_the_many_warnings = b;
- just_to_avoid_the_many_warnings = c;
- just_to_avoid_the_many_warnings = d;
+void abe_null_subroutine_4 (u32 a, u32 b, u32 c, u32 d)
+{
}
-/*
- * abe_init_subroutine_table
- *
- * parameter :
- * none
- *
- * operations :
- * initializes the default table of pointers to subroutines
+
+/**
+ * abe_init_subroutine_table - initializes the default table of pointers
+ * to subroutines
*
- * return value :
+ * initializes the default table of pointers to subroutines
*
*/
-void abe_init_subroutine_table(void)
+void abe_init_subroutine_table (void)
{
- abe_uint32 id;
+ u32 id;
/* reset the table's pointers */
abe_subroutine_write_pointer = 0;
+
/* the first index is the NULL task */
- abe_add_subroutine(&id,(abe_subroutine2) abe_null_subroutine_2, SUB_0_PARAM, (abe_uint32*)0);
- /* write mixer has 3 parameters @@@ TBD*/
- abe_add_subroutine(&(abe_subroutine_id[SUB_WRITE_MIXER]), (abe_subroutine2) abe_write_mixer, SUB_4_PARAM, (abe_uint32*)0);
+ abe_add_subroutine(&id,(abe_subroutine2) abe_null_subroutine_2,
+ SUB_0_PARAM, (u32*)0);
+
+ /* write mixer has 4 parameters */
+ abe_add_subroutine(&(abe_subroutine_id[SUB_WRITE_MIXER]),
+ (abe_subroutine2) abe_write_mixer, SUB_4_PARAM, (u32*)0);
+
/* ping-pong player IRQ */
- abe_add_subroutine(&abe_irq_pingpong_player_id,(abe_subroutine2) abe_null_subroutine_0, SUB_0_PARAM, (abe_uint32*)0);
- abe_add_subroutine(&abe_irq_aps_adaptation_id,(abe_subroutine2) abe_default_irq_aps_adaptation, SUB_0_PARAM, (abe_uint32*)0);
+ abe_add_subroutine(&abe_irq_pingpong_player_id,
+ (abe_subroutine2) abe_null_subroutine_0, SUB_0_PARAM, (u32*)0);
+ abe_add_subroutine (&abe_irq_aps_adaptation_id,
+ (abe_subroutine2) abe_default_irq_aps_adaptation, SUB_0_PARAM, (u32*)0);
}
-/*
- * ABE_ADD_SUBROUTINE
- *
- * Parameter :
- * port id
- * pointer to the subroutines
- * number of parameters to push on the stack before call
- *
- * Operations :
- * add one function pointer more and returns the index to it
- *
- * Return value :
+/**
+ * abe_add_subroutine
+ * @id: ABE port id
+ * @f: pointer to the subroutines
+ * @nparam: number of parameters
+ * @params: pointer to the psrameters
*
+ * add one function pointer more and returns the index to it
*/
-void abe_add_subroutine (abe_uint32 *id, abe_subroutine2 f, abe_uint32 nparam, abe_uint32* params)
+void abe_add_subroutine (u32 *id, abe_subroutine2 f, u32 nparam, u32* params)
{
- abe_uint32 i, i_found;
+ u32 i, i_found;
- if ((abe_subroutine_write_pointer >= MAXNBSUBROUTINE) || ((abe_uint32)f == 0)) {
+ if ((abe_subroutine_write_pointer >= MAXNBSUBROUTINE) ||
+ ((u32)f == 0)) {
abe_dbg_param |= ERR_SEQ;
- abe_dbg_error_log(ABE_PARAMETER_OVERFLOW);
+ abe_dbg_error_log (ABE_PARAMETER_OVERFLOW);
} else {
/* search if this subroutine address was not already
* declared, then return the previous index
*/
- for (i_found = abe_subroutine_write_pointer, i = 0; i < abe_subroutine_write_pointer; i++) {
+ for (i_found = abe_subroutine_write_pointer, i = 0;
+ i < abe_subroutine_write_pointer; i++) {
if (f == abe_all_subsubroutine[i])
i_found = i;
}
if (i_found == abe_subroutine_write_pointer) {
*id = abe_subroutine_write_pointer;
- abe_all_subsubroutine[abe_subroutine_write_pointer] = (f);
- abe_all_subroutine_params[abe_subroutine_write_pointer] = params;
- abe_all_subsubroutine_nparam[abe_subroutine_write_pointer] = nparam;
+ abe_all_subsubroutine
+ [abe_subroutine_write_pointer] = (f);
+ abe_all_subroutine_params
+ [abe_subroutine_write_pointer] = params;
+ abe_all_subsubroutine_nparam
+ [abe_subroutine_write_pointer] = nparam;
abe_subroutine_write_pointer++;
} else {
abe_all_subroutine_params[i_found] = params;
@@ -108,39 +106,38 @@ void abe_add_subroutine (abe_uint32 *id, abe_subroutine2 f, abe_uint32 nparam, a
}
}
-/*
- * ABE_ADD_SEQUENCE
- *
- * Parameter :
- * Id: returned sequence index after pluging a new sequence (index in the tables)
- * s : sequence to be inserted
+/**
+ * abe_add_sequence
+ * @id: returned sequence index after pluging a new sequence (index in the tables)
+ * @s: sequence to be inserted
*
- * Operations :
- * Load a time-sequenced operations.
- *
- * Return value :
- * None.
+ * Load a time-sequenced operations.
*/
-
-void abe_add_sequence(abe_uint32 *id, abe_sequence_t *s)
+void abe_add_sequence (u32 *id, abe_sequence_t *s)
{
abe_seq_t *seq_src, *seq_dst;
- abe_uint32 i, no_end_of_sequence_found;
+ u32 i, no_end_of_sequence_found;
seq_src = &(s->seq1);
- seq_dst = &((abe_all_sequence[abe_sequence_write_pointer]).seq1);
+ seq_dst = &((abe_all_sequence [abe_sequence_write_pointer]).seq1);
- if ((abe_sequence_write_pointer >= MAXNBSEQUENCE) || ((abe_uint32)s == 0)) {
+ if ((abe_sequence_write_pointer >= MAXNBSEQUENCE) || ((u32)s == 0)) {
abe_dbg_param |= ERR_SEQ;
- abe_dbg_error_log(ABE_PARAMETER_OVERFLOW);
+ abe_dbg_error_log (ABE_PARAMETER_OVERFLOW);
} else {
*id = abe_subroutine_write_pointer;
- (abe_all_sequence[abe_sequence_write_pointer]).mask = s->mask; /* copy the mask */
+
+ /* copy the mask */
+ (abe_all_sequence [abe_sequence_write_pointer]).mask = s->mask;
- for (no_end_of_sequence_found = 1, i = 0; i < MAXSEQUENCESTEPS; i++, seq_src++, seq_dst++) {
- (*seq_dst) = (*seq_src); /* sequence copied line by line */
+ for (no_end_of_sequence_found = 1, i = 0; i < MAXSEQUENCESTEPS;
+ i++, seq_src++, seq_dst++) {
+
+ /* sequence copied line by line */
+ (*seq_dst) = (*seq_src);
- if ((*(abe_int32 *)seq_src) == -1) {
+ /* stop when the line start with time=(-1) */
+ if ((*(s32 *)seq_src) == (-1)) {
/* stop when the line start with time=(-1) */
no_end_of_sequence_found = 0;
break;
@@ -149,117 +146,103 @@ void abe_add_sequence(abe_uint32 *id, abe_sequence_t *s)
abe_subroutine_write_pointer++;
if (no_end_of_sequence_found)
- abe_dbg_error_log(ABE_SEQTOOLONG);
+ abe_dbg_error_log (ABE_SEQTOOLONG);
}
}
-/*
- * ABE_RESET_ONE_SEQUENCE
- *
- * Parameter :
- * sequence ID
- *
- * Operations :
- * load default configuration for that sequence
- * kill running activities
- *
- * Return value :
+/**
+ * abe_reset_one_sequence
+ * @id: sequence ID
*
+ * load default configuration for that sequence
+ * kill running activities
*/
-void abe_reset_one_sequence(abe_uint32 id)
+void abe_reset_one_sequence (u32 id)
{
- just_to_avoid_the_many_warnings = id;
}
-/*
- * ABE_RESET_ALL_SEQUENCE
- *
- * Parameter :
- * none
- *
- * Operations :
- * load default configuration for all sequences
- * kill any running activities
- *
- * Return value :
+/**
+ * abe_reset_all_sequence
*
+ * load default configuration for all sequences
+ * kill any running activities
*/
-void abe_reset_all_sequence(void)
+void abe_reset_all_sequence (void)
{
- abe_uint32 i;
+ u32 i;
- abe_init_subroutine_table();
+ abe_init_subroutine_table ();
- /* arrange to have the first sequence index=0 to the NULL operation sequence */
- abe_add_sequence(&i, (abe_sequence_t *)&seq_null);
+ /* arrange to have the first sequence index=0 to the NULL operation
+ sequence */
+ abe_add_sequence (&i, (abe_sequence_t *)&seq_null);
/* reset the the collision protection mask */
abe_global_sequence_mask = 0;
/* reset the pending sequences list */
for (abe_nb_pending_sequences = i = 0; i < MAXNBSEQUENCE; i++)
- abe_pending_sequences[i] = 0;
+ abe_pending_sequences [i] = 0;
}
-/*
- * ABE_CALL_SUBROUTINE
- *
- * Parameter :
- * index to the table of all registered Call-backs and subroutines
+/**
+ * abe_call_subroutine
+ * @idx: index to the table of all registered Call-backs and subroutines
*
- * Operations :
- * run and log a subroutine
- *
- * Return value :
- * None.
+ * run and log a subroutine
*/
-void abe_call_subroutine(abe_uint32 idx, abe_uint32 p1, abe_uint32 p2, abe_uint32 p3, abe_uint32 p4)
+void abe_call_subroutine (u32 idx, u32 p1, u32 p2, u32 p3, u32 p4)
{
abe_subroutine0 f0;
abe_subroutine1 f1;
abe_subroutine2 f2;
abe_subroutine3 f3;
abe_subroutine4 f4;
- abe_uint32* params;
+ u32* params;
- if (idx >= MAXNBSUBROUTINE)
- return;
+ if (idx > MAXNBSUBROUTINE)
+ return;
switch (idx) {
+ /* call the subroutines defined at compilation time
+ (const .. sequences) */
#if 0
- /* call the subroutines defined at compilation time (const .. sequences) */
case SUB_WRITE_MIXER_DL1 :
- /@@@@ abe_write_mixer_dl1 (p1, p2, p3)
- abe_fprintf ("write_mixer");
- break;
+ abe_write_mixer_dl1 (p1, p2, p3)
+ abe_fprintf ("write_mixer");
+ break;
#endif
- /* call the subroutines defined at execution time (dynamic sequences) */
+ /* call the subroutines defined at execution time
+ (dynamic sequences) */
default :
- switch(abe_all_subsubroutine_nparam[idx]) {
+ switch (abe_all_subsubroutine_nparam [idx]) {
case SUB_0_PARAM:
- f0 = (abe_subroutine0)abe_all_subsubroutine[idx];
- (*f0)();
+ f0 = (abe_subroutine0) abe_all_subsubroutine [idx];
+ (*f0) ();
break;
case SUB_1_PARAM:
- f1 = (abe_subroutine1) abe_all_subsubroutine[idx];
- params = abe_all_subroutine_params[abe_irq_pingpong_player_id];
- if (params != (abe_uint32*)0)
+ f1 = (abe_subroutine1) abe_all_subsubroutine [idx];
+ params = abe_all_subroutine_params
+ [abe_irq_pingpong_player_id];
+ if (params != (u32*)0)
p1 = params[0];
(*f1) (p1);
break;
case SUB_2_PARAM:
- f2 = abe_all_subsubroutine[idx];
- params = abe_all_subroutine_params[abe_irq_pingpong_player_id];
- if (params != (abe_uint32*)0) {
+ f2 = abe_all_subsubroutine [idx];
+ params = abe_all_subroutine_params
+ [abe_irq_pingpong_player_id];
+ if (params != (u32*)0) {
p1 = params[0];
p2 = params[1];
}
(*f2) (p1, p2);
break;
case SUB_3_PARAM:
- f3 = (abe_subroutine3) abe_all_subsubroutine[idx];
- params = abe_all_subroutine_params[abe_irq_pingpong_player_id];
- if (params != (abe_uint32*)0) {
+ f3 = (abe_subroutine3) abe_all_subsubroutine [idx];
+ params = abe_all_subroutine_params
+ [abe_irq_pingpong_player_id];
+ if (params != (u32*)0) {
p1 = params[0];
p2 = params[1];
p3 = params[2];
@@ -267,9 +250,10 @@ void abe_call_subroutine(abe_uint32 idx, abe_uint32 p1, abe_uint32 p2, abe_uint3
(*f3) (p1, p2, p3);
break;
case SUB_4_PARAM:
- f4 = (abe_subroutine4) abe_all_subsubroutine[idx];
- params = abe_all_subroutine_params[abe_irq_pingpong_player_id];
- if (params != (abe_uint32*)0) {
+ f4 = (abe_subroutine4) abe_all_subsubroutine [idx];
+ params = abe_all_subroutine_params
+ [abe_irq_pingpong_player_id];
+ if (params != (u32*)0) {
p1 = params[0];
p2 = params[1];
p3 = params[2];
@@ -277,6 +261,7 @@ void abe_call_subroutine(abe_uint32 idx, abe_uint32 p1, abe_uint32 p2, abe_uint3
}
(*f4) (p1, p2, p3, p4);
break;
+
default:
break;
}
diff --git a/sound/soc/omap/abe/abe_seq.h b/sound/soc/omap/abe/abe_seq.h
index 6e15531e920e..3c690d77501e 100644
--- a/sound/soc/omap/abe/abe_seq.h
+++ b/sound/soc/omap/abe/abe_seq.h
@@ -1,32 +1,49 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
- *
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+/* =============================================================================
+* Texas Instruments OMAP(TM) Platform Software
+* (c) Copyright 2009 Texas Instruments Incorporated. All Rights Reserved.
+*
+* Use of this software is controlled by the terms and conditions found
+* in the license agreement under which this software has been supplied.
+* =========================================================================== */
+/**
+ * @file ABE_SEQ.H
+ *
+ * 'ABE_SEQ.H' time-sequenced activations
+ *
+ * @path
+ * @rev 01.00
*/
+/* ----------------------------------------------------------------------------
+*!
+*! Revision History
+*! ===================================
+*! 27-Nov-2008 Original (LLF)
+*! 05-Jun-2009 V05 release
+* =========================================================================== */
+
+
+void abe_init_subroutine_table (void);
+
+
-void abe_init_subroutine_table(void);
/*
* Register Programming Examples
*
* 1. Power on sequence
*
- * The modules HSLDO, NCP, LSLDO, LPPLL are enabled/disabled automatically by the TWL6040 power state machine after pin AUDPWRON transitions from 0 ' 1. No register writes are necessary.
- *
- * For the purposes of test it is possible to bypass the power state machine and manually enable these modules in the same order as described in Fig 2-XX. This can be done after VIO comes up and I2C register writes are possible.
+ * The modules HSLDO, NCP, LSLDO, LPPLL are enabled/disabled automatically by the TWL6040 power state machine after pin AUDPWRON transitions from 0 ' 1. No register writes are necessary.
*
+ * For the purposes of test it is possible to bypass the power state machine and manually enable these modules in the same order as described in Fig 2-XX. This can be done after VIO comes up and I2C register writes are possible.
+ *
* The manual sequence could be as follows
* LDOCTL = 0x04 (Enable HSLDO)
* NCPCTL = 0x03 (Enable NCP in auto mode)
* LDOCTL = 0x05 (Enable LSLDO)
- * LPPLLCTL = 0x09 (Enable LPPLL with output frequency = 19.2MHz)
- *
+ * LPPLLCTL = 0x09 (Enable LPPLL with output frequency = 19.2MHz)
+ *
* Please see Fig 2-64 for details on details to be maintained between successive I2C register writes.
- *
+ *
* Further if the system MCLK is active the HPPLL could be enabled instead of the LPPLL.
* (a) For a square wave where slicer is not required
* HPPLLCTL = 0x11 (Select HPPLL output, Enable HPPLL)
@@ -34,7 +51,7 @@ void abe_init_subroutine_table(void);
* HPPLLCTL = 0x19 (Select HPPLL output, Enable Slicer, Enable HPPLL)
*
*/
-
+
/*
* 2. Setting up a stereo UPLINK path through MICAMPL, MICAMPR input amplifiers
* AMICBCTL = 0x10
@@ -42,13 +59,13 @@ void abe_init_subroutine_table(void);
* HPPLLCTL = 0x19 (Select HPPLL output, Enable Slicer, Enable HPPLL)
* MICLCTL = 0x0D (Select MMIC input, Enable ADC)
* MICRCTL = 0x0D (Select SMIC input, Enable ADC)
- *
+ *
*/
/*
* 3. Setting up a stereo headset MP3 playback DNLINK path
* Please see section 2.3.1.1 for details
- *
+ *
* (b) HP
* HSGAIN = 0x22 (-4 dB gain on L and R amplifiers)
* HSLCTL = 0x01 (Enable HSDAC L, HP mode)
@@ -59,9 +76,9 @@ void abe_init_subroutine_table(void);
* Wait 2ms
* HSLCTL = 0x25 (Close HSDACL switch)
* HSRCTL = 0x25 (Close HSDACR switch)
- *
+ *
*/
-
+
/*
* (a) LP
* HSGAIN = 0x22 (-4 dB gain on L and R amplifiers)
@@ -73,9 +90,9 @@ void abe_init_subroutine_table(void);
* Wait 2ms
* HSLCTL = 0x2F (Close HSDACL switch)
* HSRCTL = 0x2F (Close HSDACR switch)
- *
+ *
*/
-
+
/*
* 4. Setting up a stereo FM playback path on headset
* (a) HP
@@ -86,12 +103,12 @@ void abe_init_subroutine_table(void);
* HSLCTL = 0x04 (Enable HSLDRV in HP mode)
* HSRCTL = 0x04 (Enable HSRDRV in HP mode)
* Wait 2ms
- * HSLCTL = 0x44 (Close FMLOOP switch)
+ * HSLCTL = 0x44 (Close FMLOOP switch)
* HSRCTL = 0x44 (Close FMLOOP switch)
- *
- *
+ *
+ *
*/
-
+
/*
* (b) LP
* LINEGAIN = 0x1B (0dB gain on L and R inputs)
@@ -101,25 +118,25 @@ void abe_init_subroutine_table(void);
* HSLCTL = 0x0C (Enable HSLDRV in LP mode)
* HSRCTL = 0x0C (Enable HSRDRV in LP mode)
* Wait 2ms
- * HSLCTL = 0x4C (Close FMLOOP switch)
+ * HSLCTL = 0x4C (Close FMLOOP switch)
* HSRCTL = 0x4C (Close FMLOOP switch)
- *
+ *
*/
-
-
+
+
/*
* 5. Setting up a handset call
- *
+ *
* UPLINK
- *
+ *
* AMICBCTL = 0x10
* MICGAIN = 0x0F (Gain to 24 dB for L and R)
* HPPLLCTL = 0x19 (Select HPPLL output, Enable Slicer, Enable HPPLL)
* MICLCTL = 0x0D (Select MMIC input, Enable ADC)
* MICRCTL = 0x0D (Select SMIC input, Enable ADC)
- *
+ *
* DNLINK
- *
+ *
* HSLCTL = 0x01 (Enable HSDACL, HP mode)
* Wait 80us
* EARCTL = 0x03 (Enable EAR, Gain = min, by default enabling EAR connects HSDACL output to EAR)
diff --git a/sound/soc/omap/abe/abe_sm_addr.h b/sound/soc/omap/abe/abe_sm_addr.h
index ee761187d0c1..fe445d5b0753 100644
--- a/sound/soc/omap/abe/abe_sm_addr.h
+++ b/sound/soc/omap/abe/abe_sm_addr.h
@@ -1,674 +1,685 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
*/
-
#ifndef _ABE_SM_ADDR_H_
#define _ABE_SM_ADDR_H_
-#define init_SM_ADDR 0
-#define init_SM_ADDR_END 304
-#define init_SM_sizeof 305
+#define init_SM_ADDR 0
+#define init_SM_ADDR_END 303
+#define init_SM_sizeof 304
+
+#define S_Data0_ADDR 304
+#define S_Data0_ADDR_END 304
+#define S_Data0_sizeof 1
-#define S_Data0_ADDR 305
-#define S_Data0_ADDR_END 305
-#define S_Data0_sizeof 1
+#define S_Temp_ADDR 305
+#define S_Temp_ADDR_END 305
+#define S_Temp_sizeof 1
-#define S_Temp_ADDR 306
-#define S_Temp_ADDR_END 306
-#define S_Temp_sizeof 1
+#define S_PhoenixOffset_ADDR 306
+#define S_PhoenixOffset_ADDR_END 306
+#define S_PhoenixOffset_sizeof 1
-#define S_PhoenixOffset_ADDR 307
-#define S_PhoenixOffset_ADDR_END 307
-#define S_PhoenixOffset_sizeof 1
+#define S_GTarget1_ADDR 307
+#define S_GTarget1_ADDR_END 313
+#define S_GTarget1_sizeof 7
-#define S_GTarget1_ADDR 308
-#define S_GTarget1_ADDR_END 314
-#define S_GTarget1_sizeof 7
+#define S_Gtarget_DL1_ADDR 314
+#define S_Gtarget_DL1_ADDR_END 315
+#define S_Gtarget_DL1_sizeof 2
-#define S_Gtarget_DL1_ADDR 315
-#define S_Gtarget_DL1_ADDR_END 316
-#define S_Gtarget_DL1_sizeof 2
+#define S_Gtarget_DL2_ADDR 316
+#define S_Gtarget_DL2_ADDR_END 317
+#define S_Gtarget_DL2_sizeof 2
-#define S_Gtarget_DL2_ADDR 317
-#define S_Gtarget_DL2_ADDR_END 318
-#define S_Gtarget_DL2_sizeof 2
+#define S_Gtarget_Echo_ADDR 318
+#define S_Gtarget_Echo_ADDR_END 318
+#define S_Gtarget_Echo_sizeof 1
-#define S_Gtarget_Echo_ADDR 319
-#define S_Gtarget_Echo_ADDR_END 319
-#define S_Gtarget_Echo_sizeof 1
+#define S_Gtarget_SDT_ADDR 319
+#define S_Gtarget_SDT_ADDR_END 319
+#define S_Gtarget_SDT_sizeof 1
-#define S_Gtarget_SDT_ADDR 320
-#define S_Gtarget_SDT_ADDR_END 320
-#define S_Gtarget_SDT_sizeof 1
+#define S_Gtarget_VxRec_ADDR 320
+#define S_Gtarget_VxRec_ADDR_END 321
+#define S_Gtarget_VxRec_sizeof 2
-#define S_Gtarget_VxRec_ADDR 321
-#define S_Gtarget_VxRec_ADDR_END 322
-#define S_Gtarget_VxRec_sizeof 2
+#define S_Gtarget_UL_ADDR 322
+#define S_Gtarget_UL_ADDR_END 323
+#define S_Gtarget_UL_sizeof 2
-#define S_Gtarget_UL_ADDR 323
-#define S_Gtarget_UL_ADDR_END 324
-#define S_Gtarget_UL_sizeof 2
+#define S_Gtarget_unused_ADDR 324
+#define S_Gtarget_unused_ADDR_END 324
+#define S_Gtarget_unused_sizeof 1
-#define S_Gtarget_unused_ADDR 325
-#define S_Gtarget_unused_ADDR_END 325
-#define S_Gtarget_unused_sizeof 1
+#define S_GCurrent_ADDR 325
+#define S_GCurrent_ADDR_END 342
+#define S_GCurrent_sizeof 18
-#define S_GCurrent_ADDR 326
-#define S_GCurrent_ADDR_END 343
-#define S_GCurrent_sizeof 18
+#define S_GAIN_ONE_ADDR 343
+#define S_GAIN_ONE_ADDR_END 343
+#define S_GAIN_ONE_sizeof 1
-#define S_GAIN_ONE_ADDR 344
-#define S_GAIN_ONE_ADDR_END 344
-#define S_GAIN_ONE_sizeof 1
+#define S_Tones_ADDR 344
+#define S_Tones_ADDR_END 355
+#define S_Tones_sizeof 12
-#define S_Tones_ADDR 345
-#define S_Tones_ADDR_END 356
-#define S_Tones_sizeof 12
+#define S_VX_DL_ADDR 356
+#define S_VX_DL_ADDR_END 367
+#define S_VX_DL_sizeof 12
-#define S_VX_DL_ADDR 357
-#define S_VX_DL_ADDR_END 368
-#define S_VX_DL_sizeof 12
+#define S_MM_UL2_ADDR 368
+#define S_MM_UL2_ADDR_END 379
+#define S_MM_UL2_sizeof 12
-#define S_MM_UL2_ADDR 369
-#define S_MM_UL2_ADDR_END 380
-#define S_MM_UL2_sizeof 12
+#define S_MM_DL_ADDR 380
+#define S_MM_DL_ADDR_END 391
+#define S_MM_DL_sizeof 12
-#define S_MM_DL_ADDR 381
-#define S_MM_DL_ADDR_END 392
-#define S_MM_DL_sizeof 12
+#define S_DL1_M_Out_ADDR 392
+#define S_DL1_M_Out_ADDR_END 403
+#define S_DL1_M_Out_sizeof 12
-#define S_DL1_M_Out_ADDR 393
-#define S_DL1_M_Out_ADDR_END 404
-#define S_DL1_M_Out_sizeof 12
+#define S_DL2_M_Out_ADDR 404
+#define S_DL2_M_Out_ADDR_END 415
+#define S_DL2_M_Out_sizeof 12
-#define S_DL2_M_Out_ADDR 405
-#define S_DL2_M_Out_ADDR_END 416
-#define S_DL2_M_Out_sizeof 12
+#define S_Echo_M_Out_ADDR 416
+#define S_Echo_M_Out_ADDR_END 427
+#define S_Echo_M_Out_sizeof 12
-#define S_Echo_M_Out_ADDR 417
-#define S_Echo_M_Out_ADDR_END 428
-#define S_Echo_M_Out_sizeof 12
+#define S_SDT_M_Out_ADDR 428
+#define S_SDT_M_Out_ADDR_END 439
+#define S_SDT_M_Out_sizeof 12
-#define S_SDT_M_Out_ADDR 429
-#define S_SDT_M_Out_ADDR_END 440
-#define S_SDT_M_Out_sizeof 12
+#define S_VX_UL_ADDR 440
+#define S_VX_UL_ADDR_END 451
+#define S_VX_UL_sizeof 12
-#define S_VX_UL_ADDR 441
-#define S_VX_UL_ADDR_END 452
-#define S_VX_UL_sizeof 12
+#define S_VX_UL_M_ADDR 452
+#define S_VX_UL_M_ADDR_END 463
+#define S_VX_UL_M_sizeof 12
-#define S_VX_UL_M_ADDR 453
-#define S_VX_UL_M_ADDR_END 464
-#define S_VX_UL_M_sizeof 12
+#define S_BT_DL_ADDR 464
+#define S_BT_DL_ADDR_END 475
+#define S_BT_DL_sizeof 12
-#define S_BT_DL_ADDR 465
-#define S_BT_DL_ADDR_END 476
-#define S_BT_DL_sizeof 12
+#define S_BT_UL_ADDR 476
+#define S_BT_UL_ADDR_END 487
+#define S_BT_UL_sizeof 12
-#define S_BT_UL_ADDR 477
-#define S_BT_UL_ADDR_END 488
-#define S_BT_UL_sizeof 12
+#define S_BT_DL_8k_ADDR 488
+#define S_BT_DL_8k_ADDR_END 489
+#define S_BT_DL_8k_sizeof 2
-#define S_BT_DL_8k_ADDR 489
-#define S_BT_DL_8k_ADDR_END 490
-#define S_BT_DL_8k_sizeof 2
+#define S_BT_DL_16k_ADDR 490
+#define S_BT_DL_16k_ADDR_END 493
+#define S_BT_DL_16k_sizeof 4
-#define S_BT_DL_16k_ADDR 491
-#define S_BT_DL_16k_ADDR_END 494
-#define S_BT_DL_16k_sizeof 4
+#define S_BT_UL_8k_ADDR 494
+#define S_BT_UL_8k_ADDR_END 495
+#define S_BT_UL_8k_sizeof 2
-#define S_BT_UL_8k_ADDR 495
-#define S_BT_UL_8k_ADDR_END 496
-#define S_BT_UL_8k_sizeof 2
+#define S_BT_UL_16k_ADDR 496
+#define S_BT_UL_16k_ADDR_END 499
+#define S_BT_UL_16k_sizeof 4
-#define S_BT_UL_16k_ADDR 497
-#define S_BT_UL_16k_ADDR_END 500
-#define S_BT_UL_16k_sizeof 4
+#define S_SDT_F_ADDR 500
+#define S_SDT_F_ADDR_END 511
+#define S_SDT_F_sizeof 12
-#define S_SDT_F_ADDR 501
-#define S_SDT_F_ADDR_END 512
-#define S_SDT_F_sizeof 12
+#define S_SDT_F_data_ADDR 512
+#define S_SDT_F_data_ADDR_END 520
+#define S_SDT_F_data_sizeof 9
-#define S_SDT_F_data_ADDR 513
-#define S_SDT_F_data_ADDR_END 521
-#define S_SDT_F_data_sizeof 9
+#define S_MM_DL_OSR_ADDR 521
+#define S_MM_DL_OSR_ADDR_END 544
+#define S_MM_DL_OSR_sizeof 24
-#define S_MM_DL_OSR_ADDR 522
-#define S_MM_DL_OSR_ADDR_END 545
-#define S_MM_DL_OSR_sizeof 24
+#define S_24_zeros_ADDR 545
+#define S_24_zeros_ADDR_END 568
+#define S_24_zeros_sizeof 24
-#define S_24_zeros_ADDR 546
-#define S_24_zeros_ADDR_END 569
-#define S_24_zeros_sizeof 24
+#define S_DMIC1_ADDR 569
+#define S_DMIC1_ADDR_END 580
+#define S_DMIC1_sizeof 12
-#define S_DMIC1_ADDR 570
-#define S_DMIC1_ADDR_END 581
-#define S_DMIC1_sizeof 12
+#define S_DMIC2_ADDR 581
+#define S_DMIC2_ADDR_END 592
+#define S_DMIC2_sizeof 12
-#define S_DMIC2_ADDR 582
-#define S_DMIC2_ADDR_END 593
-#define S_DMIC2_sizeof 12
+#define S_DMIC3_ADDR 593
+#define S_DMIC3_ADDR_END 604
+#define S_DMIC3_sizeof 12
-#define S_DMIC3_ADDR 594
-#define S_DMIC3_ADDR_END 605
-#define S_DMIC3_sizeof 12
+#define S_AMIC_ADDR 605
+#define S_AMIC_ADDR_END 616
+#define S_AMIC_sizeof 12
-#define S_AMIC_ADDR 606
-#define S_AMIC_ADDR_END 617
-#define S_AMIC_sizeof 12
+#define S_EANC_FBK_in_ADDR 617
+#define S_EANC_FBK_in_ADDR_END 640
+#define S_EANC_FBK_in_sizeof 24
-#define S_EANC_FBK_in_ADDR 618
-#define S_EANC_FBK_in_ADDR_END 641
-#define S_EANC_FBK_in_sizeof 24
+#define S_EANC_FBK_out_ADDR 641
+#define S_EANC_FBK_out_ADDR_END 652
+#define S_EANC_FBK_out_sizeof 12
-#define S_EANC_FBK_out_ADDR 642
-#define S_EANC_FBK_out_ADDR_END 653
-#define S_EANC_FBK_out_sizeof 12
+#define S_DMIC1_L_ADDR 653
+#define S_DMIC1_L_ADDR_END 664
+#define S_DMIC1_L_sizeof 12
-#define S_DMIC1_L_ADDR 654
-#define S_DMIC1_L_ADDR_END 665
-#define S_DMIC1_L_sizeof 12
+#define S_DMIC1_R_ADDR 665
+#define S_DMIC1_R_ADDR_END 676
+#define S_DMIC1_R_sizeof 12
-#define S_DMIC1_R_ADDR 666
-#define S_DMIC1_R_ADDR_END 677
-#define S_DMIC1_R_sizeof 12
+#define S_DMIC2_L_ADDR 677
+#define S_DMIC2_L_ADDR_END 688
+#define S_DMIC2_L_sizeof 12
-#define S_DMIC2_L_ADDR 678
-#define S_DMIC2_L_ADDR_END 689
-#define S_DMIC2_L_sizeof 12
+#define S_DMIC2_R_ADDR 689
+#define S_DMIC2_R_ADDR_END 700
+#define S_DMIC2_R_sizeof 12
-#define S_DMIC2_R_ADDR 690
-#define S_DMIC2_R_ADDR_END 701
-#define S_DMIC2_R_sizeof 12
+#define S_DMIC3_L_ADDR 701
+#define S_DMIC3_L_ADDR_END 712
+#define S_DMIC3_L_sizeof 12
-#define S_DMIC3_L_ADDR 702
-#define S_DMIC3_L_ADDR_END 713
-#define S_DMIC3_L_sizeof 12
+#define S_DMIC3_R_ADDR 713
+#define S_DMIC3_R_ADDR_END 724
+#define S_DMIC3_R_sizeof 12
-#define S_DMIC3_R_ADDR 714
-#define S_DMIC3_R_ADDR_END 725
-#define S_DMIC3_R_sizeof 12
+#define S_BT_UL_L_ADDR 725
+#define S_BT_UL_L_ADDR_END 736
+#define S_BT_UL_L_sizeof 12
-#define S_BT_UL_L_ADDR 726
-#define S_BT_UL_L_ADDR_END 737
-#define S_BT_UL_L_sizeof 12
+#define S_BT_UL_R_ADDR 737
+#define S_BT_UL_R_ADDR_END 748
+#define S_BT_UL_R_sizeof 12
-#define S_BT_UL_R_ADDR 738
-#define S_BT_UL_R_ADDR_END 749
-#define S_BT_UL_R_sizeof 12
+#define S_AMIC_L_ADDR 749
+#define S_AMIC_L_ADDR_END 760
+#define S_AMIC_L_sizeof 12
-#define S_AMIC_L_ADDR 750
-#define S_AMIC_L_ADDR_END 761
-#define S_AMIC_L_sizeof 12
+#define S_AMIC_R_ADDR 761
+#define S_AMIC_R_ADDR_END 772
+#define S_AMIC_R_sizeof 12
-#define S_AMIC_R_ADDR 762
-#define S_AMIC_R_ADDR_END 773
-#define S_AMIC_R_sizeof 12
+#define S_EANC_FBK_L_ADDR 773
+#define S_EANC_FBK_L_ADDR_END 784
+#define S_EANC_FBK_L_sizeof 12
-#define S_EANC_FBK_L_ADDR 774
-#define S_EANC_FBK_L_ADDR_END 785
-#define S_EANC_FBK_L_sizeof 12
+#define S_EANC_FBK_R_ADDR 785
+#define S_EANC_FBK_R_ADDR_END 796
+#define S_EANC_FBK_R_sizeof 12
-#define S_EANC_FBK_R_ADDR 786
-#define S_EANC_FBK_R_ADDR_END 797
-#define S_EANC_FBK_R_sizeof 12
+#define S_EchoRef_L_ADDR 797
+#define S_EchoRef_L_ADDR_END 808
+#define S_EchoRef_L_sizeof 12
-#define S_EchoRef_L_ADDR 798
-#define S_EchoRef_L_ADDR_END 809
-#define S_EchoRef_L_sizeof 12
+#define S_EchoRef_R_ADDR 809
+#define S_EchoRef_R_ADDR_END 820
+#define S_EchoRef_R_sizeof 12
-#define S_EchoRef_R_ADDR 810
-#define S_EchoRef_R_ADDR_END 821
-#define S_EchoRef_R_sizeof 12
+#define S_MM_DL_L_ADDR 821
+#define S_MM_DL_L_ADDR_END 832
+#define S_MM_DL_L_sizeof 12
-#define S_MM_DL_L_ADDR 822
-#define S_MM_DL_L_ADDR_END 833
-#define S_MM_DL_L_sizeof 12
+#define S_MM_DL_R_ADDR 833
+#define S_MM_DL_R_ADDR_END 844
+#define S_MM_DL_R_sizeof 12
-#define S_MM_DL_R_ADDR 834
-#define S_MM_DL_R_ADDR_END 845
-#define S_MM_DL_R_sizeof 12
+#define S_MM_UL_ADDR 845
+#define S_MM_UL_ADDR_END 964
+#define S_MM_UL_sizeof 120
-#define S_MM_UL_ADDR 846
-#define S_MM_UL_ADDR_END 965
-#define S_MM_UL_sizeof 120
+#define S_AMIC_96k_ADDR 965
+#define S_AMIC_96k_ADDR_END 988
+#define S_AMIC_96k_sizeof 24
-#define S_AMIC_96k_ADDR 966
-#define S_AMIC_96k_ADDR_END 989
-#define S_AMIC_96k_sizeof 24
+#define S_DMIC0_96k_ADDR 989
+#define S_DMIC0_96k_ADDR_END 1012
+#define S_DMIC0_96k_sizeof 24
-#define S_DMIC0_96k_ADDR 990
-#define S_DMIC0_96k_ADDR_END 1013
-#define S_DMIC0_96k_sizeof 24
+#define S_DMIC1_96k_ADDR 1013
+#define S_DMIC1_96k_ADDR_END 1036
+#define S_DMIC1_96k_sizeof 24
-#define S_DMIC1_96k_ADDR 1014
-#define S_DMIC1_96k_ADDR_END 1037
-#define S_DMIC1_96k_sizeof 24
+#define S_DMIC2_96k_ADDR 1037
+#define S_DMIC2_96k_ADDR_END 1060
+#define S_DMIC2_96k_sizeof 24
-#define S_DMIC2_96k_ADDR 1038
-#define S_DMIC2_96k_ADDR_END 1061
-#define S_DMIC2_96k_sizeof 24
+#define S_UL_VX_UL_48_8K_ADDR 1061
+#define S_UL_VX_UL_48_8K_ADDR_END 1072
+#define S_UL_VX_UL_48_8K_sizeof 12
-#define S_UL_VX_UL_48_8K_ADDR 1062
-#define S_UL_VX_UL_48_8K_ADDR_END 1073
-#define S_UL_VX_UL_48_8K_sizeof 12
+#define S_UL_VX_UL_48_16K_ADDR 1073
+#define S_UL_VX_UL_48_16K_ADDR_END 1084
+#define S_UL_VX_UL_48_16K_sizeof 12
-#define S_UL_VX_UL_48_16K_ADDR 1074
-#define S_UL_VX_UL_48_16K_ADDR_END 1085
-#define S_UL_VX_UL_48_16K_sizeof 12
+#define S_UL_MIC_48K_ADDR 1085
+#define S_UL_MIC_48K_ADDR_END 1096
+#define S_UL_MIC_48K_sizeof 12
-#define S_UL_MIC_48K_ADDR 1086
-#define S_UL_MIC_48K_ADDR_END 1097
-#define S_UL_MIC_48K_sizeof 12
+#define S_Voice_8k_UL_ADDR 1097
+#define S_Voice_8k_UL_ADDR_END 1099
+#define S_Voice_8k_UL_sizeof 3
-#define S_Voice_8k_UL_ADDR 1098
-#define S_Voice_8k_UL_ADDR_END 1100
-#define S_Voice_8k_UL_sizeof 3
+#define S_Voice_8k_DL_ADDR 1100
+#define S_Voice_8k_DL_ADDR_END 1101
+#define S_Voice_8k_DL_sizeof 2
-#define S_Voice_8k_DL_ADDR 1101
-#define S_Voice_8k_DL_ADDR_END 1102
-#define S_Voice_8k_DL_sizeof 2
+#define S_McPDM_Out1_ADDR 1102
+#define S_McPDM_Out1_ADDR_END 1125
+#define S_McPDM_Out1_sizeof 24
-#define S_McPDM_Out1_ADDR 1103
-#define S_McPDM_Out1_ADDR_END 1126
-#define S_McPDM_Out1_sizeof 24
+#define S_McPDM_Out2_ADDR 1126
+#define S_McPDM_Out2_ADDR_END 1149
+#define S_McPDM_Out2_sizeof 24
-#define S_McPDM_Out2_ADDR 1127
-#define S_McPDM_Out2_ADDR_END 1150
-#define S_McPDM_Out2_sizeof 24
+#define S_McPDM_Out3_ADDR 1150
+#define S_McPDM_Out3_ADDR_END 1173
+#define S_McPDM_Out3_sizeof 24
-#define S_McPDM_Out3_ADDR 1151
-#define S_McPDM_Out3_ADDR_END 1174
-#define S_McPDM_Out3_sizeof 24
+#define S_Voice_16k_UL_ADDR 1174
+#define S_Voice_16k_UL_ADDR_END 1178
+#define S_Voice_16k_UL_sizeof 5
-#define S_Voice_16k_UL_ADDR 1175
-#define S_Voice_16k_UL_ADDR_END 1179
-#define S_Voice_16k_UL_sizeof 5
+#define S_Voice_16k_DL_ADDR 1179
+#define S_Voice_16k_DL_ADDR_END 1182
+#define S_Voice_16k_DL_sizeof 4
-#define S_Voice_16k_DL_ADDR 1180
-#define S_Voice_16k_DL_ADDR_END 1183
-#define S_Voice_16k_DL_sizeof 4
+#define S_XinASRC_DL_VX_ADDR 1183
+#define S_XinASRC_DL_VX_ADDR_END 1222
+#define S_XinASRC_DL_VX_sizeof 40
-#define S_XinASRC_DL_VX_ADDR 1184
-#define S_XinASRC_DL_VX_ADDR_END 1223
-#define S_XinASRC_DL_VX_sizeof 40
+#define S_XinASRC_UL_VX_ADDR 1223
+#define S_XinASRC_UL_VX_ADDR_END 1262
+#define S_XinASRC_UL_VX_sizeof 40
-#define S_XinASRC_UL_VX_ADDR 1224
-#define S_XinASRC_UL_VX_ADDR_END 1263
-#define S_XinASRC_UL_VX_sizeof 40
+#define S_XinASRC_DL_MM_ADDR 1263
+#define S_XinASRC_DL_MM_ADDR_END 1302
+#define S_XinASRC_DL_MM_sizeof 40
-#define S_XinASRC_DL_MM_ADDR 1264
-#define S_XinASRC_DL_MM_ADDR_END 1303
-#define S_XinASRC_DL_MM_sizeof 40
+#define S_VX_REC_ADDR 1303
+#define S_VX_REC_ADDR_END 1314
+#define S_VX_REC_sizeof 12
-#define S_VX_REC_ADDR 1304
-#define S_VX_REC_ADDR_END 1315
-#define S_VX_REC_sizeof 12
+#define S_VX_REC_L_ADDR 1315
+#define S_VX_REC_L_ADDR_END 1326
+#define S_VX_REC_L_sizeof 12
-#define S_VX_REC_L_ADDR 1316
-#define S_VX_REC_L_ADDR_END 1327
-#define S_VX_REC_L_sizeof 12
+#define S_VX_REC_R_ADDR 1327
+#define S_VX_REC_R_ADDR_END 1338
+#define S_VX_REC_R_sizeof 12
-#define S_VX_REC_R_ADDR 1328
-#define S_VX_REC_R_ADDR_END 1339
-#define S_VX_REC_R_sizeof 12
+#define S_DL2_M_L_ADDR 1339
+#define S_DL2_M_L_ADDR_END 1350
+#define S_DL2_M_L_sizeof 12
-#define S_DL2_M_L_ADDR 1340
-#define S_DL2_M_L_ADDR_END 1351
-#define S_DL2_M_L_sizeof 12
+#define S_DL2_M_R_ADDR 1351
+#define S_DL2_M_R_ADDR_END 1362
+#define S_DL2_M_R_sizeof 12
-#define S_DL2_M_R_ADDR 1352
-#define S_DL2_M_R_ADDR_END 1363
-#define S_DL2_M_R_sizeof 12
+#define S_DL2_M_LR_EQ_data_ADDR 1363
+#define S_DL2_M_LR_EQ_data_ADDR_END 1387
+#define S_DL2_M_LR_EQ_data_sizeof 25
-#define S_DL2_M_LR_EQ_data_ADDR 1364
-#define S_DL2_M_LR_EQ_data_ADDR_END 1388
-#define S_DL2_M_LR_EQ_data_sizeof 25
+#define S_DL1_M_EQ_data_ADDR 1388
+#define S_DL1_M_EQ_data_ADDR_END 1412
+#define S_DL1_M_EQ_data_sizeof 25
-#define S_DL1_M_EQ_data_ADDR 1389
-#define S_DL1_M_EQ_data_ADDR_END 1413
-#define S_DL1_M_EQ_data_sizeof 25
+#define S_EARP_48_96_LP_data_ADDR 1413
+#define S_EARP_48_96_LP_data_ADDR_END 1427
+#define S_EARP_48_96_LP_data_sizeof 15
-#define S_EARP_48_96_LP_data_ADDR 1414
-#define S_EARP_48_96_LP_data_ADDR_END 1428
-#define S_EARP_48_96_LP_data_sizeof 15
+#define S_IHF_48_96_LP_data_ADDR 1428
+#define S_IHF_48_96_LP_data_ADDR_END 1442
+#define S_IHF_48_96_LP_data_sizeof 15
-#define S_IHF_48_96_LP_data_ADDR 1429
-#define S_IHF_48_96_LP_data_ADDR_END 1443
-#define S_IHF_48_96_LP_data_sizeof 15
+#define S_VX_UL_8_TEMP_ADDR 1443
+#define S_VX_UL_8_TEMP_ADDR_END 1444
+#define S_VX_UL_8_TEMP_sizeof 2
-#define S_VX_UL_8_TEMP_ADDR 1444
-#define S_VX_UL_8_TEMP_ADDR_END 1445
-#define S_VX_UL_8_TEMP_sizeof 2
+#define S_VX_UL_16_TEMP_ADDR 1445
+#define S_VX_UL_16_TEMP_ADDR_END 1448
+#define S_VX_UL_16_TEMP_sizeof 4
-#define S_VX_UL_16_TEMP_ADDR 1446
-#define S_VX_UL_16_TEMP_ADDR_END 1449
-#define S_VX_UL_16_TEMP_sizeof 4
+#define S_VX_DL_8_48_LP_data_ADDR 1449
+#define S_VX_DL_8_48_LP_data_ADDR_END 1459
+#define S_VX_DL_8_48_LP_data_sizeof 11
-#define S_VX_DL_8_48_LP_data_ADDR 1450
-#define S_VX_DL_8_48_LP_data_ADDR_END 1460
-#define S_VX_DL_8_48_LP_data_sizeof 11
+#define S_VX_DL_8_48_HP_data_ADDR 1460
+#define S_VX_DL_8_48_HP_data_ADDR_END 1466
+#define S_VX_DL_8_48_HP_data_sizeof 7
-#define S_VX_DL_8_48_HP_data_ADDR 1461
-#define S_VX_DL_8_48_HP_data_ADDR_END 1467
-#define S_VX_DL_8_48_HP_data_sizeof 7
+#define S_VX_DL_16_48_LP_data_ADDR 1467
+#define S_VX_DL_16_48_LP_data_ADDR_END 1477
+#define S_VX_DL_16_48_LP_data_sizeof 11
-#define S_VX_DL_16_48_LP_data_ADDR 1468
-#define S_VX_DL_16_48_LP_data_ADDR_END 1478
-#define S_VX_DL_16_48_LP_data_sizeof 11
+#define S_VX_DL_16_48_HP_data_ADDR 1478
+#define S_VX_DL_16_48_HP_data_ADDR_END 1482
+#define S_VX_DL_16_48_HP_data_sizeof 5
-#define S_VX_DL_16_48_HP_data_ADDR 1479
-#define S_VX_DL_16_48_HP_data_ADDR_END 1483
-#define S_VX_DL_16_48_HP_data_sizeof 5
+#define S_VX_UL_48_8_LP_data_ADDR 1483
+#define S_VX_UL_48_8_LP_data_ADDR_END 1493
+#define S_VX_UL_48_8_LP_data_sizeof 11
-#define S_VX_UL_48_8_LP_data_ADDR 1484
-#define S_VX_UL_48_8_LP_data_ADDR_END 1494
-#define S_VX_UL_48_8_LP_data_sizeof 11
+#define S_VX_UL_48_8_HP_data_ADDR 1494
+#define S_VX_UL_48_8_HP_data_ADDR_END 1500
+#define S_VX_UL_48_8_HP_data_sizeof 7
-#define S_VX_UL_48_8_HP_data_ADDR 1495
-#define S_VX_UL_48_8_HP_data_ADDR_END 1501
-#define S_VX_UL_48_8_HP_data_sizeof 7
+#define S_VX_UL_48_16_LP_data_ADDR 1501
+#define S_VX_UL_48_16_LP_data_ADDR_END 1511
+#define S_VX_UL_48_16_LP_data_sizeof 11
-#define S_VX_UL_48_16_LP_data_ADDR 1502
-#define S_VX_UL_48_16_LP_data_ADDR_END 1512
-#define S_VX_UL_48_16_LP_data_sizeof 11
+#define S_VX_UL_48_16_HP_data_ADDR 1512
+#define S_VX_UL_48_16_HP_data_ADDR_END 1518
+#define S_VX_UL_48_16_HP_data_sizeof 7
-#define S_VX_UL_48_16_HP_data_ADDR 1513
-#define S_VX_UL_48_16_HP_data_ADDR_END 1519
-#define S_VX_UL_48_16_HP_data_sizeof 7
+#define S_BT_UL_8_48_LP_data_ADDR 1519
+#define S_BT_UL_8_48_LP_data_ADDR_END 1529
+#define S_BT_UL_8_48_LP_data_sizeof 11
-#define S_BT_UL_8_48_LP_data_ADDR 1520
-#define S_BT_UL_8_48_LP_data_ADDR_END 1530
-#define S_BT_UL_8_48_LP_data_sizeof 11
+#define S_BT_UL_8_48_HP_data_ADDR 1530
+#define S_BT_UL_8_48_HP_data_ADDR_END 1536
+#define S_BT_UL_8_48_HP_data_sizeof 7
-#define S_BT_UL_8_48_HP_data_ADDR 1531
-#define S_BT_UL_8_48_HP_data_ADDR_END 1537
-#define S_BT_UL_8_48_HP_data_sizeof 7
+#define S_BT_UL_16_48_LP_data_ADDR 1537
+#define S_BT_UL_16_48_LP_data_ADDR_END 1547
+#define S_BT_UL_16_48_LP_data_sizeof 11
-#define S_BT_UL_16_48_LP_data_ADDR 1538
-#define S_BT_UL_16_48_LP_data_ADDR_END 1548
-#define S_BT_UL_16_48_LP_data_sizeof 11
+#define S_BT_UL_16_48_HP_data_ADDR 1548
+#define S_BT_UL_16_48_HP_data_ADDR_END 1552
+#define S_BT_UL_16_48_HP_data_sizeof 5
-#define S_BT_UL_16_48_HP_data_ADDR 1549
-#define S_BT_UL_16_48_HP_data_ADDR_END 1553
-#define S_BT_UL_16_48_HP_data_sizeof 5
+#define S_BT_DL_48_8_LP_data_ADDR 1553
+#define S_BT_DL_48_8_LP_data_ADDR_END 1563
+#define S_BT_DL_48_8_LP_data_sizeof 11
-#define S_BT_DL_48_8_LP_data_ADDR 1554
-#define S_BT_DL_48_8_LP_data_ADDR_END 1564
-#define S_BT_DL_48_8_LP_data_sizeof 11
+#define S_BT_DL_48_8_HP_data_ADDR 1564
+#define S_BT_DL_48_8_HP_data_ADDR_END 1570
+#define S_BT_DL_48_8_HP_data_sizeof 7
-#define S_BT_DL_48_8_HP_data_ADDR 1565
-#define S_BT_DL_48_8_HP_data_ADDR_END 1571
-#define S_BT_DL_48_8_HP_data_sizeof 7
+#define S_BT_DL_48_16_LP_data_ADDR 1571
+#define S_BT_DL_48_16_LP_data_ADDR_END 1581
+#define S_BT_DL_48_16_LP_data_sizeof 11
-#define S_BT_DL_48_16_LP_data_ADDR 1572
-#define S_BT_DL_48_16_LP_data_ADDR_END 1582
-#define S_BT_DL_48_16_LP_data_sizeof 11
+#define S_BT_DL_48_16_HP_data_ADDR 1582
+#define S_BT_DL_48_16_HP_data_ADDR_END 1586
+#define S_BT_DL_48_16_HP_data_sizeof 5
-#define S_BT_DL_48_16_HP_data_ADDR 1583
-#define S_BT_DL_48_16_HP_data_ADDR_END 1587
-#define S_BT_DL_48_16_HP_data_sizeof 5
+#define S_ECHO_REF_48_8_LP_data_ADDR 1587
+#define S_ECHO_REF_48_8_LP_data_ADDR_END 1597
+#define S_ECHO_REF_48_8_LP_data_sizeof 11
-#define S_ECHO_REF_48_8_LP_data_ADDR 1588
-#define S_ECHO_REF_48_8_LP_data_ADDR_END 1598
-#define S_ECHO_REF_48_8_LP_data_sizeof 11
+#define S_ECHO_REF_48_8_HP_data_ADDR 1598
+#define S_ECHO_REF_48_8_HP_data_ADDR_END 1604
+#define S_ECHO_REF_48_8_HP_data_sizeof 7
-#define S_ECHO_REF_48_8_HP_data_ADDR 1599
-#define S_ECHO_REF_48_8_HP_data_ADDR_END 1605
-#define S_ECHO_REF_48_8_HP_data_sizeof 7
+#define S_ECHO_REF_48_16_LP_data_ADDR 1605
+#define S_ECHO_REF_48_16_LP_data_ADDR_END 1615
+#define S_ECHO_REF_48_16_LP_data_sizeof 11
-#define S_ECHO_REF_48_16_LP_data_ADDR 1606
-#define S_ECHO_REF_48_16_LP_data_ADDR_END 1616
-#define S_ECHO_REF_48_16_LP_data_sizeof 11
+#define S_ECHO_REF_48_16_HP_data_ADDR 1616
+#define S_ECHO_REF_48_16_HP_data_ADDR_END 1620
+#define S_ECHO_REF_48_16_HP_data_sizeof 5
-#define S_ECHO_REF_48_16_HP_data_ADDR 1617
-#define S_ECHO_REF_48_16_HP_data_ADDR_END 1621
-#define S_ECHO_REF_48_16_HP_data_sizeof 5
+#define S_EANC_IIR_data_ADDR 1621
+#define S_EANC_IIR_data_ADDR_END 1637
+#define S_EANC_IIR_data_sizeof 17
-#define S_EANC_IIR_data_ADDR 1622
-#define S_EANC_IIR_data_ADDR_END 1638
-#define S_EANC_IIR_data_sizeof 17
+#define S_EANC_SignalTemp_ADDR 1638
+#define S_EANC_SignalTemp_ADDR_END 1658
+#define S_EANC_SignalTemp_sizeof 21
-#define S_EANC_SignalTemp_ADDR 1639
-#define S_EANC_SignalTemp_ADDR_END 1659
-#define S_EANC_SignalTemp_sizeof 21
+#define S_EANC_Input_ADDR 1659
+#define S_EANC_Input_ADDR_END 1659
+#define S_EANC_Input_sizeof 1
-#define S_EANC_Input_ADDR 1660
-#define S_EANC_Input_ADDR_END 1660
-#define S_EANC_Input_sizeof 1
+#define S_EANC_Output_ADDR 1660
+#define S_EANC_Output_ADDR_END 1660
+#define S_EANC_Output_sizeof 1
-#define S_EANC_Output_ADDR 1661
-#define S_EANC_Output_ADDR_END 1661
-#define S_EANC_Output_sizeof 1
+#define S_APS_IIRmem1_ADDR 1661
+#define S_APS_IIRmem1_ADDR_END 1669
+#define S_APS_IIRmem1_sizeof 9
-#define S_APS_IIRmem1_ADDR 1662
-#define S_APS_IIRmem1_ADDR_END 1670
-#define S_APS_IIRmem1_sizeof 9
+#define S_APS_M_IIRmem2_ADDR 1670
+#define S_APS_M_IIRmem2_ADDR_END 1672
+#define S_APS_M_IIRmem2_sizeof 3
-#define S_APS_M_IIRmem2_ADDR 1671
-#define S_APS_M_IIRmem2_ADDR_END 1673
-#define S_APS_M_IIRmem2_sizeof 3
+#define S_APS_C_IIRmem2_ADDR 1673
+#define S_APS_C_IIRmem2_ADDR_END 1675
+#define S_APS_C_IIRmem2_sizeof 3
-#define S_APS_C_IIRmem2_ADDR 1674
-#define S_APS_C_IIRmem2_ADDR_END 1676
-#define S_APS_C_IIRmem2_sizeof 3
+#define S_APS_DL1_OutSamples_ADDR 1676
+#define S_APS_DL1_OutSamples_ADDR_END 1677
+#define S_APS_DL1_OutSamples_sizeof 2
-#define S_APS_DL1_OutSamples_ADDR 1677
-#define S_APS_DL1_OutSamples_ADDR_END 1678
-#define S_APS_DL1_OutSamples_sizeof 2
+#define S_APS_DL1_COIL_OutSamples_ADDR 1678
+#define S_APS_DL1_COIL_OutSamples_ADDR_END 1679
+#define S_APS_DL1_COIL_OutSamples_sizeof 2
-#define S_APS_DL1_COIL_OutSamples_ADDR 1679
-#define S_APS_DL1_COIL_OutSamples_ADDR_END 1680
-#define S_APS_DL1_COIL_OutSamples_sizeof 2
+#define S_APS_DL2_L_OutSamples_ADDR 1680
+#define S_APS_DL2_L_OutSamples_ADDR_END 1681
+#define S_APS_DL2_L_OutSamples_sizeof 2
-#define S_APS_DL2_L_OutSamples_ADDR 1681
-#define S_APS_DL2_L_OutSamples_ADDR_END 1682
-#define S_APS_DL2_L_OutSamples_sizeof 2
+#define S_APS_DL2_L_COIL_OutSamples_ADDR 1682
+#define S_APS_DL2_L_COIL_OutSamples_ADDR_END 1683
+#define S_APS_DL2_L_COIL_OutSamples_sizeof 2
-#define S_APS_DL2_L_COIL_OutSamples_ADDR 1683
-#define S_APS_DL2_L_COIL_OutSamples_ADDR_END 1684
-#define S_APS_DL2_L_COIL_OutSamples_sizeof 2
+#define S_APS_DL2_R_OutSamples_ADDR 1684
+#define S_APS_DL2_R_OutSamples_ADDR_END 1685
+#define S_APS_DL2_R_OutSamples_sizeof 2
-#define S_APS_DL2_R_OutSamples_ADDR 1685
-#define S_APS_DL2_R_OutSamples_ADDR_END 1686
-#define S_APS_DL2_R_OutSamples_sizeof 2
+#define S_APS_DL2_R_COIL_OutSamples_ADDR 1686
+#define S_APS_DL2_R_COIL_OutSamples_ADDR_END 1687
+#define S_APS_DL2_R_COIL_OutSamples_sizeof 2
-#define S_APS_DL2_R_COIL_OutSamples_ADDR 1687
-#define S_APS_DL2_R_COIL_OutSamples_ADDR_END 1688
-#define S_APS_DL2_R_COIL_OutSamples_sizeof 2
+#define S_XinASRC_ECHO_REF_ADDR 1688
+#define S_XinASRC_ECHO_REF_ADDR_END 1727
+#define S_XinASRC_ECHO_REF_sizeof 40
-#define S_XinASRC_ECHO_REF_ADDR 1689
-#define S_XinASRC_ECHO_REF_ADDR_END 1728
-#define S_XinASRC_ECHO_REF_sizeof 40
+#define S_ECHO_REF_16K_ADDR 1728
+#define S_ECHO_REF_16K_ADDR_END 1732
+#define S_ECHO_REF_16K_sizeof 5
-#define S_ECHO_REF_16K_ADDR 1729
-#define S_ECHO_REF_16K_ADDR_END 1733
-#define S_ECHO_REF_16K_sizeof 5
+#define S_ECHO_REF_8K_ADDR 1733
+#define S_ECHO_REF_8K_ADDR_END 1735
+#define S_ECHO_REF_8K_sizeof 3
-#define S_ECHO_REF_8K_ADDR 1734
-#define S_ECHO_REF_8K_ADDR_END 1736
-#define S_ECHO_REF_8K_sizeof 3
+#define S_DL1_EQ_ADDR 1736
+#define S_DL1_EQ_ADDR_END 1747
+#define S_DL1_EQ_sizeof 12
-#define S_DL1_EQ_ADDR 1737
-#define S_DL1_EQ_ADDR_END 1748
-#define S_DL1_EQ_sizeof 12
+#define S_DL2_EQ_ADDR 1748
+#define S_DL2_EQ_ADDR_END 1759
+#define S_DL2_EQ_sizeof 12
-#define S_DL2_EQ_ADDR 1749
-#define S_DL2_EQ_ADDR_END 1760
-#define S_DL2_EQ_sizeof 12
+#define S_DL1_GAIN_out_ADDR 1760
+#define S_DL1_GAIN_out_ADDR_END 1771
+#define S_DL1_GAIN_out_sizeof 12
-#define S_DL1_GAIN_out_ADDR 1761
-#define S_DL1_GAIN_out_ADDR_END 1772
-#define S_DL1_GAIN_out_sizeof 12
+#define S_DL2_GAIN_out_ADDR 1772
+#define S_DL2_GAIN_out_ADDR_END 1783
+#define S_DL2_GAIN_out_sizeof 12
-#define S_DL2_GAIN_out_ADDR 1773
-#define S_DL2_GAIN_out_ADDR_END 1784
-#define S_DL2_GAIN_out_sizeof 12
+#define S_APS_DL2_L_IIRmem1_ADDR 1784
+#define S_APS_DL2_L_IIRmem1_ADDR_END 1792
+#define S_APS_DL2_L_IIRmem1_sizeof 9
-#define S_APS_DL2_L_IIRmem1_ADDR 1785
-#define S_APS_DL2_L_IIRmem1_ADDR_END 1793
-#define S_APS_DL2_L_IIRmem1_sizeof 9
+#define S_APS_DL2_R_IIRmem1_ADDR 1793
+#define S_APS_DL2_R_IIRmem1_ADDR_END 1801
+#define S_APS_DL2_R_IIRmem1_sizeof 9
-#define S_APS_DL2_R_IIRmem1_ADDR 1794
-#define S_APS_DL2_R_IIRmem1_ADDR_END 1802
-#define S_APS_DL2_R_IIRmem1_sizeof 9
+#define S_APS_DL2_L_M_IIRmem2_ADDR 1802
+#define S_APS_DL2_L_M_IIRmem2_ADDR_END 1804
+#define S_APS_DL2_L_M_IIRmem2_sizeof 3
-#define S_APS_DL2_L_M_IIRmem2_ADDR 1803
-#define S_APS_DL2_L_M_IIRmem2_ADDR_END 1805
-#define S_APS_DL2_L_M_IIRmem2_sizeof 3
+#define S_APS_DL2_R_M_IIRmem2_ADDR 1805
+#define S_APS_DL2_R_M_IIRmem2_ADDR_END 1807
+#define S_APS_DL2_R_M_IIRmem2_sizeof 3
-#define S_APS_DL2_R_M_IIRmem2_ADDR 1806
-#define S_APS_DL2_R_M_IIRmem2_ADDR_END 1808
-#define S_APS_DL2_R_M_IIRmem2_sizeof 3
+#define S_APS_DL2_L_C_IIRmem2_ADDR 1808
+#define S_APS_DL2_L_C_IIRmem2_ADDR_END 1810
+#define S_APS_DL2_L_C_IIRmem2_sizeof 3
-#define S_APS_DL2_L_C_IIRmem2_ADDR 1809
-#define S_APS_DL2_L_C_IIRmem2_ADDR_END 1811
-#define S_APS_DL2_L_C_IIRmem2_sizeof 3
+#define S_APS_DL2_R_C_IIRmem2_ADDR 1811
+#define S_APS_DL2_R_C_IIRmem2_ADDR_END 1813
+#define S_APS_DL2_R_C_IIRmem2_sizeof 3
-#define S_APS_DL2_R_C_IIRmem2_ADDR 1812
-#define S_APS_DL2_R_C_IIRmem2_ADDR_END 1814
-#define S_APS_DL2_R_C_IIRmem2_sizeof 3
+#define S_DL1_APS_ADDR 1814
+#define S_DL1_APS_ADDR_END 1825
+#define S_DL1_APS_sizeof 12
-#define S_DL1_APS_ADDR 1815
-#define S_DL1_APS_ADDR_END 1826
-#define S_DL1_APS_sizeof 12
+#define S_DL2_L_APS_ADDR 1826
+#define S_DL2_L_APS_ADDR_END 1837
+#define S_DL2_L_APS_sizeof 12
-#define S_DL2_L_APS_ADDR 1827
-#define S_DL2_L_APS_ADDR_END 1838
-#define S_DL2_L_APS_sizeof 12
+#define S_DL2_R_APS_ADDR 1838
+#define S_DL2_R_APS_ADDR_END 1849
+#define S_DL2_R_APS_sizeof 12
-#define S_DL2_R_APS_ADDR 1839
-#define S_DL2_R_APS_ADDR_END 1850
-#define S_DL2_R_APS_sizeof 12
+#define S_APS_DL1_EQ_data_ADDR 1850
+#define S_APS_DL1_EQ_data_ADDR_END 1858
+#define S_APS_DL1_EQ_data_sizeof 9
-#define S_APS_DL1_EQ_data_ADDR 1851
-#define S_APS_DL1_EQ_data_ADDR_END 1859
-#define S_APS_DL1_EQ_data_sizeof 9
+#define S_APS_DL2_EQ_data_ADDR 1859
+#define S_APS_DL2_EQ_data_ADDR_END 1867
+#define S_APS_DL2_EQ_data_sizeof 9
-#define S_APS_DL2_EQ_data_ADDR 1860
-#define S_APS_DL2_EQ_data_ADDR_END 1868
-#define S_APS_DL2_EQ_data_sizeof 9
+#define S_DC_DCvalue_ADDR 1868
+#define S_DC_DCvalue_ADDR_END 1868
+#define S_DC_DCvalue_sizeof 1
-#define S_DC_DCvalue_ADDR 1869
-#define S_DC_DCvalue_ADDR_END 1869
-#define S_DC_DCvalue_sizeof 1
+#define S_VIBRA_ADDR 1869
+#define S_VIBRA_ADDR_END 1874
+#define S_VIBRA_sizeof 6
-#define S_VIBRA_ADDR 1870
-#define S_VIBRA_ADDR_END 1875
-#define S_VIBRA_sizeof 6
+#define S_Vibra2_in_ADDR 1875
+#define S_Vibra2_in_ADDR_END 1880
+#define S_Vibra2_in_sizeof 6
-#define S_Vibra2_in_ADDR 1876
-#define S_Vibra2_in_ADDR_END 1881
-#define S_Vibra2_in_sizeof 6
+#define S_Vibra2_addr_ADDR 1881
+#define S_Vibra2_addr_ADDR_END 1881
+#define S_Vibra2_addr_sizeof 1
-#define S_Vibra2_addr_ADDR 1882
-#define S_Vibra2_addr_ADDR_END 1882
-#define S_Vibra2_addr_sizeof 1
+#define S_VibraCtrl_forRightSM_ADDR 1882
+#define S_VibraCtrl_forRightSM_ADDR_END 1905
+#define S_VibraCtrl_forRightSM_sizeof 24
-#define S_VibraCtrl_forRightSM_ADDR 1883
-#define S_VibraCtrl_forRightSM_ADDR_END 1906
-#define S_VibraCtrl_forRightSM_sizeof 24
+#define S_Rnoise_mem_ADDR 1906
+#define S_Rnoise_mem_ADDR_END 1906
+#define S_Rnoise_mem_sizeof 1
-#define S_Rnoise_mem_ADDR 1907
-#define S_Rnoise_mem_ADDR_END 1907
-#define S_Rnoise_mem_sizeof 1
+#define S_Ctrl_ADDR 1907
+#define S_Ctrl_ADDR_END 1924
+#define S_Ctrl_sizeof 18
-#define S_Ctrl_ADDR 1908
-#define S_Ctrl_ADDR_END 1925
-#define S_Ctrl_sizeof 18
+#define S_Vibra1_in_ADDR 1925
+#define S_Vibra1_in_ADDR_END 1930
+#define S_Vibra1_in_sizeof 6
-#define S_Vibra1_in_ADDR 1926
-#define S_Vibra1_in_ADDR_END 1931
-#define S_Vibra1_in_sizeof 6
+#define S_Vibra1_temp_ADDR 1931
+#define S_Vibra1_temp_ADDR_END 1954
+#define S_Vibra1_temp_sizeof 24
-#define S_Vibra1_temp_ADDR 1932
-#define S_Vibra1_temp_ADDR_END 1955
-#define S_Vibra1_temp_sizeof 24
+#define S_VibraCtrl_forLeftSM_ADDR 1955
+#define S_VibraCtrl_forLeftSM_ADDR_END 1978
+#define S_VibraCtrl_forLeftSM_sizeof 24
-#define S_VibraCtrl_forLeftSM_ADDR 1956
-#define S_VibraCtrl_forLeftSM_ADDR_END 1979
-#define S_VibraCtrl_forLeftSM_sizeof 24
+#define S_Vibra1_mem_ADDR 1979
+#define S_Vibra1_mem_ADDR_END 1989
+#define S_Vibra1_mem_sizeof 11
-#define S_Vibra1_mem_ADDR 1980
-#define S_Vibra1_mem_ADDR_END 1990
-#define S_Vibra1_mem_sizeof 11
+#define S_VibraCtrl_Stereo_ADDR 1990
+#define S_VibraCtrl_Stereo_ADDR_END 2013
+#define S_VibraCtrl_Stereo_sizeof 24
-#define S_VibraCtrl_Stereo_ADDR 1991
-#define S_VibraCtrl_Stereo_ADDR_END 2014
-#define S_VibraCtrl_Stereo_sizeof 24
+#define S_AMIC_96_48_data_ADDR 2014
+#define S_AMIC_96_48_data_ADDR_END 2032
+#define S_AMIC_96_48_data_sizeof 19
-#define S_AMIC_96_48_data_ADDR 2015
-#define S_AMIC_96_48_data_ADDR_END 2033
-#define S_AMIC_96_48_data_sizeof 19
+#define S_DMIC0_96_48_data_ADDR 2033
+#define S_DMIC0_96_48_data_ADDR_END 2051
+#define S_DMIC0_96_48_data_sizeof 19
-#define S_DMIC0_96_48_data_ADDR 2034
-#define S_DMIC0_96_48_data_ADDR_END 2052
-#define S_DMIC0_96_48_data_sizeof 19
+#define S_DMIC1_96_48_data_ADDR 2052
+#define S_DMIC1_96_48_data_ADDR_END 2070
+#define S_DMIC1_96_48_data_sizeof 19
-#define S_DMIC1_96_48_data_ADDR 2053
-#define S_DMIC1_96_48_data_ADDR_END 2071
-#define S_DMIC1_96_48_data_sizeof 19
+#define S_DMIC2_96_48_data_ADDR 2071
+#define S_DMIC2_96_48_data_ADDR_END 2089
+#define S_DMIC2_96_48_data_sizeof 19
-#define S_DMIC2_96_48_data_ADDR 2072
-#define S_DMIC2_96_48_data_ADDR_END 2090
-#define S_DMIC2_96_48_data_sizeof 19
+#define S_EANC_FBK_96_48_data_ADDR 2090
+#define S_EANC_FBK_96_48_data_ADDR_END 2108
+#define S_EANC_FBK_96_48_data_sizeof 19
-#define S_EANC_FBK_96_48_data_ADDR 2091
-#define S_EANC_FBK_96_48_data_ADDR_END 2109
-#define S_EANC_FBK_96_48_data_sizeof 19
+#define S_DBG_8K_PATTERN_ADDR 2109
+#define S_DBG_8K_PATTERN_ADDR_END 2110
+#define S_DBG_8K_PATTERN_sizeof 2
-#define S_DBG_8K_PATTERN_ADDR 2110
-#define S_DBG_8K_PATTERN_ADDR_END 2111
-#define S_DBG_8K_PATTERN_sizeof 2
+#define S_DBG_16K_PATTERN_ADDR 2111
+#define S_DBG_16K_PATTERN_ADDR_END 2114
+#define S_DBG_16K_PATTERN_sizeof 4
-#define S_DBG_16K_PATTERN_ADDR 2112
-#define S_DBG_16K_PATTERN_ADDR_END 2115
-#define S_DBG_16K_PATTERN_sizeof 4
+#define S_DBG_24K_PATTERN_ADDR 2115
+#define S_DBG_24K_PATTERN_ADDR_END 2120
+#define S_DBG_24K_PATTERN_sizeof 6
-#define S_DBG_24K_PATTERN_ADDR 2116
-#define S_DBG_24K_PATTERN_ADDR_END 2121
-#define S_DBG_24K_PATTERN_sizeof 6
+#define S_DBG_48K_PATTERN_ADDR 2121
+#define S_DBG_48K_PATTERN_ADDR_END 2132
+#define S_DBG_48K_PATTERN_sizeof 12
-#define S_DBG_48K_PATTERN_ADDR 2122
-#define S_DBG_48K_PATTERN_ADDR_END 2133
-#define S_DBG_48K_PATTERN_sizeof 12
+#define S_DBG_96K_PATTERN_ADDR 2133
+#define S_DBG_96K_PATTERN_ADDR_END 2156
+#define S_DBG_96K_PATTERN_sizeof 24
-#define S_DBG_96K_PATTERN_ADDR 2134
-#define S_DBG_96K_PATTERN_ADDR_END 2157
-#define S_DBG_96K_PATTERN_sizeof 24
+#define S_MM_EXT_IN_ADDR 2157
+#define S_MM_EXT_IN_ADDR_END 2168
+#define S_MM_EXT_IN_sizeof 12
-#define S_MM_EXT_IN_ADDR 2158
-#define S_MM_EXT_IN_ADDR_END 2169
-#define S_MM_EXT_IN_sizeof 12
+#define S_MM_EXT_IN_L_ADDR 2169
+#define S_MM_EXT_IN_L_ADDR_END 2180
+#define S_MM_EXT_IN_L_sizeof 12
-#define S_MM_EXT_IN_L_ADDR 2170
-#define S_MM_EXT_IN_L_ADDR_END 2181
-#define S_MM_EXT_IN_L_sizeof 12
+#define S_MM_EXT_IN_R_ADDR 2181
+#define S_MM_EXT_IN_R_ADDR_END 2192
+#define S_MM_EXT_IN_R_sizeof 12
-#define S_MM_EXT_IN_R_ADDR 2182
-#define S_MM_EXT_IN_R_ADDR_END 2193
-#define S_MM_EXT_IN_R_sizeof 12
+#define S_MIC4_ADDR 2193
+#define S_MIC4_ADDR_END 2204
+#define S_MIC4_sizeof 12
-#define S_MIC4_ADDR 2194
-#define S_MIC4_ADDR_END 2205
-#define S_MIC4_sizeof 12
+#define S_MIC4_L_ADDR 2205
+#define S_MIC4_L_ADDR_END 2216
+#define S_MIC4_L_sizeof 12
-#define S_MIC4_L_ADDR 2206
-#define S_MIC4_L_ADDR_END 2217
-#define S_MIC4_L_sizeof 12
+#define S_MIC4_R_ADDR 2217
+#define S_MIC4_R_ADDR_END 2228
+#define S_MIC4_R_sizeof 12
-#define S_MIC4_R_ADDR 2218
-#define S_MIC4_R_ADDR_END 2229
-#define S_MIC4_R_sizeof 12
+#define S_HW_TEST_ADDR 2229
+#define S_HW_TEST_ADDR_END 2229
+#define S_HW_TEST_sizeof 1
-#define S_HW_TEST_ADDR 2230
-#define S_HW_TEST_ADDR_END 2230
-#define S_HW_TEST_sizeof 1
#endif /* _ABESM_ADDR_H_ */
diff --git a/sound/soc/omap/abe/abe_sys.h b/sound/soc/omap/abe/abe_sys.h
index f4d50d2132ff..f7b3bae9f089 100644
--- a/sound/soc/omap/abe/abe_sys.h
+++ b/sound/soc/omap/abe/abe_sys.h
@@ -1,9 +1,23 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+/* =============================================================================
+* Texas Instruments OMAP(TM) Platform Software
+* (c) Copyright 2009 Texas Instruments Incorporated. All Rights Reserved.
+*
+* Use of this software is controlled by the terms and conditions found
+* in the license agreement under which this software has been supplied.
+* =========================================================================== */
+/**
+ * @file ABE_SYS.H
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Headers for system calls and includes
+ *
+ * @path
+ * @rev 01.00
*/
+/* ----------------------------------------------------------------------------
+*!
+*! Revision History
+*! ===================================
+*! 27-Nov-2008 Original (LLF)
+*! 05-Jun-2009 V05 release
+* =========================================================================== */
+
diff --git a/sound/soc/omap/abe/abe_taskId.h b/sound/soc/omap/abe/abe_taskId.h
deleted file mode 100644
index 6b53e7393501..000000000000
--- a/sound/soc/omap/abe/abe_taskId.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
- *
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
- */
-
-#ifndef _ABE_TASKID_H_
-#define _ABE_TASKID_H_
-
-#define C_ABE_FW_TASK_DL1_APS_CORE 0
-#define C_ABE_FW_TASK_DL1_APS_COIL_CORE 1
-#define C_ABE_FW_TASK_DL2_L_APS_CORE 2
-#define C_ABE_FW_TASK_DL2_L_APS_COIL_CORE 3
-#define C_ABE_FW_TASK_DL2_R_APS_CORE 4
-#define C_ABE_FW_TASK_DL2_R_APS_COIL_CORE 5
-#define C_ABE_FW_TASK_ASRC_VX_DL_8 6
-#define C_ABE_FW_TASK_ASRC_VX_DL_16 7
-#define C_ABE_FW_TASK_ASRC_MM_DL 8
-#define C_ABE_FW_TASK_ASRC_VX_UL_8 9
-#define C_ABE_FW_TASK_ASRC_VX_UL_16 10
-#define C_ABE_FW_TASK_DC_REMOVAL 11
-#define C_ABE_FW_TASK_VX_UL_48_8_DEC 12
-#define C_ABE_FW_TASK_VX_UL_48_16_DEC 13
-#define C_ABE_FW_TASK_BT_DL_48_8_DEC 14
-#define C_ABE_FW_TASK_BT_DL_48_16_DEC 15
-#define C_ABE_FW_TASK_ECHO_REF_48_8_DEC 16
-#define C_ABE_FW_TASK_ECHO_REF_48_16_DEC 17
-#define C_ABE_FW_TASK_DL2_EQ 18
-#define C_ABE_FW_TASK_DL2_L_APS_IIR 19
-#define C_ABE_FW_TASK_DL2_R_APS_IIR 20
-#define C_ABE_FW_TASK_DL2_APS_EQ 21
-#define C_ABE_FW_TASK_ECHO_REF_48_16 22
-#define C_ABE_FW_TASK_ECHO_REF_48_8 23
-#define C_ABE_FW_TASK_GAIN_UPDATE 24
-#define C_ABE_FW_TASK_SideTone 25
-#define C_ABE_FW_TASK_VX_DL_8_48_LP 26
-#define C_ABE_FW_TASK_VX_DL_8_48_HP 27
-#define C_ABE_FW_TASK_VX_DL_16_48_LP 28
-#define C_ABE_FW_TASK_VX_DL_16_48_HP 29
-#define C_ABE_FW_TASK_VX_UL_48_8_LP 30
-#define C_ABE_FW_TASK_VX_UL_48_8_HP 31
-#define C_ABE_FW_TASK_VX_UL_48_16_LP 32
-#define C_ABE_FW_TASK_VX_UL_48_16_HP 33
-#define C_ABE_FW_TASK_BT_UL_8_48_LP 34
-#define C_ABE_FW_TASK_BT_UL_8_48_HP 35
-#define C_ABE_FW_TASK_BT_UL_16_48_LP 36
-#define C_ABE_FW_TASK_BT_UL_16_48_HP 37
-#define C_ABE_FW_TASK_BT_DL_48_8_LP 38
-#define C_ABE_FW_TASK_BT_DL_48_8_HP 39
-#define C_ABE_FW_TASK_BT_DL_48_16_LP 40
-#define C_ABE_FW_TASK_BT_DL_48_16_HP 41
-#define C_ABE_FW_TASK_ECHO_REF_48_8_LP 42
-#define C_ABE_FW_TASK_ECHO_REF_48_8_HP 43
-#define C_ABE_FW_TASK_ECHO_REF_48_16_LP 44
-#define C_ABE_FW_TASK_ECHO_REF_48_16_HP 45
-#define C_ABE_FW_TASK_DL1_EQ 46
-#define C_ABE_FW_TASK_DL1_APS_IIR 47
-#define C_ABE_FW_TASK_DL1_APS_EQ 48
-#define C_ABE_FW_TASK_IHF_48_96_LP 49
-#define C_ABE_FW_TASK_EARP_48_96_LP 50
-#define C_ABE_FW_TASK_DL1_GAIN 51
-#define C_ABE_FW_TASK_DL2_GAIN 52
-#define C_ABE_FW_TASK_IO_PING_PONG 53
-#define C_ABE_FW_TASK_IO_DMIC 54
-#define C_ABE_FW_TASK_IO_PDM_UL 55
-#define C_ABE_FW_TASK_IO_BT_VX_UL 56
-#define C_ABE_FW_TASK_IO_MM_UL 57
-#define C_ABE_FW_TASK_IO_MM_UL2 58
-#define C_ABE_FW_TASK_IO_VX_UL 59
-#define C_ABE_FW_TASK_IO_MM_DL 60
-#define C_ABE_FW_TASK_IO_VX_DL 61
-#define C_ABE_FW_TASK_IO_TONES_DL 62
-#define C_ABE_FW_TASK_IO_VIB_DL 63
-#define C_ABE_FW_TASK_IO_BT_VX_DL 64
-#define C_ABE_FW_TASK_IO_PDM_DL 65
-#define C_ABE_FW_TASK_IO_MM_EXT_OUT 66
-#define C_ABE_FW_TASK_IO_MM_EXT_IN 67
-#define C_ABE_FW_TASK_IO_TDM_OUT 68
-#define C_ABE_FW_TASK_IO_TDM_IN 69
-#define C_ABE_FW_TASK_DEBUG_IRQFIFO 70
-#define C_ABE_FW_TASK_EchoMixer 71
-#define C_ABE_FW_TASK_SDTMixer 72
-#define C_ABE_FW_TASK_DL1Mixer 73
-#define C_ABE_FW_TASK_DL2Mixer 74
-#define C_ABE_FW_TASK_VXRECMixer 75
-#define C_ABE_FW_TASK_ULMixer 76
-#define C_ABE_FW_TASK_VIBRA_PACK 77
-#define C_ABE_FW_TASK_VX_DL_8_48_0SR 78
-#define C_ABE_FW_TASK_VX_DL_16_48_0SR 79
-#define C_ABE_FW_TASK_BT_UL_8_48_0SR 80
-#define C_ABE_FW_TASK_BT_UL_16_48_0SR 81
-#define C_ABE_FW_TASK_IHF_48_96_0SR 82
-#define C_ABE_FW_TASK_EARP_48_96_0SR 83
-#define C_ABE_FW_TASK_AMIC_SPLIT 84
-#define C_ABE_FW_TASK_DMIC1_SPLIT 85
-#define C_ABE_FW_TASK_DMIC2_SPLIT 86
-#define C_ABE_FW_TASK_DMIC3_SPLIT 87
-#define C_ABE_FW_TASK_VXREC_SPLIT 88
-#define C_ABE_FW_TASK_BT_UL_SPLIT 89
-#define C_ABE_FW_TASK_MM_SPLIT 90
-#define C_ABE_FW_TASK_DL2_APS_SPLIT 91
-#define C_ABE_FW_TASK_VIBRA_SPLIT 92
-#define C_ABE_FW_TASK_MM_EXT_IN_SPLIT 93
-#define C_ABE_FW_TASK_EANC_FBK_SPLIT 94
-#define C_ABE_FW_TASK_MIC4_SPLIT 95
-#define C_ABE_FW_TASK_VX_UL_ROUTING 96
-#define C_ABE_FW_TASK_MM_UL2_ROUTING 97
-#define C_ABE_FW_TASK_VIBRA1 98
-#define C_ABE_FW_TASK_VIBRA2 99
-#define C_ABE_FW_TASK_BT_UL_16_48 100
-#define C_ABE_FW_TASK_BT_UL_8_48 101
-#define C_ABE_FW_TASK_BT_DL_48_16 102
-#define C_ABE_FW_TASK_BT_DL_48_8 103
-#define C_ABE_FW_TASK_VX_DL_16_48 104
-#define C_ABE_FW_TASK_VX_DL_8_48 105
-#define C_ABE_FW_TASK_VX_UL_48_16 106
-#define C_ABE_FW_TASK_VX_UL_48_8 107
-#define C_ABE_FW_TASK_DBG_SYNC 108
-#define C_ABE_FW_TASK_APS_DL1_IRQs 109
-#define C_ABE_FW_TASK_APS_DL2_L_IRQs 110
-#define C_ABE_FW_TASK_APS_DL2_R_IRQs 111
-#define C_ABE_FW_TASK_AMIC_96_48_LP 112
-#define C_ABE_FW_TASK_DMIC1_96_48_LP 113
-#define C_ABE_FW_TASK_DMIC2_96_48_LP 114
-#define C_ABE_FW_TASK_DMIC3_96_48_LP 115
-
-#endif /* _ABE_TASKID_H_ */
diff --git a/sound/soc/omap/abe/abe_taskid.h b/sound/soc/omap/abe/abe_taskid.h
new file mode 100644
index 000000000000..be152545e825
--- /dev/null
+++ b/sound/soc/omap/abe/abe_taskid.h
@@ -0,0 +1,144 @@
+/*
+ * ALSA SoC OMAP ABE driver
+*
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef _ABE_TASKID_H_
+#define _ABE_TASKID_H_
+
+#define C_ABE_FW_TASK_DL1_APS_CORE 0
+#define C_ABE_FW_TASK_DL1_APS_COIL_CORE 1
+#define C_ABE_FW_TASK_DL2_L_APS_CORE 2
+#define C_ABE_FW_TASK_DL2_L_APS_COIL_CORE 3
+#define C_ABE_FW_TASK_DL2_R_APS_CORE 4
+#define C_ABE_FW_TASK_DL2_R_APS_COIL_CORE 5
+#define C_ABE_FW_TASK_ASRC_VX_DL_8 6
+#define C_ABE_FW_TASK_ASRC_VX_DL_16 7
+#define C_ABE_FW_TASK_ASRC_MM_DL 8
+#define C_ABE_FW_TASK_ASRC_VX_UL_8 9
+#define C_ABE_FW_TASK_ASRC_VX_UL_16 10
+#define C_ABE_FW_TASK_DC_REMOVAL 11
+#define C_ABE_FW_TASK_VX_UL_48_8_DEC 12
+#define C_ABE_FW_TASK_VX_UL_48_16_DEC 13
+#define C_ABE_FW_TASK_BT_DL_48_8_DEC 14
+#define C_ABE_FW_TASK_BT_DL_48_16_DEC 15
+#define C_ABE_FW_TASK_ECHO_REF_48_8_DEC 16
+#define C_ABE_FW_TASK_ECHO_REF_48_16_DEC 17
+#define C_ABE_FW_TASK_DL2_EQ 18
+#define C_ABE_FW_TASK_DL2_L_APS_IIR 19
+#define C_ABE_FW_TASK_DL2_R_APS_IIR 20
+#define C_ABE_FW_TASK_DL2_APS_EQ 21
+#define C_ABE_FW_TASK_ECHO_REF_48_16 22
+#define C_ABE_FW_TASK_ECHO_REF_48_8 23
+#define C_ABE_FW_TASK_GAIN_UPDATE 24
+#define C_ABE_FW_TASK_SideTone 25
+#define C_ABE_FW_TASK_VX_DL_8_48_LP 26
+#define C_ABE_FW_TASK_VX_DL_8_48_HP 27
+#define C_ABE_FW_TASK_VX_DL_16_48_LP 28
+#define C_ABE_FW_TASK_VX_DL_16_48_HP 29
+#define C_ABE_FW_TASK_VX_UL_48_8_LP 30
+#define C_ABE_FW_TASK_VX_UL_48_8_HP 31
+#define C_ABE_FW_TASK_VX_UL_48_16_LP 32
+#define C_ABE_FW_TASK_VX_UL_48_16_HP 33
+#define C_ABE_FW_TASK_BT_UL_8_48_LP 34
+#define C_ABE_FW_TASK_BT_UL_8_48_HP 35
+#define C_ABE_FW_TASK_BT_UL_16_48_LP 36
+#define C_ABE_FW_TASK_BT_UL_16_48_HP 37
+#define C_ABE_FW_TASK_BT_DL_48_8_LP 38
+#define C_ABE_FW_TASK_BT_DL_48_8_HP 39
+#define C_ABE_FW_TASK_BT_DL_48_16_LP 40
+#define C_ABE_FW_TASK_BT_DL_48_16_HP 41
+#define C_ABE_FW_TASK_ECHO_REF_48_8_LP 42
+#define C_ABE_FW_TASK_ECHO_REF_48_8_HP 43
+#define C_ABE_FW_TASK_ECHO_REF_48_16_LP 44
+#define C_ABE_FW_TASK_ECHO_REF_48_16_HP 45
+#define C_ABE_FW_TASK_DL1_EQ 46
+#define C_ABE_FW_TASK_DL1_APS_IIR 47
+#define C_ABE_FW_TASK_DL1_APS_EQ 48
+#define C_ABE_FW_TASK_IHF_48_96_LP 49
+#define C_ABE_FW_TASK_EARP_48_96_LP 50
+#define C_ABE_FW_TASK_DL1_GAIN 51
+#define C_ABE_FW_TASK_DL2_GAIN 52
+#define C_ABE_FW_TASK_IO_PING_PONG 53
+#define C_ABE_FW_TASK_IO_DMIC 54
+#define C_ABE_FW_TASK_IO_PDM_UL 55
+#define C_ABE_FW_TASK_IO_BT_VX_UL 56
+#define C_ABE_FW_TASK_IO_MM_UL 57
+#define C_ABE_FW_TASK_IO_MM_UL2 58
+#define C_ABE_FW_TASK_IO_VX_UL 59
+#define C_ABE_FW_TASK_IO_MM_DL 60
+#define C_ABE_FW_TASK_IO_VX_DL 61
+#define C_ABE_FW_TASK_IO_TONES_DL 62
+#define C_ABE_FW_TASK_IO_VIB_DL 63
+#define C_ABE_FW_TASK_IO_BT_VX_DL 64
+#define C_ABE_FW_TASK_IO_PDM_DL 65
+#define C_ABE_FW_TASK_IO_MM_EXT_OUT 66
+#define C_ABE_FW_TASK_IO_MM_EXT_IN 67
+#define C_ABE_FW_TASK_IO_TDM_OUT 68
+#define C_ABE_FW_TASK_IO_TDM_IN 69
+#define C_ABE_FW_TASK_DEBUG_IRQFIFO 70
+#define C_ABE_FW_TASK_EchoMixer 71
+#define C_ABE_FW_TASK_SDTMixer 72
+#define C_ABE_FW_TASK_DL1Mixer 73
+#define C_ABE_FW_TASK_DL2Mixer 74
+#define C_ABE_FW_TASK_VXRECMixer 75
+#define C_ABE_FW_TASK_ULMixer 76
+#define C_ABE_FW_TASK_VIBRA_PACK 77
+#define C_ABE_FW_TASK_VX_DL_8_48_0SR 78
+#define C_ABE_FW_TASK_VX_DL_16_48_0SR 79
+#define C_ABE_FW_TASK_BT_UL_8_48_0SR 80
+#define C_ABE_FW_TASK_BT_UL_16_48_0SR 81
+#define C_ABE_FW_TASK_IHF_48_96_0SR 82
+#define C_ABE_FW_TASK_EARP_48_96_0SR 83
+#define C_ABE_FW_TASK_AMIC_SPLIT 84
+#define C_ABE_FW_TASK_DMIC1_SPLIT 85
+#define C_ABE_FW_TASK_DMIC2_SPLIT 86
+#define C_ABE_FW_TASK_DMIC3_SPLIT 87
+#define C_ABE_FW_TASK_VXREC_SPLIT 88
+#define C_ABE_FW_TASK_BT_UL_SPLIT 89
+#define C_ABE_FW_TASK_MM_SPLIT 90
+#define C_ABE_FW_TASK_DL2_APS_SPLIT 91
+#define C_ABE_FW_TASK_VIBRA_SPLIT 92
+#define C_ABE_FW_TASK_MM_EXT_IN_SPLIT 93
+#define C_ABE_FW_TASK_EANC_FBK_SPLIT 94
+#define C_ABE_FW_TASK_MIC4_SPLIT 95
+#define C_ABE_FW_TASK_VX_UL_ROUTING 96
+#define C_ABE_FW_TASK_MM_UL2_ROUTING 97
+#define C_ABE_FW_TASK_VIBRA1 98
+#define C_ABE_FW_TASK_VIBRA2 99
+#define C_ABE_FW_TASK_BT_UL_16_48 100
+#define C_ABE_FW_TASK_BT_UL_8_48 101
+#define C_ABE_FW_TASK_BT_DL_48_16 102
+#define C_ABE_FW_TASK_BT_DL_48_8 103
+#define C_ABE_FW_TASK_VX_DL_16_48 104
+#define C_ABE_FW_TASK_VX_DL_8_48 105
+#define C_ABE_FW_TASK_VX_UL_48_16 106
+#define C_ABE_FW_TASK_VX_UL_48_8 107
+#define C_ABE_FW_TASK_DBG_SYNC 108
+#define C_ABE_FW_TASK_APS_DL1_IRQs 109
+#define C_ABE_FW_TASK_APS_DL2_L_IRQs 110
+#define C_ABE_FW_TASK_APS_DL2_R_IRQs 111
+#define C_ABE_FW_TASK_AMIC_96_48_LP 112
+#define C_ABE_FW_TASK_DMIC1_96_48_LP 113
+#define C_ABE_FW_TASK_DMIC2_96_48_LP 114
+#define C_ABE_FW_TASK_DMIC3_96_48_LP 115
+#define C_ABE_FW_TASK_INIT_FW_MEMORY 116
+#define C_ABE_FW_TASK_DEBUGTRACE_VX_ASRCs 117
+
+#endif /* _ABE_TASKID_H_ */
diff --git a/sound/soc/omap/abe/abe_test.c b/sound/soc/omap/abe/abe_test.c
index 4c7ea4a338fd..07669694d88e 100644
--- a/sound/soc/omap/abe/abe_test.c
+++ b/sound/soc/omap/abe/abe_test.c
@@ -1,866 +1,662 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+/* =============================================================================
+
+ THIS FILE IS PART OF THE ABE/HAL RELEASE FOR TEST PURPOSE
+ THIS FILE MUST NOT BE INSERTED IN THE MAKEFILE OF THE FINAL APPLICATION
+
+* =========================================================================== */
+/**
+ * @file ABE_API.C
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * All the visible API for the audio drivers
+ *
+ * @path
+ * @rev 01.00
*/
+/* ----------------------------------------------------------------------------
+*!
+*! Revision History
+*! ===================================
+*! 27-Nov-2008 Original
+*! 05-Jun-2009 V05 release
+* =========================================================================== */
+
+
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
+#include <string.h>
+
#include "ABE_MAIN.h"
#include "ABE_DEF.h"
-void abe_test_scenario_1(void);
-void abe_test_scenario_2(void);
-void abe_test_scenario_3(void);
-void abe_test_scenario_4(void);
+void abe_test_scenario_1 (void);
+void abe_test_scenario_2 (void);
+void abe_test_scenario_3 (void);
+void abe_test_scenario_4 (void);
+void abe_test_scenario_5 (void);
+void abe_test_scenario_6 (void);
+void abe_test_scenario_7 (void);
+
-/*
+/* ========================================================================== */
+/**
* @fn ABE_TEST_SCENARIO()
*/
-void abe_test_scenario(abe_int32 scenario_id)
+/* ========================================================================= */
+
+void abe_test_scenario (abe_int32 scenario_id)
{
- switch (scenario_id) {
- case 1:
- abe_test_scenario_1();
- break;
- case 2:
- abe_test_scenario_2();
- break;
- case 3:
- abe_test_scenario_3();
- break;
- case 4:
- abe_test_scenario_4();
- break;
- }
+ switch (scenario_id)
+ {
+ case 1 : abe_test_scenario_1 (); break;
+ case 2 : abe_test_scenario_2 (); break;
+ case 3 : abe_test_scenario_3 (); break;
+ case 4 : abe_test_scenario_4 (); break;
+ case 5 : abe_test_scenario_5 (); break; // ASRC
+ case 6 : abe_test_scenario_6 (); break; // APS
+ case 7 : abe_test_scenario_7 (); break; // RAMP tests
+ }
}
-/*
+
+/* ========================================================================== */
+/**
* @fn abe_test_read_time ()
*/
-abe_uint32 abe_test_read_time(void)
+/* ========================================================================= */
+abe_uint32 abe_test_read_time (void)
{
- abe_uint32 time;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_slotCounter_ADDR,
- (abe_uint32*)&time, sizeof (time));
- return (time & 0xFFFF);
+ abe_uint32 time;
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_slotCounter_ADDR, (abe_uint32*)&time, sizeof (time));
+ return (time & 0xFFFF);
}
-/*
+/* ========================================================================== */
+/**
+* @fn abe_short_ramps ()
+*/
+/* ========================================================================= */
+void abe_short_ramps (void)
+{
+ /* mixers' configuration */
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_1MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_1MS, MIX_DL1_INPUT_MM_UL2);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_1MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_1MS, MIX_DL1_INPUT_TONES);
+
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_1MS, MIX_DL2_INPUT_TONES);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_1MS, MIX_DL2_INPUT_VX_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_1MS, MIX_DL2_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_1MS, MIX_DL2_INPUT_MM_UL2);
+
+ abe_write_mixer (MIXSDT, MUTE_GAIN, RAMP_1MS, MIX_SDT_INPUT_UP_MIXER);
+ abe_write_mixer (MIXSDT, GAIN_0dB , RAMP_1MS, MIX_SDT_INPUT_DL1_MIXER);
+
+ abe_write_mixer (MIXECHO, GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_mixer (MIXECHO, GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_1MS, MIX_AUDUL_INPUT_MM_DL);
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_1MS, MIX_AUDUL_INPUT_TONES);
+ abe_write_mixer (MIXAUDUL, GAIN_0dB , RAMP_1MS, MIX_AUDUL_INPUT_UPLINK);
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_1MS, MIX_AUDUL_INPUT_VX_DL);
+
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_1MS, MIX_VXREC_INPUT_TONES);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_1MS, MIX_VXREC_INPUT_VX_DL);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_1MS, MIX_VXREC_INPUT_MM_DL);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_1MS, MIX_VXREC_INPUT_VX_UL);
+
+ abe_write_gain(GAINS_DMIC1,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC1,GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_DMIC2,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC2,GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_DMIC3,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC3,GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_AMIC ,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_AMIC, GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_gain(GAINS_SPLIT ,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_SPLIT, GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_gain (GAINS_DL1,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain (GAINS_DL1,GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain (GAINS_DL2,GAIN_0dB , RAMP_1MS, GAIN_LEFT_OFFSET);
+ abe_write_gain (GAINS_DL2,GAIN_0dB , RAMP_1MS, GAIN_RIGHT_OFFSET);
+}
+
+/* ========================================================================== */
+/**
* @fn ABE_TEST_SCENARIO_1 ()
*
-* DMA AUDIO PLAYER + DMA VOICE CALL 16kHz
+* DMA AUDIO PLAYER + DMA VOICE CALL 16kHz
*/
-void abe_test_scenario_1(void)
+/* ========================================================================= */
+
+void abe_test_scenario_1 (void)
{
- static abe_int32 time_offset, state;
- abe_data_format_t format;
- abe_dma_t dma_sink;
- abe_uint32 current_time;
- abe_use_case_id UC2[] = {
- ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE,
- ABE_RINGER_TONES,
- (abe_use_case_id)0
- };
- // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
- abe_opp_t OPP;
- abe_hw_config_init_t CONFIG;
-
- /* Scenario 1- 16kHz first */
- switch (state) {
- case 0:
- state ++;
- time_offset = abe_test_read_time();
- abe_reset_hal();
- abe_load_fw();
-
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC2, &OPP, &CONFIG);
- /* sets the OPP100 on FW05.xx */
- abe_set_opp_processing(OPP);
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_AMIC,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_BT]);
-
- format.f = 48000;
- format.samp_format = SIX_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL_PORT, &format, ABE_CBPR3_IDX, &dma_sink);
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- /* enable all DMIC aquisition */
- abe_enable_data_transfer(MM_UL_PORT);
- /* enable large-band DMIC aquisition */
- abe_enable_data_transfer(MM_UL2_PORT);
- abe_enable_data_transfer(VX_UL_PORT);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(TONES_DL_PORT, &format, ABE_CBPR5_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
- format.f = 24000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VIB_DL_PORT, &format, ABE_CBPR6_IDX, &dma_sink);
- abe_enable_data_transfer(TONES_DL_PORT);
- abe_enable_data_transfer(VX_DL_PORT);
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT);
- abe_enable_data_transfer(VIB_DL_PORT);
-
- /* SERIAL PORTS TEST */
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_serial_port(BT_VX_UL_PORT, &format, MCBSP1_RX);
- format.f = 8000;
- format.samp_format = MONO_RSHIFTED_16;
- abe_connect_serial_port(BT_VX_DL_PORT, &format, MCBSP1_TX);
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_serial_port(MM_EXT_IN_PORT, &format, MCBSP2_RX);
- format.f = 48000;
- format.samp_format = MONO_RSHIFTED_16;
- abe_connect_serial_port(MM_EXT_OUT_PORT, &format, MCBSP2_TX);
- abe_enable_data_transfer(BT_VX_UL_PORT);
- abe_enable_data_transfer(BT_VX_DL_PORT);
- abe_enable_data_transfer(MM_EXT_IN_PORT);
- abe_enable_data_transfer(MM_EXT_OUT_PORT);
-
- /* DMIC ATC can be enabled even if the DMIC */
- abe_enable_data_transfer(DMIC_PORT);
- abe_enable_data_transfer(PDM_DL_PORT);
- abe_enable_data_transfer(PDM_UL_PORT);
-
- /* mixers' configuration = voice on earphone + music on hands-free path */
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_TONES);
-
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_0MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, GAIN_0dB, RAMP_0MS, MIX_SDT_INPUT_DL1_MIXER);
-
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
-
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_MM_DL);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_TONES);
- abe_write_mixer(MIXAUDUL, GAIN_0dB, RAMP_0MS, MIX_AUDUL_INPUT_UPLINK);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_VX_DL);
-
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_0MS, MIX_VXREC_INPUT_TONES);
- abe_write_mixer(MIXVXREC, GAIN_M6dB, RAMP_0MS, MIX_VXREC_INPUT_VX_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_0MS, MIX_VXREC_INPUT_MM_DL);
- abe_write_mixer(MIXVXREC, GAIN_M6dB, RAMP_0MS, MIX_VXREC_INPUT_VX_UL);
- break;
- case 1:
- current_time = abe_test_read_time();
- if ((current_time - time_offset) < 100)
- break;
- else
- state ++;
- break;
- case 2:
- current_time = abe_test_read_time();
- if ((current_time - time_offset) < 100000)
- break;
- else
- state ++; // Internal buffer analysis
- break;
- default:
- state = 0;
- break;
- }
+ static abe_int32 time_offset, state;
+ abe_data_format_t format;
+ abe_dma_t dma_sink;
+ abe_uint32 current_time;
+ abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, (abe_use_case_id)0};
+ // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ //-----------------------------Scenario 1-
+ switch (state)
+ {
+ case 0:
+ { state ++;
+
+ time_offset = abe_test_read_time();
+
+ abe_reset_hal ();
+ abe_load_fw ();
+ abe_short_ramps ();
+ abe_set_debug_trace (-1);
+ abe_read_hardware_configuration (UC2, &OPP, &CONFIG); /* check HW config and OPP config */
+
+ #if 0
+ { abe_equ_t dl2_eq;
+ const abe_int32 DL2_COEF [25] = { -7554223, 708210, -708206, 7554225, 0,0,0,0, 0,0,0,0, 0, 0,0,0,0,
+ 0,0,0,0, 0,6802833, -682266, 731554};
+ dl2_eq.equ_length = 25;
+ memcpy (dl2_eq.coef.type1, DL2_COEF, sizeof(DL2_COEF));
+
+ abe_write_equalizer (EQ2L, &dl2_eq);
+ abe_write_equalizer (EQ2R, &dl2_eq);
+ }
+ #endif
+
+ abe_set_opp_processing (OPP);
+ abe_write_event_generator (CONFIG.HAL_EVENT_SELECTION); /* "tick" of the audio engine */
+
+ abe_set_router_configuration (UPROUTE, UPROUTE_CONFIG_AMIC, (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
+ //abe_set_router_configuration (UPROUTE, UPROUTE_CONFIG_BT, (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_BT]);
+
+ //format.f = 8000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_cbpr_dmareq_port (VX_UL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
+ format.f = 8000; format.samp_format = MONO_RSHIFTED_16; abe_connect_serial_port (VX_UL_PORT, &format, MCBSP2_TX);
+ //format.f = 8000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_cbpr_dmareq_port (VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
+ format.f = 8000; format.samp_format = MONO_RSHIFTED_16; abe_connect_serial_port (VX_DL_PORT, &format, MCBSP2_RX);
+
+ format.f = 48000; format.samp_format = MONO_MSB; abe_connect_cbpr_dmareq_port (TONES_DL_PORT, &format, ABE_CBPR5_IDX, &dma_sink);
+ format.f = 48000; format.samp_format = SIX_MSB; abe_connect_cbpr_dmareq_port (MM_UL_PORT, &format, ABE_CBPR3_IDX, &dma_sink);
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
+ format.f = 24000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (VIB_DL_PORT, &format, ABE_CBPR6_IDX, &dma_sink);
+
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
+ //format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_serial_port (MM_DL_PORT, &format, MCBSP3_RX);
+
+ // SERIAL PORTS TEST
+ // abe_select_main_port (MM_DL_PORT);
+
+ format.f = 16000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_serial_port (BT_VX_UL_PORT, &format, MCBSP1_RX);
+ format.f = 16000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_serial_port (BT_VX_DL_PORT, &format, MCBSP1_TX);
+ //format.f = 48000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_serial_port (MM_EXT_IN_PORT, &format, MCBSP3_RX);
+ //format.f = 48000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_serial_port (MM_EXT_OUT_PORT, &format, MCBSP3_TX);
+ abe_enable_data_transfer (BT_VX_UL_PORT);
+ abe_enable_data_transfer (BT_VX_DL_PORT);
+ //abe_enable_data_transfer (MM_EXT_IN_PORT);
+ //abe_enable_data_transfer (MM_EXT_OUT_PORT);
+
+ abe_enable_data_transfer (MM_UL_PORT ); /* enable all DMIC aquisition */
+ abe_enable_data_transfer (MM_UL2_PORT ); /* enable large-band DMIC aquisition */
+ abe_enable_data_transfer (VX_UL_PORT );
+ abe_enable_data_transfer (TONES_DL_PORT);
+ abe_enable_data_transfer (VX_DL_PORT );
+ abe_enable_data_transfer (MM_DL_PORT ); /* enable all the data paths */
+ abe_enable_data_transfer (VIB_DL_PORT );
+ abe_enable_data_transfer (DMIC_PORT); /* DMIC ATC can be enabled even if the DMIC */
+ abe_enable_data_transfer (PDM_DL_PORT);
+ abe_enable_data_transfer (PDM_UL_PORT);
+
+ /* mixers' configuration = voice on earphone + music on hands-free path */
+ abe_write_mixer (MIXDL1, GAIN_M12dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
+ abe_write_mixer (MIXDL1, GAIN_M12dB, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, GAIN_M12dB, RAMP_0MS, MIX_DL1_INPUT_TONES);
+
+ abe_write_mixer (MIXDL2, GAIN_M12dB, RAMP_0MS, MIX_DL2_INPUT_TONES);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
+ abe_write_mixer (MIXDL2, GAIN_M12dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
+
+ //abe_enable_test_pattern (DBG_PATCH_MM_DL_MIXDL1, 1);
+ //abe_enable_test_pattern (DBG_PATCH_MM_DL_MIXDL2, 1);
+
+ }
+ break;
+ case 1:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 1000) break;
+ else
+ { state ++;
+
+
+
+ }
+ break;
+ case 2:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 1050) break;
+ else
+ { state ++;
+
+
+ }
+ break;
+
+ case 3:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 200000) break;
+ else
+ { state ++;
+ }
+
+ default: state = 0; break;
+ }
}
-/*
+
+/* ========================================================================== */
+/**
* @fn ABE_TEST_SCENARIO_2 ()
*
-* DMA AUDIO PLAYER + DMA VOICE CALL 8kHz
+* DMA AUDIO PLAYER + DMA VOICE CALL 8kHz
*/
+/* ========================================================================= */
void abe_test_scenario_2 (void)
{
- static abe_int32 time_offset, state;
- abe_data_format_t format;
- abe_dma_t dma_sink;
- abe_uint32 current_time;
- abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, (abe_use_case_id)0};
- abe_opp_t OPP;
- abe_hw_config_init_t CONFIG;
-
- /* Scenario 1- 16kHz first */
- switch (state)
- {
- case 0:
- state ++;
-
- time_offset = abe_test_read_time();
- abe_reset_hal();
- abe_load_fw();
-
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC2, &OPP, &CONFIG);
- abe_set_opp_processing(OPP); /* sets the OPP100 on FW05.xx */
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- abe_set_router_configuration(UPROUTE,
- UPROUTE_CONFIG_AMIC,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL_PORT, &format, ABE_CBPR3_IDX, &dma_sink);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- abe_enable_data_transfer(MM_UL_PORT); /* enable all DMIC aquisition */
- abe_enable_data_transfer(MM_UL2_PORT); /* enable large-band DMIC aquisition */
- abe_enable_data_transfer(VX_UL_PORT);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(TONES_DL_PORT, &format, ABE_CBPR5_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
- format.f = 24000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VIB_DL_PORT,&format, ABE_CBPR6_IDX, &dma_sink);
- abe_enable_data_transfer(TONES_DL_PORT);
- abe_enable_data_transfer(VX_DL_PORT);
- abe_enable_data_transfer(MM_DL_PORT); /* enable all the data paths */
- abe_enable_data_transfer(VIB_DL_PORT);
-
- abe_enable_data_transfer(DMIC_PORT); /* DMIC ATC can be enabled even if the DMIC */
- abe_enable_data_transfer(PDM_DL_PORT);
- abe_enable_data_transfer(PDM_UL_PORT);
-
- /* mixers' configuration = voice on earphone + music on hands-free path */
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_TONES);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
-
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_0MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, GAIN_0dB, RAMP_0MS, MIX_SDT_INPUT_DL1_MIXER);
-
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
-
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_TONES);
- abe_write_mixer(MIXAUDUL, GAIN_0dB, RAMP_0MS, MIX_AUDUL_INPUT_UPLINK);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_MM_DL);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_VX_DL);
-
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_0MS, MIX_VXREC_INPUT_TONES);
- abe_write_mixer(MIXVXREC, GAIN_M6dB, RAMP_0MS, MIX_VXREC_INPUT_VX_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_0MS, MIX_VXREC_INPUT_MM_DL);
- abe_write_mixer(MIXVXREC, GAIN_M6dB, RAMP_0MS, MIX_VXREC_INPUT_VX_UL);
- break;
- case 1:
- current_time = abe_test_read_time();
- if ((current_time - time_offset) < 100)
- break;
- else
- state ++;
- break;
- case 2:
- current_time = abe_test_read_time();
- if ((current_time - time_offset) < 100000)
- break;
- else
- state ++;
- break;
- default:
- state = 0;
- break;
- }
+ static abe_int32 time_offset, state;
+ abe_data_format_t format;
+ abe_dma_t dma_sink;
+ abe_uint32 current_time;
+ abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, (abe_use_case_id)0};
+ // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ //-----------------------------Scenario 1- 16kHz first
+ switch (state)
+ {
+ case 0:
+ { state ++;
+
+ time_offset = abe_test_read_time();
+ abe_reset_hal ();
+ abe_load_fw ();
+ abe_set_debug_trace (-1);
+ abe_short_ramps ();
+
+ abe_read_hardware_configuration (UC2, &OPP, &CONFIG); /* check HW config and OPP config */
+ abe_set_opp_processing (OPP); /* sets the OPP100 on FW05.xx */
+ abe_write_event_generator (CONFIG.HAL_EVENT_SELECTION); /* "tick" of the audio engine */
+
+ abe_set_router_configuration (UPROUTE, UPROUTE_CONFIG_AMIC, (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
+
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (MM_UL_PORT, &format, ABE_CBPR3_IDX, &dma_sink);
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
+ format.f = 8000; format.samp_format = MONO_MSB; abe_connect_cbpr_dmareq_port (VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
+ abe_enable_data_transfer (MM_UL_PORT ); /* enable all DMIC aquisition */
+ abe_enable_data_transfer (MM_UL2_PORT ); /* enable large-band DMIC aquisition */
+ abe_enable_data_transfer (VX_UL_PORT );
+
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (TONES_DL_PORT, &format, ABE_CBPR5_IDX, &dma_sink);
+ format.f = 8000; format.samp_format = MONO_MSB; abe_connect_cbpr_dmareq_port (VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
+ format.f = 24000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (VIB_DL_PORT, &format, ABE_CBPR6_IDX, &dma_sink);
+ abe_enable_data_transfer (TONES_DL_PORT);
+ abe_enable_data_transfer (VX_DL_PORT );
+ abe_enable_data_transfer (MM_DL_PORT ); /* enable all the data paths */
+ abe_enable_data_transfer (VIB_DL_PORT );
+
+ abe_enable_data_transfer (DMIC_PORT); /* DMIC ATC can be enabled even if the DMIC */
+ abe_enable_data_transfer (PDM_DL_PORT);
+ abe_enable_data_transfer (PDM_UL_PORT);
+
+
+ /* mixers' configuration = voice on earphone + music on hands-free path */
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_TONES);
+ abe_write_mixer (MIXDL1, GAIN_M6dB , RAMP_0MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
+
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_TONES);
+ abe_write_mixer (MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
+ abe_write_mixer (MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
+
+ }
+ break;
+ case 1:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 100) break;
+ else
+ { state ++;
+ // Gains switch
+ }
+ break;
+ case 2:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 100000) break;
+ else
+ { state ++;
+ // Internal buffer analysis
+ }
+ break;
+ default: state = 0; break;
+ }
}
+/* ========================================================================== */
/**
-* @fn ABE_TEST_SCENARIO_3 ()
+* @fn ABE_TEST_SCENARIO_3 ()
*
-* IRQ AUDIO PLAYER 44100Hz OPP 25%
+* IRQ AUDIO PLAYER 44100Hz OPP 25%
*/
+/* ========================================================================= */
void abe_test_scenario_3 (void)
{
- static abe_int32 time_offset, state, gain=0x040000, i;
- abe_data_format_t format;
- abe_uint32 data_sink;
- abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, (abe_use_case_id)0};
- // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
- abe_opp_t OPP;
- abe_hw_config_init_t CONFIG;
-
- /* Scenario 1- 16kHz first */
- switch (state) {
- case 0:
- state ++;
- time_offset = abe_test_read_time();
- abe_reset_hal();
- abe_load_fw();
-
- abe_read_hardware_configuration(UC2, &OPP, &CONFIG); /* check HW config and OPP config */
- abe_set_opp_processing(ABE_OPP25); /* sets the OPP25 on FW05.xx */
- abe_write_event_generator(EVENT_44100); /* "tick" of the audio engine */
-
- /* connect a Ping-Pong cache-flush protocol to MM_DL port */
-#define N_SAMPLES_BYTES (25 *8) /* half-buffer size in bytes, 32/32 data format */
- format.f = 44100;
- format.samp_format = STEREO_MSB;
- abe_add_subroutine(&abe_irq_pingpong_player_id,
- (abe_subroutine2) abe_default_irq_pingpong_player_32bits,
- SUB_0_PARAM, (abe_uint32*)0);
-
- abe_connect_irq_ping_pong_port(MM_DL_PORT, &format,
- abe_irq_pingpong_player_id, N_SAMPLES_BYTES,
- &data_sink, PING_PONG_WITH_MCU_IRQ);
-
- abe_enable_data_transfer(MM_DL_PORT); /* enable all the data paths */
- abe_enable_data_transfer(PDM_DL_PORT);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_serial_port(MM_EXT_OUT_PORT, &format, MCBSP2_TX);
- abe_enable_data_transfer(MM_EXT_OUT_PORT);
-
- /* mixers' configuration */
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_TONES);
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
- break;
- }
+ static abe_int32 time_offset, state, gain=0x040000, i;
+ abe_data_format_t format;
+ abe_uint32 data_sink;
+ abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ //-----------------------------Scenario 1- 16kHz first
+ switch (state)
+ {
+ case 0:
+ { state ++;
+
+ time_offset = abe_test_read_time();
+ abe_reset_hal ();
+ abe_load_fw ();
+ abe_short_ramps ();
+
+ abe_read_hardware_configuration (UC2, &OPP, &CONFIG); /* check HW config and OPP config */
+ abe_set_opp_processing (OPP);
+ //abe_set_opp_processing (ABE_OPP50);
+ abe_write_event_generator(EVENT_44100); /* "tick" of the audio engine */
+
+ /* connect a Ping-Pong cache-flush protocol to MM_DL port */
+ #define N_SAMPLES_BYTES (25 *8) /* half-buffer size in bytes, 32/32 data format */
+ format.f = 44100; format.samp_format = STEREO_MSB;
+ abe_add_subroutine (&abe_irq_pingpong_player_id, (abe_subroutine2) abe_default_irq_pingpong_player_32bits, SUB_0_PARAM, (abe_uint32*)0);
+
+// #define N_SAMPLES_BYTES (25 *4) /* half-buffer size in bytes, 16|16 data format */
+// format.f = 48000; format.samp_format = STEREO_16_16;
+// abe_add_subroutine (&abe_irq_pingpong_player_id, (abe_subroutine2) abe_default_irq_pingpong_player, SUB_0_PARAM, (abe_uint32*)0);
+
+ abe_connect_irq_ping_pong_port (MM_DL_PORT, &format, abe_irq_pingpong_player_id, N_SAMPLES_BYTES, &data_sink, PING_PONG_WITH_MCU_IRQ);
+
+ abe_enable_data_transfer (MM_DL_PORT ); /* enable all the data paths */
+ abe_enable_data_transfer (PDM_DL_PORT);
+
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_serial_port (MM_EXT_OUT_PORT, &format, MCBSP2_TX);
+ abe_enable_data_transfer (MM_EXT_OUT_PORT);
+
+ /* mixers' configuration */
+ abe_write_mixer (MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_TONES);
+ abe_write_mixer (MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
+
+ }
+ break;
+ }
}
+
+/* ========================================================================== */
/**
* @fn ABE_TEST_SCENARIO_4 ()
*
-* DMA AUDIO PLAYER + DMA VOICE CALL 8kHz OPP 50%
+* DMA AUDIO PLAYER + DMA VOICE CALL 8kHz OPP 25%
*/
+/* ========================================================================= */
void abe_test_scenario_4 (void)
{
- static abe_int32 time_offset, state;
- abe_data_format_t format;
- abe_dma_t dma_sink;
- abe_uint32 current_time;
- abe_use_case_id UC2[] = {
- ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE,
- ABE_RINGER_TONES,
- (abe_use_case_id)0
- };
- // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
- abe_opp_t OPP;
- abe_hw_config_init_t CONFIG;
-
- /* Scenario 1- 16kHz first */
- switch (state) {
- case 0:
- state ++;
- time_offset = abe_test_read_time();
-
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC2, &OPP, &CONFIG);
- /* sets the OPP100 on FW05.xx */
- abe_set_opp_processing(OPP);
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_AMIC,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL_PORT, &format, ABE_CBPR3_IDX, &dma_sink);
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- /* enable all DMIC aquisition */
- abe_enable_data_transfer(MM_UL_PORT);
- /* enable large-band DMIC aquisition */
- abe_enable_data_transfer(MM_UL2_PORT);
- abe_enable_data_transfer(VX_UL_PORT);
-
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(TONES_DL_PORT, &format, ABE_CBPR5_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
- format.f = 24000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VIB_DL_PORT, &format, ABE_CBPR6_IDX, &dma_sink);
- abe_enable_data_transfer(TONES_DL_PORT);
- abe_enable_data_transfer(VX_DL_PORT);
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT);
- abe_enable_data_transfer(VIB_DL_PORT);
-
- /* DMIC ATC can be enabled even if the DMIC */
- abe_enable_data_transfer(DMIC_PORT);
- abe_enable_data_transfer(PDM_DL_PORT);
- abe_enable_data_transfer(PDM_UL_PORT);
-
- /* mixers' configuration = voice on earphone + music on hands-free path */
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_TONES);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
-
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_0MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, GAIN_0dB, RAMP_0MS, MIX_SDT_INPUT_DL1_MIXER);
-
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
-
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_TONES);
- abe_write_mixer(MIXAUDUL, GAIN_0dB, RAMP_0MS, MIX_AUDUL_INPUT_UPLINK);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_MM_DL);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_0MS, MIX_AUDUL_INPUT_VX_DL);
-
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_0MS, MIX_VXREC_INPUT_TONES);
- abe_write_mixer(MIXVXREC, GAIN_M6dB, RAMP_0MS, MIX_VXREC_INPUT_VX_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_0MS, MIX_VXREC_INPUT_MM_DL);
- abe_write_mixer(MIXVXREC, GAIN_M6dB, RAMP_0MS, MIX_VXREC_INPUT_VX_UL);
-
- abe_write_gain(GAINS_DMIC1, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC1, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DMIC2, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC2, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DMIC3, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC3, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_AMIC, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_AMIC, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
-
- abe_write_gain(GAINS_SPLIT , GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_SPLIT, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- //abe_write_gain(GAINS_EANC , GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- //abe_write_gain(GAINS_EANC, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DL1, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DL1, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DL2, GAIN_0dB, RAMP_0MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DL2, GAIN_0dB, RAMP_0MS, GAIN_RIGHT_OFFSET);
- break;
- case 1:
- current_time = abe_test_read_time();
- if ((current_time - time_offset) < 100)
- break;
- else
- state ++; /* Gains switch */
- break;
- case 2:
- current_time = abe_test_read_time();
- if ((current_time - time_offset) < 100000)
- break;
- else
- state ++; /* Internal buffer analysis */
- break;
- default:
- state = 0;
- break;
- }
+ abe_set_debug_trace (-1);
+ abe_short_ramps ();
+
}
-#if 0
-
- /*
- * build the default uplink router configurations
- */
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_AMIC,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
-#if 0
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC1,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC1]);
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC2,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC2]);
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC3,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC3]);
-#endif
- /* meaningful other microphone configuration can be added here */
- /* init hardware components */
- abe_hw_configuration();
-
- /* enable the VX_UL path with Analog microphones from Phoenix */
- /* MM_DL INIT
- connect a DMA channel to MM_DL port (ATC FIFO) */
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
-
- /* VX_DL INIT
- connect a DMA channel to VX_DL port (ATC FIFO) */
- format.f = 16000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
-
- /* VX_UL INIT
- connect a DMA channel to VX_UL port (ATC FIFO) */
- format.f = 16000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
-
- /* MM_UL2 INIT
- connect a DMA channel to MM_UL2 port (ATC FIFO) */
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
-
- /* MM_UL INIT
- connect a DMA channel to MM_UL port (ATC FIFO) */
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL_PORT, &format, ABE_CBPR3_IDX, &dma_sink);
-
- /* TONES INIT
- connect a DMA channel to TONES port (ATC FIFO) */
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(TONES_DL_PORT, &format, ABE_CBPR5_IDX, &dma_sink);
-
- /* VIBRA/HAPTICS INIT
- connect a DMA channel to VIBRA/HAPTICS port (ATC FIFO) */
- format.f = 24000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VIB_DL_PORT, &format, ABE_CBPR6_IDX, &dma_sink);
-
- /* mixers' default configuration = voice on earphone + music on hands-free path */
- case 2:
- /* Scenario 2- 8kHz first */
- switch (time10us) {
- case 1:
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC2, &OPP, &CONFIG);
- /* sets the OPP100 on FW05.xx */
- abe_set_opp_processing(OPP);
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
- // enables VOICECALL-MMDL-MMUL-8/16kHz-ROUTING
- abe_reset_hal();
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
-
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_1MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_50MS, MIX_DL2_INPUT_MM_DL);
-
- /* enable large-band DMIC aquisition */
- abe_enable_data_transfer(MM_UL2_PORT);
- /* enable all DMIC aquisition */
- abe_enable_data_transfer(MM_UL_PORT);
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT);
- abe_enable_data_transfer(VX_DL_PORT);
- abe_enable_data_transfer(VX_UL_PORT);
- abe_enable_data_transfer(PDM_UL_PORT);
- /* DMIC ATC can be enabled even if the DMIC */
- abe_enable_data_transfer(DMIC_PORT);
- abe_enable_data_transfer(PDM_DL_PORT);
- abe_enable_data_transfer(TONES_DL_PORT);
- break;
- case 100:
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_TONES);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_1MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_2MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, GAIN_M6dB, RAMP_5MS, MIX_DL1_INPUT_MM_UL2);
- break;
- case 1200:
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC1,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC1]);
- break;
- case 8000: // end
- fcloseall();
- exit(-2);
- }
- /* case scenario_id ==2 */
- break;
- case 3:
- /* Scenario 3 PING-PONG DMAreq */
- switch (time10us) {
- case 1:
- /* Ping-Pong access through MM_DL using Left/Right 16bits/16bits data format */
- /* To be added here : Device driver initialization following
- abe_read_hardware_configuration() returned data
- McPDM_DL : 6 slots activated (5 + Commands)
- DMIC : 6 microphones activated
- McPDM_UL : 2 microphones activated (No status)
- */
- abe_read_hardware_configuration(UC5, &OPP, &CONFIG);
- abe_set_opp_processing(OPP);
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- /* MM_DL INIT (overwrite the previous default initialization made above */
- format.f = 48000;
- format.samp_format = MONO_MSB;
-
- /* connect a Ping-Pong SDMA protocol to MM_DL port with Ping-Pong 12 mono
- * samples (12x4 bytes for each ping & pong size)*/
- abe_connect_dmareq_ping_pong_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, (12 * 4), &dma_sink);
-
- /* mixers' configuration = voice on earphone + music on hands-free path */
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_2MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_50MS, MIX_DL2_INPUT_MM_DL);
-
- /* Here : connect the sDMA to "dma_sink" content */
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT);
- abe_enable_data_transfer(PDM_DL_PORT);
- break;
- case 8000: // end
- fcloseall();
- exit(-3);
+/* ========================================================================== */
+/**
+* @fn ABE_TEST_SCENARIO_5 ()
+*
+* ASRC TESTS
+*/
+/* ========================================================================= */
+void abe_test_scenario_5 (void)
+{
+ static abe_int32 time_offset, state;
+ abe_data_format_t format;
+ abe_dma_t dma_sink;
+ abe_uint32 current_time;
+ abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, (abe_use_case_id)0};
+ // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ //-----------------------------Scenario 1- 16kHz first
+ switch (state)
+ {
+ case 0:
+ { state ++;
+ abe_reset_hal ();
+ abe_load_fw ();
+ abe_set_debug_trace (-1);
+ abe_short_ramps ();
+
+ time_offset = abe_test_read_time();
+
+ abe_read_hardware_configuration (UC2, &OPP, &CONFIG); /* check HW config and OPP config */
+ abe_set_opp_processing (OPP); /* sets the OPP100 on FW05.xx */
+ abe_write_event_generator (CONFIG.HAL_EVENT_SELECTION); /* "tick" of the audio engine */
+
+ abe_set_router_configuration (UPROUTE, UPROUTE_CONFIG_AMIC, (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
+
+ format.f = 8000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_serial_port (VX_UL_PORT, &format, MCBSP2_TX);
+ format.f = 8000; format.samp_format = STEREO_RSHIFTED_16; abe_connect_serial_port (VX_DL_PORT, &format, MCBSP2_RX);
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_serial_port (MM_DL_PORT, &format, MCBSP3_RX);
+
+ abe_enable_data_transfer (VX_UL_PORT );
+ abe_enable_data_transfer (VX_DL_PORT );
+ abe_enable_data_transfer (MM_DL_PORT ); /* enable all the data paths */
+
+ // SERIAL PORTS TEST
+ // abe_select_main_port (MM_DL_PORT);
+
+ abe_enable_data_transfer (PDM_DL_PORT);
+ abe_enable_data_transfer (PDM_UL_PORT);
+
+ /* mixers' configuration = voice on earphone + music on hands-free path */
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
+ abe_write_mixer (MIXDL1, GAIN_M6dB, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_TONES);
+
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_TONES);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
+ abe_write_mixer (MIXDL2, GAIN_M6dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
+ }
+ break;
+ case 1:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 34) break;
+ else
+ {
+ state ++;
+ // Init ASRC(s)
+ abe_init_asrc_vx_dl (0);
+ abe_init_asrc_vx_ul (0);
+ abe_init_asrc_mm_dl (0);
+ // abe_init_asrc_mm_dl (1250);
}
- /* case scenario_id ==3 */
- break;
- case 40:
- /* Scenario 4.0 PING_PONG+ IRQ TO MCU */
- switch (time10us) {
- case 1:
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC5, &OPP, &CONFIG);
- /* sets the OPP100 on FW05.xx */
- abe_set_opp_processing(OPP);
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- /* MM_DL INIT (overwrite the previous default initialization made above */
- format.f = 48000;
- format.samp_format = STEREO_16_16;
-
- /* connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate */
- abe_add_subroutine(&abe_irq_pingpong_player_id,
- (abe_subroutine2) abe_default_irq_pingpong_player, SUB_0_PARAM, (abe_uint32*)0);
-
- #define N_SAMPLES_BYTES (24 *4) // @@@@ to be tuned
- abe_connect_irq_ping_pong_port(MM_DL_PORT, &format,
- abe_irq_pingpong_player_id, N_SAMPLES_BYTES, &data_sink, PING_PONG_WITH_MCU_IRQ);
-
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_TONES);
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, GAIN_0dB, RAMP_0MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_0MS, MIX_SDT_INPUT_DL1_MIXER);
-
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT);
- abe_enable_data_transfer(PDM_DL_PORT);
- break;
- case 1200:
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC1,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC1]);
- break;
- case 2400: // end
- fcloseall();
- exit(-4);
+ break;
+ case 2:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 10000) break;
+ else
+ {
+ state ++;
+ // abe_write_asrc (VX_UL_PORT, -1250);
+ // abe_write_asrc (VX_DL_PORT, -1250);
+ // abe_write_asrc (MM_DL_PORT, -1250);
}
- /* case scenario_id ==4 */
- break;
- case 41:
- /* Scenario 4.1 PING_PONG+ IRQ TO MCU 32BITS */
- switch (time10us) {
- case 1:
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC5, &OPP, &CONFIG);
- /* sets the OPP100 on FW05.xx */
- abe_set_opp_processing(OPP);
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- /* MM_DL INIT(overwrite the previous default initialization made above */
- format.f = 48000;
- format.samp_format = STEREO_MSB;
-
- /* connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate */
- abe_add_subroutine(&abe_irq_pingpong_player_id,
- (abe_subroutine2) abe_default_irq_pingpong_player_32bits, SUB_0_PARAM, (abe_uint32*)0);
-
- #define N_SAMPLES_BYTES (24 * 4) // @@@@ to be tuned
- abe_connect_irq_ping_pong_port(MM_DL_PORT, &format,
- abe_irq_pingpong_player_id, N_SAMPLES_BYTES, &data_sink, PING_PONG_WITH_MCU_IRQ);
-
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_TONES);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_0MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_0MS, MIX_DL1_INPUT_MM_UL2);
-
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_0MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_0MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, GAIN_0dB, RAMP_0MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_0MS, MIX_SDT_INPUT_DL1_MIXER);
-
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT );
- abe_enable_data_transfer(PDM_DL_PORT);
-
- break;
- case 1200:
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC1,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC1]);
- break;
-
- case 2400: // end
- fcloseall();
- exit(-4);
+ break;
+ case 3:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 100000) break;
+ else
+ { state ++;
+ // abe_set_asrc_drift_control (VX_UL_PORT, FORCED_DRIFT_CONTROL);
+ abe_write_asrc (VX_UL_PORT, -100);
+ // abe_set_asrc_drift_control (VX_DL_PORT, FORCED_DRIFT_CONTROL);
+ abe_write_asrc (VX_DL_PORT, -200);
+ // abe_set_asrc_drift_control (MM_DL_PORT, FORCED_DRIFT_CONTROL);
+ abe_write_asrc (MM_DL_PORT, -300);
+
+ }
+ break;
+ default: state = 0; break;
+ }
+}
+
+
+/* ========================================================================== */
+/**
+* @fn ABE_TEST_SCENARIO_6 ()
+*
+* APS TESTS
+*/
+/* ========================================================================= */
+void abe_test_scenario_6 (void)
+{
+ static abe_int32 time_offset, state;
+ abe_data_format_t format;
+ abe_uint32 data_sink;
+ abe_uint32 current_time;
+ abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, ABE_RINGER_TONES, (abe_use_case_id)0};
+ // abe_use_case_id UC5[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ //-----------------------------Scenario 1- 16kHz first
+ switch (state)
+ {
+ case 0:
+
+ { state ++;
+ abe_reset_hal ();
+ abe_load_fw ();
+ abe_set_debug_trace (-1);
+ abe_short_ramps ();
+
+ time_offset = abe_test_read_time();
+
+ abe_read_hardware_configuration (UC2, &OPP, &CONFIG); /* check HW config and OPP config */
+ abe_set_opp_processing (OPP); /* sets the OPP100 on FW05.xx */
+ abe_write_event_generator (CONFIG.HAL_EVENT_SELECTION); /* "tick" of the audio engine */
+
+ /* connect a Ping-Pong cache-flush protocol to MM_DL port */
+ #define N_SAMPLES_BYTES (25 *8) /* half-buffer size in bytes, 32/32 data format */
+ format.f = 44100; format.samp_format = STEREO_MSB;
+ abe_add_subroutine (&abe_irq_pingpong_player_id, (abe_subroutine2) abe_default_irq_pingpong_player_32bits, SUB_0_PARAM, (abe_uint32*)0);
+
+// #define N_SAMPLES_BYTES (25 *4) /* half-buffer size in bytes, 16|16 data format */
+// format.f = 48000; format.samp_format = STEREO_16_16;
+// abe_add_subroutine (&abe_irq_pingpong_player_id, (abe_subroutine2) abe_default_irq_pingpong_player, SUB_0_PARAM, (abe_uint32*)0);
+
+ abe_connect_irq_ping_pong_port (MM_DL_PORT, &format, abe_irq_pingpong_player_id, N_SAMPLES_BYTES, &data_sink, PING_PONG_WITH_MCU_IRQ);
+
+ /* mixers' configuration = voice on earphone + music on hands-free path */
+ abe_write_mixer (MIXDL1, GAIN_0dB, RAMP_2MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, GAIN_0dB, RAMP_50MS, MIX_DL2_INPUT_MM_DL);
+
+ abe_enable_data_transfer (MM_DL_PORT ); /* enable all the data paths */
+ abe_enable_data_transfer (PDM_DL_PORT);
+
+ /* connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate */
+ abe_add_subroutine (&abe_irq_aps_adaptation_id, (abe_subroutine2) abe_default_irq_aps_adaptation, SUB_0_PARAM, (abe_uint32*)0);
+ }
+ break;
+
+ case 1:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 100000) break;
+ else
+ { state ++;
+ }
+ break;
+ default: state = 0; break;
+ }
+}
+
+/* ========================================================================== */
+/**
+* @fn ABE_TEST_SCENARIO_7 ()
+*
+* GAIN RAMP TESTS
+*/
+/* ========================================================================= */
+void abe_test_scenario_7 (void)
+{
+ static abe_int32 time_offset, state, current_time;
+ abe_data_format_t format;
+ abe_dma_t dma_sink;
+ abe_use_case_id UC2[] = {ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE, (abe_use_case_id)0};
+ abe_opp_t OPP;
+ abe_hw_config_init_t CONFIG;
+
+ switch (state)
+ {
+ case 0:
+ { state ++;
+ abe_reset_hal ();
+ abe_load_fw ();
+ abe_set_debug_trace (-1);
+
+ time_offset = abe_test_read_time();
+
+ abe_read_hardware_configuration (UC2, &OPP, &CONFIG); /* check HW config and OPP config */
+ abe_set_opp_processing (OPP);
+ abe_write_event_generator (CONFIG.HAL_EVENT_SELECTION); /* "tick" of the audio engine */
+
+ format.f = 48000; format.samp_format = STEREO_MSB; abe_connect_cbpr_dmareq_port (MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
+ abe_enable_data_transfer (MM_DL_PORT ); /* enable all the data paths */
+ abe_enable_data_transfer (PDM_DL_PORT);
+
+ /* mixers' configuration = voice on earphone + music on hands-free path */
+ abe_write_mixer (MIXDL1, GAIN_0dB, RAMP_5MS, MIX_DL1_INPUT_MM_DL);
+ }
+ break;
+ case 1:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 10000) break;
+ else
+ {
+ state ++;
+ abe_write_mixer (MIXDL1, GAIN_MUTE, RAMP_5MS, MIX_DL1_INPUT_MM_DL);
}
- /* case scenario_id ==4 */
- break;
-
- case 5:
- /* Scenario 5 CHECK APS ADAPTATION ALGO */
- switch (time10us) {
- case 1:
- /* check HW config and OPP config */
- abe_read_hardware_configuration(UC5, &OPP, &CONFIG);
- /* sets the OPP100 on FW05.xx */
- abe_set_opp_processing(OPP);
- /* "tick" of the audio engine */
- abe_write_event_generator(CONFIG.HAL_EVENT_SELECTION);
-
- /* MM_DL INIT(overwrite the previous default initialization made above */
- format.f = 48000;
- format.samp_format = STEREO_16_16;
-
- /* connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate */
- abe_add_subroutine(&abe_irq_pingpong_player_id,
- (abe_subroutine2) abe_default_irq_pingpong_player, SUB_0_PARAM, (abe_uint32*)0);
-
- #define N_SAMPLES_BYTES (24 *4) // @@@@ to be tuned
- abe_connect_irq_ping_pong_port(MM_DL_PORT,
- &format, abe_irq_pingpong_player_id, N_SAMPLES_BYTES,
- &data_sink, PING_PONG_WITH_MCU_IRQ);
-
- /* mixers' configuration = voice on earphone + music on hands-free path */
- abe_write_mixer(MIXDL1, GAIN_0dB, RAMP_2MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, GAIN_0dB, RAMP_50MS, MIX_DL2_INPUT_MM_DL);
-
- /* enable all the data paths */
- abe_enable_data_transfer(MM_DL_PORT);
- abe_enable_data_transfer(PDM_DL_PORT);
-
- /* connect a Ping-Pong cache-flush protocol to MM_DL port with 50Hz (20ms) rate */
- abe_add_subroutine(&abe_irq_aps_adaptation_id,
- (abe_subroutine2) abe_default_irq_aps_adaptation, SUB_0_PARAM, (abe_uint32*)0);
- break;
- } /* case scenario_id ==5 */
-
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_AMIC,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_AMIC]);
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC1,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC1]);
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC2,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC2]);
- abe_set_router_configuration(UPROUTE, UPROUTE_CONFIG_DMIC3,
- (abe_router_t *) abe_router_ul_table_preset[UPROUTE_CONFIG_DMIC3]);
- case UC31_VOICE_CALL_8KMONO:
- abe_disable_data_transfer(VX_DL_PORT);
- abe_disable_data_transfer(VX_UL_PORT);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- abe_enable_data_transfer(VX_DL_PORT);
- abe_enable_data_transfer(VX_UL_PORT);
- case UC32_VOICE_CALL_8KSTEREO:
- format.f = 8000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 8000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- case UC33_VOICE_CALL_16KMONO:
- format.f = 16000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 16000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- case UC34_VOICE_CALL_16KSTEREO:
- format.f = 16000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VX_DL_PORT, &format, ABE_CBPR1_IDX, &dma_sink);
- format.f = 16000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(VX_UL_PORT, &format, ABE_CBPR2_IDX, &dma_sink);
- case UC35_MMDL_MONO:
- format.f = 48000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
- case UC36_MMDL_STEREO:
- format.f = 48000;
- format.samp_format = STEREO_MSB;
- abe_connect_cbpr_dmareq_port(MM_DL_PORT, &format, ABE_CBPR0_IDX, &dma_sink);
- case UC37_MMUL2_MONO:
- format.f = 48000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
- case UC38_MMUL2_STEREO:
- format.f = 48000;
- format.samp_format = MONO_MSB;
- abe_connect_cbpr_dmareq_port(MM_UL2_PORT, &format, ABE_CBPR4_IDX, &dma_sink);
- case UC91_ASRC_DRIFT1:
- abe_set_asrc_drift_control(VX_UL_PORT, FORCED_DRIFT_CONTROL);
- abe_write_asrc(VX_UL_PORT, 100);
- abe_set_asrc_drift_control(VX_DL_PORT, FORCED_DRIFT_CONTROL);
- abe_write_asrc(VX_DL_PORT, 200);
- abe_set_asrc_drift_control(MM_DL_PORT, FORCED_DRIFT_CONTROL);
- abe_write_asrc(MM_DL_PORT, 300);
- case UC92_ASRC_DRIFT2:
- abe_set_asrc_drift_control(VX_UL_PORT, FORCED_DRIFT_CONTROL);
- abe_write_asrc(VX_UL_PORT, -100);
- abe_set_asrc_drift_control(VX_DL_PORT, FORCED_DRIFT_CONTROL);
- abe_write_asrc(VX_DL_PORT, -200);
- abe_set_asrc_drift_control(MM_DL_PORT, FORCED_DRIFT_CONTROL);
- abe_write_asrc(MM_DL_PORT, -300);
-#endif
+ break;
+ case 2:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 20000) break;
+ else
+ {
+ state ++;
+ abe_write_mixer (MIXDL1, GAIN_0dB, RAMP_10MS, MIX_DL1_INPUT_MM_DL);
+ }
+ break;
+ case 3:
+ current_time = abe_test_read_time();
+ if ((current_time - time_offset) < 30000) break;
+ else state ++;
+ break;
+ default: state = 0; break;
+ }
+}
+
diff --git a/sound/soc/omap/abe/abe_test.h b/sound/soc/omap/abe/abe_test.h
index b84ee3dafcde..0cc954841fdc 100644
--- a/sound/soc/omap/abe/abe_test.h
+++ b/sound/soc/omap/abe/abe_test.h
@@ -1,28 +1,47 @@
-/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+/* =============================================================================
+* Texas Instruments OMAP(TM) Platform Software
+* (c) Copyright 2009 Texas Instruments Incorporated. All Rights Reserved.
+*
+* Use of this software is controlled by the terms and conditions found
+* in the license agreement under which this software has been supplied.
+* =========================================================================== */
+/**
+ * @file ABE_TEST.H
+ *
+ * Variable references
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * @path
+ * @rev 01.00
*/
+/* ----------------------------------------------------------------------------
+*!
+*! Revision History
+*! ===================================
+*! 27-August-2009 Original (LLF)
+* =========================================================================== */
-#ifndef _ABE_TEST_H_
-#define _ABE_TEST_H_
+
+#ifndef abe_test_def
+#define abe_test_def
/*
- * HAL test API
- */
-void abe_auto_check_data_format_translation(void);
-void abe_check_opp(void);
-void abe_check_dma(void);
-void abe_debug_and_non_regression(void);
-void abe_check_mixers_gain_update(void);
-void abe_test_scenario(abe_int32 scenario_id);
-
+ * ============ HAL test API =============================================================================
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+void abe_auto_check_data_format_translation (void);
+void abe_check_opp (void);
+void abe_check_dma (void);
+void abe_debug_and_non_regression (void);
+void abe_check_mixers_gain_update (void);
+void abe_test_scenario (abe_int32 scenario_id);
+#ifdef __cplusplus
+}
+#endif
/*
- * HAL test DATA
- */
+ * ============ HAL test DATA =============================================================================
+ */
+
-#endif /* _ABE_TEST_H_ */
+#endif /* REFDEF */
diff --git a/sound/soc/omap/abe/abe_typ.h b/sound/soc/omap/abe/abe_typ.h
index 34368261ae9e..76de2c370675 100644
--- a/sound/soc/omap/abe/abe_typ.h
+++ b/sound/soc/omap/abe/abe_typ.h
@@ -1,82 +1,78 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_def.h"
-#include "abe_ext.h"
#include "abe_initxxx_labels.h"
-#ifndef _ABE_TYP_H_
-#define _ABE_TYP_H_
+#ifndef ABETYP
+#define ABETYP
-#ifdef __cplusplus
-extern "C" {
-#endif
/*
* BASIC TYPES
*/
-
#define MAX_UINT8 ((((1L << 7) -1)<<1) +1)
#define MAX_UINT16 ((((1L << 15) -1)<<1) +1)
#define MAX_UINT32 ((((1L << 31) -1)<<1) +1)
-typedef char abe_flag;
-typedef unsigned char abe_uint8;
-typedef char abe_int8;
-typedef unsigned short abe_uint16;
-typedef short abe_int16;
-typedef unsigned long abe_uint32;
-typedef long abe_int32;
-typedef float abe_float;
-typedef double abe_double;
-
-typedef abe_uint32 abe_errc_t;
-typedef abe_int32 abe_millibel;
+#define s8 char
+#define u8 unsigned char
+#define s16 short
+#define u16 unsigned short
+#define s32 int
+#define u32 unsigned int
-//typedef abe_uint32 abe_millisecond;
-//typedef abe_uint32 abe_milliHertz;
-//typedef abe_uint32 abe_millimeter;
-//typedef abe_uint32 abe_millidegree;
-//typedef abe_uint32 abe_permille;
-//typedef abe_uint32 abe_microsecond;
+/* returned status from HAL APIs */
+#define abehal_status u32
-typedef abe_uint32 abe_result;
-typedef abe_millibel abe_gain_t; /* smoothed gain amplitude and ramp */
-typedef abe_uint32 abe_ramp_t;
+/* 4 bytes Bit field indicating the type of informations to be traced */
+typedef u32 abe_dbg_mask_t;
-typedef abe_uint32 abe_freq_t; /* 4 bytes hertz */
-typedef abe_uint32 abe_millis_t; /* 4 bytes milliseconds */
-typedef abe_uint32 abe_micros_t; /* 4 bytes microseconds */
+/* scheduling task loops (250us / 272us with respectively 48kHz /
+ 44.1kHz on Phoenix). */
+typedef u32 abe_dbg_t;
-typedef abe_uint32 abe_dbg_mask_t; /* 4 bytes bit field indicating the type of informations to be traced */
-typedef abe_uint32 abe_time_stamp_t; /* 4 bytes infinite loop 32bits counter incremented on each firmware loop */
+/* Index to the table of sequences */
+typedef u32 abe_seq_code_t;
-/* scheduling task loops (250us / 272us with respectively 48kHz / 44.1kHz on Phoenix). */
-typedef abe_uint32 abe_dbg_t; /* debug filter */
+/* Index to the table of subroutines called in the sequence */
+typedef u32 abe_sub_code_t;
-typedef abe_uint32 abe_seq_code_t; /* Index to the table of sequences */
-typedef abe_uint32 abe_sub_code_t; /* Index to the table of subroutines called in the sequence */
+/* subroutine with no parameter */
+typedef void (* abe_subroutine0) (void);
-typedef void (* abe_subroutine0)(void); /* subroutine with no parameter */
-typedef void (* abe_subroutine1)(abe_uint32); /* subroutine with one parameter */
-typedef void (* abe_subroutine2)(abe_uint32, abe_uint32); /* subroutine with two parameters */
-typedef void (* abe_subroutine3)(abe_uint32, abe_uint32, abe_uint32); /* subroutine with three parameters */
-typedef void (* abe_subroutine4)(abe_uint32, abe_uint32, abe_uint32, abe_uint32); /* subroutine with four parameters */
+/* subroutine with one parameter */
+typedef void (* abe_subroutine1) (u32);
+typedef void (* abe_subroutine2) (u32, u32);
+typedef void (* abe_subroutine3) (u32, u32, u32);
+typedef void (* abe_subroutine4) (u32, u32, u32, u32);
/*
* CODE PORTABILITY - FUTURE PATCHES
*
- * 32bits field for having the code compatible with future revisions of the hardware (audio integration)
- * or evolution of the software partitionning. Used for the highest level APIs (launch_sequences)
+ * 32bits field for having the code compatible with future revisions of
+ * the hardware (audio integration) or evolution of the software
+ * partitionning. Used for the highest level APIs (launch_sequences)
*/
-typedef abe_uint32 abe_patch_rev;
+typedef u32 abe_patch_rev;
/*
* ENUMS
@@ -85,129 +81,113 @@ typedef abe_uint32 abe_patch_rev;
/*
* MEMORY CONFIG TYPE
*
- * 0: Ultra Lowest power consumption audio player
- * 1: OPP 25% (simple multimedia features)
- * 2: OPP 50% (multimedia and voice calls)
- * 3: OPP100% (EANC, multimedia complex use-cases)
- */
-typedef enum {
- ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE = 1,
- ABE_DRIFT_MANAGEMENT_FOR_AUDIO_PLAYER,
- ABE_DRIFT_MANAGEMENT_FOR_VOICE_CALL,
- ABE_VOICE_CALL_ON_HEADSET_OR_EARPHONE_OR_BT,
- ABE_MULTIMEDIA_AUDIO_RECORDER,
- ABE_VIBRATOR_OR_HAPTICS,
- ABE_VOICE_CALL_ON_HANDS_FREE_SPEAKER,
- ABE_RINGER_TONES,
- ABE_VOICE_CALL_WITH_EARPHONE_ACTIVE_NOISE_CANCELLER,
-
- ABE_LAST_USE_CASE
-} abe_use_case_id;
-
-/*
- * OPP TYPE
- *
- * 0: Ultra Lowest power consumption audio player
- * 1: OPP 25% (simple multimedia features)
- * 2: OPP 50% (multimedia and voice calls)
- * 3: OPP100% (EANC, multimedia complex use-cases)
+ * 0: Ultra Lowest power consumption audio player
+ * 1: OPP 25% (simple multimedia features)
+ * 2: OPP 50% (multimedia and voice calls)
+ * 3: OPP100% (multimedia complex use-cases)
*/
-typedef enum {
- ABE_OPP0 = 0,
- ABE_OPP25, ABE_OPP50, ABE_OPP100
-} abe_opp_t;
+
+#define ABE_AUDIO_PLAYER_ON_HEADSET_OR_EARPHONE 1
+#define ABE_DRIFT_MANAGEMENT_FOR_AUDIO_PLAYER 2
+#define ABE_DRIFT_MANAGEMENT_FOR_VOICE_CALL 3
+#define ABE_VOICE_CALL_ON_HEADSET_OR_EARPHONE_OR_BT 4
+#define ABE_MULTIMEDIA_AUDIO_RECORDER 5
+#define ABE_VIBRATOR_OR_HAPTICS 6
+#define ABE_VOICE_CALL_ON_HANDS_FREE_SPEAKER 7
+#define ABE_RINGER_TONES 8
+#define ABE_VOICE_CALL_WITH_EARPHONE_ACTIVE_NOISE_CANCELLER 9
+#define ABE_LAST_USE_CASE 10
+
/*
- * IIR TYPE
+ * OPP TYPE
*
- * 0: Ultra Lowest power consumption audio player
- * 1: OPP 25% (simple multimedia features)
+ * 0: Ultra Lowest power consumption audio player
+ * 1: OPP 25% (simple multimedia features)
+ * 2: OPP 50% (multimedia and voice calls)
+ * 3: OPP100% (multimedia complex use-cases)
*/
-typedef enum {
- ABE_IIR_TYPE_1 = 0,
- ABE_IIR_TYPE_2
-} abe_iir_t;
+#define ABE_OPP0 0
+#define ABE_OPP25 1
+#define ABE_OPP50 2
+#define ABE_OPP100 3
/*
* DMIC DECIMATION RATIO
*
*/
-typedef enum {
- ABE_DEC16 = 16,
- ABE_DEC25 = 25,
- ABE_DEC32 = 32,
- ABE_DEC40 = 40
-} abe_dmic_ratio_t;
+#define ABE_DEC16 16
+#define ABE_DEC25 25
+#define ABE_DEC32 32
+#define ABE_DEC40 40
+
/*
* SAMPLES TYPE
*
- * mono 16bits sample LSB aligned, 16 MSB bits are unused
- * mono right shifted to 16bits LSBs on a 32bits DMEM FIFO for McBSP TX purpose.
- * mono sample MSB aligned (16/24/32bits)
+ * mono 16bits sample LSB aligned, 16 MSB bits are unused
+ * mono right shifted to 16bits LSBs on a 32bits DMEM FIFO for McBSP
+ * TX purpose.
+ * mono sample MSB aligned (16/24/32bits)
* two successive mono samples in one 32bits container
- * Two L/R 16bits samples in a 32bits container,
- * Two channels defined with two MSB aligned samples
- * Three channels defined with three MSB aligned samples (MIC)
- * Four channels defined with four MSB aligned samples (MIC)
- * . . .
- * Eight channels defined with six MSB aligned samples (MIC)
- */
-typedef enum {
- MONO_MSB = 1,
- MONO_RSHIFTED_16, STEREO_RSHIFTED_16, /* only used for McBSP_TX */
- STEREO_16_16,
- STEREO_MSB, THREE_MSB, FOUR_MSB, FIVE_MSB, SIX_MSB, SEVEN_MSB, EIGHT_MSB, NINE_MSB, TEN_MSB,
-} abe_samp_t;
-
-/*
- * PORT PROTOCOL TYPE
- */
-typedef enum {
- SLIMBUS_PORT_PROT = 1,
- SERIAL_PORT_PROT,
- TDM_SERIAL_PORT_PROT,
- DMIC_PORT_PROT,
- MCPDMDL_PORT_PROT,
- MCPDMUL_PORT_PROT,
- PINGPONG_PORT_PROT,
- DMAREQ_PORT_PROT,
-} abe_port_protocol_switch_id;
-
-/*
- * PORT IDs, this list is aligned with the FW data mapping
- */
-typedef enum {
- DMIC_PORT = 0,
- PDM_UL_PORT, /* analog MICs */
- BT_VX_UL_PORT, /* BT uplink (8/16 kHz)*/
-
- /* AE source ports - Uplink */
- MM_UL_PORT, /* up to 5 stereo channels */
- MM_UL2_PORT, /* stereo FM record path (4) */
- VX_UL_PORT, /* stereo FM record path */
-
- /* AE sink ports - Downlink */
- MM_DL_PORT, /* multimedia player audio path */
- VX_DL_PORT,
- TONES_DL_PORT, /* 8 */
- VIB_DL_PORT,
-
- /* AE source ports - Downlink */
- BT_VX_DL_PORT,
- PDM_DL_PORT, /* ABE --> BT (8/16kHz) */
- MM_EXT_OUT_PORT, /* 12 */
- MM_EXT_IN_PORT,
- TDM_DL_PORT,
- TDM_UL_PORT,
- DEBUG_PORT, /* 16 */
-
- LAST_PORT_ID /* dummy port used to declare the other tasks of the scheduler */
-} abe_port_id;
-
-/*
- * Definition for the compatibility with HAL05xx
- */
+ * Two L/R 16bits samples in a 32bits container,
+ * Two channels defined with two MSB aligned samples
+ * Three channels defined with three MSB aligned samples (MIC)
+ * Four channels defined with four MSB aligned samples (MIC)
+ . . .
+ * Eight channels defined with eight MSB aligned samples (MIC)
+ */
+#define MONO_MSB 1
+#define MONO_RSHIFTED_16 2
+#define STEREO_RSHIFTED_16 3
+#define STEREO_16_16 4
+#define STEREO_MSB 5
+#define THREE_MSB 6
+#define FOUR_MSB 7
+#define FIVE_MSB 8
+#define SIX_MSB 9
+#define SEVEN_MSB 10
+#define EIGHT_MSB 11
+#define NINE_MSB 12
+#define TEN_MSB 13
+
+/*
+ * PORT PROTOCOL TYPE - abe_port_protocol_switch_id
+ */
+#define SLIMBUS_PORT_PROT 1
+#define SERIAL_PORT_PROT 2
+#define TDM_SERIAL_PORT_PROT 3
+#define DMIC_PORT_PROT 4
+#define MCPDMDL_PORT_PROT 5
+#define MCPDMUL_PORT_PROT 6
+#define PINGPONG_PORT_PROT 7
+#define DMAREQ_PORT_PROT 8
+
+
+/*
+ * PORT IDs, this list is aligned with the FW data mapping
+ */
+#define DMIC_PORT 0
+#define PDM_UL_PORT 1
+#define BT_VX_UL_PORT 2
+#define MM_UL_PORT 3
+#define MM_UL2_PORT 4
+#define VX_UL_PORT 5
+#define MM_DL_PORT 6
+#define VX_DL_PORT 7
+#define TONES_DL_PORT 8
+#define VIB_DL_PORT 9
+#define BT_VX_DL_PORT 10
+#define PDM_DL_PORT 11
+#define MM_EXT_OUT_PORT 12
+#define MM_EXT_IN_PORT 13
+#define TDM_DL_PORT 14
+#define TDM_UL_PORT 15
+#define DEBUG_PORT 16
+#define LAST_PORT_ID 17
+
+
+/* definitions for the compatibility with HAL05xx */
#define PDM_DL1_PORT PDM_DL_PORT
#define PDM_DL2_PORT PDM_DL_PORT
#define PDM_VIB_PORT PDM_DL_PORT
@@ -219,520 +199,652 @@ typedef enum {
* ABE_DL_SRC_ID source of samples
*/
-typedef enum {
- SRC_DL1_MIXER_OUTPUT = DL1_M_labelID,
- SRC_SDT_MIXER_OUTPUT = SDT_M_labelID,
- SRC_DL1_GAIN_OUTPUT = DL1_GAIN_out_labelID,
- SRC_DL1_EQ_OUTPUT = DL1_EQ_labelID,
- SRC_DL2_GAIN_OUTPUT = DL2_GAIN_out_labelID,
- SRC_DL2_EQ_OUTPUT = DL2_EQ_labelID,
- SRC_MM_DL = MM_DL_labelID,
- SRC_TONES_DL = Tones_labelID,
- SRC_VX_DL = VX_DL_labelID,
- SRC_VX_UL = VX_UL_labelID,
- SRC_MM_UL2 = MM_UL2_labelID,
- SRC_MM_UL = MM_UL_labelID,
-} abe_dl_src_id;
-
-
-/*
- * ANA_PORT_ID Analog companion audio port
- */
-typedef enum {
- EAR_PHOENIX = 1,
- HS_L,
- HS_R,
- IHF_L,
- IHF_R,
- VIBRA1,
- VIBRA2
-} abe_ana_port_id ;
-
-/*
- * abe_patched_pattern_id: selection of the audio engine
- * signal to replace by a precomputed pattern
- */
-typedef enum {
- DBG_PATCH_AMIC = 1,
- DBG_PATCH_DMIC1,
- DBG_PATCH_DMIC2,
- DBG_PATCH_DMIC3,
- DBG_PATCH_VX_REC,
- DBG_PATCH_BT_UL,
- DBG_PATCH_MM_DL,
- DBG_PATCH_DL2_EQ,
- DBG_PATCH_VIBRA,
- DBG_PATCH_MM_EXT_IN,
- DBG_PATCH_EANC_FBK_Out,
- DBG_PATCH_MIC4,
- DBG_PATCH_MM_DL_MIXDL1,
- DBG_PATCH_MM_DL_MIXDL2,
-} abe_patched_pattern_id ;
-
-typedef abe_int32 headset_offset_t; /* Calibration data from the analog companion */
+#define SRC_DL1_MIXER_OUTPUT DL1_M_labelID
+#define SRC_SDT_MIXER_OUTPUT SDT_M_labelID
+#define SRC_DL1_GAIN_OUTPUT DL1_GAIN_out_labelID
+#define SRC_DL1_EQ_OUTPUT DL1_EQ_labelID
+#define SRC_DL2_GAIN_OUTPUT DL2_GAIN_out_labelID
+#define SRC_DL2_EQ_OUTPUT DL2_EQ_labelID
+#define SRC_MM_DL MM_DL_labelID
+#define SRC_TONES_DL Tones_labelID
+#define SRC_VX_DL VX_DL_labelID
+#define SRC_VX_UL VX_UL_labelID
+#define SRC_MM_UL2 MM_UL2_labelID
+#define SRC_MM_UL MM_UL_labelID
+
+/*
+ * abe_patched_pattern_id selection of the audio engine signal to
+ * replace by a precomputed pattern
+ */
+
+#define DBG_PATCH_AMIC 1
+#define DBG_PATCH_DMIC1 2
+#define DBG_PATCH_DMIC2 3
+#define DBG_PATCH_DMIC3 4
+#define DBG_PATCH_VX_REC 5
+#define DBG_PATCH_BT_UL 6
+#define DBG_PATCH_MM_DL 7
+#define DBG_PATCH_DL2_EQ 8
+#define DBG_PATCH_VIBRA 9
+#define DBG_PATCH_MM_EXT_IN 10
+#define DBG_PATCH_EANC_FBK_Out 11
+#define DBG_PATCH_MIC4 12
+#define DBG_PATCH_MM_DL_MIXDL1 13
+#define DBG_PATCH_MM_DL_MIXDL2 14
/*
* Signal processing module names - EQ APS MIX ROUT
*/
-#define FEAT_EQ1 1 /* equalizer downlink path headset + earphone */
-#define FEAT_EQ2L FEAT_EQ1+1 /* equalizer downlink path integrated handsfree LEFT */
-#define FEAT_EQ2R FEAT_EQ2L+1 /* equalizer downlink path integrated handsfree RIGHT */
-#define FEAT_EQSDT FEAT_EQ2R+1 /* equalizer downlink path side-tone */
-#define FEAT_EQMIC FEAT_EQSDT+1 /* equalizer uplink path first DMIC pair */
-#define FEAT_APS1 FEAT_EQMIC+1 /* Acoustic protection for headset */
-#define FEAT_APS2 FEAT_APS1+1 /* acoustic protection high-pass filter for handsfree "Left" */
-#define FEAT_APS3 FEAT_APS2+1 /* acoustic protection high-pass filter for handsfree "Right" */
-#define FEAT_ASRC1 FEAT_APS3+1 /* asynchronous sample-rate-converter for the downlink voice path */
-#define FEAT_ASRC2 FEAT_ASRC1+1 /* asynchronous sample-rate-converter for the uplink voice path */
-#define FEAT_ASRC3 FEAT_ASRC2+1 /* asynchronous sample-rate-converter for the multimedia player */
-#define FEAT_ASRC4 FEAT_ASRC3+1 /* asynchronous sample-rate-converter for the echo reference */
-#define FEAT_MIXDL1 FEAT_ASRC4+1 /* mixer of the headset and earphone path */
-#define FEAT_MIXDL2 FEAT_MIXDL1+1 /* mixer of the hands-free path */
-#define FEAT_MIXAUDUL FEAT_MIXDL2+1 /* mixer for audio being sent on the voice_ul path */
-#define FEAT_MIXVXREC FEAT_MIXAUDUL+1 /* mixer for voice communication recording */
-#define FEAT_MIXSDT FEAT_MIXVXREC+1 /* mixer for side-tone */
-#define FEAT_MIXECHO FEAT_MIXSDT+1 /* mixer for echo reference */
-#define FEAT_UPROUTE FEAT_MIXECHO+1 /* router of the uplink path */
-#define FEAT_GAINS FEAT_UPROUTE+1 /* all gains */
-#define FEAT_GAINS_DMIC1 FEAT_GAINS+1
-#define FEAT_GAINS_DMIC2 FEAT_GAINS_DMIC1+1
-#define FEAT_GAINS_DMIC3 FEAT_GAINS_DMIC2+1
-#define FEAT_GAINS_AMIC FEAT_GAINS_DMIC3+1
-#define FEAT_GAINS_SPLIT FEAT_GAINS_AMIC+1
-#define FEAT_GAINS_DL1 FEAT_GAINS_SPLIT+1
-#define FEAT_GAINS_DL2 FEAT_GAINS_DL1+1
-#define FEAT_GAIN_EANC FEAT_GAINS_DL2+1 /* active noise canceller */
-#define FEAT_SEQ FEAT_GAIN_EANC+1 /* sequencing queue of micro tasks */
-#define FEAT_CTL FEAT_SEQ+1 /* Phoenix control queue through McPDM */
-
-#define MAXNBFEATURE FEAT_CTL /* list of features of the firmware */
-
-typedef enum {
- EQ1 = FEAT_EQ1, /* equalizer downlink path headset + earphone */
- EQ2L = FEAT_EQ2L, /* equalizer downlink path integrated handsfree LEFT */
- EQ2R = FEAT_EQ2R,
- EQSDT = FEAT_EQSDT, /* equalizer downlink path side-tone */
- EQMIC = FEAT_EQMIC,
-} abe_equ_id;
-
-typedef enum {
- APS1 = FEAT_APS1, /* Acoustic protection for headset */
- APS2L = FEAT_APS2,
- APS2R = FEAT_APS3
-} abe_aps_id;
-
-typedef enum {
- ASRC1 = FEAT_ASRC1, /* asynchronous sample-rate-converter for the downlink voice path */
- ASRC2 = FEAT_ASRC2, /* asynchronous sample-rate-converter for the uplink voice path */
- ASRC3 = FEAT_ASRC3, /* asynchronous sample-rate-converter for the multimedia player */
- ASRC4 = FEAT_ASRC4, /* asynchronous sample-rate-converter for the voice uplink echo_reference */
-} abe_asrc_id;
-
-typedef enum {
- MIXDL1 = FEAT_MIXDL1,
- MIXDL2 = FEAT_MIXDL2,
- MIXSDT = FEAT_MIXSDT,
- MIXECHO = FEAT_MIXECHO,
- MIXEANC = FEAT_GAIN_EANC,
- MIXAUDUL = FEAT_MIXAUDUL,
- MIXVXREC = FEAT_MIXVXREC,
-} abe_mixer_id;
-
-typedef enum {
- UPROUTE = FEAT_UPROUTE, /* there is only one router up to now */
-} abe_router_id;
-
-typedef enum {
- GAINS = FEAT_GAINS, /* Misc tasks of the scheduler */
- SEQUENCE = FEAT_SEQ,
- CONTROL = FEAT_CTL
-} abe_schd_id;
-
-/*
- * GAIN IDs
- */
-typedef enum {
- GAINS_DMIC1 = FEAT_GAINS_DMIC1,
- GAINS_DMIC2 = FEAT_GAINS_DMIC2,
- GAINS_DMIC3 = FEAT_GAINS_DMIC3,
- GAINS_AMIC = FEAT_GAINS_AMIC,
- GAINS_SPLIT = FEAT_GAINS_SPLIT,
- GAINS_DL1 = FEAT_GAINS_DL1,
- GAINS_DL2 = FEAT_GAINS_DL2,
- GAINS_EANC = FEAT_GAIN_EANC,
-} abe_gain_id;
-
-#if 0
-typedef enum {
- VX_DL_IN_GAIN = 1, /* mixer's gain */
- MM_DL_IN_GAIN,
- TONES_DL_IN_GAIN,
- MM_VX_DL_IN_GAIN,
- MM_IHF_DL_IN_GAIN, /* mixer's gain */
- MM_HS_DL_OUT_GAIN, /* Output Left gain */
- MM_IHF_L_DL_OUT_GAIN, /* Output Left gain */
- MM_IHF_R_DL_OUT_GAIN, /* Output Right gain */
- MM_VIB1_DL_GAIN,
- MM_VIB2_DL_GAIN, /* no gain in fact */
- DMIC_UL_IN_GAIN_0,
- DMIC_UL_IN_GAIN_1, /* today = same GAIN on DMIC pairs */
- DMIC_UL_IN_GAIN_2,
- DMIC_UL_IN_GAIN_3,
- DMIC_UL_IN_GAIN_4,
- DMIC_UL_IN_GAIN_5,
- AMIC_UL_IN_GAIN_L,
- AMIC_UL_IN_GAIN_R, /* today = same gain on AMIC pair */
- ECHO_REF_GAIN,
- BT_VX_DL_OUT_GAIN,
- BT_VX_UL_IN_GAIN,
-} abe_gain_id;
-#endif
-
-/*
- * EVENT GENERATORS
- */
-typedef enum {
- EVENT_MCPDM = 1,
- EVENT_DMIC, EVENT_TIMER,
- EVENT_McBSP, EVENT_McASP, EVENT_SLIMBUS, EVENT_44100, EVENT_DEFAULT,
-} abe_event_id;
-
-/*
- * SERIAL PORTS IDs
- */
-typedef enum {
- MCBSP1_TX = MCBSP1_DMA_TX,
- MCBSP1_RX = MCBSP1_DMA_RX,
- MCBSP2_TX = MCBSP2_DMA_TX,
- MCBSP2_RX = MCBSP2_DMA_RX,
- MCBSP3_TX = MCBSP3_DMA_TX,
- MCBSP3_RX = MCBSP3_DMA_RX,
-} abe_mcbsp_id;
-
-/*
- * SERIAL PORTS IDs
- */
-typedef enum {
- SLIMBUS1_TX0 = SLIMBUS1_DMA_TX0, /* SLIMBUS mod 1 - tx rqst channel 0 */
- SLIMBUS1_TX1 = SLIMBUS1_DMA_TX1, /* SLIMBUS mod 1 - tx rqst channel 1 */
- SLIMBUS1_TX2 = SLIMBUS1_DMA_TX2, /* SLIMBUS mod 1 - tx rqst channel 2 */
- SLIMBUS1_TX3 = SLIMBUS1_DMA_TX3, /* SLIMBUS mod 1 - tx rqst channel 3 */
- SLIMBUS1_TX4 = SLIMBUS1_DMA_TX4, /* SLIMBUS mod 1 - tx rqst channel 4 */
- SLIMBUS1_TX5 = SLIMBUS1_DMA_TX5, /* SLIMBUS mod 1 - tx rqst channel 5 */
- SLIMBUS1_TX6 = SLIMBUS1_DMA_TX6, /* SLIMBUS mod 1 - tx rqst channel 6 */
- SLIMBUS1_TX7 = SLIMBUS1_DMA_TX7, /* SLIMBUS mod 1 - tx rqst channel 7 */
- SLIMBUS1_RX0 = SLIMBUS1_DMA_RX0, /* SLIMBUS mod 1 - rx rqst channel 0 */
- SLIMBUS1_RX1 = SLIMBUS1_DMA_RX1, /* SLIMBUS mod 1 - rx rqst channel 1 */
- SLIMBUS1_RX2 = SLIMBUS1_DMA_RX2, /* SLIMBUS mod 1 - rx rqst channel 2 */
- SLIMBUS1_RX3 = SLIMBUS1_DMA_RX3, /* SLIMBUS mod 1 - rx rqst channel 3 */
- SLIMBUS1_RX4 = SLIMBUS1_DMA_RX4, /* SLIMBUS mod 1 - rx rqst channel 4 */
- SLIMBUS1_RX5 = SLIMBUS1_DMA_RX5, /* SLIMBUS mod 1 - rx rqst channel 5 */
- SLIMBUS1_RX6 = SLIMBUS1_DMA_RX6, /* SLIMBUS mod 1 - rx rqst channel 6 */
- SLIMBUS1_RX7 = SLIMBUS1_DMA_RX7, /* SLIMBUS mod 1 - rx rqst channel 7 */
- SLIMBUS_UNUSED = _DUMMY_FIFO_,
-} abe_slimbus_id;
-
-/*
- * TYPES USED FOR APIS
- */
-
-/*
- * HARDWARE CONFIG TYPE
+
+/* equalizer downlink path headset + earphone */
+#define FEAT_EQ1 1
+
+/* equalizer downlink path integrated handsfree LEFT */
+#define FEAT_EQ2L FEAT_EQ1+1
+
+/* equalizer downlink path integrated handsfree RIGHT */
+#define FEAT_EQ2R FEAT_EQ2L+1
+
+/* equalizer downlink path side-tone */
+#define FEAT_EQSDT FEAT_EQ2R+1
+
+/* equalizer uplink path MIC pair */
+#define FEAT_EQMIC FEAT_EQSDT+1
+
+/* Acoustic protection for headset */
+#define FEAT_APS1 FEAT_EQMIC+1
+
+/* acoustic protection high-pass filter for handsfree "Left" */
+#define FEAT_APS2 FEAT_APS1+1
+
+/* acoustic protection high-pass filter for handsfree "Right" */
+#define FEAT_APS3 FEAT_APS2+1
+
+/* asynchronous sample-rate-converter for the downlink voice path */
+#define FEAT_ASRC1 FEAT_APS3+1
+
+/* asynchronous sample-rate-converter for the uplink voice path */
+#define FEAT_ASRC2 FEAT_ASRC1+1
+
+/* asynchronous sample-rate-converter for the multimedia player */
+#define FEAT_ASRC3 FEAT_ASRC2+1
+
+/* asynchronous sample-rate-converter for the echo reference */
+#define FEAT_ASRC4 FEAT_ASRC3+1
+
+/* mixer of the headset and earphone path */
+#define FEAT_MIXDL1 FEAT_ASRC4+1
+
+/* mixer of the hands-free path */
+#define FEAT_MIXDL2 FEAT_MIXDL1+1
+
+/* mixer for audio being sent on the voice_ul path */
+#define FEAT_MIXAUDUL FEAT_MIXDL2+1
+
+/* mixer for voice communication recording */
+#define FEAT_MIXVXREC FEAT_MIXAUDUL+1
+
+/* mixer for side-tone */
+#define FEAT_MIXSDT FEAT_MIXVXREC+1
+
+/* mixer for echo reference */
+#define FEAT_MIXECHO FEAT_MIXSDT+1
+
+/* router of the uplink path */
+#define FEAT_UPROUTE FEAT_MIXECHO+1
+
+/* all gains */
+#define FEAT_GAINS FEAT_UPROUTE+1
+#define FEAT_GAINS_DMIC1 FEAT_GAINS+1
+#define FEAT_GAINS_DMIC2 FEAT_GAINS_DMIC1+1
+#define FEAT_GAINS_DMIC3 FEAT_GAINS_DMIC2+1
+#define FEAT_GAINS_AMIC FEAT_GAINS_DMIC3+1
+#define FEAT_GAINS_SPLIT FEAT_GAINS_AMIC+1
+#define FEAT_GAINS_DL1 FEAT_GAINS_SPLIT+1
+#define FEAT_GAINS_DL2 FEAT_GAINS_DL1+1
+#define FEAT_GAIN_EANC FEAT_GAINS_DL2+1
+
+/* sequencing queue of micro tasks */
+#define FEAT_SEQ FEAT_GAIN_EANC+1
+
+/* Phoenix control queue through McPDM */
+#define FEAT_CTL FEAT_SEQ+1
+
+/* list of features of the firmware -------------------------------*/
+#define MAXNBFEATURE FEAT_CTL
+
+/* abe_equ_id */
+/* equalizer downlink path headset + earphone */
+#define EQ1 FEAT_EQ1
+
+/* equalizer downlink path integrated handsfree LEFT */
+#define EQ2L FEAT_EQ2L
+#define EQ2R FEAT_EQ2R
+
+/* equalizer downlink path side-tone */
+#define EQSDT FEAT_EQSDT
+#define EQMIC FEAT_EQMIC
+
+
+/* abe_aps_id */
+/* Acoustic protection for headset */
+#define APS1 FEAT_APS1
+#define APS2L FEAT_APS2
+#define APS2R FEAT_APS3
+
+/* abe_asrc_id */
+/* asynchronous sample-rate-converter for the downlink voice path */
+#define ASRC1 FEAT_ASRC1
+
+/* asynchronous sample-rate-converter for the uplink voice path */
+#define ASRC2 FEAT_ASRC2
+
+/* asynchronous sample-rate-converter for the multimedia player */
+#define ASRC3 FEAT_ASRC3
+
+/* asynchronous sample-rate-converter for the voice uplink echo_reference */
+#define ASRC4 FEAT_ASRC4
+
+
+/* abe_mixer_id */
+#define MIXDL1 FEAT_MIXDL1
+#define MIXDL2 FEAT_MIXDL2
+#define MIXSDT FEAT_MIXSDT
+#define MIXECHO FEAT_MIXECHO
+#define MIXEANC FEAT_GAIN_EANC
+#define MIXAUDUL FEAT_MIXAUDUL
+#define MIXVXREC FEAT_MIXVXREC
+
+/* abe_router_id */
+/* there is only one router up to now */
+#define UPROUTE FEAT_UPROUTE
+
+
+/*
+ * GAIN IDs
*/
-typedef struct {
- abe_uint32 AESS_EVENT_GENERATOR_COUNTER__COUNTER_VALUE; /* EVENT_GENERATOR_COUNTER_DEFAULT gives about 96kHz */
- abe_uint32 AESS_EVENT_SOURCE_SELECTION__SELECTION; /* 0: DMAreq, 1:Counter */
- abe_uint32 AESS_AUDIO_ENGINE_SCHEDULER__DMA_REQ_SELECTION; /* 5bits DMAreq selection */
- abe_event_id HAL_EVENT_SELECTION;
-
- abe_uint32 MCPDM_CTRL__DIV_SEL; /* 0: 96kHz 1:192kHz */
- abe_uint32 MCPDM_CTRL__CMD_INT; /* 0: no command in the FIFO, 1: 6 data on each lines (with commands) */
- abe_uint32 MCPDM_CTRL__PDMOUTFORMAT; /* 0:MSB aligned 1:LSB aligned */
- abe_uint32 MCPDM_CTRL__PDM_DN5_EN;
- abe_uint32 MCPDM_CTRL__PDM_DN4_EN;
- abe_uint32 MCPDM_CTRL__PDM_DN3_EN;
- abe_uint32 MCPDM_CTRL__PDM_DN2_EN;
- abe_uint32 MCPDM_CTRL__PDM_DN1_EN;
- abe_uint32 MCPDM_CTRL__PDM_UP3_EN;
- abe_uint32 MCPDM_CTRL__PDM_UP2_EN;
- abe_uint32 MCPDM_CTRL__PDM_UP1_EN;
- abe_uint32 MCPDM_FIFO_CTRL_DN__DN_TRESH;
- abe_uint32 MCPDM_FIFO_CTRL_UP__UP_TRESH;
-
- abe_uint32 DMIC_CTRL__DMIC_CLK_DIV; /* 0:2.4MHz 1:3.84MHz */
- abe_uint32 DMIC_CTRL__DMICOUTFORMAT; /* 0:MSB aligned 1:LSB aligned */
- abe_uint32 DMIC_CTRL__DMIC_UP3_EN;
- abe_uint32 DMIC_CTRL__DMIC_UP2_EN;
- abe_uint32 DMIC_CTRL__DMIC_UP1_EN;
- abe_uint32 DMIC_FIFO_CTRL__DMIC_TRESH; /* 1*(DMIC_UP1_EN+ 2+ 3)*2 OCP read access every 96/88.1 KHz. */
-
- abe_uint32 MCBSP_SPCR1_REG__RJUST; /* 1:MSB 2:LSB aligned */
- abe_uint32 MCBSP_THRSH2_REG_REG__XTHRESHOLD; /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, */
- abe_uint32 MCBSP_THRSH1_REG_REG__RTHRESHOLD; /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, */
- abe_uint32 SLIMBUS_DCT_FIFO_SETUP_REG__SB_THRESHOLD;
-} abe_hw_config_init_t;
-
-/*
- * EANC_T
- *
- * TBD : coefficients of the EANC
+#define GAINS_DMIC1 FEAT_GAINS_DMIC1
+#define GAINS_DMIC2 FEAT_GAINS_DMIC2
+#define GAINS_DMIC3 FEAT_GAINS_DMIC3
+#define GAINS_AMIC FEAT_GAINS_AMIC
+#define GAINS_SPLIT FEAT_GAINS_SPLIT
+#define GAINS_DL1 FEAT_GAINS_DL1
+#define GAINS_DL2 FEAT_GAINS_DL2
+#define GAINS_EANC FEAT_GAIN_EANC
+
+
+/*
+ * EVENT GENERATORS - abe_event_id
*/
-typedef struct {
- abe_int32 dmic_index;
- abe_int32 fir_coef[NBEANC1];
- abe_int32 lambda;
- abe_int32 iir_filter[NBEANC2];
- abe_int32 loop_gain;
-} abe_eanc_t;
+#define EVENT_TIMER 0
+#define EVENT_44100 1
+
+
+/*
+ * SERIAL PORTS IDs - abe_mcbsp_id
+ */
+
+#define MCBSP1_TX MCBSP1_DMA_TX
+#define MCBSP1_RX MCBSP1_DMA_RX
+#define MCBSP2_TX MCBSP2_DMA_TX
+#define MCBSP2_RX MCBSP2_DMA_RX
+#define MCBSP3_TX MCBSP3_DMA_TX
+#define MCBSP3_RX MCBSP3_DMA_RX
+
+
+/*
+ * SERIAL PORTS IDs - abe_slimbus_id;
+ */
+#define SLIMBUS1_TX0 SLIMBUS1_DMA_TX0
+#define SLIMBUS1_TX1 SLIMBUS1_DMA_TX1
+#define SLIMBUS1_TX2 SLIMBUS1_DMA_TX2
+#define SLIMBUS1_TX3 SLIMBUS1_DMA_TX3
+#define SLIMBUS1_TX4 SLIMBUS1_DMA_TX4
+#define SLIMBUS1_TX5 SLIMBUS1_DMA_TX5
+#define SLIMBUS1_TX6 SLIMBUS1_DMA_TX6
+#define SLIMBUS1_TX7 SLIMBUS1_DMA_TX7
+#define SLIMBUS1_RX0 SLIMBUS1_DMA_RX0
+#define SLIMBUS1_RX1 SLIMBUS1_DMA_RX1
+#define SLIMBUS1_RX2 SLIMBUS1_DMA_RX2
+#define SLIMBUS1_RX3 SLIMBUS1_DMA_RX3
+#define SLIMBUS1_RX4 SLIMBUS1_DMA_RX4
+#define SLIMBUS1_RX5 SLIMBUS1_DMA_RX5
+#define SLIMBUS1_RX6 SLIMBUS1_DMA_RX6
+#define SLIMBUS1_RX7 SLIMBUS1_DMA_RX7
+#define SLIMBUS_UNUSED _DUMMY_FIFO_
+
+
+/*
+ * --------------------------------- TYPES USED FOR APIS ---------------
+ */
+/*
+ * HARDWARE CONFIG TYPE
+ */
+typedef struct {
+ /* EVENT_GENERATOR_COUNTER_DEFAULT gives about 96kHz */
+ u32 AESS_EVENT_GENERATOR_COUNTER__COUNTER_VALUE;
+
+ /* 0: DMAreq, 1:Counter */
+ u32 AESS_EVENT_SOURCE_SELECTION__SELECTION;
+
+ /* 5bits DMAreq selection */
+ u32 AESS_AUDIO_ENGINE_SCHEDULER__DMA_REQ_SELECTION;
+ u32 HAL_EVENT_SELECTION;
+
+ /* 0: 96kHz 1:192kHz */
+ u32 MCPDM_CTRL__DIV_SEL;
+
+ /* 0: no command in the FIFO, 1: 6 data on each lines (with commands)*/
+ u32 MCPDM_CTRL__CMD_INT;
+
+ /* 0:MSB aligned 1:LSB aligned */
+ u32 MCPDM_CTRL__PDMOUTFORMAT;
+ u32 MCPDM_CTRL__PDM_DN5_EN;
+ u32 MCPDM_CTRL__PDM_DN4_EN;
+ u32 MCPDM_CTRL__PDM_DN3_EN;
+ u32 MCPDM_CTRL__PDM_DN2_EN;
+ u32 MCPDM_CTRL__PDM_DN1_EN;
+ u32 MCPDM_CTRL__PDM_UP3_EN;
+ u32 MCPDM_CTRL__PDM_UP2_EN;
+ u32 MCPDM_CTRL__PDM_UP1_EN;
+ u32 MCPDM_FIFO_CTRL_DN__DN_TRESH;
+ u32 MCPDM_FIFO_CTRL_UP__UP_TRESH;
+
+ /* 0:2.4MHz 1:3.84MHz */
+ u32 DMIC_CTRL__DMIC_CLK_DIV;
+
+ /* 0:MSB aligned 1:LSB aligned */
+ u32 DMIC_CTRL__DMICOUTFORMAT;
+ u32 DMIC_CTRL__DMIC_UP3_EN;
+ u32 DMIC_CTRL__DMIC_UP2_EN;
+ u32 DMIC_CTRL__DMIC_UP1_EN;
+
+ /* 1*(DMIC_UP1_EN+ 2+ 3)*2 OCP read access every 96/88.1 KHz. */
+ u32 DMIC_FIFO_CTRL__DMIC_TRESH;
+
+ /* 1:MSB 2:LSB aligned */
+ u32 MCBSP_SPCR1_REG__RJUST;
+
+ /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, .... */
+ u32 MCBSP_THRSH2_REG_REG__XTHRESHOLD;
+
+ /* 1=MONO, 2=STEREO, 3=TDM_3_CHANNELS, 4=TDM_4_CHANNELS, .... */
+ u32 MCBSP_THRSH1_REG_REG__RTHRESHOLD;
+
+ u32 SLIMBUS_DCT_FIFO_SETUP_REG__SB_THRESHOLD;
+
+} abe_hw_config_init_t;
+
/*
- * EQU_T
+ * EQU_T
*
- * coefficients of the equalizer
+ * coefficients of the equalizer
*/
-typedef struct {
- abe_iir_t equ_type; /* type of filter */
- abe_uint32 equ_length; /* filter length */
- union { /* parameters are the direct and recursive coefficients in */
- abe_int32 type1[NBEQ1]; /* Q6.26 integer fixed-point format. */
+typedef struct {
+ /* type of filter */
+ u32 equ_type;
+
+ /* filter length */
+ u32 equ_length;
+ union {
+ /* parameters are the direct and recursive coefficients in */
+
+ /* Q6.26 integer fixed-point format. */
+ s32 type1 [NBEQ1];
struct {
- abe_int32 freq [NBEQ2]; /* center frequency of the band [Hz] */
- abe_int32 gain [NBEQ2]; /* gain of each band. [dB]*/
- abe_int32 q [NBEQ2]; /* Q factor of this band [dB] */
+ /* center frequency of the band [Hz] */
+ s32 freq [NBEQ2];
+
+ /* gain of each band. [dB]*/
+ s32 gain [NBEQ2];
+
+ /* Q factor of this band [dB] */
+ s32 q [NBEQ2];
} type2;
} coef;
- abe_int32 equ_param3;
-} abe_equ_t;
+ s32 equ_param3;
+} abe_equ_t ;
/*
- * APS_T
+ * APS_T
*
- * coefficients of the Acoustics Protection and Safety
+ * coefficients of the Acoustics Protection and Safety
*/
-typedef struct {
- abe_int32 coef1[NBAPS1];
- abe_int32 coef2[NBAPS2];
+typedef struct {
+ s32 coef1 [NBAPS1];
+ s32 coef2 [NBAPS2];
} abe_aps_t;
-typedef struct {
- abe_millibel e1; /* structure of two energy_t estimation for coil and membrane */
- abe_millibel e2;
+typedef struct {
+ /* structure of two energy_t estimation for coil and membrane */
+ u32 e1;
+ u32 e2;
} abe_aps_energy_t;
+
+
/*
- * ROUTER_T
+ * ROUTER_T
*
- * table of indexes in unsigned bytes
+ * table of indexes in unsigned bytes
*/
-typedef abe_uint16 abe_router_t;
+typedef u16 abe_router_t;
+
/*
- * DATA_FORMAT_T
+ * DATA_FORMAT_T
*
- * used in port declaration
+ * used in port declaration
*/
typedef struct {
- abe_freq_t f; /* Sampling frequency of the stream */
- abe_samp_t samp_format; /* Sample format type */
+ /* Sampling frequency of the stream */
+ u32 f;
+
+ /* Sample format type */
+ u32 samp_format;
} abe_data_format_t;
/*
- * PORT_PROTOCOL_T
+ * PORT_PROTOCOL_T
*
- * port declaration
+ * port declaration
*/
-typedef struct {
- abe_uint32 direction; /* Direction=0 means input from AESS point of view */
- abe_port_protocol_switch_id protocol_switch; /* Protocol type (switch) during the data transfers */
+typedef struct {
+
+ /* Direction=0 means input from AESS point of view */
+ u32 direction;
+
+ /* Protocol type (switch) during the data transfers */
+ u32 protocol_switch;
union {
- struct { /* Slimbus peripheral connected to ATC */
- abe_uint32 desc_addr1; /* Address of ATC Slimbus descriptor's index */
- abe_uint32 desc_addr2; /* Second ATC index for SlimBus reception (or NULL) */
- abe_uint32 buf_addr1; /* DMEM address 1 in bytes */
- abe_uint32 buf_addr2; /* DMEM address 2 in bytes */
- abe_uint32 buf_size; /* DMEM buffer size size in bytes */
- abe_uint32 iter; /* ITERation on each DMAreq signals */
+ /* Slimbus peripheral connected to ATC */
+ struct {
+ /* Address of ATC Slimbus descriptor's index */
+ u32 desc_addr1;
+
+ /* Second ATC index for SlimBus reception (or NULL) */
+ u32 desc_addr2;
+
+ /* DMEM address 1 in bytes */
+ u32 buf_addr1;
+
+ /* DMEM address 2 in bytes */
+ u32 buf_addr2;
+
+ /* DMEM buffer size size in bytes */
+ u32 buf_size;
+
+ /* ITERation on each DMAreq signals */
+ u32 iter;
} prot_slimbus;
+ /* McBSP/McASP peripheral connected to ATC */
struct {
- abe_uint32 desc_addr; /* McBSP/McASP peripheral connected to ATC */
- abe_uint32 buf_addr; /* Address of ATC McBSP/McASP descriptor's in bytes */
- abe_uint32 buf_size; /* DMEM address in bytes */
- abe_uint32 iter; /* ITERation on each DMAreq signals */
+
+ u32 desc_addr;
+
+ /* Address of ATC McBSP/McASP descriptor's in bytes */
+ u32 buf_addr;
+
+ /* DMEM address in bytes */
+ u32 buf_size;
+
+ /* ITERation on each DMAreq signals */
+ u32 iter;
} prot_serial;
- struct { /* DMIC peripheral connected to ATC */
- abe_uint32 buf_addr; /* DMEM address in bytes */
- abe_uint32 buf_size; /* DMEM buffer size in bytes */
- abe_uint32 nbchan; /* Number of activated DMIC */
+ /* DMIC peripheral connected to ATC */
+ struct {
+ /* DMEM address in bytes */
+ u32 buf_addr;
+
+ /* DMEM buffer size in bytes */
+ u32 buf_size;
+
+ /* Number of activated DMIC */
+ u32 nbchan;
} prot_dmic;
- struct { /* McPDMDL peripheral connected to ATC */
- abe_uint32 buf_addr; /* DMEM address in bytes */
- abe_uint32 buf_size; /* DMEM size in bytes */
- abe_uint32 control; /* Control allowed on McPDM DL */
+ /* McPDMDL peripheral connected to ATC */
+ struct {
+ /* DMEM address in bytes */
+ u32 buf_addr;
+
+ /* DMEM size in bytes */
+ u32 buf_size;
+
+ /* Control allowed on McPDM DL */
+ u32 control;
} prot_mcpdmdl;
- struct { /* McPDMUL peripheral connected to ATC */
- abe_uint32 buf_addr; /* DMEM address size in bytes */
- abe_uint32 buf_size; /* DMEM buffer size size in bytes */
+ /* McPDMUL peripheral connected to ATC */
+ struct {
+ /* DMEM address size in bytes */
+ u32 buf_addr;
+
+ /* DMEM buffer size size in bytes */
+ u32 buf_size;
} prot_mcpdmul;
- struct { /* Ping-Pong interface to the Host using cache-flush */
- abe_uint32 desc_addr; /* Address of ATC descriptor's */
- abe_uint32 buf_addr; /* DMEM buffer base address in bytes */
- abe_uint32 buf_size; /* DMEM size in bytes for each ping and pong buffers */
- abe_uint32 irq_addr; /* IRQ address (either DMA (0) MCU (1) or DSP(2)) */
- abe_uint32 irq_data; /* IRQ data content loaded in the AESS IRQ register */
- abe_uint32 callback; /* Call-back function upon IRQ reception */
+ /* Ping-Pong interface to the Host using cache-flush */
+ struct {
+ /* Address of ATC descriptor's */
+ u32 desc_addr;
+
+ /* DMEM buffer base address in bytes */
+ u32 buf_addr;
+
+ /* DMEM size in bytes for each ping and pong buffers */
+ u32 buf_size;
+
+ /* IRQ address (either DMA (0) MCU (1) or DSP(2)) */
+ u32 irq_addr;
+
+ /* IRQ data content loaded in the AESS IRQ register */
+ u32 irq_data;
+
+ /* Call-back function upon IRQ reception */
+ u32 callback;
} prot_pingpong;
- struct { /* DMAreq line to CBPr */
- abe_uint32 desc_addr; /* Address of ATC descriptor's */
- abe_uint32 buf_addr; /* DMEM buffer address in bytes */
- abe_uint32 buf_size; /* DMEM buffer size size in bytes */
- abe_uint32 iter; /* ITERation on each DMAreq signals */
- abe_uint32 dma_addr; /* DMAreq address */
- abe_uint32 dma_data; /* DMA/AESS = 1 << #DMA */
+ /* DMAreq line to CBPr */
+ struct {
+ /* Address of ATC descriptor's */
+ u32 desc_addr;
+
+ /* DMEM buffer address in bytes */
+ u32 buf_addr;
+
+ /* DMEM buffer size size in bytes */
+ u32 buf_size;
+
+ /* ITERation on each DMAreq signals */
+ u32 iter;
+
+ /* DMAreq address */
+ u32 dma_addr;
+
+ /* DMA/AESS = 1 << #DMA */
+ u32 dma_data;
} prot_dmareq;
- struct { /* Circular buffer - direct addressing to DMEM */
- abe_uint32 buf_addr; /* DMEM buffer base address in bytes */
- abe_uint32 buf_size; /* DMEM buffer size in bytes */
- abe_uint32 dma_addr; /* DMAreq address */
- abe_uint32 dma_data; /* DMA/AESS = 1 << #DMA */
+ /* Circular buffer - direct addressing to DMEM */
+ struct {
+ /* DMEM buffer base address in bytes */
+ u32 buf_addr;
+
+ /* DMEM buffer size in bytes */
+ u32 buf_size;
+
+ /* DMAreq address */
+ u32 dma_addr;
+
+ /* DMA/AESS = 1 << #DMA */
+ u32 dma_data;
} prot_circular_buffer;
- }p;
+ } p;
} abe_port_protocol_t;
+
+
/*
- * DMA_T
+ * DMA_T
*
- * dma structure for easing programming
+ * dma structure for easing programming
*/
-typedef struct {
- void *data; /* OCP L3 pointer to the first address of the */
- /* destination buffer (either DMA or Ping-Pong read/write pointers). */
- void *l3_dmem; /* address L3 when addressing the DMEM buffer instead of CBPr */
- void *l4_dmem; /* address L3 translated to L4 the ARM memory space */
- abe_uint32 iter; /* number of iterations for the DMA data moves. */
+typedef struct {
+ /* OCP L3 pointer to the first address of the */
+ void *data;
+ /* destination buffer (either DMA or Ping-Pong read/write pointers). */
+ /* address L3 when addressing the DMEM buffer instead of CBPr */
+ void *l3_dmem;
+
+ /* address L3 translated to L4 the ARM memory space */
+ void *l4_dmem;
+
+ /* number of iterations for the DMA data moves. */
+ u32 iter;
} abe_dma_t;
-typedef struct {
- abe_uint32 data; /* Offset to the first address of the */
- abe_uint32 iter; /* number of iterations for the DMA data moves. */
-} abe_dma_t_offset;
+typedef struct {
+ /* Offset to the first address of the */
+ u32 data;
+ /* number of iterations for the DMA data moves. */
+ u32 iter;
+} abe_dma_t_offset;
/*
* SEQ_T
*
- * struct {
- * micros_t time; Waiting time before executing next line
- * seq_code_t code Subroutine index interpreted in the HAL and translated to
- * FW subroutine codes in case of ABE tasks
- * int32 param[2] Two parameters
- *} seq_t
+ * struct {
+ * micros_t time; Waiting time before executing next line
+ * seq_code_t code Subroutine index interpreted in the HAL and
+ * translated to
+ * FW subroutine codes in case of ABE tasks
+ * int32 param[2] Two parameters
+ * } seq_t
*
*/
-typedef struct {
- abe_micros_t delta_time;
- abe_sub_code_t code;
- abe_uint32 param[4];
- abe_uint8 tag;
+typedef struct {
+ u32 delta_time;
+ u32 code;
+ u32 param[4];
+ u8 tag;
} abe_seq_t;
-typedef struct {
- abe_uint32 mask;
+typedef struct {
+ u32 mask;
abe_seq_t seq1;
abe_seq_t seq2;
} abe_sequence_t;
+
/*
- * DRIFT_T
+ * DRIFT_T abe_drift_t = s32
*
- * ASRC drift parameter in [ppm] value
+ * ASRC drift parameter in [ppm] value
*/
-typedef abe_int32 abe_drift_t;
/*
- * INTERNAL DATA TYPES
+ * --------------------------------- INTERNAL DATA TYPES ---------------------
*/
+
/*
- * ABE_IRQ_DATA_T
+ * ABE_IRQ_DATA_T
*
- * IRQ FIFO content declaration
- * APS interrupts:
- * IRQtag_APS to [31:28], APS_IRQs to [27:16], loopCounter to [15:0]
- * SEQ interrupts:
- * IRQtag_COUNT to [31:28], Count_IRQs to [27:16], loopCounter to [15:0]
- * Ping-Pong Interrupts:
- * IRQtag_PP to [31:28], PP_MCU_IRQ to [27:16], loopCounter to [15:0]
- */
-typedef struct {
- unsigned int counter: 16;
- unsigned int data: 12;
- unsigned int tag: 4;
+ * IRQ FIFO content declaration
+ * APS interrupts : IRQtag_APS to [31:28], APS_IRQs to [27:16],
+ * loopCounter to [15:0]
+ * SEQ interrupts : IRQtag_COUNT to [31:28], Count_IRQs to [27:16],
+ * loopCounter to [15:0]
+ * Ping-Pong Interrupts : IRQtag_PP to [31:28], PP_MCU_IRQ to [27:16],
+ * loopCounter to [15:0]
+ */
+typedef struct {
+ unsigned int counter:16;
+ unsigned int data:12;
+ unsigned int tag:4;
} abe_irq_data_t;
+
/*
- * ABE_PORT_T status / format / sampling / protocol(call_back) / features / gain / name ..
+ * ABE_PORT_T status / format / sampling / protocol(call_back) / features /
+ * gain / name ..
*
*/
-typedef struct {
- abe_uint16 status; /* running / idled */
- abe_data_format_t format; /* Sample format type */
- abe_drift_t drift; /* API : for ASRC */
- abe_uint16 callback; /* optionnal call-back index for errors and ack */
- abe_uint16 smem_buffer1; /* IO tasks buffers */
- abe_uint16 smem_buffer2;
+
+typedef struct {
+ /* running / idled */
+ u16 status;
+
+ /* Sample format type */
+ abe_data_format_t format;
+
+ /* API : for ASRC */
+ s32 drift;
+
+ /* optionnal call-back index for errors and ack */
+ u16 callback;
+
+ /* IO tasks buffers */
+ u16 smem_buffer1;
+ u16 smem_buffer2;
abe_port_protocol_t protocol;
- abe_dma_t_offset dma; /* pointer and iteration counter of the xDMA */
- abe_uint16 feature_index [MAXFEATUREPORT]; /* list of features associated to a port (EQ, APS, ... , ends with 0) */
- // abe_millibel gain_calibration; /* gain tuning, default=0dB */
+
+ /* pointer and iteration counter of the xDMA */
+ abe_dma_t_offset dma;
+
+ /* list of features associated to a port (EQ, APS, ... , ends with 0) */
+ u16 feature_index [MAXFEATUREPORT];
char name[NBCHARPORTNAME];
} abe_port_t;
+
+
+
/*
- * ABE_SUBROUTINE_T
+ * ABE_SUBROUTINE_T
*
*/
-typedef struct {
- abe_uint32 sub_id;
- abe_int32 param[4];
-} abe_subroutine_t;
+
+typedef struct {
+ u32 sub_id;
+ s32 param[4];
+} abe_subroutine_t ;
/*
- * ABE_PORT_INFO_T
+ * ABE_PORT_INFO_T OPP, subroutines to call on reset
*
- * OPP, subroutines to call on reset
*/
-typedef struct {
- abe_opp_t min_opp;
+
+typedef struct {
+ u32 min_opp;
abe_subroutine_t sub1;
abe_subroutine_t sub2;
} abe_port_info_t;
/*
- * ABE_FEATURE_T
+ * ABE_FEATURE_T
*
*/
-typedef struct {
- abe_uint16 enable_with_default_data;
- abe_uint16 disable_feature;
- abe_uint16 read_parameter;
- abe_uint16 write_parameter;
- abe_uint16 running_status;
- abe_uint16 fw_input_buffer_address;
- abe_uint16 fw_output_buffer_address;
- abe_uint16 fw_scheduler_slot_position;
- abe_uint16 fw_scheduler_subslot_position;
- abe_opp_t min_opp;
+
+typedef struct {
+ u16 enable_with_default_data;
+ u16 disable_feature;
+ u16 read_parameter;
+ u16 write_parameter;
+ u16 running_status;
+ u16 fw_input_buffer_address;
+ u16 fw_output_buffer_address;
+ u16 fw_scheduler_slot_position;
+ u16 fw_scheduler_subslot_position;
+ u32 min_opp;
char name[NBCHARFEATURENAME];
} abe_feature_t;
-#ifdef __cplusplus
-}
-#endif
-#endif /* _ABE_TYP_H_ */
+
+
+#endif /* ifndef ABETYP */
diff --git a/sound/soc/omap/abe/abe_typedef.h b/sound/soc/omap/abe/abe_typedef.h
index ec0a4413b6a4..347145b84b39 100644
--- a/sound/soc/omap/abe/abe_typedef.h
+++ b/sound/soc/omap/abe/abe_typedef.h
@@ -1,25 +1,32 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#ifndef _ABE_TYPEDEF_H_
#define _ABE_TYPEDEF_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
#include "abe_define.h"
-
/*
* Basic types definition
-*/
+ */
typedef unsigned char ABE_uchar;
typedef char ABE_char;
typedef unsigned short ABE_uint16;
@@ -34,153 +41,324 @@ typedef ABE_int16* pABE_int16;
typedef ABE_int32* pABE_int32;
typedef ABE_uint32* pABE_uint32;
-/*
- * Hard-coded data generated in the XLS sheet (to be removed later@@@@)
- */
+
#ifdef __chess__
typedef struct abeatcdescTag {
unsigned long a;
unsigned long b;
} ABE_SAtcDescriptor;
-typedef void (*pABE_voidFunction)()clobbers(R0, R1, R2, R3, R4, R5, R6, R7, R13);
-typedef void (*pABE_voidFunctionsList[])()clobbers(R0, R1, R2, R3, R4, R5, R6, R7, R13);
-typedef void (*pABE_cmdFunction)() clobbers(R0, R1, R2, R3, R4, R5, R6, R7, R13);
-typedef void (*pABE_cmdFunctionsList[])() clobbers(R0, R1, R2, R3, R4, R5, R6, R7, R13);
-typedef void (*pABE_copyFunction)(ABE_uint16 chess_storage(R13))clobbers(R13);
-typedef void (*pABE_copyFunctionsList[])(ABE_uint16 chess_storage(R13))clobbers(R13);
+typedef void (*pABE_voidFunction)()clobbers(R0, R1, R2, R3, R4,
+ R5, R6, R7, R13);
+typedef void (*pABE_voidFunctionsList[])()clobbers(R0, R1, R2, R3, R4,
+ R5, R6, R7, R13);
+typedef void (*pABE_cmdFunction)() clobbers(R0, R1, R2, R3, R4,
+ R5, R6, R7, R13);
+typedef void (*pABE_cmdFunctionsList[])() clobbers(R0, R1, R2, R3, R4,
+ R5, R6, R7, R13);
+typedef void (*pABE_copyFunction)(ABE_uint16 chess_storage(R13))
+ clobbers(R13);
+typedef void (*pABE_copyFunctionsList[])(ABE_uint16 chess_storage(R13))
+ clobbers(R13);
#endif
/*
* Commonly used structures
*/
-
-typedef struct abetaskTag{
- ABE_uint16 iF; /* 0 Index of called function */
- ABE_uint16 A0; /* 2 for INITPTR of A0 */
- ABE_uint16 A1; /* 4 for INITPTR of A1 */
- ABE_uint16 A2_3; /* 6 for INITPTR of A2 & A3 */
- ABE_uint16 A4_5; /* 8 for INITPTR of A4 & A5 */
- ABE_uint16 R; /* 10 for INITREG of R0, R1, R2, R3 */
- ABE_uint16 misc0; /* 12 */
- ABE_uint16 misc1; /* 14 */
+typedef struct abetaskTag {
+ /* 0 ... Index of called function */
+ ABE_uint16 iF;
+
+ /* 2 ... for INITPTR of A0 */
+ ABE_uint16 A0;
+
+ /* 4 ... for INITPTR of A1 */
+ ABE_uint16 A1;
+
+ /* 6 ... for INITPTR of A2 & A3 */
+ ABE_uint16 A2_3;
+
+ /* 8 ... for INITPTR of A4 & A5 */
+ ABE_uint16 A4_5;
+
+ /* 10 ... for INITREG of R0, R1, R2, R3 */
+ ABE_uint16 R;
+
+ /* 12 */
+ ABE_uint16 misc0;
+
+ /* 14 */
+ ABE_uint16 misc1;
} ABE_STask;
typedef ABE_STask* pABE_STask;
typedef ABE_STask** ppABE_STask;
typedef struct {
- ABE_uint16 drift_ASRC; /* 0 */
- ABE_uint16 drift_io; /* 2 */
- ABE_uchar io_type_idx; /* 4 */
- ABE_uchar samp_size; /* 5 */
- ABE_uint16 flow_counter; /* 6 */
-
- ABE_uint16 hw_ctrl_addr; /* 8 */
- ABE_uchar atc_irq_data; /* 10 */
- ABE_uchar direction_rw; /* 11 */
- ABE_uchar unused1; /* 12 */
- ABE_uchar nsamp; /* 13 */
- ABE_uchar x_io; /* 14 */
- ABE_uchar on_off; /* 15 */
-
- ABE_uint16 split_addr1; /* 16 */
- ABE_uint16 split_addr2; /* 18 */
- ABE_uint16 split_addr3; /* 20 */
- ABE_uchar before_f_index; /* 22 */
- ABE_uchar after_f_index; /* 23 */
-
- ABE_uint16 smem_addr1; /* 24 */
- ABE_uint16 atc_address1; /* 26 */
- ABE_uint16 atc_pointer_saved1; /* 28 */
- ABE_uchar data_size1; /* 30 */
- ABE_uchar copy_f_index1; /* 31 */
-
- ABE_uint16 smem_addr2; /* 32 */
- ABE_uint16 atc_address2; /* 34 */
- ABE_uint16 atc_pointer_saved2; /* 36 */
- ABE_uchar data_size2; /* 38 */
- ABE_uchar copy_f_index2; /* 39 */
-
-} ABE_SIODescriptor;
-
-
-#define drift_asrc_ 0 /* [w] asrc output used for the next asrc call (+/- 1 / 0) */
-#define drift_io_ 2 /* [w] asrc output used for controlling the number of samples to be exchanged (+/- 1 / 0) */
-#define io_type_idx_ 4 /* address of the IO subroutine */
-#define samp_size_ 5
-#define unused1 6
-#define unused2 7
-#define hw_ctrl_addr_ 8 /* dmareq address or host irq buffer address (atc address) */
-#define atc_irq_data_ 10 /* data content to be loaded to "hw_ctrl_addr" */
-#define direction_rw_ 11 /* read dmem =0, write dmem =3 (atc offset of the access pointer) */
-#define flow_counter_ 6 /* flow error counter */
-#define nsamp_ 13 /* number of samples (either mono stereo...) */
-#define x_io_ 14 /* x number of raw DMEM data moved */
-#define on_off_ 15
-
-#define split_addr1_ 16 /* internal smem buffer initptr pointer index */
-#define split_addr2_ 18 /* internal smem buffer initptr pointer index */
-#define split_addr3_ 20 /* internal smem buffer initptr pointer index */
-#define before_f_index_ 22 /* index of the copy subroutine */
-#define after_f_index_ 23 /* index of the copy subroutine */
-
-#define minidesc1_ 24
-#define rel_smem_ 0 /* internal smem buffer initptr pointer index */
-#define rel_atc_ 2 /* atc descriptor address (byte address x4) */
-#define rel_atc_saved 4 /* location of the saved ATC pointer (+debug info) */
-#define rel_size_ 6 /* size of each sample (1:mono/1616 2:stereo ) */
-#define rel_f_ 7 /* index of the copy subroutine */
-
-#define s_mem_mm_ul 24
-#define s_mm_ul_size 30
-
-#define minidesc2_ 32
-#define Struct_Size 40
-
-typedef ABE_SIODescriptor* pABE_SIODescriptor;
-typedef ABE_SIODescriptor** ppABE_SIODescriptor;
-
-typedef struct abepingpongdescriptorTag{
- ABE_uint16 drift_ASRC; /* 0 [W] asrc output used for the next ASRC call (+/- 1 / 0)*/
- ABE_uint16 drift_io; /* 2 [W] asrc output used for controlling the number of samples to be exchanged (+/- 1 / 0) */
- ABE_uint16 hw_ctrl_addr; /* 4 DMAReq address or HOST IRQ buffer address (ATC ADDRESS) */
- ABE_uchar copy_func_index; /* 6 index of the copy subroutine */
- ABE_uchar x_io; /* 7 X number of SMEM samples to move */
- ABE_uchar data_size; /* 8 0 for mono data, 1 for stereo data */
- ABE_uchar smem_addr; /* 9 internal SMEM buffer INITPTR pointer index */
- ABE_uchar atc_irq_data; /* 10 data content to be loaded to "hw_ctrl_addr" */
- ABE_uchar counter; /* 11 ping/pong buffer flag */
- ABE_uint16 workbuff_BaseAddr; /* 12 current Base address of the working buffer */
- ABE_uint16 workbuff_Samples; /* 14 samples left in the working buffer */
- ABE_uint16 nextbuff0_BaseAddr; /* 6 Base address of the ping/pong buffer 0 */
- ABE_uint16 nextbuff0_Samples; /* 18 samples available in the ping/pong buffer 0 */
- ABE_uint16 nextbuff1_BaseAddr; /* 20 Base address of the ping/pong buffer 1 */
- ABE_uint16 nextbuff1_Samples; /* 22 samples available in the ping/pong buffer 1 */
+ /* 0 */
+ ABE_uint16 drift_ASRC;
+
+ /* 2 */
+ ABE_uint16 drift_io;
+
+ /* 4 "Function index" of XLS sheet "Functions" */
+ ABE_uchar io_type_idx;
+
+ /* 5 1 = MONO or Stereo1616, 2= STEREO, ... */
+ ABE_uchar samp_size;
+
+ /* 6 drift "issues" for ASRC */
+ ABE_int16 flow_counter;
+
+ /* 8 address for IRQ or DMArequests */
+ ABE_uint16 hw_ctrl_addr;
+
+ /* 10 DMA request bit-field or IRQ (DSP/MCU) */
+ ABE_uchar atc_irq_data;
+
+ /* 11 0 = Read, 3 = Write */
+ ABE_uchar direction_rw;
+
+ /* 12 */
+ ABE_uchar unused1;
+
+ /* 13 12 at 48kHz, ... */
+ ABE_uchar nsamp;
+
+ /* 14 nsamp x samp_size */
+ ABE_uchar x_io;
+
+ /* 15 ON = 0x80, OFF = 0x00 */
+ ABE_uchar on_off;
+
+ /* 16 For Slimbus and TDM purpose */
+ ABE_uint16 split_addr1;
+
+ /* 18 */
+ ABE_uint16 split_addr2;
+
+ /* 20 */
+ ABE_uint16 split_addr3;
+
+ /* 22 */
+ ABE_uchar before_f_index;
+
+ /* 23 */
+ ABE_uchar after_f_index;
+
+ /* 24 SM/CM INITPTR field */
+ ABE_uint16 smem_addr1;
+
+ /* 26 in bytes */
+ ABE_uint16 atc_address1;
+
+ /* 28 DMIC_ATC_PTR, MCPDM_UL_ATC_PTR, ... */
+ ABE_uint16 atc_pointer_saved1;
+
+ /* 30 samp_size (except in TDM or Slimbus) */
+ ABE_uchar data_size1;
+
+ /* 31 "Function index" of XLS sheet "Functions" */
+ ABE_uchar copy_f_index1;
+
+ /* 32 For Slimbus and TDM purpose */
+ ABE_uint16 smem_addr2;
+
+ /* 34 */
+ ABE_uint16 atc_address2;
+
+ /* 36 */
+ ABE_uint16 atc_pointer_saved2;
+
+ /* 38 */
+ ABE_uchar data_size2;
+
+ /* 39 */
+ ABE_uchar copy_f_index2;
+
+} ABE_SIODescriptor ;
+
+/* [w] asrc output used for the next asrc call (+/- 1 / 0) */
+#define drift_asrc_ 0
+
+ /* [w] asrc output used for controlling the number of samples to be
+ exchanged (+/- 1 / 0) */
+#define drift_io_ 2
+
+/* address of the IO subroutine */
+#define io_type_idx_ 4
+#define samp_size_ 5
+
+/* flow error counter */
+#define flow_counter_ 6
+
+/* dmareq address or host irq buffer address (atc address) */
+#define hw_ctrl_addr_ 8
+
+/* data content to be loaded to "hw_ctrl_addr" */
+#define atc_irq_data_ 10
+
+/* read dmem =0, write dmem =3 (atc offset of the access pointer) */
+#define direction_rw_ 11
+
+/* number of samples (either mono stereo...) */
+#define nsamp_ 13
+
+/* x number of raw DMEM data moved */
+#define x_io_ 14
+#define on_off_ 15
+
+/* internal smem buffer initptr pointer index */
+#define split_addr1_ 16
+
+/* internal smem buffer initptr pointer index */
+#define split_addr2_ 18
+
+/* internal smem buffer initptr pointer index */
+#define split_addr3_ 20
+
+/* index of the copy subroutine */
+#define before_f_index_ 22
+
+/* index of the copy subroutine */
+#define after_f_index_ 23
+
+#define minidesc1_ 24
+
+/* internal smem buffer initptr pointer index */
+#define rel_smem_ 0
+
+/* atc descriptor address (byte address x4) */
+#define rel_atc_ 2
+
+/* location of the saved ATC pointer (+debug info) */
+#define rel_atc_saved 4
+
+/* size of each sample (1:mono/1616 2:stereo ... ) */
+#define rel_size_ 6
+
+/* index of the copy subroutine */
+#define rel_f_ 7
+
+#define s_mem_mm_ul 24
+#define s_mm_ul_size 30
+
+#define minidesc2_ 32
+#define Struct_Size 40
+
+typedef struct {
+ /* 0: [W] asrc output used for the next ASRC call (+/- 1 / 0)*/
+ ABE_uint16 drift_ASRC;
+
+ /* 2: [W] asrc output used for controlling the number of
+ samples to be exchanged (+/- 1 / 0) */
+ ABE_uint16 drift_io;
+
+ /* 4: DMAReq address or HOST IRQ buffer address (ATC ADDRESS) */
+ ABE_uint16 hw_ctrl_addr;
+
+ /* 6: index of the copy subroutine */
+ ABE_uchar copy_func_index;
+
+ /* 7: X number of SMEM samples to move */
+ ABE_uchar x_io;
+
+ /* 8: 0 for mono data, 1 for stereo data */
+ ABE_uchar data_size;
+
+ /* 9: internal SMEM buffer INITPTR pointer index */
+ ABE_uchar smem_addr;
+
+ /* 10: data content to be loaded to "hw_ctrl_addr" */
+ ABE_uchar atc_irq_data;
+
+ /* 11: ping/pong buffer flag */
+ ABE_uchar counter;
+
+ /* 12: current Base address of the working buffer */
+ ABE_uint16 workbuff_BaseAddr;
+
+ /* 14: samples left in the working buffer */
+ ABE_uint16 workbuff_Samples;
+
+ /* 16: Base address of the ping/pong buffer 0 */
+ ABE_uint16 nextbuff0_BaseAddr;
+
+ /* 18: samples available in the ping/pong buffer 0 */
+ ABE_uint16 nextbuff0_Samples;
+
+ /* 20: Base address of the ping/pong buffer 1 */
+ ABE_uint16 nextbuff1_BaseAddr;
+
+ /* 22: samples available in the ping/pong buffer 1 */
+ ABE_uint16 nextbuff1_Samples;
} ABE_SPingPongDescriptor;
-typedef ABE_SPingPongDescriptor* pABE_SPingPongDescriptor;
#ifdef __chess__
-#define drift_ASRC 0 /* [W] asrc output used for the next ASRC call (+/- 1 / 0)*/
-#define drift_io 2 /* [W] asrc output used for controlling the number of samples to be exchanged (+/- 1 / 0) */
-#define hw_ctrl_addr 4 /* DMAReq address or HOST IRQ buffer address (ATC ADDRESS) */
-#define copy_func_index 6 /* index of the copy subroutine */
-#define x_io 7 /* X number of SMEM samples to move */
-#define data_size 8 /* 0 for mono data, 1 for stereo data */
-#define smem_addr 9 /* internal SMEM buffer INITPTR pointer index */
-#define atc_irq_data 10 /* data content to be loaded to "hw_ctrl_addr" */
-#define atc_address 11 /* ATC descriptor address */
-#define threshold_1 12 /* THR1; For stereo data, THR1 is provided by HAL as THR1<<1 */
-#define threshold_2 13 /* THR2; For stereo data, THR2 is provided by HAL as THR2<<1 */
-#define update_1 14 /* UP_1; For stereo data, UP_1 is provided by HAL as UP_1<<1 */
-#define update_2 15 /* UP_2; For stereo data, UP_2 is provided by HAL as UP_2<<1 */
-#define flow_counter 16 /* Flow error counter */
-#define direction_rw 17 /* Read DMEM =0, Write DMEM =3 (ATC offset of the access pointer) */
-#define counter 11 /* ping/pong buffer flag */
-#define workbuff_BaseAddr 12 /* current Base address of the working buffer */
-#define workbuff_Samples 14 /* samples left in the working buffer */
-#define nextbuff0_BaseAddr 16 /* Base address of the ping/pong buffer 0 */
-#define nextbuff0_Samples 18 /* samples available in the ping/pong buffer 0 */
-#define nextbuff1_BaseAddr 20 /* Base address of the ping/pong buffer 1 */
-#define nextbuff1_Samples 22 /* samples available in the ping/pong buffer 1 */
+/* [W] asrc output used for the next ASRC call (+/- 1 / 0)*/
+#define drift_ASRC 0
+
+/* [W] asrc output used for controlling the number of samples to be
+ exchanged (+/- 1 / 0) */
+#define drift_io 2
+
+/* DMAReq address or HOST IRQ buffer address (ATC ADDRESS) */
+#define hw_ctrl_addr 4
+
+/* index of the copy subroutine */
+#define copy_func_index 6
+
+/* X number of SMEM samples to move */
+#define x_io 7
+
+/* 0 for mono data, 1 for stereo data */
+#define data_size 8
+
+/* internal SMEM buffer INITPTR pointer index */
+#define smem_addr 9
+
+/* data content to be loaded to "hw_ctrl_addr" */
+#define atc_irq_data 10
+
+/* ATC descriptor address */
+#define atc_address 11
+
+/* THR1; For stereo data, THR1 is provided by HAL as THR1<<1 */
+#define threshold_1 12
+
+/* THR2; For stereo data, THR2 is provided by HAL as THR2<<1 */
+#define threshold_2 13
+
+/* UP_1; For stereo data, UP_1 is provided by HAL as UP_1<<1 */
+#define update_1 14
+
+/* UP_2; For stereo data, UP_2 is provided by HAL as UP_2<<1 */
+#define update_2 15
+
+/* Flow error counter */
+#define flow_counter 16
+
+/* Read DMEM =0, Write DMEM =3 (ATC offset of the access pointer) */
+#define direction_rw 17
+
+/* ping/pong buffer flag */
+#define counter 11
+
+/* current Base address of the working buffer */
+#define workbuff_BaseAddr 12
+
+/* samples left in the working buffer */
+#define workbuff_Samples 14
+
+/* Base address of the ping/pong buffer 0 */
+#define nextbuff0_BaseAddr 16
+
+/* samples available in the ping/pong buffer 0 */
+#define nextbuff0_Samples 18
+
+/* samples available in the ping/pong buffer 0 */
+#define nextbuff1_BaseAddr 20
+
+/* samples available in the ping/pong buffer 1 */
+#define nextbuff1_Samples 22
#endif
-#endif /* _ABE_TYPEDEF_H_ */
+#endif /* _ABE_TYPEDEF_H_ */
diff --git a/sound/soc/omap/abe/C_ABE_FW_SIZE.h b/sound/soc/omap/abe/c_abe_fw_size.h
index 99860364394a..bda16787a9ba 100644
--- a/sound/soc/omap/abe/C_ABE_FW_SIZE.h
+++ b/sound/soc/omap/abe/c_abe_fw_size.h
@@ -1,4 +1,4 @@
-/*
+/*
FW 05.10 MEMORY SIZES
*/
#define ABE_DMEM_SIZE_OPTIMIZED 16384