Lines Matching full:buffer
42 * Setup a sclp write buffer. Gets a page as input (4K) and returns
44 * end of the input page. This reduces the buffer space by a few
50 struct sclp_buffer *buffer; in sclp_make_buffer() local
58 buffer = ((struct sclp_buffer *) ((addr_t) sccb + PAGE_SIZE)) - 1; in sclp_make_buffer()
59 buffer->sccb = sccb; in sclp_make_buffer()
60 buffer->retry_count = 0; in sclp_make_buffer()
61 buffer->messages = 0; in sclp_make_buffer()
62 buffer->char_sum = 0; in sclp_make_buffer()
63 buffer->current_line = NULL; in sclp_make_buffer()
64 buffer->current_length = 0; in sclp_make_buffer()
65 buffer->columns = columns; in sclp_make_buffer()
66 buffer->htab = htab; in sclp_make_buffer()
72 return buffer; in sclp_make_buffer()
77 * the buffer.
80 sclp_unmake_buffer(struct sclp_buffer *buffer) in sclp_unmake_buffer() argument
82 return buffer->sccb; in sclp_unmake_buffer()
86 * Initialize a new message the end of the provided buffer with
90 sclp_initialize_mto(struct sclp_buffer *buffer, int max_len) in sclp_initialize_mto() argument
102 /* check if current buffer sccb can contain the mto */ in sclp_initialize_mto()
103 sccb = buffer->sccb; in sclp_initialize_mto()
128 buffer->current_msg = msg; in sclp_initialize_mto()
129 buffer->current_line = (char *) (mto + 1); in sclp_initialize_mto()
130 buffer->current_length = 0; in sclp_initialize_mto()
137 * updating the sizes of MTO, enclosing MDB, event buffer and SCCB.
140 sclp_finalize_mto(struct sclp_buffer *buffer) in sclp_finalize_mto() argument
147 * (SCCB, Event(Message) Buffer, Message Data Block) in sclp_finalize_mto()
149 sccb = buffer->sccb; in sclp_finalize_mto()
150 msg = buffer->current_msg; in sclp_finalize_mto()
151 msg->header.length += buffer->current_length; in sclp_finalize_mto()
152 msg->mdb.header.length += buffer->current_length; in sclp_finalize_mto()
153 msg->mdb.mto.length += buffer->current_length; in sclp_finalize_mto()
161 buffer->messages++; in sclp_finalize_mto()
162 buffer->char_sum += buffer->current_length; in sclp_finalize_mto()
164 buffer->current_line = NULL; in sclp_finalize_mto()
165 buffer->current_length = 0; in sclp_finalize_mto()
166 buffer->current_msg = NULL; in sclp_finalize_mto()
177 sclp_write(struct sclp_buffer *buffer, const unsigned char *msg, int count) in sclp_write() argument
192 * next message. Besides we avoid a buffer overrun by writing its in sclp_write()
209 if (buffer->current_line == NULL) { in sclp_write()
210 rc = sclp_initialize_mto(buffer, 0); in sclp_write()
214 sclp_finalize_mto(buffer); in sclp_write()
218 if (buffer->current_line == NULL) { in sclp_write()
219 rc = sclp_initialize_mto(buffer, in sclp_write()
220 buffer->columns); in sclp_write()
224 buffer->current_msg->mdb.go.general_msg_flags |= in sclp_write()
229 if (buffer->current_line == NULL) { in sclp_write()
230 rc = sclp_initialize_mto(buffer, in sclp_write()
231 buffer->columns); in sclp_write()
237 if (buffer->current_length >= buffer->columns) in sclp_write()
240 *buffer->current_line++ = 0x40; in sclp_write()
241 buffer->current_length++; in sclp_write()
242 } while (buffer->current_length % buffer->htab); in sclp_write()
248 if (buffer->current_line != NULL) { in sclp_write()
249 spaces = buffer->current_length; in sclp_write()
250 sclp_finalize_mto(buffer); in sclp_write()
251 rc = sclp_initialize_mto(buffer, in sclp_write()
252 buffer->columns); in sclp_write()
255 memset(buffer->current_line, 0x40, spaces); in sclp_write()
256 buffer->current_line += spaces; in sclp_write()
257 buffer->current_length = spaces; in sclp_write()
260 rc = sclp_initialize_mto(buffer, in sclp_write()
261 buffer->columns); in sclp_write()
264 sclp_finalize_mto(buffer); in sclp_write()
271 if (buffer->current_line != NULL && in sclp_write()
272 buffer->current_length > 0) { in sclp_write()
273 buffer->current_length--; in sclp_write()
274 buffer->current_line--; in sclp_write()
279 if (buffer->current_line != NULL) in sclp_write()
280 sclp_finalize_mto(buffer); in sclp_write()
289 if (buffer->current_line == NULL) { in sclp_write()
290 rc = sclp_initialize_mto(buffer, in sclp_write()
291 buffer->columns); in sclp_write()
295 *buffer->current_line++ = sclp_ascebc(msg[i_msg]); in sclp_write()
296 buffer->current_length++; in sclp_write()
300 if (buffer->current_line != NULL && in sclp_write()
301 buffer->current_length >= buffer->columns) in sclp_write()
302 sclp_finalize_mto(buffer); in sclp_write()
313 sclp_buffer_space(struct sclp_buffer *buffer) in sclp_buffer_space() argument
318 sccb = buffer->sccb; in sclp_buffer_space()
320 if (buffer->current_line != NULL) in sclp_buffer_space()
321 count -= sizeof(struct msg_buf) + buffer->current_length; in sclp_buffer_space()
326 * Return number of characters in buffer
329 sclp_chars_in_buffer(struct sclp_buffer *buffer) in sclp_chars_in_buffer() argument
333 count = buffer->char_sum; in sclp_chars_in_buffer()
334 if (buffer->current_line != NULL) in sclp_chars_in_buffer()
335 count += buffer->current_length; in sclp_chars_in_buffer()
367 struct sclp_buffer *buffer; in sclp_writedata_callback() local
370 buffer = (struct sclp_buffer *) data; in sclp_writedata_callback()
371 sccb = buffer->sccb; in sclp_writedata_callback()
374 if (buffer->callback != NULL) in sclp_writedata_callback()
375 buffer->callback(buffer, -EIO); in sclp_writedata_callback()
381 /* Normal completion, buffer processed, message(s) sent */ in sclp_writedata_callback()
386 if (++buffer->retry_count > SCLP_BUFFER_MAX_RETRY) { in sclp_writedata_callback()
394 buffer->request.status = SCLP_REQ_FILLED; in sclp_writedata_callback()
404 if (++buffer->retry_count > SCLP_BUFFER_MAX_RETRY) { in sclp_writedata_callback()
410 buffer->request.status = SCLP_REQ_FILLED; in sclp_writedata_callback()
422 if (buffer->callback != NULL) in sclp_writedata_callback()
423 buffer->callback(buffer, rc); in sclp_writedata_callback()
432 sclp_emit_buffer(struct sclp_buffer *buffer, in sclp_emit_buffer() argument
436 if (buffer->current_line != NULL) in sclp_emit_buffer()
437 sclp_finalize_mto(buffer); in sclp_emit_buffer()
439 /* Are there messages in the output buffer ? */ in sclp_emit_buffer()
440 if (buffer->messages == 0) in sclp_emit_buffer()
443 buffer->request.command = SCLP_CMDW_WRITE_EVENT_DATA; in sclp_emit_buffer()
444 buffer->request.status = SCLP_REQ_FILLED; in sclp_emit_buffer()
445 buffer->request.callback = sclp_writedata_callback; in sclp_emit_buffer()
446 buffer->request.callback_data = buffer; in sclp_emit_buffer()
447 buffer->request.sccb = buffer->sccb; in sclp_emit_buffer()
448 buffer->callback = callback; in sclp_emit_buffer()
449 return sclp_add_request(&buffer->request); in sclp_emit_buffer()