Lines Matching +full:reg +full:- +full:spaces
1 // SPDX-License-Identifier: GPL-2.0
27 #define MAX_SCCB_ROOM (PAGE_SIZE - sizeof(struct sclp_buffer))
29 static void sclp_rw_pm_event(struct sclp_register *reg, in sclp_rw_pm_event() argument
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()
70 sccb->length = sizeof(struct sccb_header); in sclp_make_buffer()
82 return buffer->sccb; in sclp_unmake_buffer()
103 sccb = buffer->sccb; in sclp_initialize_mto()
104 if ((MAX_SCCB_ROOM - sccb->length) < msg_size) in sclp_initialize_mto()
105 return -ENOMEM; in sclp_initialize_mto()
107 msg = (struct msg_buf *)((addr_t) sccb + sccb->length); in sclp_initialize_mto()
109 msg->header.length = sizeof(struct msg_buf); in sclp_initialize_mto()
110 msg->header.type = EVTYP_MSG; in sclp_initialize_mto()
112 mdb = &msg->mdb; in sclp_initialize_mto()
113 mdb->header.length = sizeof(struct mdb); in sclp_initialize_mto()
114 mdb->header.type = 1; in sclp_initialize_mto()
115 mdb->header.tag = 0xD4C4C240; /* ebcdic "MDB " */ in sclp_initialize_mto()
116 mdb->header.revision_code = 1; in sclp_initialize_mto()
118 go = &mdb->go; in sclp_initialize_mto()
119 go->length = sizeof(struct go); in sclp_initialize_mto()
120 go->type = 1; in sclp_initialize_mto()
122 mto = &mdb->mto; in sclp_initialize_mto()
123 mto->length = sizeof(struct mto); in sclp_initialize_mto()
124 mto->type = 4; /* message text object */ in sclp_initialize_mto()
125 mto->line_type_flags = LNTPFLGS_ENDTEXT; /* end text */ 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()
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()
154 sccb->length += msg->header.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()
179 int spaces, i_msg; in sclp_write() local
190 * Depending on i/o-control setting the message is always written in sclp_write()
201 * \t is expanded to some spaces but \r does not know about a in sclp_write()
209 if (buffer->current_line == NULL) { in sclp_write()
218 if (buffer->current_line == NULL) { 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()
231 buffer->columns); in sclp_write()
235 /* "go to (next htab-boundary + 1, same line)" */ 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()
247 /* = new line, leading spaces */ in sclp_write()
248 if (buffer->current_line != NULL) { in sclp_write()
249 spaces = buffer->current_length; 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()
261 buffer->columns); in sclp_write()
268 /* "go to (actual column - 1, actual line)" */ 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()
282 i_msg = count - 1; in sclp_write()
289 if (buffer->current_line == NULL) { 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()
318 sccb = buffer->sccb; in sclp_buffer_space()
319 count = MAX_SCCB_ROOM - sccb->length; 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()
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()
360 * second half of Write Event Data-function that has to be done after
371 sccb = buffer->sccb; in sclp_writedata_callback()
373 if (request->status == SCLP_REQ_FAILED) { in sclp_writedata_callback()
374 if (buffer->callback != NULL) in sclp_writedata_callback()
375 buffer->callback(buffer, -EIO); in sclp_writedata_callback()
379 switch (sccb->response_code) { in sclp_writedata_callback()
386 if (++buffer->retry_count > SCLP_BUFFER_MAX_RETRY) { in sclp_writedata_callback()
387 rc = -EIO; in sclp_writedata_callback()
393 sccb->response_code = 0x0000; 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()
405 rc = -EIO; in sclp_writedata_callback()
409 sccb->response_code = 0x0000; in sclp_writedata_callback()
410 buffer->request.status = SCLP_REQ_FILLED; in sclp_writedata_callback()
416 if (sccb->response_code == 0x71f0) in sclp_writedata_callback()
417 rc = -ENOMEM; in sclp_writedata_callback()
419 rc = -EINVAL; in sclp_writedata_callback()
422 if (buffer->callback != NULL) in sclp_writedata_callback()
423 buffer->callback(buffer, rc); in sclp_writedata_callback()
429 * success, non-zero otherwise.
436 if (buffer->current_line != NULL) in sclp_emit_buffer()
440 if (buffer->messages == 0) in sclp_emit_buffer()
441 return -EIO; 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()