M
- M_BREAK
M_BREAK
- M_COPYIN
M_COPYIN
- M_COPYOUT
M_COPYOUT- transparent ioctl example
Bidirectional Data Transfer Example
- with M_IOCTL
M_IOCTL
- M_COPYOUT using transparent ioctl
- example
M_COPYOUT
- M_CTL
M_CTL- M_STOP
SO_MREADOFF and M_STOP
- SO_MREADOFF
SO_MREADOFF and M_STOP
- with line discipline module
Line-Discipline Module
- M_DATA
M_DATA
- M_DELAY
M_DELAY
- M_ERROR
M_ERROR
- M_FLUSH
M_FLUSH- flags
M_FLUSH
- flush read and write queues
M_FLUSH Arguments
and bi_flag values
- flush read side of stream
M_FLUSH Arguments
and bi_flag values
- flush write side of stream
M_FLUSH Arguments
and bi_flag values
- FLUSHR
M_FLUSH Arguments
and bi_flag values
- FLUSHRW
M_FLUSH Arguments
and bi_flag values
- FLUSHW
M_FLUSH Arguments
and bi_flag values
- in module example
Flushing a Queue
- packet mode
Packet Mode
- M_FLUSH message handling
- description
M_FLUSH Message Handling
- M_HANGUP
M_HANGUP
- M_IOCACK
M_IOCACK- with M_COPYOUT
M_COPYOUT
- with M_IOCTL
M_IOCTL
- M_IOCDATA
M_IOCDATA
- M_IOCDATA processing
- example
Bidirectional Data Transfer
M_COPYIN: Copy the address Structure
- M_IOCNAK
M_IOCNAK- with M_COPYOUT
M_COPYOUT
- with M_IOCTL
M_IOCTL
- M_IOCTL
M_IOCTL
M_IOCTL
- transparent
M_IOCTL
- with M_COPYOUT
M_COPYOUT
- M_PASSFP
M_PASSFP
- M_PCPROTO
M_PCPROTO
- M_PCRSE
M_PCRSE
- M_PCSIG
M_PCSIG
- M_PROTO
M_PROTO
M_PROTO
- M_READ
M_READ
- M_RSE
M_RSE
- M_SETOPTS
M_SETOPTS- SO_FLAG
M_SETOPTS
- SO_ISTTY
M_SIG
- so_readopt options
Read Options
- M_SIG
M_SIG- in signaling
signal Message
- M_STOP
SO_MREADOFF and M_STOP
- M_STOPI
SO_MREADOFFI and M_STOPI
- M_UNHANGUP
M_UNHANGUP
- managing extended buffers in multithreaded environment
- example
esballoc Example
- manipulating modules
Manipulating Modules
- master driver
- in pseudo-tty subsystem
STREAMS-based Pseudo-Terminal Subsystem
- open
Pseudo-TTY Drivers: ptm and pts
- mdb
adb Command
- memory-mapped I/O
Extended STREAMS Buffers
- message
Stream in More Detail- accessing queue information
Using Queue Information
- allocation
Message Allocation and Freeing
- container for data and control information
Overview of Streams in Kernel Space
- create priority band message
Message Direction
- data alignment
Data Alignment
- definitions of priority band fields
Using Queue Information
- flow control
Controlling Data Flow and Priorities
- freeing
Message Allocation and Freeing
- getmsg
Send and Receive Messages
- getpmsg
Send and Receive Messages
- high-priority
Flow Control Mechanism
Message Ordering with One Priority Band
- linking
Message Linkage
- M_BREAK
M_BREAK
Ordinary Messages, Description
of Communication Flow
- M_COPYIN
M_COPYIN
High-Priority Messages, Description
of Communication Flow
- M_COPYOUT
M_COPYOUT
High-Priority Messages, Description
of Communication Flow
- M_CTL
SO_MREADOFF and M_STOP
M_CTL
Ordinary Messages, Description
of Communication Flow
- M_DATA
M_DATA
Ordinary Messages, Description
of Communication Flow
- M_DELAY
M_DELAY
Ordinary Messages, Description
of Communication Flow
- M_ERROR
M_ERROR
High-Priority Messages, Description
of Communication Flow
- M_FLUSH
High-Priority Messages, Description
of Communication Flow
- M_FLUSH
M_FLUSH
- M_HANGUP
M_HANGUP
High-Priority Messages, Description
of Communication Flow
- M_IOCACK
M_IOCACK
High-Priority Messages, Description
of Communication Flow
- M_IOCDATA
M_IOCDATA
High-Priority Messages, Description
of Communication Flow
- M_IOCNAK
M_IOCNAK
High-Priority Messages, Description
of Communication Flow
- M_IOCTL
M_IOCTL
Ordinary Messages, Description
of Communication Flow
- M_PASSFP
M_PASSFP
Ordinary Messages, Description
of Communication Flow
- M_PCPROTO
M_PCPROTO
High-Priority Messages, Description
of Communication Flow
- M_PCRSE
M_PCRSE
- M_PCSIG
M_PCSIG
High-Priority Messages, Description
of Communication Flow
- M_PROTO
M_PROTO
Ordinary Messages, Description
of Communication Flow
- M_READ
M_READ
High-Priority Messages, Description
of Communication Flow
- M_RSE
M_RSE
- M_SETOPTS
M_SETOPTS
Ordinary Messages, Description
of Communication Flow
- M_SIG
Ordinary Messages, Description
of Communication Flow
- M_START
High-Priority Messages, Description
of Communication Flow
- M_STARTI
High-Priority Messages, Description
of Communication Flow
- M_STOP
High-Priority Messages, Description
of Communication Flow
- M_STOPI
SO_MREADOFFI and M_STOPI
High-Priority Messages, Description
of Communication Flow
- M_UNHANGUP
M_UNHANGUP
High-Priority Messages, Description
of Communication Flow
- msgb structure
Simple Message Referencing
the Data Block
Message Structure
- priority
Message Queues and Message Priority
- putmsg
Send and Receive Messages
- putpmsg
Send and Receive Messages
- qband structure
qband Structure
- qinit structure
Entry Points
- queue
Message Queues
Message Ordering in a Queue
- queue priority
Message Ordering in
a Queue
- queue structure
queue Structure
- queues
Queued Messages
Message Queueing and Priorities
- read options
Read Options
- recovering from allocation failure
Recovering From No Buffers
- recovering from no buffers
Recovering From No Buffers
- retrieve priority band message
Message Direction
- service interface
Driver and Module Service Interfaces
- shared data
Shared Data
- SO_MREADOFI
SO_MREADOFFI and M_STOPI
- translation between user application and kernel
Overview of Streams in Kernel Space
- types
Message Types
- using qband information
Using qband Information
- write option
Write Options
- message (STREAMS)
- direction
Sending and Receiving Messages
- flow
Message Processing Procedures
- handled by ptem
Pseudo-TTY Emulation Module: ptem
- handled by pckt
Packet Mode
- high-priority
High-Priority Messages
High-Priority Messages, Description
of Communication Flow
- ldterm read side
Read-Side Processing
- ldterm write side
Write-Side Processing
- linking into queues
Simple Message Referencing
the Data Block
- M_DATA
Sending and Receiving Messages
- M_PCPROTO
Sending and Receiving Messages
- M_PROTO
Sending and Receiving Messages
- ordinary
M_SIG
Ordinary Messages
Ordinary Messages, Description
of Communication Flow
- processing
Message Processing Procedures
- sending/receiving
Sending and Receiving Messages
- structures
Message Structure
- types
Message Types
- message block
message block
- message block structure
- example
Simple Message Referencing
the Data Block
- message ordering
Shared Data Block
- message priorities
Message Ordering in a Queue
- message queue
message queue- priority
Controlling Data Flow and Priorities
- priority levels
Message Queueing Priority
- message types
- rules for changing
Message Type Change Rules
- messages
- kernel
Message Types
- messages sent by driver to stream head
- M_ERROR
Opening the Loop-Around Driver
- M_HANGUP
Opening the Loop-Around Driver
- M_SIG/M_PCSIG
Opening the Loop-Around Driver
- modldrv structure
- driver operations and linkage information
modldrv
- modlinkage structure
- module link information
modlinkage
- revision level of loadable modules
modlinkage
- modlstrmod structure
- module operations and linkage information
modlstrmod
- module
module- difference with driver
Pushing a Module
- draining
Closing the Stream
- ioctl control
Module and Driver Control
- line discipline
line discipline
- manipulation
Manipulating Modules
- pushable
pushable module
- reusability
Module Reusability
- module entry point structure
- example
Entry Points
- module information structure
- example
Entry Points
- module put
- example
Example of a Module put Procedure
- module service procedure
- example
Module service Procedure
- module unloading
- outstanding esballoc callback
Unloading a Module that Uses esballoc
- module_info structure
- example
Entry Points
- monitor streams events
Input and Output Polling
- msgb structure
Simple Message Referencing
the Data Block
- msgdsize
Kernel Utility Interfaces
- MT SAFE
- cb_flag for driver
MT SAFE Driver
- driver
MT SAFE Driver
- f_flag for module
MT SAFE Module
- module
MT SAFE Module
- multiple process write
- same pipe
Atomic Writes
- multiplexer
multiplexer- building
Streams Before
Link
Building a Multiplexer
- controlling stream
Streams Before
Link
- data routing
Routing Data Through a Multiplexer
- declarations
Multiplexing Driver Example
- definition
Configuring Multiplexed Streams
- design guidelines
Design Guidelines
- dismantling
Dismantling a Multiplexer
- driver
Lower Read put Procedure
Multiplexing Driver Example
- example
Multiplexer Construction Example
Multiplexer Construction Example
- lower
STREAMS Multiplexers
- lower connection
Connecting Lower Streams
Connecting Lower Streams
- lower disconnection
Disconnecting Lower Streams
- lower read put procedure
Lower Read put Procedure
Lower Read put Procedure
- lower stream
lower stream
Configuring Multiplexed Streams
- lower write service procedure
Lower Write service Procedure
- lower write service procedure
Lower Write service Procedure
- minor device connect
Connecting And Disconnecting Lower Streams
- minor device disconnect
Disconnecting Lower Streams
- pseudo-device driver
Configuring Multiplexed Streams
- upper
STREAMS Multiplexers
- upper stream
upper stream
Configuring Multiplexed Streams
- upper write service procedure
Upper Write service Procedure
Sample
- upper-queue write put procedure
Upper Write put Procedure
Sample
- multiplexer ID
- in multiplexer building
Streams Before
Link
- in multiplexer dismantling
Dismantling a Multiplexer
- multiplexing STREAMS
Configuring Multiplexed Streams
- multithread framework
- MT SAFE
MT SAFE Modules and Drivers
- perimeters
MT SAFE Modules and Drivers
- multithreaded kernel
Multithreading the Kernel- porting to
Preparing to Port
- multithreaded module
- explicit locks
MT SAFE Modules Using Explicit Locks
- explicit locks, constraints
Constraints When Using Locks
- preserving message ordering
Preserving Message Ordering
- multithreaded perimeter
- choosing a type
Choosing a Perimeter Type
- defining a type
Defining Perimeter Types
- description
MT STREAMS Perimeters
- exclusive/shared access flags
Outer Perimeter Flag
- flags
Choosing a Perimeter
Type
- fully-hot
Hot Perimeters
- inner
Inner Perimeters
- inner perimeter flags
Choosing a Perimeter
Type
- outer
Outer Perimeters
- outer perimeter flags
Inner Perimeter Flags
- PERMOD
PERMOD Perimeter
- routines used inside a perimeter
Routines Used Inside a Perimeter
- multithreaded STREAMS
- concepts and terminology
Multithreaded (MT) STREAMS Overview
- multithreaded STREAMS module with outer perimeter
- example
Multithread Module with Outer Perimeter
- multithreaded STREAMS pseudo-driver using an inner perimeter
- example
Multithreaded, Loadable, STREAMS
Pseudo-Driver
- muxuwput
- upper-queue write put procedure
Upper Write put Procedure
Sample