]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/srio-lld.git/commitdiff
Merged BIOS MCSDK codebase for TX queue enhancement (SDOCM00112424)
authorIvan Pang <i-pang@ti.com>
Thu, 14 Apr 2016 17:56:49 +0000 (12:56 -0500)
committerIvan Pang <i-pang@ti.com>
Thu, 14 Apr 2016 17:56:49 +0000 (12:56 -0500)
Signed-off-by: Ivan Pang <i-pang@ti.com>
src/srio_drv.c
srio_drv.h

index 737d11c46fb6b5f67a52240b9e936daa2b800c58..44a0e2914d788d537cf34cbfc4a696d8ca1fe2ed 100644 (file)
@@ -57,6 +57,7 @@
 #include <ti/drv/srio/srio_drv.h>\r
 \r
 /* CSL SRIO Functional Layer */\r
+#include <ti/csl/csl_qm_queue.h>\r
 #include <ti/csl/csl_srio.h>\r
 #include <ti/csl/csl_srioAux.h>\r
 #include <ti/csl/csl_srioAuxPhyLayer.h>\r
@@ -205,11 +206,22 @@ typedef struct Srio_DriverInst
      * @brief   SRIO CPPI handle returned by the CPPI library (in Srio_start)\r
      */\r
     Cppi_Handle         cppiHnd;\r
+\r
+    /**\r
+     * @brief   SRIO Receive channel handle returned by the CPPI library.\r
+     */\r
+    Cppi_ChHnd          rxChHnd;\r
+\r
     /**\r
      * @brief   SRIO Transmit channel handle returned by the CPPI library.\r
      */\r
     Cppi_ChHnd          txChHnd;\r
 \r
+    /**\r
+     * @brief   SRIO Transmit channel Priority\r
+     */\r
+    uint8_t                            txChPriority;\r
+\r
     /**\r
      * @brief   CPPI Flow Handle.\r
      */    \r
@@ -299,6 +311,17 @@ typedef struct Srio_DriverInst
      */\r
     uint32_t            accInterrupts;\r
 \r
+    /**\r
+     * @brief The base value for SRIO queue. Must be set by user to use Srio_setTxQueue().\r
+     */\r
+    uint16_t                   srioBase;\r
+\r
+    /**\r
+     * @brief The number of SRIO queues available. Must be set by user to use Srio_setTxQueue().\r
+     */\r
+    uint16_t                   srioCount;\r
+\r
+\r
     /**\r
      * @brief   SRIO Driver configuration block passed by the driver user during \r
      * initialization\r
@@ -460,6 +483,27 @@ typedef struct Srio_Socket
      * overrun and there was no place to receive the new packet.\r
      */\r
     uint32_t                sockRxOverrun;\r
