]> git.saurik.com Git - apple/bootx.git/commitdiff
BootX-75.tar.gz mac-os-x-10410x86 mac-os-x-10411x86 mac-os-x-1044x86 mac-os-x-1045x86 mac-os-x-1046x86 mac-os-x-1047x86 mac-os-x-1048x86 mac-os-x-1049x86 v75
authorApple <opensource@apple.com>
Sat, 10 Dec 2005 02:19:31 +0000 (02:19 +0000)
committerApple <opensource@apple.com>
Sat, 10 Dec 2005 02:19:31 +0000 (02:19 +0000)
APPLE_LICENSE [deleted file]
bootx.tproj/Makefile
bootx.tproj/PB.project
bootx.tproj/fs.subproj/net.c
bootx.tproj/fs.subproj/ufs.c
bootx.tproj/include.subproj/sl.h
bootx.tproj/sl.subproj/display.c
bootx.tproj/sl.subproj/drivers.c
bootx.tproj/sl.subproj/main.c
dpkg/control [deleted file]

diff --git a/APPLE_LICENSE b/APPLE_LICENSE
deleted file mode 100644 (file)
index a0a8416..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-APPLE PUBLIC SOURCE LICENSE
-Version 1.1 - April 19,1999
-
-Please read this License carefully before downloading this software.
-By downloading and using this software, you are agreeing to be bound
-by the terms of this License.  If you do not or cannot agree to the
-terms of this License, please do not download or use the software.
-
-1. General; Definitions.  This License applies to any program or other
-work which Apple Computer, Inc. ("Apple") publicly announces as
-subject to this Apple Public Source License and which contains a
-notice placed by Apple identifying such program or work as "Original
-Code" and stating that it is subject to the terms of this Apple Public
-Source License version 1.1 (or subsequent version thereof), as it may
-be revised from time to time by Apple ("License").  As used in this
-License:
-
-1.1 "Affected Original Code" means only those specific portions of
-Original Code that allegedly infringe upon any party's intellectual
-property rights or are otherwise the subject of a claim of
-infringement.
-
-1.2 "Applicable Patent Rights" mean: (a) in the case where Apple is
-the grantor of rights, (i) claims of patents that are now or hereafter
-acquired, owned by or assigned to Apple and (ii) that cover subject
-matter contained in the Original Code, but only to the extent
-necessary to use, reproduce and/or distribute the Original Code
-without infringement; and (b) in the case where You are the grantor of
-rights, (i) claims of patents that are now or hereafter acquired,
-owned by or assigned to You and (ii) that cover subject matter in Your
-Modifications, taken alone or in combination with Original Code.
-
-1.3 "Covered Code" means the Original Code, Modifications, the
-combination of Original Code and any Modifications, and/or any
-respective portions thereof.
-
-1.4 "Deploy" means to use, sublicense or distribute Covered Code other
-than for Your internal research and development (R&D), and includes
-without limitation, any and all internal use or distribution of
-Covered Code within Your business or organization except for R&D use,
-as well as direct or indirect sublicensing or distribution of Covered
-Code by You to any third party in any form or manner.
-
-1.5 "Larger Work" means a work which combines Covered Code or portions
-thereof with code not governed by the terms of this License.
-
-1.6 "Modifications" mean any addition to, deletion from, and/or change
-to, the substance and/or structure of Covered Code.  When code is
-released as a series of files, a Modification is: (a) any addition to
-or deletion from the contents of a file containing Covered Code;
-and/or (b) any new file or other representation of computer program
-statements that contains any part of Covered Code.
-
-1.7 "Original Code" means (a) the Source Code of a program or other
-work as originally made available by Apple under this License,
-including the Source Code of any updates or upgrades to such programs
-or works made available by Apple under this License, and that has been
-expressly identified by Apple as such in the header file(s) of such
-work; and (b) the object code compiled from such Source Code and
-originally made available by Apple under this License.
-
-1.8 "Source Code" means the human readable form of a program or other
-work that is suitable for making modifications to it, including all
-modules it contains, plus any associated interface definition files,
-scripts used to control compilation and installation of an executable
-(object code).
-
-1.9 "You" or "Your" means an individual or a legal entity exercising
-rights under this License.  For legal entities, "You" or "Your"
-includes any entity which controls, is controlled by, or is under
-common control with, You, where "control" means (a) the power, direct
-or indirect, to cause the direction or management of such entity,
-whether by contract or otherwise, or (b) ownership of fifty percent
-(50%) or more of the outstanding shares or beneficial ownership of
-such entity.
-
-2. Permitted Uses; Conditions & Restrictions.  Subject to the terms
-and conditions of this License, Apple hereby grants You, effective on
-the date You accept this License and download the Original Code, a
-world-wide, royalty-free, non- exclusive license, to the extent of
-Apple's Applicable Patent Rights and copyrights covering the Original
-Code, to do the following:
-
-2.1 You may use, copy, modify and distribute Original Code, with or
-without Modifications, solely for Your internal research and
-development, provided that You must in each instance:
-
-(a) retain and reproduce in all copies of Original Code the copyright
-and other proprietary notices and disclaimers of Apple as they appear
-in the Original Code, and keep intact all notices in the Original Code
-that refer to this License;
-
-(b) include a copy of this License with every copy of Source Code of
-Covered Code and documentation You distribute, and You may not offer
-or impose any terms on such Source Code that alter or restrict this
-License or the recipients' rights hereunder, except as permitted under
-Section 6; and
-
-(c) completely and accurately document all Modifications that you have
-made and the date of each such Modification, designate the version of
-the Original Code you used, prominently include a file carrying such
-information with the Modifications, and duplicate the notice in
-Exhibit A in each file of the Source Code of all such Modifications.
-
-2.2 You may Deploy Covered Code, provided that You must in each
-  instance:
-
-(a) satisfy all the conditions of Section 2.1 with respect to the
-Source Code of the Covered Code;
-
-(b) make all Your Deployed Modifications publicly available in Source
-Code form via electronic distribution (e.g. download from a web site)
-under the terms of this License and subject to the license grants set
-forth in Section 3 below, and any additional terms You may choose to
-offer under Section 6.  You must continue to make the Source Code of
-Your Deployed Modifications available for as long as you Deploy the
-Covered Code or twelve (12) months from the date of initial
-Deployment, whichever is longer;
-
-(c) if You Deploy Covered Code containing Modifications made by You,
-inform others of how to obtain those Modifications by filling out and
-submitting the information found at
-http://www.apple.com/publicsource/modifications.html, if available;
-and
-
-(d) if You Deploy Covered Code in object code, executable form only,
-include a prominent notice, in the code itself as well as in related
-documentation, stating that Source Code of the Covered Code is
-available under the terms of this License with information on how and
-where to obtain such Source Code.
-
-3. Your Grants.  In consideration of, and as a condition to, the
-licenses granted to You under this License:
-
-(a) You hereby grant to Apple and all third parties a non-exclusive,
-royalty-free license, under Your Applicable Patent Rights and other
-intellectual property rights owned or controlled by You, to use,
-reproduce, modify, distribute and Deploy Your Modifications of the
-same scope and extent as Apple's licenses under Sections 2.1 and 2.2;
-and
-
-(b) You hereby grant to Apple and its subsidiaries a non-exclusive,
-worldwide, royalty-free, perpetual and irrevocable license, under Your
-Applicable Patent Rights and other intellectual property rights owned
-or controlled by You, to use, reproduce, execute, compile, display,
-perform, modify or have modified (for Apple and/or its subsidiaries),
-sublicense and distribute Your Modifications, in any form, through
-multiple tiers of distribution.
-
-4. Larger Works.  You may create a Larger Work by combining Covered
-Code with other code not governed by the terms of this License and
-distribute the Larger Work as a single product.  In each such
-instance, You must make sure the requirements of this License are
-fulfilled for the Covered Code or any portion thereof.
-
-5. Limitations on Patent License.  Except as expressly stated in
-Section 2, no other patent rights, express or implied, are granted by
-Apple herein.  Modifications and/or Larger Works may require
-additional patent licenses from Apple which Apple may grant in its
-sole discretion.
-
-6. Additional Terms.  You may choose to offer, and to charge a fee
-for, warranty, support, indemnity or liability obligations and/or
-other rights consistent with the scope of the license granted herein
-("Additional Terms") to one or more recipients of Covered
-Code. However, You may do so only on Your own behalf and as Your sole
-responsibility, and not on behalf of Apple. You must obtain the
-recipient's agreement that any such Additional Terms are offered by
-You alone, and You hereby agree to indemnify, defend and hold Apple
-harmless for any liability incurred by or claims asserted against
-Apple by reason of any such Additional Terms.
-
-7. Versions of the License.  Apple may publish revised and/or new
-versions of this License from time to time.  Each version will be
-given a distinguishing version number.  Once Original Code has been
-published under a particular version of this License, You may continue
-to use it under the terms of that version. You may also choose to use
-such Original Code under the terms of any subsequent version of this
-License published by Apple.  No one other than Apple has the right to
-modify the terms applicable to Covered Code created under this
-License.
-
-8. NO WARRANTY OR SUPPORT.  The Original Code may contain in whole or
-in part pre-release, untested, or not fully tested works.  The
-Original Code may contain errors that could cause failures or loss of
-data, and may be incomplete or contain inaccuracies.  You expressly
-acknowledge and agree that use of the Original Code, or any portion
-thereof, is at Your sole and entire risk.  THE ORIGINAL CODE IS
-PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF ANY KIND
-AND APPLE AND APPLE'S LICENSOR(S) (FOR THE PURPOSES OF SECTIONS 8 AND
-9, APPLE AND APPLE'S LICENSOR(S) ARE COLLECTIVELY REFERRED TO AS
-"APPLE") EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-AND/OR CONDITIONS OF MERCHANTABILITY OR SATISFACTORY QUALITY AND
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
-RIGHTS.  APPLE DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE
-ORIGINAL CODE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF
-THE ORIGINAL CODE WILL BE UNINTERRUPTED OR ERROR- FREE, OR THAT
-DEFECTS IN THE ORIGINAL CODE WILL BE CORRECTED.  NO ORAL OR WRITTEN
-INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED
-REPRESENTATIVE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE
-SCOPE OF THIS WARRANTY.  You acknowledge that the Original Code is not
-intended for use in the operation of nuclear facilities, aircraft
-navigation, communication systems, or air traffic control machines in
-which case the failure of the Original Code could lead to death,
-personal injury, or severe physical or environmental damage.
-
-9. Liability.
-
-9.1 Infringement.  If any portion of, or functionality implemented by,
-the Original Code becomes the subject of a claim of infringement,
-Apple may, at its option: (a) attempt to procure the rights necessary
-for Apple and You to continue using the Affected Original Code; (b)
-modify the Affected Original Code so that it is no longer infringing;
-or (c) suspend Your rights to use, reproduce, modify, sublicense and
-distribute the Affected Original Code until a final determination of
-the claim is made by a court or governmental administrative agency of
-competent jurisdiction and Apple lifts the suspension as set forth
-below.  Such suspension of rights will be effective immediately upon
-Apple's posting of a notice to such effect on the Apple web site that
-is used for implementation of this License.  Upon such final
-determination being made, if Apple is legally able, without the
-payment of a fee or royalty, to resume use, reproduction,
-modification, sublicensing and distribution of the Affected Original
-Code, Apple will lift the suspension of rights to the Affected
-Original Code by posting a notice to such effect on the Apple web site
-that is used for implementation of this License.  If Apple suspends
-Your rights to Affected Original Code, nothing in this License shall
-be construed to restrict You, at Your option and subject to applicable
-law, from replacing the Affected Original Code with non-infringing
-code or independently negotiating for necessary rights from such third
-party.
-
-9.2 LIMITATION OF LIABILITY.  UNDER NO CIRCUMSTANCES SHALL APPLE BE
-LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE OR INABILITY TO
-USE THE ORIGINAL CODE, OR ANY PORTION THEREOF, WHETHER UNDER A THEORY
-OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY
-OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF
-ANY REMEDY.  In no event shall Apple's total liability to You for all
-damages under this License exceed the amount of fifty dollars
-($50.00).
-
-10. Trademarks.  This License does not grant any rights to use the
-trademarks or trade names "Apple", "Apple Computer", "Mac OS X", "Mac
-OS X Server" or any other trademarks or trade names belonging to Apple
-(collectively "Apple Marks") and no Apple Marks may be used to endorse
-or promote products derived from the Original Code other than as
-permitted by and in strict compliance at all times with Apple's third
-party trademark usage guidelines which are posted at
-http://www.apple.com/legal/guidelinesfor3rdparties.html.
-
-11. Ownership.  Apple retains all rights, title and interest in and to
-the Original Code and any Modifications made by or on behalf of Apple
-("Apple Modifications"), and such Apple Modifications will not be
-automatically subject to this License.  Apple may, at its sole
-discretion, choose to license such Apple Modifications under this
-License, or on different terms from those contained in this License or
-may choose not to license them at all.  Apple's development, use,
-reproduction, modification, sublicensing and distribution of Covered
-Code will not be subject to this License.
-
-12. Termination.
-
-12.1 Termination.  This License and the rights granted hereunder will
-   terminate:
-
-(a) automatically without notice from Apple if You fail to comply with
-any term(s) of this License and fail to cure such breach within 30
-days of becoming aware of such breach; (b) immediately in the event of
-the circumstances described in Section 13.5(b); or (c) automatically
-without notice from Apple if You, at any time during the term of this
-License, commence an action for patent infringement against Apple.
-
-12.2 Effect of Termination.  Upon termination, You agree to
-immediately stop any further use, reproduction, modification,
-sublicensing and distribution of the Covered Code and to destroy all
-copies of the Covered Code that are in your possession or control.
-All sublicenses to the Covered Code which have been properly granted
-prior to termination shall survive any termination of this License.
-Provisions which, by their nature, should remain in effect beyond the
-termination of this License shall survive, including but not limited
-to Sections 3, 5, 8, 9, 10, 11, 12.2 and 13.  Neither party will be
-liable to the other for compensation, indemnity or damages of any sort
-solely as a result of terminating this License in accordance with its
-terms, and termination of this License will be without prejudice to
-any other right or remedy of either party.
-
-13.  Miscellaneous.
-
-13.1 Government End Users.  The Covered Code is a "commercial item" as
-defined in FAR 2.101.  Government software and technical data rights
-in the Covered Code include only those rights customarily provided to
-the public as defined in this License. This customary commercial
-license in technical data and software is provided in accordance with
-FAR 12.211 (Technical Data) and 12.212 (Computer Software) and, for
-Department of Defense purchases, DFAR 252.227-7015 (Technical Data --
-Commercial Items) and 227.7202-3 (Rights in Commercial Computer
-Software or Computer Software Documentation).  Accordingly, all U.S.
-Government End Users acquire Covered Code with only those rights set
-forth herein.
-
-13.2 Relationship of Parties.  This License will not be construed as
-creating an agency, partnership, joint venture or any other form of
-legal association between You and Apple, and You will not represent to
-the contrary, whether expressly, by implication, appearance or
-otherwise.
-
-13.3 Independent Development.  Nothing in this License will impair
-Apple's right to acquire, license, develop, have others develop for
-it, market and/or distribute technology or products that perform the
-same or similar functions as, or otherwise compete with,
-Modifications, Larger Works, technology or products that You may
-develop, produce, market or distribute.
-
-13.4 Waiver; Construction.  Failure by Apple to enforce any provision
-of this License will not be deemed a waiver of future enforcement of
-that or any other provision.  Any law or regulation which provides
-that the language of a contract shall be construed against the drafter
-will not apply to this License.
-
-13.5 Severability.  (a) If for any reason a court of competent
-jurisdiction finds any provision of this License, or portion thereof,
-to be unenforceable, that provision of the License will be enforced to
-the maximum extent permissible so as to effect the economic benefits
-and intent of the parties, and the remainder of this License will
-continue in full force and effect.  (b) Notwithstanding the foregoing,
-if applicable law prohibits or restricts You from fully and/or
-specifically complying with Sections 2 and/or 3 or prevents the
-enforceability of either of those Sections, this License will
-immediately terminate and You must immediately discontinue any use of
-the Covered Code and destroy all copies of it that are in your
-possession or control.
-
-13.6 Dispute Resolution.  Any litigation or other dispute resolution
-between You and Apple relating to this License shall take place in the
-Northern District of California, and You and Apple hereby consent to
-the personal jurisdiction of, and venue in, the state and federal
-courts within that District with respect to this License. The
-application of the United Nations Convention on Contracts for the
-International Sale of Goods is expressly excluded.
-
-13.7 Entire Agreement; Governing Law.  This License constitutes the
-entire agreement between the parties with respect to the subject
-matter hereof.  This License shall be governed by the laws of the
-United States and the State of California, except that body of
-California law concerning conflicts of law.
-
-Where You are located in the province of Quebec, Canada, the following
-clause applies: The parties hereby confirm that they have requested
-that this License and all related documents be drafted in English. Les
-parties ont exige que le present contrat et tous les documents
-connexes soient rediges en anglais.
-
-EXHIBIT A.
-
-"Portions Copyright (c) 1999-2000 Apple Computer, Inc.  All Rights
-Reserved.  This file contains Original Code and/or Modifications of
-Original Code as defined in and that are subject to the Apple Public
-Source License Version 1.1 (the "License").  You may not use this file
-except in compliance with the License.  Please obtain a copy of the
-License at http://www.apple.com/publicsource and read it before using
-this file.
-
-The Original Code and all software distributed under the License are
-distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
-EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
-INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
-License for the specific language governing rights and limitations
-under the License."
index edefa8339da4329323482d0be0c7b0384a06a2a9..b214f14e43d9ef99a81186bda3efd06e89b2183f 100644 (file)
@@ -31,7 +31,7 @@ PROF_LIBS = $(LIBS)
 
 HEADER_PATHS = -I$(SRCROOT)/bootx.tproj/include.subproj
 NEXTSTEP_PB_CFLAGS = -static -msoft-float
