Home | History | Annotate | Line # | Download | only in ic
atppcreg.h revision 1.5.140.1
      1  1.5.140.1     skrll /* $NetBSD: atppcreg.h,v 1.5.140.1 2016/10/05 20:55:41 skrll 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