paddr_t mmmmap(dev_t dev, off_t off, int prot) { struct lwp *l = curlwp; if (minor(dev) != DEV_MEM) return (-1); if (!__mm_mem_addr(off) && kauth_authorize_machdep(l->l_cred, KAUTH_MACHDEP_UNMANAGEDMEM, NULL, NULL, NULL, NULL) != 0) return (-1); return (sh3_btop((paddr_t)off)); }
int cpu_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, size_t newlen, struct proc *p) { /* all sysctl names at this level are terminal */ if (namelen != 1) return (ENOTDIR); /* overloaded */ switch (name[0]) { case CPU_CONSDEV: return (sysctl_rdstruct(oldp, oldlenp, newp, &cn_tab->cn_dev, sizeof cn_tab->cn_dev)); default: } return (EOPNOTSUPP); } void cpu_reboot(int howto, char *bootstr) { /* take a snap shot before clobbering any registers */ if (curproc) savectx(curpcb); /* If system is cold, just halt. */ if (cold) { howto |= RB_HALT; goto haltsys; } /* If "always halt" was specified as a boot flag, obey. */ if ((boothowto & RB_HALT) != 0) { howto |= RB_HALT; } #ifdef KLOADER_KERNEL_PATH if ((howto & RB_HALT) == 0) kloader_reboot_setup(KLOADER_KERNEL_PATH); #endif boothowto = howto; if ((howto & RB_NOSYNC) == 0) { /* * Synchronize the disks.... */ vfs_shutdown(); /* * If we've been adjusting the clock, the todr * will be out of synch; adjust it now. */ resettodr(); } /* Disable interrupts. */ splhigh(); /* If rebooting and a dump is requested do it. */ #if notyet if (howto & RB_DUMP) dumpsys(); #endif haltsys: /* run any shutdown hooks */ doshutdownhooks(); /* Finally, halt/reboot the system. */ if (howto & RB_HALT) { printf("halted.\n"); } else { #ifdef KLOADER_KERNEL_PATH kloader_reboot(); /* NOTREACHED */ #endif } #if NHD64465IF > 0 hd64465_shutdown(); #endif cpu_reset(); /*NOTREACHED*/ while(1) ; } /* return # of physical pages. */ int mem_cluster_init(paddr_t addr) { phys_ram_seg_t *seg; int npages, i; /* cluster 0 is always kernel myself. */ mem_clusters[0].start = SH_CS3_START; mem_clusters[0].size = addr - SH_CS3_START; mem_cluster_cnt = 1; /* search CS3 */ #ifdef SH3 /* SH7709A's CS3 is splited to 2 banks. */ if (CPU_IS_SH3) { __find_dram_shadow(addr, SH7709_CS3_BANK0_END); __find_dram_shadow(SH7709_CS3_BANK1_START, SH7709_CS3_BANK1_END); } #endif #ifdef SH4 /* contig CS3 */ if (CPU_IS_SH4) { __find_dram_shadow(addr, SH_CS3_END); } #endif _DPRINTF("mem_cluster_cnt = %d\n", mem_cluster_cnt); npages = 0; for (i = 0, seg = mem_clusters; i < mem_cluster_cnt; i++, seg++) { _DPRINTF("mem_clusters[%d] = {0x%lx+0x%lx <0x%lx}", i, (paddr_t)seg->start, (paddr_t)seg->size, (paddr_t)seg->start + (paddr_t)seg->size); npages += sh3_btop(seg->size); #ifdef NARLY_MEMORY_PROBE if (i == 0) { _DPRINTF(" don't check.\n"); continue; } if (__check_dram((paddr_t)seg->start, (paddr_t)seg->start + (paddr_t)seg->size) != 0) panic("D-RAM check failed."); #else _DPRINTF("\n"); #endif /* NARLY_MEMORY_PROBE */ } return (npages); }