-NEXTSTEP_PB_LDFLAGS = -nostdlib -e _StartTVector -seg1addr 05600000
+NEXTSTEP_PB_LDFLAGS = -nostdlib -e _StartTVector -seg1addr 06600000
 
 
 NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
index 68d28a5dd2f1ca60cce50adb266c676567775358..c3989e6cc2249d71b37ab11df30494acab9eb77f 100644 (file)
@@ -21,7 +21,7 @@
     NEXTSTEP_COMPILEROPTIONS = "-static"; 
     NEXTSTEP_INSTALLDIR = /bin; 
     NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
-    NEXTSTEP_LINKEROPTIONS = "-nostdlib -e _StartTVector -seg1addr 05600000"; 
+    NEXTSTEP_LINKEROPTIONS = "-nostdlib -e _StartTVector -seg1addr 06600000"; 
     NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
     PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
     PDO_UNIX_INSTALLDIR = /bin; 
index 5ef461b06d7be0732a29a2551019103b7802a69f..44882bcafd0c0538d411bdd748d15c6dfeef38b5 100644 (file)
@@ -22,7 +22,7 @@
 /*
  *  net.c - File System Module for wrapping TFTP.
  *
- *  Copyright (c) 1999-2002 Apple Computer, Inc.
+ *  Copyright (c) 1999-2002, 2005 Apple Computer, Inc.
  *
  *  DRI: Josh de Cesare
  */
