Home | History | Annotate | Line # | Download | only in ic
      1  1.6  jdolecek /* $NetBSD: atppcreg.h,v 1.6 2016/09/15 21:45:37 jdolecek Exp $ */
      2  1.2     bjh21 
      3  1.1  jdolecek /*-
      4  1.1  jdolecek  * Copyright (c) 2001 Alcove - 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.3     bjh21  * FreeBSD: src/sys/isa/ppcreg.h,v 1.10.2.4 2001/10/02 05:21:45 nsouch Exp
     29  1.1  jdolecek  *
     30  1.1  jdolecek  */
     31  1.1  jdolecek 
     32  1.1  jdolecek #ifndef __ATPPCREG_H
     33  1.1  jdolecek #define __ATPPCREG_H
     34  1.1  jdolecek 
     35  1.1  jdolecek /* Generic register definitions as offsets from a base address */
     36  1.1  jdolecek 
     37  1.1  jdolecek #define ATPPC_SPP_DTR 		0	/* SPP data register */
     38  1.1  jdolecek #define ATPPC_ECP_A_FIFO	0	/* ECP Address fifo register */
     39  1.1  jdolecek #define ATPPC_SPP_STR		1	/* SPP status register */
     40  1.1  jdolecek #define ATPPC_SPP_CTR		2	/* SPP control register */
     41  1.1  jdolecek #define ATPPC_EPP_ADDR		3	/* EPP address register (8 bit) */
     42  1.1  jdolecek #define ATPPC_EPP_DATA		4	/* EPP data register (8, 16, 32 bit) */
     43  1.1  jdolecek #define ATPPC_ECP_D_FIFO	0x400	/* ECP Data fifo register */
     44  1.1  jdolecek #define ATPPC_ECP_CNFGA		0x400	/* Configuration register A */
     45  1.1  jdolecek #define ATPPC_ECP_CNFGB		0x401	/* Configuration register B */
     46  1.1  jdolecek #define ATPPC_ECP_ECR		0x402	/* ECP extended control register */
     47  1.1  jdolecek 
     48  1.1  jdolecek /* ECP control register commands/modes */
     49  1.1  jdolecek #define ATPPC_FIFO_EMPTY	0x1	/* ecr register - bit 0 */
     50  1.1  jdolecek #define ATPPC_FIFO_FULL		0x2	/* ecr register - bit 1 */
     51  1.1  jdolecek #define ATPPC_SERVICE_INTR 	0x4	/* ecr register - bit 2 */
     52  1.1  jdolecek #define ATPPC_ENABLE_DMA	0x8	/* ecr register - bit 3 */
     53  1.1  jdolecek #define ATPPC_nFAULT_INTR	0x10	/* ecr register - bit 4 */
     54  1.1  jdolecek /* ecr register - bits 5 through 7 */
     55  1.1  jdolecek #define ATPPC_ECR_STD		0x00	/* Standard mode */
     56  1.1  jdolecek #define ATPPC_ECR_PS2		0x20	/* Bidirectional mode */
     57  1.1  jdolecek #define ATPPC_ECR_FIFO		0x40	/* Fast Centronics mode */
     58  1.1  jdolecek #define ATPPC_ECR_ECP		0x60	/* ECP mode */
     59  1.1  jdolecek #define ATPPC_ECR_EPP		0x80	/* EPP mode */
     60  1.1  jdolecek #define ATPPC_ECR_TST		0xd0	/* Test mode*/
     61  1.1  jdolecek #define ATPPC_ECR_CFG		0xe0	/* Test mode*/
     62  1.1  jdolecek 
     63  1.1  jdolecek 
     64  1.1  jdolecek 
     65  1.1  jdolecek /* To set "inverted" flags, do AND. Otherwise, do OR */
     66  1.1  jdolecek /* 0 & x = 0, 1 | x = 1 */
     67  1.1  jdolecek 
     68  1.4     perry /* Clear flags: n(var) is equivalent to var = 0.
     69  1.1  jdolecek #define n(flags) (~(flags) & (flags))*/
     70  1.1  jdolecek 
     71  1.4     perry /* Invert flags
     72  1.1  jdolecek #define inv(flags) (~(flags))*/
     73  1.1  jdolecek 
     74  1.1  jdolecek /* SPP mode control register bit positions. */
     75  1.1  jdolecek #define STROBE		0x01
     76  1.1  jdolecek #define AUTOFEED	0x02
     77  1.1  jdolecek #define nINIT		0x04
     78  1.1  jdolecek #define SELECTIN	0x08
     79  1.1  jdolecek #define IRQENABLE	0x10
     80  1.1  jdolecek #define PCD             0x20
     81  1.1  jdolecek 
     82  1.1  jdolecek /*
     83  1.1  jdolecek #define nSTROBE		inv(STROBE)
     84  1.1  jdolecek #define nAUTOFEED	inv(AUTOFEED)
     85  1.1  jdolecek #define INIT		inv(nINIT)
     86  1.1  jdolecek #define nSELECTIN	inv(SELECTIN)
     87  1.1  jdolecek #define nPCD		inv(PCD)
     88  1.1  jdolecek */
     89  1.1  jdolecek 
     90  1.1  jdolecek /* SPP status register bit positions. */
     91  1.1  jdolecek #define TIMEOUT         0x01
     92  1.1  jdolecek #define nFAULT          0x08
     93  1.1  jdolecek #define SELECT          0x10
     94  1.1  jdolecek #define PERROR          0x20
     95  1.1  jdolecek #define nACK            0x40
     96  1.1  jdolecek #define nBUSY           0x80
     97  1.1  jdolecek 
     98  1.1  jdolecek /* Flags indicating ready condition */
     99  1.1  jdolecek #define SPP_READY (SELECT | nFAULT | nBUSY)
    100  1.4     perry #define SPP_MASK (SELECT | nFAULT | PERROR | nBUSY)
    101  1.1  jdolecek 
    102  1.1  jdolecek /* Byte mode signals */
    103  1.1  jdolecek #define HOSTCLK		STROBE /* Also ECP mode signal */
    104  1.1  jdolecek #define HOSTBUSY	AUTOFEED
    105  1.1  jdolecek #define ACTIVE1284	SELECTIN /* Also ECP mode signal */
    106  1.1  jdolecek #define PTRCLK		nACK
    107  1.1  jdolecek #define PTRBUSY		nBUSY
    108  1.1  jdolecek #define ACKDATAREQ	PERROR
    109  1.1  jdolecek #define XFLAG		SELECT /* Also ECP mode signal */
    110  1.1  jdolecek #define nDATAVAIL	nFAULT
    111  1.1  jdolecek 
    112  1.1  jdolecek /* ECP mode signals */
    113  1.1  jdolecek #define HOSTACK		AUTOFEED
    114  1.1  jdolecek #define nREVREQ		nINIT
    115  1.1  jdolecek #define PERICLK		nACK
    116  1.1  jdolecek #define PERIACK		nBUSY
    117  1.1  jdolecek #define nACKREV		PERROR
    118  1.1  jdolecek #define nPERIREQ	nFAULT
    119  1.1  jdolecek 
    120  1.1  jdolecek /* EPP mode signals */
    121  1.1  jdolecek #define nWRITE		STROBE
    122  1.1  jdolecek #define nDATASTB	AUTOFEED
    123  1.1  jdolecek #define nADDRSTB	SELECTIN
    124  1.1  jdolecek #define nWAIT		nBUSY
    125  1.1  jdolecek #define nRESET		nINIT
    126  1.4     perry #define nINTR		nACK
    127  1.1  jdolecek 
    128  1.1  jdolecek 
    129  1.4     perry /*
    130  1.1  jdolecek  * Useful macros for reading/writing registers.
    131  1.1  jdolecek  */
    132  1.1  jdolecek 
    133  1.1  jdolecek /* Reading macros */
    134  1.1  jdolecek #define atppc_r_dtr(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh, \
    135  1.1  jdolecek 	ATPPC_SPP_DTR)
    136  1.1  jdolecek #define atppc_r_str(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh, \
    137  1.1  jdolecek 	ATPPC_SPP_STR)
    138  1.1  jdolecek #define atppc_r_ctr(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh, \
    139  1.1  jdolecek 	ATPPC_SPP_CTR)
    140  1.1  jdolecek #define atppc_r_eppA(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh,\
    141  1.1  jdolecek 	ATPPC_EPP_ADDR)
    142  1.1  jdolecek #define atppc_r_eppD(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh,\
    143  1.1  jdolecek 	ATPPC_EPP_DATA)
    144  1.1  jdolecek #define atppc_r_eppD_multi(atppc, buf, count) bus_space_read_multi_1( \
    145  1.1  jdolecek 	(atppc)->sc_iot, (atppc)->sc_ioh, ATPPC_EPP_DATA, (buf), (count))
    146  1.1  jdolecek #define atppc_r_cnfgA(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh,\
    147  1.1  jdolecek 	ATPPC_ECP_CNFGA)
    148  1.1  jdolecek #define atppc_r_cnfgB(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh,\
    149  1.1  jdolecek 	ATPPC_ECP_CNFGB)
    150  1.1  jdolecek #define atppc_r_ecr(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh, \
    151  1.1  jdolecek 	ATPPC_ECP_ECR)
    152  1.1  jdolecek #define atppc_r_fifo(atppc) bus_space_read_1((atppc)->sc_iot, (atppc)->sc_ioh, \
    153  1.1  jdolecek 	ATPPC_ECP_D_FIFO)
    154  1.1  jdolecek #define atppc_r_fifo_multi(atppc, buf, count) bus_space_read_multi_1( \
    155  1.1  jdolecek 	(atppc)->sc_iot, (atppc)->sc_ioh, ATPPC_ECP_D_FIFO, (buf), (count))
    156  1.1  jdolecek 
    157  1.1  jdolecek /* Writing macros */
    158  1.1  jdolecek #define atppc_w_dtr(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    159  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_SPP_DTR, (byte))
    160  1.1  jdolecek #define atppc_w_str(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    161  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_SPP_STR, (byte))
    162  1.1  jdolecek #define atppc_w_ctr(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    163  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_SPP_CTR, (byte))
    164  1.1  jdolecek #define atppc_w_eppA(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    165  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_EPP_ADDR, (byte))
    166  1.1  jdolecek #define atppc_w_eppD(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    167  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_EPP_DATA, (byte))
    168  1.1  jdolecek #define atppc_w_eppD_multi(atppc, buf, count) bus_space_write_multi_1( \
    169  1.1  jdolecek 	(atppc)->sc_iot, (atppc)->sc_ioh, ATPPC_EPP_DATA, (buf), (count))
    170  1.1  jdolecek #define atppc_w_cnfgA(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    171  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_ECP_CNFGA, (byte))
    172  1.1  jdolecek #define atppc_w_cnfgB(atppc, byte) bus_space_read_1((atppc)->sc_iot, \
    173  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_ECP_CNFGB, (byte))
    174  1.1  jdolecek #define atppc_w_ecr(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    175  1.1  jdolecek 	(atppc)->sc_ioh, ATPPC_ECP_ECR, (byte))
    176  1.1  jdolecek #define atppc_w_fifo(atppc, byte) bus_space_write_1((atppc)->sc_iot, \
    177  1.4     perry 	(atppc)->sc_ioh, ATPPC_ECP_D_FIFO, (byte))
    178  1.1  jdolecek #define atppc_w_fifo_multi(atppc, buf, count) bus_space_write_multi_1( \
    179  1.1  jdolecek 	(atppc)->sc_iot, (atppc)->sc_ioh, ATPPC_ECP_D_FIFO, (buf), (count))
    180  1.1  jdolecek 
    181  1.1  jdolecek /* Barrier macros for reads/writes */
    182  1.1  jdolecek #define atppc_barrier_r(atppc) bus_space_barrier((atppc)->sc_iot, \
    183  1.4     perry 	(atppc)->sc_ioh, 0, IO_LPTSIZE, BUS_SPACE_BARRIER_READ)
    184  1.1  jdolecek #define atppc_barrier_w(atppc) bus_space_barrier((atppc)->sc_iot, \
    185  1.4     perry 	(atppc)->sc_ioh, 0, IO_LPTSIZE, BUS_SPACE_BARRIER_WRITE)
    186  1.1  jdolecek #define atppc_barrier(atppc) bus_space_barrier((atppc)->sc_iot, \
    187  1.1  jdolecek 	(atppc)->sc_ioh, 0, IO_LPTSIZE, BUS_SPACE_BARRIER_WRITE | \
    188  1.4     perry 	BUS_SPACE_BARRIER_READ)
    189  1.1  jdolecek 
    190  1.1  jdolecek /*
    191  1.1  jdolecek  * Register defines for the PC873xx parts
    192  1.1  jdolecek  */
    193  1.1  jdolecek 
    194  1.1  jdolecek #define PC873_FER	0x00
    195  1.1  jdolecek #define PC873_PPENABLE	(1<<0)
    196  1.1  jdolecek #define PC873_FAR	0x01
    197  1.1  jdolecek #define PC873_PTR	0x02
    198  1.1  jdolecek #define PC873_CFGLOCK	(1<<6)
    199  1.1  jdolecek #define PC873_EPPRDIR	(1<<7)
    200  1.1  jdolecek #define PC873_EXTENDED	(1<<7)
    201  1.1  jdolecek #define PC873_LPTBIRQ7	(1<<3)
    202  1.1  jdolecek #define PC873_FCR	0x03
    203  1.1  jdolecek #define PC873_ZWS	(1<<5)
    204  1.1  jdolecek #define PC873_ZWSPWDN	(1<<6)
    205  1.1  jdolecek #define PC873_PCR	0x04
    206  1.1  jdolecek #define PC873_EPPEN	(1<<0)
    207  1.1  jdolecek #define PC873_EPP19	(1<<1)
    208  1.1  jdolecek #define PC873_ECPEN	(1<<2)
    209  1.1  jdolecek #define PC873_ECPCLK	(1<<3)
    210  1.1  jdolecek #define PC873_PMC	0x06
    211  1.1  jdolecek #define PC873_TUP	0x07
    212  1.1  jdolecek #define PC873_SID	0x08
    213  1.1  jdolecek #define PC873_PNP0	0x1b
    214  1.1  jdolecek #define PC873_PNP1	0x1c
    215  1.1  jdolecek #define PC873_LPTBA	0x19
    216  1.1  jdolecek 
    217  1.1  jdolecek /*
    218  1.1  jdolecek  * Register defines for the SMC FDC37C66xGT parts
    219  1.1  jdolecek  */
    220  1.1  jdolecek 
    221  1.1  jdolecek /* Init codes */
    222  1.1  jdolecek #define SMC665_iCODE	0x55
    223  1.1  jdolecek #define SMC666_iCODE	0x44
    224  1.1  jdolecek 
    225  1.1  jdolecek /* Base configuration ports */
    226  1.1  jdolecek #define SMC66x_CSR	0x3F0
    227  1.1  jdolecek #define SMC666_CSR	0x370		/* hard-configured value for 666 */
    228  1.1  jdolecek 
    229  1.1  jdolecek /* Bits */
    230  1.1  jdolecek #define SMC_CR1_ADDR	0x3		/* bit 0 and 1 */
    231  1.1  jdolecek #define SMC_CR1_MODE	(1<<3)		/* bit 3 */
    232  1.1  jdolecek #define SMC_CR4_EMODE	0x3		/* bits 0 and 1 */
    233  1.1  jdolecek #define SMC_CR4_EPPTYPE	(1<<6)		/* bit 6 */
    234  1.1  jdolecek 
    235  1.1  jdolecek /* Extended modes */
    236  1.1  jdolecek #define SMC_SPP		0x0		/* SPP */
    237  1.1  jdolecek #define SMC_EPPSPP	0x1		/* EPP and SPP */
    238  1.1  jdolecek #define SMC_ECP		0x2 		/* ECP */
    239  1.1  jdolecek #define SMC_ECPEPP	0x3		/* ECP and EPP */
    240  1.1  jdolecek 
    241  1.1  jdolecek /*
    242  1.1  jdolecek  * Register defines for the SMC FDC37C935 parts
    243  1.1  jdolecek  */
    244  1.1  jdolecek 
    245  1.1  jdolecek /* Configuration ports */
    246  1.1  jdolecek #define SMC935_CFG	0x370
    247  1.1  jdolecek #define SMC935_IND	0x370
    248  1.1  jdolecek #define SMC935_DAT	0x371
    249  1.1  jdolecek 
    250  1.1  jdolecek /* Registers */
    251  1.1  jdolecek #define SMC935_LOGDEV	0x7
    252  1.1  jdolecek #define SMC935_ID	0x20
    253  1.1  jdolecek #define SMC935_PORTHI	0x60
    254  1.1  jdolecek #define SMC935_PORTLO	0x61
    255  1.1  jdolecek #define SMC935_PPMODE	0xf0
    256  1.1  jdolecek 
    257  1.1  jdolecek /* Parallel port modes */
    258  1.1  jdolecek #define SMC935_SPP	0x38 + 0
    259  1.1  jdolecek #define SMC935_EPP19SPP	0x38 + 1
    260  1.1  jdolecek #define SMC935_ECP	0x38 + 2
    261  1.1  jdolecek #define SMC935_ECPEPP19	0x38 + 3
    262  1.1  jdolecek #define SMC935_CENT	0x38 + 4
    263  1.1  jdolecek #define SMC935_EPP17SPP	0x38 + 5
    264  1.1  jdolecek #define SMC935_UNUSED	0x38 + 6
    265  1.1  jdolecek #define SMC935_ECPEPP17	0x38 + 7
    266  1.1  jdolecek 
    267  1.1  jdolecek /*
    268  1.1  jdolecek  * Register defines for the Winbond W83877F parts
    269  1.1  jdolecek  */
    270  1.1  jdolecek 
    271  1.1  jdolecek #define WINB_W83877F_ID		0xa
    272  1.1  jdolecek #define WINB_W83877AF_ID	0xb
    273  1.1  jdolecek 
    274  1.1  jdolecek /* Configuration bits */
    275  1.1  jdolecek #define WINB_HEFERE	(1<<5)		/* CROC bit 5 */
    276  1.1  jdolecek #define WINB_HEFRAS	(1<<0)		/* CR16 bit 0 */
    277  1.1  jdolecek 
    278  1.1  jdolecek #define WINB_PNPCVS	(1<<2)		/* CR16 bit 2 */
    279  1.1  jdolecek #define WINB_CHIPID	0xf		/* CR9 bits 0-3 */
    280  1.1  jdolecek 
    281  1.1  jdolecek #define WINB_PRTMODS0	(1<<2)		/* CR0 bit 2 */
    282  1.1  jdolecek #define WINB_PRTMODS1	(1<<3)		/* CR0 bit 3 */
    283  1.1  jdolecek #define WINB_PRTMODS2	(1<<7)		/* CR9 bit 7 */
    284  1.1  jdolecek 
    285  1.1  jdolecek /* W83877F modes: CR9/bit7 | CR0/bit3 | CR0/bit2 */
    286  1.1  jdolecek #define WINB_W83757	0x0
    287  1.1  jdolecek #define WINB_EXTFDC	0x4
    288  1.1  jdolecek #define WINB_EXTADP	0x8
    289  1.1  jdolecek #define WINB_EXT2FDD	0xc
    290  1.1  jdolecek #define WINB_JOYSTICK	0x80
    291  1.1  jdolecek 
    292  1.1  jdolecek #define WINB_PARALLEL	0x80
    293  1.1  jdolecek #define WINB_EPP_SPP	0x4
    294  1.1  jdolecek #define WINB_ECP	0x8
    295  1.1  jdolecek #define WINB_ECP_EPP	0xc
    296  1.1  jdolecek 
    297  1.1  jdolecek #endif /* __ATPPCREG_H */
    298