+\r
+    /**\r
+     * @brief   SRIO Transmit channel handle returned by the CPPI library. Sock open\r
+     * will define this equal to the txChHnd in ptr_SrioDrvInst. This is flexible to\r
+     * change if needed.\r
+     */\r
+    Cppi_ChHnd          txChHnd;\r
+\r
+    /**\r
+     * @brief   SRIO Transmit Queue. The queue is the well defined SRIO Tx queue and\r
+     * is used to send data packets. Sock open will define this equal to the txQueue\r
+     * in ptr_SrioDrvInst. This is flexible to change if needed.\r
+     */\r
+    Qmss_QueueHnd       txQueue;\r
+\r
+    /**\r
+     * @brief   SRIO Transmit channel Priority. This is the priority tied to the opened\r
+     * CPPI channel. Sock open will define this equal to the txChPriority in\r
+     * ptr_SrioDrvInst.\r
+     */\r
+    uint8_t                            txChPriority;\r
 }Srio_Socket;\r
 \r
 /** \r
@@ -1272,6 +1316,134 @@ static int32_t Srio_initSockData (Srio_Socket* ptr_srioSocket)
     return 0;\r
 }\r
 \r
+/**\r
+ * @b Description\r
+ * @n\r
+ *             Utility function to change the txqueue binded to an\r
+ *             SRIO driver handle.\r
+ *\r
+ *  @param[in]  srioSock\r
+ *      SRIO Socket Handle\r
+ *  @param[in]  hTxQueue\r
+ *      TX Queue struct. Contains TX queue number and priority.\r
+ *\r
+ *  @retval\r
+ *      Success - 0\r
+ *  @retval\r
+ *      Error   - <0\r
+ */\r
+#pragma CODE_SECTION(Srio_setTxQueue, ".text:Srio_setTXQueue");\r
+int32_t Srio_setTxQueue (Srio_SockHandle srioSock, Srio_txQueueCfg *hTxQueue)\r
+{\r
+       Srio_DriverInst*        ptr_srioDrvInst;\r
+    Srio_Socket*        ptr_srioSocket;\r
+       Srio_txQueueCfg*                ptr_txQueue;\r
+       Cppi_TxChInitCfg    txCfg;\r
+       Cppi_Result             result;\r
+       uint16_t                        txQueueNum;\r
+    uint8_t                    txChPriority, isAllocated;\r
+\r
+    /* Get the socket information. */\r
+    ptr_srioSocket = (Srio_Socket *)srioSock;\r
+\r
+    /* Check for valid SRIO socket handle */\r
+    if (ptr_srioSocket == NULL)\r
+        return -1;\r
+\r
+       /* Local pointer to SRIO driver handle */\r
+    ptr_srioDrvInst = ptr_srioSocket->ptr_SrioDrvInst;\r
+\r
+    /* Check for valid SRIO driver handle */\r
+    if (ptr_srioDrvInst == NULL)\r
+        return -1;\r
+\r
+    /* Check for valid srioBase and srioCount */\r
+    if (!ptr_srioDrvInst->srioBase || !ptr_srioDrvInst->srioBase->srioCount)\r
+        return -1;\r
+\r
+    /* Local pointer to the new TX queue struct */\r
+    ptr_txQueue = hTxQueue;\r
+\r
+    /* Check for valid TX queue info */\r
+    if (ptr_txQueue == NULL)\r
+        return -1;\r
+\r
+    /* Local copy of the new queue's information */\r
+    txQueueNum = ptr_txQueue->txQueueNum;\r
+    txChPriority = ptr_txQueue->txChPriority;\r
+\r
+    /* Check for valid queue number */\r
+    if ( (txQueueNum < ptr_srioDrvInst->srioBase) || (txQueueNum > (ptr_srioDrvInst->srioBase + ptr_srioDrvInst->srioCount)) )\r
+       return -1;\r
+\r
+    /* If the socket is already using the driver's queue, do not close it */\r
+    if ((uint16_t)ptr_srioDrvInst->txQueue != (uint16_t)ptr_srioSocket->txQueue)\r
+    {\r
+               /* Close the old queue */\r
+               if (Qmss_queueClose (ptr_srioSocket->txQueue) == QMSS_INVALID_PARAM)\r
+               {\r
+                       Srio_osalLog ("Error: Closing previous queue %d failed\n", (int32_t) ptr_srioSocket->txQueue);\r
+                       return -1;\r
+               }\r
+\r
+               /* Close the old CPPI channel */\r
+               result = Cppi_channelClose (ptr_srioSocket->txChHnd);\r
+               if ( (result == CPPI_INVALID_PARAM) || (result == CPPI_CHANNEL_NOT_OPEN) )\r
+               {\r
+                       Srio_osalLog ("Error: Closing previous CPPI channel %d failed\n", (int32_t) ptr_srioSocket->txChHnd);\r
+                       return -1;\r
+               }\r
+    }\r
+\r
+    /* If the update request is the driver instance's, simply copy the information over */\r
+    if (Qmss_getQIDFromHandle(ptr_srioDrvInst->txQueue) == ptr_txQueue->txQueueNum)\r
+    {\r
+       ptr_srioSocket->txQueue = ptr_srioDrvInst->txQueue;\r
+       ptr_srioDrvInst->txChHnd = ptr_srioDrvInst->txChHnd;\r
+       ptr_srioDrvInst->txChPriority = ptr_srioDrvInst->txChPriority;\r
+       return 0;\r
+    }\r
+\r
+       /* Open the new SRIO queue. */\r
+    ptr_srioSocket->txQueue = Qmss_queueOpen (Qmss_QueueType_SRIO_QUEUE , txQueueNum, &isAllocated);\r
+       if (ptr_srioSocket->txQueue < 0)\r
+       {\r
+               Srio_osalLog ("Error: SRIO Transmit Queue failed to open\n");\r
+               return -1;\r
+       }\r
+\r
+       /* Open the new CPPI channel */\r
+       txCfg.channelNum        = Qmss_getQIDFromHandle(ptr_srioSocket->txQueue) - ptr_srioDrvInst->srioBase;\r
+    txCfg.priority             = txChPriority;\r
+    txCfg.txEnable             = Cppi_ChState_CHANNEL_DISABLE;\r
+    txCfg.filterEPIB   = 0;\r
+    txCfg.filterPS             = 0;\r
+    txCfg.aifMonoMode  = 0;\r
+    ptr_srioSocket->txChHnd = Cppi_txChannelOpen (gSRIODriverMCB.cppiHnd, &txCfg, &isAllocated);\r
+    if (ptr_srioSocket->txChHnd == NULL)\r
+    {\r
+        Srio_osalLog ("Error: Opening SRIO Tx channel %d failed\n", txCfg.channelNum);\r
+        return -1;\r
+    }\r
+\r
+    /* Record the txChPriority */\r
+       ptr_srioDrvInst->txChPriority = txChPriority;\r
+\r
+    /* Check if channel is already in use */\r
+    if (isAllocated > 1)\r
+       return 0;\r
+\r
+    /* Else, enable the channel before returning */\r
+    if (Cppi_channelEnable (ptr_srioSocket->txChHnd) < 0)\r
+    {\r
+        Srio_osalLog ("Error: Enabling SRIO TX Channel %d failed\n", txCfg.channelNum);\r
+        return -1;\r
+    }\r
+\r
+       // TX queue updated\r
+       return 0;\r
+}\r
+\r
 /**\r
  *  @b Description\r
  *  @n  \r
@@ -2233,6 +2405,28 @@ Srio_DrvHandle Srio_start (Srio_DrvConfig* ptr_cfg)
     /* Invalidate the Cache Contents. */\r
     Srio_osalBeginMemAccess(&gSRIODriverMCB, sizeof(gSRIODriverMCB));\r
 \r
