summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Sobota2015-06-24 15:45:25 -0500
committerJustin Sobota2015-06-24 15:45:25 -0500
commit449b16e50779486282ad1bbed96badea242a62d1 (patch)
tree49b1ada38e35d28318e2ffcdd79693987baa7640
parentda0e9eaf95a195ba0e081809964038f72136eb7e (diff)
downloadmpm-transport-449b16e50779486282ad1bbed96badea242a62d1.tar.gz
mpm-transport-449b16e50779486282ad1bbed96badea242a62d1.tar.xz
mpm-transport-449b16e50779486282ad1bbed96badea242a62d1.zip
srio_rcv now returns SRIO source address. Fixed SDOCM00117465
-rwxr-xr-xinclude/mpm_transport.h18
-rw-r--r--scripts/mpm_config.json4
-rwxr-xr-xsrc/transport/mpm_transport.c27
-rw-r--r--src/transport/qmss/mpm_transport_qmss.c17
-rw-r--r--src/transport/srio/mpm_transport_srio.c32
-rw-r--r--src/transport/srio/mpm_transport_srio.h2
6 files changed, 80 insertions, 20 deletions
diff --git a/include/mpm_transport.h b/include/mpm_transport.h
index 01f14fb..b91f86f 100755
--- a/include/mpm_transport.h
+++ b/include/mpm_transport.h
@@ -295,6 +295,24 @@ int mpm_transport_packet_send(mpm_transport_h h, char **buf, int *len,
295 mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg); 295 mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg);
296 296
297/** 297/**
298 * @b Function mpm_transport_packet_recv2
299 * @n Pops information from the packet_addr_t binded to handle h. Data is
300 * copied to buf, of size len.
301 *
302 * Valid for SRIO recv: The source address from which the data was
303 * received is returned in the src_addr structure.
304 *
305 * @retval
306 * Success - returns 0
307 * @retval
308 * Failure - returns value less than 0 (negative integer)
309 *
310 */
311int mpm_transport_packet_recv2(mpm_transport_h h, char **buf, int *len,
312 mpm_transport_packet_addr_t *src_addr,
313 mpm_transport_recv_t *cfg);
314
315/**
298 * @b Function mpm_transport_packet_recv 316 * @b Function mpm_transport_packet_recv
299 * @n Pops information from the packet_addr_t binded to handle h. Data is 317 * @n Pops information from the packet_addr_t binded to handle h. Data is
300 * copied to buf, of size len. 318 * copied to buf, of size len.
diff --git a/scripts/mpm_config.json b/scripts/mpm_config.json
index ffd1d54..d419f05 100644
--- a/scripts/mpm_config.json
+++ b/scripts/mpm_config.json
@@ -446,14 +446,14 @@
446 "queue": -1, 446 "queue": -1,
447 "qtype": "general", 447 "qtype": "general",
448 "numdesc": 32, 448 "numdesc": 32,
449 "sizebuf": 256 449 "sizebuf": 4096
450 }, 450 },
451 { 451 {
452 "name": "rx-free-q-1", 452 "name": "rx-free-q-1",
453 "queue": -1, 453 "queue": -1,
454 "qtype": "general", 454 "qtype": "general",
455 "numdesc": 32, 455 "numdesc": 32,
456 "sizebuf": 256 456 "sizebuf": 4096
457 } 457 }
458 ] 458 ]
459} 459}
diff --git a/src/transport/mpm_transport.c b/src/transport/mpm_transport.c
index dcd3bb3..661ef5e 100755
--- a/src/transport/mpm_transport.c
+++ b/src/transport/mpm_transport.c
@@ -2161,7 +2161,11 @@ int mpm_transport_packet_send(mpm_transport_h h, char **buf, int *len, mpm_trans
2161 2161
2162/** 2162/**
2163 * @b Description 2163 * @b Description
2164 * @n Pops information from the packet_addr_t binded to handle h. Data is copied to buf, of size len. 2164 * @n Pops information from the packet_addr_t binded to handle h. Data is
2165 * copied to buf, of size len.
2166 *
2167 * Valid for SRIO recv: The source address from which the data was
2168 * received is returned in the src_addr structure.
2165 * 2169 *
2166 * @retval 2170 * @retval
2167 * Success - returns 0 2171 * Success - returns 0
@@ -2169,7 +2173,9 @@ int mpm_transport_packet_send(mpm_transport_h h, char **buf, int *len, mpm_trans
2169 * Failure - returns value less than 0 (negative integer) 2173 * Failure - returns value less than 0 (negative integer)
2170 * 2174 *
2171 */ 2175 */
2172int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_transport_recv_t *cfg) 2176int mpm_transport_packet_recv2(mpm_transport_h h, char **buf, int *len,
2177 mpm_transport_packet_addr_t *src_addr,
2178 mpm_transport_recv_t *cfg)
2173{ 2179{
2174 mpm_transport_cfg_t *sp = (mpm_transport_cfg_t *) h; 2180 mpm_transport_cfg_t *sp = (mpm_transport_cfg_t *) h;
2175 int ret = 0; 2181 int ret = 0;
@@ -2179,7 +2185,7 @@ int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_trans
2179 ret = mpm_transport_qmss_packet_recv(sp, buf, len, cfg); 2185 ret = mpm_transport_qmss_packet_recv(sp, buf, len, cfg);
2180 break; 2186 break;
2181 case srio: 2187 case srio:
2182 ret = mpm_transport_srio_packet_recv(sp, buf, len, cfg); 2188 ret = mpm_transport_srio_packet_recv(sp, buf, len, src_addr, cfg);
2183 break; 2189 break;
2184 default: 2190 default:
2185 mpm_printf(1, "mpm_transport_packet_recv: unsupported transport %d\n", sp->transport); 2191 mpm_printf(1, "mpm_transport_packet_recv: unsupported transport %d\n", sp->transport);
@@ -2188,3 +2194,18 @@ int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_trans
2188 } 2194 }
2189 return ret; 2195 return ret;
2190} 2196}
2197
2198/**
2199 * @b Description
2200 * @n Pops information from the packet_addr_t binded to handle h. Data is copied to buf, of size len.
2201 *
2202 * @retval
2203 * Success - returns 0
2204 * @retval
2205 * Failure - returns value less than 0 (negative integer)
2206 *
2207 */
2208int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_transport_recv_t *cfg)
2209{
2210 return(mpm_transport_packet_recv2(h, buf, len, NULL, cfg));
2211}
diff --git a/src/transport/qmss/mpm_transport_qmss.c b/src/transport/qmss/mpm_transport_qmss.c
index 13fd382..270e776 100644
--- a/src/transport/qmss/mpm_transport_qmss.c
+++ b/src/transport/qmss/mpm_transport_qmss.c
@@ -361,7 +361,7 @@ int mpm_transport_qmss_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len
361 desc = (Cppi_Desc *) QMSS_DESC_PTR(desc); 361 desc = (Cppi_Desc *) QMSS_DESC_PTR(desc);
362 362
363 /* Grab the packet's buffer into tempBuf */ 363 /* Grab the packet's buffer into tempBuf */
364 Cppi_getData(Cppi_DescType_HOST, desc, &tempBuf, &buffLen); 364 Cppi_getOriginalBufInfo(Cppi_DescType_HOST, desc, &tempBuf, &buffLen);
365 365
366 if (cfg == NULL) { 366 if (cfg == NULL) {
367 bufferOption = packet_send_BUFFER_DEFAULT; 367 bufferOption = packet_send_BUFFER_DEFAULT;
@@ -384,7 +384,7 @@ int mpm_transport_qmss_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len
384 } 384 }
385 else { 385 else {
386 memcpy(tempBuf, *buf, *len); 386 memcpy(tempBuf, *buf, *len);
387 *len = buffLen; 387 Cppi_setDataLen(Cppi_DescType_HOST, desc, *len);
388 } 388 }
389 } 389 }
390 else if (bufferOption == packet_send_LINK_BUFFER_POINTER) { 390 else if (bufferOption == packet_send_LINK_BUFFER_POINTER) {
@@ -396,11 +396,10 @@ int mpm_transport_qmss_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len
396 tag.destTagHi = 0; 396 tag.destTagHi = 0;
397 tag.srcTagLo = flow_id; 397 tag.srcTagLo = flow_id;
398 tag.srcTagHi = 0; 398 tag.srcTagHi = 0;
399 399 Cppi_setTag(Cppi_DescType_HOST, desc, &tag);
400 Cppi_setTag (Cppi_DescType_HOST, desc, &tag);
401 400
402 /* Set packet length */ 401 /* Set packet length */
403 Cppi_setPacketLen (Cppi_DescType_HOST, desc, td->txBufSize); 402 Cppi_setPacketLen(Cppi_DescType_HOST, desc, *len);
404 403
405 Qmss_queuePushDescSize (td->txqHnd, (uint32_t *) desc, td->txDescSize); 404 Qmss_queuePushDescSize (td->txqHnd, (uint32_t *) desc, td->txDescSize);
406 405
@@ -467,12 +466,14 @@ int mpm_transport_qmss_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len
467 // PUSH TO RX COMPLETE Q 466 // PUSH TO RX COMPLETE Q
468 } 467 }
469 else { 468 else {
470 if (*len > buffLen) { 469 if (*len < buffLen) {
471 mpm_printf(1, "mpm_transport_qmss_packet_recv(): Error, tried to get more data than buffer size!\n"); 470 mpm_printf(1, "mpm_transport_qmss_packet_recv(): "
471 "Error, received %d bytes but "
472 "provided buffer only has %d bytes!\n", buffLen, *len);
472 return -1; 473 return -1;
473 } 474 }
474 else { 475 else {
475 memcpy(*buf, tempBuf, *len); 476 memcpy(*buf, tempBuf, buffLen);
476 *len = buffLen; 477 *len = buffLen;
477 } 478 }
478 479
diff --git a/src/transport/srio/mpm_transport_srio.c b/src/transport/srio/mpm_transport_srio.c
index 95cd186..177dd9c 100644
--- a/src/transport/srio/mpm_transport_srio.c
+++ b/src/transport/srio/mpm_transport_srio.c
@@ -467,7 +467,7 @@ int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len
467 desc = (Cppi_Desc *) QMSS_DESC_PTR(desc); 467 desc = (Cppi_Desc *) QMSS_DESC_PTR(desc);
468 468
469 /* Grab the packet's buffer into tempBuf */ 469 /* Grab the packet's buffer into tempBuf */
470 Cppi_getData(Cppi_DescType_HOST, desc, &tempBuf, &buffLen); 470 Cppi_getOriginalBufInfo(Cppi_DescType_HOST, desc, &tempBuf, &buffLen);
471 471
472 if (cfg == NULL) { 472 if (cfg == NULL) {
473 bufferOption = packet_send_BUFFER_DEFAULT; 473 bufferOption = packet_send_BUFFER_DEFAULT;
@@ -490,7 +490,7 @@ int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len
490 } 490 }
491 else { 491 else {
492 memcpy(tempBuf, *buf, *len); 492 memcpy(tempBuf, *buf, *len);
493 *len = buffLen; 493 Cppi_setDataLen(Cppi_DescType_HOST, desc, *len);
494 } 494 }
495 } 495 }
496 else if (bufferOption == packet_send_LINK_BUFFER_POINTER) { 496 else if (bufferOption == packet_send_LINK_BUFFER_POINTER) {
@@ -526,7 +526,10 @@ int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len
526 return 0; 526 return 0;
527} 527}
528 528
529int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_recv_t *cfg) 529int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf,
530 int *len,
531 mpm_transport_packet_addr_t *src_addr,
532 mpm_transport_recv_t *cfg)
530{ 533{
531 mpm_transport_srio_t *td = (mpm_transport_srio_t *) sp->td; 534 mpm_transport_srio_t *td = (mpm_transport_srio_t *) sp->td;
532 int32_t num_bytes; 535 int32_t num_bytes;
@@ -577,16 +580,33 @@ int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len
577 // PUSH TO RX COMPLETE Q 580 // PUSH TO RX COMPLETE Q
578 } 581 }
579 else { 582 else {
580 if (*len > buffLen) { 583 if (*len < buffLen) {
581 mpm_printf(1, "mpm_transport_srio_packet_recv(): Error, tried to get more data than buffer size!\n"); 584 mpm_printf(1, "mpm_transport_srio_packet_recv(): "
585 "Error, received %d bytes but "
586 "provided buffer only has %d bytes!\n", buffLen, *len);
582 return -1; 587 return -1;
583 } 588 }
584 else { 589 else {
585 memcpy(*buf, tempBuf, *len); 590 memcpy(*buf, tempBuf, buffLen);
586 *len = buffLen; 591 *len = buffLen;
587 } 592 }
588 } 593 }
589 594
595 if (src_addr) {
596 if (src_addr->addr_type == packet_addr_type_SRIO_TYPE9) {
597 ((src_addr->addr)).srio.type9.tt = from.type9.tt;
598 ((src_addr->addr)).srio.type9.id = from.type9.id;
599 ((src_addr->addr)).srio.type9.cos = from.type9.cos;
600 ((src_addr->addr)).srio.type9.streamId = from.type9.streamId;
601 }
602 else if (src_addr->addr_type == packet_addr_type_SRIO_TYPE11) {
603 ((src_addr->addr)).srio.type11.tt = from.type11.tt;
604 ((src_addr->addr)).srio.type11.id = from.type11.id;
605 ((src_addr->addr)).srio.type11.letter = from.type11.letter;
606 ((src_addr->addr)).srio.type11.mailbox = from.type11.mbox;
607 }
608 }
609
590 Srio_freeRxDrvBuffer(td->srioSockHnd, (Srio_DrvBuffer)desc); 610 Srio_freeRxDrvBuffer(td->srioSockHnd, (Srio_DrvBuffer)desc);
591 611
592 return 0; 612 return 0;
diff --git a/src/transport/srio/mpm_transport_srio.h b/src/transport/srio/mpm_transport_srio.h
index fc3c810..681c8a4 100644
--- a/src/transport/srio/mpm_transport_srio.h
+++ b/src/transport/srio/mpm_transport_srio.h
@@ -117,7 +117,7 @@ int mpm_transport_srio_insert_mem_region(mpm_transport_cfg_t *sp, mpm_transport_
117int mpm_transport_srio_open(mpm_transport_cfg_t *sp, mpm_transport_open_t *ocfg); 117int mpm_transport_srio_open(mpm_transport_cfg_t *sp, mpm_transport_open_t *ocfg);
118void mpm_transport_srio_close(mpm_transport_cfg_t *sp); 118void mpm_transport_srio_close(mpm_transport_cfg_t *sp);
119int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg); 119int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg);
120int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_recv_t *cfg); 120int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_packet_addr_t *src_addr, mpm_transport_recv_t *cfg);
121 121
122#ifdef STATIC_BUILD 122#ifdef STATIC_BUILD
123void Srio_freeRxDrvBuffer(Srio_SockHandle srioSock, Srio_DrvBuffer hDrvBuffer) __attribute__((weak)); 123void Srio_freeRxDrvBuffer(Srio_SockHandle srioSock, Srio_DrvBuffer hDrvBuffer) __attribute__((weak));