cortina_api.h 99.7 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Cortina PHY drivers framework
 *
 * Copyright 2018 NXP
 * Copyright (C) 2006-2017 Inphi Corporation, Inc. All rights reserved.
 */

#ifndef __CORTINA_API_H_
#define __CORTINA_API_H_

#include <config.h>
#include <common.h>
#include <malloc.h>
#include <linux/ctype.h>
#include <linux/string.h>
#include <linux/err.h>
#include <phy.h>

/* endiannes */
#define CS_LITTLE_ENDIAN

/* Things that can be tweaked */
#define CS_PRINTF(x)	debug x
#define CS_FPRINTF(x)	fprintf x
#define CS_FLUSH()	fflush(stdout)
#define CS_SNPRINTF(x)	snprintf x
#define CS_TRACE(x)	debug x
#define CS_UDELAY(x)	udelay((x))
#define CS_MDELAY(x)	udelay((x)*1000)

/* Make sure endianess is defined */
#ifdef CS_BIG_ENDIAN
#  ifdef CS_LITTLE_ENDIAN
#	 error "CS_BIG_ENDIAN and CS_LITTLE_ENDIAN are both defined."
#  endif
#else
#  ifndef CS_LITTLE_ENDIAN
#	 error "Either CS_BIG_ENDIAN or CS_LITTLE_ENDIAN must be defined."
#  endif
#endif

/* Cortina/Inphi reference software version */
#define CS_API_VERSION	  "3.10.0"
#define CS_API_BUILD_DATE "Apr 21, 2017 at 16:09:26"

#define CS_API_VERSION_MAJOR  3
#define CS_API_VERSION_MINOR  10
#define CS_API_VERSION_UPDATE 0

#define CS_OK		0
#define CS_ERROR	-1

#define CS_TRUE		1
#define CS_FALSE	0

#ifndef NULL
#define NULL			0
#endif