+    /* Save SRIO queue base if specified */\r
+    ptr_srioDrvInst->srioBase = ptr_srioDrvInst->cfg.srioQueueBase;\r
+\r
+    /* Save SRIO queue count if specified */\r
+    ptr_srioDrvInst->srioCount = ptr_srioDrvInst->cfg.srioQueueCount;\r
+\r
+    /* Open the SRIO Transmit Queue; this should lie within the SRIO queue region. */\r
+    if (ptr_srioDrvInst->cfg.bAppManagedConfig == 1)\r
+    {\r
+        txQueueNum = ptr_srioDrvInst->cfg.u.appManagedCfg.txQueueNum;\r
+    }\r
+    else\r
+    {\r
+        txQueueNum = QMSS_PARAM_NOT_SPECIFIED;\r
+    }\r
+    ptr_srioDrvInst->txQueue = Qmss_queueOpen (Qmss_QueueType_SRIO_QUEUE , txQueueNum, &isAllocated);\r
+    if (ptr_srioDrvInst->txQueue < 0)\r
+    {\r
+        Srio_osalLog ("Error: SRIO Transmit Queue failed to open\n");\r
+        return NULL;\r
+    }\r
+\r
     /* Enable the SRIO Transmit channel for each driver instance. */\r
     {\r
         Cppi_TxChInitCfg    txCfg;\r
@@ -2249,11 +2443,14 @@ Srio_DrvHandle Srio_start (Srio_DrvConfig* ptr_cfg)
             txCfg.priority = 0;\r
         }\r
 \r
+        /* Save the priority used to open TX channel */\r
+        ptr_srioDrvInst->txChPriority = txCfg.priority;\r
+\r
         txCfg.txEnable     = Cppi_ChState_CHANNEL_DISABLE;\r
         txCfg.filterEPIB   = 0;\r
         txCfg.filterPS     = 0;\r
         txCfg.aifMonoMode  = 0;\r
-        ptr_srioDrvInst->txChHnd = Cppi_txChannelOpen (ptr_srioDrvInst->cppiHnd, &txCfg, &isAllocated);\r
+        ptr_srioDrvInst->txChHnd = Cppi_txChannelOpen (gSRIODriverMCB.cppiHnd, &txCfg, &isAllocated);\r
         if (ptr_srioDrvInst->txChHnd == NULL)\r
         {\r
             Srio_osalLog ("Error: Opening SRIO Tx channel %d failed\n", txCfg.channelNum);\r
@@ -2261,22 +2458,6 @@ Srio_DrvHandle Srio_start (Srio_DrvConfig* ptr_cfg)
         }\r
     }\r
 \r
