Module Name:    src
Committed By:   tsutsui
Date:           Sun Jul  3 16:03:08 UTC 2022

Modified Files:
        src/sys/arch/atari/atari: atari_init.c bus.c machdep.c
        src/sys/arch/atari/include: bus_funcs.h

Log Message:
Move the iomem extent stuff managed by bus_space(9) and make them static.

Inspired by MD bus_space(9) implemantation of arc.
Briefly tested on TT030.


To generate a diff of this commit:
cvs rdiff -u -r1.105 -r1.106 src/sys/arch/atari/atari/atari_init.c
cvs rdiff -u -r1.62 -r1.63 src/sys/arch/atari/atari/bus.c
cvs rdiff -u -r1.187 -r1.188 src/sys/arch/atari/atari/machdep.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/atari/include/bus_funcs.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/atari/atari/atari_init.c
diff -u src/sys/arch/atari/atari/atari_init.c:1.105 src/sys/arch/atari/atari/atari_init.c:1.106
--- src/sys/arch/atari/atari/atari_init.c:1.105	Sat Jun 25 13:17:04 2022
+++ src/sys/arch/atari/atari/atari_init.c	Sun Jul  3 16:03:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: atari_init.c,v 1.105 2022/06/25 13:17:04 tsutsui Exp $	*/
+/*	$NetBSD: atari_init.c,v 1.106 2022/07/03 16:03:08 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1995 Leo Weppelman
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: atari_init.c,v 1.105 2022/06/25 13:17:04 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: atari_init.c,v 1.106 2022/07/03 16:03:08 tsutsui Exp $");
 
 #include "opt_ddb.h"
 #include "opt_mbtype.h"
@@ -58,6 +58,7 @@ __KERNEL_RCSID(0, "$NetBSD: atari_init.c
 #include <sys/exec_aout.h>
 #include <sys/core.h>
 #include <sys/kcore.h>
+#include <sys/bus.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -110,21 +111,6 @@ static u_int milan_probe_bank(paddr_t pa
 #endif
 
 /*
- * Extent maps to manage all memory space, including I/O ranges.  Allocate
- * storage for 16 regions in each, initially.  Later, iomem_malloc_safe
- * will indicate that it's safe to use malloc() to dynamically allocate
- * region descriptors.
- * This means that the fixed static storage is only used for registrating
- * the found memory regions and the bus-mapping of the console.
- *
- * The extent maps are not static!  They are used for bus address space
- * allocation.
- */
-static long iomem_ex_storage[EXTENT_FIXED_STORAGE_SIZE(16) / sizeof(long)];
-struct extent *iomem_ex;
-int iomem_malloc_safe;
-
-/*
  * All info needed to generate a panic dump. All fields are setup by
  * start_c().
  * XXX: Should sheck usage of phys_segs. There is some unwanted overlap
@@ -685,25 +671,13 @@ start_c(int id, u_int ttphystart, u_int 
 	init_stmem();
 
 	/*
-	 * Initialize the I/O mem extent map.
-	 * Note: we don't have to check the return value since
-	 * creation of a fixed extent map will never fail (since
-	 * descriptor storage has already been allocated).
-	 *
-	 * N.B. The iomem extent manages _all_ physical addresses
-	 * on the machine.  When the amount of RAM is found, all
-	 * extents of RAM are allocated from the map.
-	 */
-	iomem_ex = extent_create("iomem", 0x0, 0xffffffff,
-	    (void *)iomem_ex_storage, sizeof(iomem_ex_storage),
-	    EX_NOCOALESCE|EX_NOWAIT);
-
-	/*
-	 * Allocate the physical RAM from the extent map
+	 * Initialize the iomem extent for bus_space(9) to manage address
+	 * spaces and allocate the physical RAM from the extent map.
 	 */
