L 5.20:  Indirect strings in do_long_ipc first part

(Revision 0  5 December 2000)

 

overview    This  section  is the first part of processing of the indirect strings part of memory messages. It does a simple sanity check, copies the strings from sender's buffer to receiver's buffer with interrupts enabled and stores the number of direct words copied in the result word.

on entry	rcv_hdr	mapped via XKSSEG to receiver's msg hdr
		snd_hdr pointer to sender's message header
data	L4_IPC_REMSGCUT	     0xE0 (7 in error code in result word dope)
	USER_ADDRESS_TOP     0x0000010000000000 (1 TB)
	L4_MAX_STRING_SIZE   4x1024x1024 (4 MB)
        
126,127,185 if we are sending indirect strings
128-131 define local variable to save base of mapped address of receiver's window in receiver VA space - need this later when we map new windows for indirect strings and also define number of strings counter, i , and pointers to send and receive string dopes in message buffers
132-136 if either total # of strings specified in send header or total # of string specified in receive header is less that # of strings being sent  specified in send header
137-141 flush temporary window mappings from tlb and return with "message truncated" error code
142-147 initialize pointers to first string dope address following dwords in send and receive message buffers
148 initialize local variable to save base of mapped address of receiver's window in receiver VA space
149,150,185 go thru indirect strings specified in send header one at a time
151,152 define string pointers and string byte counter, j
154-161 if ith send or receive string size > 4MB or ith send string size is larger than ith receive string buffer size or starting address of ith send or receive string + its size is outside user address space 1 TB range
162-166 flush temporary window mappings from tlb and return with "message truncated" error code