Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
.\" $NetBSD: ppbus.4,v 1.15 2009/08/19 23:17:25 wiz Exp $
.\"
.\" Copyright (c) 1998, 1999 Nicolas Souchu
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD: src/share/man/man4/ppbus.4,v 1.14.2.5 2001/08/17 13:08:39 ru Exp $
.\"
.Dd August 19, 2009
.Dt PPBUS 4
.Os
.Sh NAME
.Nm ppbus
.Nd Parallel Port Bus system with GPIO
.Sh SYNOPSIS
.Cd "ppbus* at atppc?"
.Cd "options PPBUS_VERBOSE"
.Cd "options PPBUS_DEBUG"
.Cd "options DEBUG_1284"
.Pp
.Cd "gpio* at ppbus?"
.Cd "lpt* at ppbus?"
.Cd "plip* at ppbus?"
.Cd "pps* at ppbus?"
.\" Cd "lpbb* at ppbus?"
.\" Cd "vpo* at ppbus?"
.Sh DESCRIPTION
The
.Nm
system provides a uniform, modular, and architecture-independent
system for the implementation of drivers to control various parallel
devices, and to use different parallel port chip sets.
.Sh DEVICE DRIVERS
In order to write new drivers or port existing drivers, the
.Nm
system provides the following facilities:
.Bl -bullet -offset indent
.It
architecture-independent macros or functions to access parallel ports
.It
mechanism to allow various devices to share the same parallel port
.It
a
.Xr gpio 4
interface to access the individual pins
.It
a user interface named
.Xr ppi 4
that allows parallel port access from outside the kernel without
conflicting with kernel-in drivers.
.El
.Ss Developing new drivers
The
.Nm
system has been designed to support the development of standard
and non-standard software:
.Pp
.Bl -column "Driver" -compact
.It Em Driver Ta Em Description
.\" It Sy vpo Ta "VPI0 parallel to Adaptec AIC-7110 SCSI controller driver" .
It uses standard and non-standard parallel port accesses.
.It Sy ppi Ta "Parallel port interface for general I/O"
.It Sy pps Ta "Pulse per second Timing Interface"
.\" It Sy lpbb Ta "Philips official parallel port I2C bit-banging interface"
.El
.Ss Porting existing drivers
Another approach to the
.Nm
system is to port existing drivers.
Various drivers have already been ported:
.Pp
.Bl -column "Driver" -compact
.It Em Driver Ta Em Description
.It Sy lpt Ta "lpt printer driver"
.It Sy lp Ta "plip network interface driver"
.El
.Pp
.Nm
should let you port any other software even from other operating
systems that provide similar services.
.Sh PARALLEL PORT CHIP SETS
Parallel port chip set support is provided by
.Xr atppc 4 .
.Pp
The
.Nm
system provides functions and macros to request service from the
.Nm
including reads, writes, setting of parameters, and bus requests/releases.
.Pp
.Xr atppc 4
detects chip set and capabilities and sets up interrupt handling.
It makes
methods available for use to the
.Nm
system.
.Sh PARALLEL PORT MODEL
The logical parallel port model chosen for the
.Nm
system is the AT
parallel port model.
Consequently, for the
.Em atppc
implementation of
.Nm ,
most of the services provided by
.Nm
will
translate into I/O instructions on actual registers.
However, other parallel port implementations may require more than
one I/O instruction to do a single logical register operation on
data, status and control virtual registers.
.Ss Description
The parallel port may operate in the following modes:
.Bl -bullet -offset indent
.It
Compatible (Centronics -- the standard parallel port mode) mode,
output byte
.It
Nibble mode, input 4-bits
.It
Byte (PS/2) mode, input byte
.It
Extended Capability Port (ECP) mode, bidirectional byte
.It
Enhanced Parallel Port (EPP) mode, bidirectional byte
.El
.Ss Compatible mode
This mode defines the protocol used by most PCs to transfer data
to a printer.
In this mode, data is placed on the port's data lines, the printer
status is checked for no errors and that it is not busy, and then
a data Strobe is generated by the software to clock the data to
the printer.
.Pp
Many I/O controllers have implemented a mode that uses a FIFO buffer
to transfer data with the Compatibility mode protocol.
This mode is referred to as
.Dq Fast Centronics
or
.Dq Parallel Port FIFO mode .
.Ss Nibble mode
The Nibble mode is the most common way to get reverse channel data
from a printer or peripheral.
When combined with the standard host to printer mode, a bidirectional
data channel is created.
Inputs are accomplished by reading 4 of the 8 bits of the status
register.
.Ss Byte mode
In this mode, the data register is used either for outputs and inputs.
All transfers are 8-bits long.
Channel direction must be negotiated when doing
.Tn IEEE 1248
compliant operations.
.Ss Extended Capability Port mode
The ECP protocol was proposed as an advanced mode for communication
with printer and scanner type peripherals.
Like the EPP protocol, ECP mode provides for a high performance
bidirectional communication path between the host adapter and the
peripheral.
.Pp
ECP protocol features include:
.Bl -item -offset indent
.It
Run_Length_Encoding (RLE) data compression for host adapters (not
supported in these drivers)
.It
FIFO's for both the forward and reverse channels
.It
DMA or programmed I/O for the host register interface.
.El
.Ss Enhanced Parallel Port mode
The EPP protocol was originally developed as a means to provide a
high performance parallel port link that would still be compatible
with the standard parallel port.
.Pp
The EPP mode has two types of cycle: address and data.
What makes the difference at hardware level is the strobe of the
byte placed on the data lines.
Data are strobed with nAutofeed, addresses are strobed with nSelectin
signals.
.Pp
A particularity of the ISA implementation of the EPP protocol is
that an EPP cycle fits in an ISA cycle.
In this fashion, parallel port peripherals can operate at close to
the same performance levels as an equivalent ISA plug-in card.
.Pp
At software level, you may implement the protocol you wish, using
data and address cycles as you want.
This is for the
.Tn IEEE 1284
compatible part.
Peripheral vendors may implement protocol handshake with the
following status lines: PError, nFault and Select.
Try to know how these lines toggle with your peripheral, allowing
the peripheral to request more data, stop the transfer and so on.
.Pp
At any time, the peripheral may interrupt the host with the nAck
signal without disturbing the current transfer.
.Ss Mixed modes
Some manufacturers, like SMC, have implemented chip sets that
support mixed modes.
With such chip sets, mode switching is available at any time by
accessing the extended control register.
All ECP-capable chip sets can switch between standard, byte, fast
centronics, and ECP modes.
Some ECP chip sets also support switching to EPP mode.
.Sh IEEE 1284 1994 Standard
.Ss Background
This standard is also named
.Do
IEEE Standard Signaling Method for a Bidirectional Parallel Peripheral
Interface for Personal Computers
.Dc .
It defines a signaling method for asynchronous, fully interlocked,
bidirectional parallel communications between hosts and printers
or other peripherals.
It also specifies a format for a peripheral identification string
and a method of returning this string to the host.
.Pp
This standard is architecture independent and only specifies dialog
handshake at signal level.
One should refer to architecture specific documentation in order
to manipulate machine dependent registers, mapped memory or other
methods to control these signals.
.Pp
The
.Tn IEEE 1284
protocol is fully oriented with all supported parallel port modes.
The computer acts as master and the peripheral as slave.
.Pp
Any transfer is defined as a finite state automate.
It allows software to properly manage the fully interlocked scheme
of the signaling method.
The compatible mode is supported
.Dq as is
without any negotiation because it is the default, backward-compatible
transfer mode.
Any other mode must be firstly negotiated by the host to check it
is supported by the peripheral, then to enter one of the forward
idle states.
.Pp
At any time, the slave may want to send data to the host.
The host must negotiate to permit the peripheral to complete the
transfer.
Interrupt lines may be dedicated to the requesting signals
to prevent time consuming polling methods.
.Pp
If the host accepts the transfer, it must firstly negotiate the
reverse mode and then start the transfer.
At any time during reverse transfer, the host may terminate the
transfer or the slave may drive wires to signal that no more data
is available.
.Ss Implementation
.Tn IEEE 1284 Standard
support has been implemented at the top of the
.Nm
system as a set of procedures that perform high level functions
like negotiation, termination, transfer in any mode without bothering
you with low level characteristics of the standard.
.Pp
.Tn IEEE 1284
interacts with the
.Nm
system as little as possible.
That means you still have to request the
.Nm
when you want to access it, and of course, release it when finished.
.Sh ARCHITECTURE
.Ss Chip set, ppbus and device layers
First, there is the
.Em chip set
layer, the lowest of the
.Nm
system.
It provides chip set abstraction through a set of low level functions
that maps the logical model to the underlying hardware.
.Pp
Secondly, there is the
.Em ppbus
layer that provides functions to:
.Bl -enum -offset indent
.It
share the parallel port bus among the daisy-chain like connected
devices
.It
manage devices linked to
.Nm
.It
propose an arch-independent interface to access the hardware layer.
.El
.Pp
Finally, the
.Em device
layer represents the traditional device drivers such as
.Xr lpt 4
which now use an abstraction instead of real hardware.
.Ss Parallel port mode management
Operating modes are differentiated at various
.Nm
system layers.
There is a difference between a
.Em capability
and a
.Em mode .
A chip set may have a combination of capabilities, but at any one
time the
.Nm
system operates in a single mode.
.Pp
Nibble mode is a
.Em virtual
mode: the actual chip set would be in standard mode and the driver
would change its behavior to drive the right lines on the parallel
port.
.Pp
Each child device of
.Nm
must set its operating mode and other parameters whenever it requests
and gets access to its parent
.Nm .
.Sh FEATURES
.Ss The boot process
.Nm
attachment tries to detect any PnP parallel peripheral (according to
.%T "Plug and Play Parallel Port Devices" draft from (c)1993-4
.Tn Microsoft Corporation )
then probes and attaches known device drivers.
.Pp
During probe, device drivers should request the
.Nm
and try to determine if the right capabilities are present in the
system.
.Ss Bus request and interrupts
.Nm
reservation via a bus request is mandatory not to corrupt I/O of
other devices.
For example, when the
.Xr lpt 4
device is opened, the bus will be
.Dq allocated
to the device driver and attempts to reserve the bus for another
device will fail until the
.Xr lpt 4
driver releases the bus.
.Pp
Child devices can also register interrupt handlers to be called
when a hardware interrupt occurs.
In order to attach a handler, drivers must own the bus.
Drivers should have interrupt handlers that check to see if the
device still owns the bus when they are called and/or ensure that
these handlers are removed whenever the device does not own the
bus.
.Ss Micro-sequences
.Em Micro-sequences
are a general purpose mechanism to allow fast low-level manipulation
of the parallel port.
Micro-sequences may be used to do either standard (in
.Tn IEEE 1284
modes) or non-standard transfers.
The philosophy of micro-sequences is to avoid the overhead of the
.Nm
layer for a sequence of operations and do most of the job at the
chip set level.
.Pp
A micro-sequence is an array of opcodes and parameters.
Each opcode codes an operation (opcodes are described in
.Xr microseq 9 ) .
Standard I/O operations are implemented at ppbus level whereas
basic I/O operations and microseq language are coded at adapter
level for efficiency.
.\" .Pp
.\" As an example, the
.\" .Xr vpo 4
.\" driver uses micro-sequences to implement:
.\" .Bl -bullet -offset indent
.\" .It
.\" a modified version of the Nibble transfer mode
.\" .It
.\" various I/O sequences to initialize, select and allocate the
.\" peripheral
.\" .El
.Ss GPIO interface
Pins 1 through 17 of the parallel port can be controlled through the
.Xr gpio 4
interface, pins 18 through 25 are hardwired to ground.
Pins 10 through 13 and pin 15 are input pins, the others are output
pins.
Some of the pins are inverted by the hardware, the values read or
written are adjusted accordingly.
Note that the
.Xr gpio 4
interface starts at 0 when numbering pins.
.Sh SEE ALSO
.Xr atppc 4 ,
.Xr gpio 4 ,
.Xr lpt 4 ,
.Xr plip 4 ,
.Xr ppi 4 ,
.\" Xr vpo 4 ,
.Xr microseq 9
.Sh HISTORY
The
.Nm
system first appeared in
.Fx 3.0 .
.Sh AUTHORS
This manual page is based on the
.Fx
.Nm ppbus
manual page.
The information has been updated for the
.Nx
port by Gary Thorpe.
.Sh BUGS
The
.Nm
framework is still experimental and not enabled by default yet.