/* Chip family defines */
#define CS4224_GLOBAL_CHIP_ID_LSB				  0x0
#define CS4224_GLOBAL_CHIP_ID_LSB_dft			  0x3E5
#define CS4224_GLOBAL_CHIP_ID_MSB				  0x1
#define CS4224_GLOBAL_CHIP_ID_MSB_dft			  0x7003
#define CS4224_GLOBAL_SCRATCH					  0x2
#define CS4224_GLOBAL_SCRATCH_dft				  0x0
#define CS4224_GLOBAL_UCODE_VERSION_SR			  0x3
#define CS4224_GLOBAL_UCODE_VERSION_SR_dft		  0x0
#define CS4224_GLOBAL_UCODE_VERSION_CX1			  0x4
#define CS4224_GLOBAL_UCODE_VERSION_CX1_dft		  0x0
#define CS4224_GLOBAL_UCODE_VERSION_KR			  0x5
#define CS4224_GLOBAL_UCODE_VERSION_KR_dft		  0x0
#define CS4224_GLOBAL_UCODE_VERSION_ZR			  0x6
#define CS4224_GLOBAL_UCODE_VERSION_ZR_dft		  0x0
#define CS4224_GLOBAL_UCODE_VERSION_FC			  0x7
#define CS4224_GLOBAL_UCODE_VERSION_FC_dft		  0x0
#define CS4224_GLOBAL_UCODE_TIMESTAMP0			  0x8
#define CS4224_GLOBAL_UCODE_TIMESTAMP0_dft		  0x0
#define CS4224_GLOBAL_UCODE_TIMESTAMP1			  0x9
#define CS4224_GLOBAL_UCODE_TIMESTAMP1_dft		  0x0
#define CS4224_GLOBAL_UCODE_TIMESTAMP2			  0xA
#define CS4224_GLOBAL_UCODE_TIMESTAMP2_dft		  0x0
#define CS4224_GLOBAL_MPIF_SOFT_RESET			  0xD
#define CS4224_GLOBAL_MPIF_SOFT_RESET_dft		  0x0
#define CS4224_GLOBAL_MDIO_CONFIG				  0xF
#define CS4224_GLOBAL_MDIO_CONFIG_dft			  0x50
#define CS4224_GLOBAL_DWNLD_CHECKSUM_CTRL		  0x11
#define CS4224_GLOBAL_DWNLD_CHECKSUM_CTRL_dft	  0x0
#define CS4224_GLOBAL_DWNLD_CHECKSUM_STATUS		  0x12
#define CS4224_GLOBAL_DWNLD_CHECKSUM_STATUS_dft   0x0
#define CS4224_GLOBAL_DWNLD_CHECKSUM_HW			  0x13
#define CS4224_GLOBAL_DWNLD_CHECKSUM_HW_dft		  0xFFFF
#define CS4224_GLOBAL_DWNLD_CHECKSUM_SW			  0x14
#define CS4224_GLOBAL_DWNLD_CHECKSUM_SW_dft		  0x0
#define CS4224_GLOBAL_PIN_STATUS				  0x16
#define CS4224_GLOBAL_PIN_STATUS_dft			  0x0
#define CS4224_GLOBAL_BROADCAST					  0x17
#define CS4224_GLOBAL_BROADCAST_dft				  0x0
#define CS4224_GLOBAL_GT_10KHZ_REF_CLK_CNT1		  0x18
#define CS4224_GLOBAL_GT_10KHZ_REF_CLK_CNT1_dft   0x0
#define CS4224_GLOBAL_GT_10KHZ_REF_CLK_CNT0		  0x19
#define CS4224_GLOBAL_GT_10KHZ_REF_CLK_CNT0_dft   0x3CF0
#define CS4224_GLOBAL_SCRATCH0					  0x1D
#define CS4224_GLOBAL_SCRATCH0_dft				  0x0
#define CS4224_GLOBAL_SCRATCH6					  0x23
#define CS4224_GLOBAL_SCRATCH6_dft				  0x0
#define CS4224_GLOBAL_SCRATCH7					  0x24
#define CS4224_GLOBAL_SCRATCH7_dft				  0x0
#define CS4224_GLOBAL_GLOBAL_INTERRUPT			  0x26
#define CS4224_GLOBAL_GLOBAL_INTERRUPT_dft		  0x0
#define CS4224_GLOBAL_GLOBAL_INTE				  0x27
#define CS4224_GLOBAL_GLOBAL_INTE_dft			  0x0
#define CS4224_GLOBAL_DATAPATH_INTERRUPT		  0x28
#define CS4224_GLOBAL_DATAPATH_INTERRUPT_dft	  0x0
#define CS4224_GLOBAL_DATAPATH_INTE				  0x29
#define CS4224_GLOBAL_DATAPATH_INTE_dft			  0x0
#define CS4224_GPIO_INTERR						  0x100
#define CS4224_GPIO_INTERR_dft					  0x0
#define CS4224_GPIO_GPIO1						  0x106
#define CS4224_GPIO_GPIO1_dft					  0x0
#define CS4224_GPIO_GPIO2						  0x10C
#define CS4224_GPIO_GPIO2_dft					  0x0
#define CS4224_GPIO_GPIO3						  0x112
#define CS4224_GPIO_GPIO3_dft					  0x0
#define CS4224_GPIO_GPIO4						  0x118
#define CS4224_GPIO_GPIO4_dft					  0x0
#define CS4224_GPIO_GPIO_INPUT0					  0x11E
#define CS4224_GPIO_GPIO_INPUT0_dft				  0x0
#define CS4224_GPIO_GPIO_INPUT_INT				  0x124
#define CS4224_GPIO_GPIO_INPUT_INT_dft			  0x0
#define CS4224_GPIO_GPIO_INPUT_INTE				  0x125
#define CS4224_GPIO_GPIO_INPUT_INTE_dft			  0x0
#define CS4224_GPIO_GPIO_INPUT_INTS				  0x126
#define CS4224_GPIO_GPIO_INPUT_INTS_dft			  0x0
#define CS4224_GPIO_GPIO_INPUT_INTZ				  0x127
#define CS4224_GPIO_GPIO_INPUT_INTZ_dft			  0x0
#define CS4224_EFUSE_GENERAL_STATUS				  0x181
#define CS4224_EFUSE_GENERAL_STATUS_dft			  0x0
#define CS4224_EFUSE_PDF_SKU					  0x19F
#define CS4224_EFUSE_PDF_SKU_dft				  0x0
#define CS4224_EFUSE_PDF_MON_CAL_DATA			  0x1A4
#define CS4224_EFUSE_PDF_MON_CAL_DATA_dft		  0x0
#define CS4224_EFUSE_PDF_MON_GAIN_DATA			  0x1A5
#define CS4224_EFUSE_PDF_MON_GAIN_DATA_dft		  0x0
#define CS4224_EFUSE_PDF_MON_LUT15				  0x1A6
#define CS4224_EFUSE_PDF_MON_LUT15_dft			  0x0
#define CS4224_EFUSE_PDF_POLY_RES_CAL_DATA2		  0x1B7
#define CS4224_EFUSE_PDF_POLY_RES_CAL_DATA2_dft   0x0
#define CS4224_EFUSE_PDF_POLY_RES_CAL_DATA1		  0x1B8
#define CS4224_EFUSE_PDF_POLY_RES_CAL_DATA1_dft   0x0
#define CS4224_EFUSE_PDF_POLY_RES_CAL_DATA0		  0x1B9
#define CS4224_EFUSE_PDF_POLY_RES_CAL_DATA0_dft   0x0
#define CS4224_MONITOR_CONTROL0					  0x200
#define CS4224_MONITOR_CONTROL0_dft				  0x630C
#define CS4224_MONITOR_CONFIG_MASK				  0x204
#define CS4224_MONITOR_CONFIG_MASK_dft			  0x0
#define CS4224_MONITOR_LUT_SELECT				  0x20B
#define CS4224_MONITOR_LUT_SELECT_dft			  0x0
#define CS4224_MONITOR_LUT_LOCAL_SELECT			  0x20C
#define CS4224_MONITOR_LUT_LOCAL_SELECT_dft		  0x0
#define CS4224_MONITOR_LUT_APPLY				  0x20D
#define CS4224_MONITOR_LUT_APPLY_dft			  0x0
#define CS4224_MONITOR_CAL_CONST_OVERRIDE_ENA	  0x20E
#define CS4224_MONITOR_CAL_CONST_OVERRIDE_ENA_dft 0x0
#define CS4224_MONITOR_CAL_OVERRIDE				  0x20F
#define CS4224_MONITOR_CAL_OVERRIDE_dft			  0x0
#define CS4224_MONITOR_CAL_CONST_APPLY			  0x210
#define CS4224_MONITOR_CAL_CONST_APPLY_dft		  0x0
#define CS4224_MONITOR_STATUS_FINAL0			  0x25A
#define CS4224_MONITOR_STATUS_FINAL0_dft		  0x0
#define CS4224_MONITOR_STATUS_FINAL2			  0x25C
#define CS4224_MONITOR_STATUS_FINAL2_dft		  0x0
#define CS4224_MONITOR_STATUS_FINAL6			  0x260
#define CS4224_MONITOR_STATUS_FINAL6_dft		  0x0
#define CS4224_MONITOR_LUT_RANGE0				  0x27B
#define CS4224_MONITOR_LUT_RANGE0_dft			  0x0
#define CS4224_MONITOR_LUT_VALUE0				  0x28B
#define CS4224_MONITOR_LUT_VALUE0_dft			  0x0
#define CS4224_CLKMON_GBL_CLKSEL				  0x2E0
#define CS4224_CLKMON_GBL_CLKSEL_dft			  0x7F
#define CS4224_CLKMON_GBL_CTRL					  0x2E1
#define CS4224_CLKMON_GBL_CTRL_dft				  0x110
#define CS4224_CLKMON_GBL_DURATION				  0x2E2
#define CS4224_CLKMON_GBL_DURATION_dft			  0x0
#define CS4224_CLKMON_GBL_MINTHRESH1			  0x2E6
#define CS4224_CLKMON_GBL_MINTHRESH1_dft		  0x0
#define CS4224_CLKMON_GBL_MINTHRESH0			  0x2E7
#define CS4224_CLKMON_GBL_MINTHRESH0_dft		  0x0
#define CS4224_CLKMON_GBL_MAXTHRESH1			  0x2E8
#define CS4224_CLKMON_GBL_MAXTHRESH1_dft		  0x0
#define CS4224_CLKMON_GBL_MAXTHRESH0			  0x2E9
#define CS4224_CLKMON_GBL_MAXTHRESH0_dft		  0x0
#define CS4224_MSEQ_PS_RAM_CONTROL				  0x301
#define CS4224_MSEQ_PS_RAM_CONTROL_dft			  0x0
#define CS4224_MSEQ_PS_RAM_DATA1				  0x302
#define CS4224_MSEQ_PS_RAM_DATA1_dft			  0x0
#define CS4224_MSEQ_PS_RAM_DATA0				  0x303
#define CS4224_MSEQ_PS_RAM_DATA0_dft			  0x0
#define CS4224_MSEQ_PS_INT						  0x306
#define CS4224_MSEQ_PS_INT_dft					  0x0
#define CS4224_MSEQ_PS_INTE						  0x307
#define CS4224_MSEQ_PS_INTE_dft					  0x0
#define CS4224_MSEQ_PS_INTO						  0x308
#define CS4224_MSEQ_PS_INTO_dft					  0x0
#define CS4224_MSEQ_PS_INTZ						  0x309
#define CS4224_MSEQ_PS_INTZ_dft					  0x0
#define CS4224_MSEQ_PS_MBIST_CTRL				  0x30A
#define CS4224_MSEQ_PS_MBIST_CTRL_dft			  0x0
#define CS4224_MSEQ_PS_MBIST_STATUS				  0x30B
#define CS4224_MSEQ_PS_MBIST_STATUS_dft			  0x0
#define CS4224_PP_LINE_LINEMISC_SOFT_RESET		  0x1000
#define CS4224_PP_LINE_LINEMISC_SOFT_RESET_dft	  0x2
#define CS4224_PP_LINE_LINEMISC_MPIF_RESET_DOTREG 0x1001
#define CS4224_PP_LINE_LINEMISC_MPIF_RESET_DOTREG_dft 0x7
#define CS4224_PP_LINE_LINEMISC_GIGEPCS_SOFT_RESET 0x1002
#define CS4224_PP_LINE_LINEMISC_GIGEPCS_SOFT_RESET_dft 0x3
#define CS4224_PP_LINE_LINEMISC_FUNCEN			  0x1003
#define CS4224_PP_LINE_LINEMISC_FUNCEN_dft		  0x0
#define CS4224_PP_LINE_LINEMISC_CLKEN			  0x1004
#define CS4224_PP_LINE_LINEMISC_CLKEN_dft		  0x0
#define CS4224_PP_LINE_LINEMISC_MSEQCLKCTRL		  0x1007
#define CS4224_PP_LINE_LINEMISC_MSEQCLKCTRL_dft   0x4
#define CS4224_PP_LINE_LINEMISC_DATAPATH_CTRL	  0x100B
#define CS4224_PP_LINE_LINEMISC_DATAPATH_CTRL_dft 0xF180
#define CS4224_PP_LINE_LINEMISC_KR_AN_PORT_ADDR   0x100C
#define CS4224_PP_LINE_LINEMISC_KR_AN_PORT_ADDR_dft 0x0
#define CS4224_PP_LINE_LINEMISC_AN_MODE_SEL		  0x100D
#define CS4224_PP_LINE_LINEMISC_AN_MODE_SEL_dft   0x0
#define CS4224_PP_LINE_LINEMISC_OVERRIDE_EN		  0x1010
#define CS4224_PP_LINE_LINEMISC_OVERRIDE_EN_dft   0x0
#define CS4224_PP_LINE_LINEMISC_INTERRUPT		  0x1011
#define CS4224_PP_LINE_LINEMISC_INTERRUPT_dft	  0x0
#define CS4224_PP_LINE_LINEMISC_INTENABLE		  0x1012
#define CS4224_PP_LINE_LINEMISC_INTENABLE_dft	  0x0
#define CS4224_PP_LINE_SDS_COMMON_RX0_Config	  0x1020
#define CS4224_PP_LINE_SDS_COMMON_RX0_Config_dft  0x18
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CONFIG  0x1021
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CONFIG_dft 0x4
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CLKDIV_CTRL 0x1023
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CLKDIV_CTRL_dft 0x3005
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CLKOUT_CTRL 0x1024
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CLKOUT_CTRL_dft 0x2FF
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CPA	  0x1027
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CPA_dft 0x77
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_IBIAS_TUNE 0x1029
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_IBIAS_TUNE_dft 0x4
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_RBIAS_TUNE 0x102A
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_RBIAS_TUNE_dft 0x44
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_MISC	  0x102D
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_MISC_dft 0x300
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_SPARE   0x102F
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_SPARE_dft 0xE0F0
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CONFIG_EYEMON 0x1030
#define CS4224_PP_LINE_SDS_COMMON_SRX0_RX_CONFIG_EYEMON_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_VCOMAX   0x1031
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_VCOMAX_dft 0xFFF
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_CONTROL  0x1033
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_CONTROL_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_ALTCT_LIMIT_HI 0x1035
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_ALTCT_LIMIT_HI_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_ALTCT_STATUS 0x1037
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_ALTCT_STATUS_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL3  0x1039
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL3_dft 0xFF
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL2  0x103A
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL2_dft 0xFF
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL1  0x103B
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL1_dft 0xFF
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL0  0x103C
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPLVL0_dft 0xFF
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES04 0x103D
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES04_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES03 0x103E
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES03_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES02 0x103F
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES02_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES01 0x1040
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES01_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES00 0x1041
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES00_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES14 0x1042
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES14_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES13 0x1043
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES13_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES12 0x1044
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES12_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES11 0x1045
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES11_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES10 0x1046
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_TMPTHRES10_dft 0x19
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL00 0x1047
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL00_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL01 0x1048
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL01_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL02 0x1049
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL02_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL03 0x104A
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL03_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL10 0x104B
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL10_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL11 0x104C
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL11_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL12 0x104D
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL12_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL13 0x104E
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_BIASVAL13_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_VCOBIAS 0x104F
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_LC_VCOBIAS_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_STATUS   0x1050
#define CS4224_PP_LINE_SDS_COMMON_RXVCO0_STATUS_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_RESOLUTION 0x1057
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_RESOLUTION_dft 0x3
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_CONTROL 0x1059
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_CONTROL_dft 0x2098
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTERRUPT 0x105B
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTERRUPT_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTSTATUS 0x105C
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTSTATUS_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTENABLE 0x105D
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTENABLE_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTERRUPTZ 0x105E
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKD0_INTERRUPTZ_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RXELST0_Control 0x106E
#define CS4224_PP_LINE_SDS_COMMON_RXELST0_Control_dft 0x2
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Cfg	  0x106F
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Cfg_dft 0x2000
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Ctrl   0x1070
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Ctrl_dft 0xC
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Count1 0x1071
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Count1_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Count0 0x1072
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_Count0_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_INTERRUPT 0x1073
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_INTERRUPT_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_INTSTATUS 0x1074
#define CS4224_PP_LINE_SDS_COMMON_PRBSCHK0_INTSTATUS_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_RESET	  0x1077
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_RESET_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_EN		  0x1078
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_EN_dft	  0x0
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_NUMERATOR0 0x1079
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_NUMERATOR0_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_NUMERATOR1 0x107A
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_NUMERATOR1_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_NUMERATOR0 0x107D
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_NUMERATOR0_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_NUMERATOR1 0x107E
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_NUMERATOR1_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_WIDTH	  0x1081
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_WIDTH_dft 0xA
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_INTDIV	  0x1082
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_INTDIV_dft 0x1919
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_STAGE_EN  0x1083
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_STAGE_EN_dft 0x408
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD0 0x1084
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD0_dft 0xCCCC
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD1 0x1085
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD1_dft 0xCC
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_STAGE2PRELOAD0 0x1086
#define CS4224_PP_LINE_SDS_COMMON_RDIVFRAC0_STAGE2PRELOAD0_dft 0xCCCC
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_STAGE1PRELOAD0 0x1088
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_STAGE1PRELOAD0_dft 0xCCCC
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_STAGE1PRELOAD1 0x1089
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_STAGE1PRELOAD1_dft 0xCC
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_STAGE2PRELOAD0 0x108A
#define CS4224_PP_LINE_SDS_COMMON_COREFRAC0_STAGE2PRELOAD0_dft 0xCCCC
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_DITHER	  0x108D
#define CS4224_PP_LINE_SDS_COMMON_FRAC0_DITHER_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_TX0_Config	  0x108E
#define CS4224_PP_LINE_SDS_COMMON_TX0_Config_dft  0x18
#define CS4224_PP_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLA 0x108F
#define CS4224_PP_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLA_dft 0x814
#define CS4224_PP_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLB 0x1090
#define CS4224_PP_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLB_dft 0x4
#define CS4224_PP_LINE_SDS_COMMON_STX0_SQUELCH	  0x1091
#define CS4224_PP_LINE_SDS_COMMON_STX0_SQUELCH_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_STX0_MISC		  0x1092
#define CS4224_PP_LINE_SDS_COMMON_STX0_MISC_dft   0x33
#define CS4224_PP_LINE_SDS_COMMON_PRBSGEN0_Cfg	  0x1096
#define CS4224_PP_LINE_SDS_COMMON_PRBSGEN0_Cfg_dft 0x2000
#define CS4224_PP_LINE_SDS_COMMON_PRBSGEN0_Ctrl   0x1097
#define CS4224_PP_LINE_SDS_COMMON_PRBSGEN0_Ctrl_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_PRBSGEN0_Fixed0_Pattern1 0x1098
#define CS4224_PP_LINE_SDS_COMMON_PRBSGEN0_Fixed0_Pattern1_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_TXELST0_Control 0x109D
#define CS4224_PP_LINE_SDS_COMMON_TXELST0_Control_dft 0x2
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_CONFIG1 0x10A1
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_CONFIG1_dft 0x4
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_CONFIG2 0x10A2
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_CONFIG2_dft 0x40
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_CONFIG4 0x10A4
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_CONFIG4_dft 0x81F0
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_RTUNE  0x10A5
#define CS4224_PP_LINE_SDS_COMMON_SRX0_AGC_RTUNE_dft 0x4
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DAC_ENB_MSB 0x10A6
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DAC_ENB_MSB_dft 0xD
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DAC_ENB_LSB 0x10A7
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DAC_ENB_LSB_dft 0xDFFF
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_DLY_CTRL1 0x10A8
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_DLY_CTRL1_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_DLY_CTRL2 0x10A9
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_DLY_CTRL2_dft 0x0
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_BIAS1  0x10AA
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_BIAS1_dft 0x5555
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_CONFIG 0x10AE
#define CS4224_PP_LINE_SDS_COMMON_SRX0_DFE_CONFIG_dft 0x441
#define CS4224_PP_LINE_SDS_COMMON_SRX0_MONCTRL	  0x10B1
#define CS4224_PP_LINE_SDS_COMMON_SRX0_MONCTRL_dft 0x2000
#define CS4224_PP_LINE_SDS_COMMON_SRX0_VCO_CONFIG 0x10B2
#define CS4224_PP_LINE_SDS_COMMON_SRX0_VCO_CONFIG_dft 0x607
#define CS4224_PP_LINE_SDS_COMMON_STX0_DRIVER_CONFIG 0x10B4
#define CS4224_PP_LINE_SDS_COMMON_STX0_DRIVER_CONFIG_dft 0x10
#define CS4224_PP_LINE_SDS_COMMON_STX0_DRIVER_TUNE 0x10B5
#define CS4224_PP_LINE_SDS_COMMON_STX0_DRIVER_TUNE_dft 0x404
#define CS4224_PP_LINE_SDS_COMMON_STX0_DRIVERCML_TUNE 0x10B6
#define CS4224_PP_LINE_SDS_COMMON_STX0_DRIVERCML_TUNE_dft 0x404
#define CS4224_PP_LINE_SDS_COMMON_Int			  0x10BA
#define CS4224_PP_LINE_SDS_COMMON_Int_dft		  0x0
#define CS4224_PP_LINE_SDS_COMMON_IntEn			  0x10BB
#define CS4224_PP_LINE_SDS_COMMON_IntEn_dft		  0x0
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKDi		  0x10C7
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKDi_dft	  0x0
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKDe		  0x10C8
#define CS4224_PP_LINE_SDS_COMMON_RXLOCKDe_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_GRAM_CR		  0x1220
#define CS4224_PP_LINE_SDS_DSP_MSEQ_GRAM_CR_dft   0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_GRAM_D1		  0x1221
#define CS4224_PP_LINE_SDS_DSP_MSEQ_GRAM_D1_dft   0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_GRAM_D0		  0x1222
#define CS4224_PP_LINE_SDS_DSP_MSEQ_GRAM_D0_dft   0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_PC_SHADOW	  0x1223
#define CS4224_PP_LINE_SDS_DSP_MSEQ_PC_SHADOW_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_OPTIONS_SHADOW 0x1224
#define CS4224_PP_LINE_SDS_DSP_MSEQ_OPTIONS_SHADOW_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_OPTIONS		  0x1225
#define CS4224_PP_LINE_SDS_DSP_MSEQ_OPTIONS_dft   0x8
#define CS4224_PP_LINE_SDS_DSP_MSEQ_PC			  0x1228
#define CS4224_PP_LINE_SDS_DSP_MSEQ_PC_dft		  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_IX			  0x1229
#define CS4224_PP_LINE_SDS_DSP_MSEQ_IX_dft		  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_BASE3_INST	  0x1233
#define CS4224_PP_LINE_SDS_DSP_MSEQ_BASE3_INST_dft 0x3
#define CS4224_PP_LINE_SDS_DSP_MSEQ_ENABLE		  0x1234
#define CS4224_PP_LINE_SDS_DSP_MSEQ_ENABLE_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_POWER_DOWN_LSB 0x1235
#define CS4224_PP_LINE_SDS_DSP_MSEQ_POWER_DOWN_LSB_dft 0x1E0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_POWER_DOWN_MSB 0x1236
#define CS4224_PP_LINE_SDS_DSP_MSEQ_POWER_DOWN_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_STATUS		  0x1237
#define CS4224_PP_LINE_SDS_DSP_MSEQ_STATUS_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_BANK_SELECTOR 0x1238
#define CS4224_PP_LINE_SDS_DSP_MSEQ_BANK_SELECTOR_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_SEL	  0x1239
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_SEL_dft  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_IN_LSB   0x123A
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_IN_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_IN_MSB   0x123B
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_IN_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_OUT_LSB  0x123C
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_OUT_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_OUT_MSB  0x123D
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MAIL_OUT_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MU_VALUE	  0x1245
#define CS4224_PP_LINE_SDS_DSP_MSEQ_MU_VALUE_dft  0xF0F
#define CS4224_PP_LINE_SDS_DSP_MSEQ_LEAK_INTVL_AGC 0x1247
#define CS4224_PP_LINE_SDS_DSP_MSEQ_LEAK_INTVL_AGC_dft 0x40
#define CS4224_PP_LINE_SDS_DSP_MSEQ_LEAK_INTVL_DFE 0x1248
#define CS4224_PP_LINE_SDS_DSP_MSEQ_LEAK_INTVL_DFE_dft 0x40
#define CS4224_PP_LINE_SDS_DSP_MSEQ_COEF_DSP_INIT_SEL 0x1249
#define CS4224_PP_LINE_SDS_DSP_MSEQ_COEF_DSP_INIT_SEL_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_COEF_DSP_FLOAT 0x124C
#define CS4224_PP_LINE_SDS_DSP_MSEQ_COEF_DSP_FLOAT_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_EQADJ1 0x125E
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_EQADJ1_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_EQADJ2 0x125F
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_EQADJ2_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_DFE_GAIN0 0x1262
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_DFE_GAIN0_dft 0x1FF
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_DFE_GAIN1 0x1263
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_DFE_GAIN1_dft 0x1FF
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_DFE_GAIN2 0x1264
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_DFE_GAIN2_dft 0x1FF
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_PHSEL  0x1265
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_PHSEL_dft 0x20
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_SLICER 0x1266
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_SLICER_dft 0x80
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_AGC_MISC 0x1268
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_AGC_MISC_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_AGC_GAIN 0x1269
#define CS4224_PP_LINE_SDS_DSP_MSEQ_CAL_RX_AGC_GAIN_dft 0x7
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SNR_CTRL	  0x126C
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SNR_CTRL_dft  0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SNR_ZEROS_LSB 0x126D
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SNR_ZEROS_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_RESET_COUNT_LSB 0x1273
#define CS4224_PP_LINE_SDS_DSP_MSEQ_RESET_COUNT_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_RESET_COUNT_MSB 0x1274
#define CS4224_PP_LINE_SDS_DSP_MSEQ_RESET_COUNT_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SERDES		  0x1275
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SERDES_dft	  0x30
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE0_LSB	  0x1280
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE0_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE0_MSB	  0x1281
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE0_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE1_LSB	  0x1282
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE1_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE1_MSB	  0x1283
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE1_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE2_LSB	  0x1284
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE2_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE2_MSB	  0x1285
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE2_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE3_LSB	  0x1286
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE3_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE3_MSB	  0x1287
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE3_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE4_LSB	  0x1288
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE4_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE4_MSB	  0x1289
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE4_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE5_LSB	  0x128A
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE5_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE5_MSB	  0x128B
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE5_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE6_LSB	  0x128C
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE6_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE6_MSB	  0x128D
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE6_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE7_LSB	  0x128E
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE7_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE7_MSB	  0x128F
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE7_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE8_LSB	  0x1290
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE8_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE8_MSB	  0x1291
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE8_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE9_LSB	  0x1292
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE9_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE9_MSB	  0x1293
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE9_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE10_LSB   0x1294
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE10_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE10_MSB   0x1295
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE10_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE11_LSB   0x1296
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE11_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE11_MSB   0x1297
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE11_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE12_LSB   0x1298
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE12_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE12_MSB   0x1299
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE12_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE13_LSB   0x129A
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE13_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE13_MSB   0x129B
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE13_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE14_LSB   0x129C
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE14_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE15_MSB   0x129F
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE15_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE16_LSB   0x12A0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE16_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE18_LSB   0x12A4
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE18_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE18_MSB   0x12A5
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE18_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE19_LSB   0x12A6
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE19_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE20_LSB   0x12A8
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE20_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE20_MSB   0x12A9
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE20_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE21_LSB   0x12AA
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE21_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE21_MSB   0x12AB
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE21_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE22_LSB   0x12AC
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE22_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE22_MSB   0x12AD
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE22_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE23_LSB   0x12AE
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE23_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE23_MSB   0x12AF
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE23_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE24_LSB   0x12B0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE24_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE24_MSB   0x12B1
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE24_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE25_LSB   0x12B2
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE25_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE25_MSB   0x12B3
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE25_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE26_LSB   0x12B4
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE26_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE26_MSB   0x12B5
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE26_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE27_LSB   0x12B6
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE27_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE27_MSB   0x12B7
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE27_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE28_LSB   0x12B8
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE28_LSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE28_MSB   0x12B9
#define CS4224_PP_LINE_SDS_DSP_MSEQ_SPARE28_MSB_dft 0x0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE0_0		  0x1320
#define CS4224_PP_LINE_SDS_DSP_IC_DFE0_0_dft	  0xA0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE0_1		  0x1321
#define CS4224_PP_LINE_SDS_DSP_IC_DFE0_1_dft	  0xF0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE1_0		  0x1324
#define CS4224_PP_LINE_SDS_DSP_IC_DFE1_0_dft	  0xE0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE1_1		  0x1325
#define CS4224_PP_LINE_SDS_DSP_IC_DFE1_1_dft	  0xF8
#define CS4224_PP_LINE_SDS_DSP_IC_DFE2_0		  0x1328
#define CS4224_PP_LINE_SDS_DSP_IC_DFE2_0_dft	  0xF0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE2_1		  0x1329
#define CS4224_PP_LINE_SDS_DSP_IC_DFE2_1_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE3_0		  0x132C
#define CS4224_PP_LINE_SDS_DSP_IC_DFE3_0_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE3_1		  0x132D
#define CS4224_PP_LINE_SDS_DSP_IC_DFE3_1_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE4_0		  0x132E
#define CS4224_PP_LINE_SDS_DSP_IC_DFE4_0_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_IC_DFE4_1		  0x132F
#define CS4224_PP_LINE_SDS_DSP_IC_DFE4_1_dft	  0x0
#define CS4224_PP_LINE_SDS_DSP_ENABLE			  0x1343
#define CS4224_PP_LINE_SDS_DSP_ENABLE_dft		  0x4
#define CS4224_PP_LINE_SDS_DSP_COEF_SATURATED_INT 0x1354
#define CS4224_PP_LINE_SDS_DSP_COEF_SATURATED_INT_dft 0x0
#define CS4224_PP_LINE_GIGEPCS_LINE_CONTROL		  0x1460
#define CS4224_PP_LINE_GIGEPCS_LINE_CONTROL_dft   0x140
#define CS4224_PP_LINE_GIGEPCS_LINE_STATUS		  0x1461
#define CS4224_PP_LINE_GIGEPCS_LINE_STATUS_dft	  0x9
#define CS4224_PP_LINE_GIGEPCS_INT_LINE_PCS1GE_INTERRUPT 0x1480
#define CS4224_PP_LINE_GIGEPCS_INT_LINE_PCS1GE_INTERRUPT_dft 0x0
#define CS4224_PP_LINE_GIGEPCS_INT_LINE_PCS1GE_INTSTATUS 0x1482
#define CS4224_PP_LINE_GIGEPCS_INT_LINE_PCS1GE_INTSTATUS_dft 0x0
#define CS4224_PP_LINE_EGPCS_RX_MODE			  0x14A0
#define CS4224_PP_LINE_EGPCS_RX_MODE_dft		  0x8003
#define CS4224_PP_LINE_EGPCS_RX_INTERRUPT		  0x14A4
#define CS4224_PP_LINE_EGPCS_RX_INTERRUPT_dft	  0x0
#define CS4224_PP_LINE_EGPCS_RX_INTSTATUS		  0x14A6
#define CS4224_PP_LINE_EGPCS_RX_INTSTATUS_dft	  0x0
#define CS4224_PP_LINE_EGPCS_TX_MODE			  0x14B0
#define CS4224_PP_LINE_EGPCS_TX_MODE_dft		  0x8001
#define CS4224_PP_LINE_EGPCS_TX_INTERRUPT		  0x14B5
#define CS4224_PP_LINE_EGPCS_TX_INTERRUPT_dft	  0x0
#define CS4224_PP_LINE_XGPCS_TX_TXCNTRL			  0x14C0
#define CS4224_PP_LINE_XGPCS_TX_TXCNTRL_dft		  0x8002
#define CS4224_PP_LINE_XGPCS_RX_RXCNTRL			  0x14E0
#define CS4224_PP_LINE_XGPCS_RX_RXCNTRL_dft		  0xD000
#define CS4224_PP_LINE_XGPCS_RX_RXSTATUS		  0x14E1
#define CS4224_PP_LINE_XGPCS_RX_RXSTATUS_dft	  0x0
#define CS4224_PP_LINE_XGPCS_RX_RXINT			  0x14E2
#define CS4224_PP_LINE_XGPCS_RX_RXINT_dft		  0x0
#define CS4224_PP_LINE_AN_TX_ENABLE				  0x1500
#define CS4224_PP_LINE_AN_TX_ENABLE_dft			  0x0
#define CS4224_PP_LINE_AN_TX_COMPLETE_STATUS	  0x1505
#define CS4224_PP_LINE_AN_TX_COMPLETE_STATUS_dft  0x0
#define CS4224_PP_LINE_AN_TX_AN_COMPLETE_STATUS_INT 0x1506
#define CS4224_PP_LINE_AN_TX_AN_COMPLETE_STATUS_INT_dft 0x0
#define CS4224_PP_LINE_AN_TX_ADV_ABILITY		  0x150C
#define CS4224_PP_LINE_AN_TX_ADV_ABILITY_dft	  0x0
#define CS4224_PP_LINE_AN_TX_TECH_ABILITY_1		  0x150D
#define CS4224_PP_LINE_AN_TX_TECH_ABILITY_1_dft   0x0
#define CS4224_PP_LINE_AN_TX_BP_STATUS			  0x151B
#define CS4224_PP_LINE_AN_TX_BP_STATUS_dft		  0x1
#define CS4224_PP_LINE_AN_TX_LINK_FAIL_TIMEOUT0   0x1523
#define CS4224_PP_LINE_AN_TX_LINK_FAIL_TIMEOUT0_dft 0x17C8
#define CS4224_PP_LINE_AN_TX_LINK_FAIL_TIMER_THRES1 0x1524
#define CS4224_PP_LINE_AN_TX_LINK_FAIL_TIMER_THRES1_dft 0x3B9
#define CS4224_PP_LINE_AN_TX_LINK_FAIL_TIMER_THRES0 0x1525
#define CS4224_PP_LINE_AN_TX_LINK_FAIL_TIMER_THRES0_dft 0xACA0
#define CS4224_PP_LINE_AN_TX_ABILITY_DETECT_TIMER_ENABLE 0x152A
#define CS4224_PP_LINE_AN_TX_ABILITY_DETECT_TIMER_ENABLE_dft 0x0
#define CS4224_PP_LINE_AN_TX_MAIN_INT			  0x152D
#define CS4224_PP_LINE_AN_TX_MAIN_INT_dft		  0x0
#define CS4224_PP_LINE_AN_TX_MAIN_INTS			  0x152F
#define CS4224_PP_LINE_AN_TX_MAIN_INTS_dft		  0x0
#define CS4224_PP_LINE_AN_TX_TX_AFIFO_INT		  0x1531
#define CS4224_PP_LINE_AN_TX_TX_AFIFO_INT_dft	  0x0
#define CS4224_PP_LINE_AN_TX_ARBITRATOR_STATE	  0x1536
#define CS4224_PP_LINE_AN_TX_ARBITRATOR_STATE_dft 0x0
#define CS4224_PP_LINE_AN_RX_PAGE_RECEIVED		  0x1545
#define CS4224_PP_LINE_AN_RX_PAGE_RECEIVED_dft	  0x0
#define CS4224_PP_LINE_AN_RX_LP_ABILITY_1		  0x1546
#define CS4224_PP_LINE_AN_RX_LP_ABILITY_1_dft	  0x0
#define CS4224_PP_LINE_AN_RX_LP_ABILITY_2		  0x1547
#define CS4224_PP_LINE_AN_RX_LP_ABILITY_2_dft	  0x0
#define CS4224_PP_LINE_AN_RX_MAIN_INT			  0x155A
#define CS4224_PP_LINE_AN_RX_MAIN_INT_dft		  0x0
#define CS4224_PP_LINE_AN_RX_RX_AFIFO_INT		  0x155E
#define CS4224_PP_LINE_AN_RX_RX_AFIFO_INT_dft	  0x0
#define CS4224_PP_LINE_TP_TX_ENABLE				  0x1580
#define CS4224_PP_LINE_TP_TX_ENABLE_dft			  0x0
#define CS4224_PP_LINE_TP_TX_TX_RX_RESET		  0x1581
#define CS4224_PP_LINE_TP_TX_TX_RX_RESET_dft	  0x3
#define CS4224_PP_LINE_TP_TX_BITSWAP			  0x1583
#define CS4224_PP_LINE_TP_TX_BITSWAP_dft		  0x1
#define CS4224_PP_LINE_TP_TX_TRAINING			  0x1586
#define CS4224_PP_LINE_TP_TX_TRAINING_dft		  0x0
#define CS4224_PP_LINE_TP_TX_TRAINING_INT		  0x1588
#define CS4224_PP_LINE_TP_TX_TRAINING_INT_dft	  0x0
#define CS4224_PP_LINE_TP_TX_TRAINING_INTS		  0x158A
#define CS4224_PP_LINE_TP_TX_TRAINING_INTS_dft	  0x0
#define CS4224_PP_LINE_TP_TX_MAX_WAIT_TIMEOUT1	  0x158C
#define CS4224_PP_LINE_TP_TX_MAX_WAIT_TIMEOUT1_dft 0x950
#define CS4224_PP_LINE_TP_TX_MAX_WAIT_TIMEOUT0	  0x158D
#define CS4224_PP_LINE_TP_TX_MAX_WAIT_TIMEOUT0_dft 0x2F90
#define CS4224_PP_LINE_TP_TX_WAIT_TIMEOUT		  0x158E
#define CS4224_PP_LINE_TP_TX_WAIT_TIMEOUT_dft	  0x64
#define CS4224_PP_LINE_TP_TX_ADDITIONAL_FRAMES	  0x158F
#define CS4224_PP_LINE_TP_TX_ADDITIONAL_FRAMES_dft 0x2
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_MAX_LIMIT  0x1590
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_MAX_LIMIT_dft 0x30
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_MAX_LIMIT 0x1591
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_MAX_LIMIT_dft 0x30
#define CS4224_PP_LINE_TP_TX_POST_COEFF_MAX_LIMIT 0x1592
#define CS4224_PP_LINE_TP_TX_POST_COEFF_MAX_LIMIT_dft 0x30
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_MIN_LIMIT  0x1593
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_MIN_LIMIT_dft 0x0
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_MIN_LIMIT 0x1594
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_MIN_LIMIT_dft 0x0
#define CS4224_PP_LINE_TP_TX_POST_COEFF_MIN_LIMIT 0x1595
#define CS4224_PP_LINE_TP_TX_POST_COEFF_MIN_LIMIT_dft 0x0
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_INIT		  0x1596
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_INIT_dft   0x0
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_INIT	  0x1597
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_INIT_dft  0x0
#define CS4224_PP_LINE_TP_TX_POST_COEFF_INIT	  0x1598
#define CS4224_PP_LINE_TP_TX_POST_COEFF_INIT_dft  0x0
#define CS4224_PP_LINE_TP_TX_PRESET_COEFF_OVERRIDE 0x1599
#define CS4224_PP_LINE_TP_TX_PRESET_COEFF_OVERRIDE_dft 0x0
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_PRESET	  0x159A
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_PRESET_dft 0x0
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_PRESET	  0x159B
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_PRESET_dft 0x0
#define CS4224_PP_LINE_TP_TX_POST_COEFF_PRESET	  0x159C
#define CS4224_PP_LINE_TP_TX_POST_COEFF_PRESET_dft 0x0
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_START	  0x159D
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_START_dft  0x5
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_START	  0x159E
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_START_dft 0x23
#define CS4224_PP_LINE_TP_TX_POST_COEFF_START	  0x159F
#define CS4224_PP_LINE_TP_TX_POST_COEFF_START_dft 0x24
#define CS4224_PP_LINE_TP_TX_PRE_COEFF			  0x15A0
#define CS4224_PP_LINE_TP_TX_PRE_COEFF_dft		  0x0
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF			  0x15A1
#define CS4224_PP_LINE_TP_TX_MAIN_COEFF_dft		  0x0
#define CS4224_PP_LINE_TP_TX_POST_COEFF			  0x15A2
#define CS4224_PP_LINE_TP_TX_POST_COEFF_dft		  0x0
#define CS4224_PP_LINE_TP_TX_COEFF_STEP_VALUE	  0x15A3
#define CS4224_PP_LINE_TP_TX_COEFF_STEP_VALUE_dft 0x111
#define CS4224_PP_LINE_TP_TX_LD_COEFF_UPDATE_CTRL 0x15A4
#define CS4224_PP_LINE_TP_TX_LD_COEFF_UPDATE_CTRL_dft 0x0
#define CS4224_PP_LINE_TP_TX_FC_OPTIONS			  0x15A8
#define CS4224_PP_LINE_TP_TX_FC_OPTIONS_dft		  0x0
#define CS4224_PP_LINE_TP_TX_ENCODER_STATE		  0x15A9
#define CS4224_PP_LINE_TP_TX_ENCODER_STATE_dft	  0x0
#define CS4224_PP_LINE_TP_TX_TRAINING_STATE		  0x15AA
#define CS4224_PP_LINE_TP_TX_TRAINING_STATE_dft   0x0
#define CS4224_PP_LINE_TP_TX_MAX_WAIT_TIMER_EN	  0x15AF
#define CS4224_PP_LINE_TP_TX_MAX_WAIT_TIMER_EN_dft 0x1
#define CS4224_PP_LINE_TP_RX_BITSWAP			  0x15C0
#define CS4224_PP_LINE_TP_RX_BITSWAP_dft		  0x1
#define CS4224_PP_LINE_TP_RX_REMOTE_RX_READY	  0x15C1
#define CS4224_PP_LINE_TP_RX_REMOTE_RX_READY_dft  0x113
#define CS4224_PP_LINE_TP_RX_FRAME_LOCK_INT		  0x15C2
#define CS4224_PP_LINE_TP_RX_FRAME_LOCK_INT_dft   0x0
#define CS4224_PP_LINE_TP_RX_FRAME_LOCK_INTS	  0x15C4
#define CS4224_PP_LINE_TP_RX_FRAME_LOCK_INTS_dft  0x0
#define CS4224_PP_LINE_TP_RX_FM_DETECT_STATE	  0x15C9
#define CS4224_PP_LINE_TP_RX_FM_DETECT_STATE_dft  0x0
#define CS4224_PP_LINE_TP_RX_FRAME_LOCK_STATE	  0x15CA
#define CS4224_PP_LINE_TP_RX_FRAME_LOCK_STATE_dft 0x0
#define CS4224_PP_LINE_KR_FEC_TX_RESET			  0x1600
#define CS4224_PP_LINE_KR_FEC_TX_RESET_dft		  0x1
#define CS4224_PP_LINE_KR_FEC_TX_STATUS			  0x1602
#define CS4224_PP_LINE_KR_FEC_TX_STATUS_dft		  0x0
#define CS4224_PP_LINE_KR_FEC_TX_STATS_CONTROL	  0x160A
#define CS4224_PP_LINE_KR_FEC_TX_STATS_CONTROL_dft 0x0
#define CS4224_PP_LINE_KR_FEC_TX_STATS_TX_BLK_TOTAL1 0x160B
#define CS4224_PP_LINE_KR_FEC_TX_STATS_TX_BLK_TOTAL1_dft 0x0
#define CS4224_PP_LINE_KR_FEC_TX_STATS_TX_BLK_TOTAL0 0x160C
#define CS4224_PP_LINE_KR_FEC_TX_STATS_TX_BLK_TOTAL0_dft 0x0
#define CS4224_PP_LINE_KR_FEC_TX_INT			  0x160D
#define CS4224_PP_LINE_KR_FEC_TX_INT_dft		  0x0
#define CS4224_PP_LINE_KR_FEC_RX_RESET			  0x1640
#define CS4224_PP_LINE_KR_FEC_RX_RESET_dft		  0x1
#define CS4224_PP_LINE_KR_FEC_RX_STATUS			  0x1642
#define CS4224_PP_LINE_KR_FEC_RX_STATUS_dft		  0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_CONTROL	  0x1644
#define CS4224_PP_LINE_KR_FEC_RX_STATS_CONTROL_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_TOTAL1 0x1645
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_TOTAL1_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_TOTAL0 0x1646
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_TOTAL0_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_CORR1 0x1647
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_CORR1_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_CORR0 0x1648
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_CORR0_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_UNCORR1 0x1649
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_UNCORR1_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_UNCORR0 0x164A
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BLK_UNCORR0_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ZERO_ERRS1 0x164B
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ZERO_ERRS1_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ZERO_ERRS0 0x164C
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ZERO_ERRS0_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ONE_ERRS1 0x164D
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ONE_ERRS1_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ONE_ERRS0 0x164E
#define CS4224_PP_LINE_KR_FEC_RX_STATS_RX_BIT_ONE_ERRS0_dft 0x0
#define CS4224_PP_LINE_KR_FEC_RX_INT			  0x165F
#define CS4224_PP_LINE_KR_FEC_RX_INT_dft		  0x0
#define CS4224_PP_LINE_MCAN_RESET				  0x1680
#define CS4224_PP_LINE_MCAN_RESET_dft			  0x1
#define CS4224_PP_HOST_HOSTMISC_SOFT_RESET		  0x1800
#define CS4224_PP_HOST_HOSTMISC_SOFT_RESET_dft	  0x2
#define CS4224_PP_HOST_HOSTMISC_MPIF_RESET_DOTREG 0x1801
#define CS4224_PP_HOST_HOSTMISC_MPIF_RESET_DOTREG_dft 0x3
#define CS4224_PP_HOST_HOSTMISC_GIGEPCS_SOFT_RESET 0x1802
#define CS4224_PP_HOST_HOSTMISC_GIGEPCS_SOFT_RESET_dft 0x1
#define CS4224_PP_HOST_HOSTMISC_FUNCEN			  0x1803
#define CS4224_PP_HOST_HOSTMISC_FUNCEN_dft		  0x0
#define CS4224_PP_HOST_HOSTMISC_CLKEN			  0x1804
#define CS4224_PP_HOST_HOSTMISC_CLKEN_dft		  0x0
#define CS4224_PP_HOST_HOSTMISC_MATE_SELECT		  0x1806
#define CS4224_PP_HOST_HOSTMISC_MATE_SELECT_dft   0x0
#define CS4224_PP_HOST_HOSTMISC_MSEQCLKCTRL		  0x1807
#define CS4224_PP_HOST_HOSTMISC_MSEQCLKCTRL_dft   0x4
#define CS4224_PP_HOST_HOSTMISC_OVERRIDE_EN		  0x1810
#define CS4224_PP_HOST_HOSTMISC_OVERRIDE_EN_dft   0x0
#define CS4224_PP_HOST_HOSTMISC_INTERRUPT		  0x1811
#define CS4224_PP_HOST_HOSTMISC_INTERRUPT_dft	  0x0
#define CS4224_PP_HOST_HOSTMISC_INTENABLE		  0x1812
#define CS4224_PP_HOST_HOSTMISC_INTENABLE_dft	  0x0
#define CS4224_PP_HOST_SDS_COMMON_RX0_Config	  0x1820
#define CS4224_PP_HOST_SDS_COMMON_RX0_Config_dft  0x18
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CONFIG  0x1821
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CONFIG_dft 0x4
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CLKDIV_CTRL 0x1823
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CLKDIV_CTRL_dft 0x3005
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CLKOUT_CTRL 0x1824
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CLKOUT_CTRL_dft 0x2FF
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CPA	  0x1827
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_CPA_dft 0x77
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_IBIAS_TUNE 0x1829
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_IBIAS_TUNE_dft 0x4
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_RBIAS_TUNE 0x182A
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_RBIAS_TUNE_dft 0x44
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_SPARE   0x182F
#define CS4224_PP_HOST_SDS_COMMON_SRX0_RX_SPARE_dft 0xE0F0
#define CS4224_PP_HOST_SDS_COMMON_RXVCO0_CONTROL  0x1833
#define CS4224_PP_HOST_SDS_COMMON_RXVCO0_CONTROL_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RXVCO0_ALTCT_STATUS 0x1837
#define CS4224_PP_HOST_SDS_COMMON_RXVCO0_ALTCT_STATUS_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_CONTROL 0x1859
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_CONTROL_dft 0x2098
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTERRUPT 0x185B
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTERRUPT_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTSTATUS 0x185C
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTSTATUS_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTENABLE 0x185D
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTENABLE_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTERRUPTZ 0x185E
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKD0_INTERRUPTZ_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RXELST0_Control 0x186E
#define CS4224_PP_HOST_SDS_COMMON_RXELST0_Control_dft 0x2
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Cfg	  0x186F
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Cfg_dft 0x2000
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Ctrl   0x1870
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Ctrl_dft 0xC
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Count1 0x1871
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Count1_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Count0 0x1872
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_Count0_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_INTERRUPT 0x1873
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_INTERRUPT_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_INTSTATUS 0x1874
#define CS4224_PP_HOST_SDS_COMMON_PRBSCHK0_INTSTATUS_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_RESET	  0x1877
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_RESET_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_EN		  0x1878
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_EN_dft	  0x0
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_NUMERATOR0 0x1879
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_NUMERATOR0_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_NUMERATOR1 0x187A
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_NUMERATOR1_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_NUMERATOR0 0x187D
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_NUMERATOR0_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_NUMERATOR1 0x187E
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_NUMERATOR1_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_WIDTH	  0x1881
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_WIDTH_dft 0xA
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_INTDIV	  0x1882
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_INTDIV_dft 0x1919
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_STAGE_EN  0x1883
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_STAGE_EN_dft 0x408
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD0 0x1884
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD0_dft 0xCCCC
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD1 0x1885
#define CS4224_PP_HOST_SDS_COMMON_RDIVFRAC0_STAGE1PRELOAD1_dft 0xCC
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_STAGE1PRELOAD0 0x1888
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_STAGE1PRELOAD0_dft 0xCCCC
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_STAGE1PRELOAD1 0x1889
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_STAGE1PRELOAD1_dft 0xCC
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_STAGE2PRELOAD0 0x188A
#define CS4224_PP_HOST_SDS_COMMON_COREFRAC0_STAGE2PRELOAD0_dft 0xCCCC
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_DITHER	  0x188D
#define CS4224_PP_HOST_SDS_COMMON_FRAC0_DITHER_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_TX0_Config	  0x188E
#define CS4224_PP_HOST_SDS_COMMON_TX0_Config_dft  0x18
#define CS4224_PP_HOST_SDS_COMMON_STX0_TX_OUTPUT_CTRLA 0x188F
#define CS4224_PP_HOST_SDS_COMMON_STX0_TX_OUTPUT_CTRLA_dft 0x814
#define CS4224_PP_HOST_SDS_COMMON_STX0_TX_OUTPUT_CTRLB 0x1890
#define CS4224_PP_HOST_SDS_COMMON_STX0_TX_OUTPUT_CTRLB_dft 0x4
#define CS4224_PP_HOST_SDS_COMMON_STX0_SQUELCH	  0x1891
#define CS4224_PP_HOST_SDS_COMMON_STX0_SQUELCH_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_STX0_MISC		  0x1892
#define CS4224_PP_HOST_SDS_COMMON_STX0_MISC_dft   0x33
#define CS4224_PP_HOST_SDS_COMMON_PRBSGEN0_Cfg	  0x1896
#define CS4224_PP_HOST_SDS_COMMON_PRBSGEN0_Cfg_dft 0x2000
#define CS4224_PP_HOST_SDS_COMMON_PRBSGEN0_Ctrl   0x1897
#define CS4224_PP_HOST_SDS_COMMON_PRBSGEN0_Ctrl_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_PRBSGEN0_Fixed0_Pattern1 0x1898
#define CS4224_PP_HOST_SDS_COMMON_PRBSGEN0_Fixed0_Pattern1_dft 0x0
#define CS4224_PP_HOST_SDS_COMMON_TXELST0_Control 0x189D
#define CS4224_PP_HOST_SDS_COMMON_TXELST0_Control_dft 0x2
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_CONFIG1 0x18A1
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_CONFIG1_dft 0x4
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_CONFIG2 0x18A2
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_CONFIG2_dft 0x40
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_CONFIG4 0x18A4
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_CONFIG4_dft 0x81F0
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_RTUNE  0x18A5
#define CS4224_PP_HOST_SDS_COMMON_SRX0_AGC_RTUNE_dft 0x4
#define CS4224_PP_HOST_SDS_COMMON_SRX0_DAC_ENB_MSB 0x18A6
#define CS4224_PP_HOST_SDS_COMMON_SRX0_DAC_ENB_MSB_dft 0xD
#define CS4224_PP_HOST_SDS_COMMON_SRX0_DAC_ENB_LSB 0x18A7
#define CS4224_PP_HOST_SDS_COMMON_SRX0_DAC_ENB_LSB_dft 0xDFFF
#define CS4224_PP_HOST_SDS_COMMON_SRX0_DFE_CONFIG 0x18AE
#define CS4224_PP_HOST_SDS_COMMON_SRX0_DFE_CONFIG_dft 0x441
#define CS4224_PP_HOST_SDS_COMMON_SRX0_VCO_CONFIG 0x18B2
#define CS4224_PP_HOST_SDS_COMMON_SRX0_VCO_CONFIG_dft 0x607
#define CS4224_PP_HOST_SDS_COMMON_STX0_DRIVER_CONFIG 0x18B4
#define CS4224_PP_HOST_SDS_COMMON_STX0_DRIVER_CONFIG_dft 0x10
#define CS4224_PP_HOST_SDS_COMMON_STX0_DRIVER_TUNE 0x18B5
#define CS4224_PP_HOST_SDS_COMMON_STX0_DRIVER_TUNE_dft 0x404
#define CS4224_PP_HOST_SDS_COMMON_STX0_DRIVERCML_TUNE 0x18B6
#define CS4224_PP_HOST_SDS_COMMON_STX0_DRIVERCML_TUNE_dft 0x404
#define CS4224_PP_HOST_SDS_COMMON_Int			  0x18BA
#define CS4224_PP_HOST_SDS_COMMON_Int_dft		  0x0
#define CS4224_PP_HOST_SDS_COMMON_IntEn			  0x18BB
#define CS4224_PP_HOST_SDS_COMMON_IntEn_dft		  0x0
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKDi		  0x18C7
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKDi_dft	  0x0
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKDe		  0x18C8
#define CS4224_PP_HOST_SDS_COMMON_RXLOCKDe_dft	  0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_GRAM_CR		  0x1A20
#define CS4224_PP_HOST_SDS_DSP_MSEQ_GRAM_CR_dft   0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_GRAM_D1		  0x1A21
#define CS4224_PP_HOST_SDS_DSP_MSEQ_GRAM_D1_dft   0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_GRAM_D0		  0x1A22
#define CS4224_PP_HOST_SDS_DSP_MSEQ_GRAM_D0_dft   0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_PC_SHADOW	  0x1A23
#define CS4224_PP_HOST_SDS_DSP_MSEQ_PC_SHADOW_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_OPTIONS_SHADOW 0x1A24
#define CS4224_PP_HOST_SDS_DSP_MSEQ_OPTIONS_SHADOW_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_OPTIONS		  0x1A25
#define CS4224_PP_HOST_SDS_DSP_MSEQ_OPTIONS_dft   0x8
#define CS4224_PP_HOST_SDS_DSP_MSEQ_PC			  0x1A28
#define CS4224_PP_HOST_SDS_DSP_MSEQ_PC_dft		  0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_IX			  0x1A29
#define CS4224_PP_HOST_SDS_DSP_MSEQ_IX_dft		  0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_BASE3_INST	  0x1A33
#define CS4224_PP_HOST_SDS_DSP_MSEQ_BASE3_INST_dft 0x3
#define CS4224_PP_HOST_SDS_DSP_MSEQ_ENABLE		  0x1A34
#define CS4224_PP_HOST_SDS_DSP_MSEQ_ENABLE_dft	  0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_POWER_DOWN_LSB 0x1A35
#define CS4224_PP_HOST_SDS_DSP_MSEQ_POWER_DOWN_LSB_dft 0x1E0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_STATUS		  0x1A37
#define CS4224_PP_HOST_SDS_DSP_MSEQ_STATUS_dft	  0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_BANK_SELECTOR 0x1A38
#define CS4224_PP_HOST_SDS_DSP_MSEQ_BANK_SELECTOR_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_SEL	  0x1A39
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_SEL_dft  0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_IN_LSB   0x1A3A
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_IN_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_IN_MSB   0x1A3B
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_IN_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_OUT_LSB  0x1A3C
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_OUT_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_OUT_MSB  0x1A3D
#define CS4224_PP_HOST_SDS_DSP_MSEQ_MAIL_OUT_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_CAL_RX_PHSEL  0x1A65
#define CS4224_PP_HOST_SDS_DSP_MSEQ_CAL_RX_PHSEL_dft 0x20
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SERDES		  0x1A75
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SERDES_dft	  0x30
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE0_LSB	  0x1A80
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE0_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE6_MSB	  0x1A8D
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE6_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE12_LSB   0x1A98
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE12_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE12_MSB   0x1A99
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE12_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE14_LSB   0x1A9C
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE14_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE15_MSB   0x1A9F
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE15_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE20_MSB   0x1AA9
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE20_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE22_LSB   0x1AAC
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE22_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE22_MSB   0x1AAD
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE22_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE24_MSB   0x1AB1
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE24_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE25_LSB   0x1AB2
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE25_LSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE25_MSB   0x1AB3
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE25_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE26_MSB   0x1AB5
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE26_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE28_MSB   0x1AB9
#define CS4224_PP_HOST_SDS_DSP_MSEQ_SPARE28_MSB_dft 0x0
#define CS4224_PP_HOST_SDS_DSP_COEF_SATURATED_INT 0x1B54
#define CS4224_PP_HOST_SDS_DSP_COEF_SATURATED_INT_dft 0x0
#define CS4224_PP_HOST_GIGEPCS_INT_HOST_PCS1GE_INTERRUPT 0x1C80
#define CS4224_PP_HOST_GIGEPCS_INT_HOST_PCS1GE_INTERRUPT_dft 0x0
#define CS4224_PP_HOST_GIGEPCS_INT_HOST_PCS1GE_INTSTATUS 0x1C82
#define CS4224_PP_HOST_GIGEPCS_INT_HOST_PCS1GE_INTSTATUS_dft 0x0
#define CS4224_PP_CLKMON_ING_CLKSEL				  0x1D00
#define CS4224_PP_CLKMON_ING_CLKSEL_dft			  0x7F
#define CS4224_PP_CLKMON_ING_CTRL				  0x1D01
#define CS4224_PP_CLKMON_ING_CTRL_dft			  0x110
#define CS4224_PP_CLKMON_ING_DURATION			  0x1D02
#define CS4224_PP_CLKMON_ING_DURATION_dft		  0x0
#define CS4224_PP_CLKMON_ING_STATUS				  0x1D03
#define CS4224_PP_CLKMON_ING_STATUS_dft			  0x0
#define CS4224_PP_CLKMON_ING_COUNT1				  0x1D04
#define CS4224_PP_CLKMON_ING_COUNT1_dft			  0x0
#define CS4224_PP_CLKMON_ING_COUNT0				  0x1D05
#define CS4224_PP_CLKMON_ING_COUNT0_dft			  0x0
#define CS4224_PP_CLKMON_ING_MINTHRESH1			  0x1D06
#define CS4224_PP_CLKMON_ING_MINTHRESH1_dft		  0x0
#define CS4224_PP_CLKMON_ING_MINTHRESH0			  0x1D07
#define CS4224_PP_CLKMON_ING_MINTHRESH0_dft		  0x0
#define CS4224_PP_CLKMON_ING_MAXTHRESH1			  0x1D08
#define CS4224_PP_CLKMON_ING_MAXTHRESH1_dft		  0x0
#define CS4224_PP_CLKMON_ING_MAXTHRESH0			  0x1D09
#define CS4224_PP_CLKMON_ING_MAXTHRESH0_dft		  0x0
#define CS4224_PP_CLKMON_EGR_CLKSEL				  0x1D10
#define CS4224_PP_CLKMON_EGR_CLKSEL_dft			  0x7F
#define CS4224_PP_CLKMON_EGR_CTRL				  0x1D11
#define CS4224_PP_CLKMON_EGR_CTRL_dft			  0x110
#define CS4224_PP_CLKMON_EGR_DURATION			  0x1D12
#define CS4224_PP_CLKMON_EGR_DURATION_dft		  0x0
#define CS4224_PP_CLKMON_EGR_STATUS				  0x1D13
#define CS4224_PP_CLKMON_EGR_STATUS_dft			  0x0
#define CS4224_PP_CLKMON_EGR_COUNT1				  0x1D14
#define CS4224_PP_CLKMON_EGR_COUNT1_dft			  0x0
#define CS4224_PP_CLKMON_EGR_COUNT0				  0x1D15
#define CS4224_PP_CLKMON_EGR_COUNT0_dft			  0x0
#define CS4224_PP_CLKMON_EGR_MINTHRESH1			  0x1D16
#define CS4224_PP_CLKMON_EGR_MINTHRESH1_dft		  0x0
#define CS4224_PP_CLKMON_EGR_MINTHRESH0			  0x1D17
#define CS4224_PP_CLKMON_EGR_MINTHRESH0_dft		  0x0
#define CS4224_PP_CLKMON_EGR_MAXTHRESH1			  0x1D18
#define CS4224_PP_CLKMON_EGR_MAXTHRESH1_dft		  0x0
#define CS4224_PP_CLKMON_EGR_MAXTHRESH0			  0x1D19
#define CS4224_PP_CLKMON_EGR_MAXTHRESH0_dft		  0x0
#define CS4224_EEPROM_LOADER_STATUS				  0x5001
#define CS4224_EEPROM_LOADER_STATUS_dft			  0x0
#define CS4224_EEPROM_MICRO_ACCESS_CONTROL		  0x5005
#define CS4224_EEPROM_MICRO_ACCESS_CONTROL_dft	  0x0
#define CS4224_EEPROM_MICRO_ACCESS_STATUS		  0x5006
#define CS4224_EEPROM_MICRO_ACCESS_STATUS_dft	  0x0

