17ed7df23SJanosch Frank /* 27ed7df23SJanosch Frank * SCLP ASCII access driver 37ed7df23SJanosch Frank * 47ed7df23SJanosch Frank * Copyright (c) 2013 Alexander Graf <agraf@suse.de> 57ed7df23SJanosch Frank * 67ed7df23SJanosch Frank * This work is licensed under the terms of the GNU GPL, version 2 or (at 77ed7df23SJanosch Frank * your option) any later version. See the COPYING file in the top-level 87ed7df23SJanosch Frank * directory. 97ed7df23SJanosch Frank */ 107ed7df23SJanosch Frank 117ed7df23SJanosch Frank #include <libcflat.h> 127ed7df23SJanosch Frank #include <string.h> 137ed7df23SJanosch Frank #include <asm/page.h> 147ed7df23SJanosch Frank #include "sclp.h" 157ed7df23SJanosch Frank 167ed7df23SJanosch Frank static void sclp_set_write_mask(void) 177ed7df23SJanosch Frank { 187ed7df23SJanosch Frank WriteEventMask *sccb = (void *)_sccb; 197ed7df23SJanosch Frank 20*8ead801eSJanosch Frank sclp_mark_busy(); 217ed7df23SJanosch Frank sccb->h.length = sizeof(WriteEventMask); 227ed7df23SJanosch Frank sccb->mask_length = sizeof(unsigned int); 237ed7df23SJanosch Frank sccb->receive_mask = SCLP_EVENT_MASK_MSG_ASCII; 247ed7df23SJanosch Frank sccb->cp_receive_mask = SCLP_EVENT_MASK_MSG_ASCII; 257ed7df23SJanosch Frank sccb->send_mask = SCLP_EVENT_MASK_MSG_ASCII; 267ed7df23SJanosch Frank sccb->cp_send_mask = SCLP_EVENT_MASK_MSG_ASCII; 277ed7df23SJanosch Frank 287ed7df23SJanosch Frank sclp_service_call(SCLP_CMD_WRITE_EVENT_MASK, sccb); 297ed7df23SJanosch Frank } 307ed7df23SJanosch Frank 317ed7df23SJanosch Frank void sclp_console_setup(void) 327ed7df23SJanosch Frank { 337ed7df23SJanosch Frank sclp_set_write_mask(); 347ed7df23SJanosch Frank } 357ed7df23SJanosch Frank 367ed7df23SJanosch Frank void sclp_print(const char *str) 377ed7df23SJanosch Frank { 387ed7df23SJanosch Frank int len = strlen(str); 397ed7df23SJanosch Frank WriteEventData *sccb = (void *)_sccb; 407ed7df23SJanosch Frank 41*8ead801eSJanosch Frank sclp_mark_busy(); 427ed7df23SJanosch Frank sccb->h.length = sizeof(WriteEventData) + len; 437ed7df23SJanosch Frank sccb->h.function_code = SCLP_FC_NORMAL_WRITE; 447ed7df23SJanosch Frank sccb->ebh.length = sizeof(EventBufferHeader) + len; 457ed7df23SJanosch Frank sccb->ebh.type = SCLP_EVENT_ASCII_CONSOLE_DATA; 467ed7df23SJanosch Frank sccb->ebh.flags = 0; 477ed7df23SJanosch Frank memcpy(sccb->data, str, len); 487ed7df23SJanosch Frank 497ed7df23SJanosch Frank sclp_service_call(SCLP_CMD_WRITE_EVENT_DATA, sccb); 507ed7df23SJanosch Frank } 51