• Aucun résultat trouvé

Most of the routines, functions, and structures described in this manual are part of both the DDI and the DKI (cross-referenced by

N/A
N/A
Protected

Academic year: 2022

Partager "Most of the routines, functions, and structures described in this manual are part of both the DDI and the DKI (cross-referenced by "

Copied!
200
0
0

Texte intégral

(1)
(2)

Copyrlght© 1992, 1991 UNIX System laboratories, Inc.

Copyrlght© 1990,1989,1988,1987,1986,1985,1984 AT&T All Rights Reserved

Printed In USA

Published by Prentice-Hall, Inc.

A Division of Simon & Schuster Englewood Cliffs, New Jersey 07632

No part of this publication may be reproduced or transmitted in any form or by any means-graphic, electronic, electrical, mechanical, or chemical, including photocopying, recording in any medium, tap- ing, by any computer or information storage and retrieval systems, etc., without prior permissions in writing from UNIX System Laboratories, Inc. (USL).

IMPORTANT NOTE TO USERS

While every effort has been made to ensure the accuracy and completeness of all information in this document, USL assumes no liability to any party for any loss or damage caused by errors or omis- sions or by statements of any kind in this document, its updates, supplements, or special editions, whether such errors, omissions, or statements result from negligence, accident, or any other cause.

USL further assumes no liability arising out of the application or use of any product or system described herein; nor any liability for incidental or consequential damages arising from the use of this document. USL disclaims all warranties regarding the Information contained herein, whether expressed, Implied or statutory, Including Implied warranties of merchantability or fitness for a particular purpose. USL makes no representation that the interconnection of products in the manner described herein will not infringe on existing or future patent rights, nor do the descriptions contained herein imply the granting of any license to make, use or sell equipment constructed in ac- cordance with this description.

USL reserves the right to make changes to any products herein without further notice.

TRADEMARKS

UNIX is a registered trademark of UNIX System Laboratories, Inc. in the USA and other countries.

Intel386 and Intel486 are trademarks of Intel Corp.

10 9 8 7 6 5 4 3 2

ISBN 0-13-879529-0

UNIX

PRESS A Prentice Hall Title

(3)
(4)

Introduction

Most of the routines, functions, and structures described in this manual are part of both the DDI and the DKI (cross-referenced by

DxDK).

As Figure 1 shows, drivers written to conform to both interfaces are portable to all computers sup- porting UNIX System V Release 4 Multi-Processor for Intel Processors, and they will be compatible through and beyond Release 4 Multi-Processor.

~

Note that drivers written to conform with this version of the OOI/OKI may not

NOTE run on systems running UNIX System V Release 4 or Release 4.1 Enhanced Security, as those releases do not implement the new multiprocessor inter- faces.

However, a driver written to conform to both interfaces is not guaranteed to be binary compatible with future releases of the operating system. Binary compati- bility requires more than just interface definition.

It also requires that values for

#define's be standardized, for example. The DDI/DKI is a source code inter- face. Following it is a necessary, but not sufficient, condition for binary compa- tibility. To understand more completely what is meant by "portable" and

"compatible" for the DDI and DKI, the scope of each interface must be more thoroughly explained.

Porting

Software is usually considered portable if it can be adapted to run in a different environment at a lower cost than if one were to rewrite it. The new environ- ment may include a different processor, operating system, and even the language in which the program is written, if a language translator is available.

More often, however, software is ported between environments that share an operating system, processor, and source language. The source code is modified to accommodate the differences in compilers, processors, or releases of the operating system.

In the past, device drivers did not port easily for one or more of the following reasons:

2

• To enhance functionality, members had been added to kernel data struc- tures accessed by drivers, or the sizes of existing members had been redefined.

OOI/OKI Reference Manual

(5)

Introduction

• Driver- Hardware. Most hardware drivers include an interrupt handling entry point, and may also perform direct memory access (DMA). These and other hardware-specific interactions make up the driver/hardware interface.

• Driver-Boot/Configuration Software. At boot time, the existence of a driver is made known to the system through information in system files, enabling the system to include the driver. The interaction between the driver and the boot and configuration software is the third interface affect- ing drivers. Refer to the sections on Installable Drivers (ID) in Chapter 3 of the Integrated Software Development Guide for more information on this.

Scope of the Device Driver Interface (001)

The primary goal of DDI is to facilitate both source and binary portability across successive releases of

UNIX

System V on a particular machine. Implicit in this goal is an important fact. Although there is only one DKI, each processor pro- duct has its own DDI. Therefore, if a driver is ever to be ported to different hardware, special attention must be paid to the machine-specific routines that make up the "DDI only" part of a driver. These include, but are not confined to, the driver/hardware interface (as described in the previous section). Some processor-specific functionality also may belong to the driver /kernel interface, and may not be easy to locate.

To achieve the goal of source and binary compatibility, the functions, routines, and structures specified in the DDI must be used according to these rules.

4

• Drivers cannot access system state structures (for example, u and

sysinfo)

directly.

• For structures external to the driver that may be accessed directly, only the utility functions provided in Section 3 of this manual should be used.

More generally, these functions should be used wherever possible.

• The header file

ddi.h

must be included at the end of the list of system header files. This header file "undefines" several macros that are reimple- mented as functions. Device driver-specific include files should be listed after

ddLh

to insure only the DDI/DKI interface is used by the driver.

OOI/OKI Reference Manual

(6)

Introduction

• Single-threaded drivers which conform to the DDI/DKI will be portable across uniprocessor implementations which support the DDI/DKI .

• Multiprocessor implementations which support the DDI/DKI are not required to support single-threaded drivers that conform to the DDI/DKI, although some multiprocessor implementations may choose to support such drivers by preventing concurrent execution of code within a given single-threaded driver.

Driver writers are encouraged to write multithreaded rather than single-

threaded drivers, as these will be more widely portable and can benefit from the parallelism inherent on a multiprocessor. Writing a multithreaded driver requires that shared data within the driver be protected against certain forms of concurrent access. This is done by using appropriate locking primitives to prevent concurrent execution of code which accesses a given piece of shared data. This document defines interfaces to several types of locking and syn- chronization primitives, namely basic locks, read/write locks, sleep locks and synchronization variables. Basic locks and read/write locks are intended for use·

within multithreaded drivers, while sleep locks and synchronization variables are useful in both single-threaded and multithreaded drivers. The characteris- tics of the various locking and synchronization primitives are described on the relevant manual pages in Section 3.

Audience

This manual is for experienced C programmers responsible for creating, modify- ing, or maintaining drivers that run on UNIX System V Release 4 Multi-

Processor for Intel Processors and beyond.

It

assumes that the reader is familiar with UNIX system internals and the advanced capabilities of the C Programming Language.

In addition, programmers writing multithreaded drivers are

assumed to be familiar with the fundamentals of concurrent programming and the appropriate use of locking primitives to protect shared data.

6

OOI/OKI Reference Manual

(7)

Introduction

The manual contains five sections:

D1 driver data definitions D2 driver entry points

D3 kernel functions used by drivers

D4 kernel data structures accessed by drivers D5 kernel #define's used by drivers

Each section number is suffixed with a letter indicating the interfaces covered.

The suffixes used are:

D Device Driver Interface only (DOl) K Driver- Kernel Interface only (DKI) DK both DOl and DKI

X DDI-only Platform-specific Interface

For example, open(D2DK) refers to the open entry point routine for a driver, not to the open(2) system call documented in the Programmer's Reference Manual.

For clarity, the platform-specific manual pages have been put in an appendix, separate from the rest of the DDI/DKI manual pages.

Reference pages contain the following headings, where applicable:

• NAME gives the routine's name and a short summary of its purpose.

• SYNOPSIS summarizes the routine's calling and return syntax.

• ARGUMENTS describes each of the routine's arguments.

• DESCRIPTION provides general information about the routine.

• STRUCTURE MEMBERS describes all accessible data structure members.

• RETURN VALUE summarizes the return value from the function.

• LEVEL gives an indication of when the routine can be used.

• NOTES provides restrictions on use and cautionary information.

• SEE ALSO gives sources for further information.

• EXAMPLE provides an example of common usage.

8 OOI/OKI Reference Manual

(8)

Introduction

STREAMS

The Programmer's Guide: STREAMS tells how to write drivers and access devices that use the STREAMS driver interface for character access.

The Programmer's Guide: Networking Interfaces provides detailed information, with examples, on the Section 3N library that comprises the

UNIX

system Tran- sport Level Interface (TU).

The Programmer's Guide: ANSI C and Programming Support Tools includes instruc- tions on using a number of

UNIX

utilities, including

make

and sees.

Operating Systems

The

UNIX

System V reference manuals are the standard reference materials for the

UNIX

operating system. This information is organized into three manuals, published separately for each system:

10

• The User's Reference Manual/System Administrator's Reference Manual

includes information on

UNIX

system user-level commands (Section 1) and administrative commands (Section 1M).

• The Programmer's Reference Manual: Operating System API includes infor- mation on

UNIX

system calls (Section 2) and C language library routines (Section 3).

• The System Files and Devices Reference Manual includes information on

UNIX

system file formats (Section 4), miscellaneous facilities (Section 5), and special device files (Section 7).

OOI/OKI Reference Manual

(9)

Table of Contents

bp _ mapout(D3DK) ... deallocate virtual address space for buffer page list brelse(D3DK) ... return a buffer to the system's free list btop (D3DK) ... convert size in bytes to size in pages (round down) btopr(D3DK) ... convert size in bytes to size in pages (round up) bufcall(D3DK) ... call a function when a buffer becomes available bzero(D3DK) ... clear memory for a given number of bytes canput(D3DK) ... test for room in a message queue canputnext(D3DK) ... test for flow control in a stream clrbuf(D3DK) ... erase the contents of a buffer cmn _err (D3DK) ... display an error message or panic the system copyb(D3DK) ... copy a message block copyin(D3DK) ... copy data from a user buffer to a driver buffer copymsg(D3DK) ... copy a message copyout(D3DK) ... copy data from a driver buffer to a user buffer datamsg(D3DK) ... test whether a message is a data message delay(D3DK) ... delay process execution for a specified number of clock ticks dma-IJageio(D3DK) ... break up an I/O request into manageable units drv _getparm(D3DK) ... retrieve kernel state information drv _ hztousec (D3DK) ... convert clock ticks to microseconds drv -IJriv(D3DK) ... determine whether credentials are privileged drv _setparm(D3DK) ... set kernel state information drv _ usectohz (D3DK) ... convert microseconds to clock ticks drv _ usecwait(D3DK) ... busy-wait for specified interval dtimeout(D3DK)

... execute a function on a specified processor, after a specified length of time dupb(D3DK) ... duplicate a message block dupmsg(D3DK) ... duplicate a message enableok(D3DK) ... allow a queue to be serviced esballoc(D3DK) ... allocate a message block using an externally-supplied buffer esbbcall(D3DK) ... call a function when an externally-supplied buffer can be allocated etoimajor(D3DK) ... convert external to internal major device number flushband(D3DK) ... flush messages in a specified priority band flushq(D3DK) ... flush messages on a queue freeb (D3DK) ... free a message block freemsg(D3DK) ... free a message freerbuf(D3DK) ... free a raw buffer header freezestr(D3DK) ... freeze the state of a stream geteblk(D3DK) ... get an empty buffer getemajor(D3DK) ... get external major device number geteminor(D3DK) ... get external minor device number

2 OOIIOKI Reference Manual

(10)

Table of Contents

procJef(D3DK) ... obtain a reference to a process for signaling proc_signal(D3DK) ... send a signal to a process proc _ unref(D3DK) ... release a reference to a process ptob (D3DK) ... convert size in pages to size in bytes put (D3DK) ... call a put procedure putbq (D3DK) ... place a message at the head of a queue putctl(D3DK) ... send a control message to a queue putctll (D3DK) ... send a control message with a one-byte parameter to a queue putnext(D3DK) ... send a message to the next queue putnextctl (D3DK) ... send a control message to a queue putnextctll (D3DK) ... send a control message with a one byte parameter to a queue putq (D3DK) ... put a message on a queue qenable(D3DK) ... schedule a queue's service routine to be run qprocsoff(D3DK) ... disable put and service routines qprocson(D3DK) ... enable put and service routines qreply(D3DK) ... send a message in the opposite direction in a stream qsize(D3DK) ... find the number of messages on a queue RD(D3DK) ... get a pointer to the read queue repinsb(D3DK) ... read bytes from I/O port to buffer repinsd(D3DK) ... read 32 bit words from I/O port to buffer repinsw(D3DK) ... read 16 bit words from I/O port to buffer repoutsb(D3DK) ... write bytes from buffer to an I/O port repoutsd(D3DK) ... write 32 bit words from buffer to an I/O port repoutsw(D3DK) ... write 16 bit words from buffer to an I/O port rmalloc(D3DK) ... allocate space from a private space management map rmallocmap(D3DK) ... allocate and initialize a private space management map rmalloc _ wait (D3DK) ... allocate space from a private space management map rmfree(D3DK) ... free space into a private space management map rmfreemap(D3DK) ... free a private space management map rmvb(D3DK) ... remove a message block from a message rmvq(D3DK) ... remove a message from a queue RW _ ALLOC (D3DK) ... allocate and initialize a read/write lock RW _ DEALLOC(D3DK) ... deallocate an instance of a read/write lock RW _ RDLOCK(D3DK) ... acquire a read/write lock in read mode RW _ TRYRDLOCK(D3DK) ... try to acquire a read/write lock in read mode RW _ TRYWRLOCK (D3DK) ... try to acquire a read/write lock in write mode RW_VNLOCK(D3DK) ... release a read/write lock RW _WRLOCK(D3DK) ... acquire a read/write lock in write mode SAMESTR(D3DK) ... test if next queue is same type SLEEP _ ALLOC(D3DK) ... allocate and initialize a sleep lock

4 OOI/OKI Reference Manual

(11)

Table of Contents

04. Data Structures

intro (D4DK) ... introduction to kernel data structures buf(D4DK) ... block I/O data transfer structure copyreq (D4DK) ... STREAMS transparent ioctl copy request structure copyresp (D4DK) ... STREAMS transparent ioctl copy response structure datab (D4DK) ... STREAMS data block structure free Jtn (D4DK) ... STREAMS driver's message free routine structure iocblk(D4DK) ... STREAMS ioctl structure iovec(D4DK) ... data storage structure for I/O using uio(D4DK) linkblk(D4DK) ... STREAMS multiplexor link structure module_info(D4DK) ... STREAMS driver and module information structure msgb(D4DK) ... STREAMS message block structure qinit(D4DK) ... STREAMS queue initialization structure queue (D4DK) ... STREAMS queue structure streamtab (D4DK) ... STREAMS driver and module declaration structure stroptions(D4DK) ... stream head option structure uio(D4DK) ... scatter/gather I/O request structure intro(D4X) ... introduction to DMA data structures dma_buf(D4X) ... DMA buffer descriptor structure dma _ cb (D4X) ... DMA command block structure

05. Kernel Defines

intro(D5DK) ... introduction to kernel #define's errnos(D5DK) ... error numbers messages(D5DK) ... STREAMS messages signals (D5DK) ... signal numbers

Appendix A: Migration from Release 3.2 to Release 4 Multi- Processor

Appendix B: Migration from Release 4 to Release 4 Multi- Processor

6 OOIIOKI Reference Manual

(12)

Table of Contents

mps _ msg: mps _ msg_getsrcmid, mps _ msg_getmsgtyp, mps _ msg_getbrlen, mps _ msg_getreqid, mps _ msg_getlsnid, mps _ msg_getsrcpid,

mps _ msg_gettrnsid, mps _ msg_getudp, mps _ msg_iscancel, mps _ msg_iseot, mps _ msg_iserror, mps _ msg_iscompletion, mps _ msg_ isreq (D3DK)

... ... macros used to decode message handler message mps_open_chan(D3DK) ... opens a channel

8 OOI/OKI Reference Manual

(13)

Permuted Index

lock LOCK ALLOC structure phalloc space management map rmallocmap read/write lock RW_ALLOC lock SLEEP ALLOC synchronization variable SV _ ALLOC management map rmalloc management map rmalloc _wait memory kmem _alloc buffer page list bp _ mapin dma jree _ buf free a previously dma jree _ cb free a previously externally-supplied buffer can be kmem _free free previously mps _free_tid frees a previously mps_get_msgbuf mps _get_tid enableok ASSERT verify / fragments when buffer space is not a function when a buffer becomes query whether a sleep lock is flow control in specified priority control in a specified priority messages in a specified priority get information about a queue or change information about a queue or allocate and initialize a LOCK acquire a deallocate an instance of a TRYLOCK try to acquire a UNLOCK release a specified priority band in a specified priority band locations in the kernel call a function when a buffer dma _get_best_ mode determine

2

I/O and wakeup processes within a buffer header completion of block I/O inb read a byte from a 8 inl read a 32 bit word from a 32

allocate and initialize a basic ... ... LOCK _ ALLOC(D3DK) allocate and initialize a pollhead ... phalloc(D3DK) allocate and initialize a private ... rmallocmap(D3DK) allocate and initialize a... RW _ ALLOC(D3DK) allocate and initialize a sleep ... SLEEP _ ALLOC(D3DK) allocate and initialize a... SV _ ALLOC(D3DK) allocate space from a private space ... ... rmalloc(D3DK) allocate space from a private space ... rmalloc_wait(D3DK) allocate space from kernel free ... kmem _alloc(D3DK) allocate virtual address space for ... ... bp _ mapin(D3DK) allocated DMA buffer descriptor ... dma_free_buf(D3X) allocated DMA command block ... dma _free _ cb(D3X) allocated /call a function when an ... esbbcall(D3DK) allocated kernel memory ... kmem jree(D3DK) allocated transaction id ... mps jree _ tid(D3DK) allocates a message buffer ... mps ~et_ msgbuf(D3DK) allocates transaction ids ... mps_get_tid(D3DK) allocb allocate a message block ... allocb(D3DK) allow a queue to be serviced ... enableok(D3DK) ASSERT verify assertion ... ... ASSERT(D3DK) assertion ... ASSERT(D3DK) available at the receiving agent

... ... mps _ AMPreceive _ frag(D3DK) available bufcall call ... bufcall(D3DK) available SLEEP LOCKA VAIL

... SLEEP_LOCKA V AlL(D3DK) band bcanput test for ... bcanput(D3DK) band bcanputnext test for flow... bcanputnext(D3DK) band flushband flush ... flushband(D3DK) band of the queue strqget ... ... strqget(D3DK) band of the queue strqset ... strqset(D3DK) basic lock LOCK _ ALLOC ... LOCK _ ALLOC(D3DK) basic lock ... LOCK(D3DK) basic lock LOCK _ DEALLOC ... LOCK_ DEALLOC(D3DK) basic lock ... ... ... TRYLOCK(D3DK) basic lock ... ... UNLOCK(D3DK) bcanput test for flow control in ... bcanput(D3DK) bcanputnext test for flow control... bcanputnext(D3DK) bcopy copy data between address ... bcopy(D3DK) becomes available bufcall ... bufcall(D3DK) best transfer mode for DMA command

... ... dma _get _ best_ mode(D3X) biodone release buffer after block ... biodone(D3DK) bioerror manipulate error field ... bioerror(D3DK) biowait suspend processes pending ... biowait(D3DK) bit I/O port ... inb(D3DK) bit I/O port ... inI(D3DK)

OOI/OKI Reference Manual

(14)

Permuted Index

pool mps Jree _ msgbuf puts a bufcall call a function when a when an externally-supplied clrbuf erase the contents of a data from a user buffer to a driver data from a driver buffer to a user free a previously allocated DMA dma_get_buf allocate a DMA dma bufDMA frees a list of data returns a pointer to a list of data block using an externally-supplied geteblk get an empty buffer/ mps_mk_bgrant construct a manipulate error field within a freerbuf free a raw retrieve error number from a getrbuf get a raw mpsJ;et_msgbuf allocates a message copies user data from the message copies user data from the message ngeteblk get an empty allocate virtual address space for virtual address space for buffer / mps _ mk _ breject construct a repinsb read bytes from I/O port to read 32 bit words from I/O port to read 16 bit words from I/O port to that corresponds to an outstanding a buffer grant in response to a a buffer reject in response to a / solicited data in fragments when copyin copy data from a user copyout copy data from a driver repoutsb write bytes from repoutsd write 32 bit words from repoutsw write 16 bit words from brelse return a drv usecwait inb read a / send a control message with a one outb write a clear memory for a given number of

4

buffer back into the free memory

... mps_free_msgbuf(D3DK) buffer becomes available ... bufcall(D3DK) buffer can be allocated / a function ... esbbca1l(D3DK) buffer ... clrbuf(D3DK) buffer copyin copy ... copyin(D3DK) buffer copyout copy ... copyout(D3DK) buffer descriptor dma_free_buf ... dma_free_buf(D3X) buffer descriptor ... dma J;et_ buf(D3X) buffer descriptor structure ... dma _ buf(D4X) buffer descriptors mps _free _ dmabuf

... mps _free _ dmabuf(D3DK) buffer descriptors mps_get_dmabuf

... mpsJ;et_dmabuf(D3DK) buffer esballoc allocate a message ... esballoc(D3DK) buffer ... geteblk(D3DK) buffer grant in response to a ... mps_mk_bgrant(D3DK) buffer header bioerror ... bioerror(D3DK) buffer header ... freerbuf(D3DK) buffer header geterror ... geterror(D3DK) buffer header .. ... ... getrbuf(D3DK) buffer ... mpsJ;et_msgbuf(D3DK) buffer mpsJ;et_soldata ... mpsJ;et_soldata(D3DK) buffer mps _get_ unsoldata ... mps J;et_ unsoldata(D3DK) buffer of the specified size ... ngeteblk(D3DK) buffer page list bp _ mapin ... bp _ mapin(D3DK) buffer page list / deallocate ... bp _ mapout(D3DK) buffer reject in response to a ... mps_mk_breject(D3DK) buffer ... repinsb(D3DK) buffer repinsd ... repinsd(D3DK) buffer repinsw ... repinsw(D3DK) buffer request / solicited data ... mps _ AMPreceive(D3DK) buffer request /construct ... mps_mk_bgrant(D3DK) buffer request Iconstruct ... mps_mk_breject(D3DK) buffer space is not available at/

... mps _ AMPreceive _ frag(D3DK) buffer to a driver buffer ... copyin(D3DK) buffer to a user buffer ... copyout(D3DK) buffer to an I/O port ... repoutsb(D3DK) buffer to an I/O port ... repoutsd(D3DK) buffer to an I/O port ... repoutsw(D3DK) buffer to the system's free list ... brelse(D3DK) busy-wait for specified interval ... drv _ usecwait(D3DK) byte from a 8 bit I/O port ... inb(D3DK) byte parameter to a queue ... putnextctl(D3DK) byte to an 8 bit I/O port ... outb(D3DK) bytes bzero ... bzero(D3DK)

OOI/OKI Reference Manual

(15)

Permuted Index

dma _get_ cb allocate a DMA dma cbDMA best transfer mode for DMA biowait suspend processes pending msgpullup linkb a driver message on the system response to a buffer Imps _ mk _ bgrant response to al mps_mk_breject be sent mps _ mk_ brdcst

initiate a solicited I mps _ mk_sol message to bel mpsJnk_unsolrply to be sent mps _ mk_ unsol clrbuf erase the ioctl band bcanputnext test for flow canputnext test for flow bcanput test for flow whether a message is a priority putctl send a putnextctl send a parameter to al putnextctll send a parameter to al putctll send a drY hztousec device number etoimajor device number itoemajor drY usectohz address pptophys pages (round down) btop pages (round up) btopr bytes ptob address vtop buffer mps _get _ soldata

by uio(D4DK) structure ureadc copyb copymsg in the kernel bcopy user buffer copyout driver buffer copyin uiomove copyreq STREAMS transparent ioctl

6

command block ... dma _get_ cb(D3X) command block structure ... dma _ cb(D4X) command I determine ... dma Jjet_ best_ mode(D3X) completion of block I/O ... biowait(D3DK) concatenate bytes in a message ... msgpullup(D3DK) concatenate two message blocks ... linkb(D3DK) console print display ... print(D2DK) construct a buffer grant in ... mps _ mk_ bgrant(D3DK) construct a buffer reject in ... mps_mk_breject(D3DK) constructs a broadcast message to

... mps_mk_brdcst(D3DK) constructs a message to be sent to

... mps_rnk_solrply(D3DK) constructs a message to be sent to ... mps_mk_sol(D3DK) constructs a unsolicited reply ... mps _ mk_ unsolrply(D3DK) constructs an unsolicited message ... mps _ mk_ unsol(D3DK) contents of a buffer ... clrbuf(D3DK) control a character device ... ... ... ioctl(D2DK) control in a specified priority ... bcanputnext(D3DK) control in a stream ... ... canputnext(D3DK) control in specified priority band ... bcanput(D3DK) control message pcmsg test ... pcmsg(D3DK) control message to a queue ... putctl(D3DK) control message to a queue .... ... ... ... putnextctl(D3DK) control message with a one byte ... ... putnextctl(D3DK) control message with a one-byte ... putctl(D3DK) convert clock ticks to microseconds ... drY _ hztousec(D3DK) convert external to internal major ... etoimajor(D3DK) convert internal to external major ... itoemajor(D3DK) convert microseconds to clock ticks ... drv _ usectohz(D3DK) convert page pointer to physical ... pptophys(D3DK) convert size in bytes to size in .... ... ... ... btop(D3DK) convert size in bytes to size in ... btopr(D3DK) convert size in pages to size in ... ptob(D3DK) convert virtual address to physical ... vtop(D3DK) copies user data from the message

... mps_get_soldata(D3DK) copies user data from the message

... mps _get_ unsoldata(D3DK) copy a character to space described ... ... ureadc(D3DK) copy a message block ... ... ... copyb(D3DK) copy a message ... ... ... ... ... copymsg(D3DK) copy data between address locations .. ... bcopy(D3DK) copy data from a driver buffer to a ... copyout(D3DK) copy data from a user buffer to a... copyin(D3DK) copy data using uio(D4DK) structure ... uiomove(D3DK) copy request structure ... copyreq(D4DK)

DOI/OKI Reference Manual

(16)

Permuted Index

intro introduction to kernel specified number of clock ticks specified number of clock/ delay ureadc copy a character to space / return a character from space a previously allocated DMA buffer dma_get_buf allocate a DMA buffer dma _ buf DMA buffer frees a list of data buffer a pointer to a list of data buffer for certain board types in the DMA command dma---zet_best_mode privileged drv -priv start initialize a close relinquish access to a init initialize a intr process a ioctl control a character virtual mapping for memory-mapped convert external to internal major numbers makedevice make

8

getemajor get external major geteminor get external minor getrnajor get internal major getrninor get internal minor convert internal to external major open gain access to a read read data from a size return size of logical block write write data to a send a message in the opposite qprocsoff requests on a DMA/ dma _disable system console print the system cmn _err free a previously allocated dma---zet_buf allocate a dma buf of hardware requests on a of hardware requests on a free a previously allocated dma _get_ cb allocate a dma cb

#define's ... intro(D5DK) delay delay process execution for a... delay(D3DK) delay process execution for a... delay(D3DK) described by uio(D4DK) structure ... ureadc(D3DK) described by uio(D4DK) structure ... uwritec(D3DK) descriptor dma _free _ buf free ... dma _free _ buf(D3X) descriptor ... dma_get_buf(D3X) descriptor structure ... dma _ buf(04X) descriptors mps _free _ dmabuf ... mps _free _ dmabuf(D3DK) descriptors mps ---zet _ dmabuf returns

... mps ---zet_ dmabuf(D3DK) designated slot / checks ... ics _ agent_ cmp(D3DK) determine best transfer mode for

... dma---zet_best_mode(D3X) determine whether credentials are ... drv -priv(D3DK) devflag driver flags ... devflag(DlD) device at system start-up ... start(D2DK) device ... close(D2DK) device ... init(D2DK) device interrupt ... intr(D2DK) device ... ioctl(D2DK) device mmap check ... mmap(D2DK) device number etoimajor ... ... etoimajor(D3DK) device number from major and minor

... makedevice(D3DK) device number ... getemajor(D3DK) device number ... geteminor(D3DK) device number ... ,. getrnajor(D3DK) device number ... getrninor(D3DK) device number itoemajor ... itoemajor(D3DK) device ... open(D2DK) device ... read(D2DK) device ... size(D2DK) device ... write(D2DK) direction in a stream qreply ... ... qreply(D3DK) disable put and service routines ... qprocsoff(D3DK) disable recognition of hardware ... dma _ disable(D3X) display a driver message on the ... print(D2DK) display an error message or panic ... crnn _ err(D3DK) DMA buffer descriptor dma_free_buf ... dma_free_buf(D3X) DMA buffer descriptor ... dma ---zet _ buf(D3X) DMA buffer descriptor structure ... dma _ buf(D4X) DMA channel/disable recognition ... dma _ disable(D3X) DMA channel/enable recognition ... dma _ enable(D3X) DMA command block dma _free _ cb ... dma _free _ cb(D3X) DMA command block ... dma _get_ cb(D3X) DMA command block structure ... dma _ cb(04X)

OOI/OKI Reference Manual

(17)

Permuted Index

dupb dupmsg geteblk get an ngeteblk get an qprocson requests on a DMAI dma _enable serviced I for transmission and sets up table character driver chpoll poll intro introduction to driver clrbuf bioerror manipulate cmn _err display an geterror retrieve errnos using an externally-supplied I externally-supplied buffer can bel internal major device number inform polling processes that an specified length of time itimeout processor, after al dtimeout clock ticks delay delay process getemajor get itoemajor convert internal to geteminor get number etoimajor convert esbbcall call a function when an I allocate a message block using an ics hostid returns the host id bioerror manipulate error queue qsize devflag driver priority band bcanputnext test for canputnext test for band bcanput test for priority band flushband flushq specified priority band

10

I receives solicited data in freeb freemsg

dupb duplicate a message block ... dupb(D3DK) duplicate a message block ... dupb(D3DK) duplicate a message ... dupmsg(D3DK) dupmsg duplicate a message ... dupmsg(D3DK) empty buffer ... geteblk(D3DK) empty buffer of the specified size ... ... ... ... ... ngeteblk(D3DK) enable put and service routines ... qprocson(D3DK) enable recognition of hardware ... dma _ enable(D3X) enableok allow a queue to be ... enableok(D3DK) entries for reception of reply I

... mps _ AMPsend Jsvp(D3DK) entry point for a non-STREAMS ... chpoll(D2DK) entry point routines ... intro(D2DK) erase the contents of a buffer ... clrbuf(D3DK) errnos error numbers ... errnos(D5DK) error field within a buffer header ... bioerror(D3DK) error message or panic the system ... cmn _ err(D3DK) error number from a buffer header ... geterror(D3DK) error numbers ... ... .... ... ... ... .... ... ... ... errnos(D5DK) esballoc allocate a message block ... esballoc(D3DK) esbbcall call a function when an ... ... ... ... ... ... esbbcall(D3DK) etoimajor convert external to ... etoimajor(D3DK) event has occurred pollwakeup ... pollwakeup(D3DK) execute a function after a ... itimeout(D3DK) execute a function on a specified ... dtimeout(D3DK) execution for a specified number of ... delay(D3DK) external major device number ... getemajor(D3DK) external major device number ... itoemajor(D3DK) external minor device number ... geteminor(D3DK) external to internal major device ... etoimajor(D3DK) externally-supplied buffer can bel ... esbbcall(D3DK) externally-supplied buffer ... esballoc(D3DK) field of the HOST ID record in thisl ... ics _ hostid(D3DK) field within a buffer header ... bioerror(D3DK) find the number of messages on a ... qsize(D3DK) flags ... devflag(DlD) flow control in a specified ... bcanputnext(D3DK) flow control in a stream ... canputnext(D3DK) flow control in specified priority ... bcanput(D3DK) flush messages in a specified ... flushband(D3DK) flush messages on a queue ... flushq(D3DK) flushband flush messages in a ... flushband(D3DK) flushq flush messages on a queue ... flushq(D3DK) fragments when buffer space is notl

... mps _ AMPreceive Jrag(D3DK) free a message block ... freeb(D3DK) free a message ... freemsg(D3DK)

OOI/OKI Reference Manual

(18)

Permuted Index

error field within a buffer freerbuf free a raw buffer retrieve error number from a buffer getrbuf get a raw buffer query whether a sleep lock is in thisl ics_hostid returns the I returns the host id field of the board types in the designated slot interconnect register of the board I field of the HOST ID record inl specified number of interconnectl register of the board in thel specified register of the board inl this I ics _ hostid returns the host kvtoppid get physical page phystoppid get physical page registers from a given cardslot a previously allocated transaction the host id field of the HOST mps _get_tid allocates transaction port information event has occurred pollwakeup of the queue strqget get of the queue strqset change drv _getparm retrieve kernel state drv _setparm set kernel state info STREAMS driver and module STREAMS driver and module qinit STREAMS queue LOCK ALLOC allocate and start-up start init phalloc allocate and managementl rmallocmap allocate and RW ALLOC allocate and SLEEP ALLOC allocate and variable SV ALLOC allocate and software request dma _ swstart I constructs a message to be sent to I constructs a message to be sent to bit I/O port insq LOCK DEALLOC deallocate an

12

header bioerror manipulate ... bioerror(D3DK) header ... freerbuf(D3DK) header geterror ... ... ... geterror(D3DK) header ... ... ... ... ... getrbuf(D3DK) held by the caller SLEEP _ LOCKOWNED

... SLEEP _ LOCKOWNED(D3DK) host id field of the HOST ID record ... ics _ hostid(D3DK) HOST ID record in this board'sl ... ics_hostid(D3DK) ics _ agent_ cmp checks for certain ... ics _ agent_ cmp(D3DK) ics _find Jec reads the ... ics _find(D3DK) ics _ hostid returns the host id ... ics _ hostid(D3DK) icsJdwr reads or writes a ... icsJdwr(D3DK) ics Jead reads the interconnect ... ics _ read(D3DK) ics _write writes a value into the ... ics _ write(D3DK) id field of the HOST ID record in ... ics _ hostid(D3DK) ID for kernel virtual address ... kvtoppid(D3DK) ID for physical address ... phystoppid(D3DK) ID Inumber of interconnect space ... icsJdwr(D3DK) id mps _free_tid frees .... ... ... mps _free _ tid(D3DK) ID record in this board'sl Ireturns ... ics_hostid(D3DK) ids ... mps _get_ tid(D3DK) inb read a byte from a 8 bit 1/0 ... inb(D3DK) info STREAMS driver and module ... info(DlDK) inform polling processes that an ... pollwakeup(D3DK) information about a queue or band ... strqget(D3DK) information about a queue or band ... strqset(D3DK) information ... drv _getparm(D3DK) information ... drv _setparm(D3DK) information ... info(DlDK) information structure module _info ... module _info(D4DK) init initialize a device ... init(D2DK) initialization structure .... ... ... ... ... qinit(D4DK) initialize a basic lock ... ... ... ... LOCK _ ALLOC(D3DK) initialize a device at system ... ... ... start(D2DK) initialize a device ... init(D2DK) initialize a pollhead structure ... phalloc(D3DK) initialize a private space ... rmallocmap(D3DK) initialize a read/write lock ... RW _ ALLOC(D3DK) initialize a sleep lock ... ... ... SLEEP _ ALLOC(D3DK) initialize a synchronization ... SV _ ALLOC(D3DK) initiate a DMA operation via ... dma_swstart(D3X) initiate a solicited data reply ... mps_mk_solrply(D3DK) initiate a solicited data transfer ... mps_mk_sol(D3DK) inl read a 32 bit word from a 32 ... inl(D3DK) insert a message into a queue ... insq(D3DK) insq insert a message into a queue ... insq(D3DK) instance of a basic lock ... LOCK _ DEALLOC(D3DK)

OOI/OKI Reference Manual

(19)

Permuted Index

dma J'ageio break up an physiock validate and issue raw uio scatter/gather strategy perform block iovec data storage structure for

copyreq STREAMS transparent copyresp STREAMS transparent iocblk STREAMS I/O using uio(D4DK) physiock validate and specified length of time external major device number between address locations in the intro introduction to intro introduction to kmem_alloc allocate space from allocate and clear space from kmem jree free previously allocated drY _getparm retrieve drY _ setparm set intro introduction to kvtoppid get physical page ID for kernel free memory kernel memory space from kernel free memory kernel virtual address max return the

mps~etJeplyJen get data processor, after a specified a function after a specified min return the linkblk STREAMS multiplexor blocks structure address space for buffer page address space for buffer page a buffer to the system's free mps _free _ dmabuf frees a / returns a pointer to a bcopy copy data between address RW_RDLOCK acquire a read/write try to acquire a read/write

14

I/O request into manageable units ... dmaJ'ageio(D3DK) I/O request ... physiock(D3DK) I/O request structure ... uio(D4DK) I/O ... strategy(D2DK) I/O using uio(D4DK) ... iovec(D4DK) iocblk STREAMS ioctl structure ... iocblk(D4DK) ioctl control a character device ... ioctl(D2DK) ioctl copy request structure ... copyreq(D4DK) ioctl copy response structure ... copyresp(D4DK) ioctl structure ... iocblk(D4DK) iovec data storage structure for ... iovec(D4DK) issue raw I/O request ... physiock(D3DK) itimeout execute a function after a... itimeout(D3DK) itoemajor convert internal to ... itoemajor(D3DK) kernel bcopy copy data ... bcopy(D3DK) kernel data structures ... intro(D4DK) kernel #define's ... intro(DSDK) kernel free memory ... kmem _ alloc(D3DK) kernel free memory kmem _ zalloc ... kmem _ zalloc(D3DK) kernel memory ... kmem_free(D3DK) kernel state information ... drY _getparm(D3DK) kernel state information ... drY _ setparm(D3DK) kernel utility routines ... intro(D3DK) kernel virtual address ... kvtoppid(D3DK) kmem_alloc allocate space from ... kmem_alloc(D3DK) kmem_free free previously allocated ... kmem_free(D3DK) kmem _ zalloc allocate and clear ... kmem _ zalloc(D3DK) kvtoppid get physical page ID for ... kvtoppid(D3DK) larger of two integers ... max(D3DK) length for a solicited reply ... mps ~etJeply _len(D3DK) length of time / on a specified ... dtimeout(D3DK) length of time itimeout execute ... itimeout(D3DK) lesser of two integers ... ... min(D3DK) link structure ... linkblk(D4DK) linkb concatenate two message ... linkb(D3DK) linkblk STREAMS multiplexor link ... linkblk(D4DK) list bp _ mapin allocate virtual... bp _ mapin(D3DK) list bp _ mapout deallocate virtual... bp _ mapout(D3DK) list brelse return ... brelse(D3DK) list of data buffer descriptors ... mps _free _ dmabuf(D3DK) list of data buffer descriptors ... mps~et_dmabuf(D3DK)

locations in the kernel ... bcopy(D3DK) LOCK acquire a basic lock ... LOCK(D3DK) lock in read mode ... RW _ RDLOCK(D3DK) lock in read mode RW TRYRDLOCK

... RW _ TRYRDLOCK(D3DK)

OOI/OKI Reference Manual

(20)

Permuted Index

mmap check virtual physmap obtain virtual address physmap jree free virtual address integers bzero clear allocate space from kernel free free previously allocated kernel and clear space from kernel free puts a buffer back into the free mmap check virtual mapping for adjrnsg trim bytes from a putbq place a allocb allocate a copyb copy a dupb duplicate a freeb free a rmvb remove a message unlinkb remove a rnsgb STREAMS esballoc allocate a linkb concatenate two mps ~et_ rnsgbuf allocates a copies user data from the copies user data from the copymsg copy a test whether a message is a data dupmsg duplicate a free Jtn STREAMS driver's freemsg free a getq get the next rmvq remove a Imps_rnsg_isreq macros used to decode in a stream qreply send a insq insert a datamsg test whether a message pcmsg test whether a used to decode message handler return number of bytes of data in a msgpullup concatenate bytes in a putq put a print display a driver cmn _ err display an error a message is a priority control canput test for room in a rmvb remove a message block from a putct1 send a control

16

mapping for memory-mapped device ... mmap(D2DK) mapping for physical addresses ... physmap(D3DK) mapping for physical addresses ... physmap _ free(D3DK) max return the larger of two ... max(D3DK) memory for a given number of bytes ... bzero(D3DK) memory kmem _ alloc ... kmem _ alloc(D3DK) memory kmem jree ... kmem _ free(D3DK) memory kmem _ zalloc allocate ... kmem _ zalloc(D3DK) memory pool mps _free _ msgbuf ... mps _free _ rnsgbuf(D3DK) memory-mapped device ... mmap(D2DK) message ... ... adjrnsg(D3DK) message at the head of a queue ... putbq(D3DK) message block ... allocb(D3DK) message block ... copyb(D3DK) message block ... dupb(D3DK) message block ... freeb(D3DK) message block from a message ... rmvb(D3DK) message block from the head of a... unlinkb(D3DK) message block structure ... msgb(D4DK) message block using ani ... esballoc(D3DK) message blocks ... linkb(D3DK) message buffer ... mps _get_ rnsgbuf(D3DK) message buffer mps~et_soldata ... mps_get_soldata(D3DK) message buffer mps ~et_ unsoldata

... mps _get_ unsoldata(D3DK) message ... copyrnsg(D3DK) message datarnsg ... datarnsg(D3DK) message . ... duprnsg(D3DK) message free routine structure ... free _ rtn(D4DK) message ... freernsg(D3DK) message from a queue ... getq(D3DK) message from a queue ... rmvq(D3DK) message handler message ... mps _ rnsg(D3DK) message in the opposite direction ... .... qreply(D3DK) message into a queue ... : ... insq(D3DK) message is a data message ... datamsg(D3DK) message is a priority control... .... pcrnsg(D3DK) message Imps_rnsg_isreq macros ... mps_msg(D3DK) message msgdsize ... msgdsize(D3DK) message ... msgpullup(D3DK) message on a queue ... putq(D3DK) message on the system console ... ... ... print(D2DK) message or panic the system ... cmn _ err(D3DK) message pcmsg test whether ... pcmsg(D3DK) message queue ... canput(D3DK) message ... rmvb(D3DK) message to a queue ... ... putct1(D3DK)

OOI/OKI Reference Manual

(21)

Permuted Index

solicited data in fragments whenl messages that are not part of any I

data that is not part of any I received request that is part of al messages for transmission and setsl opened channel data buffer descriptors into the free memory pool allocated transaction id a list of data buffer descriptors buffer for a solicited reply from the message buffer ids from the message buffer grant in response to a buffer I broadcast message to be sent reject in response to a buffer I

be sent to initiate a solicited I to be sent to initiate a solicited I unsolicited message to be sent unsolicited reply message to bel mps _ msg_getrnsgtyp,1 Imps_msgJ;etmsgtyp, Imps _ msgJ;etbrlen, mps _ msg_getreqid, mps _ msg: mps _ msg_getsrcmid, Imps _ msg_getbrlen, mps _ msgJ;etmsgtyp'/ mps _ msg:

Imps _ msgJ;etreqid, mps _ msgJ;etlsnid,

18

mps _ AMPreceive _ frag receives

... "','" mps _ AMPreceive _ frag(D3DK) mps_AMPsend sends unsolicited ... mps_AMPsend(D3DK) mps _ AMPsend _data sends solicited

... mps _ AMPsend _ data(D3DK) mps _ AMPsend Jeply replies to a

... mps _ AMPsend _reply(D3DK) mps _ AMPsend JSVP queues request

... mps_AMPsend_rsvp(D3DK) mps _close_chan closes a previously

... mps _close _ chan(D3DK) mps _free _ dmabuf frees a list of

... mps _free _ dmabuf(D3DK) mps _free _ msgbuf puts a buffer back

... mps _free _ msgbuf(D3DK) mps_free_tid frees a previously ... mps_free_tid(D3DK) mps_get_dmabuf returns a pointer to

... mpsJ;et_dmabuf(D3DK) mps J;et _ msgbuf allocates a message

... mps_get_msgbuf(D3DK) mpsJ;etJeply_len get data length

... mps J;et_reply Jen(D3DK) mpsJ;et_soldata copies user data

... mpsJ;et_soldata(D3DK) mps J;et _tid allocates transaction ... mps J;et _ tid(D3DK) mps J;et _ unsoldata copies user data

... mps J;et_ unsoldata(D3DK) mps_mk_bgrant construct a buffer

... mps _ mk_ bgrant(D3DK) mps_mk_brdcst constructs a ... mps_mk_brdcst(D3DK) mps _ mk _ breject construct a buffer

... mps_mk_breject(D3DK) mps_mk_sol constructs a message to ... mps_mk_sol(D3DK) mps_mk_solrply constructs a message

... mps _ mk _ solrply(D3DK) mps _ mk _ unsol constructs an ... mps _ mk _ unsol(D3DK) mps _ mk _ unsolrply constructs a

... mps _ mk _ unsolrply(D3DK) mps _ msg: mps _ msgJ;etsrcmid, ... mps _ msg(D3DK) mps _ msg_getbrlen, mps _ msg_getreqid,/

... mps _ msg(D3DK) mps _ msgJ;etlsnid,/ ... mps _ msg(D3DK) mps_msgJ;etrnsgtyp,/ ... mps_msg(D3DK) mps _ msg_getreqid, mps _ msg_getlsnid,1

... mps _ msg(D3DK) mps _ msg_getsrcmid, ... mps _ msg(D3DK) mps _ msgJ;etsrcpid'/ ... mps _ msg(D3DK)

OOIIOKI Reference Manual

(22)

Permuted Index

request dma _swsetup program a DMA it I stop software-initiated DMA dma swstart initiate a DMA qreply send a message in the stroptions stream head partner queue port 32 bit I/O port I data that corresponds to an 16 bit I/O port kvtoppid get physical phystoppid get physical virtual address space for buffer virtual address space for buffer getnextpg get next pptophys convert convert size in bytes to size in convert size in bytes to size in ptob convert size in crnn _err display an error message or a control message with a one-byte a control message with a one byte to a received request that is unsolicited messages that are not I sends solicited data that is not OTHERQ get pointer to queue's priority control message unbufcall cancel a biowait suspend processes strategy pollhead structure phystoppid get physical page ID for pptophys convert page pointer to vtop convert virtual address to obtain virtual address mapping for free virtual address mapping for address kvtoppid get address phystoppid get request mapping for physical addresses mapping for physical addresses physical address queue putbq

20

operation for a subsequent software ... dma _swsetup(D3X) operation on a channel and release ... dma _stop(D3X) operation via software request ... dma _swstart(D3X) opposite direction in a stream ... qreply(D3DK) option structure ... ... ... ... ... ... .... ... stroptions(D4DK) OTHERQ get pointer to queue's ... OTHERQ(D3DK) outb write a byte to an 8 bit 1/0 ... outb(D3DK) out! write a 32 bit long word to a ... outl(D3DK) outstanding buffer request ... .... ... ... mps _ AMPreceive(D3DK) outw write a 16 bit short word to a ... outw(D3DK) page ID for kernel virtual address ... kvtoppid(D3DK) page ID for physical address ... phystoppid(D3DK) page list bp _ mapin allocate ... bp _ mapin(D3DK) page list bp _ mapout deallocate ... bp _ mapout(D3DK) page pointer ... getnextpg(D3DK) page pointer to physical address ... pptophys(D3DK) pages (round down) btop ... btop(D3DK) pages (round up) btopr ... btopr(D3DK) pages to size in bytes ... ... ... ... ... ptob(D3DK) panic the system ... .... .... ... ... ... crnn _ err(D3DK) parameter to a queue putct!l send ... putctl(D3DK) parameter to a queue Isend ... putnextctl(D3DK) part of a request-response I I replies

... mps _ AMPsend Jeply(D3DK) part of any request-response I Isends

... mps _ AMPsend(D3DK) part of any request-responsel

... mps _ AMPsend _ data(D3DK) partner queue ... OTHERQ(D3DK) pcmsg test whether a message is a ... pcmsg(D3DK) pending bufcall request ... ... .... ... ... .... ... unbufcall(D3DK) pending completion of block I/O ... biowait(D3DK) perform block I/O ... strategy(D2DK) phalloc allocate and initialize a ... phalloc(D3DK) phfree free a pollhead structure ... phfree(D3DK) physical address ... ... .... ... ... ... .... ... phystoppid(D3DK) physical address ... pptophys(D3DK) physical address ... vtop(D3DK) physical addresses physmap ... physmap(D3DK) physical addresses physmap _free ... physmap _free(D3DK) physical page ID for kernel virtual.. ... ... .... kvtoppid(D3DK) physical page ID for physical ... phystoppid(D3DK) physiock validate and issue raw I/O ... physiock(D3DK) physmap obtain virtual address ... physmap(D3DK) physmap _free free virtual address ... physmap _free(D3DK) phystoppid get physical page ID for ... phystoppid(D3DK) place a message at the head of a ... putbq(D3DK)

OOI/OKI Reference Manual

(23)

Permuted Index

determine whether credentials are put call a put intr number of clock ticks delay delay proc Jef obtain a reference to a proc_signal send a signal to a proc _ unref release a reference to a SV _SIGNAL wake up one buffer after block I/O and wakeup block I/O biowait suspend SV _BROADCAST wake up all occurred pollwakeup inform polling / execute a function on a specified spl block/allow interrupts on a process for signaling process process subsequent hardware/ dmaJ>rog subsequent software/ dma_swsetup in bytes putq qprocsoff disable qprocson enable put call a preceding queue of a queue queue a one-byte parameter to a queue queue to a queue with a one byte parameter to a/

memory pool mps _free _ msgbuf routine to be run structure routines routines opposite direction in a stream on a queue available SLEEP LOCKA VAIL by the caller SLEEP _ LOCKOWNED canput test for room in a message flushq flush messages on a noenable prevent a

22

privileged drv J>riv ... drv J>riv(D3DK) procedure ... put(D3DK) process a device interrupt ... intr(D2DK) process execution for a specified ... delay(D3DK) process for signaling ... procJef(D3DK) process ... proc_signal(D3DK) process .. .... ... ... ... proc _ unref(D3DK) process sleeping on a/ ... SV _SIGNAL(D3DK) processes biodone release ... ... ... .... ... biodone(D3DK) processes pending completion of ... biowait(D3DK) processes sleeping on a/ ... SV _ BROADCAST(D3DK) processes that an event has ... pollwakeup(D3DK) processor, after a specified length/ ... dtimeout(D3DK) processor ... spl(D3DK) proc Jef obtain a reference to a... ... .... proc Jef(D3DK) proc_signal send a signal to a ... proc_signal(D3DK) proc_unref release a reference to a ... proc_unref(D3DK) program a DMA operation for a . ... ... .... dma J>rog(D3X) program a DMA operation for a ... dma _swsetup(D3X) ptob convert size in pages to size ... ptob(D3DK) put a message on a queue ... putq(D3DK) put and service routines ... qprocsoff(D3DK) put and service routines ... qprocson(D3DK) put call a put procedure ... put(D3DK) put procedure ... put(D3DK) put receive messages from the ... ... ... put(D2DK) putbq place a message at the head ... putbq(D3DK) putctl send a control message to a ... putctl(D3DK) putctll send a control message with ... ... putctl(D3DK) putnext send a message to the next ... .... ... putnext(D3DK) putnextctl send a control message ... putnextctl(D3DK) putnextctll send a control message ... ... ... .... putnextctl(D3DK) putq put a message on a queue ... putq(D3DK) puts a buffer back into the free ... mps _free _ msgbuf(D3DK) qenable schedule a queue's service ... qenable(D3DK) qinit STREAMS queue initialization ... qinit(D4DK) qprocsoff disable put and service ... .... ... ... qprocsoff(D3DK) qprocson enable put and service ... qprocson(D3DK) qreply send a message in the ... qreply(D3DK) qsize find the number of messages ... qsize(D3DK) query whether a sleep lock is

... SLEEP_LOCKA V AIL(D3DK) query whether a sleep lock is held

... SLEEP _ LOCKOWNED(D3DK) queue ... canput(D3DK) queue ... flushq(D3DK) queue from being scheduled ... noenable(D3DK)

OOI/OKI Reference Manual

(24)

Permuted Index

RW _ TRYRDLOCK try to acquire a RW _ TRYWRLOCK try to acquire a RW _ WRLOCK acquire a RW ALLOC allocate and initialize a deallocate an instance of a RW UNLOCK release a register of the board in/ ics _find queue put mps _ AMPsend Jeply replies to a fragments when/ mps _ AMPreceive _ frag corresponds to ani mps _ AMPreceive space is not available at the / and sets up table entries for a DMA channel dma disable disable a DMA channel dma enable enable /the host id field of the HOST ID signaling proc Jef obtain a proc _ unref release a / Jec reads the interconnect ics read reads the interconnect /writes a value into the specified /number of interconnect space mps_mk_breject construct a buffer UNLOCK RW UNLOCK proc_unref SLEEP UNLOCK wakeup processes biodone DMA operation on a channel and close message rmvb head of a message unlinkb rmvq buffer port to buffer port to buffer is part of a/ mps _ AMPsend Jeply

24

/ constructs a unsolicited up table entries for reception of get data length for a solicited sent to initiate a solicited data an I/O port

read/write lock in read mode ... RW _ TRYRDLOCK(D3DK) read/write lock in write mode

... RW _ TRYWRLOCK(D3DK) read/write lock in write mode ... RW _ WRLOCK(D3DK) read/write lock ... RW _ ALLOC(D3DK) read/write lock RW _ DEALLOC ... RW _ DEALLOC(D3DK) read/write lock ... RW _ UNLOCK(D3DK) Jec reads the interconnect ... ... ics _ find(D3DK) receive messages from the preceding ... put(D2DK) received request that is part of a/

... mps _ AMPsend _ reply(D3DK) receives solicited data in ... mps _ AMPreceive jrag(D3DK) receives solicited data that ... mps _ AMPreceive(D3DK) receiving agent /when buffer

... mps _ AMPreceive _ frag(D3DK) reception of reply messages ... mps _ AMPsend Jsvp(D3DK) recognition of hardware requests on ... dma _ disable(D3X) recognition of hardware requests on ... dma _ enable(D3X) record in this board's interconnect/ ... ics_hostid(D3DK) reference to a process for ... proc Jef(D3DK) reference to a process ... ... proc _ unref(D3DK) register of the board in the/ ... ics_find(D3DK) register of the board in the/ ... icsJead(D3DK) register of the board in the/ ... ics _ write(D3DK) registers from a given cardslot ID ... ics_rdwr(D3DK) reject in response to a buffer/ ... mps_mk_breject(D3DK) release a basic lock ... UNLOCK(D3DK) release a read/write lock ... RW _ UNLOCK(D3DK) release a reference to a process ... proc _ unref(D3DK) release a sleep lock ... SLEEP _ UNLOCK(D3DK) release buffer after block I/O and ... biodone(D3DK) release it /stop software-initiated ... dma_stop(D3X) relinquish access to a device ... ... close(D2DK) remove a message block from a... rmvb(D3DK) remove a message block from the ... unlinkb(D3DK) remove a message from a queue ... ... rmvq(D3DK) repinsb read bytes from I/O port to ... repinsb(D3DK) repinsd read 32 bit words from I/O ... repinsd(D3DK) repinsw read 16 bit words from I/O ... repinsw(D3DK) replies to a received request that

... mps _ AMPsend Jeply(D3DK) reply message to be sent ... mps _ mk _ unsolrply(D3DK) reply messages / and sets ... mps _ AMPsend Jsvp(D3DK) reply mps ~etJeply Jen ... mps ~et Jeply Jen(D3DK) reply / constructs a message to be

... ... mps _ mk _ solrply(D3DK) repoutsb write bytes from buffer to ... repoutsb(D3DK)

OOI/OKI Reference Manual

(25)

Permuted Index

size in bytes to size in pages STREAMS driver's message free qenable schedule a queue's service introduction to driver entry point introduction to kernel utility intro introduction to DMA utility qprocsoff disable put and service qprocson enable put and service mps _ AMPcancel cancels an ongoing a queue's service routine to be read/write lock of a read/write lock in read mode read/write lock in read mode read/write lock in write mode

in write mode type structure uio to be run qenable noenable prevent a queue from being putctl putnextctl byte parameter to a/ putnextctll one-byte parameter to a/ putctll direction in a stream qreply putnext proc _signal part of any / mps _ AMPsend _data not part of any / mps _ AMPsend a broadcast message to be an unsolicited message to be a unsolicited reply message to be reply / constructs a message to be / constructs a message to be srv qenable schedule a queue's qprocsoff disable put and

26

(round up) btopr convert ... btopr(D3DK) routine structure free _ rtn ... free Jtn(D4DK) routine to be run ... qenable(D3DK) routines intro ... intro(D2DK) routines intro ... intro(D3DK) routines ... intro(D3X) routines ... ... qprocsoff(D3DK) routines ... qprocson(D3DK) rsvp transaction ... mps _ AMPcancel(D3DK) run qenable schedule ... , ... qenable(D3DK) RW _ ALLOC allocate and initialize a... RW _ ALLOC(D3DK) RW _ DEALLOC deallocate an instance

... RW _ DEALLOC(D3DK) RW _ RDLOCK acquire a read/write lock

... RW _ RDLOCK(D3DK) RW _ TRYRDLOCK try to acquire a

... RW _ TRYRDLOCK(D3DK) RW _ TRYWRLOCK try to acquire a

... RW _ TRYWRLOCK(D3DK) RW _UNLOCK release a read/write lock

... RW _ UNLOCK(D3DK) RW _ WRLOCK acquire a read/write lock

... RW _ WRLOCK(D3DK) SAMESTR test if next queue is same ... SAMESTR(D3DK) scatter/gather II 0 request ... uio(D4DK) schedule a queue's service routine ... qenable(D3DK) scheduled ... noenable(D3DK) send a control message to a queue ... putctl(D3DK) send a control message to a queue ... putnextct1(D3DK) send a control message with a one ... putnextctl(D3DK) send a control message with a... putctl(D3DK) send a message in the opposite ... qreply(D3DK) send a message to the next queue ... putnext(D3DK) send a signal to a process ... proc_signal(D3DK) sends solicited data that is not

... mps _ AMPsend _ data(D3DK) sends unsolicited messages that are

... mps _ AMPsend(D3DK) sent mps_mk_brdcst constructs ... mps_mk_brdcst(D3DK) sent mps _ mk _ unsol constructs ... mps _ mk _ unsol(D3DK) sent mps _ mk _ unsolrply constructs

... mps _ mk _ unsolrply(D3DK) sent to initiate a solicited data ... mps _ mk_solrply(D3DK) sent to initiate a solicited datal ... mps_mk_sol(D3DK) service queued messages ... srv(D2DK) service routine to be run ... qenable(D3DK) service routines ... ... qprocsoff(D3DK)

OOI/OKI Reference Manual

(26)

Permuted Index

sleep lock

board types in the designated of the board in the specified of the board in the specified of the board in the specified a DMA operation for a subsequent initiate a DMA operation via a channel andl dma_stop stop mps _ AMPreceive _frag receives a message to be sent to initiate a ani mps _ AMPreceive receives

a message to be sent to initiate a get data length for a ureadc copy a character to uwritec return a character from bp _ mapin allocate virtual address I deallocate virtual address management map rmalloc allocate managementl rmalloc _wait allocate kmem alloc allocate kmem zalloc allocate and clear record in this board's interconnect management map rmfree free I data in fragments when buffer allocate space from a private allocate and initialize a private allocate space from a private rmfree free space into a private rmfreemap free a private I a specified number of interconnect drv _ usecwait busy-wait for on a specified processor, after a itimeout execute a function after a delay delay process execution for a space I icsJdwr reads or writes a

28

SLEEP_LOCK _ SIG acquire a sleep lock

... SLEEP_LOCK _ SIG(D3DK) SLEEP _ TRYLOCK try to acquire a

... SLEEP _ TRYLOCK(D3DK) SLEEP _UNLOCK release a sleep lock

... SLEEP _ UNLOCK(D3DK) slot Ichecks for certain ... ics_agent_cmp(D3DK) slot Ithe interconnect register ... icsJind(D3DK) slot Ithe interconnect register ... icsJead(D3DK) slot linto the specified register ... ics _ write(D3DK) software request Iprogram ... dma_swsetup(D3X) software request dma_swstart ... dma_swstart(D3X) software-initiated DMA operation on ... dma_stop(D3X) solicited data in fragments whenl

... mps _ AMPreceive _ frag(D3DK) solicited data reply I constructs ... mps _ mk _solrply(D3DK) solicited data that corresponds to

... mps _ AMPreceive(D3DK) solicited data that is not part of

... mps _ AMPsend _ data(D3DK) solicited data transfer I constructs ... mps _ mk _sol(D3DK) solicited reply mps ~etJeply }en