-    /* Open the SRIO Transmit Queue; this should lie within the SRIO queue region. */\r
-    if (ptr_srioDrvInst->cfg.bAppManagedConfig == 1)\r
-    {\r
-        txQueueNum = ptr_srioDrvInst->cfg.u.appManagedCfg.txQueueNum;\r
-    }\r
-    else\r
-    {\r
-        txQueueNum = QMSS_PARAM_NOT_SPECIFIED;\r
-    }\r
-    ptr_srioDrvInst->txQueue = Qmss_queueOpen (Qmss_QueueType_SRIO_QUEUE , txQueueNum, &isAllocated);\r
-    if (ptr_srioDrvInst->txQueue < 0)\r
-    {\r
-        Srio_osalLog ("Error: SRIO Transmit Queue failed to open\n");\r
-        return NULL;\r
-    }\r
-\r
     /* CRITICAL Section Start: */\r
     multiCoreCSInfo  = Srio_osalEnterMultipleCoreCriticalSection();\r
 \r
@@ -2325,7 +2506,7 @@ Srio_DrvHandle Srio_start (Srio_DrvConfig* ptr_cfg)
  *      Error   - <0\r
  */\r
 #ifdef _TMS320C6X\r
-#pragma CODE_SECTION(Srio_start, ".text:Srio_start");\r
+#pragma CODE_SECTION(Srio_stop, ".text:Srio_stop");\r
 #endif\r
 int32_t Srio_stop (Srio_DrvHandle hSrio)\r
 {\r
@@ -2542,6 +2723,11 @@ Srio_SockHandle Srio_sockOpen
         ptr_srioSocket->ptr_SrioDrvInst   = ptr_SrioDrvInst;\r
         ptr_srioSocket->maxPendingPackets = DEFAULT_SRIO_MAX_PENDING_PACKETS;\r
 \r
+        /* Initialize the txQueue, txChHnd, and txChPriority to the driver instance's */\r
+        ptr_srioSocket->txQueue                        = ptr_SrioDrvInst->txQueue;\r
+        ptr_srioSocket->txChHnd                        = ptr_SrioDrvInst->txChHnd;\r
+        ptr_srioSocket->txChPriority   = ptr_SrioDrvInst->txChPriority;\r
+\r
         /* Remember the allocated index. */\r
         ptr_srioSocket->sockIndex       = sockNum;\r
 \r
@@ -2584,6 +2770,12 @@ Srio_SockHandle Srio_sockOpen
             errorFlag = 0;\r
         }\r
     }\r
+    else {\r
+        /* Initialize the txQueue, txChHnd, and txChPriority to the driver instance's */\r
+        ptr_srioSocket->txQueue                        = ptr_SrioDrvInst->txQueue;\r
+        ptr_srioSocket->txChHnd                        = ptr_SrioDrvInst->txChHnd;\r
+        ptr_srioSocket->txChPriority   = ptr_SrioDrvInst->txChPriority;\r
+    }\r
 \r
     /* Are there any errors in getting a socket? */\r
     if (errorFlag == 0)\r
@@ -3217,7 +3409,7 @@ int32_t Srio_sockBind_DIO (Srio_SockHandle srioSock, Srio_SockBindAddrInfo* ptr_
     }\r
 #endif\r
 \r
-    if ((mappingNum >= 0) && (mappingNum < NUM_SRIO_TYPE9_TYPE11_SOCKETS))\r
+    if ((mappingNum >= 0) && (mappingNum < NUM_DIO_SOCKETS))\r
     {\r
         /* Remember the index. */\r
         ptr_srioSocket->mapIndex = mappingNum;\r
@@ -3236,7 +3428,7 @@ int32_t Srio_sockBind_DIO (Srio_SockHandle srioSock, Srio_SockBindAddrInfo* ptr_
     Srio_osalExitMultipleCoreCriticalSection (multiCoreCSInfo);\r
 \r
     /* Did we get a free entry? If not then the binding failed. */\r
-    if ((mappingNum < 0) || (mappingNum >= NUM_SRIO_TYPE9_TYPE11_SOCKETS))\r
+    if ((mappingNum < 0) || (mappingNum >= NUM_DIO_SOCKETS))\r
     {\r
         return -1;\r
     }\r
@@ -3519,7 +3711,7 @@ int32_t Srio_sockSend_TYPE11
                                         ptr_srioDrvInst->txDescSize);\r
 \r
         /* Push the transmit buffer descriptor into the Transmit Queue. */\r
-        Qmss_queuePushDescSize (ptr_srioDrvInst->txQueue, (uint32_t*)hDrvBuffer, ptr_srioDrvInst->txDescSize);\r
+        Qmss_queuePushDescSize (ptr_srioSocket->txQueue, (uint32_t*)hDrvBuffer, ptr_srioDrvInst->txDescSize);\r
     }\r
     else\r
     {\r
@@ -3536,7 +3728,7 @@ int32_t Srio_sockSend_TYPE11
         Srio_osalEndDescriptorAccess ((Srio_DrvHandle)ptr_srioDrvInst, (void *)hDrvBuffer, numBytes);\r
 \r
         /* Push the buffer descriptor into the transmit queue.*/\r
-        Qmss_queuePushDescSize (ptr_srioDrvInst->txQueue, (uint32_t*)hDrvBuffer, numBytes);\r
+        Qmss_queuePushDescSize (ptr_srioSocket->txQueue, (uint32_t*)hDrvBuffer, numBytes);\r
     }\r
 \r
     /* The packet has been successfully transmitted. */\r