/* bit masks */
#define CS_BIT0  0x0001
#define CS_BIT1  0x0002
#define CS_BIT2  0x0004
#define CS_BIT3  0x0008
#define CS_BIT4  0x0010
#define CS_BIT5  0x0020
#define CS_BIT6  0x0040
#define CS_BIT7  0x0080
#define CS_BIT8  0x0100
#define CS_BIT9  0x0200
#define CS_BIT10 0x0400
#define CS_BIT11 0x0800
#define CS_BIT12 0x1000
#define CS_BIT13 0x2000
#define CS_BIT14 0x4000
#define CS_BIT15 0x8000

/* bit masks for MSB registers */
#define CS_MSB_BIT16 0x0001
#define CS_MSB_BIT17 0x0002
#define CS_MSB_BIT18 0x0004
#define CS_MSB_BIT19 0x0008
#define CS_MSB_BIT20 0x0010
#define CS_MSB_BIT21 0x0020
#define CS_MSB_BIT22 0x0040
#define CS_MSB_BIT23 0x0080
#define CS_MSB_BIT24 0x0100
#define CS_MSB_BIT25 0x0200
#define CS_MSB_BIT26 0x0400
#define CS_MSB_BIT27 0x0800
#define CS_MSB_BIT28 0x1000
#define CS_MSB_BIT29 0x2000
#define CS_MSB_BIT30 0x4000
#define CS_MSB_BIT31 0x8000