... mps ~et_reply }en(D3DK) space described by uio(D4DK)1 ... ureadc(D3DK) space described by uio(D4DK)1 ... uwritec(D3DK) space for buffer page list ... bp _ mapin(D3DK) space for buffer page list ... bp _ mapout(D3DK) space from a private space ... ... rmalloc(D3DK) space from a private space ... rmalloc_wait(D3DK) space from kernel free memory ... kmem _ alloc(D3DK) space from kernel free memory ... kmem _ zalloc(D3DK) space Ihost id field of the HOST ID ... ics _ hostid(D3DK) space into a private space ... rmfree(D3DK) space is not available at thel

... mps _ AMPreceive _frag(D3DK) space management map rmalloc ... rmalloc(D3DK) space management map rmallocmap ... rmallocmap(D3DK) space management map rmalloc _wait

... rmalloc _ wait(D3DK) space management map ... rmfree(D3DK) space management map ... rmfreemap(D3DK) space registers from a givenl ... ics Jdwr(D3DK) specified interval... drv _ usecwait(D3DK) specified length of time lfunction ... dtimeout(D3DK) specified length of time ... ... itimeout(D3DK) specified number of clock ticks ... delay(D3DK) specified number of interconnect ... ics Jdwr(D3DK)

OOI/OKI Reference Manual

