Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

703 lines
18 KiB

  1. /**************************************************************************************************************************
  2. * IRMISC.C SigmaTel STIR4200 misc module
  3. **************************************************************************************************************************
  4. * (C) Unpublished Copyright of Sigmatel, Inc. All Rights Reserved.
  5. *
  6. *
  7. * Created: 04/06/2000
  8. * Version 0.9
  9. * Edited: 09/16/2000
  10. * Version 1.03
  11. * Edited: 09/25/2000
  12. * Version 1.10
  13. * Edited: 12/07/2000
  14. * Version 1.12
  15. * Edited: 01/09/2001
  16. * Version 1.13
  17. * Edited: 01/16/2001
  18. * Version 1.14
  19. *
  20. *
  21. **************************************************************************************************************************/
  22. #define DOBREAKS // enable debug breaks
  23. #include <ndis.h>
  24. #include <ntddndis.h> // defines OID's
  25. #include <usbdi.h>
  26. #include <usbdlib.h>
  27. #include "debug.h"
  28. #include "ircommon.h"
  29. #include "irndis.h"
  30. /*****************************************************************************
  31. *
  32. * Function: IrUsb_CreateDeviceExt
  33. *
  34. * Synopsis: Creates a IR device extension
  35. *
  36. * Arguments: DeviceExt - pointer to DeviceExt pointer to return created device extension.
  37. *
  38. * Returns: STATUS_SUCCESS if successful
  39. * STATUS_UNSUCCESSFUL otherwise
  40. *
  41. * Notes:
  42. *
  43. *****************************************************************************/
  44. NTSTATUS
  45. IrUsb_CreateDeviceExt(
  46. IN OUT PIR_DEVICE *DeviceExt
  47. )
  48. {
  49. NTSTATUS ntStatus = STATUS_SUCCESS;
  50. PIR_DEVICE pThisDev = NULL;
  51. DEBUGMSG(DBG_FUNC,("+IrUsb_CreateDeviceExt() \n"));
  52. pThisDev = NewDevice();
  53. if( !pThisDev )
  54. {
  55. ntStatus = STATUS_INSUFFICIENT_RESOURCES;
  56. goto done;
  57. }
  58. *DeviceExt = pThisDev;
  59. done:
  60. DEBUGMSG(DBG_FUNC,("-IrUsb_CreateDeviceExt() \n"));
  61. return ntStatus;
  62. }
  63. /*****************************************************************************
  64. *
  65. * Function: IrUsb_AddDevice
  66. *
  67. * Synopsis: This routine is called to create and initialize our Functional Device Object (FDO).
  68. * For monolithic drivers, this is done in DriverEntry(), but Plug and Play devices
  69. * wait for a PnP event
  70. *
  71. * Arguments: DeviceExt - receives ptr to new dev obj
  72. *
  73. * Returns: STATUS_SUCCESS if successful,
  74. * STATUS_UNSUCCESSFUL otherwise
  75. *
  76. * Notes:
  77. *
  78. *****************************************************************************/
  79. NTSTATUS
  80. IrUsb_AddDevice(
  81. IN OUT PIR_DEVICE *DeviceExt
  82. )
  83. {
  84. NTSTATUS ntStatus;
  85. DEBUGMSG( DBG_FUNC,("+IrUsb_AddDevice()\n"));
  86. *DeviceExt = NULL;
  87. ntStatus = IrUsb_CreateDeviceExt( DeviceExt );
  88. DEBUGMSG( DBG_FUNC,("-IrUsb_AddDevice() (%x)\n", ntStatus));
  89. return ntStatus;
  90. }
  91. /*****************************************************************************
  92. *
  93. * Function: IrUsb_GetDongleCaps
  94. *
  95. * Synopsis: We need to manually set the data in the class specific descriptor, since
  96. * our device does not support the automatic-read feature
  97. *
  98. * Arguments: pThisDev - pointer to IR device
  99. *
  100. * Returns: STATUS_SUCCESS if successful
  101. * STATUS_UNSUCCESSFUL otherwise
  102. *
  103. * Notes:
  104. *
  105. *****************************************************************************/
  106. NTSTATUS
  107. IrUsb_GetDongleCaps(
  108. IN OUT PIR_DEVICE pThisDev
  109. )
  110. {
  111. IRUSB_CLASS_SPECIFIC_DESCRIPTOR *pDesc = &(pThisDev->ClassDesc);
  112. NTSTATUS ntStatus = STATUS_SUCCESS;
  113. NDIS_HANDLE ConfigurationHandle;
  114. // MS Security bug #539291
  115. IRUSB_ASSERT(pThisDev != NULL);
  116. IRUSB_ASSERT(pDesc != NULL);
  117. //
  118. // MS Security bug #539314
  119. // Note: this code is called at init time when it will set ClassConfigured=TRUE.
  120. // It may later be called by the polling thread, but at no time could multiple
  121. // threads be in here. Therefore, access to ClassConfigured does not need to be locked.
  122. //
  123. //
  124. // Make sure the code is only executed at init time
  125. //
  126. if( pDesc->ClassConfigured )
  127. {
  128. return STATUS_SUCCESS;
  129. }
  130. pDesc->ClassConfigured = TRUE;
  131. //
  132. // Some is hardwired, some are read from the registry
  133. //
  134. NdisOpenConfiguration(
  135. &ntStatus,
  136. &ConfigurationHandle,
  137. pThisDev->WrapperConfigurationContext
  138. );
  139. //
  140. // Turnaroud time (read from the registry)
  141. //
  142. if( NT_SUCCESS(ntStatus) )
  143. {
  144. NDIS_STRING MinTurnAroundKeyWord = NDIS_STRING_CONST("MinTurnTime");
  145. PNDIS_CONFIGURATION_PARAMETER pParameterValue;
  146. NdisReadConfiguration(
  147. &ntStatus,
  148. &pParameterValue,
  149. ConfigurationHandle,
  150. &MinTurnAroundKeyWord,
  151. NdisParameterInteger
  152. );
  153. if( NT_SUCCESS(ntStatus) )
  154. {
  155. switch( pParameterValue->ParameterData.IntegerData )
  156. {
  157. case 500:
  158. pDesc->bmMinTurnaroundTime = BM_TURNAROUND_TIME_0p5ms;
  159. break;
  160. case 1000:
  161. pDesc->bmMinTurnaroundTime = BM_TURNAROUND_TIME_1ms;
  162. break;
  163. case 5000:
  164. pDesc->bmMinTurnaroundTime = BM_TURNAROUND_TIME_5ms;
  165. break;
  166. case 10000:
  167. pDesc->bmMinTurnaroundTime = BM_TURNAROUND_TIME_10ms;
  168. break;
  169. default:
  170. pDesc->bmMinTurnaroundTime = BM_TURNAROUND_TIME_0ms;
  171. break;
  172. }
  173. }
  174. //
  175. // Speed mask (read from the registry)
  176. //
  177. if( NT_SUCCESS(ntStatus) )
  178. {
  179. NDIS_STRING SpeedEnable = NDIS_STRING_CONST("SpeedEnable");
  180. NdisReadConfiguration(
  181. &ntStatus,
  182. &pParameterValue,
  183. ConfigurationHandle,
  184. &SpeedEnable,
  185. NdisParameterInteger
  186. );
  187. if( NT_SUCCESS(ntStatus) )
  188. {
  189. switch( pParameterValue->ParameterData.IntegerData )
  190. {
  191. case SPEED_2400:
  192. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_2400;
  193. break;
  194. case SPEED_9600:
  195. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_9600;
  196. break;
  197. case SPEED_19200:
  198. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_19200;
  199. break;
  200. case SPEED_38400:
  201. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_38400;
  202. break;
  203. case SPEED_57600:
  204. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_57600;
  205. break;
  206. case SPEED_115200:
  207. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_115200;
  208. break;
  209. case SPEED_576000:
  210. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_576K;
  211. break;
  212. case SPEED_1152000:
  213. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_1152K;
  214. break;
  215. case SPEED_4000000:
  216. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_4M;
  217. break;
  218. default:
  219. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_4M;
  220. break;
  221. }
  222. }
  223. }
  224. //
  225. // Read the receive mode
  226. //
  227. if( NT_SUCCESS(ntStatus) )
  228. {
  229. NDIS_STRING Keyword = NDIS_STRING_CONST("ReceiveMode");
  230. NdisReadConfiguration(
  231. &ntStatus,
  232. &pParameterValue,
  233. ConfigurationHandle,
  234. &Keyword,
  235. NdisParameterInteger
  236. );
  237. if( NT_SUCCESS(ntStatus) )
  238. {
  239. switch( pParameterValue->ParameterData.IntegerData )
  240. {
  241. case RXMODE_SLOW:
  242. pThisDev->ReceiveMode = RXMODE_SLOW;
  243. break;
  244. case RXMODE_SLOWFAST:
  245. pThisDev->ReceiveMode = RXMODE_SLOWFAST;
  246. break;
  247. case RXMODE_FAST:
  248. default:
  249. pThisDev->ReceiveMode = RXMODE_FAST;
  250. break;
  251. }
  252. }
  253. else
  254. {
  255. //
  256. // Force a default anyway
  257. //
  258. pThisDev->ReceiveMode = RXMODE_FAST;
  259. ntStatus = STATUS_SUCCESS;
  260. }
  261. }
  262. //
  263. // Read the tranceiver type
  264. //
  265. if( NT_SUCCESS(ntStatus) )
  266. {
  267. NDIS_STRING Keyword = NDIS_STRING_CONST("TransceiverType");
  268. NdisReadConfiguration(
  269. &ntStatus,
  270. &pParameterValue,
  271. ConfigurationHandle,
  272. &Keyword,
  273. NdisParameterInteger
  274. );
  275. if( NT_SUCCESS(ntStatus) )
  276. {
  277. switch( pParameterValue->ParameterData.IntegerData )
  278. {
  279. case TRANSCEIVER_HP:
  280. pThisDev->TransceiverType = TRANSCEIVER_HP;
  281. break;
  282. case TRANSCEIVER_INFINEON:
  283. pThisDev->TransceiverType = TRANSCEIVER_INFINEON;
  284. break;
  285. case TRANSCEIVER_VISHAY:
  286. pThisDev->TransceiverType = TRANSCEIVER_VISHAY;
  287. break;
  288. case TRANSCEIVER_VISHAY_6102F:
  289. pThisDev->TransceiverType = TRANSCEIVER_VISHAY_6102F;
  290. break;
  291. case TRANSCEIVER_4000:
  292. pThisDev->TransceiverType = TRANSCEIVER_4000;
  293. break;
  294. case TRANSCEIVER_4012:
  295. pThisDev->TransceiverType = TRANSCEIVER_4012;
  296. break;
  297. case TRANSCEIVER_CUSTOM:
  298. default:
  299. pThisDev->TransceiverType = TRANSCEIVER_CUSTOM;
  300. break;
  301. }
  302. }
  303. else
  304. {
  305. //
  306. // Force a default anyway
  307. //
  308. pThisDev->TransceiverType = TRANSCEIVER_4012;
  309. ntStatus = STATUS_SUCCESS;
  310. }
  311. }
  312. //
  313. // And the receive window
  314. //
  315. if( NT_SUCCESS(ntStatus) )
  316. {
  317. if( pThisDev->ChipRevision == CHIP_REVISION_7 )
  318. {
  319. NDIS_STRING Keyword = NDIS_STRING_CONST("ReceiveWindow");
  320. NdisReadConfiguration(
  321. &ntStatus,
  322. &pParameterValue,
  323. ConfigurationHandle,
  324. &Keyword,
  325. NdisParameterInteger
  326. );
  327. if( NT_SUCCESS(ntStatus) )
  328. {
  329. switch( pParameterValue->ParameterData.IntegerData )
  330. {
  331. case 2:
  332. pDesc->bmWindowSize = BM_WINDOW_SIZE_2;
  333. break;
  334. case 1:
  335. default:
  336. pDesc->bmWindowSize = BM_WINDOW_SIZE_1;
  337. break;
  338. }
  339. }
  340. else
  341. {
  342. //
  343. // Force a default anyway
  344. //
  345. pDesc->bmWindowSize = BM_WINDOW_SIZE_1;
  346. ntStatus = STATUS_SUCCESS;
  347. }
  348. }
  349. #if defined(SUPPORT_LA8) && !defined(LEGACY_NDIS5)
  350. else if( pThisDev->ChipRevision == CHIP_REVISION_8 )
  351. {
  352. #ifdef LOW_PRIORITY_POLL
  353. pDesc->bmWindowSize = BM_WINDOW_SIZE_2;
  354. #else
  355. pDesc->bmWindowSize = BM_WINDOW_SIZE_4;
  356. #endif
  357. }
  358. #endif
  359. else
  360. {
  361. pDesc->bmWindowSize = BM_WINDOW_SIZE_1;
  362. }
  363. }
  364. //
  365. // MS Security bug #539329 (added comment).
  366. // Used in Diagnostic version.
  367. //
  368. #if defined(VARIABLE_SETTINGS)
  369. if( NT_SUCCESS(ntStatus) )
  370. {
  371. NDIS_STRING Keyword = NDIS_STRING_CONST("Dpll");
  372. NTSTATUS DumStatus;
  373. NdisReadConfiguration(
  374. &DumStatus,
  375. &pParameterValue,
  376. ConfigurationHandle,
  377. &Keyword,
  378. NdisParameterHexInteger
  379. );
  380. //
  381. // Since the Sir and Fir Dpll must be identical, they have
  382. // been combined into a single registry value.
  383. //
  384. if( NT_SUCCESS(DumStatus) )
  385. {
  386. pThisDev->SirDpll = pParameterValue->ParameterData.IntegerData;
  387. pThisDev->FirDpll = pParameterValue->ParameterData.IntegerData;
  388. }
  389. }
  390. if( NT_SUCCESS(ntStatus) )
  391. {
  392. NDIS_STRING Keyword = NDIS_STRING_CONST("SirSensitivity");
  393. NTSTATUS DumStatus;
  394. NdisReadConfiguration(
  395. &DumStatus,
  396. &pParameterValue,
  397. ConfigurationHandle,
  398. &Keyword,
  399. NdisParameterHexInteger
  400. );
  401. if( NT_SUCCESS(DumStatus) )
  402. {
  403. pThisDev->SirSensitivity = pParameterValue->ParameterData.IntegerData;
  404. }
  405. }
  406. if( NT_SUCCESS(ntStatus) )
  407. {
  408. NDIS_STRING Keyword = NDIS_STRING_CONST("FirSensitivity");
  409. NTSTATUS DumStatus;
  410. NdisReadConfiguration(
  411. &DumStatus,
  412. &pParameterValue,
  413. ConfigurationHandle,
  414. &Keyword,
  415. NdisParameterHexInteger
  416. );
  417. if( NT_SUCCESS(DumStatus) )
  418. {
  419. pThisDev->FirSensitivity = pParameterValue->ParameterData.IntegerData;
  420. }
  421. }
  422. #endif
  423. NdisCloseConfiguration( ConfigurationHandle );
  424. }
  425. if( NT_SUCCESS(ntStatus) )
  426. {
  427. // fixup settings
  428. if ( pThisDev->TransceiverType == TRANSCEIVER_HP )
  429. pThisDev->ReceiveMode = RXMODE_SLOWFAST;
  430. if ( pThisDev->ReceiveMode == RXMODE_SLOW &&
  431. pThisDev->BaudRateMask == NDIS_IRDA_SPEED_MASK_4M)
  432. pThisDev->BaudRateMask = NDIS_IRDA_SPEED_MASK_115200;
  433. }
  434. if( NT_SUCCESS(ntStatus) )
  435. {
  436. // Maximum data size
  437. pDesc->bmDataSize = BM_DATA_SIZE_2048;
  438. #ifdef LOW_PRIORITY_POLL
  439. pDesc->bmDataSize = BM_DATA_SIZE_1024;
  440. #endif
  441. // Speed
  442. pDesc->wBaudRate = NDIS_IRDA_SPEED_MASK_4M;
  443. #if defined(WORKAROUND_BROKEN_MIR)
  444. pDesc->wBaudRate &= (~NDIS_IRDA_SPEED_1152K & ~NDIS_IRDA_SPEED_576K);
  445. #endif
  446. #if defined(WORKAROUND_CASIO)
  447. pDesc->wBaudRate &= (~NDIS_IRDA_SPEED_57600 & ~NDIS_IRDA_SPEED_19200);
  448. #endif
  449. // Extra BOFs
  450. #if defined(WORKAROUND_CASIO)
  451. pDesc->bmExtraBofs = BM_EXTRA_BOFS_0;
  452. #else
  453. pDesc->bmExtraBofs = BM_EXTRA_BOFS_24;
  454. #endif
  455. }
  456. return ntStatus;
  457. }
  458. /*****************************************************************************
  459. *
  460. * Function: IrUsb_SetDongleCaps
  461. *
  462. * Synopsis: Set the DONGLE_CAPABILITIES struct in our device from the information
  463. * we have already gotten from the USB Class-Specific descriptor.
  464. * Some data items are usable directly as formatted in the Class-Specific descriptor,
  465. * but some need to be translated to a different format for OID_xxx use;
  466. * The donglecaps struct is thus used to hold the info in a form
  467. * usable directly by OID_xxx 's.
  468. *
  469. * Arguments: pThisDev - pointer to IR device
  470. *
  471. * Returns: None
  472. *
  473. * Notes:
  474. *
  475. *****************************************************************************/
  476. VOID
  477. IrUsb_SetDongleCaps(
  478. IN OUT PIR_DEVICE pThisDev
  479. )
  480. {
  481. DONGLE_CAPABILITIES *pCaps = &(pThisDev->dongleCaps);
  482. IRUSB_CLASS_SPECIFIC_DESCRIPTOR *pDesc = &(pThisDev->ClassDesc);
  483. DEBUGMSG( DBG_FUNC,("+IrUsb_SetDongleCaps\n"));
  484. // MS Security bug #539291
  485. IRUSB_ASSERT(pThisDev != NULL);
  486. IRUSB_ASSERT(pDesc != NULL);
  487. IRUSB_ASSERT(pCaps != NULL);
  488. DEBUGMSG( DBG_FUNC, (" IrUsb_SetDongleCaps() RAW ClassDesc BUFFER:\n"));
  489. IRUSB_DUMP( DBG_FUNC,( (PUCHAR) pDesc, 12 ) );
  490. //
  491. // Deal with the turnaround time
  492. //
  493. switch( pDesc->bmMinTurnaroundTime )
  494. {
  495. case BM_TURNAROUND_TIME_0ms:
  496. pCaps->turnAroundTime_usec = 0;
  497. break;
  498. case BM_TURNAROUND_TIME_0p01ms:
  499. pCaps->turnAroundTime_usec = 10; //device tells us millisec; we store as microsec
  500. break;
  501. case BM_TURNAROUND_TIME_0p05ms:
  502. pCaps->turnAroundTime_usec = 50;
  503. break;
  504. case BM_TURNAROUND_TIME_0p1ms:
  505. pCaps->turnAroundTime_usec = 100;
  506. break;
  507. case BM_TURNAROUND_TIME_0p5ms:
  508. pCaps->turnAroundTime_usec = 500;
  509. break;
  510. case BM_TURNAROUND_TIME_1ms:
  511. pCaps->turnAroundTime_usec = 1000;
  512. break;
  513. case BM_TURNAROUND_TIME_5ms:
  514. pCaps->turnAroundTime_usec = 5000;
  515. break;
  516. case BM_TURNAROUND_TIME_10ms:
  517. pCaps->turnAroundTime_usec = 10000;
  518. break;
  519. default:
  520. IRUSB_ASSERT( 0 ); // we should have covered all the cases here
  521. pCaps->turnAroundTime_usec = 1000;
  522. }
  523. //
  524. // We probably support many window sizes and will have multiple of these bits set;
  525. // Just save the biggest we support for now to tell ndis
  526. //
  527. if( pDesc->bmWindowSize & BM_WINDOW_SIZE_7 )
  528. pCaps->windowSize = 7;
  529. else if( pDesc->bmWindowSize & BM_WINDOW_SIZE_6 )
  530. pCaps->windowSize = 6;
  531. else if( pDesc->bmWindowSize & BM_WINDOW_SIZE_5 )
  532. pCaps->windowSize = 5;
  533. else if( pDesc->bmWindowSize & BM_WINDOW_SIZE_4 )
  534. pCaps->windowSize = 4;
  535. else if( pDesc->bmWindowSize & BM_WINDOW_SIZE_3 )
  536. pCaps->windowSize = 3;
  537. else if( pDesc->bmWindowSize & BM_WINDOW_SIZE_2 )
  538. pCaps->windowSize = 2;
  539. else if( pDesc->bmWindowSize & BM_WINDOW_SIZE_1 )
  540. pCaps->windowSize = 1;
  541. else
  542. {
  543. IRUSB_ASSERT( 0 ); // we should have covered all the cases here
  544. pCaps->windowSize = 1;
  545. }
  546. //
  547. // Extra BOFS
  548. //
  549. switch( (USHORT)pDesc->bmExtraBofs )
  550. {
  551. case BM_EXTRA_BOFS_0:
  552. pCaps->extraBOFS = 0;
  553. break;
  554. case BM_EXTRA_BOFS_1:
  555. pCaps->extraBOFS = 1;
  556. break;
  557. case BM_EXTRA_BOFS_2:
  558. pCaps->extraBOFS = 2;
  559. break;
  560. case BM_EXTRA_BOFS_3:
  561. pCaps->extraBOFS = 3;
  562. break;
  563. case BM_EXTRA_BOFS_6:
  564. pCaps->extraBOFS = 6;
  565. break;
  566. case BM_EXTRA_BOFS_12:
  567. pCaps->extraBOFS = 12;
  568. break;
  569. case BM_EXTRA_BOFS_24:
  570. pCaps->extraBOFS = 24;
  571. break;
  572. case BM_EXTRA_BOFS_48:
  573. pCaps->extraBOFS = 48;
  574. break;
  575. default:
  576. IRUSB_ASSERT( 0 ); // we should have covered all the cases here
  577. pCaps->extraBOFS = 0;
  578. }
  579. //
  580. // We probably support many data sizes and will have multiple of these bits set;
  581. // Just save biggest we support for now to tell ndis
  582. //
  583. if( pDesc->bmDataSize & BM_DATA_SIZE_2048 )
  584. pCaps->dataSize = 2048;
  585. else if( pDesc->bmDataSize & BM_DATA_SIZE_1024 )
  586. pCaps->dataSize = 1024;
  587. else if( pDesc->bmDataSize & BM_DATA_SIZE_512 )
  588. pCaps->dataSize = 512;
  589. else if( pDesc->bmDataSize & BM_DATA_SIZE_256 )
  590. pCaps->dataSize = 256;
  591. else if( pDesc->bmDataSize & BM_DATA_SIZE_128 )
  592. pCaps->dataSize = 128;
  593. else if( pDesc->bmDataSize & BM_DATA_SIZE_64 )
  594. pCaps->dataSize = 64;
  595. else
  596. {
  597. IRUSB_ASSERT( 0 ); // we should have covered all the cases here
  598. pCaps->dataSize = 2048;
  599. }
  600. pDesc->wBaudRate &= pThisDev->BaudRateMask; // mask defaults to 0xffff; may be set in registry
  601. //
  602. // max frame size is 2051; max irda dataSize should be 2048
  603. //
  604. IRUSB_ASSERT( MAX_TOTAL_SIZE_WITH_ALL_HEADERS > pCaps->dataSize);
  605. DEBUGMSG( DBG_FUNC,(" IrUsb_SetDongleCaps pCaps->turnAroundTime_usec = dec %d\n",pCaps->turnAroundTime_usec));
  606. DEBUGMSG( DBG_FUNC,(" extraBOFS = dec %d\n",pCaps->extraBOFS));
  607. DEBUGMSG( DBG_FUNC,(" dataSize = dec %d\n",pCaps->dataSize));
  608. DEBUGMSG( DBG_FUNC,(" windowSize = dec %d\n",pCaps->windowSize));
  609. DEBUGMSG( DBG_FUNC,(" MAX_TOTAL_SIZE_WITH_ALL_HEADERS == dec %d\n",MAX_TOTAL_SIZE_WITH_ALL_HEADERS));
  610. DEBUGMSG( DBG_FUNC,(" pDesc->bmDataSize = 0x%02x\n",pDesc->bmDataSize));
  611. DEBUGMSG( DBG_FUNC,(" pDesc->bmWindowSize = 0x%02x\n",pDesc->bmWindowSize));
  612. DEBUGMSG( DBG_FUNC,(" pDesc->bmMinTurnaroundTime = 0x%02x\n",pDesc->bmMinTurnaroundTime));
  613. DEBUGMSG( DBG_FUNC,(" pDesc->wBaudRate = 0x%04x\n",pDesc->wBaudRate));
  614. DEBUGMSG( DBG_FUNC,(" pDesc->bmExtraBofs = 0x%02x\n",pDesc->bmExtraBofs));
  615. DEBUGMSG( DBG_FUNC,("-IrUsb_SetDongleCaps\n"));
  616. }