unsigned int CS_ABS(int value);

void *CS_MEMSET(void *p, int c, int n);
void *CS_MEMCPY(void *p, const void *src, int n);
int CS_STRLEN(const char *s);
char *CS_STRCAT(char *dest, const char *source);
char *CS_STRNCPY(char *dest, const char *source, int count);

#define CS_IF_SET(val, mask) (((val) & (mask)) != 0)
#define CS_IF_ALL_SET(val, mask) (((val) & (mask)) == mask)
#define CS_IF_CLR(val, mask) (((val) & (mask)) == 0)
#define CS_SET(val, mask) (((val) | (mask)))
#define CS_CLR(val, mask) (((val) & ~(mask)))
#define CS_TOGGLE(val, mask) (((val) ^ (mask)))

enum e_cs4224_kran_an_status_t {
	CS4224_KRAN_AN_NOT_DONE,
	CS4224_KRAN_AN_DONE,
};

struct cs4224_kran_advertised_config_t_s {
	/* (A4) (4 x 10G) 40G Faceplate/Cable */
	unsigned short tech_cr4;

	/* (A3) (4 x 10G) 40G Backplane */
	unsigned short tech_kr4;

	/* (A2) 10G Backplane */
	unsigned short tech_kr;

	/* (A0) 1G Backplane */
	unsigned short tech_kx;