(27)

Permuted Index

driver's message free routine iocblk STREAMS ioctl linkblk STREAMS multiplexor link driver and module information msgb STREAMS message block allocate and initialize a pollhead phfree free a pollhead qinit STREAMS queue initialization queue STREAMS queue driver and module declaration stroptions stream head option uio scatter/gather I/O request uiomove copy data using uio(D4DK) to space described by uio(D4DK) from space described by uio(D4DK) intro introduction to kernel data intro introduction to DMA data strlog /program a DMA operation for a /program a DMA operation for a completion of block I/O biowait synchronization variable sleeping on a synchronization/

of a synchronization variable sleeping on a synchronization/

variable synchronization variable SV ALLOC allocate and initialize a /wake up all processes sleeping on a / deallocate an instance of a wake up one process sleeping on a SV _WAIT sleep on a SV_WAIT_SIG sleep on a an error message or panic the display a driver message on the halt shut down the driver when the start initialize a device at brelse return a buffer to the reply/ /for transmission and sets up specified priority / bcanputnext canputnext priority band bcanput canput SAMESTR

30

structure free Jtn STREAMS ... free Jtn(D4DK) structure ... iocblk(D4DK) structure ... linkblk(D4DK) structure module_info STREAMS ... module _ info(D4DK) structure ... msgb(D4DK) structure phalloc ... phalloc(D3DK) structure ... phfree(D3DK) structure ... qinit(D4DK) structure ... queue(D4DK) structure streamtab STREAMS ... streamtab(D4DK) structure ... stroptions(D4DK) structure ... ... ... uio(D4DK) structure ... .... uiomove(D3DK) structure ureadc copy a character ... ureadc(D3DK) structure fretum a character ... uwritec(D3DK) structures ... intro(D4DK) structures ... intro(D4X) submit messages to the log driver ... strlog(D3DK) subsequent hardware request ... dma J>rog(D3X) subsequent software request ... dma _swsetup(D3X) suspend processes pending ... biowait(D3DK) SV _ ALLOC allocate and initialize a... SV _ ALLOC(D3DK) SV _BROADCAST wake up all processes

