Pipe.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. /*
  2. * Copyright (c) 2017-2018,2020 The Linux Foundation. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are
  6. * met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above
  10. * copyright notice, this list of conditions and the following
  11. * disclaimer in the documentation and/or other materials provided
  12. * with the distribution.
  13. * * Neither the name of The Linux Foundation nor the names of its
  14. * contributors may be used to endorse or promote products derived
  15. * from this software without specific prior written permission.
  16. *
  17. * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
  18. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
  20. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  21. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  22. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  23. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  24. * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  25. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  26. * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  27. * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28. */
  29. #include "Pipe.h"
  30. #include "TestsUtils.h"
  31. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  32. //Do not change those default values due to the fact that some test may relay on those default values.
  33. //In case you need a change of the field do this in a derived class.
  34. //Dest MAC(6 bytes) Src MAC(6 Bytes) EtherType(2 Bytes)
  35. unsigned char Pipe::m_pUsbHeader[] = { 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xB1, 0xB2,
  36. 0xB3, 0xB4, 0xB5, 0xB6, 0xC1, 0xC2 };
  37. unsigned char Pipe::m_pA2NDUNHeader[] =
  38. { 0xA1, 0xA2, 0xA3, 0xA4, 0xB1, 0xB2, 0xC1, 0xC2 };
  39. //unsigned char Pipe::m_pA2DUNHeader[] = {};
  40. //unsigned char Pipe::m_pQ6LANHeader[] = {};
  41. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. Pipe::Pipe(enum ipa_client_type nClientType,
  43. IPATestConfiguration eConfiguration) :
  44. m_Fd(-1), m_nHeaderLengthRemove(0),
  45. m_nHeaderLengthAdd(0), m_pHeader(NULL), m_pInodePath(NULL),
  46. m_bInitialized(false), m_ExceptionPipe(false) {
  47. m_nClientType = nClientType;
  48. m_eConfiguration = eConfiguration;
  49. }
  50. Pipe::Pipe(IPATestConfiguration eConfiguration) :
  51. m_Fd(-1), m_nHeaderLengthRemove(0),
  52. m_nHeaderLengthAdd(0), m_pHeader(NULL), m_pInodePath(NULL),
  53. m_bInitialized(false), m_ExceptionPipe(true) {
  54. m_eConfiguration = eConfiguration;
  55. }
  56. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  57. Pipe::~Pipe() {
  58. //Nothing to be done at this point...
  59. }
  60. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  61. bool Pipe::Init() {
  62. int tries_cnt = 1;
  63. SetSpecificClientParameters(m_nClientType, m_eConfiguration);
  64. //By examining the Client type we will map the inode device name
  65. while (tries_cnt <= 10000) {
  66. m_Fd = open(m_pInodePath, O_RDWR);
  67. if (-1 != m_Fd)
  68. break;
  69. // Sleep for 5 msec
  70. usleep(5000);
  71. ++tries_cnt;
  72. }
  73. LOG_MSG_DEBUG("open retries_cnt=%d\n", tries_cnt);
  74. if (-1 == m_Fd) {
  75. LOG_MSG_ERROR("Failed to open %s", m_pInodePath);
  76. return false;
  77. }
  78. m_bInitialized = true;
  79. return true;
  80. }
  81. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  82. void Pipe::Destroy() {
  83. if (false == m_bInitialized) {
  84. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  85. return;
  86. }
  87. close(m_Fd);
  88. }
  89. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  90. int Pipe::Send(unsigned char * pBuffer, size_t nBytesToSend) {
  91. if (false == m_bInitialized) {
  92. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  93. return 0;
  94. }
  95. size_t nBytesWritten = 0;
  96. nBytesWritten = write(m_Fd, pBuffer, nBytesToSend);
  97. return nBytesWritten;
  98. }
  99. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  100. int Pipe::AddHeaderAndSend(unsigned char * pIpPacket, size_t nIpPacketSize) {
  101. int retval;
  102. if (false == m_bInitialized) {
  103. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  104. return 0;
  105. }
  106. size_t nBytesToWrite = nIpPacketSize + m_nHeaderLengthAdd;
  107. //Allocate new buffer for the Header and IP packet:
  108. unsigned char *pLinkLayerAndIpPacket = new unsigned char[nBytesToWrite];
  109. if (!pLinkLayerAndIpPacket) {
  110. LOG_MSG_ERROR("Memory allocation failure.");
  111. return 0;
  112. }
  113. //put the header first:
  114. memcpy(pLinkLayerAndIpPacket, m_pHeader, m_nHeaderLengthAdd);
  115. //Then add the IP packet:
  116. memcpy(pLinkLayerAndIpPacket + m_nHeaderLengthAdd, pIpPacket,
  117. nIpPacketSize);
  118. //Call the Send method which will send the new created buffer(which contains the IP packet with the Header):
  119. retval = Send(pLinkLayerAndIpPacket, nBytesToWrite);
  120. delete[] pLinkLayerAndIpPacket;
  121. return retval;
  122. }
  123. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  124. int Pipe::Receive(unsigned char *pBuffer, size_t nBytesToReceive) {
  125. if (false == m_bInitialized) {
  126. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  127. return 0;
  128. }
  129. size_t nBytesRead = 0;
  130. nBytesRead = read(m_Fd, (void*) pBuffer, nBytesToReceive);
  131. return nBytesRead;
  132. }
  133. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  134. int Pipe::ReceiveAndRemoveHeader(unsigned char *pIpPacket, size_t nIpPacketSize) {
  135. if (false == m_bInitialized) {
  136. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  137. return 0;
  138. }
  139. size_t nBytesToRead = nIpPacketSize + m_nHeaderLengthRemove;
  140. unsigned char *pPacket = new unsigned char[nBytesToRead];
  141. if (!pPacket) {
  142. LOG_MSG_ERROR("Memory allocation failure.");
  143. return 0;
  144. }
  145. size_t nReceivedBytes = Receive(pPacket, nBytesToRead);
  146. if (nReceivedBytes != nBytesToRead) {
  147. LOG_MSG_ERROR("Pipe was asked to receive an IP packet "
  148. "of size %d, however only %d bytes were read "
  149. "while the header size is %d",
  150. nIpPacketSize,
  151. nReceivedBytes,
  152. m_nHeaderLengthRemove);
  153. delete[] pPacket;
  154. return nReceivedBytes - m_nHeaderLengthRemove;
  155. }
  156. memcpy(pIpPacket, pPacket + m_nHeaderLengthRemove, nIpPacketSize);
  157. delete[] pPacket;
  158. return (nReceivedBytes - m_nHeaderLengthRemove);
  159. }
  160. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  161. enum ipa_client_type Pipe::GetClientType() {
  162. if (false == m_bInitialized) {
  163. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  164. return IPA_CLIENT_HSIC1_PROD;
  165. }
  166. return m_nClientType;
  167. }
  168. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  169. void Pipe::SetSpecificClientParameters(
  170. enum ipa_client_type nClientType,
  171. IPATestConfiguration eConfiguration) {
  172. switch (eConfiguration) {
  173. case IPA_TEST_CONFIFURATION_0:
  174. break;
  175. case IPA_TEST_CONFIFURATION_1:
  176. switch (nClientType) {
  177. case (IPA_CLIENT_TEST_PROD):
  178. m_pInodePath = CONFIG_1_FROM_USB1_TO_IPA_DMA;
  179. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  180. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  181. m_pHeader = m_pUsbHeader;
  182. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD ");
  183. break;
  184. case (IPA_CLIENT_TEST_CONS):
  185. m_pInodePath = CONFIG_1_FROM_IPA_TO_USB1_DMA;
  186. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  187. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  188. m_pHeader = m_pUsbHeader;
  189. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  190. break;
  191. default:
  192. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_1 switch in default "
  193. "nClientType = %d is not supported ", nClientType);
  194. break;
  195. }
  196. break;
  197. case IPA_TEST_CONFIFURATION_2:
  198. switch (nClientType) {
  199. case (IPA_CLIENT_TEST_PROD):
  200. m_pInodePath = CONFIG_2_FROM_USB_TO_IPA;
  201. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  202. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  203. m_pHeader = m_pUsbHeader;
  204. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD");
  205. break;
  206. case (IPA_CLIENT_TEST2_CONS):
  207. m_pInodePath = CONFIG_2_FROM_IPA_TO_A2_NDUN;
  208. m_nHeaderLengthAdd = sizeof(m_pA2NDUNHeader);
  209. m_nHeaderLengthRemove = sizeof(m_pA2NDUNHeader);
  210. m_pHeader = m_pA2NDUNHeader;
  211. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  212. break;
  213. default:
  214. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_2 switch in default "
  215. "nClientType = %d is not supported ", nClientType);
  216. break;
  217. }
  218. break;
  219. case IPA_TEST_CONFIFURATION_3:
  220. switch (nClientType) {
  221. case IPA_CLIENT_TEST2_PROD:
  222. m_pInodePath = CONFIG_3_FROM_A2_NDUN_TO_IPA;
  223. m_nHeaderLengthAdd = sizeof(m_pA2NDUNHeader);
  224. m_nHeaderLengthRemove = sizeof(m_pA2NDUNHeader);
  225. m_pHeader = m_pA2NDUNHeader;
  226. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD");
  227. break;
  228. case IPA_CLIENT_TEST_CONS:
  229. m_pInodePath = CONFIG_3_FROM_IPA_TO_USB1;
  230. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  231. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  232. m_pHeader = m_pUsbHeader;
  233. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  234. break;
  235. case IPA_CLIENT_TEST2_CONS:
  236. m_pInodePath = CONFIG_3_FROM_IPA_TO_A2_NDUN;
  237. m_nHeaderLengthAdd = sizeof(m_pA2NDUNHeader);
  238. m_nHeaderLengthRemove = sizeof(m_pA2NDUNHeader);
  239. m_pHeader = m_pA2NDUNHeader;
  240. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  241. break;
  242. case IPA_CLIENT_TEST4_CONS:
  243. //TODO add when applicable
  244. m_pInodePath = CONFIG_3_FROM_IPA_TO_Q6_LAN;
  245. m_nHeaderLengthAdd = 0;
  246. m_nHeaderLengthRemove = 0;
  247. m_pHeader = 0;
  248. LOG_MSG_INFO("IPA_CLIENT_TEST4_CONS is not supported yet");
  249. break;
  250. default:
  251. LOG_MSG_INFO("IPA_TEST_CONFIFURATION_3 switch in default "
  252. "nClientType = %d is not supported ", nClientType);
  253. break;
  254. }
  255. break;
  256. case IPA_TEST_CONFIFURATION_7:
  257. if (m_ExceptionPipe) {
  258. m_pInodePath = CONFIG_7_FROM_IPA_TO_A5_EXCEPTION;
  259. m_nHeaderLengthAdd = 0; //No send
  260. m_nHeaderLengthRemove = 8; //A5Mux header size without retained source header
  261. m_pHeader = NULL; //No header to send
  262. LOG_MSG_INFO("Setting parameters for A5_Exception ");
  263. break;
  264. }
  265. if (nClientType == IPA_CLIENT_TEST_PROD) {
  266. m_pInodePath = CONFIG_7_FROM_USB1_TO_IPA;
  267. m_nHeaderLengthAdd = 0;
  268. m_nHeaderLengthRemove = 0;
  269. m_pHeader = NULL;
  270. LOG_MSG_INFO(
  271. "Setting parameters for FROM_USB1_TO_IPA - no header addition/removal");
  272. } else {
  273. LOG_MSG_INFO("IPA_TEST_CONFIFURATION_7 switch in default "
  274. "nClientType = %d is not supported ", nClientType);
  275. }
  276. break;
  277. case IPA_TEST_CONFIGURATION_8:
  278. switch(nClientType)
  279. {
  280. case (IPA_CLIENT_TEST_PROD):
  281. m_pInodePath = CONFIG_8_DEAGG_TO_IPA_NO_AGG;
  282. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  283. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  284. m_pHeader = m_pUsbHeader;
  285. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD ");
  286. break;
  287. case (IPA_CLIENT_TEST_CONS):
  288. m_pInodePath = CONFIG_8_FROM_IPA_AGG;
  289. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  290. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  291. m_pHeader = m_pUsbHeader;
  292. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  293. break;
  294. case (IPA_CLIENT_TEST3_PROD):
  295. m_pInodePath = CONFIG_8_NO_AGG_TO_IPA_AGG;
  296. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  297. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  298. m_pHeader = m_pUsbHeader;
  299. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_PROD ");
  300. break;
  301. case (IPA_CLIENT_TEST3_CONS):
  302. m_pInodePath = CONFIG_8_FROM_IPA_NO_AGG;
  303. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  304. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  305. m_pHeader = m_pUsbHeader;
  306. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_CONS");
  307. break;
  308. case (IPA_CLIENT_TEST2_PROD):
  309. m_pInodePath = CONFIG_8_DEAGG_TO_IPA_AGG;
  310. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  311. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  312. m_pHeader = m_pUsbHeader;
  313. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD");
  314. break;
  315. case (IPA_CLIENT_TEST2_CONS):
  316. m_pInodePath = CONFIG_8_DEAGG_FROM_IPA_AGG;
  317. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  318. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  319. m_pHeader = m_pUsbHeader;
  320. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  321. break;
  322. case (IPA_CLIENT_TEST4_PROD):
  323. m_pInodePath = CONFIG_8_NO_AGG_TO_IPA_AGG_TIME;
  324. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  325. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  326. m_pHeader = m_pUsbHeader;
  327. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST4_PROD");
  328. break;
  329. default:
  330. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_8 switch in default "
  331. "nClientType = %d is not supported ",
  332. nClientType);
  333. break;
  334. }
  335. break;
  336. case IPA_TEST_CONFIGURATION_9:
  337. switch(nClientType)
  338. {
  339. case (IPA_CLIENT_TEST_PROD):
  340. m_pInodePath = CONFIG_9_DEAGG_TO_IPA_NO_AGG;
  341. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  342. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  343. m_pHeader = m_pUsbHeader;
  344. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD ");
  345. break;
  346. case (IPA_CLIENT_TEST_CONS):
  347. m_pInodePath = CONFIG_9_FROM_IPA_AGG;
  348. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  349. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  350. m_pHeader = m_pUsbHeader;
  351. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  352. break;
  353. case (IPA_CLIENT_TEST3_PROD):
  354. m_pInodePath = CONFIG_9_NO_AGG_TO_IPA_AGG;
  355. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  356. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  357. m_pHeader = m_pUsbHeader;
  358. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_PROD ");
  359. break;
  360. case (IPA_CLIENT_TEST3_CONS):
  361. m_pInodePath = CONFIG_9_FROM_IPA_NO_AGG;
  362. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  363. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  364. m_pHeader = m_pUsbHeader;
  365. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_CONS");
  366. break;
  367. case (IPA_CLIENT_TEST2_PROD):
  368. m_pInodePath = CONFIG_9_DEAGG_TO_IPA_AGG;
  369. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  370. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  371. m_pHeader = m_pUsbHeader;
  372. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD");
  373. break;
  374. case (IPA_CLIENT_TEST2_CONS):
  375. m_pInodePath = CONFIG_9_DEAGG_FROM_IPA_AGG;
  376. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  377. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  378. m_pHeader = m_pUsbHeader;
  379. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  380. break;
  381. case (IPA_CLIENT_TEST4_PROD):
  382. m_pInodePath = CONFIG_9_NO_AGG_TO_IPA_AGG_TIME;
  383. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  384. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  385. m_pHeader = m_pUsbHeader;
  386. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST4_PROD");
  387. break;
  388. default:
  389. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_9 switch in default "
  390. "nClientType = %d is not supported ",
  391. nClientType);
  392. break;
  393. }
  394. break;
  395. case IPA_TEST_CONFIGURATION_10:
  396. switch(nClientType)
  397. {
  398. case (IPA_CLIENT_TEST_PROD):
  399. m_pInodePath = CONFIG_10_TO_IPA_AGG_ZERO_LIMITS;
  400. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  401. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  402. m_pHeader = m_pUsbHeader;
  403. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD");
  404. break;
  405. case (IPA_CLIENT_TEST_CONS):
  406. m_pInodePath = CONFIG_10_FROM_IPA_AGG_ZERO_LIMITS;
  407. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  408. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  409. m_pHeader = m_pUsbHeader;
  410. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  411. break;
  412. default:
  413. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_10 switch in default "
  414. "nClientType = %d is not supported ",
  415. nClientType);
  416. break;
  417. }
  418. break;
  419. case IPA_TEST_CONFIGURATION_11:
  420. switch(nClientType)
  421. {
  422. case (IPA_CLIENT_TEST_PROD):
  423. m_pInodePath = CONFIG_11_TO_IPA;
  424. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  425. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  426. m_pHeader = m_pUsbHeader;
  427. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD");
  428. break;
  429. case (IPA_CLIENT_TEST2_CONS):
  430. m_pInodePath = CONFIG_11_FROM_IPA_AGG;
  431. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  432. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  433. m_pHeader = m_pUsbHeader;
  434. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  435. break;
  436. case (IPA_CLIENT_TEST2_PROD):
  437. m_pInodePath = CONFIG_11_TO_IPA_DEAGG;
  438. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  439. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  440. m_pHeader = m_pUsbHeader;
  441. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD");
  442. break;
  443. case (IPA_CLIENT_TEST3_CONS):
  444. m_pInodePath = CONFIG_11_FROM_IPA;
  445. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  446. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  447. m_pHeader = m_pUsbHeader;
  448. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_CONS");
  449. break;
  450. case (IPA_CLIENT_TEST_CONS):
  451. m_pInodePath = CONFIG_11_FROM_IPA_AGG_TIME;
  452. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  453. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  454. m_pHeader = m_pUsbHeader;
  455. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  456. break;
  457. case (IPA_CLIENT_TEST4_CONS):
  458. m_pInodePath = CONFIG_11_FROM_IPA_ZERO_LIMITS;
  459. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  460. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  461. m_pHeader = m_pUsbHeader;
  462. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST4_CONS");
  463. break;
  464. default:
  465. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_11 switch in default "
  466. "nClientType = %d is not supported ",
  467. nClientType);
  468. break;
  469. }
  470. break;
  471. case IPA_TEST_CONFIGURATION_12:
  472. switch(nClientType)
  473. {
  474. case (IPA_CLIENT_TEST_PROD):
  475. m_pInodePath = CONFIG_12_TO_IPA;
  476. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  477. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  478. m_pHeader = m_pUsbHeader;
  479. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD");
  480. break;
  481. case (IPA_CLIENT_TEST2_CONS):
  482. m_pInodePath = CONFIG_12_FROM_IPA_AGG;
  483. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  484. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  485. m_pHeader = m_pUsbHeader;
  486. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  487. break;
  488. case (IPA_CLIENT_TEST2_PROD):
  489. m_pInodePath = CONFIG_12_TO_IPA_DEAGG;
  490. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  491. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  492. m_pHeader = m_pUsbHeader;
  493. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD");
  494. break;
  495. case (IPA_CLIENT_TEST3_CONS):
  496. m_pInodePath = CONFIG_12_FROM_IPA;
  497. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  498. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  499. m_pHeader = m_pUsbHeader;
  500. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_CONS");
  501. break;
  502. case (IPA_CLIENT_TEST_CONS):
  503. m_pInodePath = CONFIG_12_FROM_IPA_AGG_TIME;
  504. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  505. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  506. m_pHeader = m_pUsbHeader;
  507. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  508. break;
  509. case (IPA_CLIENT_TEST4_CONS):
  510. m_pInodePath = CONFIG_12_FROM_IPA_ZERO_LIMITS;
  511. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  512. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  513. m_pHeader = m_pUsbHeader;
  514. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST4_CONS");
  515. break;
  516. default:
  517. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_12 switch in default "
  518. "nClientType = %d is not supported ",
  519. nClientType);
  520. break;
  521. }
  522. break;
  523. case IPA_TEST_CONFIGURATION_17:
  524. switch(nClientType)
  525. {
  526. case (IPA_CLIENT_TEST_PROD):
  527. m_pInodePath = CONFIG_17_TO_IPA;
  528. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  529. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  530. m_pHeader = m_pUsbHeader;
  531. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD ");
  532. break;
  533. case (IPA_CLIENT_TEST3_PROD):
  534. m_pInodePath = CONFIG_17_TO_IPA_NO_HDR;
  535. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  536. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  537. m_pHeader = m_pUsbHeader;
  538. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_PROD ");
  539. break;
  540. case (IPA_CLIENT_TEST2_CONS):
  541. m_pInodePath = CONFIG_17_FROM_IPA_AGG;
  542. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  543. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  544. m_pHeader = m_pUsbHeader;
  545. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_CONS");
  546. break;
  547. case (IPA_CLIENT_TEST2_PROD):
  548. m_pInodePath = CONFIG_17_TO_IPA_DEAGG;
  549. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  550. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  551. m_pHeader = m_pUsbHeader;
  552. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD ");
  553. break;
  554. case (IPA_CLIENT_TEST3_CONS):
  555. m_pInodePath = CONFIG_17_FROM_IPA;
  556. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  557. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  558. m_pHeader = m_pUsbHeader;
  559. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST3_CONS");
  560. break;
  561. case (IPA_CLIENT_TEST_CONS):
  562. m_pInodePath = CONFIG_17_FROM_IPA_AGG_TIME;
  563. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  564. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  565. m_pHeader = m_pUsbHeader;
  566. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  567. break;
  568. case (IPA_CLIENT_TEST4_CONS):
  569. m_pInodePath = CONFIG_17_FROM_IPA_ZERO_LIMITS;
  570. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  571. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  572. m_pHeader = m_pUsbHeader;
  573. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST4_CONS");
  574. break;
  575. default:
  576. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_17 switch in default "
  577. "nClientType = %d is not supported ",
  578. nClientType);
  579. break;
  580. }
  581. break;
  582. case IPA_TEST_CONFIGURATION_18:
  583. switch (nClientType)
  584. {
  585. case (IPA_CLIENT_TEST_PROD):
  586. m_pInodePath = CONFIG_18_TO_IPA;
  587. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  588. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  589. m_pHeader = m_pUsbHeader;
  590. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD ");
  591. break;
  592. case (IPA_CLIENT_TEST2_PROD):
  593. m_pInodePath = CONFIG_18_DUMMY_ENDPOINT;
  594. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  595. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  596. m_pHeader = m_pUsbHeader;
  597. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST2_PROD ");
  598. break;
  599. case (IPA_CLIENT_TEST_CONS):
  600. m_pInodePath = CONFIG_18_FROM_IPA;
  601. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  602. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  603. m_pHeader = m_pUsbHeader;
  604. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_CONS");
  605. break;
  606. default:
  607. LOG_MSG_ERROR(
  608. "IPA_TEST_CONFIFURATION_18 switch in default "
  609. "nClientType = %d is not supported ",
  610. nClientType);
  611. break;
  612. }
  613. break;
  614. case IPA_TEST_CONFIGURATION_19:
  615. switch (nClientType)
  616. {
  617. case (IPA_CLIENT_TEST_PROD):
  618. m_pInodePath = CONFIG_19_FROM_USB_TO_IPA_DMA;
  619. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  620. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  621. m_pHeader = m_pUsbHeader;
  622. LOG_MSG_INFO("Setting parameters for IPA_CLIENT_TEST_PROD ");
  623. break;
  624. case (IPA_CLIENT_TEST_CONS):
  625. m_pInodePath = CONFIG_19_FROM_IPA_TO_USB_DMA;
  626. m_nHeaderLengthAdd = sizeof(m_pUsbHeader);
  627. m_nHeaderLengthRemove = sizeof(m_pUsbHeader);
  628. m_pHeader = m_pUsbHeader;
  629. LOG_MSG_INFO("Setting parameters for TEST_CONS");
  630. break;
  631. default:
  632. LOG_MSG_ERROR("IPA_TEST_CONFIFURATION_19 switch in default "
  633. "nClientType = %d is not supported ", nClientType);
  634. break;
  635. }
  636. break;
  637. default:
  638. LOG_MSG_ERROR("Pipe::SetSpecificClientParameters "
  639. "switch in default eConfiguration = %d ", eConfiguration);
  640. break;
  641. }
  642. }/* Pipe::SetSpecificClientParameters() */
  643. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  644. int Pipe::GetHeaderLengthAdd() {
  645. if (false == m_bInitialized) {
  646. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  647. return 0;
  648. }
  649. return m_nHeaderLengthAdd;
  650. }
  651. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  652. int Pipe::GetHeaderLengthRemove() {
  653. if (false == m_bInitialized) {
  654. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  655. return 0;
  656. }
  657. return m_nHeaderLengthRemove;
  658. }
  659. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  660. bool Pipe::ConfigureHolb(unsigned short enable, unsigned timerValue) {
  661. if (false == m_bInitialized) {
  662. LOG_MSG_ERROR("Pipe is being used without being initialized!");
  663. return false;
  664. }
  665. if (IPA_CLIENT_IS_PROD(m_nClientType)) {
  666. LOG_MSG_ERROR("Can't configure HOLB on a producer pipe!");
  667. return false;
  668. }
  669. struct ipa_test_holb_config test_holb_config;
  670. test_holb_config.client = m_nClientType;
  671. test_holb_config.tmr_val = timerValue;
  672. test_holb_config.en = enable;
  673. LOG_MSG_DEBUG("Sending: client=%d tmr_val=%d en=%d",
  674. test_holb_config.client,
  675. test_holb_config.tmr_val,
  676. test_holb_config.en);
  677. return configure_holb(&test_holb_config);
  678. }
  679. bool Pipe::EnableHolb(unsigned timerValue) {
  680. return ConfigureHolb(1, timerValue);
  681. }
  682. bool Pipe::DisableHolb() {
  683. return ConfigureHolb(0, 0);
  684. }