195a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner/* This file is included from monitor.c, it's purpose is to hold as much 295a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner * Android-specific stuff as possible to ease upstream integrations. 395a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner */ 495a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 595a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' TurnerMonitor* 695a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turnermonitor_fake_new(void* opaque, MonitorFakeFunc cb) 795a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner{ 895a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner Monitor* mon; 995a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 1095a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner assert(cb != NULL); 1195a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon = qemu_mallocz(sizeof(*mon)); 1295a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->fake_opaque = opaque; 1395a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->fake_func = cb; 1495a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->fake_count = 0; 1595a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 1695a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner return mon; 1795a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner} 1895a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 1995a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turnerint 2095a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turnermonitor_fake_get_bytes(Monitor* mon) 2195a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner{ 2295a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner assert(mon->fake_func != NULL); 2395a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner return mon->fake_count; 2495a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner} 2595a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 2695a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turnervoid 2795a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turnermonitor_fake_free(Monitor* mon) 2895a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner{ 2995a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner assert(mon->fake_func != NULL); 3095a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner free(mon); 3195a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner} 3295a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 3395a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner/* This replaces the definition in monitor.c which is in a 3495a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner * #ifndef CONFIG_ANDROID .. #endif block. 3595a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner */ 3695a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turnervoid monitor_flush(Monitor *mon) 3795a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner{ 3895a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner if (!mon) 3995a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner return; 4095a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner 4195a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner if (mon->fake_func != NULL) { 4295a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->fake_func(mon->fake_opaque, (void*)mon->outbuf, mon->outbuf_index); 4395a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->outbuf_index = 0; 4495a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->fake_count += mon->outbuf_index; 4595a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner } else if (!mon->mux_out) { 4695a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner qemu_chr_write(mon->chr, mon->outbuf, mon->outbuf_index); 4795a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner mon->outbuf_index = 0; 4895a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner } 4995a83ce7ee413954ba6325584ea659c6685edfd5David 'Digit' Turner} 50