1/* $NetBSD: auxreg.h,v 1.12 2005/11/16 03:00:23 uwe Exp $ */ 2 3/* 4 * Copyright (c) 1992, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This software was developed by the Computer Systems Engineering group 8 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 9 * contributed to Berkeley. 10 * 11 * All advertising materials mentioning features or use of this software 12 * must display the following acknowledgement: 13 * This product includes software developed by the University of 14 * California, Lawrence Berkeley Laboratory. 15 * 16 * Redistribution and use in source and binary forms, with or without 17 * modification, are permitted provided that the following conditions 18 * are met: 19 * 1. Redistributions of source code must retain the above copyright 20 * notice, this list of conditions and the following disclaimer. 21 * 2. Redistributions in binary form must reproduce the above copyright 22 * notice, this list of conditions and the following disclaimer in the 23 * documentation and/or other materials provided with the distribution. 24 * 3. Neither the name of the University nor the names of its contributors 25 * may be used to endorse or promote products derived from this software 26 * without specific prior written permission. 27 * 28 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 29 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 31 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 * 40 * @(#)auxreg.h 8.1 (Berkeley) 6/11/93 41 */ 42 43/* 44 * Sun-4c Auxiliary I/O register. This register talks to the floppy 45 * (if it exists) and the front-panel LED. 46 */ 47 48#define AUXIO4C_MB1 0xf0 /* must be set on write */ 49#define AUXIO4C_FHD 0x20 /* floppy: high density (unreliable?)*/ 50#define AUXIO4C_FDC 0x10 /* floppy: diskette was changed */ 51#define AUXIO4C_FDS 0x08 /* floppy: drive select */ 52#define AUXIO4C_FTC 0x04 /* floppy: drives Terminal Count pin */ 53#define AUXIO4C_FEJ 0x02 /* floppy: eject disk */ 54#define AUXIO4C_LED 0x01 /* front panel LED */ 55 56#define AUXIO4M_MB1 0xc0 /* must be set on write? */ 57#define AUXIO4M_FHD 0x20 /* floppy: high density (unreliable?)*/ 58#define AUXIO4M_LTE 0x08 /* link-test enable */ 59 /* power up modem in SPARCbook 3GX */ 60 61#define AUXIO4M_MMX 0x04 /* Monitor/Mouse MUX; what is it? */ 62 /* power up DBRI in SPARCbook 3GX */ 63 64#define AUXIO4M_FTC 0x02 /* floppy: drives Terminal Count pin */ 65#define AUXIO4M_LED 0x01 /* front panel LED */ 66 67/* 68 * We use a fixed virtual address for the register because we use it for 69 * timing short sections of code (via external hardware attached to the LED). 70 */ 71#define AUXIO4C_REG ((volatile u_char *)(AUXREG_VA + 3)) 72#define AUXIO4M_REG ((volatile u_char *)(AUXREG_VA)) 73 74#define LED_ON do { \ 75 if (CPU_ISSUN4M) { \ 76 auxio_regval |= AUXIO4M_LED; \ 77 *AUXIO4M_REG = auxio_regval; \ 78 } else { \ 79 auxio_regval |= AUXIO4C_LED; \ 80 *AUXIO4C_REG = auxio_regval; \ 81 } \ 82} while(0) 83 84#define LED_OFF do { \ 85 if (CPU_ISSUN4M) { \ 86 auxio_regval &= ~AUXIO4M_LED; \ 87 *AUXIO4M_REG = auxio_regval; \ 88 } else { \ 89 auxio_regval &= ~AUXIO4C_LED; \ 90 *AUXIO4C_REG = auxio_regval; \ 91 } \ 92} while(0) 93 94#define LED_FLIP do { \ 95 if (CPU_ISSUN4M) { \ 96 auxio_regval ^= AUXIO4M_LED; \ 97 *AUXIO4M_REG = auxio_regval; \ 98 } else { \ 99 auxio_regval ^= AUXIO4C_LED; \ 100 *AUXIO4C_REG = auxio_regval; \ 101 } \ 102} while(0) 103 104#define FTC_FLIP do { \ 105 if (CPU_ISSUN4M) { \ 106 /* AUXIO4M_FTC bit is auto-clear */ \ 107 *AUXIO4M_REG = auxio_regval | AUXIO4M_FTC; \ 108 /* XXX we need to clear it on hyperSPARC SS20 */ \ 109 DELAY(10); \ 110 *AUXIO4M_REG = auxio_regval; \ 111 } else { \ 112 auxio_regval |= AUXIO4C_FTC; \ 113 *AUXIO4C_REG = auxio_regval; \ 114 DELAY(10); \ 115 auxio_regval &= ~AUXIO4C_FTC; \ 116 *AUXIO4C_REG = auxio_regval; \ 117 } \ 118} while(0) 119 120#define AUXIO_BITS ( \ 121 CPU_ISSUN4M \ 122 ? "\20\6FHD\4LTE\3MMX\2FTC\1LED" \ 123 : "\20\6FHD\5FDC\4FDS\3FTC\2FEJ\1LED" \ 124) 125 126#ifndef _LOCORE 127volatile u_char *auxio_reg; /* Copy of AUXIO_REG */ 128u_char auxio_regval; 129unsigned int auxregbisc(int, int); 130#endif 131