@@ -3647,7 +3839,7 @@ int32_t Srio_sockSend_TYPE9
                                        ptr_srioDrvInst->txDescSize);\r
 \r
         /* Push the transmit buffer descriptor into the Transmit Queue. */\r
-        Qmss_queuePushDescSize (ptr_srioDrvInst->txQueue, (uint32_t*)hDrvBuffer, ptr_srioDrvInst->txDescSize);\r
+        Qmss_queuePushDescSize (ptr_srioSocket->txQueue, (uint32_t*)hDrvBuffer, ptr_srioDrvInst->txDescSize);\r
     }\r
     else\r
     {\r
@@ -3664,7 +3856,7 @@ int32_t Srio_sockSend_TYPE9
         Srio_osalEndDescriptorAccess ((Srio_DrvHandle)ptr_srioDrvInst, (void *)hDrvBuffer, numBytes);\r
 \r
         /* Push the buffer descriptor into the transmit queue.*/\r
-        Qmss_queuePushDescSize (ptr_srioDrvInst->txQueue, (uint32_t*)hDrvBuffer, numBytes);\r
+        Qmss_queuePushDescSize (ptr_srioSocket->txQueue, (uint32_t*)hDrvBuffer, numBytes);\r
     }\r
 \r
     /* The packet has been successfully transmitted. */\r
@@ -4199,6 +4391,23 @@ int32_t Srio_setSockOpt
             /* Socket has been registered successfully. */\r
             return 0;\r
         }\r
+        case Srio_Opt_UPDATE_TXQUEUE:\r
+        {\r
+               /* If it is a DIO socket, do nothing and return */\r
+               if (ptr_srioSocket->type == Srio_SocketType_DIO)\r
+                       return 0;\r
+\r
+            /* This option takes a 'Srio_txQueue' configuration data */\r
+            if (optlen == sizeof(Srio_txQueueCfg))\r
+            {\r
+                if (Srio_setTxQueue(srioSock, (Srio_txQueueCfg *) optval) != 0 )\r
+                       return -1;\r
+\r
+                /* TX queue updated successfully. */\r
+                return 0;\r
+            }\r
+            break;\r
+        }\r
         default: /* fall through and return error */\r
             break;\r
 \r
@@ -4323,6 +4532,20 @@ int32_t Srio_getSockOpt
             /* Option has been successfully handled. */\r
             return 0; \r
         }\r
+        case Srio_Opt_UPDATE_TXQUEUE:\r
+        {\r
+            /* This option takes a 'Srio_txQueue' configuration data */\r
+            if (optlen == sizeof(Srio_txQueueCfg))\r
+            {\r
+               /* return the socket's TX queue number */\r
+                ((Srio_txQueueCfg *)optval)->txQueueNum = Qmss_getQIDFromHandle(ptr_srioSocket->txQueue);\r
+                ((Srio_txQueueCfg *)optval)->txChPriority = ptr_srioSocket->txChPriority;\r
+\r
+                /* Optval updated successfully. */\r
+                return 0;\r
+            }\r
+            break;\r
+        }\r
         default:\r
             break; /* Fall through and return error */\r
     }\r
@@ -4450,6 +4673,15 @@ int32_t Srio_sockClose_TYPE11 (Srio_SockHandle srioSock)
     Srio_osalExitMultipleCoreCriticalSection (csInfo);\r
 #endif\r
 \r
