summaryrefslogtreecommitdiffstats
path: root/share/man/man9/ppbconf.9
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man9/ppbconf.9')
-rw-r--r--share/man/man9/ppbconf.9205
1 files changed, 205 insertions, 0 deletions
diff --git a/share/man/man9/ppbconf.9 b/share/man/man9/ppbconf.9
new file mode 100644
index 0000000..9b95e72
--- /dev/null
+++ b/share/man/man9/ppbconf.9
@@ -0,0 +1,205 @@
+.\" Copyright (c) 1998, 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.
+.\"
+.\"
+.Dd April 5, 1998
+.Dt PPBCONF 9
+.Os FreeBSD
+.Sh NAME
+.Nm ppbconf
+.Nd
+ppbus developer's guide
+.Sh SYNOPSIS
+.Fd "#include <dev/ppbus/ppbconf.h>"
+.Sh DESCRIPTION
+See
+.Xr ppbus 4
+for ppbus description.
+.Sh PPBUS STRUCTURES
+Each ppbus layer
+.Po
+.Em adapter ,
+.Em ppbus
+and
+.Em device
+.Pc
+is described by one or more C structure.
+.Ss The adapter layer
+.Bd -literal
+struct ppb_adapter {
+
+ void (*intr_handler)(int);
+ void (*reset_epp_timeout)(int);
+ void (*ecp_sync)(int);
+
+ int (*exec_microseq)(int, struct ppb_microseq *, int *);
+
+ int (*setmode)(int, int);
+
+ void (*outsb_epp)(int, char *, int);
+ void (*outsw_epp)(int, char *, int);
+ void (*outsl_epp)(int, char *, int);
+ void (*insb_epp)(int, char *, int);
+ void (*insw_epp)(int, char *, int);
+ void (*insl_epp)(int, char *, int);
+
+ char (*r_dtr)(int);
+ char (*r_str)(int);
+ char (*r_ctr)(int);
+ char (*r_epp)(int);
+ char (*r_ecr)(int);
+ char (*r_fifo)(int);
+
+ void (*w_dtr)(int, char);
+ void (*w_str)(int, char);
+ void (*w_ctr)(int, char);
+ void (*w_epp)(int, char);
+ void (*w_ecr)(int, char);
+ void (*w_fifo)(int, char);
+};
+.Ed
+.Pp
+This structure is the interface between
+.Xr ppc 4
+layer and upper ppbus system levels. For each ppc device, this
+structure is filled with generic i/o functions that may be redefined if
+needed for particular chipsets.
+.Pp
+Developers are really encouraged to use the
+exec_microseq entry to avoid indirect function call overhead. See
+.Xr microseq 9
+for more info.
+.Ss The ppbus layer
+.Bd -literal
+struct ppb_driver
+{
+ struct ppb_device *(*probe)(struct ppb_data *ppb);
+ int (*attach)(struct ppb_device *pdp);
+ char *name;
+};
+.Ed
+.Bd -literal
+struct ppb_data {
+
+#define PPB_PnP_PRINTER 0
+#define PPB_PnP_MODEM 1
+#define PPB_PnP_NET 2
+#define PPB_PnP_HDC 3
+#define PPB_PnP_PCMCIA 4
+#define PPB_PnP_MEDIA 5
+#define PPB_PnP_FDC 6
+#define PPB_PnP_PORTS 7
+#define PPB_PnP_SCANNER 8
+#define PPB_PnP_DIGICAM 9
+#define PPB_PnP_UNKNOWN 10
+ int class_id; /* not a PnP device if class_id < 0 */
+
+ ushort mode; /* IEEE 1284-1994 mode
+ * NIBBLE, PS2, EPP, ECP */
+ ushort avm; /* IEEE 1284-1994 available
+ * modes */
+
+ struct ppb_link *ppb_link; /* link to the adapter */
+ struct ppb_device *ppb_owner; /* device which owns the bus */
+ LIST_HEAD(, ppb_device) ppb_devs; /* list of devices on the bus */
+ LIST_ENTRY(ppb_data) ppb_chain; /* list of busses */
+};
+.Ed
+.Ss The device layer
+.Bd -literal
+/* microseqences used for GET/PUT operations */
+struct ppb_xfer {
+ struct ppb_microseq *prolog; /* loop prologue */
+ struct ppb_microseq *body; /* loop body */
+ struct ppb_microseq *epilog; /* loop epilogue */
+};
+.Ed
+.Bd -literal
+struct ppb_context {
+ int valid; /* 1 if the struct is valid */
+ int mode; /* operating mode */
+
+ struct microseq *curpc; /* pc in curmsq */
+ struct microseq *curmsq; /* currently executed microseq */
+};
+.Ed
+.Bd -literal
+struct ppb_device {
+
+ int id_unit; /* unit of the device */
+ char *name; /* name of the device */
+
+ ushort mode; /* current mode of the device */
+ ushort avm; /* available modes of the device */
+
+ struct ppb_context ctx; /* context of the device */
+
+ /* mode dependent get msq. If NULL,
+ * IEEE1284 code is used */
+ struct ppb_xfer
+ get_xfer[PPB_MAX_XFER];
+
+ /* mode dependent put msq. If NULL,
+ * IEEE1284 code is used */
+ struct ppb_xfer
+ put_xfer[PPB_MAX_XFER];
+
+ void (*intr)(int); /* interrupt handler */
+
+ struct ppb_data *ppb; /* link to the ppbus */
+
+ LIST_ENTRY(ppb_device) chain; /* list of devices on the bus */
+};
+.Ed
+.Ss Linking these structures all together
+.Bd -literal
+struct ppb_link {
+
+ int adapter_unit; /* unit of the adapter */
+ int base; /* base address of the port */
+ int id_irq; /* != 0 if irq enabled */
+
+#define EPP_1_9 0x0 /* default */
+#define EPP_1_7 0x1
+ int epp_protocol; /* EPP protocol: 0=1.9, 1=1.7 */
+
+ struct ppb_adapter *adapter; /* link to the ppc adapter */
+ struct ppb_data *ppbus; /* link to the ppbus */
+};
+.Ed
+.Sh EXAMPLE
+See vpo.c source file.
+.Sh SEE ALSO
+.Xr ppbus 4 ,
+.Xr ppi 4 ,
+.Xr microseq 9
+.Sh HISTORY
+The
+.Nm
+manual page first appeared in
+.Fx 3.0 .
+.Sh AUTHOR
+This
+manual page was written by
+.An Nicolas Souchu .
OpenPOWER on IntegriCloud