	/* (A1) (4 x 2.5G) 10G Backplane */
	unsigned short tech_kx4;

	/* (F0) FEC Ability */
	unsigned short f0;

	/* (F1) FEC Requested */
	unsigned short f1;

	/* (C0) Link Partner Pause Ability */
	unsigned short pause_0;

	/* (C1) Link Partner Pause Ability */
	unsigned short pause_1;

	/* (D13) Remote Fault */
	unsigned short rf;
};

struct cs4224_kran_advanced_config_t_s {
	/* Enable the line side fixed-phase override */
	unsigned char phase_or;

	/* Enable the host side fixed-phase override */
	unsigned char hphase_or;

	/* Enable the AN Ability Detect Timeout */
	unsigned char en_adt;

	/* Enable the TP Max Wait Timer */
	unsigned char en_mwt;

	/* Skip Auto-Negotiation */
	unsigned char skip_an;

	/* Skip Training */
	unsigned char skip_tp;

	/* Skip line side Phase Calibration */
	unsigned char skip_phsc;

	/* Enable Link Fail Inhibit Timer */
	unsigned char en_lfit;

	/* Enable AN Retries */
	unsigned char en_retry;

	/* Disable AN start */
	unsigned char dis_start;

	/* Enable DFE Power Savings */
	unsigned char en_pwrsv;

	/* Enable DFE */
	unsigned char en_dfe;

	/* Count Frames with Invalid Markers */
	unsigned char bad_mrkrs;

	/* Disable PCS Sync Checks in Mission Mode */
	unsigned char dis_sync;
	/* Enable the tx squelch control in the egress (host->line) path */
	unsigned char sqlch_egr;

	/* Enable the tx squelch control in the ingress (line->host) path */
	unsigned char sqlch_ing;

	/* Enables the use of the ring oscillator VCO */
	unsigned char ring;

	/* Line side Fixed-phase value, used only when phase_or is TRUE */
	unsigned short  phase_ov;

	/* Host side fixed-phase value, used only when hphase_or is TRUE */
	unsigned short  hphase_ov;

	/* Number of Additional Frames to Send at the Start of SEND_DATA */
	unsigned short  xtra_f;

	/* Iterations to Wait for PCS to Sync (multiply by 2^16) */
	unsigned short  pcs_itr;

	/* 10G LFI Timeout */
	unsigned short  lfi_10g;

	/* TP_TX maximum wait */
	unsigned short  max_wait;

	/* LFI Threshold */
	unsigned short  lfi_thres;

	/* 1G LFI timeout */
	unsigned short  lfi_1g;

	/* Override the LINK_READY wait_timer */
	unsigned short  wait_tmr;

	/* True = Main-cursor incremented to maximum,
	 * False=Main-cursor untouched
	 */
	unsigned char	tpm0;

	/* True = Post-cursor adaptive calibration,
	 * False=Post-cursor incremented to maximum
	 */
	unsigned char	tpm1;

	/* True = Send preset command at start */
	unsigned char	tpm2;

	/* True = Send init command at start */
	unsigned char	tpm3;

	/* True = Force local_rx_ready to True immediately */
	unsigned char	tpm4;

	/* Always set to 'b000 */
	unsigned short	tpm567;

	/* True = Enable pre/main/post Cursor Preset Values */
	unsigned char	preset;

	/* True = Skip Rx data corruption */
	unsigned char	tpm30;

	/* True = Invert Pre & Post cursor orientation (Leeds emulation mode) */
	unsigned char	tpm31;

	/* True = calibrate if we lose lock */
	unsigned char	jmp2cal;

	/* True = reference clock frequency is 106.25Mhz,
	 * set according to rules->ref_clk_rate
	 */
	unsigned char	ref106;

	/* True = two-pass mode for optical links enabled */
	unsigned short two_pass_mode;

	/* True = disable FEC even when FEC is advertized and negotiated */
	unsigned short fec_bypass;

	/* Time to EDC converge in DFE mode, line side,
	 * range 0...0xffff, default 0x0180
	 */
	unsigned short line_t_to_conv_dfe;

	/* Time to EDC converge in DFE mode, host side,
	 * range 0...0xffff, default 0x0240
	 */
	unsigned short host_t_to_conv_dfe;

};

struct cs4224_kran_config_t_s {
	struct cs4224_kran_advertised_config_t_s advertised;
	struct cs4224_kran_advanced_config_t_s   advanced;
};

struct cs4224_kran_results_t_s {
	/* Parallel detect */
	unsigned char	bp_par_detect:1;

	/* (4 x 10G) 40G CR4 capability detect */
	unsigned char	bp_40gcr4:1;

	/* (4 x 10G) 40G KR4 capability detect */
	unsigned char	bp_40gkr4:1;

	/* 10G KR capability detect */
	unsigned char	bp_10gkr:1;

	/* 1G KX capability detect */
	unsigned char	bp_1000kx:1;

	/* (4 x 2.5G) 10G KX4 capability detect */
	unsigned char	bp_10gkx4:1;

	/* FEC capability detect */
	unsigned char	bp_fec:1;

	/* Remote Fault */
	unsigned char	bp_rf:1;

	/* Pause ability */
	unsigned char	bp_pause:3;
};
extern unsigned int cs4224_max_num_ports;

unsigned int CS4224_MAX_NUM_PORTS(void);
unsigned int CS4224_MAX_NUM_SLICES(unsigned int slice);
unsigned int CS4224_MAX_NUM_DIES(unsigned int slice);

#define CS4224_RULE_DISABLED 0xFFFF
#define CS4224_MAX_NUM_CS4223_PORTS   4  /*  4 port duplex	*/
#define CS4224_MAX_NUM_CS4224_PORTS  16  /* 16 port simplex */
#define CS4224_MAX_NUM_CS4343_PORTS   8  /*  8 port duplex	*/
#define CS4224_MAX_NUM_CS4221_PORTS  10  /* 10 port simplex */
#define CS4224_MAX_NUM_CS4227_PORTS   2  /*  2 port duplex	*/
#define CS4224_MAX_NUM_CS4210_PORTS  16  /* 16 port simplex */
#define CS4224_MAX_NUM_CS4341_PORTS   8  /*  8 port duplex */

/* The number of available dies in the device	 */
#define CS4224_MAX_NUM_CS4223_DIES	  1  /*  4 port duplex	*/
#define CS4224_MAX_NUM_CS4224_DIES	  2  /* 16 port simplex */
#define CS4224_MAX_NUM_CS4343_DIES	  2  /*  8 port duplex	*/
#define CS4224_MAX_NUM_CS4221_DIES	  2  /* 10 port simplex */
#define CS4224_MAX_NUM_CS4227_DIES	  1  /*  2 port duplex	*/
#define CS4224_MAX_NUM_CS4210_DIES	  2  /* 16 port simplex */
#define CS4224_MAX_NUM_CS4341_DIES	  2  /*  8 port duplex */

/* The difference between line and host PP registers */
#define CS4224_LINE_TO_HOST_OFFSET	  0x0800

#define CS4224_REF_CLK_156p25 156250 /* kHz */
#define CS4224_REF_CLK_155p52 155520
#define CS4224_REF_CLK_106p25 106250

/* The preferred GLOBAL_MDIO_CONFIG value */
#define CS4224_GLOBAL_MDIO_CONFIG_pref 0x78

/* Required or loaded ucode image bit map */
enum e_cs4224_ucode_image {
	CS4224_UCODE_IMAGE_NONE = 0x0,
	CS4224_UCODE_IMAGE_KR	= 0x1,
	CS4224_UCODE_IMAGE_FC	= 0x2,
	CS4224_UCODE_IMAGE_ANY	= 0x3,
};

/* Hardware ID numbers for the ASIC as defined in Efuse SKU */
enum e_cs4224_hardware_id {
	/* Undefined */
	CS4224_HW_UNDEF  = 0,

	/* 4 port duplex */
	CS4224_HW_CS4223 = 0x0010,

	/* 16 port simplex */
	CS4224_HW_CS4224 = 0x0011,

	/* 8 port duplex */
	CS4224_HW_CS4343 = 0x0012,

	/* 10 port simplex */
	CS4224_HW_CS4221 = 0x0013,

	/* 2 port duplex */
	CS4224_HW_CS4227 = 0x0014,

	/* 16 port simplex, 15G only */
	CS4224_HW_CS4210 = 0x0015,

	/* 8 port duplex, 10G only */
	CS4224_HW_CS4341 = 0x0016
};

/* Pre-defined target applications used
 * with the cs4224_rules_set_default() method
 * to setup default configurations
 */
enum e_cs4224_target_application {
	/* Configure the device for 156.25MHz ref clock, 1.25GHz operation */
	CS4224_TARGET_APPLICATION_1G = 0,

	/* Configure the device for 156.25MHz ref clock, 5GHz operation */
	CS4224_TARGET_APPLICATION_5G,

	/* Configure the device for 156.25MHz ref clock, 7.5GHz operation */
	CS4224_TARGET_APPLICATION_7p5G,

