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
|
/* $NetBSD: ppbus_base.h,v 1.8 2008/04/15 15:02:29 cegger Exp $ */
/*
* Copyright (c) 1997, 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/sys/dev/ppbus/ppbconf.h,v 1.17.2.1 2000/05/24 00:20:57 n_hibma Exp $
*
*/
#ifndef __PPBUS_BASE_H
#define __PPBUS_BASE_H
#include <sys/bus.h>
#include <dev/ppbus/ppbus_msq.h>
/* Parallel Port Chipset control bits. */
#define STROBE 0x01
#define AUTOFEED 0x02
#define nINIT 0x04
#define SELECTIN 0x08
#define IRQENABLE 0x10
#define PCD 0x20
#define nSTROBE inv(STROBE)
#define nAUTOFEED inv(AUTOFEED)
#define INIT inv(nINIT)
#define nSELECTIN inv(SELECTIN)
#define nPCD inv(PCD)
/* Parallel Port Chipset status bits. */
#define TIMEOUT 0x01
#define nFAULT 0x08
#define SELECT 0x10
#define PERROR 0x20
#define nACK 0x40
#define nBUSY 0x80
/* Byte mode signals */
#define HOSTCLK nSTROBE /* Also ECP mode signal */
#define HOSTBUSY nAUTOFEED
#define ACTIVE1284 nSELECTIN /* Also ECP mode signal */
#define PTRCLK nACK
#define PTRBUSY BUSY
#define ACKDATAREQ PERROR
#define XFLAG SELECT /* Also ECP mode signal */
#define nDATAVAIL nERROR
/* ECP mode signals */
#define HOSTACK nAUTOFEED
#define nREVREQ nINIT
#define PERICLK nACK
#define PERIACK BUSY
#define nACKREV PERROR
#define nPERIREQ nERROR
/* EPP mode signals */
#define nWRITE nSTROBE
#define nDATASTB nAUTOFEED
#define nADDRSTB nSELECTIN
#define nWAIT BUSY
/*
#define nINIT nRESET
#define nACK nINTR
*/
/* ECR register bit definitions */
#define ECR_FIFO_EMPTY 0x1 /* ecr register - bit 0 */
#define ECR_FIFO_FULL 0x2 /* ecr register - bit 1 */
#define ECR_SERVICE_INTR 0x4 /* ecr register - bit 2 */
#define ECR_ENABLE_DMA 0x8 /* ecr register - bit 3 */
#define ECR_nFAULT_INTR 0x10 /* ecr register - bit 4 */
/* bits 5 through 7 */
#define ECR_STD 0x00 /* Standard mode */
#define ECR_PS2 0x20 /* Bidirectional mode */
#define ECR_FIFO 0x40 /* Fast Centronics mode */
#define ECR_ECP 0x60 /* ECP mode */
#define ECR_EPP 0x80 /* EPP mode */
#define ECR_TST 0xc0 /* Test mode*/
/* Used for IEEE 1284 'PNP' detection */
#define PPBUS_PNP_PRINTER 0
#define PPBUS_PNP_MODEM 1
#define PPBUS_PNP_NET 2
#define PPBUS_PNP_HDC 3
#define PPBUS_PNP_PCMCIA 4
#define PPBUS_PNP_MEDIA 5
#define PPBUS_PNP_FDC 6
#define PPBUS_PNP_PORTS 7
#define PPBUS_PNP_SCANNER 8
#define PPBUS_PNP_DIGICAM 9
#define PPBUS_PNP_UNKNOWN 10
/* Structure to store status information. */
struct ppbus_status {
unsigned char status;
unsigned int timeout:1;
unsigned int error:1;
unsigned int select:1;
unsigned int paper_end:1;
unsigned int ack:1;
unsigned int busy:1;
};
/* How tsleep() is called in ppbus_request_bus(). */
#define PPBUS_DONTWAIT 0
#define PPBUS_NOINTR 0
#define PPBUS_WAIT 0x1
#define PPBUS_INTR 0x2
#define PPBUS_POLL 0x4
#define PPBUS_FOREVER -1
/* PPBUS interface functions (includes parport interface) */
int ppbus_scan_bus(device_t);
void ppbus_pnp_detect(device_t);
int ppbus_request_bus(device_t, device_t, int, unsigned int);
int ppbus_release_bus(device_t, device_t, int, unsigned int);
int ppbus_get_status(device_t, struct ppbus_status *);
int ppbus_poll_bus(device_t, int, char, char, int);
/* Parport interface function prototypes */
int ppbus_read_ivar(device_t, int, unsigned int *);
int ppbus_write_ivar(device_t, int, unsigned int *);
int ppbus_reset_epp_timeout(device_t);
int ppbus_ecp_sync(device_t);
int ppbus_set_mode(device_t, int, int);
int ppbus_get_mode(device_t);
int ppbus_write(device_t, char *, int, int, size_t *);
int ppbus_read(device_t, char *, int, int, size_t *);
int ppbus_exec_microseq(device_t, struct ppbus_microseq * *);
int ppbus_io(device_t, int, u_char *, int, u_char);
int ppbus_dma_malloc(device_t, void **, bus_addr_t *, bus_size_t);
int ppbus_dma_free(device_t, void **, bus_addr_t *, bus_size_t);
int ppbus_add_handler(device_t, void (*)(void *), void *);
int ppbus_remove_handler(device_t, void (*)(void *));
#endif /* __PPBUS_BASE_H */
|