+	atari_bus_space_extent_init(0x0, 0xffffffff);
 	for (i = 0; i < NMEM_SEGS && boot_segs[i].end != 0; i++) {
-		if (extent_alloc_region(iomem_ex, boot_segs[i].start,
-		    boot_segs[i].end - boot_segs[i].start, EX_NOWAIT)) {
+		if (atari_bus_space_alloc_physmem(boot_segs[i].start,
+		    boot_segs[i].end)) {
 			/* XXX: Ahum, should not happen ;-) */
 			printf("Warning: Cannot allocate boot memory from"
 			    " extent map!?\n");
@@ -973,7 +947,6 @@ map_io_areas(paddr_t ptpa, psize_t ptsiz
 	/* ptsize:	 Size of 'pt' in bytes		*/
 	/* ptextra:	 #of additional I/O pte's	*/
 {
-	extern void	bootm_init(vaddr_t, pt_entry_t *, u_long);
 	vaddr_t		ioaddr;
 	pt_entry_t	*pt, *pg, *epg;
 	pt_entry_t	pg_proto;

Index: src/sys/arch/atari/atari/bus.c
diff -u src/sys/arch/atari/atari/bus.c:1.62 src/sys/arch/atari/atari/bus.c:1.63
--- src/sys/arch/atari/atari/bus.c:1.62	Tue May 24 19:55:10 2022
+++ src/sys/arch/atari/atari/bus.c	Sun Jul  3 16:03:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus.c,v 1.62 2022/05/24 19:55:10 andvar Exp $	*/
+/*	$NetBSD: bus.c,v 1.63 2022/07/03 16:03:08 tsutsui Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include "opt_m68k_arch.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.62 2022/05/24 19:55:10 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.63 2022/07/03 16:03:08 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -49,6 +49,18 @@ __KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.62
 #define	_ATARI_BUS_DMA_PRIVATE
 #include <sys/bus.h>
 
+/*
+ * Extent maps to manage all memory space, including I/O ranges.  Allocate
+ * storage for 16 regions in each, initially.  Later, iomem_malloc_safe
+ * will indicate that it's safe to use malloc() to dynamically allocate
+ * region descriptors.
+ * This means that the fixed static storage is only used for registrating
+ * the found memory regions and the bus-mapping of the console.
+ */
+static long iomem_ex_storage[EXTENT_FIXED_STORAGE_SIZE(16) / sizeof(long)];
+static struct extent *iomem_ex;
+static int iomem_malloc_safe = 0;
+
 int  bus_dmamem_alloc_range(bus_dma_tag_t tag, bus_size_t size,
 		bus_size_t alignment, bus_size_t boundary,
 		bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags,
@@ -59,9 +71,6 @@ static int  _bus_dmamap_load_buffer(bus_
 static int  bus_mem_add_mapping(bus_space_tag_t t, bus_addr_t bpa,
 		bus_size_t size, int flags, bus_space_handle_t *bsph);
 
-extern struct extent *iomem_ex;
-extern int iomem_malloc_safe;
-
 extern paddr_t avail_end;
 
 /*
@@ -79,17 +88,16 @@ static long		bootm_ex_storage[EXTENT_FIX
 								sizeof(long)];
 static struct extent	*bootm_ex;
 
-void bootm_init(vaddr_t, pt_entry_t *, u_long);
 static vaddr_t	bootm_alloc(paddr_t pa, u_long size, int flags);
 static int	bootm_free(vaddr_t va, u_long size);
 
 void
-bootm_init(vaddr_t va, pt_entry_t *ptep, u_long size)
+bootm_init(vaddr_t va, void *ptep, vsize_t size)
 {
 	bootm_ex = extent_create("bootmem", va, va + size,
 	    (void *)bootm_ex_storage, sizeof(bootm_ex_storage),
 	    EX_NOCOALESCE|EX_NOWAIT);
-	bootm_ptep = ptep;
+	bootm_ptep = (pt_entry_t *)ptep;
 }
 
 vaddr_t
@@ -137,6 +145,47 @@ bootm_free(vaddr_t va, u_long size)
 	return 1;
 }
 
+void
+atari_bus_space_extent_init(paddr_t startpa, paddr_t endpa)
+{
+
+	/*
+	 * Initialize the I/O mem extent map.
+	 * Note: we don't have to check the return value since
+	 * creation of a fixed extent map will never fail (since
+	 * descriptor storage has already been allocated).
+	 *
+	 * N.B. The iomem extent manages _all_ physical addresses
+	 * on the machine.  When the amount of RAM is found, all
+	 * extents of RAM are allocated from the map.
+	 */
+	iomem_ex = extent_create("iomem", startpa, endpa,
+	    (void *)iomem_ex_storage, sizeof(iomem_ex_storage),
+	    EX_NOCOALESCE | EX_NOWAIT);
+}
+
+int
+atari_bus_space_alloc_physmem(paddr_t startpa, paddr_t endpa)
+{
+
+	return extent_alloc_region(iomem_ex, startpa, endpa - startpa,
+	    EX_NOWAIT);
+}
+
+void
+atari_bus_space_malloc_set_safe(void)
+{
+
+	iomem_malloc_safe = EX_MALLOCOK;
+}
+
+int
+atari_bus_space_extent_malloc_flag(void)
+{
+
+	return iomem_malloc_safe;
+}
+
 int
 bus_space_map(bus_space_tag_t t, bus_addr_t bpa, bus_size_t size, int flags,
     bus_space_handle_t *mhp)
@@ -148,15 +197,15 @@ bus_space_map(bus_space_tag_t t, bus_add
 	 * region is available.
 	 */
 	error = extent_alloc_region(iomem_ex, bpa + t->base, size,
-			EX_NOWAIT | (iomem_malloc_safe ? EX_MALLOCOK : 0));
+			EX_NOWAIT | iomem_malloc_safe);
 
 	if (error)
 		return error;
 
 	error = bus_mem_add_mapping(t, bpa, size, flags, mhp);
 	if (error) {
-		if (extent_free(iomem_ex, bpa + t->base, size, EX_NOWAIT |
-		    (iomem_malloc_safe ? EX_MALLOCOK : 0))) {
+		if (extent_free(iomem_ex, bpa + t->base, size,
+		    EX_NOWAIT | iomem_malloc_safe)) {
 			printf("bus_space_map: pa 0x%lx, size 0x%lx\n",
 			    bpa, size);
 			printf("bus_space_map: can't free region\n");
@@ -189,8 +238,7 @@ bus_space_alloc(bus_space_tag_t t, bus_a
 	 */
 	error = extent_alloc_subregion(iomem_ex, rstart + t->base,
 	    rend + t->base, size, alignment, boundary,
-	    EX_FAST | EX_NOWAIT | (iomem_malloc_safe ?  EX_MALLOCOK : 0),
-	    &bpa);
+	    EX_FAST | EX_NOWAIT | iomem_malloc_safe, &bpa);
 
 	if (error)
 		return error;
@@ -200,8 +248,8 @@ bus_space_alloc(bus_space_tag_t t, bus_a
 	 */
 	error = bus_mem_add_mapping(t, bpa, size, flags, bshp);
 	if (error) {
-		if (extent_free(iomem_ex, bpa, size, EX_NOWAIT |
-		    (iomem_malloc_safe ? EX_MALLOCOK : 0))) {
+		if (extent_free(iomem_ex, bpa, size,
+		    EX_NOWAIT | iomem_malloc_safe)) {
 			printf("bus_space_alloc: pa 0x%lx, size 0x%lx\n",
 			    bpa, size);
 			printf("bus_space_alloc: can't free region\n");
@@ -296,8 +344,7 @@ bus_space_unmap(bus_space_tag_t t, bus_s
 	/*
 	 * Mark as free in the extent map.
 	 */
-	if (extent_free(iomem_ex, bpa, size,
-	    EX_NOWAIT | (iomem_malloc_safe ? EX_MALLOCOK : 0))) {
+	if (extent_free(iomem_ex, bpa, size, EX_NOWAIT | iomem_malloc_safe)) {
 		printf("bus_space_unmap: pa 0x%lx, size 0x%lx\n", bpa, size);
 		printf("bus_space_unmap: can't free region\n");
 	}

Index: src/sys/arch/atari/atari/machdep.c
diff -u src/sys/arch/atari/atari/machdep.c:1.187 src/sys/arch/atari/atari/machdep.c:1.188
--- src/sys/arch/atari/atari/machdep.c:1.187	Sat Jul  2 08:35:49 2022
+++ src/sys/arch/atari/atari/machdep.c	Sun Jul  3 16:03:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.187 2022/07/02 08:35:49 tsutsui Exp $	*/
+/*	$NetBSD: machdep.c,v 1.188 2022/07/03 16:03:08 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.187 2022/07/02 08:35:49 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.188 2022/07/03 16:03:08 tsutsui Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -71,6 +71,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include <sys/exec_aout.h>
 #include <sys/cpu.h>
 #include <sys/exec_elf.h>
+#include <sys/bus.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -175,7 +176,6 @@ consinit(void)
 void
 cpu_startup(void)
 {
-	extern int iomem_malloc_safe;
 	char pbuf[9];
 #ifdef DEBUG
 	extern int pmapdebug;
@@ -217,7 +217,7 @@ cpu_startup(void)
 	/*
 	 * Alloc extent allocation to use malloc
 	 */
-	iomem_malloc_safe = 1;
+	atari_bus_space_malloc_set_safe();
 }
 
 /*

Index: src/sys/arch/atari/include/bus_funcs.h
diff -u src/sys/arch/atari/include/bus_funcs.h:1.1 src/sys/arch/atari/include/bus_funcs.h:1.2
--- src/sys/arch/atari/include/bus_funcs.h:1.1	Fri Jul  1 17:09:58 2011
+++ src/sys/arch/atari/include/bus_funcs.h	Sun Jul  3 16:03:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_funcs.h,v 1.1 2011/07/01 17:09:58 dyoung Exp $	*/
+/*	$NetBSD: bus_funcs.h,v 1.2 2022/07/03 16:03:08 tsutsui Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -60,6 +60,14 @@
 #ifndef _ATARI_BUS_FUNCS_H_
 #define _ATARI_BUS_FUNCS_H_
 
+/* machine dependent utility functions */
+void bootm_init(vaddr_t, void *, vsize_t);
+void atari_bus_space_extent_init(paddr_t, paddr_t);
+int atari_bus_space_alloc_physmem(paddr_t, paddr_t);
+void atari_bus_space_malloc_set_safe(void);
+int atari_bus_space_extent_malloc_flag(void);
+
+/* functions for machine independent bus_space(9) API */
 int	bus_space_alloc(bus_space_tag_t, bus_addr_t, bus_addr_t, bus_size_t,
 	    bus_size_t, bus_size_t, int, bus_addr_t *, bus_space_handle_t *);
 int	bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, int,

Reply via email to