@@ -82,6 +82,11 @@ long NetLoadFile(CICell ih, char *filePath)
   
   Close(netIH);
   
+  if (length > kLoadSize) {
+    printf("\nLoadFile failure: %ld bytes overran the load buffer (%ld bytes)\n", length, kLoadSize);
+    return -1;
+  }
+
   return length;
 }
 
index ae86f763b55fe0117b73b7032cc80c82d8658da6..f6aa107ddad24c8f220fb381c8f7effad8642134 100644 (file)
@@ -31,6 +31,8 @@
 
 #include "ufs_byteorder.h"
 
+#include <dirent.h>            // for MAXNAMLEN
+
 typedef struct dinode Inode, *InodePtr;
 
 // Private function prototypes
index 9667a418af590bd5e3b8b8bc935cdc45a5b861eb..9c6f9711799cb383cd1668e303d5140c6c912ead 100644 (file)
@@ -22,7 +22,7 @@
 /*
  *  sl.h - Headers for configuring the Secondary Loader
  *
- *  Copyright (c) 1998-2003 Apple Computer, Inc.
+ *  Copyright (c) 1998-2005 Apple Computer, Inc.
  *
  *  DRI: Josh de Cesare
  */
 
 /*
 
-Memory Map:  assumes 96 MB
+Memory Map:  assumed 96 MB (temporarily bumping to 112 MB for 4359362)
 
 Physical Address
 
 Open Firmware Version    3x, 4x, ...
 00000000 - 00003FFF  :   Exception Vectors
 00004000 - 057FFFFF  :   Free Memory
-05800000 - 05FFFFFF  :   OF Image
+// 05800000 - 05FFFFFF  :   OF Image (top 8 MB reserved) [96 MB map]
+06800000 - 06FFFFFF  :   OF Image (top 8 MB reserved) [112 MB map]
 
 
 Logical Address
 
+// 96 MB map (currently unused - 4363357 tracks re-adoption)
 00000000 - 00003FFF  : Exception Vectors
-00004000 - 03FFFFFF  : Kernel Image, Boot Struct and Drivers
-04000000 - 04FFFFFF  : File Load Area
-05000000 - 053FFFFF  : FS Cache
-05400000 - 055FFFFF  : Malloc Zone
-05600000 - 057FFFFF  : BootX Image
-05800000 - 05FFFFFF  : Unused
-
+00004000 - 03FFFFFF  : Kernel Image, Boot Struct and Drivers (~64 MB)
+04000000 - 04FFFFFF  : File Load Area (16 MB)  [80 MB]
+05000000 - 053FFFFF  : FS Cache    (4 MB)      [84 MB]
+05400000 - 055FFFFF  : Malloc Zone (2 MB)      [86 MB]
+05600000 - 057FFFFF  : BootX Image (2 MB)      [88 MB]
+05800000 - 05FFFFFF  : Unused/OF   (8 MB)      [96 MB]
+
+// 112 MB map (per 4359362)
+00000000 - 00003FFF  : Exception Vectors
+00004000 - 03FFFFFF  : Kernel Image, Boot Struct and Drivers (~64 MB)
+04000000 - 05FFFFFF  : File Load Area (32 MB)  [96 MB]
+06000000 - 063FFFFF  : FS Cache    (4 MB)      [100 MB]
+06400000 - 065FFFFF  : Malloc Zone (2 MB)      [102 MB]
+06600000 - 067FFFFF  : BootX Image (2 MB)      [104 MB]
+06800000 - 06FFFFFF  : Unused/OF   (8 MB)      [112 MB]
 */
 
 #define kVectorAddr     (0x00000000)