... SV _BROADCAST(D3DK) SV DEALLOC deallocate an instance

... SV _ DEALLOC(D3DK) SV _SIGNAL wake up one process ... SV _SIGNAL(D3DK) SV _WAIT sleep on a synchronization ... SV _ W AIT(D3DK) SV_WAIT_SIG sleep on a ... SV_WAIT_SIG(D3DK) synchronization variable ... SV _ ALLOC(D3DK) synchronization variable ... SV _ BROADCAST(D3DK) synchronization variable ... SV _ DEALLOC(D3DK) synchronization variable SV _SIGNAL

... SV _SIGNAL(D3DK) synchronization variable ... SV _ W AIT(D3DK) synchronization variable ... SV _WAIT _ SIG(D3DK) system cmn _err display... cmn _ err(D3DK) system console print ... print(D2DK) system shuts down ... halt(D2DK) system start-up ... start(D2DK) system's free list ... brelse(D3DK) table entries for reception of ... mps _ AMPsend Jsvp(D3DK) test for flow control in a... bcanputnext(D3DK) test for flow control in a stream ... canputnext(D3DK) test for flow control in specified ... bcanput(D3DK) test for room in a message queue ... ... canput(D3DK) test if next queue is same type ... SAMESTR(D3DK)

OOI/OKI Reference Manual

