raspberrypi-linux /drivers/usb/host/dwc_otg/doc/html/dwc__otg__cfi_8c-source.html

Language HTML Lines 1725
MD5 Hash e51da8899b86c7babf080e9dc5e557cf
Repository https://bitbucket.org/agherzan/raspberrypi-linux.git View Raw File
   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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>DesignWare USB 2.0 OTG Controller (DWC_otg) Device Driver: dwc_otg_cfi.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<h1>dwc_otg_cfi.c</h1><a href="dwc__otg__cfi_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ==========================================================================</span>
<a name="l00002"></a>00002 <span class="comment"> * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,</span>
<a name="l00003"></a>00003 <span class="comment"> * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless</span>
<a name="l00004"></a>00004 <span class="comment"> * otherwise expressly agreed to in writing between Synopsys and you.</span>
<a name="l00005"></a>00005 <span class="comment"> * </span>
<a name="l00006"></a>00006 <span class="comment"> * The Software IS NOT an item of Licensed Software or Licensed Product under</span>
<a name="l00007"></a>00007 <span class="comment"> * any End User Software License Agreement or Agreement for Licensed Product</span>
<a name="l00008"></a>00008 <span class="comment"> * with Synopsys or any supplement thereto. You are permitted to use and</span>
<a name="l00009"></a>00009 <span class="comment"> * redistribute this Software in source and binary forms, with or without</span>
<a name="l00010"></a>00010 <span class="comment"> * modification, provided that redistributions of source code must retain this</span>
<a name="l00011"></a>00011 <span class="comment"> * notice. You may not view, use, disclose, copy or distribute this file or</span>
<a name="l00012"></a>00012 <span class="comment"> * any information contained herein except pursuant to this license grant from</span>
<a name="l00013"></a>00013 <span class="comment"> * Synopsys. If you do not agree with this notice, including the disclaimer</span>
<a name="l00014"></a>00014 <span class="comment"> * below, then you are not authorized to use the Software.</span>
<a name="l00015"></a>00015 <span class="comment"> * </span>
<a name="l00016"></a>00016 <span class="comment"> * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS</span>
<a name="l00017"></a>00017 <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
<a name="l00018"></a>00018 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
<a name="l00019"></a>00019 <span class="comment"> * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,</span>
<a name="l00020"></a>00020 <span class="comment"> * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span>
<a name="l00021"></a>00021 <span class="comment"> * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR</span>
<a name="l00022"></a>00022 <span class="comment"> * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span>
<a name="l00023"></a>00023 <span class="comment"> * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
<a name="l00024"></a>00024 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
<a name="l00025"></a>00025 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH</span>
<a name="l00026"></a>00026 <span class="comment"> * DAMAGE.</span>
<a name="l00027"></a>00027 <span class="comment"> * ========================================================================== */</span>
<a name="l00028"></a>00028 
<a name="l00034"></a>00034 <span class="preprocessor">#ifdef DWC_UTE_CFI</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="dwc__otg__pcd_8h.html">dwc_otg_pcd.h</a>"</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="dwc__otg__cfi_8h.html">dwc_otg_cfi.h</a>"</span>
<a name="l00038"></a>00038 
<a name="l00040"></a>00040 <span class="preprocessor">#define DWC_CONSTANT_CPU_TO_LE16(x) (x)</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00042"></a>00042 <span class="keyword">extern</span> <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep_t</a> *<a class="code" href="dwc__otg__pcd__intr_8c.html#3c351d7f51d6242296d6ea3bb1a9775c">get_ep_by_addr</a>(<a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd_t</a> * pcd, u16 wIndex);
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_core_features_buf(uint8_t * buf, uint16_t buflen);
<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_get_feature_value(uint8_t * buf, uint16_t buflen,
<a name="l00046"></a>00046                                  <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00047"></a>00047                                  <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *ctrl_req);
<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_set_feature_value(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd);
<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_get_sg_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00050"></a>00050                              <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req);
<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_get_concat_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00052"></a>00052                                  <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req);
<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_get_align_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00054"></a>00054                                 <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req);
<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_preproc_reset(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00056"></a>00056                              <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req);
<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_free_ep_bs_dyn_data(<a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep);
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="keyword">static</span> uint16_t get_dfifo_size(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if);
<a name="l00060"></a>00060 <span class="keyword">static</span> int32_t get_rxfifo_size(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if, uint16_t wValue);
<a name="l00061"></a>00061 <span class="keyword">static</span> int32_t get_txfifo_size(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, uint16_t wValue);
<a name="l00062"></a>00062 
<a name="l00063"></a>00063 <span class="keyword">static</span> uint8_t resize_fifos(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if);
<a name="l00064"></a>00064 
<a name="l00066"></a>00066 <span class="keyword">static</span> <a class="code" href="structcfi__all__features__header.html">cfi_all_features_header_t</a> all_props_desc_header = {
<a name="l00067"></a>00067         .wVersion = DWC_CONSTANT_CPU_TO_LE16(0x100),
<a name="l00068"></a>00068         .wCoreID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__cfi__common_8h.html#4b0c4a003085148bef609d81fa3c1589">CFI_CORE_ID_OTG</a>),
<a name="l00069"></a>00069         .wNumFeatures = DWC_CONSTANT_CPU_TO_LE16(9),
<a name="l00070"></a>00070 };
<a name="l00071"></a>00071 
<a name="l00073"></a>00073 <span class="keyword">static</span> <a class="code" href="structcfi__feature__desc__header.html">cfi_feature_desc_header_t</a> prop_descs[] = {
<a name="l00074"></a>00074 
<a name="l00075"></a>00075         <span class="comment">/* FT_ID_DMA_MODE */</span>
<a name="l00076"></a>00076         {
<a name="l00077"></a>00077          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#0e196868939f6bbf0d157868bfc90208">FT_ID_DMA_MODE</a>),
<a name="l00078"></a>00078          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00079"></a>00079          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(1),
<a name="l00080"></a>00080          },
<a name="l00081"></a>00081 
<a name="l00082"></a>00082         <span class="comment">/* FT_ID_DMA_BUFFER_SETUP */</span>
<a name="l00083"></a>00083         {
<a name="l00084"></a>00084          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#98840b45640251bfafa3481260aef889">FT_ID_DMA_BUFFER_SETUP</a>),
<a name="l00085"></a>00085          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00086"></a>00086          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(6),
<a name="l00087"></a>00087          },
<a name="l00088"></a>00088 
<a name="l00089"></a>00089         <span class="comment">/* FT_ID_DMA_BUFF_ALIGN */</span>
<a name="l00090"></a>00090         {
<a name="l00091"></a>00091          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#9335284cd4dae01f4bc0da7cb89d5ef4">FT_ID_DMA_BUFF_ALIGN</a>),
<a name="l00092"></a>00092          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00093"></a>00093          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(2),
<a name="l00094"></a>00094          },
<a name="l00095"></a>00095 
<a name="l00096"></a>00096         <span class="comment">/* FT_ID_DMA_CONCAT_SETUP */</span>
<a name="l00097"></a>00097         {
<a name="l00098"></a>00098          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#779a11db5843dd058581d93c8232bd7c">FT_ID_DMA_CONCAT_SETUP</a>),
<a name="l00099"></a>00099          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00100"></a>00100          <span class="comment">//.wDataLength  = DWC_CONSTANT_CPU_TO_LE16(6),</span>
<a name="l00101"></a>00101          },
<a name="l00102"></a>00102 
<a name="l00103"></a>00103         <span class="comment">/* FT_ID_DMA_CIRCULAR */</span>
<a name="l00104"></a>00104         {
<a name="l00105"></a>00105          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#8db5bfce321e02d42b742e9deedfa665">FT_ID_DMA_CIRCULAR</a>),
<a name="l00106"></a>00106          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00107"></a>00107          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(6),
<a name="l00108"></a>00108          },
<a name="l00109"></a>00109 
<a name="l00110"></a>00110         <span class="comment">/* FT_ID_THRESHOLD_SETUP */</span>
<a name="l00111"></a>00111         {
<a name="l00112"></a>00112          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#bcc99a9e5a0b15b4212d88bd9c610647">FT_ID_THRESHOLD_SETUP</a>),
<a name="l00113"></a>00113          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00114"></a>00114          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(6),
<a name="l00115"></a>00115          },
<a name="l00116"></a>00116 
<a name="l00117"></a>00117         <span class="comment">/* FT_ID_DFIFO_DEPTH */</span>
<a name="l00118"></a>00118         {
<a name="l00119"></a>00119          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#54b879727edcb06acdd11968ec60d249">FT_ID_DFIFO_DEPTH</a>),
<a name="l00120"></a>00120          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#45ffc2183d956983ca297033f9e527af">CFI_FEATURE_ATTR_RO</a>,
<a name="l00121"></a>00121          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(2),
<a name="l00122"></a>00122          },
<a name="l00123"></a>00123 
<a name="l00124"></a>00124         <span class="comment">/* FT_ID_TX_FIFO_DEPTH */</span>
<a name="l00125"></a>00125         {
<a name="l00126"></a>00126          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#a3a67b679a59c5279370bbf69f114cb6">FT_ID_TX_FIFO_DEPTH</a>),
<a name="l00127"></a>00127          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00128"></a>00128          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(2),
<a name="l00129"></a>00129          },
<a name="l00130"></a>00130 
<a name="l00131"></a>00131         <span class="comment">/* FT_ID_RX_FIFO_DEPTH */</span>
<a name="l00132"></a>00132         {
<a name="l00133"></a>00133          .wFeatureID = DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__otg__cfi_8h.html#42b7c98c105de1f9399786a3419e7e20">FT_ID_RX_FIFO_DEPTH</a>),
<a name="l00134"></a>00134          .bmAttributes = <a class="code" href="dwc__cfi__common_8h.html#a4536fb9c1314c2f90a93cfcd082dbb9">CFI_FEATURE_ATTR_RW</a>,
<a name="l00135"></a>00135          .wDataLength = DWC_CONSTANT_CPU_TO_LE16(2),
<a name="l00136"></a>00136          }
<a name="l00137"></a>00137 };
<a name="l00138"></a>00138 
<a name="l00140"></a>00140 <a class="code" href="structcfi__string.html">cfi_string_t</a> prop_name_table[] = {
<a name="l00141"></a>00141         {<a class="code" href="dwc__otg__cfi_8h.html#0e196868939f6bbf0d157868bfc90208">FT_ID_DMA_MODE</a>, <span class="stringliteral">"dma_mode"</span>},
<a name="l00142"></a>00142         {<a class="code" href="dwc__otg__cfi_8h.html#98840b45640251bfafa3481260aef889">FT_ID_DMA_BUFFER_SETUP</a>, <span class="stringliteral">"buffer_setup"</span>},
<a name="l00143"></a>00143         {<a class="code" href="dwc__otg__cfi_8h.html#9335284cd4dae01f4bc0da7cb89d5ef4">FT_ID_DMA_BUFF_ALIGN</a>, <span class="stringliteral">"buffer_align"</span>},
<a name="l00144"></a>00144         {<a class="code" href="dwc__otg__cfi_8h.html#779a11db5843dd058581d93c8232bd7c">FT_ID_DMA_CONCAT_SETUP</a>, <span class="stringliteral">"concat_setup"</span>},
<a name="l00145"></a>00145         {<a class="code" href="dwc__otg__cfi_8h.html#8db5bfce321e02d42b742e9deedfa665">FT_ID_DMA_CIRCULAR</a>, <span class="stringliteral">"buffer_circular"</span>},
<a name="l00146"></a>00146         {<a class="code" href="dwc__otg__cfi_8h.html#bcc99a9e5a0b15b4212d88bd9c610647">FT_ID_THRESHOLD_SETUP</a>, <span class="stringliteral">"threshold_setup"</span>},
<a name="l00147"></a>00147         {<a class="code" href="dwc__otg__cfi_8h.html#54b879727edcb06acdd11968ec60d249">FT_ID_DFIFO_DEPTH</a>, <span class="stringliteral">"dfifo_depth"</span>},
<a name="l00148"></a>00148         {<a class="code" href="dwc__otg__cfi_8h.html#a3a67b679a59c5279370bbf69f114cb6">FT_ID_TX_FIFO_DEPTH</a>, <span class="stringliteral">"txfifo_depth"</span>},
<a name="l00149"></a>00149         {<a class="code" href="dwc__otg__cfi_8h.html#42b7c98c105de1f9399786a3419e7e20">FT_ID_RX_FIFO_DEPTH</a>, <span class="stringliteral">"rxfifo_depth"</span>},
<a name="l00150"></a>00150         {}
<a name="l00151"></a>00151 };
<a name="l00152"></a>00152 
<a name="l00153"></a>00153 <span class="comment">/************************************************************************/</span>
<a name="l00154"></a>00154 
<a name="l00160"></a>00160 <span class="keyword">const</span> uint8_t *get_prop_name(uint16_t prop_id, <span class="keywordtype">int</span> *len)
<a name="l00161"></a>00161 {
<a name="l00162"></a>00162         <a class="code" href="structcfi__string.html">cfi_string_t</a> *pstr;
<a name="l00163"></a>00163         *len = 0;
<a name="l00164"></a>00164 
<a name="l00165"></a>00165         <span class="keywordflow">for</span> (pstr = prop_name_table; pstr &amp;&amp; pstr-&gt;<a class="code" href="structcfi__string.html#c852efd76029880787738fb474dd486e">s</a>; pstr++) {
<a name="l00166"></a>00166                 <span class="keywordflow">if</span> (pstr-&gt;<a class="code" href="structcfi__string.html#dc88ed81d4ff35c7a1c837708659afea">id</a> == prop_id) {
<a name="l00167"></a>00167                         *len = DWC_STRLEN(pstr-&gt;<a class="code" href="structcfi__string.html#c852efd76029880787738fb474dd486e">s</a>);
<a name="l00168"></a>00168                         <span class="keywordflow">return</span> pstr-&gt;<a class="code" href="structcfi__string.html#c852efd76029880787738fb474dd486e">s</a>;
<a name="l00169"></a>00169                 }
<a name="l00170"></a>00170         }
<a name="l00171"></a>00171         <span class="keywordflow">return</span> NULL;
<a name="l00172"></a>00172 }
<a name="l00173"></a>00173 
<a name="l00179"></a>00179 <span class="keywordtype">int</span> cfi_setup(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *ctrl)
<a name="l00180"></a>00180 {
<a name="l00181"></a>00181         <span class="keywordtype">int</span> retval = 0;
<a name="l00182"></a>00182         <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep_t</a> *ep = NULL;
<a name="l00183"></a>00183         <a class="code" href="structcfiobject.html">cfiobject_t</a> *cfi = pcd-&gt;cfi;
<a name="l00184"></a>00184         <span class="keyword">struct </span><a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if</a> *coreif = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd);
<a name="l00185"></a>00185         uint16_t wLen = DWC_LE16_TO_CPU(&amp;ctrl-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#60d71d1239e46e787f0b4c626de7c769">wLength</a>);
<a name="l00186"></a>00186         uint16_t wValue = DWC_LE16_TO_CPU(&amp;ctrl-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a>);
<a name="l00187"></a>00187         uint16_t wIndex = DWC_LE16_TO_CPU(&amp;ctrl-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#984c95bd61e8d1120cd935bcbc5d7134">wIndex</a>);
<a name="l00188"></a>00188         uint32_t regaddr = 0;
<a name="l00189"></a>00189         uint32_t regval = 0;
<a name="l00190"></a>00190 
<a name="l00191"></a>00191         <span class="comment">/* Save this Control Request in the CFI object. </span>
<a name="l00192"></a>00192 <span class="comment">         * The data field will be assigned in the data stage completion CB function.</span>
<a name="l00193"></a>00193 <span class="comment">         */</span>
<a name="l00194"></a>00194         cfi-&gt;<a class="code" href="structcfiobject.html#a86c33aef2a521a27ca515bb7397dd34">ctrl_req</a> = *ctrl;
<a name="l00195"></a>00195         cfi-&gt;<a class="code" href="structcfiobject.html#a86c33aef2a521a27ca515bb7397dd34">ctrl_req</a>.<a class="code" href="structcfi__usb__ctrlrequest.html#5b3865e9cb2c0fcf373b1c862a63c180">data</a> = NULL;
<a name="l00196"></a>00196 
<a name="l00197"></a>00197         cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 0;
<a name="l00198"></a>00198         cfi-&gt;<a class="code" href="structcfiobject.html#8d35a323dcd29a1c9d1a8568bd514c3b">need_status_in_complete</a> = 0;
<a name="l00199"></a>00199 
<a name="l00200"></a>00200         <span class="keywordflow">switch</span> (ctrl-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#b3083f525fa9bb97e41364418daee3fa">bRequest</a>) {
<a name="l00201"></a>00201         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#b206fe3fb25aa96547a4bc0e47a864c6">VEN_CORE_GET_FEATURES</a>:
<a name="l00202"></a>00202                 retval = cfi_core_features_buf(cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>, <a class="code" href="dwc__otg__cfi_8h.html#34582b9ef366f4c0e8ea24aa2388e829">CFI_IN_BUF_LEN</a>);
<a name="l00203"></a>00203                 <span class="keywordflow">if</span> (retval &gt;= 0) {
<a name="l00204"></a>00204                         <span class="comment">//dump_msg(cfi-&gt;buf_in.buf, retval);</span>
<a name="l00205"></a>00205                         ep = &amp;pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#14f4f2a41d1305fdc0ec1806d119da89">ep0</a>;
<a name="l00206"></a>00206 
<a name="l00207"></a>00207                         retval = <a class="code" href="dwc__otg__cfi_8h.html#7c9949b9e692a8360832aedfa1843657">min</a>((uint16_t) retval, wLen);
<a name="l00208"></a>00208                         <span class="comment">/* Transfer this buffer to the host through the EP0-IN EP */</span>
<a name="l00209"></a>00209                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b40ce70422b6d105a855a8df4b33d45d">dma_addr</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>;
<a name="l00210"></a>00210                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#d0cda8ded2e5142d9a1c9c17efc5812f">start_xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00211"></a>00211                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#97fa9bf5c31ba734d54f70e6fe6ae8eb">xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00212"></a>00212                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a> = retval;
<a name="l00213"></a>00213                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#23d4871510b5bcb54fbf0674d8f122bd">xfer_count</a> = 0;
<a name="l00214"></a>00214                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a> = 0;
<a name="l00215"></a>00215                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#5a218f200cff0491b735f43fed5176bf">total_len</a> = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a>;
<a name="l00216"></a>00216 
<a name="l00217"></a>00217                         pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#2c8be11c3b9c7cd02684348eb028aeb5">ep0_pending</a> = 1;
<a name="l00218"></a>00218                         <a class="code" href="dwc__otg__cil_8c.html#ee4989b24826b2a6592535282853e556">dwc_otg_ep0_start_transfer</a>(coreif, &amp;ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>);
<a name="l00219"></a>00219                 }
<a name="l00220"></a>00220                 retval = 0;
<a name="l00221"></a>00221                 <span class="keywordflow">break</span>;
<a name="l00222"></a>00222 
<a name="l00223"></a>00223         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#22bf207e476d086391240b18aacc0314">VEN_CORE_GET_FEATURE</a>:
<a name="l00224"></a>00224                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_GET_FEATURE\n"</span>);
<a name="l00225"></a>00225                 retval = cfi_get_feature_value(cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>, <a class="code" href="dwc__otg__cfi_8h.html#34582b9ef366f4c0e8ea24aa2388e829">CFI_IN_BUF_LEN</a>,
<a name="l00226"></a>00226                                                pcd, ctrl);
<a name="l00227"></a>00227                 <span class="keywordflow">if</span> (retval &gt;= 0) {
<a name="l00228"></a>00228                         ep = &amp;pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#14f4f2a41d1305fdc0ec1806d119da89">ep0</a>;
<a name="l00229"></a>00229 
<a name="l00230"></a>00230                         retval = <a class="code" href="dwc__otg__cfi_8h.html#7c9949b9e692a8360832aedfa1843657">min</a>((uint16_t) retval, wLen);
<a name="l00231"></a>00231                         <span class="comment">/* Transfer this buffer to the host through the EP0-IN EP */</span>
<a name="l00232"></a>00232                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b40ce70422b6d105a855a8df4b33d45d">dma_addr</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>;
<a name="l00233"></a>00233                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#d0cda8ded2e5142d9a1c9c17efc5812f">start_xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00234"></a>00234                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#97fa9bf5c31ba734d54f70e6fe6ae8eb">xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00235"></a>00235                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a> = retval;
<a name="l00236"></a>00236                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#23d4871510b5bcb54fbf0674d8f122bd">xfer_count</a> = 0;
<a name="l00237"></a>00237                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a> = 0;
<a name="l00238"></a>00238                         ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#5a218f200cff0491b735f43fed5176bf">total_len</a> = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a>;
<a name="l00239"></a>00239 
<a name="l00240"></a>00240                         pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#2c8be11c3b9c7cd02684348eb028aeb5">ep0_pending</a> = 1;
<a name="l00241"></a>00241                         <a class="code" href="dwc__otg__cil_8c.html#ee4989b24826b2a6592535282853e556">dwc_otg_ep0_start_transfer</a>(coreif, &amp;ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>);
<a name="l00242"></a>00242                 }
<a name="l00243"></a>00243                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_GET_FEATURE=%d\n"</span>, retval);
<a name="l00244"></a>00244                 <a class="code" href="dwc__otg__cfi_8h.html#8d8df6d136115ec977eb6bf20148547a">dump_msg</a>(cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>, retval);
<a name="l00245"></a>00245                 <span class="keywordflow">break</span>;
<a name="l00246"></a>00246 
<a name="l00247"></a>00247         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#ee7fb610a7fb2437df3425e2330e9d39">VEN_CORE_SET_FEATURE</a>:
<a name="l00248"></a>00248                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_SET_FEATURE\n"</span>);
<a name="l00249"></a>00249                 <span class="comment">/* Set up an XFER to get the data stage of the control request,</span>
<a name="l00250"></a>00250 <span class="comment">                 * which is the new value of the feature to be modified.</span>
<a name="l00251"></a>00251 <span class="comment">                 */</span>
<a name="l00252"></a>00252                 ep = &amp;pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#14f4f2a41d1305fdc0ec1806d119da89">ep0</a>;
<a name="l00253"></a>00253                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b882b6b7c857100ed20600e94ea37760">is_in</a> = 0;
<a name="l00254"></a>00254                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b40ce70422b6d105a855a8df4b33d45d">dma_addr</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>;
<a name="l00255"></a>00255                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#d0cda8ded2e5142d9a1c9c17efc5812f">start_xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00256"></a>00256                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#97fa9bf5c31ba734d54f70e6fe6ae8eb">xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00257"></a>00257                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a> = wLen;
<a name="l00258"></a>00258                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#23d4871510b5bcb54fbf0674d8f122bd">xfer_count</a> = 0;
<a name="l00259"></a>00259                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a> = 0;
<a name="l00260"></a>00260                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#5a218f200cff0491b735f43fed5176bf">total_len</a> = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a>;
<a name="l00261"></a>00261 
<a name="l00262"></a>00262                 pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#2c8be11c3b9c7cd02684348eb028aeb5">ep0_pending</a> = 1;
<a name="l00263"></a>00263                 <span class="comment">/* Read the control write's data stage */</span>
<a name="l00264"></a>00264                 <a class="code" href="dwc__otg__cil_8c.html#ee4989b24826b2a6592535282853e556">dwc_otg_ep0_start_transfer</a>(coreif, &amp;ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>);
<a name="l00265"></a>00265                 retval = 0;
<a name="l00266"></a>00266                 <span class="keywordflow">break</span>;
<a name="l00267"></a>00267 
<a name="l00268"></a>00268         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#f7551c9e324871e8258dacc4f4467846">VEN_CORE_RESET_FEATURES</a>:
<a name="l00269"></a>00269                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_RESET_FEATURES\n"</span>);
<a name="l00270"></a>00270                 cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 1;
<a name="l00271"></a>00271                 cfi-&gt;<a class="code" href="structcfiobject.html#8d35a323dcd29a1c9d1a8568bd514c3b">need_status_in_complete</a> = 1;
<a name="l00272"></a>00272                 retval = cfi_preproc_reset(pcd, ctrl);
<a name="l00273"></a>00273                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_RESET_FEATURES = (%d)\n"</span>, retval);
<a name="l00274"></a>00274                 <span class="keywordflow">break</span>;
<a name="l00275"></a>00275 
<a name="l00276"></a>00276         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#1d1302d0d167f7c9580878fbfff847d4">VEN_CORE_ACTIVATE_FEATURES</a>:
<a name="l00277"></a>00277                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_ACTIVATE_FEATURES\n"</span>);
<a name="l00278"></a>00278                 <span class="keywordflow">break</span>;
<a name="l00279"></a>00279 
<a name="l00280"></a>00280         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#8d4bf92524d3e5fd4b4b060fc1269ec6">VEN_CORE_READ_REGISTER</a>:
<a name="l00281"></a>00281                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_READ_REGISTER\n"</span>);
<a name="l00282"></a>00282                 <span class="comment">/* wValue optionally contains the HI WORD of the register offset and</span>
<a name="l00283"></a>00283 <span class="comment">                 * wIndex contains the LOW WORD of the register offset </span>
<a name="l00284"></a>00284 <span class="comment">                 */</span>
<a name="l00285"></a>00285                 <span class="keywordflow">if</span> (wValue == 0) {
<a name="l00286"></a>00286                         <span class="comment">/* @TODO - MAS - fix the access to the base field */</span>
<a name="l00287"></a>00287                         regaddr = 0;
<a name="l00288"></a>00288                         <span class="comment">//regaddr = (uint32_t) pcd-&gt;otg_dev-&gt;base;</span>
<a name="l00289"></a>00289                         <span class="comment">//GET_CORE_IF(pcd)-&gt;co</span>
<a name="l00290"></a>00290                         regaddr |= wIndex;
<a name="l00291"></a>00291                 } <span class="keywordflow">else</span> {
<a name="l00292"></a>00292                         regaddr = (wValue &lt;&lt; 16) | wIndex;
<a name="l00293"></a>00293                 }
<a name="l00294"></a>00294 
<a name="l00295"></a>00295                 <span class="comment">/* Read a 32-bit value of the memory at the regaddr */</span>
<a name="l00296"></a>00296                 regval = dwc_read_reg32((uint32_t *) regaddr);
<a name="l00297"></a>00297 
<a name="l00298"></a>00298                 ep = &amp;pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#14f4f2a41d1305fdc0ec1806d119da89">ep0</a>;
<a name="l00299"></a>00299                 dwc_memcpy(cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>, &amp;regval, <span class="keyword">sizeof</span>(uint32_t));
<a name="l00300"></a>00300                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b882b6b7c857100ed20600e94ea37760">is_in</a> = 1;
<a name="l00301"></a>00301                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b40ce70422b6d105a855a8df4b33d45d">dma_addr</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>;
<a name="l00302"></a>00302                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#d0cda8ded2e5142d9a1c9c17efc5812f">start_xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00303"></a>00303                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#97fa9bf5c31ba734d54f70e6fe6ae8eb">xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00304"></a>00304                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a> = wLen;
<a name="l00305"></a>00305                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#23d4871510b5bcb54fbf0674d8f122bd">xfer_count</a> = 0;
<a name="l00306"></a>00306                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a> = 0;
<a name="l00307"></a>00307                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#5a218f200cff0491b735f43fed5176bf">total_len</a> = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a>;
<a name="l00308"></a>00308 
<a name="l00309"></a>00309                 pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#2c8be11c3b9c7cd02684348eb028aeb5">ep0_pending</a> = 1;
<a name="l00310"></a>00310                 <a class="code" href="dwc__otg__cil_8c.html#ee4989b24826b2a6592535282853e556">dwc_otg_ep0_start_transfer</a>(coreif, &amp;ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>);
<a name="l00311"></a>00311                 cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 0;
<a name="l00312"></a>00312                 retval = 0;
<a name="l00313"></a>00313                 <span class="keywordflow">break</span>;
<a name="l00314"></a>00314 
<a name="l00315"></a>00315         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#d132d545f74a408b62d44a34ba51426c">VEN_CORE_WRITE_REGISTER</a>:
<a name="l00316"></a>00316                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"VEN_CORE_WRITE_REGISTER\n"</span>);
<a name="l00317"></a>00317                 <span class="comment">/* Set up an XFER to get the data stage of the control request,</span>
<a name="l00318"></a>00318 <span class="comment">                 * which is the new value of the register to be modified.</span>
<a name="l00319"></a>00319 <span class="comment">                 */</span>
<a name="l00320"></a>00320                 ep = &amp;pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#14f4f2a41d1305fdc0ec1806d119da89">ep0</a>;
<a name="l00321"></a>00321                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b882b6b7c857100ed20600e94ea37760">is_in</a> = 0;
<a name="l00322"></a>00322                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b40ce70422b6d105a855a8df4b33d45d">dma_addr</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>;
<a name="l00323"></a>00323                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#d0cda8ded2e5142d9a1c9c17efc5812f">start_xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00324"></a>00324                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#97fa9bf5c31ba734d54f70e6fe6ae8eb">xfer_buff</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00325"></a>00325                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a> = wLen;
<a name="l00326"></a>00326                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#23d4871510b5bcb54fbf0674d8f122bd">xfer_count</a> = 0;
<a name="l00327"></a>00327                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a> = 0;
<a name="l00328"></a>00328                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#5a218f200cff0491b735f43fed5176bf">total_len</a> = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#36d4010478ceb27479c0b12b376a7924">xfer_len</a>;
<a name="l00329"></a>00329 
<a name="l00330"></a>00330                 pcd-&gt;<a class="code" href="structdwc__otg__pcd.html#2c8be11c3b9c7cd02684348eb028aeb5">ep0_pending</a> = 1;
<a name="l00331"></a>00331                 <span class="comment">/* Read the control write's data stage */</span>
<a name="l00332"></a>00332                 <a class="code" href="dwc__otg__cil_8c.html#ee4989b24826b2a6592535282853e556">dwc_otg_ep0_start_transfer</a>(coreif, &amp;ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>);
<a name="l00333"></a>00333                 retval = 0;
<a name="l00334"></a>00334                 <span class="keywordflow">break</span>;
<a name="l00335"></a>00335 
<a name="l00336"></a>00336         <span class="keywordflow">default</span>:
<a name="l00337"></a>00337                 retval = -DWC_E_NOT_SUPPORTED;
<a name="l00338"></a>00338                 <span class="keywordflow">break</span>;
<a name="l00339"></a>00339         }
<a name="l00340"></a>00340 
<a name="l00341"></a>00341         <span class="keywordflow">return</span> retval;
<a name="l00342"></a>00342 }
<a name="l00343"></a>00343 
<a name="l00355"></a>00355 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_core_features_buf(uint8_t * buf, uint16_t buflen)
<a name="l00356"></a>00356 {
<a name="l00357"></a>00357         <a class="code" href="structcfi__feature__desc__header.html">cfi_feature_desc_header_t</a> *prop_hdr = prop_descs;
<a name="l00358"></a>00358         <a class="code" href="structcfi__feature__desc__header.html">cfi_feature_desc_header_t</a> *prop;
<a name="l00359"></a>00359         <a class="code" href="structcfi__all__features__header.html">cfi_all_features_header_t</a> *all_props_hdr = &amp;all_props_desc_header;
<a name="l00360"></a>00360         <a class="code" href="structcfi__all__features__header.html">cfi_all_features_header_t</a> *tmp;
<a name="l00361"></a>00361         uint8_t *tmpbuf = buf;
<a name="l00362"></a>00362         <span class="keyword">const</span> uint8_t *pname = NULL;
<a name="l00363"></a>00363         <span class="keywordtype">int</span> i, j, namelen = 0, totlen;
<a name="l00364"></a>00364 
<a name="l00365"></a>00365         <span class="comment">/* Prepare and copy the core features into the buffer */</span>
<a name="l00366"></a>00366         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s:\n"</span>, __func__);
<a name="l00367"></a>00367 
<a name="l00368"></a>00368         tmp = (<a class="code" href="structcfi__all__features__header.html">cfi_all_features_header_t</a> *) tmpbuf;
<a name="l00369"></a>00369         *tmp = *all_props_hdr;
<a name="l00370"></a>00370         tmpbuf += <a class="code" href="dwc__cfi__common_8h.html#b6c1d0a310ae1d0a89437b2cf92e57ba">CFI_ALL_FEATURES_HDR_LEN</a>;
<a name="l00371"></a>00371 
<a name="l00372"></a>00372         j = <span class="keyword">sizeof</span>(prop_descs) / <span class="keyword">sizeof</span>(<a class="code" href="structcfi__all__features__header.html">cfi_all_features_header_t</a>);
<a name="l00373"></a>00373         <span class="keywordflow">for</span> (i = 0; i &lt; j; i++, prop_hdr++) {
<a name="l00374"></a>00374                 pname = get_prop_name(prop_hdr-&gt;<a class="code" href="structcfi__feature__desc__header.html#f76e757383a5210368e599f872952170">wFeatureID</a>, &amp;namelen);
<a name="l00375"></a>00375                 prop = (<a class="code" href="structcfi__feature__desc__header.html">cfi_feature_desc_header_t</a> *) tmpbuf;
<a name="l00376"></a>00376                 *prop = *prop_hdr;
<a name="l00377"></a>00377 
<a name="l00378"></a>00378                 prop-&gt;<a class="code" href="structcfi__feature__desc__header.html#4e90b7a616a2efc24937fc6d5cff1347">bNameLen</a> = namelen;
<a name="l00379"></a>00379                 prop-&gt;<a class="code" href="structcfi__feature__desc__header.html#77769436c06687bdbe98c5e75e7641df">wLength</a> =
<a name="l00380"></a>00380                     DWC_CONSTANT_CPU_TO_LE16(<a class="code" href="dwc__cfi__common_8h.html#7ec5e43b7d52a39b553fdfa8fb17d889">CFI_FEATURE_DESC_HDR_LEN</a> +
<a name="l00381"></a>00381                                              namelen);
<a name="l00382"></a>00382 
<a name="l00383"></a>00383                 tmpbuf += <a class="code" href="dwc__cfi__common_8h.html#7ec5e43b7d52a39b553fdfa8fb17d889">CFI_FEATURE_DESC_HDR_LEN</a>;
<a name="l00384"></a>00384                 dwc_memcpy(tmpbuf, pname, namelen);
<a name="l00385"></a>00385                 tmpbuf += namelen;
<a name="l00386"></a>00386         }
<a name="l00387"></a>00387 
<a name="l00388"></a>00388         totlen = tmpbuf - buf;
<a name="l00389"></a>00389 
<a name="l00390"></a>00390         <span class="keywordflow">if</span> (totlen &gt; 0) {
<a name="l00391"></a>00391                 tmp = (cfi_all_features_header_t *) buf;
<a name="l00392"></a>00392                 tmp-&gt;<a class="code" href="structcfi__all__features__header.html#3973fa190311671de5bbd74a7b825f42">wTotalLen</a> = DWC_CONSTANT_CPU_TO_LE16(totlen);
<a name="l00393"></a>00393         }
<a name="l00394"></a>00394 
<a name="l00395"></a>00395         <span class="keywordflow">return</span> totlen;
<a name="l00396"></a>00396 }
<a name="l00397"></a>00397 
<a name="l00401"></a>00401 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_release(<a class="code" href="structcfiobject.html">cfiobject_t</a> * cfiobj)
<a name="l00402"></a>00402 {
<a name="l00403"></a>00403         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l00404"></a>00404         dwc_list_link_t *tmp;
<a name="l00405"></a>00405 
<a name="l00406"></a>00406         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s\n"</span>, __func__);
<a name="l00407"></a>00407 
<a name="l00408"></a>00408         <span class="keywordflow">if</span> (cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>) {
<a name="l00409"></a>00409                 dwc_dma_free(<a class="code" href="dwc__otg__cfi_8h.html#34582b9ef366f4c0e8ea24aa2388e829">CFI_IN_BUF_LEN</a>, cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>,
<a name="l00410"></a>00410                              cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>);
<a name="l00411"></a>00411                 cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a> = NULL;
<a name="l00412"></a>00412         }
<a name="l00413"></a>00413 
<a name="l00414"></a>00414         <span class="keywordflow">if</span> (cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>) {
<a name="l00415"></a>00415                 dwc_dma_free(<a class="code" href="dwc__otg__cfi_8h.html#739556affb10ce8a44b362b8ffa41a40">CFI_OUT_BUF_LEN</a>, cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>,
<a name="l00416"></a>00416                              cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>);
<a name="l00417"></a>00417                 cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a> = NULL;
<a name="l00418"></a>00418         }
<a name="l00419"></a>00419 
<a name="l00420"></a>00420         <span class="comment">/* Free the Buffer Setup values for each EP */</span>
<a name="l00421"></a>00421         <span class="comment">//list_for_each_entry(cfiep, &amp;cfiobj-&gt;active_eps, lh) {</span>
<a name="l00422"></a>00422         DWC_LIST_FOREACH(tmp, &amp;cfiobj-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>) {
<a name="l00423"></a>00423                 cfiep = DWC_LIST_ENTRY(tmp, <span class="keyword">struct</span> <a class="code" href="structcfi__ep.html">cfi_ep</a>, lh);
<a name="l00424"></a>00424                 cfi_free_ep_bs_dyn_data(cfiep);
<a name="l00425"></a>00425         }
<a name="l00426"></a>00426 }
<a name="l00427"></a>00427 
<a name="l00431"></a>00431 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_free_ep_bs_dyn_data(<a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep)
<a name="l00432"></a>00432 {
<a name="l00433"></a>00433         <span class="keywordflow">if</span> (cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>) {
<a name="l00434"></a>00434                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>);
<a name="l00435"></a>00435                 cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a> = NULL;
<a name="l00436"></a>00436         }
<a name="l00437"></a>00437 
<a name="l00438"></a>00438         <span class="keywordflow">if</span> (cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>) {
<a name="l00439"></a>00439                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>);
<a name="l00440"></a>00440                 cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a> = NULL;
<a name="l00441"></a>00441         }
<a name="l00442"></a>00442 
<a name="l00443"></a>00443         <span class="keywordflow">if</span> (cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>) {
<a name="l00444"></a>00444                 <span class="keywordflow">if</span> (NULL != cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>) {
<a name="l00445"></a>00445                         dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>);
<a name="l00446"></a>00446                         cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a> = NULL;
<a name="l00447"></a>00447                 }
<a name="l00448"></a>00448                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>);
<a name="l00449"></a>00449                 cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a> = NULL;
<a name="l00450"></a>00450         }
<a name="l00451"></a>00451 }
<a name="l00452"></a>00452 
<a name="l00458"></a>00458 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_init_defaults(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, <a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep)
<a name="l00459"></a>00459 {
<a name="l00460"></a>00460         <span class="keywordtype">int</span> retval = 0;
<a name="l00461"></a>00461 
<a name="l00462"></a>00462         cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a> = dwc_alloc(<span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a>));
<a name="l00463"></a>00463         <span class="keywordflow">if</span> (NULL == cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>) {
<a name="l00464"></a>00464                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"Failed to allocate memory for SG feature value\n"</span>);
<a name="l00465"></a>00465                 <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00466"></a>00466         }
<a name="l00467"></a>00467         dwc_memset(cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a>));
<a name="l00468"></a>00468 
<a name="l00469"></a>00469         <span class="comment">/* For the Concatenation feature's default value we do not allocate</span>
<a name="l00470"></a>00470 <span class="comment">         * memory for the wTxBytes field - it will be done in the set_feature_value</span>
<a name="l00471"></a>00471 <span class="comment">         * request handler.</span>
<a name="l00472"></a>00472 <span class="comment">         */</span>
<a name="l00473"></a>00473         cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a> = dwc_alloc(<span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__concat__buffer__setup.html">ddma_concat_buffer_setup_t</a>));
<a name="l00474"></a>00474         <span class="keywordflow">if</span> (NULL == cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>) {
<a name="l00475"></a>00475                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l00476"></a>00476                     (<span class="stringliteral">"Failed to allocate memory for CONCATENATION feature value\n"</span>);
<a name="l00477"></a>00477                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>);
<a name="l00478"></a>00478                 <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00479"></a>00479         }
<a name="l00480"></a>00480         dwc_memset(cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__concat__buffer__setup.html">ddma_concat_buffer_setup_t</a>));
<a name="l00481"></a>00481 
<a name="l00482"></a>00482         cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a> = dwc_alloc(<span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__align__buffer__setup.html">ddma_align_buffer_setup_t</a>));
<a name="l00483"></a>00483         <span class="keywordflow">if</span> (NULL == cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>) {
<a name="l00484"></a>00484                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l00485"></a>00485                     (<span class="stringliteral">"Failed to allocate memory for Alignment feature value\n"</span>);
<a name="l00486"></a>00486                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>);
<a name="l00487"></a>00487                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>);
<a name="l00488"></a>00488                 <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00489"></a>00489         }
<a name="l00490"></a>00490         dwc_memset(cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__align__buffer__setup.html">ddma_align_buffer_setup_t</a>));
<a name="l00491"></a>00491 
<a name="l00492"></a>00492         <span class="keywordflow">return</span> retval;
<a name="l00493"></a>00493 }
<a name="l00494"></a>00494 
<a name="l00506"></a>00506 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_enable(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00507"></a>00507                          <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep</a> *ep)
<a name="l00508"></a>00508 {
<a name="l00509"></a>00509         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l00510"></a>00510         <span class="keywordtype">int</span> retval = -DWC_E_NOT_SUPPORTED;
<a name="l00511"></a>00511 
<a name="l00512"></a>00512         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: epname=%s; epnum=0x%02x\n"</span>, __func__,
<a name="l00513"></a>00513                  <span class="stringliteral">"EP_"</span> <span class="comment">/*ep-&gt;ep.name */</span> , ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#86e27843c439dd0b1d12d9bf2dc6516f">desc</a>-&gt;bEndpointAddress);
<a name="l00514"></a>00514         <span class="comment">/* MAS - Check whether this endpoint already is in the list */</span>
<a name="l00515"></a>00515         cfiep = <a class="code" href="dwc__otg__cfi_8h.html#c21284d5adf03032d094a36babf9b1e5">get_cfi_ep_by_pcd_ep</a>(cfi, ep);
<a name="l00516"></a>00516 
<a name="l00517"></a>00517         <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l00518"></a>00518                 <span class="comment">/* Allocate a cfi_ep_t object */</span>
<a name="l00519"></a>00519                 cfiep = dwc_alloc(<span class="keyword">sizeof</span>(<a class="code" href="structcfi__ep.html">cfi_ep_t</a>));
<a name="l00520"></a>00520                 <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l00521"></a>00521                         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l00522"></a>00522                             (<span class="stringliteral">"Unable to allocate memory for &lt;cfiep&gt; in function %s\n"</span>,
<a name="l00523"></a>00523                              __func__);
<a name="l00524"></a>00524                         <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00525"></a>00525                 }
<a name="l00526"></a>00526                 dwc_memset(cfiep, 0, <span class="keyword">sizeof</span>(<a class="code" href="structcfi__ep.html">cfi_ep_t</a>));
<a name="l00527"></a>00527 
<a name="l00528"></a>00528                 <span class="comment">/* Save the dwc_otg_pcd_ep pointer in the cfiep object */</span>
<a name="l00529"></a>00529                 cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a> = ep;
<a name="l00530"></a>00530 
<a name="l00531"></a>00531                 <span class="comment">/* Allocate the DMA Descriptors chain of MAX_DMA_DESCS_PER_EP count */</span>
<a name="l00532"></a>00532                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs =
<a name="l00533"></a>00533                     dwc_dma_alloc(MAX_DMA_DESCS_PER_EP *
<a name="l00534"></a>00534                                   <span class="keyword">sizeof</span>(dwc_otg_dma_desc_t),
<a name="l00535"></a>00535                                   &amp;ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs_dma_addr);
<a name="l00536"></a>00536 
<a name="l00537"></a>00537                 <span class="keywordflow">if</span> (NULL == ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs) {
<a name="l00538"></a>00538                         dwc_free(cfiep);
<a name="l00539"></a>00539                         <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00540"></a>00540                 }
<a name="l00541"></a>00541 
<a name="l00542"></a>00542                 DWC_LIST_INIT(&amp;cfiep-&gt;<a class="code" href="structcfi__ep.html#18bff3370dc933cd374d458897dfbc2f">lh</a>);
<a name="l00543"></a>00543 
<a name="l00544"></a>00544                 <span class="comment">/* Set the buffer mode to BM_STANDARD. It will be modified </span>
<a name="l00545"></a>00545 <span class="comment">                 * when building descriptors for a specific buffer mode */</span>
<a name="l00546"></a>00546                 ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_STANDARD;
<a name="l00547"></a>00547 
<a name="l00548"></a>00548                 <span class="comment">/* Create and initialize the default values for this EP's Buffer modes */</span>
<a name="l00549"></a>00549                 <span class="keywordflow">if</span> ((retval = cfi_ep_init_defaults(pcd, cfiep)) &lt; 0)
<a name="l00550"></a>00550                         <span class="keywordflow">return</span> retval;
<a name="l00551"></a>00551 
<a name="l00552"></a>00552                 <span class="comment">/* Add the cfi_ep_t object to the CFI object's list of active endpoints */</span>
<a name="l00553"></a>00553                 DWC_LIST_INSERT_TAIL(&amp;cfi-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>, &amp;cfiep-&gt;<a class="code" href="structcfi__ep.html#18bff3370dc933cd374d458897dfbc2f">lh</a>);
<a name="l00554"></a>00554                 retval = 0;
<a name="l00555"></a>00555         } <span class="keywordflow">else</span> {                <span class="comment">/* The sought EP already is in the list */</span>
<a name="l00556"></a>00556                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: The sought EP already is in the list\n"</span>,
<a name="l00557"></a>00557                          __func__);
<a name="l00558"></a>00558         }
<a name="l00559"></a>00559 
<a name="l00560"></a>00560         <span class="keywordflow">return</span> retval;
<a name="l00561"></a>00561 }
<a name="l00562"></a>00562 
<a name="l00568"></a>00568 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ctrl_write_complete(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi,
<a name="l00569"></a>00569                                    <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd)
<a name="l00570"></a>00570 {
<a name="l00571"></a>00571         uint32_t addr, reg_value;
<a name="l00572"></a>00572         uint16_t wIndex, wValue;
<a name="l00573"></a>00573         uint8_t bRequest;
<a name="l00574"></a>00574         uint8_t *buf = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00575"></a>00575         <span class="comment">//struct usb_ctrlrequest *ctrl_req = &amp;cfi-&gt;ctrl_req_saved;</span>
<a name="l00576"></a>00576         <span class="keyword">struct </span><a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *ctrl_req = &amp;cfi-&gt;<a class="code" href="structcfiobject.html#a86c33aef2a521a27ca515bb7397dd34">ctrl_req</a>;
<a name="l00577"></a>00577         <span class="keywordtype">int</span> retval = -DWC_E_NOT_SUPPORTED;
<a name="l00578"></a>00578 
<a name="l00579"></a>00579         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s\n"</span>, __func__);
<a name="l00580"></a>00580 
<a name="l00581"></a>00581         bRequest = ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#b3083f525fa9bb97e41364418daee3fa">bRequest</a>;
<a name="l00582"></a>00582         wIndex = DWC_CONSTANT_CPU_TO_LE16(ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#984c95bd61e8d1120cd935bcbc5d7134">wIndex</a>);
<a name="l00583"></a>00583         wValue = DWC_CONSTANT_CPU_TO_LE16(ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a>);
<a name="l00584"></a>00584 
<a name="l00585"></a>00585         <span class="comment">/* </span>
<a name="l00586"></a>00586 <span class="comment">         * Save the pointer to the data stage in the ctrl_req's &lt;data&gt; field.</span>
<a name="l00587"></a>00587 <span class="comment">         * The request should be already saved in the command stage by now.</span>
<a name="l00588"></a>00588 <span class="comment">         */</span>
<a name="l00589"></a>00589         ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#5b3865e9cb2c0fcf373b1c862a63c180">data</a> = cfi-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>;
<a name="l00590"></a>00590         cfi-&gt;<a class="code" href="structcfiobject.html#8d35a323dcd29a1c9d1a8568bd514c3b">need_status_in_complete</a> = 0;
<a name="l00591"></a>00591         cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 0;
<a name="l00592"></a>00592 
<a name="l00593"></a>00593         <span class="keywordflow">switch</span> (bRequest) {
<a name="l00594"></a>00594         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#d132d545f74a408b62d44a34ba51426c">VEN_CORE_WRITE_REGISTER</a>:
<a name="l00595"></a>00595                 <span class="comment">/* The buffer contains raw data of the new value for the register */</span>
<a name="l00596"></a>00596                 reg_value = *((uint32_t *) buf);
<a name="l00597"></a>00597                 <span class="keywordflow">if</span> (wValue == 0) {
<a name="l00598"></a>00598                         addr = 0;
<a name="l00599"></a>00599                         <span class="comment">//addr = (uint32_t) pcd-&gt;otg_dev-&gt;base;</span>
<a name="l00600"></a>00600                         addr += wIndex;
<a name="l00601"></a>00601                 } <span class="keywordflow">else</span> {
<a name="l00602"></a>00602                         addr = (wValue &lt;&lt; 16) | wIndex;
<a name="l00603"></a>00603                 }
<a name="l00604"></a>00604 
<a name="l00605"></a>00605                 <span class="comment">//writel(reg_value, addr);</span>
<a name="l00606"></a>00606 
<a name="l00607"></a>00607                 retval = 0;
<a name="l00608"></a>00608                 cfi-&gt;<a class="code" href="structcfiobject.html#8d35a323dcd29a1c9d1a8568bd514c3b">need_status_in_complete</a> = 1;
<a name="l00609"></a>00609                 <span class="keywordflow">break</span>;
<a name="l00610"></a>00610 
<a name="l00611"></a>00611         <span class="keywordflow">case</span> <a class="code" href="dwc__cfi__common_8h.html#ee7fb610a7fb2437df3425e2330e9d39">VEN_CORE_SET_FEATURE</a>:
<a name="l00612"></a>00612                 <span class="comment">/* The buffer contains raw data of the new value of the feature */</span>
<a name="l00613"></a>00613                 retval = cfi_set_feature_value(pcd);
<a name="l00614"></a>00614                 <span class="keywordflow">if</span> (retval &lt; 0)
<a name="l00615"></a>00615                         <span class="keywordflow">return</span> retval;
<a name="l00616"></a>00616 
<a name="l00617"></a>00617                 cfi-&gt;<a class="code" href="structcfiobject.html#8d35a323dcd29a1c9d1a8568bd514c3b">need_status_in_complete</a> = 1;
<a name="l00618"></a>00618                 <span class="keywordflow">break</span>;
<a name="l00619"></a>00619 
<a name="l00620"></a>00620         <span class="keywordflow">default</span>:
<a name="l00621"></a>00621                 <span class="keywordflow">break</span>;
<a name="l00622"></a>00622         }
<a name="l00623"></a>00623 
<a name="l00624"></a>00624         <span class="keywordflow">return</span> retval;
<a name="l00625"></a>00625 }
<a name="l00626"></a>00626 
<a name="l00630"></a>00630 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_build_sg_descs(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi, <a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep,
<a name="l00631"></a>00631                                <a class="code" href="structdwc__otg__pcd__request.html">dwc_otg_pcd_request_t</a> * req)
<a name="l00632"></a>00632 {
<a name="l00633"></a>00633         <span class="keyword">struct </span><a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep</a> *ep = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>;
<a name="l00634"></a>00634         <a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a> *sgval = cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>;
<a name="l00635"></a>00635         <span class="keyword">struct </span>dwc_otg_dma_desc *desc = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs;
<a name="l00636"></a>00636         <span class="keyword">struct </span>dwc_otg_dma_desc *desc_last = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs;
<a name="l00637"></a>00637         dma_addr_t buff_addr = req-&gt;<a class="code" href="structdwc__otg__pcd__request.html#df93c8905495816eb0327b192938a4a1">dma</a>;
<a name="l00638"></a>00638         <span class="keywordtype">int</span> i;
<a name="l00639"></a>00639         uint32_t txsize, off;
<a name="l00640"></a>00640 
<a name="l00641"></a>00641         txsize = sgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#728db9bac2db62f7e7b2b9ccb0873546">wSize</a>;
<a name="l00642"></a>00642         off = sgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#5ab16a208d20dd6940ecfd3244e2b9c0">bOffset</a>;
<a name="l00643"></a>00643 
<a name="l00644"></a>00644 <span class="comment">//      CFI_INFO("%s: %s TXSIZE=0x%08x; OFFSET=0x%08x\n", </span>
<a name="l00645"></a>00645 <span class="comment">//              __func__, cfiep-&gt;ep-&gt;ep.name, txsize, off);</span>
<a name="l00646"></a>00646 
<a name="l00647"></a>00647         <span class="keywordflow">for</span> (i = 0; i &lt; sgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#6287daf5a964bf1d09e8ffca29b88748">bCount</a>; i++) {
<a name="l00648"></a>00648                 desc-&gt;status.b.bs = <a class="code" href="dwc__otg__regs_8h.html#e6e96a79797557986256d1a1ff104ca1">BS_HOST_BUSY</a>;
<a name="l00649"></a>00649                 desc-&gt;buf = buff_addr;
<a name="l00650"></a>00650                 desc-&gt;status.b.l = 0;
<a name="l00651"></a>00651                 desc-&gt;status.b.ioc = 0;
<a name="l00652"></a>00652                 desc-&gt;status.b.sp = 0;
<a name="l00653"></a>00653                 desc-&gt;status.b.bytes = txsize;
<a name="l00654"></a>00654                 desc-&gt;status.b.bs = <a class="code" href="dwc__otg__regs_8h.html#c2cfc53da94087a90d21d3528b005bcf">BS_HOST_READY</a>;
<a name="l00655"></a>00655 
<a name="l00656"></a>00656                 <span class="comment">/* Set the next address of the buffer */</span>
<a name="l00657"></a>00657                 buff_addr += txsize + off;
<a name="l00658"></a>00658                 desc_last = desc;
<a name="l00659"></a>00659                 desc++;
<a name="l00660"></a>00660         }
<a name="l00661"></a>00661 
<a name="l00662"></a>00662         <span class="comment">/* Set the last, ioc and sp bits on the Last DMA Descriptor */</span>
<a name="l00663"></a>00663         desc_last-&gt;status.b.l = 1;
<a name="l00664"></a>00664         desc_last-&gt;status.b.ioc = 1;
<a name="l00665"></a>00665         desc_last-&gt;status.b.sp = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a>;
<a name="l00666"></a>00666         <span class="comment">/* Save the last DMA descriptor pointer */</span>
<a name="l00667"></a>00667         cfiep-&gt;<a class="code" href="structcfi__ep.html#3f4e5c42f279663ee0065ffce4f44783">dma_desc_last</a> = desc_last;
<a name="l00668"></a>00668         cfiep-&gt;<a class="code" href="structcfi__ep.html#73050a3011b918e8be6c2434db357514">desc_count</a> = sgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#6287daf5a964bf1d09e8ffca29b88748">bCount</a>;
<a name="l00669"></a>00669 }
<a name="l00670"></a>00670 
<a name="l00674"></a>00674 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_build_concat_descs(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi, <a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep,
<a name="l00675"></a>00675                                    <a class="code" href="structdwc__otg__pcd__request.html">dwc_otg_pcd_request_t</a> * req)
<a name="l00676"></a>00676 {
<a name="l00677"></a>00677         <span class="keyword">struct </span><a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep</a> *ep = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>;
<a name="l00678"></a>00678         <a class="code" href="struct__ddma__concat__buffer__setup.html">ddma_concat_buffer_setup_t</a> *concatval = cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>;
<a name="l00679"></a>00679         <span class="keyword">struct </span>dwc_otg_dma_desc *desc = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs;
<a name="l00680"></a>00680         <span class="keyword">struct </span>dwc_otg_dma_desc *desc_last = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs;
<a name="l00681"></a>00681         dma_addr_t buff_addr = req-&gt;<a class="code" href="structdwc__otg__pcd__request.html#df93c8905495816eb0327b192938a4a1">dma</a>;
<a name="l00682"></a>00682         <span class="keywordtype">int</span> i;
<a name="l00683"></a>00683         uint16_t *txsize;
<a name="l00684"></a>00684 
<a name="l00685"></a>00685         txsize = concatval-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>;
<a name="l00686"></a>00686 
<a name="l00687"></a>00687         <span class="keywordflow">for</span> (i = 0; i &lt; concatval-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#512cdc8b5ef9053f514443b884ec4730">hdr</a>.<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#605becc1e8a681d6623343b28013b56a">bDescCount</a>; i++) {
<a name="l00688"></a>00688                 desc-&gt;buf = buff_addr;
<a name="l00689"></a>00689                 desc-&gt;status.b.bs = <a class="code" href="dwc__otg__regs_8h.html#e6e96a79797557986256d1a1ff104ca1">BS_HOST_BUSY</a>;
<a name="l00690"></a>00690                 desc-&gt;status.b.l = 0;
<a name="l00691"></a>00691                 desc-&gt;status.b.ioc = 0;
<a name="l00692"></a>00692                 desc-&gt;status.b.sp = 0;
<a name="l00693"></a>00693                 desc-&gt;status.b.bytes = *txsize;
<a name="l00694"></a>00694                 desc-&gt;status.b.bs = <a class="code" href="dwc__otg__regs_8h.html#c2cfc53da94087a90d21d3528b005bcf">BS_HOST_READY</a>;
<a name="l00695"></a>00695 
<a name="l00696"></a>00696                 txsize++;
<a name="l00697"></a>00697                 <span class="comment">/* Set the next address of the buffer */</span>
<a name="l00698"></a>00698                 buff_addr += UGETW(ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#86e27843c439dd0b1d12d9bf2dc6516f">desc</a>-&gt;wMaxPacketSize);
<a name="l00699"></a>00699                 desc_last = desc;
<a name="l00700"></a>00700                 desc++;
<a name="l00701"></a>00701         }
<a name="l00702"></a>00702 
<a name="l00703"></a>00703         <span class="comment">/* Set the last, ioc and sp bits on the Last DMA Descriptor */</span>
<a name="l00704"></a>00704         desc_last-&gt;status.b.l = 1;
<a name="l00705"></a>00705         desc_last-&gt;status.b.ioc = 1;
<a name="l00706"></a>00706         desc_last-&gt;status.b.sp = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a>;
<a name="l00707"></a>00707         cfiep-&gt;<a class="code" href="structcfi__ep.html#3f4e5c42f279663ee0065ffce4f44783">dma_desc_last</a> = desc_last;
<a name="l00708"></a>00708         cfiep-&gt;<a class="code" href="structcfi__ep.html#73050a3011b918e8be6c2434db357514">desc_count</a> = concatval-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#512cdc8b5ef9053f514443b884ec4730">hdr</a>.<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#605becc1e8a681d6623343b28013b56a">bDescCount</a>;
<a name="l00709"></a>00709 }
<a name="l00710"></a>00710 
<a name="l00714"></a>00714 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_build_circ_descs(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi, <a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep,
<a name="l00715"></a>00715                                  <a class="code" href="structdwc__otg__pcd__request.html">dwc_otg_pcd_request_t</a> * req)
<a name="l00716"></a>00716 {
<a name="l00717"></a>00717         <span class="comment">/* @todo: MAS - add implementation when this feature needs to be tested */</span>
<a name="l00718"></a>00718 }
<a name="l00719"></a>00719 
<a name="l00723"></a>00723 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_build_align_descs(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi, <a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep,
<a name="l00724"></a>00724                                   <a class="code" href="structdwc__otg__pcd__request.html">dwc_otg_pcd_request_t</a> * req)
<a name="l00725"></a>00725 {
<a name="l00726"></a>00726         <span class="keyword">struct </span><a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep</a> *ep = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>;
<a name="l00727"></a>00727         <a class="code" href="struct__ddma__align__buffer__setup.html">ddma_align_buffer_setup_t</a> *alignval = cfiep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>;
<a name="l00728"></a>00728         <span class="keyword">struct </span>dwc_otg_dma_desc *desc = cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.descs;
<a name="l00729"></a>00729         dma_addr_t buff_addr = req-&gt;<a class="code" href="structdwc__otg__pcd__request.html#df93c8905495816eb0327b192938a4a1">dma</a>;
<a name="l00730"></a>00730 
<a name="l00731"></a>00731         desc-&gt;status.b.bs = <a class="code" href="dwc__otg__regs_8h.html#e6e96a79797557986256d1a1ff104ca1">BS_HOST_BUSY</a>;
<a name="l00732"></a>00732         desc-&gt;status.b.l = 1;
<a name="l00733"></a>00733         desc-&gt;status.b.ioc = 1;
<a name="l00734"></a>00734         desc-&gt;status.b.sp = ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#8c6340435beba0b8c025a4677602acab">sent_zlp</a>;
<a name="l00735"></a>00735         desc-&gt;status.b.bytes = req-&gt;<a class="code" href="structdwc__otg__pcd__request.html#3dd3fcc889bf220b048023e8b05fab61">length</a>;
<a name="l00736"></a>00736         <span class="comment">/* Adjust the buffer alignment */</span>
<a name="l00737"></a>00737         desc-&gt;buf = (buff_addr + alignval-&gt;<a class="code" href="struct__ddma__align__buffer__setup.html#1cc0ba7e2c2a435cce1d502732ce07a1">bAlign</a>);
<a name="l00738"></a>00738         desc-&gt;status.b.bs = <a class="code" href="dwc__otg__regs_8h.html#c2cfc53da94087a90d21d3528b005bcf">BS_HOST_READY</a>;
<a name="l00739"></a>00739         cfiep-&gt;<a class="code" href="structcfi__ep.html#3f4e5c42f279663ee0065ffce4f44783">dma_desc_last</a> = desc;
<a name="l00740"></a>00740         cfiep-&gt;<a class="code" href="structcfi__ep.html#73050a3011b918e8be6c2434db357514">desc_count</a> = 1;
<a name="l00741"></a>00741 }
<a name="l00742"></a>00742 
<a name="l00747"></a>00747 <span class="keyword">static</span> <span class="keywordtype">void</span> cfi_build_descriptors(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi,
<a name="l00748"></a>00748                                   <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00749"></a>00749                                   <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep</a> *ep,
<a name="l00750"></a>00750                                   <a class="code" href="structdwc__otg__pcd__request.html">dwc_otg_pcd_request_t</a> * req)
<a name="l00751"></a>00751 {
<a name="l00752"></a>00752         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l00753"></a>00753 
<a name="l00754"></a>00754         <span class="comment">/* Get the cfiep by the dwc_otg_pcd_ep */</span>
<a name="l00755"></a>00755         cfiep = <a class="code" href="dwc__otg__cfi_8h.html#c21284d5adf03032d094a36babf9b1e5">get_cfi_ep_by_pcd_ep</a>(cfi, ep);
<a name="l00756"></a>00756         <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l00757"></a>00757                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to find a matching active endpoint\n"</span>,
<a name="l00758"></a>00758                          __func__);
<a name="l00759"></a>00759                 <span class="keywordflow">return</span>;
<a name="l00760"></a>00760         }
<a name="l00761"></a>00761 
<a name="l00762"></a>00762         cfiep-&gt;<a class="code" href="structcfi__ep.html#f85903cb9e179124e42d98d557098011">xfer_len</a> = req-&gt;<a class="code" href="structdwc__otg__pcd__request.html#3dd3fcc889bf220b048023e8b05fab61">length</a>;
<a name="l00763"></a>00763 
<a name="l00764"></a>00764         <span class="comment">/* Iterate through all the DMA descriptors */</span>
<a name="l00765"></a>00765         <span class="keywordflow">switch</span> (cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode) {
<a name="l00766"></a>00766         <span class="keywordflow">case</span> BM_SG:
<a name="l00767"></a>00767                 cfi_build_sg_descs(cfi, cfiep, req);
<a name="l00768"></a>00768                 <span class="keywordflow">break</span>;
<a name="l00769"></a>00769 
<a name="l00770"></a>00770         <span class="keywordflow">case</span> BM_CONCAT:
<a name="l00771"></a>00771                 cfi_build_concat_descs(cfi, cfiep, req);
<a name="l00772"></a>00772                 <span class="keywordflow">break</span>;
<a name="l00773"></a>00773 
<a name="l00774"></a>00774         <span class="keywordflow">case</span> BM_CIRCULAR:
<a name="l00775"></a>00775                 cfi_build_circ_descs(cfi, cfiep, req);
<a name="l00776"></a>00776                 <span class="keywordflow">break</span>;
<a name="l00777"></a>00777 
<a name="l00778"></a>00778         <span class="keywordflow">case</span> BM_ALIGN:
<a name="l00779"></a>00779                 cfi_build_align_descs(cfi, cfiep, req);
<a name="l00780"></a>00780                 <span class="keywordflow">break</span>;
<a name="l00781"></a>00781 
<a name="l00782"></a>00782         <span class="keywordflow">default</span>:
<a name="l00783"></a>00783                 <span class="keywordflow">break</span>;
<a name="l00784"></a>00784         }
<a name="l00785"></a>00785 }
<a name="l00786"></a>00786 
<a name="l00790"></a>00790 <span class="keyword">static</span> <span class="keywordtype">void</span> *cfi_ep_alloc_buf(<span class="keyword">struct</span> <a class="code" href="structcfiobject.html">cfiobject</a> *cfi, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00791"></a>00791                               <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep</a> *ep, dma_addr_t * dma,
<a name="l00792"></a>00792                               <span class="keywordtype">unsigned</span> size, gfp_t flags)
<a name="l00793"></a>00793 {
<a name="l00794"></a>00794         <span class="keywordflow">return</span> dwc_dma_alloc(size, dma);
<a name="l00795"></a>00795 }
<a name="l00796"></a>00796 
<a name="l00800"></a>00800 <span class="keywordtype">int</span> init_cfi(<a class="code" href="structcfiobject.html">cfiobject_t</a> * cfiobj)
<a name="l00801"></a>00801 {
<a name="l00802"></a>00802         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s\n"</span>, __func__);
<a name="l00803"></a>00803 
<a name="l00804"></a>00804         <span class="comment">/* Allocate a buffer for IN XFERs */</span>
<a name="l00805"></a>00805         cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a> =
<a name="l00806"></a>00806             dwc_dma_alloc(<a class="code" href="dwc__otg__cfi_8h.html#34582b9ef366f4c0e8ea24aa2388e829">CFI_IN_BUF_LEN</a>, &amp;cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>);
<a name="l00807"></a>00807         <span class="keywordflow">if</span> (NULL == cfiobj-&gt;<a class="code" href="structcfiobject.html#f6548b2b8fbab90656c22eb5ca857643">buf_in</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>) {
<a name="l00808"></a>00808                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"Unable to allocate buffer for INs\n"</span>);
<a name="l00809"></a>00809                 <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00810"></a>00810         }
<a name="l00811"></a>00811 
<a name="l00812"></a>00812         <span class="comment">/* Allocate a buffer for OUT XFERs */</span>
<a name="l00813"></a>00813         cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a> =
<a name="l00814"></a>00814             dwc_dma_alloc(<a class="code" href="dwc__otg__cfi_8h.html#739556affb10ce8a44b362b8ffa41a40">CFI_OUT_BUF_LEN</a>, &amp;cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#549d40f7e33056fc5a99d51d00714d97">addr</a>);
<a name="l00815"></a>00815         <span class="keywordflow">if</span> (NULL == cfiobj-&gt;<a class="code" href="structcfiobject.html#adaa1cd0f88e639251f8dfbd65da7935">buf_out</a>.<a class="code" href="structcfi__dma__buff.html#474851b3123373b8b30fa3637eb81b5b">buf</a>) {
<a name="l00816"></a>00816                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"Unable to allocate buffer for OUT\n"</span>);
<a name="l00817"></a>00817                 <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l00818"></a>00818         }
<a name="l00819"></a>00819 
<a name="l00820"></a>00820         <span class="comment">/* Initialize the callback function pointers */</span>
<a name="l00821"></a>00821         cfiobj-&gt;<a class="code" href="structcfiobject.html#324b7481af9ba7a97233b162bbe8301a">ops</a>.<a class="code" href="structcfi__ops.html#132fd4871260083bbd9945e121dc1819">release</a> = cfi_release;
<a name="l00822"></a>00822         cfiobj-&gt;<a class="code" href="structcfiobject.html#324b7481af9ba7a97233b162bbe8301a">ops</a>.<a class="code" href="structcfi__ops.html#1da60799de5a3a4ab53c63e1778e08af">ep_enable</a> = cfi_ep_enable;
<a name="l00823"></a>00823         cfiobj-&gt;<a class="code" href="structcfiobject.html#324b7481af9ba7a97233b162bbe8301a">ops</a>.<a class="code" href="structcfi__ops.html#a46d61a3e78632ab9ca2787b1025fee7">ctrl_write_complete</a> = cfi_ctrl_write_complete;
<a name="l00824"></a>00824         cfiobj-&gt;<a class="code" href="structcfiobject.html#324b7481af9ba7a97233b162bbe8301a">ops</a>.<a class="code" href="structcfi__ops.html#a3e763247b8fbedc46ddfa624408ab11">build_descriptors</a> = cfi_build_descriptors;
<a name="l00825"></a>00825         cfiobj-&gt;<a class="code" href="structcfiobject.html#324b7481af9ba7a97233b162bbe8301a">ops</a>.<a class="code" href="structcfi__ops.html#0f57d061a80c9e04eeff9c960637595f">ep_alloc_buf</a> = cfi_ep_alloc_buf;
<a name="l00826"></a>00826 
<a name="l00827"></a>00827         <span class="comment">/* Initialize the list of active endpoints in the CFI object */</span>
<a name="l00828"></a>00828         DWC_LIST_INIT(&amp;cfiobj-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>);
<a name="l00829"></a>00829 
<a name="l00830"></a>00830         <span class="keywordflow">return</span> 0;
<a name="l00831"></a>00831 }
<a name="l00832"></a>00832 
<a name="l00838"></a>00838 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_get_feature_value(uint8_t * buf, uint16_t buflen,
<a name="l00839"></a>00839                                  <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l00840"></a>00840                                  <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *ctrl_req)
<a name="l00841"></a>00841 {
<a name="l00842"></a>00842         <span class="keywordtype">int</span> retval = -DWC_E_NOT_SUPPORTED;
<a name="l00843"></a>00843         <span class="keyword">struct </span><a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if</a> *coreif = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd);
<a name="l00844"></a>00844         uint16_t dfifo, rxfifo, txfifo;
<a name="l00845"></a>00845 
<a name="l00846"></a>00846         <span class="keywordflow">switch</span> (ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#984c95bd61e8d1120cd935bcbc5d7134">wIndex</a>) {
<a name="l00847"></a>00847                 <span class="comment">/* Whether the DDMA is enabled or not */</span>
<a name="l00848"></a>00848         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#0e196868939f6bbf0d157868bfc90208">FT_ID_DMA_MODE</a>:
<a name="l00849"></a>00849                 *buf = (coreif-&gt;<a class="code" href="structdwc__otg__core__if.html#5ade18c62c5101c603247691d3047a19">dma_enable</a> &amp;&amp; coreif-&gt;<a class="code" href="structdwc__otg__core__if.html#7e3b96c6167eceeeb1090798f8297f1f">dma_desc_enable</a>) ? 1 : 0;
<a name="l00850"></a>00850                 retval = 1;
<a name="l00851"></a>00851                 <span class="keywordflow">break</span>;
<a name="l00852"></a>00852 
<a name="l00853"></a>00853         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#98840b45640251bfafa3481260aef889">FT_ID_DMA_BUFFER_SETUP</a>:
<a name="l00854"></a>00854                 retval = cfi_ep_get_sg_val(buf, pcd, ctrl_req);
<a name="l00855"></a>00855                 <span class="keywordflow">break</span>;
<a name="l00856"></a>00856 
<a name="l00857"></a>00857         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#9335284cd4dae01f4bc0da7cb89d5ef4">FT_ID_DMA_BUFF_ALIGN</a>:
<a name="l00858"></a>00858                 retval = cfi_ep_get_align_val(buf, pcd, ctrl_req);
<a name="l00859"></a>00859                 <span class="keywordflow">break</span>;
<a name="l00860"></a>00860 
<a name="l00861"></a>00861         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#779a11db5843dd058581d93c8232bd7c">FT_ID_DMA_CONCAT_SETUP</a>:
<a name="l00862"></a>00862                 retval = cfi_ep_get_concat_val(buf, pcd, ctrl_req);
<a name="l00863"></a>00863                 <span class="keywordflow">break</span>;
<a name="l00864"></a>00864 
<a name="l00865"></a>00865         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#8db5bfce321e02d42b742e9deedfa665">FT_ID_DMA_CIRCULAR</a>:
<a name="l00866"></a>00866                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"GetFeature value (FT_ID_DMA_CIRCULAR)\n"</span>);
<a name="l00867"></a>00867                 <span class="keywordflow">break</span>;
<a name="l00868"></a>00868 
<a name="l00869"></a>00869         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#bcc99a9e5a0b15b4212d88bd9c610647">FT_ID_THRESHOLD_SETUP</a>:
<a name="l00870"></a>00870                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"GetFeature value (FT_ID_THRESHOLD_SETUP)\n"</span>);
<a name="l00871"></a>00871                 <span class="keywordflow">break</span>;
<a name="l00872"></a>00872 
<a name="l00873"></a>00873         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#54b879727edcb06acdd11968ec60d249">FT_ID_DFIFO_DEPTH</a>:
<a name="l00874"></a>00874                 dfifo = get_dfifo_size(coreif);
<a name="l00875"></a>00875                 *((uint16_t *) buf) = dfifo;
<a name="l00876"></a>00876                 retval = <span class="keyword">sizeof</span>(uint16_t);
<a name="l00877"></a>00877                 <span class="keywordflow">break</span>;
<a name="l00878"></a>00878 
<a name="l00879"></a>00879         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#a3a67b679a59c5279370bbf69f114cb6">FT_ID_TX_FIFO_DEPTH</a>:
<a name="l00880"></a>00880                 retval = get_txfifo_size(pcd, ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a>);
<a name="l00881"></a>00881                 <span class="keywordflow">if</span> (retval &gt;= 0) {
<a name="l00882"></a>00882                         txfifo = retval;
<a name="l00883"></a>00883                         *((uint16_t *) buf) = txfifo;
<a name="l00884"></a>00884                         retval = <span class="keyword">sizeof</span>(uint16_t);
<a name="l00885"></a>00885                 }
<a name="l00886"></a>00886                 <span class="keywordflow">break</span>;
<a name="l00887"></a>00887 
<a name="l00888"></a>00888         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#42b7c98c105de1f9399786a3419e7e20">FT_ID_RX_FIFO_DEPTH</a>:
<a name="l00889"></a>00889                 retval = get_rxfifo_size(coreif, ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a>);
<a name="l00890"></a>00890                 <span class="keywordflow">if</span> (retval &gt;= 0) {
<a name="l00891"></a>00891                         rxfifo = retval;
<a name="l00892"></a>00892                         *((uint16_t *) buf) = rxfifo;
<a name="l00893"></a>00893                         retval = <span class="keyword">sizeof</span>(uint16_t);
<a name="l00894"></a>00894                 }
<a name="l00895"></a>00895                 <span class="keywordflow">break</span>;
<a name="l00896"></a>00896         }
<a name="l00897"></a>00897 
<a name="l00898"></a>00898         <span class="keywordflow">return</span> retval;
<a name="l00899"></a>00899 }
<a name="l00900"></a>00900 
<a name="l00904"></a>00904 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_reset_sg_val(<a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep)
<a name="l00905"></a>00905 {
<a name="l00906"></a>00906         dwc_memset(cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a>));
<a name="l00907"></a>00907         <span class="keywordflow">return</span> 0;
<a name="l00908"></a>00908 }
<a name="l00909"></a>00909 
<a name="l00913"></a>00913 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_reset_align_val(<a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep)
<a name="l00914"></a>00914 {
<a name="l00915"></a>00915         dwc_memset(cfiep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a>));
<a name="l00916"></a>00916         <span class="keywordflow">return</span> 0;
<a name="l00917"></a>00917 }
<a name="l00918"></a>00918 
<a name="l00924"></a>00924 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_reset_concat_val(<a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep)
<a name="l00925"></a>00925 {
<a name="l00926"></a>00926         <span class="comment">/* First we need to free the wTxBytes field */</span>
<a name="l00927"></a>00927         <span class="keywordflow">if</span> (cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>) {
<a name="l00928"></a>00928                 dwc_free(cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>);
<a name="l00929"></a>00929                 cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a> = NULL;
<a name="l00930"></a>00930         }
<a name="l00931"></a>00931 
<a name="l00932"></a>00932         dwc_memset(cfiep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__concat__buffer__setup.html">ddma_concat_buffer_setup_t</a>));
<a name="l00933"></a>00933         <span class="keywordflow">return</span> 0;
<a name="l00934"></a>00934 }
<a name="l00935"></a>00935 
<a name="l00939"></a>00939 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_reset_all_setup_vals(<a class="code" href="structcfi__ep.html">cfi_ep_t</a> * cfiep)
<a name="l00940"></a>00940 {
<a name="l00941"></a>00941         cfi_reset_sg_val(cfiep);
<a name="l00942"></a>00942         cfi_reset_align_val(cfiep);
<a name="l00943"></a>00943         cfi_reset_concat_val(cfiep);
<a name="l00944"></a>00944         <span class="keywordflow">return</span> 0;
<a name="l00945"></a>00945 }
<a name="l00946"></a>00946 
<a name="l00947"></a>00947 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_handle_reset_fifo_val(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, uint8_t ep_addr,
<a name="l00948"></a>00948                                      uint8_t rx_rst, uint8_t tx_rst)
<a name="l00949"></a>00949 {
<a name="l00950"></a>00950         <span class="keywordtype">int</span> retval = -DWC_E_INVALID;
<a name="l00951"></a>00951         uint16_t tx_siz[15];
<a name="l00952"></a>00952         uint16_t rx_siz = 0;
<a name="l00953"></a>00953         <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep_t</a> *ep = NULL;
<a name="l00954"></a>00954         <a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> *core_if = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd);
<a name="l00955"></a>00955         <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;core_params;
<a name="l00956"></a>00956 
<a name="l00957"></a>00957         <span class="keywordflow">if</span> (rx_rst) {
<a name="l00958"></a>00958                 rx_siz = params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a>;
<a name="l00959"></a>00959                 params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;init_rxfsiz;
<a name="l00960"></a>00960         }
<a name="l00961"></a>00961 
<a name="l00962"></a>00962         <span class="keywordflow">if</span> (tx_rst) {
<a name="l00963"></a>00963                 <span class="keywordflow">if</span> (ep_addr == 0) {
<a name="l00964"></a>00964                         <span class="keywordtype">int</span> i;
<a name="l00965"></a>00965 
<a name="l00966"></a>00966                         <span class="keywordflow">for</span> (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l00967"></a>00967                                 tx_siz[i] =
<a name="l00968"></a>00968                                     core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i];
<a name="l00969"></a>00969                                 core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i] =
<a name="l00970"></a>00970                                     core_if-&gt;init_txfsiz[i];
<a name="l00971"></a>00971                         }
<a name="l00972"></a>00972                 } <span class="keywordflow">else</span> {
<a name="l00973"></a>00973 
<a name="l00974"></a>00974                         ep = <a class="code" href="dwc__otg__pcd__intr_8c.html#3c351d7f51d6242296d6ea3bb1a9775c">get_ep_by_addr</a>(pcd, ep_addr);
<a name="l00975"></a>00975 
<a name="l00976"></a>00976                         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l00977"></a>00977                                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l00978"></a>00978                                     (<span class="stringliteral">"%s: Unable to get the endpoint addr=0x%02x\n"</span>,
<a name="l00979"></a>00979                                      __func__, ep_addr);
<a name="l00980"></a>00980                                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l00981"></a>00981                         }
<a name="l00982"></a>00982 
<a name="l00983"></a>00983                         tx_siz[0] =
<a name="l00984"></a>00984                             params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a> -
<a name="l00985"></a>00985                                                      1];
<a name="l00986"></a>00986                         params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a> - 1] =
<a name="l00987"></a>00987                             <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;init_txfsiz[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.
<a name="l00988"></a>00988                                                           tx_fifo_num - 1];
<a name="l00989"></a>00989                 }
<a name="l00990"></a>00990         }
<a name="l00991"></a>00991 
<a name="l00992"></a>00992         <span class="keywordflow">if</span> (resize_fifos(<a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd))) {
<a name="l00993"></a>00993                 retval = 0;
<a name="l00994"></a>00994         } <span class="keywordflow">else</span> {
<a name="l00995"></a>00995                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l00996"></a>00996                     (<span class="stringliteral">"%s: Error resetting the feature Reset All(FIFO size)\n"</span>,
<a name="l00997"></a>00997                      __func__);
<a name="l00998"></a>00998                 <span class="keywordflow">if</span> (rx_rst) {
<a name="l00999"></a>00999                         params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> = rx_siz;
<a name="l01000"></a>01000                 }
<a name="l01001"></a>01001 
<a name="l01002"></a>01002                 <span class="keywordflow">if</span> (tx_rst) {
<a name="l01003"></a>01003                         <span class="keywordflow">if</span> (ep_addr == 0) {
<a name="l01004"></a>01004                                 <span class="keywordtype">int</span> i;
<a name="l01005"></a>01005                                 <span class="keywordflow">for</span> (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>;
<a name="l01006"></a>01006                                      i++) {
<a name="l01007"></a>01007                                         core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>-&gt;
<a name="l01008"></a>01008                                             dev_tx_fifo_size[i] = tx_siz[i];
<a name="l01009"></a>01009                                 }
<a name="l01010"></a>01010                         } <span class="keywordflow">else</span> {
<a name="l01011"></a>01011                                 params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.
<a name="l01012"></a>01012                                                          tx_fifo_num - 1] =
<a name="l01013"></a>01013                                     tx_siz[0];
<a name="l01014"></a>01014                         }
<a name="l01015"></a>01015                 }
<a name="l01016"></a>01016                 retval = -DWC_E_INVALID;
<a name="l01017"></a>01017         }
<a name="l01018"></a>01018         <span class="keywordflow">return</span> retval;
<a name="l01019"></a>01019 }
<a name="l01020"></a>01020 
<a name="l01021"></a>01021 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_handle_reset_all(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, uint8_t addr)
<a name="l01022"></a>01022 {
<a name="l01023"></a>01023         <span class="keywordtype">int</span> retval = 0;
<a name="l01024"></a>01024         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l01025"></a>01025         <a class="code" href="structcfiobject.html">cfiobject_t</a> *cfi = pcd-&gt;cfi;
<a name="l01026"></a>01026         dwc_list_link_t *tmp;
<a name="l01027"></a>01027 
<a name="l01028"></a>01028         retval = cfi_handle_reset_fifo_val(pcd, addr, 1, 1);
<a name="l01029"></a>01029         <span class="keywordflow">if</span> (retval &lt; 0) {
<a name="l01030"></a>01030                 <span class="keywordflow">return</span> retval;
<a name="l01031"></a>01031         }
<a name="l01032"></a>01032 
<a name="l01033"></a>01033         <span class="comment">/* If the EP address is known then reset the features for only that EP */</span>
<a name="l01034"></a>01034         <span class="keywordflow">if</span> (addr) {
<a name="l01035"></a>01035                 cfiep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01036"></a>01036                 <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l01037"></a>01037                         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Error getting the EP address 0x%02x\n"</span>,
<a name="l01038"></a>01038                                  __func__, addr);
<a name="l01039"></a>01039                         <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01040"></a>01040                 }
<a name="l01041"></a>01041                 retval = cfi_ep_reset_all_setup_vals(cfiep);
<a name="l01042"></a>01042                 cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_STANDARD;
<a name="l01043"></a>01043         }
<a name="l01044"></a>01044         <span class="comment">/* Otherwise (wValue == 0), reset all features of all EP's */</span>
<a name="l01045"></a>01045         <span class="keywordflow">else</span> {
<a name="l01046"></a>01046                 <span class="comment">/* Traverse all the active EP's and reset the feature(s) value(s) */</span>
<a name="l01047"></a>01047                 <span class="comment">//list_for_each_entry(cfiep, &amp;cfi-&gt;active_eps, lh) {</span>
<a name="l01048"></a>01048                 DWC_LIST_FOREACH(tmp, &amp;cfi-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>) {
<a name="l01049"></a>01049                         cfiep = DWC_LIST_ENTRY(tmp, <span class="keyword">struct</span> <a class="code" href="structcfi__ep.html">cfi_ep</a>, lh);
<a name="l01050"></a>01050                         retval = cfi_ep_reset_all_setup_vals(cfiep);
<a name="l01051"></a>01051                         cfiep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_STANDARD;
<a name="l01052"></a>01052                         <span class="keywordflow">if</span> (retval &lt; 0) {
<a name="l01053"></a>01053                                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01054"></a>01054                                     (<span class="stringliteral">"%s: Error resetting the feature Reset All\n"</span>,
<a name="l01055"></a>01055                                      __func__);
<a name="l01056"></a>01056                                 <span class="keywordflow">return</span> retval;
<a name="l01057"></a>01057                         }
<a name="l01058"></a>01058                 }
<a name="l01059"></a>01059         }
<a name="l01060"></a>01060         <span class="keywordflow">return</span> retval;
<a name="l01061"></a>01061 }
<a name="l01062"></a>01062 
<a name="l01063"></a>01063 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_handle_reset_dma_buff_setup(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l01064"></a>01064                                            uint8_t addr)
<a name="l01065"></a>01065 {
<a name="l01066"></a>01066         <span class="keywordtype">int</span> retval = 0;
<a name="l01067"></a>01067         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l01068"></a>01068         <a class="code" href="structcfiobject.html">cfiobject_t</a> *cfi = pcd-&gt;cfi;
<a name="l01069"></a>01069         dwc_list_link_t *tmp;
<a name="l01070"></a>01070 
<a name="l01071"></a>01071         <span class="comment">/* If the EP address is known then reset the features for only that EP */</span>
<a name="l01072"></a>01072         <span class="keywordflow">if</span> (addr) {
<a name="l01073"></a>01073                 cfiep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01074"></a>01074                 <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l01075"></a>01075                         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Error getting the EP address 0x%02x\n"</span>,
<a name="l01076"></a>01076                                  __func__, addr);
<a name="l01077"></a>01077                         <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01078"></a>01078                 }
<a name="l01079"></a>01079                 retval = cfi_reset_sg_val(cfiep);
<a name="l01080"></a>01080         }
<a name="l01081"></a>01081         <span class="comment">/* Otherwise (wValue == 0), reset all features of all EP's */</span>
<a name="l01082"></a>01082         <span class="keywordflow">else</span> {
<a name="l01083"></a>01083                 <span class="comment">/* Traverse all the active EP's and reset the feature(s) value(s) */</span>
<a name="l01084"></a>01084                 <span class="comment">//list_for_each_entry(cfiep, &amp;cfi-&gt;active_eps, lh) {</span>
<a name="l01085"></a>01085                 DWC_LIST_FOREACH(tmp, &amp;cfi-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>) {
<a name="l01086"></a>01086                         cfiep = DWC_LIST_ENTRY(tmp, <span class="keyword">struct</span> <a class="code" href="structcfi__ep.html">cfi_ep</a>, lh);
<a name="l01087"></a>01087                         retval = cfi_reset_sg_val(cfiep);
<a name="l01088"></a>01088                         <span class="keywordflow">if</span> (retval &lt; 0) {
<a name="l01089"></a>01089                                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01090"></a>01090                                     (<span class="stringliteral">"%s: Error resetting the feature Buffer Setup\n"</span>,
<a name="l01091"></a>01091                                      __func__);
<a name="l01092"></a>01092                                 <span class="keywordflow">return</span> retval;
<a name="l01093"></a>01093                         }
<a name="l01094"></a>01094                 }
<a name="l01095"></a>01095         }
<a name="l01096"></a>01096         <span class="keywordflow">return</span> retval;
<a name="l01097"></a>01097 }
<a name="l01098"></a>01098 
<a name="l01099"></a>01099 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_handle_reset_concat_val(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, uint8_t addr)
<a name="l01100"></a>01100 {
<a name="l01101"></a>01101         <span class="keywordtype">int</span> retval = 0;
<a name="l01102"></a>01102         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l01103"></a>01103         <a class="code" href="structcfiobject.html">cfiobject_t</a> *cfi = pcd-&gt;cfi;
<a name="l01104"></a>01104         dwc_list_link_t *tmp;
<a name="l01105"></a>01105 
<a name="l01106"></a>01106         <span class="comment">/* If the EP address is known then reset the features for only that EP */</span>
<a name="l01107"></a>01107         <span class="keywordflow">if</span> (addr) {
<a name="l01108"></a>01108                 cfiep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01109"></a>01109                 <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l01110"></a>01110                         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Error getting the EP address 0x%02x\n"</span>,
<a name="l01111"></a>01111                                  __func__, addr);
<a name="l01112"></a>01112                         <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01113"></a>01113                 }
<a name="l01114"></a>01114                 retval = cfi_reset_concat_val(cfiep);
<a name="l01115"></a>01115         }
<a name="l01116"></a>01116         <span class="comment">/* Otherwise (wValue == 0), reset all features of all EP's */</span>
<a name="l01117"></a>01117         <span class="keywordflow">else</span> {
<a name="l01118"></a>01118                 <span class="comment">/* Traverse all the active EP's and reset the feature(s) value(s) */</span>
<a name="l01119"></a>01119                 <span class="comment">//list_for_each_entry(cfiep, &amp;cfi-&gt;active_eps, lh) {</span>
<a name="l01120"></a>01120                 DWC_LIST_FOREACH(tmp, &amp;cfi-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>) {
<a name="l01121"></a>01121                         cfiep = DWC_LIST_ENTRY(tmp, <span class="keyword">struct</span> <a class="code" href="structcfi__ep.html">cfi_ep</a>, lh);
<a name="l01122"></a>01122                         retval = cfi_reset_concat_val(cfiep);
<a name="l01123"></a>01123                         <span class="keywordflow">if</span> (retval &lt; 0) {
<a name="l01124"></a>01124                                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01125"></a>01125                                     (<span class="stringliteral">"%s: Error resetting the feature Concatenation Value\n"</span>,
<a name="l01126"></a>01126                                      __func__);
<a name="l01127"></a>01127                                 <span class="keywordflow">return</span> retval;
<a name="l01128"></a>01128                         }
<a name="l01129"></a>01129                 }
<a name="l01130"></a>01130         }
<a name="l01131"></a>01131         <span class="keywordflow">return</span> retval;
<a name="l01132"></a>01132 }
<a name="l01133"></a>01133 
<a name="l01134"></a>01134 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_handle_reset_align_val(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, uint8_t addr)
<a name="l01135"></a>01135 {
<a name="l01136"></a>01136         <span class="keywordtype">int</span> retval = 0;
<a name="l01137"></a>01137         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *cfiep;
<a name="l01138"></a>01138         <a class="code" href="structcfiobject.html">cfiobject_t</a> *cfi = pcd-&gt;cfi;
<a name="l01139"></a>01139         dwc_list_link_t *tmp;
<a name="l01140"></a>01140 
<a name="l01141"></a>01141         <span class="comment">/* If the EP address is known then reset the features for only that EP */</span>
<a name="l01142"></a>01142         <span class="keywordflow">if</span> (addr) {
<a name="l01143"></a>01143                 cfiep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01144"></a>01144                 <span class="keywordflow">if</span> (NULL == cfiep) {
<a name="l01145"></a>01145                         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Error getting the EP address 0x%02x\n"</span>,
<a name="l01146"></a>01146                                  __func__, addr);
<a name="l01147"></a>01147                         <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01148"></a>01148                 }
<a name="l01149"></a>01149                 retval = cfi_reset_align_val(cfiep);
<a name="l01150"></a>01150         }
<a name="l01151"></a>01151         <span class="comment">/* Otherwise (wValue == 0), reset all features of all EP's */</span>
<a name="l01152"></a>01152         <span class="keywordflow">else</span> {
<a name="l01153"></a>01153                 <span class="comment">/* Traverse all the active EP's and reset the feature(s) value(s) */</span>
<a name="l01154"></a>01154                 <span class="comment">//list_for_each_entry(cfiep, &amp;cfi-&gt;active_eps, lh) {</span>
<a name="l01155"></a>01155                 DWC_LIST_FOREACH(tmp, &amp;cfi-&gt;<a class="code" href="structcfiobject.html#82805f011abf3deace7faa159729229a">active_eps</a>) {
<a name="l01156"></a>01156                         cfiep = DWC_LIST_ENTRY(tmp, <span class="keyword">struct</span> <a class="code" href="structcfi__ep.html">cfi_ep</a>, lh);
<a name="l01157"></a>01157                         retval = cfi_reset_align_val(cfiep);
<a name="l01158"></a>01158                         <span class="keywordflow">if</span> (retval &lt; 0) {
<a name="l01159"></a>01159                                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01160"></a>01160                                     (<span class="stringliteral">"%s: Error resetting the feature Aliignment Value\n"</span>,
<a name="l01161"></a>01161                                      __func__);
<a name="l01162"></a>01162                                 <span class="keywordflow">return</span> retval;
<a name="l01163"></a>01163                         }
<a name="l01164"></a>01164                 }
<a name="l01165"></a>01165         }
<a name="l01166"></a>01166         <span class="keywordflow">return</span> retval;
<a name="l01167"></a>01167 
<a name="l01168"></a>01168 }
<a name="l01169"></a>01169 
<a name="l01170"></a>01170 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_preproc_reset(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l01171"></a>01171                              <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req)
<a name="l01172"></a>01172 {
<a name="l01173"></a>01173         <span class="keywordtype">int</span> retval = 0;
<a name="l01174"></a>01174 
<a name="l01175"></a>01175         <span class="keywordflow">switch</span> (req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#984c95bd61e8d1120cd935bcbc5d7134">wIndex</a>) {
<a name="l01176"></a>01176         <span class="keywordflow">case</span> 0:
<a name="l01177"></a>01177                 <span class="comment">/* Reset all features */</span>
<a name="l01178"></a>01178                 retval = cfi_handle_reset_all(pcd, req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xff);
<a name="l01179"></a>01179                 <span class="keywordflow">break</span>;
<a name="l01180"></a>01180 
<a name="l01181"></a>01181         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#98840b45640251bfafa3481260aef889">FT_ID_DMA_BUFFER_SETUP</a>:
<a name="l01182"></a>01182                 <span class="comment">/* Reset the SG buffer setup */</span>
<a name="l01183"></a>01183                 retval =
<a name="l01184"></a>01184                     cfi_handle_reset_dma_buff_setup(pcd, req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xff);
<a name="l01185"></a>01185                 <span class="keywordflow">break</span>;
<a name="l01186"></a>01186 
<a name="l01187"></a>01187         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#779a11db5843dd058581d93c8232bd7c">FT_ID_DMA_CONCAT_SETUP</a>:
<a name="l01188"></a>01188                 <span class="comment">/* Reset the Concatenation buffer setup */</span>
<a name="l01189"></a>01189                 retval = cfi_handle_reset_concat_val(pcd, req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xff);
<a name="l01190"></a>01190                 <span class="keywordflow">break</span>;
<a name="l01191"></a>01191 
<a name="l01192"></a>01192         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#9335284cd4dae01f4bc0da7cb89d5ef4">FT_ID_DMA_BUFF_ALIGN</a>:
<a name="l01193"></a>01193                 <span class="comment">/* Reset the Alignment buffer setup */</span>
<a name="l01194"></a>01194                 retval = cfi_handle_reset_align_val(pcd, req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xff);
<a name="l01195"></a>01195                 <span class="keywordflow">break</span>;
<a name="l01196"></a>01196 
<a name="l01197"></a>01197         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#a3a67b679a59c5279370bbf69f114cb6">FT_ID_TX_FIFO_DEPTH</a>:
<a name="l01198"></a>01198                 retval =
<a name="l01199"></a>01199                     cfi_handle_reset_fifo_val(pcd, req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xff, 0, 1);
<a name="l01200"></a>01200                 pcd-&gt;cfi-&gt;need_gadget_att = 0;
<a name="l01201"></a>01201                 <span class="keywordflow">break</span>;
<a name="l01202"></a>01202 
<a name="l01203"></a>01203         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#42b7c98c105de1f9399786a3419e7e20">FT_ID_RX_FIFO_DEPTH</a>:
<a name="l01204"></a>01204                 retval = cfi_handle_reset_fifo_val(pcd, 0, 1, 0);
<a name="l01205"></a>01205                 pcd-&gt;cfi-&gt;need_gadget_att = 0;
<a name="l01206"></a>01206                 <span class="keywordflow">break</span>;
<a name="l01207"></a>01207         <span class="keywordflow">default</span>:
<a name="l01208"></a>01208                 <span class="keywordflow">break</span>;
<a name="l01209"></a>01209         }
<a name="l01210"></a>01210         <span class="keywordflow">return</span> retval;
<a name="l01211"></a>01211 }
<a name="l01212"></a>01212 
<a name="l01216"></a>01216 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_set_sg_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd)
<a name="l01217"></a>01217 {
<a name="l01218"></a>01218         uint8_t inaddr, outaddr;
<a name="l01219"></a>01219         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *epin, *epout;
<a name="l01220"></a>01220         <a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a> *psgval;
<a name="l01221"></a>01221         uint32_t desccount, size;
<a name="l01222"></a>01222 
<a name="l01223"></a>01223         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s\n"</span>, __func__);
<a name="l01224"></a>01224 
<a name="l01225"></a>01225         psgval = (<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a> *) buf;
<a name="l01226"></a>01226         desccount = (uint32_t) psgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#6287daf5a964bf1d09e8ffca29b88748">bCount</a>;
<a name="l01227"></a>01227         size = (uint32_t) psgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#728db9bac2db62f7e7b2b9ccb0873546">wSize</a>;
<a name="l01228"></a>01228 
<a name="l01229"></a>01229         <span class="comment">/* Check the DMA descriptor count */</span>
<a name="l01230"></a>01230         <span class="keywordflow">if</span> ((desccount &gt; MAX_DMA_DESCS_PER_EP) || (desccount == 0)) {
<a name="l01231"></a>01231                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01232"></a>01232                     (<span class="stringliteral">"%s: The count of DMA Descriptors should be between 1 and %d\n"</span>,
<a name="l01233"></a>01233                      __func__, MAX_DMA_DESCS_PER_EP);
<a name="l01234"></a>01234                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01235"></a>01235         }
<a name="l01236"></a>01236 
<a name="l01237"></a>01237         <span class="comment">/* Check the DMA descriptor count */</span>
<a name="l01238"></a>01238 
<a name="l01239"></a>01239         <span class="keywordflow">if</span> (size == 0) {
<a name="l01240"></a>01240 
<a name="l01241"></a>01241                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: The transfer size should be at least 1 byte\n"</span>,
<a name="l01242"></a>01242                          __func__);
<a name="l01243"></a>01243 
<a name="l01244"></a>01244                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01245"></a>01245 
<a name="l01246"></a>01246         }
<a name="l01247"></a>01247 
<a name="l01248"></a>01248         inaddr = psgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#bb435a2ac72bfd26384c9b5b1b0b35af">bInEndpointAddress</a>;
<a name="l01249"></a>01249         outaddr = psgval-&gt;<a class="code" href="struct__ddma__sg__buffer__setup.html#b61eaff3e4857fd6223d9fc678814786">bOutEndpointAddress</a>;
<a name="l01250"></a>01250 
<a name="l01251"></a>01251         epin = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, inaddr);
<a name="l01252"></a>01252         epout = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, outaddr);
<a name="l01253"></a>01253 
<a name="l01254"></a>01254         <span class="keywordflow">if</span> (NULL == epin || NULL == epout) {
<a name="l01255"></a>01255                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01256"></a>01256                     (<span class="stringliteral">"%s: Unable to get the endpoints inaddr=0x%02x outaddr=0x%02x\n"</span>,
<a name="l01257"></a>01257                      __func__, inaddr, outaddr);
<a name="l01258"></a>01258                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01259"></a>01259         }
<a name="l01260"></a>01260 
<a name="l01261"></a>01261         epin-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_SG;
<a name="l01262"></a>01262         dwc_memcpy(epin-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>, psgval, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a>));
<a name="l01263"></a>01263 
<a name="l01264"></a>01264         epout-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_SG;
<a name="l01265"></a>01265         dwc_memcpy(epout-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>, psgval, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__sg__buffer__setup.html">ddma_sg_buffer_setup_t</a>));
<a name="l01266"></a>01266 
<a name="l01267"></a>01267         <span class="keywordflow">return</span> 0;
<a name="l01268"></a>01268 }
<a name="l01269"></a>01269 
<a name="l01273"></a>01273 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_set_alignment_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd)
<a name="l01274"></a>01274 {
<a name="l01275"></a>01275         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *ep;
<a name="l01276"></a>01276         uint8_t addr;
<a name="l01277"></a>01277         <a class="code" href="struct__ddma__align__buffer__setup.html">ddma_align_buffer_setup_t</a> *palignval;
<a name="l01278"></a>01278 
<a name="l01279"></a>01279         palignval = (<a class="code" href="struct__ddma__align__buffer__setup.html">ddma_align_buffer_setup_t</a> *) buf;
<a name="l01280"></a>01280         addr = palignval-&gt;<a class="code" href="struct__ddma__align__buffer__setup.html#28008cbe6479b7473aa21ac2d3ceaf67">bEndpointAddress</a>;
<a name="l01281"></a>01281 
<a name="l01282"></a>01282         ep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01283"></a>01283 
<a name="l01284"></a>01284         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01285"></a>01285                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint addr=0x%02x\n"</span>,
<a name="l01286"></a>01286                          __func__, addr);
<a name="l01287"></a>01287                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01288"></a>01288         }
<a name="l01289"></a>01289 
<a name="l01290"></a>01290         ep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_ALIGN;
<a name="l01291"></a>01291         dwc_memcpy(ep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>, palignval, <span class="keyword">sizeof</span>(<a class="code" href="struct__ddma__align__buffer__setup.html">ddma_align_buffer_setup_t</a>));
<a name="l01292"></a>01292 
<a name="l01293"></a>01293         <span class="keywordflow">return</span> 0;
<a name="l01294"></a>01294 }
<a name="l01295"></a>01295 
<a name="l01299"></a>01299 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_set_concat_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd)
<a name="l01300"></a>01300 {
<a name="l01301"></a>01301         uint8_t addr;
<a name="l01302"></a>01302         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *ep;
<a name="l01303"></a>01303         <span class="keyword">struct </span><a class="code" href="struct__ddma__concat__buffer__setup__hdr.html">_ddma_concat_buffer_setup_hdr</a> *pConcatValHdr;
<a name="l01304"></a>01304         uint16_t *pVals;
<a name="l01305"></a>01305         uint32_t desccount;
<a name="l01306"></a>01306         <span class="keywordtype">int</span> i;
<a name="l01307"></a>01307         uint16_t mps;
<a name="l01308"></a>01308 
<a name="l01309"></a>01309         pConcatValHdr = (<span class="keyword">struct </span><a class="code" href="struct__ddma__concat__buffer__setup__hdr.html">_ddma_concat_buffer_setup_hdr</a> *)buf;
<a name="l01310"></a>01310         desccount = (uint32_t) pConcatValHdr-&gt;<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#605becc1e8a681d6623343b28013b56a">bDescCount</a>;
<a name="l01311"></a>01311         pVals = (uint16_t *) (buf + <a class="code" href="dwc__otg__cfi_8h.html#c89955571b72df025126a1047bc53a00">BS_CONCAT_VAL_HDR_LEN</a>);
<a name="l01312"></a>01312 
<a name="l01313"></a>01313         <span class="comment">/* Check the DMA descriptor count */</span>
<a name="l01314"></a>01314         <span class="keywordflow">if</span> (desccount &gt; MAX_DMA_DESCS_PER_EP) {
<a name="l01315"></a>01315                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Maximum DMA Descriptor count should be %d\n"</span>,
<a name="l01316"></a>01316                          __func__, MAX_DMA_DESCS_PER_EP);
<a name="l01317"></a>01317                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01318"></a>01318         }
<a name="l01319"></a>01319 
<a name="l01320"></a>01320         addr = pConcatValHdr-&gt;<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#b6e4aab1ee8884a314ba38326ea85f24">bEndpointAddress</a>;
<a name="l01321"></a>01321         ep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01322"></a>01322         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01323"></a>01323                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint addr=0x%02x\n"</span>,
<a name="l01324"></a>01324                          __func__, addr);
<a name="l01325"></a>01325                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01326"></a>01326         }
<a name="l01327"></a>01327 
<a name="l01328"></a>01328         mps = UGETW(ep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#86e27843c439dd0b1d12d9bf2dc6516f">desc</a>-&gt;wMaxPacketSize);
<a name="l01329"></a>01329 
<a name="l01330"></a>01330 <span class="preprocessor">#if 0</span>
<a name="l01331"></a>01331 <span class="preprocessor"></span>        <span class="keywordflow">for</span> (i = 0; i &lt; desccount; i++) {
<a name="l01332"></a>01332                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: wTxSize[%d]=0x%04x\n"</span>, __func__, i, pVals[i]);
<a name="l01333"></a>01333         }
<a name="l01334"></a>01334         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: epname=%s; mps=%d\n"</span>, __func__, ep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;ep.name, mps);
<a name="l01335"></a>01335 <span class="preprocessor">#endif</span>
<a name="l01336"></a>01336 <span class="preprocessor"></span>
<a name="l01337"></a>01337         <span class="comment">/* Check the wTxSizes to be less than or equal to the mps */</span>
<a name="l01338"></a>01338         <span class="keywordflow">for</span> (i = 0; i &lt; desccount; i++) {
<a name="l01339"></a>01339                 <span class="keywordflow">if</span> (pVals[i] &gt; mps) {
<a name="l01340"></a>01340                         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01341"></a>01341                             (<span class="stringliteral">"%s: ERROR - the wTxSize[%d] should be &lt;= MPS (wTxSize=%d)\n"</span>,
<a name="l01342"></a>01342                              __func__, i, pVals[i]);
<a name="l01343"></a>01343                         <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01344"></a>01344                 }
<a name="l01345"></a>01345         }
<a name="l01346"></a>01346 
<a name="l01347"></a>01347         ep-&gt;<a class="code" href="structcfi__ep.html#07c11a23c68b5ce8d546819211b2fa4b">ep</a>-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.buff_mode = BM_CONCAT;
<a name="l01348"></a>01348         dwc_memcpy(ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>, pConcatValHdr, <a class="code" href="dwc__otg__cfi_8h.html#c89955571b72df025126a1047bc53a00">BS_CONCAT_VAL_HDR_LEN</a>);
<a name="l01349"></a>01349 
<a name="l01350"></a>01350         <span class="comment">/* Free the previously allocated storage for the wTxBytes */</span>
<a name="l01351"></a>01351         <span class="keywordflow">if</span> (ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>) {
<a name="l01352"></a>01352                 dwc_free(ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>);
<a name="l01353"></a>01353         }
<a name="l01354"></a>01354 
<a name="l01355"></a>01355         <span class="comment">/* Allocate a new storage for the wTxBytes field */</span>
<a name="l01356"></a>01356         ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a> =
<a name="l01357"></a>01357             dwc_alloc(<span class="keyword">sizeof</span>(uint16_t) * pConcatValHdr-&gt;<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#605becc1e8a681d6623343b28013b56a">bDescCount</a>);
<a name="l01358"></a>01358         <span class="keywordflow">if</span> (NULL == ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>) {
<a name="l01359"></a>01359                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to allocate memory\n"</span>, __func__);
<a name="l01360"></a>01360                 <span class="keywordflow">return</span> -DWC_E_NO_MEMORY;
<a name="l01361"></a>01361         }
<a name="l01362"></a>01362 
<a name="l01363"></a>01363         <span class="comment">/* Copy the new values into the wTxBytes filed */</span>
<a name="l01364"></a>01364         dwc_memcpy(ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>, buf + <a class="code" href="dwc__otg__cfi_8h.html#c89955571b72df025126a1047bc53a00">BS_CONCAT_VAL_HDR_LEN</a>,
<a name="l01365"></a>01365                    <span class="keyword">sizeof</span>(uint16_t) * pConcatValHdr-&gt;<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#605becc1e8a681d6623343b28013b56a">bDescCount</a>);
<a name="l01366"></a>01366 
<a name="l01367"></a>01367         <span class="keywordflow">return</span> 0;
<a name="l01368"></a>01368 }
<a name="l01369"></a>01369 
<a name="l01378"></a>01378 <span class="keyword">static</span> uint16_t get_dfifo_size(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if)
<a name="l01379"></a>01379 {
<a name="l01380"></a>01380         <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params = core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>;
<a name="l01381"></a>01381         uint16_t dfifo_total = 0;
<a name="l01382"></a>01382         <span class="keywordtype">int</span> i;
<a name="l01383"></a>01383 
<a name="l01384"></a>01384         <span class="comment">/* The shared RxFIFO size */</span>
<a name="l01385"></a>01385         dfifo_total =
<a name="l01386"></a>01386             params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> + params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a>;
<a name="l01387"></a>01387 
<a name="l01388"></a>01388         <span class="comment">/* Add up each TxFIFO size to the total */</span>
<a name="l01389"></a>01389         <span class="keywordflow">for</span> (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01390"></a>01390                 dfifo_total += params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i];
<a name="l01391"></a>01391         }
<a name="l01392"></a>01392 
<a name="l01393"></a>01393         <span class="keywordflow">return</span> dfifo_total;
<a name="l01394"></a>01394 }
<a name="l01395"></a>01395 
<a name="l01404"></a>01404 <span class="keyword">static</span> int32_t get_rxfifo_size(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if, uint16_t wValue)
<a name="l01405"></a>01405 {
<a name="l01406"></a>01406         <span class="keywordflow">switch</span> (wValue &gt;&gt; 8) {
<a name="l01407"></a>01407         <span class="keywordflow">case</span> 0:
<a name="l01408"></a>01408                 <span class="keywordflow">return</span> (core_if-&gt;pwron_rxfsiz &lt;
<a name="l01409"></a>01409                         32768) ? core_if-&gt;pwron_rxfsiz : 32768;
<a name="l01410"></a>01410                 <span class="keywordflow">break</span>;
<a name="l01411"></a>01411         <span class="keywordflow">case</span> 1:
<a name="l01412"></a>01412                 <span class="keywordflow">return</span> core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a>;
<a name="l01413"></a>01413                 <span class="keywordflow">break</span>;
<a name="l01414"></a>01414         <span class="keywordflow">default</span>:
<a name="l01415"></a>01415                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01416"></a>01416                 <span class="keywordflow">break</span>;
<a name="l01417"></a>01417         }
<a name="l01418"></a>01418 }
<a name="l01419"></a>01419 
<a name="l01428"></a>01428 <span class="keyword">static</span> int32_t get_txfifo_size(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd, uint16_t wValue)
<a name="l01429"></a>01429 {
<a name="l01430"></a>01430         <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep_t</a> *ep;
<a name="l01431"></a>01431 
<a name="l01432"></a>01432         ep = <a class="code" href="dwc__otg__pcd__intr_8c.html#3c351d7f51d6242296d6ea3bb1a9775c">get_ep_by_addr</a>(pcd, wValue &amp; 0xff);
<a name="l01433"></a>01433 
<a name="l01434"></a>01434         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01435"></a>01435                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint addr=0x%02x\n"</span>,
<a name="l01436"></a>01436                          __func__, wValue &amp; 0xff);
<a name="l01437"></a>01437                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01438"></a>01438         }
<a name="l01439"></a>01439 
<a name="l01440"></a>01440         <span class="keywordflow">if</span> (!ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#b882b6b7c857100ed20600e94ea37760">is_in</a>) {
<a name="l01441"></a>01441                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01442"></a>01442                     (<span class="stringliteral">"%s: No Tx FIFO assingned to the Out endpoint addr=0x%02x\n"</span>,
<a name="l01443"></a>01443                      __func__, wValue &amp; 0xff);
<a name="l01444"></a>01444                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01445"></a>01445         }
<a name="l01446"></a>01446 
<a name="l01447"></a>01447         <span class="keywordflow">switch</span> (wValue &gt;&gt; 8) {
<a name="l01448"></a>01448         <span class="keywordflow">case</span> 0:
<a name="l01449"></a>01449                 <span class="keywordflow">return</span> (<a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;
<a name="l01450"></a>01450                         pwron_txfsiz[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a> - 1] &lt;
<a name="l01451"></a>01451                         768) ? <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;pwron_txfsiz[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.
<a name="l01452"></a>01452                                                               tx_fifo_num -
<a name="l01453"></a>01453                                                               1] : 32768;
<a name="l01454"></a>01454                 <span class="keywordflow">break</span>;
<a name="l01455"></a>01455         <span class="keywordflow">case</span> 1:
<a name="l01456"></a>01456                 <span class="keywordflow">return</span> <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;core_params-&gt;dev_tx_fifo_size[ep-&gt;
<a name="l01457"></a>01457                                                                        <a class="code" href="structdwc__ep.html">dwc_ep</a>.
<a name="l01458"></a>01458                                                                        num - 1];
<a name="l01459"></a>01459                 <span class="keywordflow">break</span>;
<a name="l01460"></a>01460         <span class="keywordflow">default</span>:
<a name="l01461"></a>01461                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01462"></a>01462                 <span class="keywordflow">break</span>;
<a name="l01463"></a>01463         }
<a name="l01464"></a>01464 }
<a name="l01465"></a>01465 
<a name="l01475"></a>01475 <span class="keyword">static</span> uint8_t check_fifo_sizes(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if)
<a name="l01476"></a>01476 {
<a name="l01477"></a>01477         uint16_t dfifo_actual = 0;
<a name="l01478"></a>01478         <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params = core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>;
<a name="l01479"></a>01479         uint16_t start_addr = 0;
<a name="l01480"></a>01480         <span class="keywordtype">int</span> i;
<a name="l01481"></a>01481 
<a name="l01482"></a>01482         dfifo_actual =
<a name="l01483"></a>01483             params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> + params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a>;
<a name="l01484"></a>01484 
<a name="l01485"></a>01485         <span class="keywordflow">for</span> (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01486"></a>01486                 dfifo_actual += params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i];
<a name="l01487"></a>01487         }
<a name="l01488"></a>01488 
<a name="l01489"></a>01489         <span class="keywordflow">if</span> (dfifo_actual &gt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#cae59008a554cb7de24bd4f2afea7532">total_fifo_size</a>) {
<a name="l01490"></a>01490                 <span class="keywordflow">return</span> 0;
<a name="l01491"></a>01491         }
<a name="l01492"></a>01492 
<a name="l01493"></a>01493         <span class="keywordflow">if</span> (params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> &gt; 32768 || params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> &lt; 16)
<a name="l01494"></a>01494                 <span class="keywordflow">return</span> 0;
<a name="l01495"></a>01495 
<a name="l01496"></a>01496         if (params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a> &gt; 32768
<a name="l01497"></a>01497             || params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a> &lt; 16)
<a name="l01498"></a>01498                 <span class="keywordflow">return</span> 0;
<a name="l01499"></a>01499 
<a name="l01500"></a>01500         for (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01501"></a>01501 
<a name="l01502"></a>01502                 <span class="keywordflow">if</span> (params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i] &gt; 768
<a name="l01503"></a>01503                     || params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i] &lt; 4)
<a name="l01504"></a>01504                         <span class="keywordflow">return</span> 0;
<a name="l01505"></a>01505         }
<a name="l01506"></a>01506 
<a name="l01507"></a>01507         <span class="keywordflow">if</span> (params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> &gt; core_if-&gt;pwron_rxfsiz)
<a name="l01508"></a>01508                 <span class="keywordflow">return</span> 0;
<a name="l01509"></a>01509         start_addr = params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a>;
<a name="l01510"></a>01510 
<a name="l01511"></a>01511         if (params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a> &gt; core_if-&gt;pwron_gnptxfsiz)
<a name="l01512"></a>01512                 <span class="keywordflow">return</span> 0;
<a name="l01513"></a>01513         start_addr += params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a>;
<a name="l01514"></a>01514 
<a name="l01515"></a>01515         for (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01516"></a>01516 
<a name="l01517"></a>01517                 <span class="keywordflow">if</span> (params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i] &gt; core_if-&gt;pwron_txfsiz[i])
<a name="l01518"></a>01518                         <span class="keywordflow">return</span> 0;
<a name="l01519"></a>01519                 start_addr += params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i];
<a name="l01520"></a>01520         }
<a name="l01521"></a>01521 
<a name="l01522"></a>01522         <span class="keywordflow">return</span> 1;
<a name="l01523"></a>01523 }
<a name="l01524"></a>01524 
<a name="l01533"></a>01533 <span class="keyword">static</span> uint8_t resize_fifos(<a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> * core_if)
<a name="l01534"></a>01534 {
<a name="l01535"></a>01535         <span class="keywordtype">int</span> i = 0;
<a name="l01536"></a>01536         <a class="code" href="structdwc__otg__core__global__regs.html">dwc_otg_core_global_regs_t</a> *global_regs = core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#909eae7e3b9432ca1e278b99f7811f52">core_global_regs</a>;
<a name="l01537"></a>01537         <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params = core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>;
<a name="l01538"></a>01538         uint32_t rx_fifo_size;
<a name="l01539"></a>01539         <a class="code" href="unionfifosize__data.html">fifosize_data_t</a> nptxfifosize;
<a name="l01540"></a>01540         <a class="code" href="unionfifosize__data.html">fifosize_data_t</a> txfifosize[15];
<a name="l01541"></a>01541 
<a name="l01542"></a>01542         uint32_t rx_fsz_bak;
<a name="l01543"></a>01543         uint32_t nptxfsz_bak;
<a name="l01544"></a>01544         uint32_t txfsz_bak[15];
<a name="l01545"></a>01545 
<a name="l01546"></a>01546         uint16_t start_address;
<a name="l01547"></a>01547         uint8_t retval = 1;
<a name="l01548"></a>01548 
<a name="l01549"></a>01549         <span class="keywordflow">if</span> (!check_fifo_sizes(core_if)) {
<a name="l01550"></a>01550                 <span class="keywordflow">return</span> 0;
<a name="l01551"></a>01551         }
<a name="l01552"></a>01552 
<a name="l01553"></a>01553         <span class="comment">/* Configure data FIFO sizes */</span>
<a name="l01554"></a>01554         <span class="keywordflow">if</span> (core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#e5782c3dc6b5b7a25dfebd4b9bf258c5">hwcfg2</a>.<a class="code" href="unionhwcfg2__data.html#9dcc70e2dba617cbc6c12189be5c1d6a">b</a>.<a class="code" href="unionhwcfg2__data.html#b6bfbfe650352dec82a02d15677fe88d">dynamic_fifo</a> &amp;&amp; params-&gt;<a class="code" href="structdwc__otg__core__params.html#8c169633d4a6f28e964cef9f597c6e03">enable_dynamic_fifo</a>) {
<a name="l01555"></a>01555                 rx_fsz_bak = dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#b1a8cc07a9541c9a73e864579602b79b">grxfsiz</a>);
<a name="l01556"></a>01556                 rx_fifo_size = params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a>;
<a name="l01557"></a>01557                 dwc_write_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#b1a8cc07a9541c9a73e864579602b79b">grxfsiz</a>, rx_fifo_size);
<a name="l01558"></a>01558 
<a name="l01559"></a>01559                 <span class="comment">/*</span>
<a name="l01560"></a>01560 <span class="comment">                 * Tx FIFOs These FIFOs are numbered from 1 to 15.</span>
<a name="l01561"></a>01561 <span class="comment">                 * Indexes of the FIFO size module parameters in the</span>
<a name="l01562"></a>01562 <span class="comment">                 * dev_tx_fifo_size array and the FIFO size registers in</span>
<a name="l01563"></a>01563 <span class="comment">                 * the dptxfsiz_dieptxf array run from 0 to 14.</span>
<a name="l01564"></a>01564 <span class="comment">                 */</span>
<a name="l01565"></a>01565 
<a name="l01566"></a>01566                 <span class="comment">/* Non-periodic Tx FIFO */</span>
<a name="l01567"></a>01567                 nptxfsz_bak = dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#20fb70fe34a1a65d085b1d4e5f8d9106">gnptxfsiz</a>);
<a name="l01568"></a>01568                 nptxfifosize.<a class="code" href="unionfifosize__data.html#4f0c71e88cc54c4efa4cd4ff43334c51">b</a>.<a class="code" href="unionfifosize__data.html#48c08d73da4d2d16d4320b93beb5ba8b">depth</a> = params-&gt;<a class="code" href="structdwc__otg__core__params.html#d08d9aee1fb4e6508089415d6150176e">dev_nperio_tx_fifo_size</a>;
<a name="l01569"></a>01569                 start_address = params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a>;
<a name="l01570"></a>01570                 nptxfifosize.<a class="code" href="unionfifosize__data.html#4f0c71e88cc54c4efa4cd4ff43334c51">b</a>.<a class="code" href="unionfifosize__data.html#26d78332a532cf9c0337c89edbff5f1b">startaddr</a> = start_address;
<a name="l01571"></a>01571 
<a name="l01572"></a>01572                 dwc_write_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#20fb70fe34a1a65d085b1d4e5f8d9106">gnptxfsiz</a>, nptxfifosize.<a class="code" href="unionfifosize__data.html#937e01b91f0a60a5aa9f6a4eaf6ce661">d32</a>);
<a name="l01573"></a>01573 
<a name="l01574"></a>01574                 start_address += nptxfifosize.<a class="code" href="unionfifosize__data.html#4f0c71e88cc54c4efa4cd4ff43334c51">b</a>.<a class="code" href="unionfifosize__data.html#48c08d73da4d2d16d4320b93beb5ba8b">depth</a>;
<a name="l01575"></a>01575 
<a name="l01576"></a>01576                 <span class="keywordflow">for</span> (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01577"></a>01577                         txfsz_bak[i] =
<a name="l01578"></a>01578                             dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#efd9e780825f992dbc6cf46d2d72869e">dptxfsiz_dieptxf</a>[i]);
<a name="l01579"></a>01579 
<a name="l01580"></a>01580                         txfifosize[i].<a class="code" href="unionfifosize__data.html#4f0c71e88cc54c4efa4cd4ff43334c51">b</a>.<a class="code" href="unionfifosize__data.html#48c08d73da4d2d16d4320b93beb5ba8b">depth</a> = params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[i];
<a name="l01581"></a>01581                         txfifosize[i].<a class="code" href="unionfifosize__data.html#4f0c71e88cc54c4efa4cd4ff43334c51">b</a>.<a class="code" href="unionfifosize__data.html#26d78332a532cf9c0337c89edbff5f1b">startaddr</a> = start_address;
<a name="l01582"></a>01582                         dwc_write_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#efd9e780825f992dbc6cf46d2d72869e">dptxfsiz_dieptxf</a>[i],
<a name="l01583"></a>01583                                         txfifosize[i].<a class="code" href="unionfifosize__data.html#937e01b91f0a60a5aa9f6a4eaf6ce661">d32</a>);
<a name="l01584"></a>01584 
<a name="l01585"></a>01585                         start_address += txfifosize[i].<a class="code" href="unionfifosize__data.html#4f0c71e88cc54c4efa4cd4ff43334c51">b</a>.<a class="code" href="unionfifosize__data.html#48c08d73da4d2d16d4320b93beb5ba8b">depth</a>;
<a name="l01586"></a>01586                 }
<a name="l01587"></a>01587 
<a name="l01589"></a>01589                 <span class="keywordflow">if</span> (rx_fifo_size != dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#b1a8cc07a9541c9a73e864579602b79b">grxfsiz</a>)) {
<a name="l01590"></a>01590                         retval = 0;
<a name="l01591"></a>01591                 }
<a name="l01592"></a>01592 
<a name="l01593"></a>01593                 <span class="keywordflow">if</span> (nptxfifosize.<a class="code" href="unionfifosize__data.html#937e01b91f0a60a5aa9f6a4eaf6ce661">d32</a> != dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#20fb70fe34a1a65d085b1d4e5f8d9106">gnptxfsiz</a>)) {
<a name="l01594"></a>01594                         retval = 0;
<a name="l01595"></a>01595                 }
<a name="l01596"></a>01596 
<a name="l01597"></a>01597                 <span class="keywordflow">for</span> (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01598"></a>01598                         <span class="keywordflow">if</span> (txfifosize[i].d32 !=
<a name="l01599"></a>01599                             dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#efd9e780825f992dbc6cf46d2d72869e">dptxfsiz_dieptxf</a>[i])) {
<a name="l01600"></a>01600                                 retval = 0;
<a name="l01601"></a>01601                         }
<a name="l01602"></a>01602                 }
<a name="l01603"></a>01603 
<a name="l01605"></a>01605                 <span class="keywordflow">if</span> (retval == 0) {
<a name="l01606"></a>01606                         dwc_write_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#b1a8cc07a9541c9a73e864579602b79b">grxfsiz</a>, rx_fsz_bak);
<a name="l01607"></a>01607 
<a name="l01608"></a>01608                         <span class="comment">/* Non-periodic Tx FIFO */</span>
<a name="l01609"></a>01609                         dwc_write_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#20fb70fe34a1a65d085b1d4e5f8d9106">gnptxfsiz</a>, nptxfsz_bak);
<a name="l01610"></a>01610 
<a name="l01611"></a>01611                         for (i = 0; i &lt; core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#9c1394f3c46adde2fa7be79bf0237f9b">hwcfg4</a>.<a class="code" href="unionhwcfg4__data.html#9fb9175668e2381c568c5adbf6e5225d">b</a>.<a class="code" href="unionhwcfg4__data.html#753b321350388c5e1307802ff968f9a8">num_in_eps</a>; i++) {
<a name="l01612"></a>01612                                 dwc_write_reg32(&amp;global_regs-&gt;
<a name="l01613"></a>01613                                                 dptxfsiz_dieptxf[i],
<a name="l01614"></a>01614                                                 txfsz_bak[i]);
<a name="l01615"></a>01615                         }
<a name="l01616"></a>01616                 }
<a name="l01617"></a>01617         } <span class="keywordflow">else</span> {
<a name="l01618"></a>01618                 <span class="keywordflow">return</span> 0;
<a name="l01619"></a>01619         }
<a name="l01620"></a>01620 
<a name="l01621"></a>01621         <span class="comment">/* Flush the FIFOs */</span>
<a name="l01622"></a>01622         <a class="code" href="dwc__otg__cil_8c.html#039e387cd0e0282727da3c5a36f4cdda">dwc_otg_flush_tx_fifo</a>(core_if, 0x10);   <span class="comment">/* all Tx FIFOs */</span>
<a name="l01623"></a>01623         <a class="code" href="dwc__otg__cil_8c.html#fb275f0f9923cc30629fce5e3753025c">dwc_otg_flush_rx_fifo</a>(core_if);
<a name="l01624"></a>01624 
<a name="l01625"></a>01625         <span class="keywordflow">return</span> retval;
<a name="l01626"></a>01626 }
<a name="l01627"></a>01627 
<a name="l01631"></a>01631 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_set_tx_fifo_val(uint8_t * buf, <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd_t</a> * pcd)
<a name="l01632"></a>01632 {
<a name="l01633"></a>01633         <span class="keywordtype">int</span> retval;
<a name="l01634"></a>01634         uint32_t fsiz;
<a name="l01635"></a>01635         uint16_t size;
<a name="l01636"></a>01636         uint16_t ep_addr;
<a name="l01637"></a>01637         <a class="code" href="structdwc__otg__pcd__ep.html">dwc_otg_pcd_ep_t</a> *ep;
<a name="l01638"></a>01638         <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;core_params;
<a name="l01639"></a>01639         <a class="code" href="struct__tx__fifo__size__setup.html">tx_fifo_size_setup_t</a> *ptxfifoval;
<a name="l01640"></a>01640 
<a name="l01641"></a>01641         ptxfifoval = (<a class="code" href="struct__tx__fifo__size__setup.html">tx_fifo_size_setup_t</a> *) buf;
<a name="l01642"></a>01642         ep_addr = ptxfifoval-&gt;<a class="code" href="struct__tx__fifo__size__setup.html#c04a19a9c0c93d385f7ea42ed38ba0a6">bEndpointAddress</a>;
<a name="l01643"></a>01643         size = ptxfifoval-&gt;<a class="code" href="struct__tx__fifo__size__setup.html#70fb102a57e335dd8ee56096f3a9f99d">wDepth</a>;
<a name="l01644"></a>01644 
<a name="l01645"></a>01645         ep = <a class="code" href="dwc__otg__pcd__intr_8c.html#3c351d7f51d6242296d6ea3bb1a9775c">get_ep_by_addr</a>(pcd, ep_addr);
<a name="l01646"></a>01646 
<a name="l01647"></a>01647         <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01648"></a>01648             (<span class="stringliteral">"%s: Set Tx FIFO size: endpoint addr=0x%02x, depth=%d, FIFO Num=%d\n"</span>,
<a name="l01649"></a>01649              __func__, ep_addr, size, ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a>);
<a name="l01650"></a>01650 
<a name="l01651"></a>01651         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01652"></a>01652                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint addr=0x%02x\n"</span>,
<a name="l01653"></a>01653                          __func__, ep_addr);
<a name="l01654"></a>01654                 <span class="keywordflow">return</span> -DWC_E_INVALID;
<a name="l01655"></a>01655         }
<a name="l01656"></a>01656 
<a name="l01657"></a>01657         fsiz = params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a> - 1];
<a name="l01658"></a>01658         params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a> - 1] = size;
<a name="l01659"></a>01659 
<a name="l01660"></a>01660         <span class="keywordflow">if</span> (resize_fifos(<a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd))) {
<a name="l01661"></a>01661                 retval = 0;
<a name="l01662"></a>01662         } <span class="keywordflow">else</span> {
<a name="l01663"></a>01663                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>
<a name="l01664"></a>01664                     (<span class="stringliteral">"%s: Error setting the feature Tx FIFO Size for EP%d\n"</span>,
<a name="l01665"></a>01665                      __func__, ep_addr);
<a name="l01666"></a>01666                 params-&gt;<a class="code" href="structdwc__otg__core__params.html#6e0c5d06467fbf3458f11f7eb8153a8b">dev_tx_fifo_size</a>[ep-&gt;<a class="code" href="structdwc__otg__pcd__ep.html#6e43754ce0f3a4fe29e4d70fd58d4f8f">dwc_ep</a>.<a class="code" href="structdwc__ep.html#ffa14f48094778143353b845b5d238cd">tx_fifo_num</a> - 1] = fsiz;
<a name="l01667"></a>01667                 retval = -DWC_E_INVALID;
<a name="l01668"></a>01668         }
<a name="l01669"></a>01669 
<a name="l01670"></a>01670         <span class="keywordflow">return</span> retval;
<a name="l01671"></a>01671 }
<a name="l01672"></a>01672 
<a name="l01676"></a>01676 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_set_rx_fifo_val(uint8_t * buf, <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd_t</a> * pcd)
<a name="l01677"></a>01677 {
<a name="l01678"></a>01678         <span class="keywordtype">int</span> retval;
<a name="l01679"></a>01679         uint32_t fsiz;
<a name="l01680"></a>01680         uint16_t size;
<a name="l01681"></a>01681         <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd)-&gt;core_params;
<a name="l01682"></a>01682         <a class="code" href="struct__rx__fifo__size__setup.html">rx_fifo_size_setup_t</a> *prxfifoval;
<a name="l01683"></a>01683 
<a name="l01684"></a>01684         prxfifoval = (<a class="code" href="struct__rx__fifo__size__setup.html">rx_fifo_size_setup_t</a> *) buf;
<a name="l01685"></a>01685         size = prxfifoval-&gt;<a class="code" href="struct__rx__fifo__size__setup.html#a05d30e9417ac8c2ec0fd2c1ec49be71">wDepth</a>;
<a name="l01686"></a>01686 
<a name="l01687"></a>01687         fsiz = params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a>;
<a name="l01688"></a>01688         params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> = size;
<a name="l01689"></a>01689 
<a name="l01690"></a>01690         <span class="keywordflow">if</span> (resize_fifos(<a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd))) {
<a name="l01691"></a>01691                 retval = 0;
<a name="l01692"></a>01692         } <span class="keywordflow">else</span> {
<a name="l01693"></a>01693                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Error setting the feature Rx FIFO Size\n"</span>,
<a name="l01694"></a>01694                          __func__);
<a name="l01695"></a>01695                 params-&gt;<a class="code" href="structdwc__otg__core__params.html#24ea6f9329f64ac0ad2d31dafe0d1d8c">dev_rx_fifo_size</a> = fsiz;
<a name="l01696"></a>01696                 retval = -DWC_E_INVALID;
<a name="l01697"></a>01697         }
<a name="l01698"></a>01698 
<a name="l01699"></a>01699         <span class="keywordflow">return</span> retval;
<a name="l01700"></a>01700 }
<a name="l01701"></a>01701 
<a name="l01705"></a>01705 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_get_sg_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l01706"></a>01706                              <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req)
<a name="l01707"></a>01707 {
<a name="l01708"></a>01708         <span class="keywordtype">int</span> retval = -DWC_E_INVALID;
<a name="l01709"></a>01709         uint8_t addr;
<a name="l01710"></a>01710         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *ep;
<a name="l01711"></a>01711 
<a name="l01712"></a>01712         <span class="comment">/* The Low Byte of the wValue contains a non-zero address of the endpoint */</span>
<a name="l01713"></a>01713         addr = req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xFF;
<a name="l01714"></a>01714         <span class="keywordflow">if</span> (addr == 0)          <span class="comment">/* The address should be non-zero */</span>
<a name="l01715"></a>01715                 <span class="keywordflow">return</span> retval;
<a name="l01716"></a>01716 
<a name="l01717"></a>01717         ep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01718"></a>01718         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01719"></a>01719                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint address(0x%02x)\n"</span>,
<a name="l01720"></a>01720                          __func__, addr);
<a name="l01721"></a>01721                 <span class="keywordflow">return</span> retval;
<a name="l01722"></a>01722         }
<a name="l01723"></a>01723 
<a name="l01724"></a>01724         dwc_memcpy(buf, ep-&gt;<a class="code" href="structcfi__ep.html#4010b0f12bf1cd37a2c0bf06b392570a">bm_sg</a>, <a class="code" href="dwc__otg__cfi_8h.html#2332c8839256e2bb1aa1e0e8a9185ce2">BS_SG_VAL_DESC_LEN</a>);
<a name="l01725"></a>01725         retval = <a class="code" href="dwc__otg__cfi_8h.html#2332c8839256e2bb1aa1e0e8a9185ce2">BS_SG_VAL_DESC_LEN</a>;
<a name="l01726"></a>01726         <span class="keywordflow">return</span> retval;
<a name="l01727"></a>01727 }
<a name="l01728"></a>01728 
<a name="l01733"></a>01733 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_get_concat_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l01734"></a>01734                                  <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req)
<a name="l01735"></a>01735 {
<a name="l01736"></a>01736         <span class="keywordtype">int</span> retval = -DWC_E_INVALID;
<a name="l01737"></a>01737         uint8_t addr;
<a name="l01738"></a>01738         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *ep;
<a name="l01739"></a>01739         uint8_t desc_count;
<a name="l01740"></a>01740 
<a name="l01741"></a>01741         <span class="comment">/* The Low Byte of the wValue contains a non-zero address of the endpoint */</span>
<a name="l01742"></a>01742         addr = req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xFF;
<a name="l01743"></a>01743         <span class="keywordflow">if</span> (addr == 0)          <span class="comment">/* The address should be non-zero */</span>
<a name="l01744"></a>01744                 <span class="keywordflow">return</span> retval;
<a name="l01745"></a>01745 
<a name="l01746"></a>01746         ep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01747"></a>01747         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01748"></a>01748                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint address(0x%02x)\n"</span>,
<a name="l01749"></a>01749                          __func__, addr);
<a name="l01750"></a>01750                 <span class="keywordflow">return</span> retval;
<a name="l01751"></a>01751         }
<a name="l01752"></a>01752 
<a name="l01753"></a>01753         <span class="comment">/* Copy the header to the buffer */</span>
<a name="l01754"></a>01754         dwc_memcpy(buf, ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>, <a class="code" href="dwc__otg__cfi_8h.html#c89955571b72df025126a1047bc53a00">BS_CONCAT_VAL_HDR_LEN</a>);
<a name="l01755"></a>01755         <span class="comment">/* Advance the buffer pointer by the header size */</span>
<a name="l01756"></a>01756         buf += <a class="code" href="dwc__otg__cfi_8h.html#c89955571b72df025126a1047bc53a00">BS_CONCAT_VAL_HDR_LEN</a>;
<a name="l01757"></a>01757 
<a name="l01758"></a>01758         desc_count = ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#512cdc8b5ef9053f514443b884ec4730">hdr</a>.<a class="code" href="struct__ddma__concat__buffer__setup__hdr.html#605becc1e8a681d6623343b28013b56a">bDescCount</a>;
<a name="l01759"></a>01759         <span class="comment">/* Copy alll the wTxBytes to the buffer */</span>
<a name="l01760"></a>01760         dwc_memcpy(buf, ep-&gt;<a class="code" href="structcfi__ep.html#4c83b9bb5a75e6b81fbfa86b51736164">bm_concat</a>-&gt;<a class="code" href="struct__ddma__concat__buffer__setup.html#748241a5b55a514f4386498aceb1e505">wTxBytes</a>, <span class="keyword">sizeof</span>(uid16_t) * desc_count);
<a name="l01761"></a>01761 
<a name="l01762"></a>01762         retval = <a class="code" href="dwc__otg__cfi_8h.html#c89955571b72df025126a1047bc53a00">BS_CONCAT_VAL_HDR_LEN</a> + <span class="keyword">sizeof</span>(uid16_t) * desc_count;
<a name="l01763"></a>01763         <span class="keywordflow">return</span> retval;
<a name="l01764"></a>01764 }
<a name="l01765"></a>01765 
<a name="l01772"></a>01772 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_ep_get_align_val(uint8_t * buf, <span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd,
<a name="l01773"></a>01773                                 <span class="keyword">struct</span> <a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *req)
<a name="l01774"></a>01774 {
<a name="l01775"></a>01775         <span class="keywordtype">int</span> retval = -DWC_E_INVALID;
<a name="l01776"></a>01776         uint8_t addr;
<a name="l01777"></a>01777         <a class="code" href="structcfi__ep.html">cfi_ep_t</a> *ep;
<a name="l01778"></a>01778 
<a name="l01779"></a>01779         <span class="comment">/* The Low Byte of the wValue contains a non-zero address of the endpoint */</span>
<a name="l01780"></a>01780         addr = req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a> &amp; 0xFF;
<a name="l01781"></a>01781         <span class="keywordflow">if</span> (addr == 0)          <span class="comment">/* The address should be non-zero */</span>
<a name="l01782"></a>01782                 <span class="keywordflow">return</span> retval;
<a name="l01783"></a>01783 
<a name="l01784"></a>01784         ep = <a class="code" href="dwc__otg__cfi_8h.html#5ece1e51b8534a5cc9a7dd5115bb01ca">get_cfi_ep_by_addr</a>(pcd-&gt;cfi, addr);
<a name="l01785"></a>01785         <span class="keywordflow">if</span> (NULL == ep) {
<a name="l01786"></a>01786                 <a class="code" href="dwc__otg__cfi_8h.html#f121e7b686ae7277b695f7209c41135f">CFI_INFO</a>(<span class="stringliteral">"%s: Unable to get the endpoint address(0x%02x)\n"</span>,
<a name="l01787"></a>01787                          __func__, addr);
<a name="l01788"></a>01788                 <span class="keywordflow">return</span> retval;
<a name="l01789"></a>01789         }
<a name="l01790"></a>01790 
<a name="l01791"></a>01791         dwc_memcpy(buf, ep-&gt;<a class="code" href="structcfi__ep.html#bb544b7938d0c62857fc3726988310d2">bm_align</a>, <a class="code" href="dwc__otg__cfi_8h.html#5495ec473ea2d7c8f805567416c559f0">BS_ALIGN_VAL_HDR_LEN</a>);
<a name="l01792"></a>01792         retval = <a class="code" href="dwc__otg__cfi_8h.html#5495ec473ea2d7c8f805567416c559f0">BS_ALIGN_VAL_HDR_LEN</a>;
<a name="l01793"></a>01793 
<a name="l01794"></a>01794         <span class="keywordflow">return</span> retval;
<a name="l01795"></a>01795 }
<a name="l01796"></a>01796 
<a name="l01804"></a>01804 <span class="keyword">static</span> <span class="keywordtype">int</span> cfi_set_feature_value(<span class="keyword">struct</span> <a class="code" href="structdwc__otg__pcd.html">dwc_otg_pcd</a> *pcd)
<a name="l01805"></a>01805 {
<a name="l01806"></a>01806         <span class="keywordtype">int</span> retval = -DWC_E_NOT_SUPPORTED;
<a name="l01807"></a>01807         uint16_t wIndex, wValue;
<a name="l01808"></a>01808         uint8_t bRequest;
<a name="l01809"></a>01809         <span class="keyword">struct </span><a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if</a> *coreif;
<a name="l01810"></a>01810         <a class="code" href="structcfiobject.html">cfiobject_t</a> *cfi = pcd-&gt;cfi;
<a name="l01811"></a>01811         <span class="keyword">struct </span><a class="code" href="structcfi__usb__ctrlrequest.html">cfi_usb_ctrlrequest</a> *ctrl_req;
<a name="l01812"></a>01812         uint8_t *buf;
<a name="l01813"></a>01813         ctrl_req = &amp;cfi-&gt;<a class="code" href="structcfiobject.html#a86c33aef2a521a27ca515bb7397dd34">ctrl_req</a>;
<a name="l01814"></a>01814 
<a name="l01815"></a>01815         buf = pcd-&gt;cfi-&gt;ctrl_req.data;
<a name="l01816"></a>01816 
<a name="l01817"></a>01817         coreif = <a class="code" href="dwc__otg__pcd_8h.html#464549f9f4484651efe25b1a03692d72">GET_CORE_IF</a>(pcd);
<a name="l01818"></a>01818         bRequest = ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#b3083f525fa9bb97e41364418daee3fa">bRequest</a>;
<a name="l01819"></a>01819         wIndex = DWC_CONSTANT_CPU_TO_LE16(ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#984c95bd61e8d1120cd935bcbc5d7134">wIndex</a>);
<a name="l01820"></a>01820         wValue = DWC_CONSTANT_CPU_TO_LE16(ctrl_req-&gt;<a class="code" href="structcfi__usb__ctrlrequest.html#2f236bbf9450df1a3b5204c4570d883f">wValue</a>);
<a name="l01821"></a>01821 
<a name="l01822"></a>01822         <span class="comment">/* See which feature is to be modified */</span>
<a name="l01823"></a>01823         <span class="keywordflow">switch</span> (wIndex) {
<a name="l01824"></a>01824         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#98840b45640251bfafa3481260aef889">FT_ID_DMA_BUFFER_SETUP</a>:
<a name="l01825"></a>01825                 <span class="comment">/* Modify the feature */</span>
<a name="l01826"></a>01826                 <span class="keywordflow">if</span> ((retval = cfi_ep_set_sg_val(buf, pcd)) &lt; 0)
<a name="l01827"></a>01827                         <span class="keywordflow">return</span> retval;
<a name="l01828"></a>01828 
<a name="l01829"></a>01829                 <span class="comment">/* And send this request to the gadget */</span>
<a name="l01830"></a>01830                 cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 1;
<a name="l01831"></a>01831                 <span class="keywordflow">break</span>;
<a name="l01832"></a>01832 
<a name="l01833"></a>01833         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#9335284cd4dae01f4bc0da7cb89d5ef4">FT_ID_DMA_BUFF_ALIGN</a>:
<a name="l01834"></a>01834                 <span class="keywordflow">if</span> ((retval = cfi_ep_set_alignment_val(buf, pcd)) &lt; 0)
<a name="l01835"></a>01835                         <span class="keywordflow">return</span> retval;
<a name="l01836"></a>01836                 cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 1;
<a name="l01837"></a>01837                 <span class="keywordflow">break</span>;
<a name="l01838"></a>01838 
<a name="l01839"></a>01839         <span class="keywordflow">case</span> <a class="code" href="dwc__otg__cfi_8h.html#779a11db5843dd058581d93c8232bd7c">FT_ID_DMA_CONCAT_SETUP</a>:
<a name="l01840"></a>01840                 <span class="comment">/* Modify the feature */</span>
<a name="l01841"></a>01841                 <span class="keywordflow">if</span> ((retval = cfi_ep_set_concat_val(buf, pcd)) &lt; 0)
<a name="l01842"></a>01842                         <span class="keywordflow">return</span> retval;
<a name="l01843"></a>01843                 cfi-&gt;<a class="code" href="structcfiobject.html#f103d681f78c43dc92dd4a85cdbdc27c">need_gadget_att</a> = 1;
<a name="l01844"></a>01844                 <span class="keywordflow">break</span>;
<a name="l01845"></a>01845 
<