shithub: riscv

Download patch

ref: 645b5f8724c0116d974680bdb591320256cc36e0
parent: c739f57ac2f136e67be63a4678d4171889057105
author: rgl <devnull@localhost>
date: Sat Jan 4 13:02:54 EST 2020

/sys/man/9: more pages added

in addition to the pages, there's also changes to the mkfile
to generate the index for the new section.

--- /dev/null
+++ b/sys/man/9/inb
@@ -1,0 +1,83 @@
+.TH INB 9
+.SH NAME
+inb, ins, inl, outb, outs, outl, insb, inss, insl, outsb, outss, outsl \- programmed I/O
+.SH SYNOPSIS
+.ta \w'\fLushort 'u
+.B
+int	inb(int port)
+.PP
+.B
+ushort	ins(int port)
+.PP
+.B
+ulong	inl(int port)
+.PP
+.B
+void	outb(int port, int value)
+.PP
+.B
+void	outs(int port, ushort value)
+.PP
+.B
+void	outl(int port, ulong value)
+.PP
+.B
+void	insb(int port, void *address, int count)
+.PP
+.B
+void	inss(int port, void *address, int count)
+.PP
+.B
+void	insl(int port, void *address, int count)
+.PP
+.B
+void	outsb(int port, void *address, int count)
+.PP
+.B
+void	outss(int port, void *address, int count)
+.PP
+.B
+void	outsl(int port, void *address, int count)
+.SH DESCRIPTION
+The
+.I x86
+implementation provides functions to allow kernel code
+written in C to access the I/O address space.
+On several other architectures such as the PowerPC and Strongarm,
+the platform-dependent code provides similar functions to access
+devices with an I/O space interface, even when that is memory mapped, to encourage portability of device drivers.
+.PP
+.IR Inb ,
+.I ins
+and
+.I inl
+apply the corresponding hardware instruction to fetch the next byte, short or long
+from the I/O
+.IR port .
+.IR Outb ,
+.I outs
+and
+.I outl
+output a
+.I value
+to the I/O
+.IR port .
+.PP
+The remaining functions transfer
+.I count
+bytes, shorts, or longs using programmed I/O between a memory
+.I address
+and
+.IR port .
+Functions
+.B insX
+copy values into memory; functions
+.B outsX
+copy values from memory.
+The
+.I count
+is in elements, not bytes.
+.SH SOURCE
+.B /sys/src/9/pc/l.s
+.SH SEE ALSO
+.IR dma (9)
--- /dev/null
+++ b/sys/man/9/parsecmd
@@ -1,0 +1,107 @@
+.TH PARSECMD 9
+.SH NAME
+parsecmd, cmderror, lookupcmd
+\- parse device commands
+.SH SYNOPSIS
+.ta \w'\fLCmdbuf* 'u
+.B
+Cmdbuf*	parsecmd(char *a, int n)
+.PP
+.B
+void		cmderror(Cmdbuf *cb, char *s)
+.PP
+.B
+Cmdtab*		lookupcmd(Cmdbuf *cb, Cmdtab *ctab, int nctab)
+.SH DESCRIPTION
+.I Parsecmd
+is an interface to
+.I tokenize
+(see
+.IR getfields (2)),
+that safely parses a command, with blank-separated fields, as might be
+written to a device's
+.B ctl
+file.
+The buffer
+.I a
+and count
+.I n
+can be those passed to the driver's
+.I write
+function.
+.I Parsecmd
+converts the byte array (which might not be null-terminated) to a null-terminated string,
+trimming any trailing new line,
+before invoking
+.I tokenize
+to break the string into arguments, interpreting blank and tab as field separators
+when they are not quoted
+(in the style of
+.IR rc (1)).
+It returns a pointer to a dynamically-allocated
+.B Cmdbuf
+structure,
+which holds a copy of the string and the resulting fields; it is
+defined as follows:
+.IP
+.EX
+.ta 6n +\w'char* 'u
+typedef
+struct Cmdbuf
+{
+	char	*buf;
+	char	**f;
+	int	nf;
+} Cmdbuf;
+.EE
+.PP
+The array
+.B f
+holds the field pointers;
+.B nf
+gives the number of fields.
+.B Cmdbuf
+is allocated by
+.I smalloc
+(see
+.IR malloc (9)),
+and the caller is responsible for freeing it using
+.IR free .
+.I Cmderror
+prepends the given format with the original command,
+then calls
+.IR error (9).
+.PP
+Command strings may be turned into a (typically enumerated)
+integer with 
+.IR lookupcmd .
+The catchall
+.L *
+matches any text.  Unrecognized commands, or commands
+given an unacceptable number of arguments generate a
+call to
+.IR error .
+The definition is as follows
+.IP
+.EX
+.ta 6n +\w'char* 'u
+typedef
+struct Cmdtab
+{
+	int	index;  /* used by client to switch on result */
+	char	*cmd;   /* command name */
+	int	narg;   /* expected #args; 0 ==> variadic */
+} Cmdtab;
+.EE
+.PP
+The integer
+.B index
+is the number returned on command match.
+The string
+.B cmd
+is the command name, and
+.B narg
+is 0 (indicating a variadic function) or the
+number of arguments.
+.SH SOURCE
+.B /sys/src/9/port/parse.c
--- /dev/null
+++ b/sys/man/9/readnum
@@ -1,0 +1,58 @@
+.TH READNUM 9
+.SH NAME
+readnum, readstr \- device read routines
+.SH SYNOPSIS
+.ta \w'\fLint 'u
+.B
+int readstr(ulong off, char *buf, ulong n, char *str)
+.PP
+.B
+int readnum(ulong off, char *buf, ulong n, ulong val, int size)
+.SH DESCRIPTION
+.I Readstr
+and
+.I readnum
+simplify the return of strings and numbers from device
+.I read
+routines,
+because they deal with any buffering and boundary cases.
+Several parameters to the read call are often handed on directly
+to these functions:
+the file offset, as
+.IR off ;
+the address of the user's buffer, as
+.IR buf ;
+and the number of bytes requested, as
+.IR n .
+Both functions return the number of bytes they have stored in
+.IR buf ,
+and which can often be returned directly from the device read routine.
+.PP
+.I Readstr
+satisfies a read by copying data into
+.I buf
+from the NUL-terminated string in
+.IR str .
+The data transferred is selected and limited by
+.IR off ,
+.I n
+and the length of
+.IR str .
+.PP
+.I Readnum
+converts the unsigned integer
+.I val
+to a decimal representation in
+.IR buf .
+The value is right-justified in a field of
+.IR size "-1"
+places and is followed by a blank.
+.I Size
+can be the global constant
+.L NUMSIZE
+for 32-bit integers;
+the largest
+.I size
+allowed is 64 bytes. 
+.SH SOURCE
+.B /sys/src/9/port/devcons.c
--- /dev/null
+++ b/sys/man/9/sched
@@ -1,0 +1,89 @@
+.TH SCHED 9
+.SH NAME
+anyhigher, anyready, hzsched, procpriority, procrestore, procsave, scheddump, schedinit, sched, yield
+\– scheduler interactions
+.SH SYNOPSIS
+.ta \w'\fLchar* 'u +10n +8n +8n
+.EX
+int	anyhigher(void)
+int	anyready(void)
+void	hzsched(void)
+void	procpriority(Proc *p, int priority, int fixed)
+void	procrestore(Proc *p)
+void	procsave(Proc *p)
+void	procwired(Proc *p, int machno)
+void	scheddump(void)
+void	schedinit(void)
+void	sched(void)
+void	yield(void)
+
+enum {
+...
+	Npriq		= 20,	/* scheduler priority levels */
+	PriNormal	= 10,	/* base for normal processes */
+	PriKproc	= 13,	/* base for kernel processes */
+	PriRoot	= 13,	/* base for root processes */
+};
+.EE
+.SH DESCRIPTION
+.PP
+These functions define the priority process scheduler's interface.
+Processes are scheduled strictly by priority, and processor affinity.
+When possible, processes with no affinity will be rescheduled on the
+same processor.  Within a priority, scheduling is round–robin.
+Long–running processes of the same priority are preempted and
+rescheduled.  But cpu use (or lack thereof) may adjust the priority up
+or down, unless it has been explicitly fixed.  Kernel processes are
+started with
+.B PriKproc
+while user processes start with
+.BR PriNormal .
+.PP
+.I Anyhigher
+returns true if any higher priority processes are runnable, while
+.I anyready
+returns true if any processes are runnable at all.
+.I Yield
+gives up the processor and pretends to consume ½ clock tick, while
+.I sched
+invokes the scheduler, potentially recursively.
+.I Sched
+may be called outside process context.  Either may return immediately.
+.I Schedinit
+initializes scheduling on the running processor.
+.PP
+.I Procpriority
+sets a process' priority directly.  Fixed–priority processes are not
+reprioritized based on cpu use.
+.I Procwired
+makes a process runnable only on a single processor.
+.PP
+.I Hzsched
+is called by the clock routine on every tick to collect statistics.
+Periodically (typically once a second)
+.I hzsched
+reprioritizes based on cpu use.
+.PP
+.I Procsave
+and
+.I procrestore
+are architecture–dependent routines used by the scheduler to save and
+restore processes.
+.I Scheddump
+prints scheduler statistics.
+.SH SOURCE
+.B /sys/src/9/port/proc.c
+.sp 0.3
+.I Procsave
+and
+.I procrestore
+can be found at
+.br
+.B /sys/src/9/*/main.c
+.br
+.B /sys/src/9/*/arch.c
+.br
+.B /sys/src/9/*/trap.c
+.SH SEE ALSO
+.IR edf (9),
+.IR sleep (9)
--- /dev/null
+++ b/sys/man/9/seconds
@@ -1,0 +1,75 @@
+.TH SECONDS 9
+.SH NAME
+seconds, ticks, fastticks, HZ, MS2HZ, MS2TK, TK2MS, TK2SEC \- kernel times and time conversions
+.SH SYNOPSIS
+.ta \w'\fL#define 'u
+.B
+long	seconds(void)
+.PP
+.B
+vlong	fastticks(uvlong *hz)
+.PP
+.EX
+#define	HZ          ...
+#define	MS2HZ       (1000/HZ)
+#define	TK2SEC(t)   ((t)/HZ)
+#define	TK2MS(t)    ((t)*(1000/HZ))
+.EE
+.SH DESCRIPTION
+.I Seconds
+returns the system's idea of the current time as the number of seconds
+since the start of the epoch
+(00:00:00 GMT, January 1, 1970).
+.PP
+The
+.B ticks
+field of the
+.B Mach
+structure returns the number of system-dependent clock ticks on the
+given processor since system boot.
+On a multiprocessor,
+.B MACHP(0)
+is sometimes used to provide a reference time, since the tick value
+might vary slightly across processors.
+.PP
+.I Fastticks
+returns the number of ticks since boot as measured by the
+fastest clock provided by the platform.
+The frequency of the clock, in ticks per second,
+is returned through
+.IR hz ,
+unless it is nil.
+.PP
+The system clock frequencies are platform-dependent.
+Several symbolic constants and macro functions are defined by
+the file
+.B mem.h
+to convert between different time units:
+.TF TK2SEC(t)
+.PD
+.TP
+.B HZ
+The number of clock ticks per second.
+.TP
+.B MS2HZ
+Milliseconds per clock tick.
+.TP
+.BI TK2SEC( t )
+Convert
+.I t
+clock ticks to seconds (truncating not rounding).
+.TP
+.BI TK2MS( t )
+Convert
+.I t
+clock ticks to milliseconds.
+.SH SOURCE
+.B /sys/src/9/*/mem.h
+.br
+.B /sys/src/9/*/clock.c
+.br
+.B /sys/src/9/*/devarch.c
+.br
+.B /sys/src/9/*/timer.c
+.br
+.B /sys/src/9/port/tod.c
--- a/sys/man/mkfile
+++ b/sys/man/mkfile
@@ -5,7 +5,7 @@
 default:V: check
 
 indices:V:
-	for (i in [0-8]){
+	for (i in [0-9]){
 		$LIB/secindex $i > $i/INDEX
 		$LIB/mkhtmlindex $i > $i/INDEX.html
 	}
@@ -18,7 +18,7 @@
 		echo .am TH
 		echo .tm '\\$1' '\\$2' '\\n%'
 		echo ..
-		for (i in [0-8]){
+		for (i in [0-9]){
 			builtin cd $i
 			for(j in [a-z0-9]*)
 				switch($i/$j){
@@ -41,18 +41,18 @@
 	mk out > /dev/null >[2] /dev/null
 
 old-check:V: checksource
-	awk -f $LIB/checkman.awk [0-8]/* | sed '/\/(cda|av|midi|pub|weather|service\.9net|isdn)(\/|\))/d'
+	awk -f $LIB/checkman.awk [0-9]/* | sed '/\/(cda|av|midi|pub|weather|service\.9net|isdn)(\/|\))/d'
 
 punccheck:
 	grep -n '^\.[IB][^PRIB].+[.;,:]$' [0-9]/* | grep -v '\.\.\.'
 
 check:V: indices checksource
-	awk -f $LIB/checkman.awk [0-8]/*
+	awk -f $LIB/checkman.awk [0-9]/*
 
 checksource:QV:
 	sam -d >[2]/dev/null <<'!'
 	f input
-	< cat [0-8]/[0-9a-z]*
+	< cat [0-9]/[0-9a-z]*
 	B output
 	b input
 	,x/^\.SH SOURCE/ .,/^\.SH/ x g/^\.B/t "output
@@ -80,7 +80,7 @@
 		{echo -n $FONTS; cat $LIB/preface} | troff -ms
 		{echo -n $FONTS; echo ' '} | troff
 		{
-			for (i in [0-8]){
+			for (i in [0-9]){
 				builtin cd $i
 				for(j in [a-z0-9]*)
 					switch($i/$j){
@@ -116,6 +116,6 @@
 	ps2pdf $prereq $target
 
 clean:V:
-	rm -f man.out print.out searchindex $LIB/permind/toc $LIB/lookman/index [0-8]^/INDEX^('' .html)
+	rm -f man.out print.out searchindex $LIB/permind/toc $LIB/lookman/index [0-9]^/INDEX^('' .html)
 	builtin cd $LIB/permind
 	mk clean