/* $NetBSD: darwin_ioframebuffer.c,v 1.5 2003/05/13 20:48:16 manu Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Emmanuel Dreyfus. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the NetBSD * Foundation, Inc. and its contributors. * 4. Neither the name of The NetBSD Foundation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include __KERNEL_RCSID(0, "$NetBSD: darwin_ioframebuffer.c,v 1.5 2003/05/13 20:48:16 manu Exp $"); #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* This is ugly, but we hope to see it going away quickly */ static char darwin_iofbconfig[] = "IOFBModesAID0xeeDMAAACAAAAAYAAMgAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x3eAID0x82DMAAACAAAAAYAAPAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x3AID0xe8DMAAACAAAAAYAAPAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x37DMAAACAAAAAYAARgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x5AIDDMAAACgAAAAeAAPAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x38AIDDMAAACgAAAAeAAMgAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x3fAID0x96DMAAACgAAAAeAAPAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x6AID0x8cDMAAACgAAAAeAAQwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x7AID0x98DMAAACgAAAAeAASAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x8AID0x9aDMAAACgAAAAeAASwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x9AID0x9eDMAAACgAAAAeAAVQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0xaAID0xa0DMAAACgAAAA2YASwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0xeAIDDMAAAC0AAAAeAAMgAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x4bAIDDMAAAC0AAAAeAAPAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x4dAIDDMAAAC0AAAAkAAMgAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x4cAIDDMAAAC0AAAAkAAPAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x4eAIDDMAAADIAAAAlgAMgAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x40AID0xb4DMAAADIAAAAlgAOAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0xfAID0xb6DMAAADIAAAAlgAPAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x10AIDDMAAADIAAAAlgAPAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x39AID0x2aID0x2dDF0x400DMAAADIAAAAlgAAAAAAAAAAgAABAAAAAAAAAAAAAAAAAAAAAAADF0x100DMAAADIAAAAlgAPAAAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAID0x32AID0xb8DMAAADIAAAAlgASAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x11AID0xbaDMAAADIAAAAlgASwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x12AIDID0x46DFDMAID0xbcDMAAADIAAAAlgAVQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x13AIDDMAAADQAAAAnAAMgAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x41AIDDMAAADQAAAAnAAPAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAID0x3aAID0xaaDMAAADQAAAAnAASwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x17DMAAADVAAAAoAAPAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x18AID0xbeDMAAAEAAAAAwAAPAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x19AIDID0x2eDF0x407DMAAAEAAAAAwAAAAAAAAAAAgAABAcAAAAAAAAAAAAAAAAAAAAAAIDID0x33DFDMAAAEAAAAAwAAPAAAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAID0xc8DMAAAEAAAAAwAARgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x1aAID0xccDMAAAEAAAAAwAASwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x1bAID0xd2DMID0x1cAID0xd0DMAAAEAAAAAwAAVQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x1dAID0xdcDMAAAEgAAAA2YASwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAID0x21AID0xfaDMAAAFAAAAA8AASwAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAID0x22AID0x104DMAAAFAAAABAAAPAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAID0x23AID0x106DMAAAFAAAABAAASwAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAID0x24IODisplayConnectFlags0x0"; static char darwin_ioframebuffer_properties[] = "IOClassAppleBacklightDisplayIOProbeScore0xbb8IOProviderClassIODisplayConnectCFBundleIdentifiercom.apple.iokit.IOGraphicsFamilyIOMatchCategoryIODefaultMatchCategoryIODisplayConnectFlagsAAAIxA==AppleDisplayType0x2AppleSense0x400DisplayVendorID0x756e6b6eDisplayProductID0x20000IODisplayParametersbrightnessmax0x73min0x3avalue0x7fcommitreg0x0IODisplayGUID0x610000000000000Power Management protected data{ theNumberOfPowerStates = 4, version 1, power state 0 = { capabilityFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 1 = { capabilityFlags 00000000, outputPowerCharacter 00000000, inputPowerRequirement 00000000, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 2 = { capabilityFlags 00008000, outputPowerCharacter 00000000, inputPowerRequirement 00000002, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, power state 3 = { capabilityFlags 0000c000, outputPowerCharacter 00000000, inputPowerRequirement 00000002, staticPower 0, unbudgetedPower 0, powerToAttain 0, timeToAttain 0, settleUpTime 0, timeToLower 0, settleDownTime 0, powerDomainBudget 0 }, aggressiveness = 0, myCurrentState = 0, parentsCurrentPowerFlags = 00000002, maxCapability = 3 }Power Management private data{ this object = 0114c800, interested driver = 0114c800, driverDesire = 0, deviceDesire = 0, ourDesiredPowerState = 0, previousReqest = 0 }"; struct mach_iokit_property darwin_ioframebuffer_properties_array[] = { { "IOFBDependentID", NULL }, { "IOFBDependentIndex", NULL }, { "graphic-options", "0x0"}, { "IOFBConfig", darwin_iofbconfig }, { "IOFBMemorySize", "0x1000000"}, { NULL, 0} }; struct mach_iokit_devclass darwin_ioframebuffer_devclass = { "IOProviderClass" "IOFramebuffer", darwin_ioframebuffer_properties, darwin_ioframebuffer_properties_array, darwin_ioframebuffer_connect_method_scalari_scalaro, NULL, "IOFramebuffer", }; int darwin_ioframebuffer_connect_method_scalari_scalaro(args) struct mach_trap_args *args; { mach_io_connect_method_scalari_scalaro_request_t *req = args->smsg; mach_io_connect_method_scalari_scalaro_reply_t *rep = args->rmsg; size_t *msglen = args->rsize; #ifdef DEBUG_DARWIN printf("darwin_ioframebuffer_connect_method_scalari_scalaro()\n"); #endif rep->rep_msgh.msgh_bits = MACH_MSGH_REPLY_LOCAL_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE); rep->rep_msgh.msgh_size = sizeof(*rep) - sizeof(rep->rep_trailer); rep->rep_msgh.msgh_local_port = req->req_msgh.msgh_local_port; rep->rep_msgh.msgh_id = req->req_msgh.msgh_id + 100; rep->rep_outcount = 1; rep->rep_out[0] = 1; rep->rep_out[rep->rep_outcount + 1] = 8; /* XXX Trailer */ /* * XXX this is ugly, but we don't really know what we are doing here. */ rep->rep_outcount = 1; rep->rep_out[0] = 1; if (req->req_in[0] == 0x00000003) { rep->rep_outcount = 0; } if (req->req_in[0] == 0x6d726466) { rep->rep_outcount = 1; rep->rep_out[0] = 0; } rep->rep_out[rep->rep_outcount + 1] = 8; /* XXX Trailer */ *msglen = sizeof(*rep) - ((4096 + rep->rep_outcount) * sizeof(int)); return 0; }