|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * file: pe_printf.c ! 24: * i386 platform expert output initialization. ! 25: */ ! 26: #include <sys/types.h> ! 27: #include <mach/vm_param.h> ! 28: #include <stdarg.h> ! 29: #include <pexpert/protos.h> ! 30: #include <pexpert/pexpert.h> ! 31: #include <pexpert/i386/kdsoft.h> ! 32: ! 33: #define KA_NORMAL 0x07 ! 34: #define COLOR_PLATNUM 0x80 ! 35: ! 36: /* extern references */ ! 37: extern void printf(const char *format, ...); ! 38: extern void cninit(void); ! 39: extern void display_putc(char c); ! 40: extern void cnputc(char c); ! 41: ! 42: /* local references */ ! 43: void PE_printf(const char *fmt, ...); ! 44: unsigned char *mapframebuffer(caddr_t,int); ! 45: void (*PE_putc)(char c); ! 46: u_char *vid_start; ! 47: ! 48: void PE_init_printf(boolean_t vm_initialized) ! 49: { ! 50: PE_Video v; ! 51: ! 52: ! 53: ! 54: if (!vm_initialized) ! 55: { ! 56: /* ! 57: * Initialize the console so we can print. Start out by pointing to 0xa0000, but eventually ! 58: * map our space in and then update the console "vid_start". ! 59: */ ! 60: /* FIX ME! */ ! 61: ! 62: vid_start = 0xa0000; ! 63: v.v_width = PE_state.video.v_width; ! 64: v.v_depth = PE_state.video.v_depth; ! 65: v.v_rowBytes = PE_state.video.v_rowBytes; ! 66: /* HACK - Only "one segment" is available on the screen */ ! 67: v.v_height = 0x10000 / (PE_state.video.v_rowBytes); ! 68: initialize_screen(&v, vid_start); ! 69: } ! 70: else ! 71: { ! 72: /* ! 73: * Initialize the console so we can print. Now that VM is initialized, map out physical ! 74: * space in. ! 75: */ ! 76: ! 77: if (PE_state.video.v_baseAddr != 0) ! 78: { ! 79: unsigned char *fb; ! 80: ! 81: fb = mapframebuffer((caddr_t)PE_state.video.v_baseAddr, ! 82: PE_state.video.v_rowBytes * PE_state.video.v_height); ! 83: vid_start = fb; ! 84: initialize_screen(&PE_state.video, vid_start); ! 85: printf("Console initialized. Mode: Linear (%ldx%ldx%ld)\n", PE_state.video.v_width, ! 86: PE_state.video.v_height, ! 87: PE_state.video.v_depth); ! 88: init_display_putc(fb, PE_state.video.v_width * PE_state.video.v_depth / 8, PE_state.video.v_height); ! 89: PE_putc = display_putc; ! 90: PE_printf("Debug console initialized.\n"); PE_pause(1); ! 91: ! 92: } ! 93: } ! 94: } ! 95: ! 96: void PE_printf(const char *fmt, ...) ! 97: { ! 98: va_list listp; ! 99: ! 100: va_start(listp, fmt); ! 101: _doprnt(fmt, &listp, PE_putc, 16); ! 102: va_end(listp); ! 103: } ! 104: ! 105: /* ! 106: * mapblit: map the framebuffer into kernel vm and return the (virtual) ! 107: * address. ! 108: */ ! 109: unsigned char * ! 110: mapframebuffer( ! 111: caddr_t physaddr, /* start of framebuffer */ ! 112: int length) /* num bytes to map */ ! 113: { ! 114: vm_offset_t vmaddr; ! 115: ! 116: if (physaddr != (caddr_t)trunc_page(physaddr)) ! 117: panic("Framebuffer not on page boundary"); ! 118: ! 119: vmaddr = io_map((vm_offset_t)physaddr, length); ! 120: if (vmaddr == 0) ! 121: panic("can't alloc VM for framebuffer"); ! 122: ! 123: return((unsigned char *)vmaddr); ! 124: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.