@@ -74,17 +84,18 @@ Logical Address
 #define kImageSize2     (0x03B00000)
 
 #define kLoadAddr       (0x04000000)
-#define kLoadSize       (0x01000000)
+#define kLoadSize       (0x02000000)   // 32 MB @ 64
+#define kMaxMKextSize   (0x01000000)   // only allow 16 MB of drivers
 
-#define kFSCacheAddr    (0x05000000)
-#define kFSCacheSize    (0x00400000)
+#define kFSCacheAddr    (0x06000000)
+#define kFSCacheSize    (0x00400000)   // 4 MB @ 96
 
-#define kMallocAddr     (0x05400000)
-#define kMallocSize     (0x00200000)
+#define kMallocAddr     (0x06400000)
+#define kMallocSize     (0x00200000)   // 2 MB @ 100
 
-#define kMallocAddr_H   (0x05400000)
+#define kMallocAddr_H   (0x06400000)   // ditto for hibernate
 #define kMallocSize_H   (0x00200000)
-#define kImageAddr_H    (0x06000000)
+#define kImageAddr_H    (0x07000000)   // fallback for hiberate image buffer
 
 // Default Output Level
 #define kOutputLevelOff  (0)
index 700e870496b5bb2a71fca2e21a7d2f4aea94b39a..3d48faee9dc31075785499245bf10cba1e7494eb 100644 (file)
@@ -28,6 +28,7 @@
  */
 
 #include <sl.h>
