} ESL_TCP4_TX_DATA;\r
\r
\r
+/**\r
+ Receive context for SOCK_STREAM and SOCK_SEQPACKET sockets using TCPv6.\r
+**/\r
+typedef struct\r
+{\r
+ EFI_TCP6_RECEIVE_DATA RxData; ///< Receive operation description\r
+ UINT8 Buffer[ RX_PACKET_DATA ]; ///< Data buffer\r
+} ESL_TCP6_RX_DATA;\r
+\r
+\r
+/**\r
+ Transmit context for SOCK_STREAM and SOCK_SEQPACKET sockets using TCPv6.\r
+**/\r
+typedef struct\r
+{\r
+ EFI_TCP6_TRANSMIT_DATA TxData; ///< Transmit operation description\r
+ UINT8 Buffer[ 1 ]; ///< Data buffer\r
+} ESL_TCP6_TX_DATA;\r
+\r
+\r
/**\r
Receive context for SOCK_DGRAM sockets using UDPv4.\r
**/\r
} ESL_UDP4_TX_DATA;\r
\r
\r
+/**\r
+ Receive context for SOCK_DGRAM sockets using UDPv6.\r
+**/\r
+typedef struct\r
+{\r
+ EFI_UDP6_SESSION_DATA Session; ///< Remote network address\r
+ EFI_UDP6_RECEIVE_DATA * pRxData; ///< Receive operation description\r
+} ESL_UDP6_RX_DATA;\r
+\r
+\r
+/**\r
+ Transmit context for SOCK_DGRAM sockets using UDPv6.\r
+**/\r
+typedef struct\r
+{\r
+ EFI_UDP6_SESSION_DATA Session; ///< Remote network address\r
+ EFI_UDP6_TRANSMIT_DATA TxData; ///< Transmit operation description\r
+ UINTN RetransmitCount; ///< Retransmit to handle ARP negotiation\r
+ UINT8 Buffer[ 1 ]; ///< Data buffer\r
+} ESL_UDP6_TX_DATA;\r
+\r
+\r
/**\r
Network specific context for transmit and receive packets.\r
**/\r
ESL_IP4_TX_DATA Ip4Tx; ///< Transmit operation description\r
ESL_TCP4_RX_DATA Tcp4Rx; ///< Receive operation description\r
ESL_TCP4_TX_DATA Tcp4Tx; ///< Transmit operation description\r
+ ESL_TCP6_RX_DATA Tcp6Rx; ///< Receive operation description\r
+ ESL_TCP6_TX_DATA Tcp6Tx; ///< Transmit operation description\r
ESL_UDP4_RX_DATA Udp4Rx; ///< Receive operation description\r
ESL_UDP4_TX_DATA Udp4Tx; ///< Transmit operation description\r
+ ESL_UDP6_RX_DATA Udp6Rx; ///< Receive operation description\r
+ ESL_UDP6_TX_DATA Udp6Tx; ///< Transmit operation description\r
} Op; ///< Network specific context\r
} GCC_ESL_PACKET;\r
\r
EFI_IP4_COMPLETION_TOKEN Ip4Tx; ///< IP4 transmit token\r
EFI_TCP4_IO_TOKEN Tcp4Rx; ///< TCP4 receive token\r
EFI_TCP4_IO_TOKEN Tcp4Tx; ///< TCP4 transmit token\r
+ EFI_TCP6_IO_TOKEN Tcp6Rx; ///< TCP6 receive token\r
+ EFI_TCP6_IO_TOKEN Tcp6Tx; ///< TCP6 transmit token\r
EFI_UDP4_COMPLETION_TOKEN Udp4Rx; ///< UDP4 receive token\r
EFI_UDP4_COMPLETION_TOKEN Udp4Tx; ///< UDP4 transmit token\r
+ EFI_UDP6_COMPLETION_TOKEN Udp6Rx; ///< UDP6 receive token\r
+ EFI_UDP6_COMPLETION_TOKEN Udp6Tx; ///< UDP6 transmit token\r
} Token; ///< Completion token for the network operation\r
} GCC_IO_MGMT;\r
\r
EFI_TCP4_CLOSE_TOKEN CloseToken; ///< Close control\r
} ESL_TCP4_CONTEXT;\r
\r
+/**\r
+ TCP6 context structure\r
+\r
+ The driver uses this structure to manage the TCP6 connections.\r
+**/\r
+typedef struct {\r
+ //\r
+ // TCP6 context\r
+ //\r
+ EFI_TCP6_CONFIG_DATA ConfigData; ///< TCP6 configuration data\r
+ EFI_TCP6_OPTION Option; ///< TCP6 port options\r
+\r
+ //\r
+ // Tokens\r
+ //\r
+ EFI_TCP6_LISTEN_TOKEN ListenToken; ///< Listen control\r
+ EFI_TCP6_CONNECTION_TOKEN ConnectToken; ///< Connection control\r
+ EFI_TCP6_CLOSE_TOKEN CloseToken; ///< Close control\r
+} ESL_TCP6_CONTEXT;\r
+\r
/**\r
UDP4 context structure\r
\r
EFI_UDP4_CONFIG_DATA ConfigData; ///< UDP4 configuration data\r
} ESL_UDP4_CONTEXT;\r
\r
+/**\r
+ UDP6 context structure\r
+\r
+ The driver uses this structure to manage the UDP6 connections.\r
+**/\r
+typedef struct {\r
+ //\r
+ // UDP6 context\r
+ //\r
+ EFI_UDP6_CONFIG_DATA ConfigData; ///< UDP6 configuration data\r
+} ESL_UDP6_CONTEXT;\r
+\r
\r
/**\r
Configure the network layer.\r
IN VOID * pToken\r
);\r
\r
+/**\r
+ Poll the LAN adapter for receive packets.\r
+\r
+ @param [in] pProtocol Protocol structure address\r
+ @param [in] pToken Completion token address\r
+\r
+ @return Returns EFI_SUCCESS if the operation is successfully\r
+ started.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(* PFN_NET_POLL) (\r
+ IN VOID * pProtocol\r
+ );\r
+\r
/**\r
Port control structure\r
\r
// Receive data management\r
//\r
PFN_NET_IO_START pfnRxCancel; ///< Cancel a receive on the network\r
+ PFN_NET_POLL pfnRxPoll; ///< Poll the LAN adapter for receive packets\r
PFN_NET_IO_START pfnRxStart; ///< Start a receive on the network\r
ESL_IO_MGMT * pRxActive; ///< Active receive operation queue\r
ESL_IO_MGMT * pRxFree; ///< Free structure queue\r
VOID * v; ///< VOID pointer\r
EFI_IP4_PROTOCOL * IPv4; ///< IP4 protocol pointer\r
EFI_TCP4_PROTOCOL * TCPv4; ///< TCP4 protocol pointer\r
+ EFI_TCP6_PROTOCOL * TCPv6; ///< TCP6 protocol pointer\r
EFI_UDP4_PROTOCOL * UDPv4; ///< UDP4 protocol pointer\r
+ EFI_UDP6_PROTOCOL * UDPv6; ///< UDP6 protocol pointer\r
} pProtocol; ///< Protocol structure address\r
union {\r
ESL_IP4_CONTEXT Ip4; ///< IPv4 management data\r
ESL_TCP4_CONTEXT Tcp4; ///< TCPv4 management data\r
+ ESL_TCP6_CONTEXT Tcp6; ///< TCPv6 management data\r
ESL_UDP4_CONTEXT Udp4; ///< UDPv4 management data\r
+ ESL_UDP6_CONTEXT Udp6; ///< UDPv6 management data\r
} Context; ///< Network specific context\r
}GCC_ESL_PORT;\r
\r
//\r
ESL_SERVICE * pIp4List; ///< List of Ip4 services\r
ESL_SERVICE * pTcp4List; ///< List of Tcp4 services\r
+ ESL_SERVICE * pTcp6List; ///< List of Tcp6 services\r
ESL_SERVICE * pUdp4List; ///< List of Udp4 services\r
+ ESL_SERVICE * pUdp6List; ///< List of Udp6 services\r
\r
//\r
// Socket management\r
extern ESL_LAYER mEslLayer;\r
\r
extern CONST ESL_PROTOCOL_API cEslIp4Api;\r
+extern CONST ESL_PROTOCOL_API cEslIp6Api;\r
extern CONST ESL_PROTOCOL_API cEslTcp4Api;\r
+extern CONST ESL_PROTOCOL_API cEslTcp6Api;\r
extern CONST ESL_PROTOCOL_API cEslUdp4Api;\r
+extern CONST ESL_PROTOCOL_API cEslUdp6Api;\r
\r
extern CONST EFI_SERVICE_BINDING_PROTOCOL mEfiServiceBinding;\r
\r
IN BOOLEAN bUrgent\r
);\r
\r
+/**\r
+ Poll a socket for pending receive activity.\r
+\r
+ This routine is called at elivated TPL and extends the idle\r
+ loop which polls a socket down into the LAN driver layer to\r
+ determine if there is any receive activity.\r
+\r
+ The ::EslSocketPoll, ::EslSocketReceive and ::EslSocketTransmit\r
+ routines call this routine when there is nothing to do.\r
+\r
+ @param [in] pSocket Address of an ::EFI_SOCKET structure.\r
+\r
+ **/\r
+VOID\r
+EslSocketRxPoll (\r
+ IN ESL_SOCKET * pSocket\r
+ );\r
+\r
/**\r
Start a receive operation\r
\r