1 /* 2 * SCLP ASCII access driver 3 * 4 * Copyright (c) 2013 Alexander Graf <agraf@suse.de> 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2 or (at 7 * your option) any later version. See the COPYING file in the top-level 8 * directory. 9 */ 10 11 #include <libcflat.h> 12 #include <string.h> 13 #include <asm/page.h> 14 #include "sclp.h" 15 16 static void sclp_set_write_mask(void) 17 { 18 WriteEventMask *sccb = (void *)_sccb; 19 20 sccb->h.length = sizeof(WriteEventMask); 21 sccb->mask_length = sizeof(unsigned int); 22 sccb->receive_mask = SCLP_EVENT_MASK_MSG_ASCII; 23 sccb->cp_receive_mask = SCLP_EVENT_MASK_MSG_ASCII; 24 sccb->send_mask = SCLP_EVENT_MASK_MSG_ASCII; 25 sccb->cp_send_mask = SCLP_EVENT_MASK_MSG_ASCII; 26 27 sclp_service_call(SCLP_CMD_WRITE_EVENT_MASK, sccb); 28 } 29 30 void sclp_console_setup(void) 31 { 32 sclp_set_write_mask(); 33 } 34 35 void sclp_print(const char *str) 36 { 37 int len = strlen(str); 38 WriteEventData *sccb = (void *)_sccb; 39 40 sccb->h.length = sizeof(WriteEventData) + len; 41 sccb->h.function_code = SCLP_FC_NORMAL_WRITE; 42 sccb->ebh.length = sizeof(EventBufferHeader) + len; 43 sccb->ebh.type = SCLP_EVENT_ASCII_CONSOLE_DATA; 44 sccb->ebh.flags = 0; 45 memcpy(sccb->data, str, len); 46 47 sclp_service_call(SCLP_CMD_WRITE_EVENT_DATA, sccb); 48 } 49