]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/dev/ppc/mem.c
xnu-792.10.96.tar.gz
[apple/xnu.git] / bsd / dev / ppc / mem.c
index 4e7c8f8c3c0704f9ce7f989b524b2f19aa7de34f..54fe48e688d73f25d794cdf14cd4a2679bc7c65f 100644 (file)
@@ -87,6 +87,7 @@ static caddr_t devzerobuf;
 
 extern pmap_t kernel_pmap;
 extern boolean_t kernacc(off_t, size_t );
+extern int setup_kmem;
 
 int mmread(dev_t dev, struct uio *uio);
 int mmrw(dev_t dev, struct uio *uio, enum uio_rw rw);
@@ -112,9 +113,14 @@ mmwrite(dev, uio)
 }
 
 int
-mmioctl(__unused dev_t dev, u_long cmd, __unused caddr_t data, 
+mmioctl(dev_t dev, u_long cmd, __unused caddr_t data, 
                __unused int flag, __unused struct proc *p)
 {
+       int minnum = minor(dev);
+
+       if ((setup_kmem == 0) && ((minnum == 0) || (minnum == 1)))
+               return(EINVAL);
+
        switch (cmd) {
        case FIONBIO:
        case FIOASYNC:
@@ -143,6 +149,7 @@ mmrw(dev, uio, rw)
        int error = 0;
        vm_offset_t     where;
 
+
        while (uio_resid(uio) > 0 && error == 0) {
                if (uio_iov_len(uio) == 0) {
                        uio_next_iov(uio);
@@ -155,6 +162,8 @@ mmrw(dev, uio, rw)
 
 /* minor device 0 is physical memory */
                case 0:
+                       if (setup_kmem == 0)
+                               return(ENODEV);
                        vll = trunc_page_64(uio->uio_offset);
                        if(((vll >> 31) == 1) || vll >= ((dgWork.dgFlags & enaDiagDM) ? mem_actual : max_mem))
                                goto fault;
@@ -190,6 +199,8 @@ mmrw(dev, uio, rw)
 
                /* minor device 1 is kernel memory */
                case 1:
+                       if (setup_kmem == 0)
+                               return(ENODEV);
                        /* Do some sanity checking */
                        if (((addr64_t)uio->uio_offset > vm_last_addr) ||
                                ((addr64_t)uio->uio_offset < VM_MIN_KERNEL_ADDRESS))