+#include <IOKit/IOHibernatePrivate.h>
 
 #include "clut.h"
 #include "appleboot.h"
@@ -193,6 +194,140 @@ long DrawSplashScreen(long stage)
   return 0;
 }
 
+DECLARE_IOHIBERNATEPROGRESSALPHA
+
+void SplashPreview(void *src, uint8_t * saveunder, uint32_t savelen)
+{
+  DisplayInfoPtr display;
+  uint8_t *  screen;
+  uint32_t   rowBytes, pixelShift;
+  uint32_t   x, y;
+  int32_t    blob;
+  uint32_t   alpha, in, color, result;
+  uint8_t *  out;
+  uint32_t   saveindex[kIOHibernateProgressCount] = { 0 };
+  
+  if (InitDisplays(0) != 0)  return;
+  if (gMainDisplayNum == -1) return;
+
+  display = &gDisplays[gMainDisplayNum];
+  screen = (uint8_t *) display->address;
+  rowBytes = display->linebytes;
+  if (!src || !DecompressData(src, (void *) screen, 
+                    display->width, display->height,
+                    display->depth >> 3, rowBytes))
+  {
+    // Set the screen to 75% grey.
+    CallMethod(5, 0, display->screenIH, "fill-rectangle",
+            LookUpCLUTIndex(0x01, display->depth),
+            0, 0, display->width, display->height);
+    DrawSplashScreen(0);
+  }
+
+  pixelShift = display->depth >> 4;
+  if (pixelShift < 1) return;
+
+  screen += ((display->width 
+          - kIOHibernateProgressCount * (kIOHibernateProgressWidth + kIOHibernateProgressSpacing)) << (pixelShift - 1))
+              + (display->height - kIOHibernateProgressOriginY - kIOHibernateProgressHeight) * rowBytes;
+  
+  for (y = 0; y < kIOHibernateProgressHeight; y++)
+  {
+    out = screen + y * rowBytes;
+    for (blob = 0; blob < kIOHibernateProgressCount; blob++)
+    {
+      color = blob ? kIOHibernateProgressDarkGray : kIOHibernateProgressMidGray;
+      for (x = 0; x < kIOHibernateProgressWidth; x++)
+      {
+        alpha  = gIOHibernateProgressAlpha[y][x];
+        result = color;
+        if (alpha)
+        {
+          if (0xff != alpha)
+          {
+            if (1 == pixelShift)
+            {
+              in = *((uint16_t *)out) & 0x1f;  // 16
+              in = (in << 3) | (in >> 2);
+            }
+            else
+                in = *((uint32_t *)out) & 0xff;        // 32
+            saveunder[blob * kIOHibernateProgressSaveUnderSize + saveindex[blob]++] = in;
+            result = ((255 - alpha) * in + alpha * result + 0xff) >> 8;
+          }
+          if (1 == pixelShift)
+          {
+            result >>= 3;
+            *((uint16_t *)out) = (result << 10) | (result << 5) | result;      // 16
+          }
+          else
+            *((uint32_t *)out) = (result << 16) | (result << 8) | result;      // 32
+        }
+        out += (1 << pixelShift);
+      }
+      out += (kIOHibernateProgressSpacing << pixelShift);
+    }
+  }
+}
+
+void SplashProgress(uint8_t * saveunder, int32_t firstBlob, int32_t select)
+{
+  DisplayInfoPtr display;
+  uint8_t * screen;
+  uint32_t  rowBytes, pixelShift;
+  uint32_t  x, y;
+  int32_t   blob, lastBlob;
+  uint32_t  alpha, in, color, result;
+  uint8_t * out;
+  uint32_t  saveindex[kIOHibernateProgressCount] = { 0 };
+
+  if (gMainDisplayNum == -1) return;
+
+  display = &gDisplays[gMainDisplayNum];
+  pixelShift = display->depth >> 4;
+  if (pixelShift < 1) return;
+  screen = (uint8_t *) display->address;
+  rowBytes = display->linebytes;
+
+  screen += ((display->width 
+          - kIOHibernateProgressCount * (kIOHibernateProgressWidth + kIOHibernateProgressSpacing)) << (pixelShift - 1))
+              + (display->height - kIOHibernateProgressOriginY - kIOHibernateProgressHeight) * rowBytes;
+
+  lastBlob  = (select < kIOHibernateProgressCount) ? select : (kIOHibernateProgressCount - 1);
+
+  screen += (firstBlob * (kIOHibernateProgressWidth + kIOHibernateProgressSpacing)) << pixelShift;
+
+  for (y = 0; y < kIOHibernateProgressHeight; y++)
+  {
+    out = screen + y * rowBytes;
+    for (blob = firstBlob; blob <= lastBlob; blob++)
+    {
+      color = (blob < select) ? kIOHibernateProgressLightGray : kIOHibernateProgressMidGray;
+      for (x = 0; x < kIOHibernateProgressWidth; x++)
+      {
+        alpha  = gIOHibernateProgressAlpha[y][x];
+        result = color;
+        if (alpha)
+        {
+          if (0xff != alpha)
+          {
+            in = saveunder[blob * kIOHibernateProgressSaveUnderSize + saveindex[blob]++];
+            result = ((255 - alpha) * in + alpha * result + 0xff) / 255;
+          }
+          if (1 == pixelShift)
+          {
+            result >>= 3;
+            *((uint16_t *)out) = (result << 10) | (result << 5) | result;      // 16
+          }
+          else
+            *((uint32_t *)out) = (result << 16) | (result << 8) | result;      // 32
+        }
+        out += (1 << pixelShift);
+      }
+      out += (kIOHibernateProgressSpacing << pixelShift);
+    }
+  }
+}
 
 long DrawFailedBootPicture(void)
 {
index 99d3430da15a797a497f32461c2295b238c65e84..d0c324d1e439e71086b5408fed2184af11aeb55a 100644 (file)
@@ -22,7 +22,7 @@
 /*
  *  drivers.c - Driver Loading Functions.
  *
- *  Copyright (c) 2000 Apple Computer, Inc.
+ *  Copyright (c) 2000-2005 Apple Computer, Inc.
  *
  *  DRI: Josh de Cesare
  */
@@ -98,9 +98,9 @@ static char      gFileName[4096];
 long LoadDrivers(char *dirSpec)
 {
   if (gBootFileType == kNetworkDeviceType) {
-    NetLoadDrivers(dirSpec);
+    if(NetLoadDrivers(dirSpec) < 0) return -1;
   } else if (gBootFileType == kBlockDeviceType) {
-    FileLoadDrivers(dirSpec, 0);
+    FileLoadDrivers(dirSpec, 0);       // never returns errors
   } else {
     return 0;
   }
@@ -116,6 +116,7 @@ long LoadDrivers(char *dirSpec)
 
 // Private Functions
 
+// XX FileLoadDrivers could use some more error checking
 static long FileLoadDrivers(char *dirSpec, long plugin)
 {
   long ret, length, index, flags, time, time2, bundleType;
@@ -220,7 +221,10 @@ static long LoadDriverMKext(char *fileSpec)
   // Verify the MKext.
   if ((package->signature1 != kDriverPackageSignature1) ||
       (package->signature2 != kDriverPackageSignature2)) return -1;
-  if (package->length > kLoadSize) return -1;
+  if (package->length > kMaxMKextSize) {
+    printf("mkext segment too big (%ld bytes)\n", package->length);
+    return -1;
+  }
   if (package->adler32 != Adler32((char *)&package->version,
                                  package->length - 0x10)) return -1;
   
index fac6f82d1332a5d074b6f5ec00c95137ed026e6d..a5362f25c0f71e139bf630060799dc5688fde162 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <sl.h>
 #include "aes.h"
+#include <IOKit/IOHibernatePrivate.h>
 
 static void Start(void *unused1, void *unused2, ClientInterfacePtr ciPtr);
 static void Main(ClientInterfacePtr ciPtr);
@@ -80,6 +81,8 @@ long *gDeviceTreeMMTmp = 0;
 long gOFVersion = 0;
 
 char *gKeyMap;
+char gHibernateBoot;
+unsigned long gHibernateKeySizeBytes;
 
 long gRootAddrCells;
 long gRootSizeCells;
@@ -117,7 +120,316 @@ static void Start(void *unused1, void *unused2, ClientInterfacePtr ciPtr)
   Main(ciPtr);
 }
 
+static long WakeKernel(void *p1, void *p2, void *p3, void *p4)
+{
+  IOHibernateImageHeader * header = (IOHibernateImageHeader *) p1;
+  unsigned long msr;
+  typedef void (*Proc)(void *, void *, void *, void *);
+  Proc proc;
+  unsigned long cnt, newSP;
+  unsigned long *src, *dst;
+  unsigned int         count;
+  unsigned int         page;
+  unsigned int         compressedSize;
+  unsigned int         uncompressedPages;
+  int32_t      byteCnt;
+  u_int32_t    lowHalf, highHalf;
+  u_int32_t    sum;
+
+  Quiesce();
+  printf("\nWake Kernel!\n");
+
+  // Save SPRs for OF
+  __asm__ volatile("mfmsr %0" : "=r" (gOFMSRSave));
+  __asm__ volatile("mfsprg %0, 0" : "=r" (gOFSPRG0Save));
+  __asm__ volatile("mfsprg %0, 1" : "=r" (gOFSPRG1Save));
+  __asm__ volatile("mfsprg %0, 2" : "=r" (gOFSPRG2Save));
+  __asm__ volatile("mfsprg %0, 3" : "=r" (gOFSPRG3Save));
+  
+  // Turn off translations
+  msr = 0x00001000;
+  __asm__ volatile("sync");
+  __asm__ volatile("mtmsr %0" : : "r" (msr));
+  __asm__ volatile("isync");
+  
+  // Save OF's Exceptions Vectors
+  bcopy(0x0, gOFVectorSave, kVectorSize);
+
+  dst   = (unsigned long *) (header->restore1CodePage << 12);
+  count = header->restore1PageCount;
+  proc  = (Proc) (header->restore1CodeOffset + ((uint32_t) dst));
+  newSP = header->restore1StackOffset + (header->restore1CodePage << 12);
+
+  src  = (unsigned long *) (((u_int32_t) &header->fileExtentMap[0]) 
+        + header->fileExtentMapSize);
+  sum  = 0;
+   
+  for (page = 0; page < count; page++)
+  {
+    compressedSize = 4096;
+
+    lowHalf = 1;
+    highHalf = 0;
+
+    for (cnt = 0; cnt < compressedSize; cnt += 0x20) {
+      dst[0] = src[0];
+      dst[1] = src[1];
+      dst[2] = src[2];
+      dst[3] = src[3];
+      dst[4] = src[4];
+      dst[5] = src[5];
+      dst[6] = src[6];
+      dst[7] = src[7];
+      for (byteCnt = 0; byteCnt < 0x20; byteCnt++) {
+        lowHalf += ((u_int8_t *) dst)[byteCnt];
+        highHalf += lowHalf;
+      }
+      __asm__ volatile("dcbf 0, %0" : : "r" (dst));
+      __asm__ volatile("sync");
+      __asm__ volatile("icbi 0, %0" : : "r" (dst));
+      __asm__ volatile("isync");
+      __asm__ volatile("sync");
+      src += 8;
+      dst += 8;
+    }
+
+    lowHalf  %= 65521L;
+    highHalf %= 65521L;
+    sum += (highHalf << 16) | lowHalf;
+  }
+  uncompressedPages = count;
+  header->actualRestore1Sum = sum;
+
+  __asm__ volatile("dcbf 0, %0" : : "r" (dst));
+  __asm__ volatile("dcbf 0, %0" : : "r" (dst+32));
+  __asm__ volatile("sync");
+  __asm__ volatile("icbi 0, %0" : : "r" (dst));
+  __asm__ volatile("icbi 0, %0" : : "r" (dst+32));
+  __asm__ volatile("isync");
+  __asm__ volatile("sync");
+
+  // Make sure everything get sync'd up.
+  __asm__ volatile("isync");
+  __asm__ volatile("sync");
+  __asm__ volatile("eieio");
+  
+  // Move the Stack 
+  __asm__ volatile("mr r1, %0" : : "r" (newSP));
+  __asm__ volatile("ori 0, 0, 0" : : );
+  proc(p1, p2, p3, p4);
+  
+  return -1;
+}
 
+void HibernateBoot(void)
+{
+  CICell dev, size, maxRead, imageSize, codeSize, allocSize, bytesToRead;
+  CICell memoryPH;
+  CICell available[2*16];
+  long mem_base;
+  IOHibernateImageHeader _header;
+  IOHibernateImageHeader * header = &_header;
+  volatile IOPolledFileExtent * currentExtent;
+  long long extentStart;
+  long long extentLength;
+  long long position, positionMax;
+  long buffer;
+  char c;
+  int havePreview, readingPreview;
+  char * tail;
+  Boot_Video videoInfo;
+  hibernate_graphics_t * graphicsInfo;
+  uint32_t machineSignature;
+  int32_t blob, lastBlob = 0;
+  // decryption data
+  static const unsigned char first_iv[AES_BLOCK_SIZE]
+  = {  0xa3, 0x63, 0x65, 0xa9, 0x0b, 0x71, 0x7b, 0x1c,
+       0xdf, 0x9e, 0x5f, 0x32, 0xd7, 0x61, 0x63, 0xda };
+  hibernate_cryptvars_t       _cryptvars;
+  hibernate_cryptvars_t *     cryptvars = &_cryptvars;
+  hibernate_cryptwakevars_t * cryptwakevars;
+  do {
+    tail = &gBootDevice[0];
+    while ((c = *++tail) && (c != ','))
+       {}
+    if (!c)
+       break;
+    
+    *tail++ = 0;
+    extentStart = strtouq(tail, 0, 16);
+    
+    printf("extentStart %s, %qx\n", gBootDevice, extentStart);
+    
+    dev = Open(gBootDevice);
+    Seek(dev, extentStart);
+
+    size = Read(dev, (CICell) header, sizeof(IOHibernateImageHeader));
+    printf("header read size %x\n", size);
+
+    imageSize = header->image1Size;
+    codeSize  = header->restore1PageCount << 12;
+    if (kIOHibernateHeaderSignature != header->signature)
+      break;
+
+    size = GetProp(gChosenPH, kIOHibernateMachineSignatureKey, 
+                    (char *)&machineSignature, sizeof(machineSignature));
+    if (size != sizeof(machineSignature)) machineSignature = 0;
+    if (machineSignature != header->machineSignature)
+      break;
+    
+    allocSize = imageSize + ((4095 + sizeof(hibernate_graphics_t) + sizeof(hibernate_cryptwakevars_t)) & ~4095);
+
+    // try to allocate the image as high as possible - end of available memory
+    memoryPH = FindDevice("/memory");
+    if (memoryPH == -1) break;
+    size = GetProp(memoryPH, "available", (char *) &available[0], sizeof(available));
+    if (size == 0) break;
+    size /= sizeof(CICell);
+    mem_base = available[size - 2] + available[size - 1] - allocSize;
+    
+    if (-1 == Claim(mem_base, allocSize, 0)) {
+      // else try above BootX's image
+      mem_base = kImageAddr_H;
+      if (-1 == Claim(mem_base, allocSize, 0)) {
+        // else try below BootX's image
+        mem_base = (header->restore1CodePage << 12) + codeSize;
+        if (-1 == Claim(mem_base, allocSize, 0))
+         break;
+      }
+    }
+    
+    printf("mem_base %x\n", mem_base);
+
+    graphicsInfo = (hibernate_graphics_t *) mem_base;
+    cryptwakevars = (hibernate_cryptwakevars_t *) (graphicsInfo + 1);
+    mem_base += (allocSize - imageSize);
+    
+    bcopy(header, (void *) mem_base, sizeof(IOHibernateImageHeader));
+    header = (IOHibernateImageHeader *) mem_base;
+
+    imageSize -= sizeof(IOHibernateImageHeader);
+    // imageSize -= codeSize;
+    currentExtent = &header->fileExtentMap[0];
+    extentLength = currentExtent->length - sizeof(IOHibernateImageHeader);
+    extentStart  = currentExtent->start  + sizeof(IOHibernateImageHeader);
+    buffer = (long)(header + 1);
+
+    position = 0;
+    maxRead  = 0;
+    bytesToRead = header->previewSize;
+    havePreview = readingPreview = (bytesToRead != 0);
+    if (readingPreview) {
+      bytesToRead += header->fileExtentMapSize - sizeof(header->fileExtentMap) + codeSize;
+      positionMax = header->imageSize - bytesToRead;
+      imageSize -= bytesToRead;
+    } else {
+      bytesToRead = imageSize;
+      positionMax = header->imageSize;
+      maxRead     = positionMax / kIOHibernateProgressCount;
+      SplashPreview(NULL, &graphicsInfo->progressSaveUnder[0][0], sizeof(graphicsInfo->progressSaveUnder));
+    }
+
+    while (bytesToRead) {
+
+      if (!extentLength) {
+        currentExtent++;
+        extentStart  = currentExtent->start;
+        extentLength = currentExtent->length;
+      }
+      if (extentLength < bytesToRead)
+        size = extentLength;
+      else
+        size = bytesToRead;
+
+      if (maxRead && (size > maxRead))
+        size = maxRead;
+
+      if (-1 == Seek(dev, extentStart)) {
+        printf("seek fail\n");
+        break;
+      }
+      if (size != Read(dev, buffer, size)) {
+        printf("read fail\n");
+        break;
+      }
+
+      bytesToRead -= size;
+
+      if (!bytesToRead && readingPreview) {
+        uint8_t * src = (uint8_t *) (
+            ((uint32_t) &header->fileExtentMap[0]) 
+            + header->fileExtentMapSize
+            + codeSize
+            + header->previewPageListSize);
+
+        SplashPreview(src, &graphicsInfo->progressSaveUnder[0][0], sizeof(graphicsInfo->progressSaveUnder));
+        readingPreview = 0;
+        bytesToRead = imageSize;
+        maxRead = positionMax / kIOHibernateProgressCount;
+      } else if (!readingPreview) {
+        // progress
+        position += size;
+        blob = (position * kIOHibernateProgressCount) / positionMax;
+        if (blob != lastBlob)
+        {
+          SplashProgress(&graphicsInfo->progressSaveUnder[0][0], lastBlob, blob);
+          lastBlob = blob;
+        }
+      }
+
+      if (bytesToRead) {
+        extentStart += size;
+        extentLength -= size;
+        buffer += size;
+      }
+    }
+    if (bytesToRead)
+      break;
+
+    if (header->encryptStart) {
+      aes_decrypt_key(&gExtensionsSpec[0],
+                      gHibernateKeySizeBytes,
+                      &cryptvars->ctx.decrypt);
+
+      // set the vector for the following decryptions
+      bcopy(((uint8_t *) header) + header->image1Size - AES_BLOCK_SIZE, 
+              &cryptvars->aes_iv[0], AES_BLOCK_SIZE);
+
+      // decrypt the buffer
+      uint32_t len = (uint32_t)(header->image1Size - header->encryptStart);
+      aes_decrypt_cbc(((uint8_t *) header) + header->encryptStart,
+                      &first_iv[0],
+                      len >> 4,
+                      ((uint8_t *) header) + header->encryptStart,
+                      &cryptvars->ctx.decrypt);
+    }
+
+    bcopy(&cryptvars->aes_iv[0], &cryptwakevars->aes_iv[0], sizeof(cryptwakevars->aes_iv));
+
+    bzero(&cryptvars->aes_iv[0], sizeof(cryptvars));
+    bzero(&gExtensionsSpec[0], sizeof(gExtensionsSpec));
+
+    Close(dev);
+
+    // Get the video info
+    GetMainScreenPH(&videoInfo, 0);
+    videoInfo.v_display = 1;
+    graphicsInfo->physicalAddress = videoInfo.v_baseAddr;
+    graphicsInfo->mode            = videoInfo.v_display;
+    graphicsInfo->rowBytes        = videoInfo.v_rowBytes;
+    graphicsInfo->width           = videoInfo.v_width;
+    graphicsInfo->height          = videoInfo.v_height;
+    graphicsInfo->depth           = videoInfo.v_depth;
+
+    WakeKernel(header, graphicsInfo, cryptwakevars, 0);
+    break;
+  }
+  while (0);
+
+  // failures reboot
+  Interpret(0, 0, " reset-all");
+}
 
 static void Main(ClientInterfacePtr ciPtr)
 {
@@ -129,6 +441,9 @@ static void Main(ClientInterfacePtr ciPtr)
   ret = InitEverything(ciPtr);
   if (ret != 0) Exit();
 
+  if (gHibernateBoot) {
+    HibernateBoot();
+  }
 
   // Get or infer the boot paths.
   ret = GetBootPaths();
@@ -337,7 +652,50 @@ static long InitEverything(ClientInterfacePtr ciPtr)
     gBootMode |= kBootModeSafe;
   }
 
+  size = GetProp(gOptionsPH, kIOHibernateBootImageKey, gBootDevice, 255);
+  if (size && (-1 != size)) do {
+    gBootDevice[size] = '\0';
+
+    // reuse gExtensionsSpec
+#define keyBufSize (sizeof(gExtensionsSpec) / 2)
+    size = GetProp(gOptionsPH, kIOHibernateBootImageKeyKey, 
+                        gExtensionsSpec + keyBufSize, keyBufSize);
+    if (size && (-1 != size))
+      gHibernateKeySizeBytes = UnescapeData(gExtensionsSpec + keyBufSize, size,
+                                            gExtensionsSpec, keyBufSize);
+
+    // always clear the boot-image variable
+#if kFailToBoot
+    Interpret(0, 0, " setenv " kIOHibernateBootImageKey);
+    Interpret(0, 0, " setenv " kIOHibernateBootImageKeyKey); // (will need to be done by OF)
+    Interpret(0, 0, " sync-nvram");
+#endif
+
+    // safe mode means no hibernate
+    if (kBootModeSafe & gBootMode) break;
+
+#if kFailToBoot
+    // check we booted from nvram-set device
+    size = GetProp(gChosenPH, "bootpath", gBootFile, 255);
+    if (!size || (-1 == size)) break;
+    gBootFile[size] = '\0';
+
+    if (FindDevice(gBootFile) != FindDevice(gBootDevice)) break;
+#endif
+
+    gHibernateBoot = 1;
+  } while (0);
+
+  if (gHibernateBoot)
   {
+    // Claim memory for malloc.
+    if (Claim(kMallocAddr_H, kMallocSize_H, 0) == 0) {
+      printf("Claim for malloc failed.\n");
+      return -1;
+    }
+    malloc_init((char *)kMallocAddr_H, kMallocSize_H);
+    gImageFirstBootXAddr = kMallocAddr_H + kMallocSize_H;
+  } else {
     // Claim memory for the FS Cache.
     if (Claim(kFSCacheAddr, kFSCacheSize, 0) == 0) {
       printf("Claim for fs cache failed.\n");
diff --git a/dpkg/control b/dpkg/control
deleted file mode 100644 (file)
index c3d9689..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Package: bootx
-Maintainer: Darwin Developers <darwin-development@public.lists.apple.com>
-Vendor: Apple Computer, Inc.
-Build-Depends: build-base
-Description: Darwin booter.