/* As reported to user space - 4 banks, 16K page size */
#define CONFIG_BANKS 4
+/* reclaim discarded space for buffers */
+#define CONFIG_DYNAMIC_BUFPOOL
+
#define CONFIG_FONT6X8
/* Vt definitions */
/* Device parameters */
#define NUM_DEV_TTY 5
-#define TTYSIZ 64
+#define TTYSIZ 128
#define TTYDEV BOOT_TTY /* Device used by kernel for messages, panics */
-#define NBUFS 10 /* Number of block buffers */
+#define NBUFS 6 /* Number of block buffers */
#define NMOUNTS 4 /* Number of mounts at a time */
#define CONFIG_SD
#define MAX_BLKDEV 1 /* Single SD drive */
#define CONFIG_RTC
//#define CONFIG_RTC_RP5C01_NVRAM
-
-#define platform_discard()
.globl _infobits
.globl _machine_type
+ .globl _discard_size
+
; startup code @0x100
.area _CODE
stop: halt
jr stop
+ .area _DISCARD
+_discard_size:
+ .dw l__DISCARD
} else {
/* kernel only */
if (is_read)
- memcpy((uint8_t *)addr, (uint8_t *)MSD_RDWR, BLKSIZE);
+ memcpy(blk_op.addr, (uint8_t *)MSD_RDWR, BLKSIZE);
else
- memcpy((uint8_t *)MSD_RDWR, (uint8_t *)addr, BLKSIZE);
+ memcpy((uint8_t *)MSD_RDWR, blk_op.addr, BLKSIZE);
}
sd_spi_unmap_interface();
}
-mwxuy
-i fuzix.ihx
-b _CODE=0x0000
+-b _BUFFERS=0xD000
-b _COMMONMEM=0xF000
-b _DISCARD=0xE000
-b _FONT=0xFA00
PROGBASE .equ 0x0000
PROGLOAD .equ 0x0100
+NBUFS .equ 6
uint16_t msxmaps;
+struct blkbuf *bufpool_end = bufpool + NBUFS;
+
void platform_idle(void)
{
__asm
kbd_interrupt();
timer_interrupt();
}
+
+/*
+ * Once we are about to load init we can throw the boot code away
+ * and convert it into disk cache. This gets us 7 or so buffer
+ * back which more than doubles our cache size !
+ */
+void platform_discard(void)
+{
+ extern uint16_t discard_size;
+ bufptr bp = bufpool_end;
+
+ discard_size /= sizeof(struct blkbuf);
+
+ kprintf("%d buffers reclaimed from discard\n", discard_size);
+
+ bufpool_end += discard_size; /* Reclaim the discard space */
+
+ memset(bp, 0, discard_size * sizeof(struct blkbuf));
+ /* discard_size is in discard so it dies here */
+ for (bp = bufpool + NBUFS; bp < bufpool_end; ++bp) {
+ bp->bf_dev = NO_DEVICE;
+ bp->bf_busy = BF_FREE;
+ }
+}
.globl _mapslot_bank1
.globl _mapslot_bank2
.globl _need_resched
+ .globl _bufpool
; video driver
.globl _vtinit
.include "kernel.def"
.include "../kernel.def"
+ .area _BUFFERS
+
+_bufpool:
+ .ds BUFSIZE * NBUFS
; -----------------------------------------------------------------------------
; COMMON MEMORY BANK (0xF000 upwards)
; -----------------------------------------------------------------------------