Références

Documents relatifs

In summary, the absence of lipomatous, sclerosing or ®brous features in this lesion is inconsistent with a diagnosis of lipo- sclerosing myxo®brous tumour as described by Ragsdale

Consistent  with  the  diverse  roles  of  the  cohesin  complex  in  chromosome  biology,  mutations  in  genes  encoding  cohesin  and  its  regulators  are 

These sessions were driven also by a significant interest in discussing challenges and directions for enhacing the impact of bioinformatics in fundamental and translational

properties of fitting mixture distributions, such as Type I error, power of the likelihood ratio test and bias of parameter estimates when using only F 2

TOUTES LES DIMENSIONS ET CONDITIONS EXISTANTES CRITIQUES RELATIVES AU PROJET AVANT LE DÉBUT DES TRAVAUX DE CONSTRUCTION ET DEVRA INFORMER L'ARCHITECTE DE TOUTES ERREURS, OMISSIONS

The analysis reveals that the in-bore projectile movements are both influenced by the tube geometry (curvature and straightness defects) and by the tube response during the

To that effect, we build up a simple model of water and solute mixing from two compositionally different, chemostatic tributaries, which predicts the trend (b-value) and

In this study, we evaluate the Above Ground Woody Biomass (AGWB) and the above ground woody Net Primary Productivity (NPP AGW ) simulated by the DVM ORCHIDEE across Ama- zonian