}\r
p_adapter->params.send_chksum_offload = (p_param->ParameterData.IntegerData != 0);\r
\r
+ /* Required: Send Checksum Offload. */\r
+ RtlInitUnicodeString( &keyword, L"RecvChksum" );\r
+ NdisReadConfiguration(\r
+ &status, &p_param, h_config, &keyword, NdisParameterInteger );\r
+ if( status != NDIS_STATUS_SUCCESS )\r
+ {\r
+ IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,\r
+ ("Recv Checksum Offload parameter missing.\n") );\r
+ return status;\r
+ }\r
+ p_adapter->params.recv_chksum_offload = (p_param->ParameterData.IntegerData != 0);\r
+\r
/* Optional: WSDP support. */\r
RtlInitUnicodeString( &keyword, L"WsdpEnabled" );\r
NdisReadConfiguration(\r
p_offload_chksum->V4Transmit.IpChecksum =\r
p_adapter->params.send_chksum_offload;\r
\r
- /*\r
- * Only receive checksum can be offloaded thanks to\r
- * the IB physical layer.\r
- */\r
- p_offload_chksum->V4Receive.IpOptionsSupported = TRUE;\r
- p_offload_chksum->V4Receive.TcpOptionsSupported = TRUE;\r
- p_offload_chksum->V4Receive.TcpChecksum = TRUE;\r
- p_offload_chksum->V4Receive.UdpChecksum = TRUE;\r
- p_offload_chksum->V4Receive.IpChecksum = TRUE;\r
+ p_offload_chksum->V4Receive.IpOptionsSupported =\r
+ p_adapter->params.recv_chksum_offload;\r
+ p_offload_chksum->V4Receive.TcpOptionsSupported =\r
+ p_adapter->params.recv_chksum_offload;\r
+ p_offload_chksum->V4Receive.TcpChecksum =\r
+ p_adapter->params.recv_chksum_offload;\r
+ p_offload_chksum->V4Receive.UdpChecksum =\r
+ p_adapter->params.recv_chksum_offload;\r
+ p_offload_chksum->V4Receive.IpChecksum =\r
+ p_adapter->params.recv_chksum_offload;\r
\r
p_offload_chksum->V6Transmit.IpOptionsSupported = FALSE;\r
p_offload_chksum->V6Transmit.TcpOptionsSupported = FALSE;\r
return NDIS_STATUS_NOT_SUPPORTED;\r
}\r
\r
+ if( !p_adapter->params.recv_chksum_offload &&\r
+ (p_offload_chksum->V4Receive.IpOptionsSupported ||\r
+ p_offload_chksum->V4Receive.TcpOptionsSupported ||\r
+ p_offload_chksum->V4Receive.TcpChecksum ||\r
+ p_offload_chksum->V4Receive.UdpChecksum ||\r
+ p_offload_chksum->V4Receive.IpChecksum) )\r
+ {\r
+ return NDIS_STATUS_NOT_SUPPORTED;\r
+ }\r
+\r
return NDIS_STATUS_SUCCESS;\r
}\r
\r
HKR, Ndi\Params\SendChksum\enum, "0", 0, "Disabled"\r
HKR, Ndi\Params\SendChksum\enum, "1", 0, "Enabled"\r
\r
+HKR, Ndi\Params\RecvChksum, ParamDesc, 0, "Recv Checksum Offload"\r
+HKR, Ndi\Params\RecvChksum, Type, 0, "enum"\r
+HKR, Ndi\Params\RecvChksum, Default, 0, "0"\r
+HKR, Ndi\Params\RecvChksum, Optional, 0, "0"\r
+HKR, Ndi\Params\RecvChksum\enum, "0", 0, "Disabled"\r
+HKR, Ndi\Params\RecvChksum\enum, "1", 0, "Enabled"\r
+\r
HKR, Ndi\Params\WsdpEnabled, ParamDesc, 0, "WSDP Support"\r
HKR, Ndi\Params\WsdpEnabled, Type, 0, "enum"\r
HKR, Ndi\Params\WsdpEnabled, Default, 0, "0"\r