]>
git.saurik.com Git - apple/xnu.git/blob - bsd/dev/unix_startup.c
   2  * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   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. 
  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 
  20  * @APPLE_LICENSE_HEADER_END@ 
  23  * Copyright (c) 1992,7 NeXT Computer, Inc. 
  25  * Unix data structure initialization. 
  29 #include <mach/mach_types.h> 
  31 #include <vm/vm_kern.h> 
  32 #include <mach/vm_prot.h> 
  34 #include <sys/param.h> 
  35 #include <sys/buf_internal.h> 
  36 #include <sys/clist.h> 
  38 #include <sys/systm.h> 
  40 #include <dev/ppc/cons.h> 
  42 extern vm_map_t mb_map
; 
  44 extern u_long   tcp_sendspace
; 
  45 extern u_long   tcp_recvspace
; 
  47 void            bsd_bufferinit(void); 
  48 extern void     md_prepare_for_shutdown(int, int, char *); 
  51  * Declare these as initialized data so we can patch them. 
  56 int             niobuf 
= NBUF 
/ 2; 
  64 int             srv 
= 0;        /* Flag indicates a server boot when set */ 
  68 vm_map_t        bufferhdr_map
; 
  71 extern void     bsd_startupearly(void); 
  74 bsd_startupearly(void) 
  76         vm_offset_t     firstaddr
; 
  81                 nbuf 
= atop(sane_size 
/ 100);   /* Get 1% of ram, but no more than we can map */ 
  94         size 
= (nbuf 
+ niobuf
) * sizeof(struct buf
); 
  95         size 
= round_page(size
); 
  97         ret 
= kmem_suballoc(kernel_map
, 
 104         if (ret 
!= KERN_SUCCESS
) 
 105                 panic("Failed to create bufferhdr_map"); 
 107         ret 
= kernel_memory_allocate(bufferhdr_map
, 
 111                                      KMA_HERE 
| KMA_KOBJECT
); 
 113         if (ret 
!= KERN_SUCCESS
) 
 114                 panic("Failed to allocate bufferhdr_map"); 
 116         buf 
= (struct buf 
*) firstaddr
; 
 119         if (sane_size 
> (64 * 1024 * 1024) || ncl
) { 
 122                 if ((nmbclusters 
= ncl
) == 0) { 
 123                         if ((nmbclusters 
= ((sane_size 
/ 16)/MCLBYTES
)) > 32768) 
 126                 if ((scale 
= nmbclusters 
/ NMBCLUSTERS
) > 1) { 
 127                         tcp_sendspace 
*= scale
; 
 128                         tcp_recvspace 
*= scale
; 
 130                         if (tcp_sendspace 
> (32 * 1024)) 
 131                                 tcp_sendspace 
= 32 * 1024; 
 132                         if (tcp_recvspace 
> (32 * 1024)) 
 133                                 tcp_recvspace 
= 32 * 1024; 
 143         cons
.t_dev 
= makedev(12, 0); 
 147         ret 
= kmem_suballoc(kernel_map
, 
 148                             (vm_offset_t 
*) & mbutl
, 
 149                             (vm_size_t
) (nmbclusters 
* MCLBYTES
), 
 154         if (ret 
!= KERN_SUCCESS
) 
 155                 panic("Failed to allocate mb_map\n"); 
 158          * Set up buffers, so they can be used to read disk labels.