	/* Configure the device for 156.25MHz ref clock, 8GHz operation */
	CS4224_TARGET_APPLICATION_8G,

	/* Configure the device for 156.25MHz ref clock, 8.5GHz operation */
	CS4224_TARGET_APPLICATION_8p5G,

	/* Configure the device for 156.25MHz ref clock, 10.3125GHz operation */
	CS4224_TARGET_APPLICATION_10G,

	/* Configure the device for 156.25MHz ref clock, 15GHz operation */
	CS4224_TARGET_APPLICATION_15G,
	CS4224_TARGET_APPLICATION_10G_KR,
	CS4224_TARGET_APPLICATION_40G_KR,

	/* Configure the device for KR-AN operation */
	CS4224_TARGET_APPLICATION_KRAN,

	/* Configure the device for FC-AN operation */
	CS4224_TARGET_APPLICATION_FCAN,

	/* Configure the device for 106.25MHz refclk, 14.025GHz FC */
	CS4224_TARGET_APPLICATION_16G_FC,

	/* Configure the device for 106.25MHz refclk, 10.51875GHz FC */
	CS4224_TARGET_APPLICATION_10G_FC,

	/* Configure the device for 106.25MHz refclk, 8.5GHz FC */
	CS4224_TARGET_APPLICATION_8G_FC,

	/* Configure the device for 106.25MHz refclk, 4.25GHz FC */
	CS4224_TARGET_APPLICATION_4G_FC,

	/* Configure the device for 106.25MHz refclk, 2.125GHz FC*/
	CS4224_TARGET_APPLICATION_2G_FC,

	/* Configure the device for 106.25MHz refclk, 1.0625GHz FC */
	CS4224_TARGET_APPLICATION_1G_FC,

	/* Configure the device for 156.25MHz refclk, 622.08MHz OC12 */
	CS4224_TARGET_APPLICATION_OC12
};

#define e_cs4224_cfg_sides_t	e_cs4224_datapath_dir_t

/* Data-path direction and side selector */
enum e_cs4224_datapath_dir_t {
	/* Select the Line to Host path (Ingress) */
	CS4224_LINE_RX_TO_HOST_TX_DIR = 1,

	/* Configure the line side */
	CS4224_CFG_LINE_SIDE		  = 1,

	/* Select the Host to Line path (Egress) */
	CS4224_HOST_RX_TO_LINE_TX_DIR = 2,

	/* Configure the host side */
	CS4224_CFG_HOST_SIDE		  = 2,

	/* The channel is simplex; direction is picked automatically by API */
	CS4224_SIMPLEX_DIR = 3,

	/* Configure a simplex slice */
	CS4224_CFG_SIMPLEX = 3,
};

/* The supply voltage for the voltage monitor */
enum e_cs4224_mon_vlt_supply {
	/* 0.9V supply TX */
	CS4224_VLT_SUPPLY_0p9V = 0,

	/* 1.8V supply */
	CS4224_VLT_SUPPLY_1p8V = 1,
};

/* The EDC modes supported by the microcode */
enum e_cs4224_edc_mode {
	/*
	 * Disable the microcode. Does not disable the EDC.
	 *
	 * @{warning,
	 *	  This mode is not recommended and should not be used unless
	 *	  explicitly told to do so by Cortina
	 * }
	 */
	CS_HSIO_EDC_MODE_DISABLED = 0x0001,

	/*
	 * DFE mode meant for CX1 or direct attach compatible cables.
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	  ! Max		  ! Note
	 * - 9.8Gbps  ! <10.6Gbps ! API Optimized range
	 * - 10.6Gbps ! <11.3Gbps ! Optional tuning could be applied
	 * - 11.3Gbps ! <12.5Gbps ! Optional tuning could be applied
	 * }
	 */
	CS_HSIO_EDC_MODE_CX1 = 0x0002,

	/*
	 * Non-DFE mode meant to support low channel loss applications.
	 *
	 * Short for 'short reach'. This mode is suitable for connecting to
	 * SR modules, very short on-board connections, or anything involving
	 * slow data rates.
	 *
	 * @{note,
	 * Although it's a fully adaptive mode, unlike DFE modes receiver tuning
	 * is required to maximize performance. See these rules:
	 *
	 * - rules.rx_if.dplx_line_eq (Duplex devices)
	 * - rules.rx_if.dplx_host_eq (Duplex devices)
	 * - rules.rx_if.splx_eq	  (Simplex devices)
	 * }
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	 ! Max	   ! Note
	 * - 622Mbps ! 15Gbps  ! API Optimized range
	 * }
	 *
	 */
	CS_HSIO_EDC_MODE_SR = 0x0004,

	/*
	 * DFE mode meant to support ZR modules.
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	  ! Max		  ! Note
	 * - 9.8Gbps  ! <10.6Gbps ! API Optimized range
	 * - 10.6Gbps ! <11.3Gbps ! Optional tuning could be applied
	 * - 11.3Gbps ! <12.5Gbps ! Optional tuning could be applied
	 * }
	 */
	CS_HSIO_EDC_MODE_ZR = 0x0008,

	/*
	 * DFE mode meant to support DWDM modules.
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	  ! Max		  ! Note
	 * - 9.8Gbps  ! <10.6Gbps ! API Optimized range
	 * - 10.6Gbps ! <11.3Gbps ! Optional tuning could be applied
	 * - 11.3Gbps ! <12.5Gbps ! Optional tuning could be applied
	 * }
	 */
	CS_HSIO_EDC_MODE_DWDM = 0x0010,

	/*
	 * DFE mode meant to support 9.8 to 12.5G data rates over a backplane.
	 *
	 * @{note,
	 * KR-AN DFE mode is supported through CS_HSIO_EDC_MODE_10G_BP,
	 * see KR-AN programming
	 * examples for more info.
	 * }
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	  ! Max		  ! Note
	 * - 9.8Gbps  ! <10.6Gbps ! API Optimized range
	 * - 10.6Gbps ! <11.3Gbps ! Optional tuning could be applied to improve
	 * - 11.3Gbps ! <12.5Gbps ! Optional tuning could be applied to improve
	 * }
	 */
	CS_HSIO_EDC_MODE_10G_BP = 0x0020,

	/*
	 * DFE mode meant to support 12.5 to 15G data rates over a backplane.
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	  ! Max		! Note
	 * - 12.5Gbps ! <14Gbps ! Optional tuning could be applied.
	 * - 14Gbps   ! 15Gbps	! API optimized range
	 * }
	 */
	CS_HSIO_EDC_MODE_15G_BP = 0x0040,

	/*
	 * DFE mode meant to support 5 to 7.5G data rates over a backplane.
	 *
	 * @{note,
	 * CS_HSIO_EDC_MODE_5G_BP and CS_HSIO_EDC_MODE_7p5G_BP are functionally
	 * equivalent
	 * }
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	 ! Max	   ! Note
	 * - 5.0Gbps ! 7.5Gbps ! API optimized range
	 * }
	 */
	CS_HSIO_EDC_MODE_5G_BP = 0x0080,

	/*
	 * DFE mode meant to support 5 to 7.5G data rates over a backplane.
	 *
	 * @{note,
	 * CS_HSIO_EDC_MODE_5G_BP and CS_HSIO_EDC_MODE_7p5G_BP are functionally
	 * equivalent
	 * }
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	 ! Max	   ! Note
	 * - 5.0Gbps ! 7.5Gbps ! API optimized range
	 * }
	 */
	CS_HSIO_EDC_MODE_7p5G_BP = 0x0100,

	/*
	 * DFE mode meant to support 8 to 8.6G data rates over a backplane.
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	 ! Max	   ! Note
	 * - 8.0Gbps ! 8.6Gbps ! API optimized range
	 * }
	 */
	CS_HSIO_EDC_MODE_8p5G_BP = 0x0200,

	/*
	 * DFE mode for the line side on FC-AN connections.
	 *
	 * @{note,
	 * FC-AN SR/DFE mode on the line side is supported through
	 * CS_HSIO_EDC_MODE_FCAN,
	 * see FC-AN programming examples for more info.
	 * }
	 *
	 * @{table,
	 * -h Supported Data Rates
	 * -s Fibre Channel Rates ! Note
	 * - FC1, FC2, FC4, FC8, FC10, FC16 ! API optimized range
	 * }
	 */
	CS_HSIO_EDC_MODE_FCAN = 0x0400,

	/*
	 * DFE mode meant for very specific 15G backplane applications.
	 *
	 * @{warning,
	 * Do not use unless advised to do so by a Cortina AE.
	 * }
	 */
	CS_HSIO_EDC_MODE_15G_BP_27dB = 0x0800,

	/*
	 * DFE mode meant for Single Mode Fibre with a Long Reach Module (SMLRM)
	 * @{table,
	 * -h Supported Data Rates
	 * -s Min	  ! Max		  ! Note
	 * - 9.8Gbps  ! <10.6Gbps ! API Optimized range
	 * - 10.6Gbps ! <11.3Gbps ! Optional tuning could be applied
	 * - 11.3Gbps ! <12.5Gbps ! Optional tuning could be applied
	 * }
	 */
	CS_HSIO_EDC_MODE_SMLRM = 0x1000
};

/* Settings used to compensate for trace loss on the board */
enum e_cs4224_trace_loss {
	/* For trace loss where trace loss <= 1dB */
	CS_HSIO_TRACE_LOSS_0dB,

	/* For trace loss where trace loss <= 2dB */
	CS_HSIO_TRACE_LOSS_1dB,

	/* For trace loss where 2dB < trace loss <= 3dB */
	CS_HSIO_TRACE_LOSS_2dB,

	/* For trace loss where 3dB < trace loss < 4dB */
	CS_HSIO_TRACE_LOSS_3dB,

	/* For trace loss where 4dB < trace loss <= 5dB */
	CS_HSIO_TRACE_LOSS_4dB,

	/* For trace loss where 5dB < trace loss <= 5.5dB */
	CS_HSIO_TRACE_LOSS_5dB,

	/* For trace loss where trace loss > 5.5dB */
	CS_HSIO_TRACE_LOSS_6dB,

	/* For trace loss where trace loss = 15dB */
	CS_HSIO_TRACE_LOSS_15dB,

	/* For trace loss where trace loss = 27dB */
	CS_HSIO_TRACE_LOSS_27dB,

	/* For CR4 cables */
	CS_HSIO_TRACE_LOSS_CR4,

	/* Special case for no-loss coax cables, for use in the lab */
	CS_HSIO_TRACE_LOSS_LAB,
};

/* Polarity Inversion bit map */
enum e_cs4224_polarity_inv_t {
	/* No polarity inversion */
	CS4224_POLARITY_INV_NONE	  = 0,

	/* Duplex host Tx driver polarity inversion */
	CS4224_POLARITY_INV_DPLX_HOST_TX  = 1 << 0,

	/* Duplex line Tx driver polarity inversion */
	CS4224_POLARITY_INV_DPLX_LINE_TX  = 1 << 1,

	/* Simplex Tx driver polarity inversion */
	CS4224_POLARITY_INV_SPLX_TX	  = 1 << 2,

	/* Duplex host Rx (digital, pre-FEC) polarity inversion */
	CS4224_POLARITY_INV_DPLX_HOST_RX  = 1 << 3,

	/* Duplex line Rx (digital, pre-FEC) polarity inversion */
	CS4224_POLARITY_INV_DPLX_LINE_RX  = 1 << 4,

	/* Simplex Rx (digital, pre-FEC) polarity inversion */
	CS4224_POLARITY_INV_SPLX_RX	  = 1 << 5,

};

/* Determines which microsequencer to stall/un-stall */
enum e_cs4224_mseq_id {
	/* The simplex (line or host) microsequencer */
	CS4224_SPLX_MSEQ	  = 0,

	/* The duplex (line) microsequencer */
	CS4224_DPLX_LINE_MSEQ = 1,

	/* The duplex (host) microsequencer */
	CS4224_DPLX_HOST_MSEQ = 2,
};

/* Protection switch specific actions, note that for digital broadcast switching
 * the 0 refers to the lower slice (even) of the protection pair, slice 1 the
 * higher (odd).
 */
enum e_cs4224_switch_action_t {
	/* disable switch */
	CS4224_SWITCH_DISABLE				   = 0,

	/* Duplex 2x2 switch from slices 0 to 1 and 1 to 0 bi-directionally */
	CS4224_SWITCH_DIGITAL_SWITCH_2x2	   = 1,
	/* Duplex 2x2 switch from slices 0 to 1 and 1 to 0 bi-directionally */
	CS4224_SWITCH_DUPLEX_SWITCH_2x2		   = 1,

	/* Digital broadcast, Rx/Tx on slice 0 to 0 with line Tx only on 1 */
	CS4224_SWITCH_DIGITAL_BROADCAST_0_to_0 = 2,
	/* Duplex broadcast, Rx/Tx on slice 0 to 0 with line Tx only on 1 */
	CS4224_SWITCH_DUPLEX_BROADCAST_0_to_0  = 2,

	/* Digital broadcast, Rx/Tx on slice 1 to 1 with line Tx only on 0 */
	CS4224_SWITCH_DIGITAL_BROADCAST_1_to_1 = 3,
	CS4224_SWITCH_DUPLEX_BROADCAST_1_to_1 = 3,

	/* Digital broadcast, Rx/Tx on slice 0 to 1 with line Tx only on 0 */
	CS4224_SWITCH_DIGITAL_BROADCAST_0_to_1 = 4,
	CS4224_SWITCH_DUPLEX_BROADCAST_0_to_1 = 4,

	/* Digital broadcast, Rx/Tx on slice 1 to 0 with line Tx only on 1 */
	CS4224_SWITCH_DIGITAL_BROADCAST_1_to_0 = 5,
	CS4224_SWITCH_DUPLEX_BROADCAST_1_to_0 = 5,

	/* Simplex 2x2 switch of slice with mate */
	CS4224_SWITCH_SIMPLEX_SWITCH_2x2		= 6,
	/* Analog 2x2 switch of slice with mate */
	CS4224_SWITCH_ANALOG_SWITCH_2x2		   = 6,

	/* Simplex broadcast, transmits on slice and its mate */
	CS4224_SWITCH_SIMPLEX_BROADCAST			= 7,
	/* Analog broadcast, transmits on slice and its mate */
	CS4224_SWITCH_ANALOG_BROADCAST		   = 7,

};

/* The CLKDIV_CTRL, SRX_DDIV_SEL dividers
 * NOTE: There are accidentally two structures like this, the other is below
 */
enum e_cs4224_clkdiv_ddiv_t {
	/* Rx serial clock div by 1 */
	CS4224_CLKDIV_DDIV_BY_1   = 0,

	/* Rx serial clock div by 2 */
	CS4224_CLKDIV_DDIV_BY_2   = 1,

	/* Rx serial clock div by 4 */
	CS4224_CLKDIV_DDIV_BY_4   = 2,

	/* Rx serial clock div by 8 */
	CS4224_CLKDIV_DDIV_BY_8   = 3,

	/* Rx serial clock div by 16 */
	CS4224_CLKDIV_DDIV_BY_16  = 4,

	/* Rx serial clock div by 32 */
	CS4224_CLKDIV_DDIV_BY_32  = 5,

	/* Rx serial clock div by 64 */
	CS4224_CLKDIV_DDIV_BY_64  = 6,

	/* Rx serial clock div by 128 */
	CS4224_CLKDIV_DDIV_BY_128 = 7,

};

/* Divider for the clock rate for receive data path */
enum e_cs4224_ddiv_divide {
	/* Divide by 1 */
	CS4224_DDIV_DIV1 = 0,

