1 1.8 cegger /* $NetBSD: ppbus_base.h,v 1.8 2008/04/15 15:02:29 cegger Exp $ */ 2 1.2 bjh21 3 1.1 jdolecek /* 4 1.1 jdolecek * Copyright (c) 1997, 1998, 1999 Nicolas Souchu 5 1.1 jdolecek * All rights reserved. 6 1.1 jdolecek * 7 1.1 jdolecek * Redistribution and use in source and binary forms, with or without 8 1.1 jdolecek * modification, are permitted provided that the following conditions 9 1.1 jdolecek * are met: 10 1.1 jdolecek * 1. Redistributions of source code must retain the above copyright 11 1.1 jdolecek * notice, this list of conditions and the following disclaimer. 12 1.1 jdolecek * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 jdolecek * notice, this list of conditions and the following disclaimer in the 14 1.1 jdolecek * documentation and/or other materials provided with the distribution. 15 1.1 jdolecek * 16 1.1 jdolecek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 1.1 jdolecek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 1.1 jdolecek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 1.1 jdolecek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 1.1 jdolecek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 1.1 jdolecek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 1.1 jdolecek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 1.1 jdolecek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 1.1 jdolecek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 1.1 jdolecek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 1.1 jdolecek * SUCH DAMAGE. 27 1.1 jdolecek * 28 1.1 jdolecek * $FreeBSD: src/sys/dev/ppbus/ppbconf.h,v 1.17.2.1 2000/05/24 00:20:57 n_hibma Exp $ 29 1.1 jdolecek * 30 1.1 jdolecek */ 31 1.1 jdolecek #ifndef __PPBUS_BASE_H 32 1.1 jdolecek #define __PPBUS_BASE_H 33 1.1 jdolecek 34 1.7 ad #include <sys/bus.h> 35 1.1 jdolecek 36 1.1 jdolecek #include <dev/ppbus/ppbus_msq.h> 37 1.1 jdolecek 38 1.1 jdolecek 39 1.1 jdolecek /* Parallel Port Chipset control bits. */ 40 1.1 jdolecek #define STROBE 0x01 41 1.1 jdolecek #define AUTOFEED 0x02 42 1.1 jdolecek #define nINIT 0x04 43 1.1 jdolecek #define SELECTIN 0x08 44 1.1 jdolecek #define IRQENABLE 0x10 45 1.1 jdolecek #define PCD 0x20 46 1.1 jdolecek 47 1.1 jdolecek #define nSTROBE inv(STROBE) 48 1.1 jdolecek #define nAUTOFEED inv(AUTOFEED) 49 1.1 jdolecek #define INIT inv(nINIT) 50 1.1 jdolecek #define nSELECTIN inv(SELECTIN) 51 1.1 jdolecek #define nPCD inv(PCD) 52 1.1 jdolecek 53 1.1 jdolecek /* Parallel Port Chipset status bits. */ 54 1.1 jdolecek #define TIMEOUT 0x01 55 1.1 jdolecek #define nFAULT 0x08 56 1.1 jdolecek #define SELECT 0x10 57 1.1 jdolecek #define PERROR 0x20 58 1.1 jdolecek #define nACK 0x40 59 1.1 jdolecek #define nBUSY 0x80 60 1.1 jdolecek 61 1.1 jdolecek /* Byte mode signals */ 62 1.1 jdolecek #define HOSTCLK nSTROBE /* Also ECP mode signal */ 63 1.1 jdolecek #define HOSTBUSY nAUTOFEED 64 1.1 jdolecek #define ACTIVE1284 nSELECTIN /* Also ECP mode signal */ 65 1.1 jdolecek #define PTRCLK nACK 66 1.1 jdolecek #define PTRBUSY BUSY 67 1.1 jdolecek #define ACKDATAREQ PERROR 68 1.1 jdolecek #define XFLAG SELECT /* Also ECP mode signal */ 69 1.1 jdolecek #define nDATAVAIL nERROR 70 1.1 jdolecek 71 1.1 jdolecek /* ECP mode signals */ 72 1.1 jdolecek #define HOSTACK nAUTOFEED 73 1.1 jdolecek #define nREVREQ nINIT 74 1.1 jdolecek #define PERICLK nACK 75 1.1 jdolecek #define PERIACK BUSY 76 1.1 jdolecek #define nACKREV PERROR 77 1.1 jdolecek #define nPERIREQ nERROR 78 1.1 jdolecek 79 1.1 jdolecek /* EPP mode signals */ 80 1.1 jdolecek #define nWRITE nSTROBE 81 1.1 jdolecek #define nDATASTB nAUTOFEED 82 1.1 jdolecek #define nADDRSTB nSELECTIN 83 1.1 jdolecek #define nWAIT BUSY 84 1.1 jdolecek /* 85 1.1 jdolecek #define nINIT nRESET 86 1.1 jdolecek #define nACK nINTR 87 1.1 jdolecek */ 88 1.1 jdolecek 89 1.1 jdolecek /* ECR register bit definitions */ 90 1.1 jdolecek #define ECR_FIFO_EMPTY 0x1 /* ecr register - bit 0 */ 91 1.4 perry #define ECR_FIFO_FULL 0x2 /* ecr register - bit 1 */ 92 1.4 perry #define ECR_SERVICE_INTR 0x4 /* ecr register - bit 2 */ 93 1.1 jdolecek #define ECR_ENABLE_DMA 0x8 /* ecr register - bit 3 */ 94 1.4 perry #define ECR_nFAULT_INTR 0x10 /* ecr register - bit 4 */ 95 1.1 jdolecek /* bits 5 through 7 */ 96 1.1 jdolecek #define ECR_STD 0x00 /* Standard mode */ 97 1.4 perry #define ECR_PS2 0x20 /* Bidirectional mode */ 98 1.1 jdolecek #define ECR_FIFO 0x40 /* Fast Centronics mode */ 99 1.1 jdolecek #define ECR_ECP 0x60 /* ECP mode */ 100 1.1 jdolecek #define ECR_EPP 0x80 /* EPP mode */ 101 1.1 jdolecek #define ECR_TST 0xc0 /* Test mode*/ 102 1.1 jdolecek 103 1.1 jdolecek /* Used for IEEE 1284 'PNP' detection */ 104 1.1 jdolecek #define PPBUS_PNP_PRINTER 0 105 1.1 jdolecek #define PPBUS_PNP_MODEM 1 106 1.1 jdolecek #define PPBUS_PNP_NET 2 107 1.1 jdolecek #define PPBUS_PNP_HDC 3 108 1.1 jdolecek #define PPBUS_PNP_PCMCIA 4 109 1.1 jdolecek #define PPBUS_PNP_MEDIA 5 110 1.1 jdolecek #define PPBUS_PNP_FDC 6 111 1.1 jdolecek #define PPBUS_PNP_PORTS 7 112 1.1 jdolecek #define PPBUS_PNP_SCANNER 8 113 1.1 jdolecek #define PPBUS_PNP_DIGICAM 9 114 1.1 jdolecek #define PPBUS_PNP_UNKNOWN 10 115 1.1 jdolecek 116 1.1 jdolecek 117 1.1 jdolecek /* Structure to store status information. */ 118 1.1 jdolecek struct ppbus_status { 119 1.1 jdolecek unsigned char status; 120 1.1 jdolecek 121 1.1 jdolecek unsigned int timeout:1; 122 1.1 jdolecek unsigned int error:1; 123 1.1 jdolecek unsigned int select:1; 124 1.1 jdolecek unsigned int paper_end:1; 125 1.1 jdolecek unsigned int ack:1; 126 1.1 jdolecek unsigned int busy:1; 127 1.1 jdolecek }; 128 1.1 jdolecek 129 1.1 jdolecek /* How tsleep() is called in ppbus_request_bus(). */ 130 1.1 jdolecek #define PPBUS_DONTWAIT 0 131 1.1 jdolecek #define PPBUS_NOINTR 0 132 1.1 jdolecek #define PPBUS_WAIT 0x1 133 1.1 jdolecek #define PPBUS_INTR 0x2 134 1.1 jdolecek #define PPBUS_POLL 0x4 135 1.1 jdolecek #define PPBUS_FOREVER -1 136 1.1 jdolecek 137 1.1 jdolecek 138 1.1 jdolecek /* PPBUS interface functions (includes parport interface) */ 139 1.8 cegger int ppbus_scan_bus(device_t); 140 1.8 cegger void ppbus_pnp_detect(device_t); 141 1.8 cegger int ppbus_request_bus(device_t, device_t, int, unsigned int); 142 1.8 cegger int ppbus_release_bus(device_t, device_t, int, unsigned int); 143 1.8 cegger int ppbus_get_status(device_t, struct ppbus_status *); 144 1.8 cegger int ppbus_poll_bus(device_t, int, char, char, int); 145 1.1 jdolecek 146 1.1 jdolecek /* Parport interface function prototypes */ 147 1.8 cegger int ppbus_read_ivar(device_t, int, unsigned int *); 148 1.8 cegger int ppbus_write_ivar(device_t, int, unsigned int *); 149 1.8 cegger int ppbus_reset_epp_timeout(device_t); 150 1.8 cegger int ppbus_ecp_sync(device_t); 151 1.8 cegger int ppbus_set_mode(device_t, int, int); 152 1.8 cegger int ppbus_get_mode(device_t); 153 1.8 cegger int ppbus_write(device_t, char *, int, int, size_t *); 154 1.8 cegger int ppbus_read(device_t, char *, int, int, size_t *); 155 1.8 cegger int ppbus_exec_microseq(device_t, struct ppbus_microseq * *); 156 1.8 cegger int ppbus_io(device_t, int, u_char *, int, u_char); 157 1.8 cegger int ppbus_dma_malloc(device_t, void **, bus_addr_t *, bus_size_t); 158 1.8 cegger int ppbus_dma_free(device_t, void **, bus_addr_t *, bus_size_t); 159 1.8 cegger int ppbus_add_handler(device_t, void (*)(void *), void *); 160 1.8 cegger int ppbus_remove_handler(device_t, void (*)(void *)); 161 1.1 jdolecek 162 1.1 jdolecek #endif /* __PPBUS_BASE_H */ 163