From: Sean Hefty Date: Sat, 20 Oct 2012 16:19:22 +0000 (-0700) Subject: rsocket: Reserve bits in data transfer message X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=411a7f62adcf39dda8e3866605f66e513b174032;p=~shefty%2Flibrdmacm.git rsocket: Reserve bits in data transfer message rsockets includes the length of a data transfer in the immediate data. Currently 29 bits are reserved for the length, but the maximum transfer is currently capped at 64K. For future expansion, limit the length field to 17 bits and reserve the other 12. The interpretation of the 17 bits is modified as follows. The lower 16 bits indicate a length. If the upper bit is 0, then the lower 16 bits indicate a transfer size in bytes. If the upper bit is 1, the the total transfer size is calculated as (size carried in bits 0-15 + 1) * 64 KB. This is backwards compatible with the current implementation, allows for transfers up to 4 GB, and provides us some additional bits for future use. Signed-off-by: Sean Hefty --- diff --git a/src/rsocket.c b/src/rsocket.c index cc5effe1..fc21ce91 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -54,6 +54,7 @@ #include "indexer.h" #define RS_OLAP_START_SIZE 2048 +/* Data transfers over 64 KB not supported at this time */ #define RS_MAX_TRANSFER 65536 #define RS_QP_MAX_SIZE 0xFFFE #define RS_QP_CTRL_SIZE 4 @@ -76,7 +77,11 @@ static uint32_t polling_time = 10; * bit 29: more data, 0 - end of transfer, 1 - more data available * * for data transfers: - * bits [28:0]: bytes transfered, 0 = 1 GB + * bits [28:17]: reserved + * bit [16]: scaling factor for lower 16 bits + * 0 - length is in bytes, total transfer = length bytes + * 1 - length is in 64KB increments, transfer = (length + 1) & 64 KB + * bits [15:0] length of transfered * for control messages: * bits [28-0]: receive credits granted */