	/* Divide by 2 */
	CS4224_DDIV_DIV2 = 1,

	/* Divide by 4 */
	CS4224_DDIV_DIV4 = 2,

	/* Divide by 8 */
	CS4224_DDIV_DIV8 = 3,

	/* Divide by 16 */
	CS4224_DDIV_DIV16 = 4,

	/* Divide by 32 */
	CS4224_DDIV_DIV32 = 5,

	/* Divide by 64 */
	CS4224_DDIV_DIV64 = 6,

	/* Divide by 128 */
	CS4224_DDIV_DIV128 = 7
};

/* The CLKDIV_CTRL, SRX_RDIV_SEL dividers
 * NOTE: There are accidentally two structures like this, the other is below
 */
enum e_cs4224_clkdiv_rdiv_t {
	/* Rx serial clock div by 8 */
	CS4224_CLKDIV_RDIV_BY_8   = 0,

	/* Rx serial clock div by 16 */
	CS4224_CLKDIV_RDIV_BY_16  = 1,

	/* Rx serial clock div by 32 */
	CS4224_CLKDIV_RDIV_BY_32  = 2,

	/* Rx serial clock div by 40 */
	CS4224_CLKDIV_RDIV_BY_40  = 3,

	/* Rx serial clock div by 64 */
	CS4224_CLKDIV_RDIV_BY_64  = 4,

	/* Rx serial clock div by 66 */
	CS4224_CLKDIV_RDIV_BY_66  = 5,

	/* Rx serial clock div by 80 */
	CS4224_CLKDIV_RDIV_BY_80  = 6,

	/* Rx serial clock div by 100 */
	CS4224_CLKDIV_RDIV_BY_100 = 7,

	/* Rx serial clock div by 128 */
	CS4224_CLKDIV_RDIV_BY_128 = 8,
};

/* The serial clock divider to receive PFD
 * for comparison to the clock reference.
 */
enum e_cs4224_rdiv_divide {
	/* Rx serial clock div by 8 */
	CS4224_RDIV_DIV8   = 0,

	/* Rx serial clock div by 16 */
	CS4224_RDIV_DIV16  = 1,

	/* Rx serial clock div by 32 */
	CS4224_RDIV_DIV32  = 2,

	/* Rx serial clock div by 40 */
	CS4224_RDIV_DIV40  = 3,

	/* Rx serial clock div by 64 */
	CS4224_RDIV_DIV64  = 4,

	/* Rx serial clock div by 66 */
	CS4224_RDIV_DIV66  = 5,

	/* Rx serial clock div by 80 */
	CS4224_RDIV_DIV80  = 6,

	/* Rx serial clock div by 100 */
	CS4224_RDIV_DIV100 = 7,

	/* Rx serial clock div by 128 */
	CS4224_RDIV_DIV128 = 8,
};

/* Accumulator width options for the Fractional-N divider */
enum e_cs4224_fracdiv_accumulator_width {
	/* 8 bit accumulator */
	CS4224_FRACDIV_ACCUM_WIDTH_8BIT = 0,

	/* 16 bit accumulator */
	CS4224_FRACDIV_ACCUM_WIDTH_16BIT = 1,

	/* 24 bit accumulator */
	CS4224_FRACDIV_ACCUM_WIDTH_24BIT = 2,

	/* 32 bit accumulator */
	CS4224_FRACDIV_ACCUM_WIDTH_32BIT = 3,
};

/* The clock monitor clock source divider */
enum e_cs4224_clk_mon_clksel_div {
	/* Divide by 1 */
	CS4224_CLK_MON_DIV1  = 0,

	/* Divide by 4 */
	CS4224_CLK_MON_DIV4  = 1,

	/* Divide by 8 */
	CS4224_CLK_MON_DIV8  = 2,

	/* Divide by 16 */
	CS4224_CLK_MON_DIV16 = 3,
};

/* The per-port (pp) clock monitor clock source */
enum e_cs4224_pp_clk_mon_clksel_src {
	/* Clock source is SRX_CLK */
	CS4224_CLK_MON_PP_SRX	 = 0x00 << 2,

	/* Clock source is STX_CLK */
	CS4224_CLK_MON_PP_STX	 = 0x01 << 2,

	/* Clock source is SRX_CLK_LD */
	CS4224_CLK_MON_PP_CLK_LD = 0x02 << 2,

	/* Clock source is SRX_REF_LD */
	CS4224_CLK_MON_PP_REF_LD = 0x03 << 2,

	/* Clock source is SRX_FAST_CLK */
	CS4224_CLK_MON_PP_FAST	 = 0x04 << 2,

	/* Clock source is SRX_DIV32_OUT */
	CS4224_CLK_MON_PP_DIV32  = 0x05 << 2,

	/* Clock source is SRX_DIV80_OUT */
	CS4224_CLK_MON_PP_DIV80  = 0x06 << 2,

	/* Clock source is SRX_DIV64_OUT */
	CS4224_CLK_MON_PP_DIV64  = 0x07 << 2,

	/* Clock source is SRX_MON_CLK */
	CS4224_CLK_MON_PP_MON	 = 0x08 << 2,

	/* Clock source is no clock */
	CS4224_CLK_MON_PP_NO_CLK = 0x10 << 2,

	/* Clock source is reset dividers, output idle */
	CS4224_CLK_MON_PP_RESET  = 0x3f,

};

/* The global (gbl) clock monitor clock source */
enum e_cs4224_gbl_clk_mon_clksel_src {
	/* Clock source is process monitor */
	CS4224_CLK_MON_GBL_PMON   = 0x00 << 2,

	/* Clock source is process monitor divided by 2 */
	CS4224_CLK_MON_GBL_PMOND2 = 0x01 << 2,

	/* Clock source is process monitor divided by 4 */
	CS4224_CLK_MON_GBL_PMOND4 = 0x02 << 2,

	/* Clock source is reference clock */
	CS4224_CLK_MON_GBL_REFCLK = 0x03 << 2,

	/* Clock source is clockless VCO clock */
	CS4224_CLK_MON_GBL_VCO	  = 0x04 << 2,

	/* Clock source is GPIO1 */
	CS4224_CLK_MON_GBL_GPIO1  = 0x06 << 2,

	/* Clock source is GPIO2 */
	CS4224_CLK_MON_GBL_GPIO2  = 0x07 << 2,

	/* Clock source is port pair 0 egress selected clock */
	CS4224_CLK_MON_GBL_PP0EGR = 0x08 << 2,

	/* Clock source is port pair 0 ingress selected clock */
	CS4224_CLK_MON_GBL_PP0ING = 0x09 << 2,

	/* Clock source is port pair 1 egress selected clock */
	CS4224_CLK_MON_GBL_PP1EGR = 0x0a << 2,

	/* Clock source is port pair 1 ingress selected clock */
	CS4224_CLK_MON_GBL_PP1ING = 0x0b << 2,

	/* Clock source is port pair 2 egress selected clock */
	CS4224_CLK_MON_GBL_PP2EGR = 0x0c << 2,

	/* Clock source is port pair 2 ingress selected clock */
	CS4224_CLK_MON_GBL_PP2ING = 0x0d << 2,

	/* Clock source is port pair 3 egress selected clock */
	CS4224_CLK_MON_GBL_PP3EGR = 0x0e << 2,

	/* Clock source is port pair 3 ingress selected clock */
	CS4224_CLK_MON_GBL_PP3ING = 0x0f << 2,

	/* Clock source is no clock */
	CS4224_CLK_MON_GBL_NO_CLK = 0x10 << 2,

	/* Clock source is reset dividers, output idle */
	CS4224_CLK_MON_GBL_RESET  = 0x7f,
};

/* Used to select the driver being configured */
enum e_cs4224_tx_driver_interface {
	/* The host side transmitter */
	CS4224_TX_HOST_INTERFACE  = 0,

	/* The line side transmitter */
	CS4224_TX_LINE_INTERFACE  = 1,

	/* If in simplex mode this automatically
	 * determines the appropriate transmitter for the channel
	 */
	CS4224_TX_SIMPLEX_INTERFACE = 2,
};

/* PCS Monitor Status */
struct cs4224_pcs_monitor_status_t {
	/* PCS monitor reveiver state machine sync status */
	unsigned char sync;

	/* PCS monitor is in a high bit error state (XGPCS only) */
	unsigned int high_ber;
};

/* FEC Statistics */
struct cs4224_fec_stats_t {
	/* Number of FEC blocks transmitted by the line side Tx module */
	unsigned int tx_blk_total;

	/* Number of FEC blocks received (decoded) by the line side Rx module */
	unsigned int rx_blk_total;

	/* Number of FEC blocks successfully corrected by the Rx module */
	unsigned int rx_blk_corr;

	/* Number of FEC blocks unable to be corrected by the Rx module */
	unsigned int rx_blk_uncorr;

	/* Number of zero bit errors detected by the Rx module */
	unsigned int rx_zero_errs;

	/* Number of one bit errors detected by the Rx module */
	unsigned int rx_one_errs;
};

/*
 * Configuration for the per-port (pp) clock monitor
 * Use cs4224_pp_clk_mon_cfg_init() to initialize
 */
struct cs4224_pp_clk_mon_cfg_t {
	/* Select the clock source divider */
	enum e_cs4224_clk_mon_clksel_div clksel_divider;

	/* Select the clock source */
	enum e_cs4224_pp_clk_mon_clksel_src clksel_src;

	/* Start counting flag */
	unsigned char go;

	/* Enable counter to free run	*/
	unsigned char free_run;

	/* Time duration to count */
	unsigned short  duration;

	/* minimum count threshold */
	unsigned int  min_thresh;

	/* maximum count threshold */
	unsigned int  max_thresh;
};

/* Configuration for the global (gbl) clock monitor */
struct cs4224_gbl_clk_mon_cfg_t {
	/* Select the clock source divider */
	enum e_cs4224_clk_mon_clksel_div clksel_divider;

	/* Select the clock source */
	enum e_cs4224_gbl_clk_mon_clksel_src clksel_src;

	/* Start counting flag */
	unsigned char go;

	/* Enable counter to free run	*/
	unsigned char free_run;

	/* Time duration to count */
	unsigned short  duration;

	/* minimum count threshold, 32 bits */
	unsigned short  min_thresh_0;
	unsigned short  min_thresh_1;

	/* maximum count threshold, 32 bits */
	unsigned short  max_thresh_0;
	unsigned short  max_thresh_1;
};

/*
 * This structure is used to store state information
 * that is used when enabling a 2x2 or broadcast
 * switch.
 */
struct cs4224_switch_state_t {
	/* The state of the line SRX0_RX_CLKOUT_CTRL register */
	unsigned short line_srx0_rx_clkout_ctrl;

	/* The state of the host SRX0_RX_CLKOUT_CTRL register */
	unsigned short host_srx0_rx_clkout_ctrl;

	/* The state of the line COMMON_STX0_MISC register */
	unsigned short line_stx0_misc;

	/* The state of the host COMMON_STX0_MISC register */
	unsigned short host_stx0_misc;

	/* The state of the line DSP_MSEQ_POWER_DOWN_LSB register */
	unsigned short line_mseq_power_down;

	/* The state of the host DSP_MSEQ_POWER_DOWN_LSB register */
	unsigned short host_mseq_power_down;

	/* The state of the line STX0_DRIVER_CONFIG register */
	unsigned short line_stx0_driver_config;

	/* The state of the host STX0_DRIVER_CONFIG register */
	unsigned short host_stx0_driver_config;

	/* The state of the line DSP_MSEQ_MAIL_SEL register */
	unsigned short line_dsp_mseq_mail_sel;

	/* The state of the host DSP_MSEQ_MAIL_SEL register */
	unsigned short host_dsp_mseq_mail_sel;

	/* The state of the host SRX0_VCO_CONFIG register */
	unsigned short host_srx0_vco_config;

	/* The state of the host SRX0_AGC_CONFIG1 register */
	unsigned short host_srx0_agc_config1;

	/* The state of the host SRX0_DFE_CONFIG register */
	unsigned short host_srx0_dfe_config;

	/* The state of the line SRX0_RX_CONFIG register */
	unsigned short line_srx0_rx_config;

	/* The state of the host SRX0_RX_CONFIG register */
	unsigned short host_srx0_rx_config;

	/* The state of the line MSEQ_SPARE12_LSB register */
	unsigned short line_spare12_lsb;

	/* The state of the host MSEQ_SPARE12_LSB register */
	unsigned short host_spare12_lsb;

	/* The state of the line MSEQ_SPARE26_LSB register */
	unsigned short line_spare26_lsb;
};

/*
 * This structure is used to maintain device state when
 * managing the duplex 2x2 protection switching. It must
 * be initialized when the switch is first initialized and
 * then gets passed to consecutive API calls to manage
 * the h/w state.
 */
struct cs4224_switch_pair_state_t {
	/*
	 * This flag is used to determine whether or not the
	 * switch state has been initialized. Before activating the
	 * switch for the first time this variable should be set to
	 * FALSE to ensure that the API knows that the state
	 * should be stored.
	 */
	unsigned char initialized;

	/*
	 * This flag is managed by the user to setup the switch in low
	 * latency mode. This bypasses the digital path through
	 * the chip and achieves the lowest possible latency. However
	 * it cannot be used when KR-AN or FC-AN are enabled
	 */
	unsigned char low_latency_switching;

	/*
	 * State space used to manage the two slices of
	 * the switch pair. This is managed automatically
	 * by the API.
	 */
	struct cs4224_switch_state_t slices[2];

	/*
	 * For duplex switching on dual-die devices, write the switch config to
	 * both dies at the same time.
	 *
	 * Ignored for simplex switching. Only supported in superfast methods.
	 * Only relevant for the 8-port duplex devices.
	 *
	 * For which pairs will be set at the same time:
	 *
	 * @{table,
	 * -h Slice pairs that will be set when broadcast is enabled
	 * -s Die 1 ! Die 0
	 * - 0/1 ! 6/7
	 * - 2/3 ! 4/5
	 * }
	 */
	unsigned char broadcast;
};

/* Configuration for the SyncE application */
struct cs4224_rules_synce_config_t {
	/* Enable SyncE */
	unsigned char enable;

	/* The core fracN integer divisor */
	unsigned short divisor;

	/* The core fracN numerator */
	unsigned int numerator;

	/* The clock divider */
	enum e_cs4224_clk_mon_clksel_div clk_divider;

	/* the GPIO to ouput the SyncE signal,
	 * range GPIO1 thru GPIO4 and GPIO_INTERR
	 */
	unsigned char  gpio;

	/* the direction, line Rx or host Rx */
	enum e_cs4224_datapath_dir_t dir;
};

/* Configuration for the CDR frac-N's in the Rx and Tx interfaces */
struct cs4224_rules_fracdiv_config_t {
	/* Enable the fracN block */
	unsigned char enable;

	/* The integer divisor, 8 bits wide */
	unsigned short divisor;

	/* The numerator, 24bits wide */
	unsigned int numerator;

};

/* Configuration rules for trace loss on the Rx or Tx interfaces */
struct cs4224_rules_intf_t {
	/* Trace loss setting */
	enum e_cs4224_trace_loss traceloss;
};

struct cs4224_advanced_rules_t {
	unsigned char phsel_bypass;
	unsigned short phsel_bypass_value;
};

/* Rx interface rules for device initialization */
struct cs4224_rules_rx_if_t {
	/* The EDC mode for the Rx interface (simplex only) */
	enum e_cs4224_edc_mode splx_edc_mode;

