V10/lsys/sys/dkwindow.h
/* URP window-size negotiation.
*
* The 16 bits of the window-size argument are defined as:
*
* -----------------------------------------------------------------
* |valid| spare | originator | destination | traffic |
* | | | window size | window size | |
* -----------------------------------------------------------------
* 1 3 4 4 4
*
* The "valid" bit equals 1 to indicate that the window size values
* are specified. Zero means they should be ignored and that default
* values must be used instead. Old controllers that do not have
* window size negotiation happen to set this bit to zero, fortunately.
*
* The actual window size is computed from the 4-bit window size
* parameter (n) as 2**(n+4). Thus, window sizes range from 16 to
* 512K bytes.
*
* The originator of a call sets his "originator window size" to be
* less than or equal to the size of his receive buffer, and he
* requests through the "destination window size" the size of the
* buffer that he would like to use for transmission. As the call
* is being set up, trunk processes and the destination line process
* may lower either or both window sizes. The resulting window sizes
* are returned to the originator in the call ANSWER message.
*/
#ifndef MIN
#define MIN(x,y) (x < y ? x : y)
#endif
/* Format originator, destination, and traffic values */
#define WINDOW(o,d,t) ((o<<8) | (d<<4) | t | 0100000)
#define W_VALID(x) (x & 0100000)
#define W_ORIG(x) ((x>>8) & 017)
#define W_DEST(x) ((x>>4) & 017)
#define W_TRAF(x) (x & 017)
#define W_DESTMAX(x,y) (WINDOW(W_ORIG(x),MIN(W_DEST(x),y),W_TRAF(x)))
#define W_LIMIT(x,y) (WINDOW(MIN(W_ORIG(x),y),MIN(W_DEST(x),y),W_TRAF(x)))
#define W_VALUE(x) (1<<(x+4))
#define WS_16 0
#define WS_32 1
#define WS_64 2
#define WS_128 3
#define WS_256 4
#define WS_512 5
#define WS_1K 6
#define WS_2K 7
#define WS_4K 8
#define WS_8K 9
#define WS_16K 10
#define WS_32K 11
#define WS_64K 12
#define WS_128K 13
#define WS_256K 14
#define WS_512K 15