(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 |