	/* The line EDC mode for the Rx interface (duplex only) */
	enum e_cs4224_edc_mode dplx_line_edc_mode;

	/* The host EDC mode for the Rx interface (duplex only) */
	enum e_cs4224_edc_mode dplx_host_edc_mode;

	/* Rx equalization rules (simplex only) */
	struct cs4224_rules_intf_t splx_eq;

	/* Rx line equalization rules (duplex only) */
	struct cs4224_rules_intf_t dplx_line_eq;

	/* Rx host equalization rules (duplex only) */
	struct cs4224_rules_intf_t dplx_host_eq;
};

/* Tx interface rules for device initialization */
struct cs4224_rules_tx_if_t {
	/* Disable the transmitter (simplex only) */
	unsigned char splx_disable;

	/* Disable the line transmitter (duplex only) */
	unsigned char dplx_line_disable;

	/* Disable the host transmitter (duplex only) */
	unsigned char dplx_host_disable;

	/* Tx driver initialization rules (simplex only) */
	struct cs4224_rules_intf_t splx_driver;

	/* Tx line driver initialization rules (duplex only) */
	struct cs4224_rules_intf_t dplx_line_driver;

	/* Tx host driver initialization rules (duplex only) */
	struct cs4224_rules_intf_t dplx_host_driver;

	/* power-down flag */
	unsigned char power_down;
};

/* Divider values for controlling CLKDIV_CTRL register */
struct cs4224_rules_div_config_t {
	/* Enable the manual CLKDIV_CTRL register updates */
	unsigned char enable;

	/* The SRX_RDIV_SEL divider */
	unsigned short rdiv;

	/* The SRX_DDIV_SEL divider */
	unsigned short ddiv;

	/* The SRX_FASTDIV_SEL divider */
	unsigned short fastdiv;
};

/*
 * This structure is used to manage callback functions
 * required during the initialization process.
 */
struct cs4224_callback_t {
	/* Pointer to user data passed back to the callback */
	void *user_data;

	/* Pointer to the callback method */
	void *fcn_ptr;
};

/* KR-AN specific rules */
struct cs4224_rules_kran_t {
	/* The advertised supported datarates,
	 * see enum e_cs4224_kran_data_rates_t
	 */
	unsigned int data_rates;

	/* FEC ability flag (F0) */
	unsigned char fec_ability_f0;

	/* FEC requested flag (F1) */
	unsigned char fec_requested_f1;

	/* Pause ability flag (C0) */
	unsigned char pause_ability_c0;

	/* Pause ability flag (C1) */
	unsigned char pause_ability_c1;

	/* Remote Fault flag (D13) */
	unsigned char remote_fault_d13;

	/* Training enable flag */
	unsigned char allow_training;

	unsigned char wait_for_an_done;

	/* A callback method */
	struct cs4224_callback_t poll_kran_callback;

	/* Internal advanced settings */
	struct cs4224_kran_advanced_config_t_s advanced;
};

enum e_cs4224_fcan_data_rate_t {
	/* 1 GE */
	CS4224_FCAN_DATA_RATE_1G = 0x1,

	/* 2 GE */
	CS4224_FCAN_DATA_RATE_2G = 0X2,

	/* 4 GE */
	CS4224_FCAN_DATA_RATE_4G = 0x4,

	/* 8 GE */
	CS4224_FCAN_DATA_RATE_8G = 0x8,

	/* 16 GE */
	CS4224_FCAN_DATA_RATE_16G = 0x10,

	/* Disabled - the default value for the negotiated_rate
	 * variable to prevent compilation problems
	 */
	CS4224_FCAN_DATA_RATE_DISABLED = 0,
};

enum e_cs4224_fcan_an_status_t {
	/* FC-AN negotiated a data rate */
	CS4224_FCAN_AN_DONE = 0x1,

	/* FC-AN could not negotiate a data rate */
	CS4224_FCAN_AN_NOT_DONE = 0x2,
};

/* FC-AN VCO mode */
enum e_cs4224_fcan_vco_mode_t {
	/* VCO in PD mode (through-timing) */
	CS4224_FCAN_VCO_PD_MODE = 0,

	/* VCO in PFD mode (local-timing) */
	CS4224_FCAN_VCO_PFD_MODE,
};

/* FC-AN advanced rules for debugging */
struct cs4224_fcan_advanced_t {
	/* Set Main tap to Maximum */
	unsigned char enable_tp_main_tap_to_max;

	/* Turn on adaptive post */
	unsigned char enable_tp_adaptive_post;

	/* Send Preset at the begining of training */
	unsigned char enable_tp_send_preset;

	/* Send Init at the begining of training */
	unsigned char enable_tp_send_init;

	/* Force local_rx_ready initial condition */
	unsigned char enable_tp_frc_lcl_rx_ready;

	/* lp_status inital condition */
	unsigned char enable_tp_lp_status;

	/* Send hold inital condition */
	unsigned char enable_tp_send_hold;

	/* SWC in limits initial condition */
	unsigned char enable_tp_swc_in_limits;

	/* Jump to cal.asm during train_taps if LOL */
	unsigned char enable_jmp_to_caldotasm;

	/* Disable FCAN power-savings */
	unsigned char disable_fc_power_savings;

	/* When disabled, PCS sync not monitored on line side, testing only */
	unsigned char disable_pcs_checks;

	/* Enable training to work in the lab with no loss cables */
	unsigned char enable_no_loss;

	/* Start AN immediately after pre-AN config, default is TRUE */
	unsigned char start_an;
};

/* FC-AN specific rules */
struct cs4224_rules_fcan_t {
	unsigned short data_rates;
	struct cs4224_callback_t poll_fcan_callback;
	unsigned char wait_for_an_done;
	enum e_cs4224_fcan_data_rate_t negotiated_rate;
	unsigned char speed_negotiation_support;
	unsigned char training_protocol_support;
	unsigned char fec_capable;
	unsigned char fec_request;
	unsigned char transmitter_fixed;
	struct cs4224_fcan_advanced_t advanced;
};

/*
 * This structure defines the rules used to initialize the
 * device. These rules serve as the high-level configuration
 * switches that a user can adjust to control the behavior
 * of the device(s).
 */
struct cs4224_rules_t {
	enum e_cs4224_target_application application;
	struct cs4224_rules_rx_if_t rx_if;
	struct cs4224_rules_tx_if_t tx_if;
	struct cs4224_rules_fcan_t fcan;
	struct cs4224_rules_kran_t kran;
	int ref_clk_rate;
	struct cs4224_rules_div_config_t clkdiv;
	struct cs4224_rules_fracdiv_config_t fracdiv;
	struct cs4224_rules_synce_config_t synce;
	unsigned char unsquelch_driver;
	unsigned char tx_auto_squelch;
	unsigned char enable_ac_decoupling_caps;
	unsigned char show_debug_info;
	unsigned char enable_power_savings;
	unsigned char enable_fec;
	enum e_cs4224_polarity_inv_t polarity_inv;
	unsigned char enable_die_broadcast;
	struct cs4224_advanced_rules_t advanced;
	unsigned char mseq_dyn_reconfig;
};

/* VCO lock status */
struct cs4224_vco_lock_status_t {
	unsigned char rx_line_lock;
	unsigned char rx_host_lock;
};

/* Struct to define a interface, used for methods that operate on multiple
 * interfaces at a time (cs4224_wait_for_links_ready, etc)
 */
struct cs4224_interface_t {
	unsigned int slice;
	enum e_cs4224_mseq_id mseq_id;
};

typedef int(*cs4224_callback_lock)(unsigned int slice);
typedef int(*cs4224_callback_unlock)(unsigned int slice);

/* Callback methods for implementing h/w locking */
void cs4224_set_callback_for_lock(cs4224_callback_lock callback);
void cs4224_set_callback_for_unlock(cs4224_callback_unlock callback);

void cs4224_reset_static_state(void);
void cs4224_reset_die_static_state(unsigned int die);

unsigned int cs4224_get_die_from_slice(
		unsigned int slice);

int cs4224_reg_get_channel(
		unsigned int slice,
		unsigned int addr,
		unsigned short *data);

unsigned short cs4224_reg_read(
		unsigned int slice,
		unsigned int addr);

int cs4224_reg_set_channel(
		unsigned int channel,
		unsigned int addr,
		unsigned short data);

int cs4224_reg_set_chk_channel(
		unsigned int channel,
		unsigned int addr,
		unsigned short data);

int cs4224_reg_get(
		unsigned int  die,
		unsigned int  addr,
		unsigned short *data);

int cs4224_reg_set(
		unsigned int die,
		unsigned int addr,
		unsigned short data);

int cs4224_lock(
		unsigned int slice);

int cs4224_unlock(
		unsigned int slice);

enum e_cs4224_hardware_id cs4224_hw_id(
		unsigned int slice);

unsigned char cs4224_is_hw_simplex(unsigned int slice);
unsigned char cs4224_is_hw_duplex(unsigned int slice);

int cs4224_mon_volt_read_fixp(
		unsigned int				slice,
		enum e_cs4224_mon_vlt_supply volt_source,
		unsigned int *voltage);

unsigned int cs4224_adj_pp(
		unsigned int slice,
		unsigned short addr);

int cs4224_init_global_timer_fixp(
		unsigned int slice,
		unsigned int ref_clk_freq);

unsigned int cs4224_adj_mseq(
		unsigned int slice,
		unsigned short addr);

int cs4224_simplex_mate_slice(
		unsigned int slice,
		unsigned int *mate);

unsigned char cs4224_line_rx_to_host_tx_dir(
		unsigned int slice);

int cs4224_version(
		char *buffer,
		unsigned int buffer_len);

int cs4224_resync_elsto(
		unsigned int slice,
		unsigned short elsto_reg);

int cs4224_init_vco(
		unsigned int slice,
		unsigned int addr);

int cs4224_slice_change_rate_intf(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t intf,
		struct cs4224_rules_t *rules);

int cs4224_rules_set_default(
		enum e_cs4224_target_application application,
		struct cs4224_rules_t *rules);

int cs4224_slice_enter_operational_state(
		unsigned int slice,
		struct cs4224_rules_t *rules);

int cs4224_get_mseq_id(
		unsigned int slice,
		enum e_cs4224_mseq_id *mseq_id);

unsigned int cs4224_mseq_get_addr_offset(
		unsigned int slice,
		enum e_cs4224_mseq_id mseq);

int cs4224_get_cfg_side(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t *side);

void cs4224_mseq_stall_set_delay(int us);
int cs4224_mseq_stall_get_delay(void);

int cs4224_mseq_stall(
		unsigned int slice,
		enum e_cs4224_mseq_id  mseq_id,
		unsigned char  stall);

int cs4224_mseqs_stall(
		struct cs4224_interface_t interfaces[],
		unsigned short length,
		unsigned char stall);

int cs4224_mseq_enable_power_savings(
		unsigned int		  slice,
		enum e_cs4224_mseq_id  mseq_id,
		unsigned char		  enable);

int cs4224_init_driver_settings(
		unsigned int slice,
		enum e_cs4224_tx_driver_interface intf,
		unsigned short ctrla,
		unsigned short ctrlb);

int cs4224_config_polarity_inv_points(
		unsigned int slice,
		unsigned short inv_points);

int cs4224_enable_polarity_inv(
		unsigned int slice,
		struct cs4224_rules_t *rules);

int cs4224_query_polarity_inv(
		unsigned int slice,
		unsigned short *inv_points);

int cs4224_debug_dump_polarity_inv(
		unsigned int slice);

void cs4224_pp_clk_mon_cfg_init(
		struct cs4224_pp_clk_mon_cfg_t *clk_mon_cfg);

int cs4224_pp_clock_monitor(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t side,
		struct cs4224_pp_clk_mon_cfg_t *clk_mon_cfg);

int cs4224_pp_clock_monitor_freq_fixp(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t side,
		struct cs4224_pp_clk_mon_cfg_t *pp_clk_mon_cfg,
		unsigned int ref_clk_rate,
		unsigned short *freq);

int cs4224_gbl_clock_monitor(
		unsigned int slice,
		struct cs4224_gbl_clk_mon_cfg_t *clk_mon_cfg);

int cs4224_fracdiv_core_init(
		unsigned int slice,
		enum e_cs4224_datapath_dir_t dir,
		unsigned short divisor,
		unsigned int numerator);

int cs4224_fracdiv_cdr_init(
		unsigned int slice,
		enum e_cs4224_datapath_dir_t dir,
		unsigned short divisor,
		unsigned int numerator);

int cs4224_slice_soft_reset(
		unsigned int slice);

int cs4224_slice_soft_reset_intf(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t intf);

int cs4224_mseq_squelch_ctrl(
		unsigned int slice,
		enum e_cs4224_datapath_dir_t dir,
		unsigned char enable);

int cs4224_send_squelch_request(
		unsigned int slice,
		enum e_cs4224_datapath_dir_t dir,
		unsigned char squelch);

int cs4224_squelch_driver(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t side,
		unsigned char squelch);

int cs4224_hard_reset_die(unsigned int die);
int cs4224_hard_reset(unsigned int slice);

void cs4224_debug_ucode_show_version(unsigned int slice);

int cs4224_mux_enable(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t side,
		unsigned char enable);

int cs4224_demux_enable(
		unsigned int slice,
		enum e_cs4224_cfg_sides_t side,
		unsigned char enable);

int cs4224_init_edc_mode_set(
		unsigned int slice,
		struct cs4224_rules_t *rules);

int cs4224_init_edc_mode_intf(
		unsigned int slice,
		struct cs4224_rules_t *rules,
		enum e_cs4224_mseq_id intf);

unsigned char cs4224_is_eeprom_finished(unsigned int die);

int cs4224_wait_for_eeprom_finished(
		unsigned int die,
		unsigned int max_iterations,
		unsigned int ms_delay_between_iterations);

int cs4224_restore_powered_down_regs(unsigned int slice);

int cs4224_slice_power_down(
		unsigned int slice);

int cs4224_save_edc_mode(
		unsigned int slice,
		unsigned short reg_offset,
		enum e_cs4224_edc_mode  edc_mode);

int cs4224_query_edc_mode(
		unsigned int slice,
		enum e_cs4224_mseq_id mseq_id,
		enum e_cs4224_edc_mode *edc_mode);

int cs4224_query_mseq_is_stalled(
		unsigned int slice,
		enum e_cs4224_mseq_id mseq_id,
		unsigned char *stalled);

int cs4224_query_mseq_power_savings(
		unsigned int slice,
		enum e_cs4224_mseq_id mseq_id,
		unsigned char *enabled);

const char *cs4224_translate_edc_mode(enum e_cs4224_edc_mode edc_mode);
const char *cs4224_translate_app_mode(
				enum e_cs4224_target_application app_mode);
const char *cs4224_switch_translate_state(
				enum e_cs4224_switch_action_t state);
const char *cs4224_translate_cfg_side(enum e_cs4224_cfg_sides_t side);
int cs4224_check_rules(unsigned int slice, struct cs4224_rules_t *rules);
unsigned int cs4224_query_data_rate(const struct cs4224_rules_t *rules);

int cs4224_ucode_data_prgm_image(
		unsigned int slice,
		unsigned short microcode[],
		unsigned int len_buffer);

int cs4224_ucode_data_prgm_image_broadcast(
		unsigned int slice,
		unsigned short microcode[],
		unsigned int len_buffer);

void cs4223_glue_phydev_set(struct phy_device *phydev);

#endif /* __CORTINA_API_H_ */