+    /* If the socket instance's queue differ from the driver instance, close it */\r
+       if ((uint16_t)ptr_SrioDrvInst->txQueue != (uint16_t)ptr_srioSocket->txQueue)\r
+       {\r
+               if (Qmss_queueClose (ptr_srioSocket->txQueue) < 0)\r
+                       return -1;\r
+               if (Cppi_channelClose (ptr_srioSocket->txChHnd) < 0)\r
+                       return -1;\r
+       }\r
+\r
     /* The socket memory can now be cleaned up. */\r
     Srio_osalFree(ptr_srioSocket, sizeof(Srio_Socket));\r
     return error;\r
@@ -4573,6 +4805,15 @@ int32_t Srio_sockClose_TYPE9 (Srio_SockHandle srioSock)
     Srio_osalExitMultipleCoreCriticalSection (csInfo);\r
 #endif\r
 \r
+    /* If the socket instance's queue differ from the driver instance, close it */\r
+       if ((uint16_t)ptr_SrioDrvInst->txQueue != (uint16_t)ptr_srioSocket->txQueue)\r
+       {\r
+               if (Qmss_queueClose (ptr_srioSocket->txQueue) < 0)\r
+                       return -1;\r
+               if (Cppi_channelClose (ptr_srioSocket->txChHnd) < 0)\r
+                       return -1;\r
+       }\r
+\r
     /* The socket memory can now be cleaned up. */\r
     Srio_osalFree(ptr_srioSocket, sizeof(Srio_Socket));\r
     return error;\r
index 8b98ee9d31e0c8b005b765a611f89ff8405edcbf..a5826401261991cb577bf4bb379a0d53153b9e8f 100644 (file)
@@ -505,6 +505,20 @@ typedef struct Srio_DrvConfig
      */\r
     uint16_t            bAppManagedConfig;\r
 \r
+    /**\r
+     * @brief  This value specifies the queue base for the SRIO driver\r
+     * to use. If left unassigned, SRIO driver will default to\r
+     * SRIO_QUEUE_BASE in srio_drv.c. This default value is 672.\r
+     */\r
+    uint16_t                   srioQueueBase;\r
+\r
+    /**\r
+     * @brief  This value specifies the number of SRIO queue in the\r
+     * device. If left unassigned, SRIO driver will default to\r
+     * SRIO_QUEUE_COUNT in srio_drv.c. This default value is 16.\r
+     */\r
+    uint16_t                   srioQueueCount;\r
+\r
     /**\r
      * @brief    Union structure for the driver configuration.\r
      */\r
@@ -808,6 +822,29 @@ typedef struct Srio_DioAddrInfo
 \r
 /** \r
  * @brief \r
+ *  SRIO Socket TX Queue Information\r
+ *\r
+ * @details\r
+ *  The structure describes the transmission queue to use and allows\r
+ *  for updating the socket with Srio_setSockOpt.\r
+ */\r
+typedef struct Srio_txQueue\r
+{\r
+    /**\r
+     * @brief   16b number for the queue to open. This number should be based\r
+     * on a device-specific QMSS_SRIO_QUEUE_BASE, with a maximum offset amount\r
+     * of QMSS_MAX_SRIO_QUEUE.\r
+     */\r
+    uint16_t   txQueueNum;\r
+\r
+    /**\r
+     * @brief   8b number to describe the queue priority\r
+     */\r
+    uint8_t            txChPriority;\r
+}Srio_txQueueCfg;\r
+\r
+/**\r
+ * @brief\r
  *  SRIO Socket Bind Information\r
  *\r
  * @details\r
@@ -880,7 +917,18 @@ typedef enum Srio_Opt
      * configuration data to return the completion code. A value of 0 indicates \r
      * transfer was complete with no errors. All other values indicate an error.\r
      */\r
-    Srio_Opt_DIO_READ_SOCK_COMP_CODE = 0x4\r
+    Srio_Opt_DIO_READ_SOCK_COMP_CODE = 0x4,\r
+\r
+    /**\r
+     * @brief  This command is for changing the txQueue and its associated CPPI\r
+     * txChHnd on a given socket instance. The txQueue and txChHnd default when\r
+     * opening the socket comes from the driver instance. This option allows for\r
+     * changing the transmit to a different queue by opening the new queue and\r
+     * CPPI channel base on the txQueueNum. Queue close and channel close will only\r
+     * be called if the updated queue number is different from the txQueue in the\r
+     * driver instance.\r
+     */\r
+    Srio_Opt_UPDATE_TXQUEUE = 0x5\r
 \r
 }Srio_Opt;\r
 \r