/* * Machine dependent constants for MIPS32. * * Copyright (c) 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ #ifndef ENDIAN /* * Definitions for byte order, * according to byte significance from low address to high. */ #define LITTLE 1234 /* least-significant byte first (vax) */ #define BIG 4321 /* most-significant byte first */ #define PDP 3412 /* LSB first in word, MSW first in long (pdp) */ #define ENDIAN LITTLE /* byte order on pic32 */ /* * The time for a process to be blocked before being very swappable. * This is a number of seconds which the system takes as being a non-trivial * amount of real time. You probably shouldn't change this; * it is used in subtle ways (fractions and multiples of it are, that is, like * half of a ``long time'', almost a long time, etc.) * It is related to human patience and other factors which don't really * change over time. */ #define MAXSLP 20 /* * Clock ticks per second. The HZ value must be an integer factor of 1000. */ #ifndef HZ #define HZ 200 #endif /* * System parameter formulae. */ #ifndef NBUF #define NBUF 10 /* number of i/o buffers */ #endif #ifndef MAXUSERS #define MAXUSERS 1 /* number of user logins */ #endif #ifndef NPROC #define NPROC 25 /* number of processes */ #endif #ifndef NINODE #define NINODE 24 #endif #ifndef NFILE #define NFILE 24 #endif #define NNAMECACHE (NINODE * 11/10) #define NCALL (16 + 2 * MAXUSERS) #define NCLIST 32 /* number or CBSIZE blocks */ #ifndef SMAPSIZ #define SMAPSIZ NPROC /* size of swap allocation map */ #endif /* * Disk blocks. */ #define DEV_BSIZE 1024 /* the same as MAXBSIZE */ #define DEV_BSHIFT 10 /* log2(DEV_BSIZE) */ #define DEV_BMASK (DEV_BSIZE-1) /* Bytes to disk blocks */ #define btod(x) (((x) + DEV_BSIZE-1) >> DEV_BSHIFT) /* * On PIC32, there are total 512 kbytes of flash and 128 kbytes of RAM. * We reserve for kernel 192 kbytes of flash and 32 kbytes of RAM. */ #define FLASH_SIZE (512*1024) #define DATA_SIZE (128*1024) #define KERNEL_FLASH_SIZE (192*1024) #ifdef KERNEL_EXECUTABLE_RAM extern void _keram_start(), _keram_end(); #define KERAM_SIZE ((unsigned)((char*)&_keram_end-(char*)&_keram_start)) #define KERNEL_DATA_SIZE (32*1024-KERAM_SIZE) #else #define KERNEL_DATA_SIZE (32*1024) #endif #define KERNEL_FLASH_START 0x9d000000 #define USER_FLASH_START (KERNEL_FLASH_START + KERNEL_FLASH_SIZE) #define USER_FLASH_END (KERNEL_FLASH_START + FLASH_SIZE) #define KERNEL_DATA_START 0x80000000 #define KERNEL_DATA_END (KERNEL_DATA_START + KERNEL_DATA_SIZE) #ifdef KERNEL_EXECUTABLE_RAM #define USER_DATA_START (0x7f000000 + KERNEL_DATA_SIZE+KERAM_SIZE) #else #define USER_DATA_START (0x7f000000 + KERNEL_DATA_SIZE) #endif #define USER_DATA_END (0x7f000000 + DATA_SIZE) #define stacktop(siz) (USER_DATA_END) #define stackbas(siz) (USER_DATA_END-(siz)) /* * User area: a user structure, followed by the kernel * stack. The number for USIZE is determined empirically. * * Note that the SBASE and STOP constants are only used by the assembly code, * but are defined here to localize information about the user area's * layout (see pdp/genassym.c). Note also that a networking stack is always * allocated even for non-networking systems. This prevents problems with * applications having to be recompiled for networking versus non-networking * systems. */ #define USIZE 3072 #define SSIZE 2048 /* initial stack size (bytes) */ /* * Collect kernel statistics by default. */ #if !defined(UCB_METER) && !defined(NO_UCB_METER) #define UCB_METER #endif #ifdef KERNEL #include "machine/io.h" /* * Macros to decode processor status word. */ #define USERMODE(ps) (((ps) & ST_UM) != 0) #define BASEPRI(ps) (CA_RIPL(ps) == 0) #define splbio() mips_intr_disable() #define spltty() mips_intr_disable() #define splclock() mips_intr_disable() #define splhigh() mips_intr_disable() #define splnet() mips_intr_enable() #define splsoftclock() mips_intr_enable() #define spl0() mips_intr_enable() #define splx(s) mips_intr_restore(s) #define noop() asm volatile("nop") /* * Wait for something to happen. */ void idle(void); /* * Microsecond delay routine. */ void udelay(unsigned usec); /* * Setup system timer for `hz' timer interrupts per second. */ void clkstart(void); /* * Control LEDs, installed on the board. */ #define LED_MISC4 0x80 #define LED_MISC3 0x40 #define LED_MISC2 0x20 #define LED_MISC1 0x10 #define LED_TTY 0x08 #define LED_SWAP 0x04 #define LED_DISK 0x02 #define LED_KERNEL 0x01 void led_control(int mask, int on); /* * Port i/o access, relative to TRIS base. */ #define TRIS_VAL(p) (&p)[0] #define TRIS_CLR(p) (&p)[1] #define TRIS_SET(p) (&p)[2] #define TRIS_INV(p) (&p)[3] #define PORT_VAL(p) (&p)[4] #define PORT_CLR(p) (&p)[5] #define PORT_SET(p) (&p)[6] #define PORT_INV(p) (&p)[7] #define LAT_VAL(p) (&p)[8] #define LAT_CLR(p) (&p)[9] #define LAT_SET(p) (&p)[10] #define LAT_INV(p) (&p)[11] /* * SD timeouts, for sysctl. */ extern int sd_timo_cmd; extern int sd_timo_send_op; extern int sd_timo_send_csd; extern int sd_timo_read; extern int sd_timo_wait_cmd; extern int sd_timo_wait_wdata; extern int sd_timo_wait_wdone; extern int sd_timo_wait_wstop; extern int sd_timo_wait_widle; /* * GPIO pins. */ void gpio_set_input(int pin); void gpio_set_output(int pin); void gpio_set(int pin); void gpio_clr(int pin); int gpio_get(int pin); char gpio_portname(int pin); int gpio_pinno(int pin); /* Convert port name/signal into a pin number. */ #define GPIO_PIN(x,n) (((x)-'A'+1) << 4 | (n)) /* * CPU package type: 64 pins or 100 pins. */ extern int cpu_pins; #endif /* KERNEL */ #endif /* ENDIAN */