Home | History | Annotate | Line # | Download | only in lib
diskbuf.c revision 1.6.122.1
      1  1.6.122.1  jdolecek /*	$NetBSD: diskbuf.c,v 1.6.122.1 2017/12/03 11:36:19 jdolecek Exp $	*/
      2        1.1     perry 
      3        1.1     perry /*
      4        1.1     perry  * Copyright (c) 1996
      5        1.1     perry  *	Matthias Drochner.  All rights reserved.
      6        1.1     perry  *
      7        1.1     perry  * Redistribution and use in source and binary forms, with or without
      8        1.1     perry  * modification, are permitted provided that the following conditions
      9        1.1     perry  * are met:
     10        1.1     perry  * 1. Redistributions of source code must retain the above copyright
     11        1.1     perry  *    notice, this list of conditions and the following disclaimer.
     12        1.1     perry  * 2. Redistributions in binary form must reproduce the above copyright
     13        1.1     perry  *    notice, this list of conditions and the following disclaimer in the
     14        1.1     perry  *    documentation and/or other materials provided with the distribution.
     15        1.1     perry  *
     16        1.1     perry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17        1.1     perry  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     18        1.1     perry  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     19        1.1     perry  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     20        1.1     perry  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     21        1.1     perry  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     22        1.1     perry  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     23        1.1     perry  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24        1.1     perry  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     25        1.1     perry  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26        1.1     perry  *
     27        1.1     perry  */
     28        1.1     perry 
     29        1.1     perry /* data buffer for BIOS disk / DOS I/O  */
     30        1.1     perry 
     31  1.6.122.1  jdolecek #include <sys/inttypes.h>
     32  1.6.122.1  jdolecek 
     33        1.5  junyoung #include <lib/libsa/stand.h>
     34        1.1     perry #include "diskbuf.h"
     35        1.1     perry 
     36        1.2       dsl char *diskbufp;		/* allocated from heap */
     37        1.1     perry 
     38        1.2       dsl const void *diskbuf_user;
     39        1.2       dsl 
     40        1.2       dsl /*
     41        1.2       dsl  * Global shared "diskbuf" is used as read ahead buffer.
     42        1.2       dsl  * This MAY have to not cross a 64k boundary.
     43        1.2       dsl  * In practise it is allocated out of the heap early on...
     44        1.2       dsl  * NB a statically allocated diskbuf is not guaranteed to not
     45        1.2       dsl  * cross a 64k boundary.
     46        1.2       dsl  */
     47        1.2       dsl char *
     48        1.2       dsl alloc_diskbuf(const void *user)
     49        1.2       dsl {
     50        1.2       dsl 	diskbuf_user = user;
     51        1.2       dsl 	if (!diskbufp) {
     52        1.2       dsl 		diskbufp = alloc(DISKBUFSIZE);
     53  1.6.122.1  jdolecek #ifndef EFIBOOT
     54  1.6.122.1  jdolecek 		if (((uintptr_t)diskbufp & 0xffff) + DISKBUFSIZE > 0x10000) {
     55  1.6.122.1  jdolecek 			printf("diskbufp %" PRIxPTR "\n", (uintptr_t)diskbufp);
     56        1.2       dsl 			panic("diskbuf crosses 64k boundary");
     57        1.3      fvdl 		}
     58  1.6.122.1  jdolecek #endif
     59        1.2       dsl 	}
     60        1.2       dsl 	return diskbufp;
     61        1.2       dsl }
     62