186d7f5d3SJohn Marino /*- 286d7f5d3SJohn Marino * Copyright (c) 2001 Alcove - Nicolas Souchu 386d7f5d3SJohn Marino * All rights reserved. 486d7f5d3SJohn Marino * 586d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 686d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 786d7f5d3SJohn Marino * are met: 886d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 986d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 1086d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 1186d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 1286d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 1386d7f5d3SJohn Marino * 1486d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1586d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1686d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1786d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1886d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1986d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2086d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2186d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2286d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2386d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2486d7f5d3SJohn Marino * SUCH DAMAGE. 2586d7f5d3SJohn Marino * 2686d7f5d3SJohn Marino * $FreeBSD: src/sys/isa/ppcreg.h,v 1.10.2.4 2001/10/02 05:21:45 nsouch Exp $ 2786d7f5d3SJohn Marino * $DragonFly: src/sys/dev/misc/ppc/ppcreg.h,v 1.2 2003/06/17 04:28:40 dillon Exp $ 2886d7f5d3SJohn Marino * 2986d7f5d3SJohn Marino */ 3086d7f5d3SJohn Marino #ifndef __PPCREG_H 3186d7f5d3SJohn Marino #define __PPCREG_H 3286d7f5d3SJohn Marino 3386d7f5d3SJohn Marino /* 3486d7f5d3SJohn Marino * Parallel Port Chipset type. 3586d7f5d3SJohn Marino */ 3686d7f5d3SJohn Marino #define SMC_LIKE 0 3786d7f5d3SJohn Marino #define SMC_37C665GT 1 3886d7f5d3SJohn Marino #define SMC_37C666GT 2 3986d7f5d3SJohn Marino #define NS_PC87332 3 4086d7f5d3SJohn Marino #define NS_PC87306 4 4186d7f5d3SJohn Marino #define INTEL_820191AA 5 /* XXX not implemented */ 4286d7f5d3SJohn Marino #define GENERIC 6 4386d7f5d3SJohn Marino #define WINB_W83877F 7 4486d7f5d3SJohn Marino #define WINB_W83877AF 8 4586d7f5d3SJohn Marino #define WINB_UNKNOWN 9 4686d7f5d3SJohn Marino #define NS_PC87334 10 4786d7f5d3SJohn Marino #define SMC_37C935 11 4886d7f5d3SJohn Marino #define NS_PC87303 12 4986d7f5d3SJohn Marino 5086d7f5d3SJohn Marino /* 5186d7f5d3SJohn Marino * Parallel Port Chipset Type. SMC versus GENERIC (others) 5286d7f5d3SJohn Marino */ 5386d7f5d3SJohn Marino #define PPC_TYPE_SMCLIKE 0 5486d7f5d3SJohn Marino #define PPC_TYPE_GENERIC 1 5586d7f5d3SJohn Marino 5686d7f5d3SJohn Marino /* 5786d7f5d3SJohn Marino * Generic structure to hold parallel port chipset info. 5886d7f5d3SJohn Marino */ 5986d7f5d3SJohn Marino struct ppc_data { 6086d7f5d3SJohn Marino 6186d7f5d3SJohn Marino int ppc_unit; 6286d7f5d3SJohn Marino int ppc_model; /* chipset model if detected */ 6386d7f5d3SJohn Marino int ppc_type; /* generic or smclike chipset type */ 6486d7f5d3SJohn Marino 6586d7f5d3SJohn Marino int ppc_mode; /* chipset current mode */ 6686d7f5d3SJohn Marino int ppc_avm; /* chipset available modes */ 6786d7f5d3SJohn Marino int ppc_dtm; /* chipset detected modes */ 6886d7f5d3SJohn Marino 6986d7f5d3SJohn Marino #define PPC_IRQ_NONE 0x0 7086d7f5d3SJohn Marino #define PPC_IRQ_nACK 0x1 7186d7f5d3SJohn Marino #define PPC_IRQ_DMA 0x2 7286d7f5d3SJohn Marino #define PPC_IRQ_FIFO 0x4 7386d7f5d3SJohn Marino #define PPC_IRQ_nFAULT 0x8 7486d7f5d3SJohn Marino int ppc_irqstat; /* remind irq settings */ 7586d7f5d3SJohn Marino 7686d7f5d3SJohn Marino #define PPC_DMA_INIT 0x01 7786d7f5d3SJohn Marino #define PPC_DMA_STARTED 0x02 7886d7f5d3SJohn Marino #define PPC_DMA_COMPLETE 0x03 7986d7f5d3SJohn Marino #define PPC_DMA_INTERRUPTED 0x04 8086d7f5d3SJohn Marino #define PPC_DMA_ERROR 0x05 8186d7f5d3SJohn Marino int ppc_dmastat; /* dma state */ 8286d7f5d3SJohn Marino int ppc_dmachan; /* dma channel */ 8386d7f5d3SJohn Marino int ppc_dmaflags; /* dma transfer flags */ 8486d7f5d3SJohn Marino caddr_t ppc_dmaddr; /* buffer address */ 8586d7f5d3SJohn Marino u_int ppc_dmacnt; /* count of bytes sent with dma */ 8686d7f5d3SJohn Marino 8786d7f5d3SJohn Marino #define PPC_PWORD_MASK 0x30 8886d7f5d3SJohn Marino #define PPC_PWORD_16 0x00 8986d7f5d3SJohn Marino #define PPC_PWORD_8 0x10 9086d7f5d3SJohn Marino #define PPC_PWORD_32 0x20 9186d7f5d3SJohn Marino char ppc_pword; /* PWord size */ 9286d7f5d3SJohn Marino short ppc_fifo; /* FIFO threshold */ 9386d7f5d3SJohn Marino 9486d7f5d3SJohn Marino short ppc_wthr; /* writeIntrThresold */ 9586d7f5d3SJohn Marino short ppc_rthr; /* readIntrThresold */ 9686d7f5d3SJohn Marino 9786d7f5d3SJohn Marino char *ppc_ptr; /* microseq current pointer */ 9886d7f5d3SJohn Marino int ppc_accum; /* microseq accumulator */ 9986d7f5d3SJohn Marino int ppc_base; /* parallel port base address */ 10086d7f5d3SJohn Marino int ppc_epp; /* EPP mode (1.7 or 1.9) */ 10186d7f5d3SJohn Marino int ppc_irq; 10286d7f5d3SJohn Marino 10386d7f5d3SJohn Marino unsigned char ppc_flags; 10486d7f5d3SJohn Marino 10586d7f5d3SJohn Marino device_t ppbus; /* parallel port chipset corresponding ppbus */ 10686d7f5d3SJohn Marino 10786d7f5d3SJohn Marino int rid_irq, rid_drq, rid_ioport; 10886d7f5d3SJohn Marino struct resource *res_irq, *res_drq, *res_ioport; 10986d7f5d3SJohn Marino 11086d7f5d3SJohn Marino bus_space_handle_t bsh; 11186d7f5d3SJohn Marino bus_space_tag_t bst; 11286d7f5d3SJohn Marino 11386d7f5d3SJohn Marino void *intr_cookie; 11486d7f5d3SJohn Marino 11586d7f5d3SJohn Marino int ppc_registered; /* 1 if ppcintr() is the registered interrupt */ 11686d7f5d3SJohn Marino }; 11786d7f5d3SJohn Marino 11886d7f5d3SJohn Marino /* 11986d7f5d3SJohn Marino * Parallel Port Chipset registers. 12086d7f5d3SJohn Marino */ 12186d7f5d3SJohn Marino #define PPC_SPP_DTR 0 /* SPP data register */ 12286d7f5d3SJohn Marino #define PPC_ECP_A_FIFO 0 /* ECP Address fifo register */ 12386d7f5d3SJohn Marino #define PPC_SPP_STR 1 /* SPP status register */ 12486d7f5d3SJohn Marino #define PPC_SPP_CTR 2 /* SPP control register */ 12586d7f5d3SJohn Marino #define PPC_EPP_ADDR 3 /* EPP address register (8 bit) */ 12686d7f5d3SJohn Marino #define PPC_EPP_DATA 4 /* EPP data register (8, 16 or 32 bit) */ 12786d7f5d3SJohn Marino #define PPC_ECP_D_FIFO 0x400 /* ECP Data fifo register */ 12886d7f5d3SJohn Marino #define PPC_ECP_CNFGA 0x400 /* Configuration register A */ 12986d7f5d3SJohn Marino #define PPC_ECP_CNFGB 0x401 /* Configuration register B */ 13086d7f5d3SJohn Marino #define PPC_ECP_ECR 0x402 /* ECP extended control register */ 13186d7f5d3SJohn Marino 13286d7f5d3SJohn Marino #define PPC_FIFO_EMPTY 0x1 /* ecr register - bit 0 */ 13386d7f5d3SJohn Marino #define PPC_FIFO_FULL 0x2 /* ecr register - bit 1 */ 13486d7f5d3SJohn Marino #define PPC_SERVICE_INTR 0x4 /* ecr register - bit 2 */ 13586d7f5d3SJohn Marino #define PPC_ENABLE_DMA 0x8 /* ecr register - bit 3 */ 13686d7f5d3SJohn Marino #define PPC_nFAULT_INTR 0x10 /* ecr register - bit 4 */ 13786d7f5d3SJohn Marino #define PPC_ECR_STD 0x0 13886d7f5d3SJohn Marino #define PPC_ECR_PS2 0x20 13986d7f5d3SJohn Marino #define PPC_ECR_FIFO 0x40 14086d7f5d3SJohn Marino #define PPC_ECR_ECP 0x60 14186d7f5d3SJohn Marino #define PPC_ECR_EPP 0x80 14286d7f5d3SJohn Marino 14386d7f5d3SJohn Marino #define PPC_DISABLE_INTR (PPC_SERVICE_INTR | PPC_nFAULT_INTR) 14486d7f5d3SJohn Marino #define PPC_ECR_RESET (PPC_ECR_PS2 | PPC_DISABLE_INTR) 14586d7f5d3SJohn Marino 14686d7f5d3SJohn Marino #define r_dtr(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_SPP_DTR)) 14786d7f5d3SJohn Marino #define r_str(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_SPP_STR)) 14886d7f5d3SJohn Marino #define r_ctr(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_SPP_CTR)) 14986d7f5d3SJohn Marino 15086d7f5d3SJohn Marino #define r_epp_A(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_EPP_ADDR)) 15186d7f5d3SJohn Marino #define r_epp_D(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_EPP_DATA)) 15286d7f5d3SJohn Marino #define r_cnfgA(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_ECP_CNFGA)) 15386d7f5d3SJohn Marino #define r_cnfgB(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_ECP_CNFGB)) 15486d7f5d3SJohn Marino #define r_ecr(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_ECP_ECR)) 15586d7f5d3SJohn Marino #define r_fifo(ppc) (bus_space_read_1((ppc)->bst, (ppc)->bsh, PPC_ECP_D_FIFO)) 15686d7f5d3SJohn Marino 15786d7f5d3SJohn Marino #define w_dtr(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_SPP_DTR, byte)) 15886d7f5d3SJohn Marino #define w_str(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_SPP_STR, byte)) 15986d7f5d3SJohn Marino #define w_ctr(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_SPP_CTR, byte)) 16086d7f5d3SJohn Marino 16186d7f5d3SJohn Marino #define w_epp_A(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_EPP_ADDR, byte)) 16286d7f5d3SJohn Marino #define w_epp_D(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_EPP_DATA, byte)) 16386d7f5d3SJohn Marino #define w_ecr(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_ECP_ECR, byte)) 16486d7f5d3SJohn Marino #define w_fifo(ppc, byte) (bus_space_write_1((ppc)->bst, (ppc)->bsh, PPC_ECP_D_FIFO, byte)) 16586d7f5d3SJohn Marino 16686d7f5d3SJohn Marino /* 16786d7f5d3SJohn Marino * Register defines for the PC873xx parts 16886d7f5d3SJohn Marino */ 16986d7f5d3SJohn Marino 17086d7f5d3SJohn Marino #define PC873_FER 0x00 17186d7f5d3SJohn Marino #define PC873_PPENABLE (1<<0) 17286d7f5d3SJohn Marino #define PC873_FAR 0x01 17386d7f5d3SJohn Marino #define PC873_PTR 0x02 17486d7f5d3SJohn Marino #define PC873_CFGLOCK (1<<6) 17586d7f5d3SJohn Marino #define PC873_EPPRDIR (1<<7) 17686d7f5d3SJohn Marino #define PC873_EXTENDED (1<<7) 17786d7f5d3SJohn Marino #define PC873_LPTBIRQ7 (1<<3) 17886d7f5d3SJohn Marino #define PC873_FCR 0x03 17986d7f5d3SJohn Marino #define PC873_ZWS (1<<5) 18086d7f5d3SJohn Marino #define PC873_ZWSPWDN (1<<6) 18186d7f5d3SJohn Marino #define PC873_PCR 0x04 18286d7f5d3SJohn Marino #define PC873_EPPEN (1<<0) 18386d7f5d3SJohn Marino #define PC873_EPP19 (1<<1) 18486d7f5d3SJohn Marino #define PC873_ECPEN (1<<2) 18586d7f5d3SJohn Marino #define PC873_ECPCLK (1<<3) 18686d7f5d3SJohn Marino #define PC873_PMC 0x06 18786d7f5d3SJohn Marino #define PC873_TUP 0x07 18886d7f5d3SJohn Marino #define PC873_SID 0x08 18986d7f5d3SJohn Marino #define PC873_PNP0 0x1b 19086d7f5d3SJohn Marino #define PC873_PNP1 0x1c 19186d7f5d3SJohn Marino #define PC873_LPTBA 0x19 19286d7f5d3SJohn Marino 19386d7f5d3SJohn Marino /* 19486d7f5d3SJohn Marino * Register defines for the SMC FDC37C66xGT parts 19586d7f5d3SJohn Marino */ 19686d7f5d3SJohn Marino 19786d7f5d3SJohn Marino /* Init codes */ 19886d7f5d3SJohn Marino #define SMC665_iCODE 0x55 19986d7f5d3SJohn Marino #define SMC666_iCODE 0x44 20086d7f5d3SJohn Marino 20186d7f5d3SJohn Marino /* Base configuration ports */ 20286d7f5d3SJohn Marino #define SMC66x_CSR 0x3F0 20386d7f5d3SJohn Marino #define SMC666_CSR 0x370 /* hard-configured value for 666 */ 20486d7f5d3SJohn Marino 20586d7f5d3SJohn Marino /* Bits */ 20686d7f5d3SJohn Marino #define SMC_CR1_ADDR 0x3 /* bit 0 and 1 */ 20786d7f5d3SJohn Marino #define SMC_CR1_MODE (1<<3) /* bit 3 */ 20886d7f5d3SJohn Marino #define SMC_CR4_EMODE 0x3 /* bits 0 and 1 */ 20986d7f5d3SJohn Marino #define SMC_CR4_EPPTYPE (1<<6) /* bit 6 */ 21086d7f5d3SJohn Marino 21186d7f5d3SJohn Marino /* Extended modes */ 21286d7f5d3SJohn Marino #define SMC_SPP 0x0 /* SPP */ 21386d7f5d3SJohn Marino #define SMC_EPPSPP 0x1 /* EPP and SPP */ 21486d7f5d3SJohn Marino #define SMC_ECP 0x2 /* ECP */ 21586d7f5d3SJohn Marino #define SMC_ECPEPP 0x3 /* ECP and EPP */ 21686d7f5d3SJohn Marino 21786d7f5d3SJohn Marino /* 21886d7f5d3SJohn Marino * Register defines for the SMC FDC37C935 parts 21986d7f5d3SJohn Marino */ 22086d7f5d3SJohn Marino 22186d7f5d3SJohn Marino /* Configuration ports */ 22286d7f5d3SJohn Marino #define SMC935_CFG 0x370 22386d7f5d3SJohn Marino #define SMC935_IND 0x370 22486d7f5d3SJohn Marino #define SMC935_DAT 0x371 22586d7f5d3SJohn Marino 22686d7f5d3SJohn Marino /* Registers */ 22786d7f5d3SJohn Marino #define SMC935_LOGDEV 0x7 22886d7f5d3SJohn Marino #define SMC935_ID 0x20 22986d7f5d3SJohn Marino #define SMC935_PORTHI 0x60 23086d7f5d3SJohn Marino #define SMC935_PORTLO 0x61 23186d7f5d3SJohn Marino #define SMC935_PPMODE 0xf0 23286d7f5d3SJohn Marino 23386d7f5d3SJohn Marino /* Parallel port modes */ 23486d7f5d3SJohn Marino #define SMC935_SPP 0x38 + 0 23586d7f5d3SJohn Marino #define SMC935_EPP19SPP 0x38 + 1 23686d7f5d3SJohn Marino #define SMC935_ECP 0x38 + 2 23786d7f5d3SJohn Marino #define SMC935_ECPEPP19 0x38 + 3 23886d7f5d3SJohn Marino #define SMC935_CENT 0x38 + 4 23986d7f5d3SJohn Marino #define SMC935_EPP17SPP 0x38 + 5 24086d7f5d3SJohn Marino #define SMC935_UNUSED 0x38 + 6 24186d7f5d3SJohn Marino #define SMC935_ECPEPP17 0x38 + 7 24286d7f5d3SJohn Marino 24386d7f5d3SJohn Marino /* 24486d7f5d3SJohn Marino * Register defines for the Winbond W83877F parts 24586d7f5d3SJohn Marino */ 24686d7f5d3SJohn Marino 24786d7f5d3SJohn Marino #define WINB_W83877F_ID 0xa 24886d7f5d3SJohn Marino #define WINB_W83877AF_ID 0xb 24986d7f5d3SJohn Marino 25086d7f5d3SJohn Marino /* Configuration bits */ 25186d7f5d3SJohn Marino #define WINB_HEFERE (1<<5) /* CROC bit 5 */ 25286d7f5d3SJohn Marino #define WINB_HEFRAS (1<<0) /* CR16 bit 0 */ 25386d7f5d3SJohn Marino 25486d7f5d3SJohn Marino #define WINB_PNPCVS (1<<2) /* CR16 bit 2 */ 25586d7f5d3SJohn Marino #define WINB_CHIPID 0xf /* CR9 bits 0-3 */ 25686d7f5d3SJohn Marino 25786d7f5d3SJohn Marino #define WINB_PRTMODS0 (1<<2) /* CR0 bit 2 */ 25886d7f5d3SJohn Marino #define WINB_PRTMODS1 (1<<3) /* CR0 bit 3 */ 25986d7f5d3SJohn Marino #define WINB_PRTMODS2 (1<<7) /* CR9 bit 7 */ 26086d7f5d3SJohn Marino 26186d7f5d3SJohn Marino /* W83877F modes: CR9/bit7 | CR0/bit3 | CR0/bit2 */ 26286d7f5d3SJohn Marino #define WINB_W83757 0x0 26386d7f5d3SJohn Marino #define WINB_EXTFDC 0x4 26486d7f5d3SJohn Marino #define WINB_EXTADP 0x8 26586d7f5d3SJohn Marino #define WINB_EXT2FDD 0xc 26686d7f5d3SJohn Marino #define WINB_JOYSTICK 0x80 26786d7f5d3SJohn Marino 26886d7f5d3SJohn Marino #define WINB_PARALLEL 0x80 26986d7f5d3SJohn Marino #define WINB_EPP_SPP 0x4 27086d7f5d3SJohn Marino #define WINB_ECP 0x8 27186d7f5d3SJohn Marino #define WINB_ECP_EPP 0xc 27286d7f5d3SJohn Marino 27386d7f5d3SJohn Marino #endif 274