1 /* $Id: auxio.h,v 1.2 1999/09/21 14:39:25 davem Exp $
2 * auxio.h: Definitions and code for the Auxiliary I/O register.
4 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
6 #ifndef _SPARC64_AUXIO_H
7 #define _SPARC64_AUXIO_H
9 #include <asm/system.h>
11 /* FIXME: All of this should be checked for sun4u. It has /sbus/auxio, but
12 I don't know whether it is the same and don't have a floppy */
14 extern unsigned long auxio_register
;
16 /* This register is an unsigned char in IO space. It does two things.
17 * First, it is used to control the front panel LED light on machines
18 * that have it (good for testing entry points to trap handlers and irq's)
19 * Secondly, it controls various floppy drive parameters.
21 #define AUXIO_ORMEIN 0xf0 /* All writes must set these bits. */
22 #define AUXIO_ORMEIN4M 0xc0 /* sun4m - All writes must set these bits. */
23 #define AUXIO_FLPY_DENS 0x20 /* Floppy density, high if set. Read only. */
24 #define AUXIO_FLPY_DCHG 0x10 /* A disk change occurred. Read only. */
25 #define AUXIO_EDGE_ON 0x10 /* sun4m - On means Jumper block is in. */
26 #define AUXIO_FLPY_DSEL 0x08 /* Drive select/start-motor. Write only. */
27 #define AUXIO_LINK_TEST 0x08 /* sun4m - On means TPE Carrier detect. */
29 /* Set the following to one, then zero, after doing a pseudo DMA transfer. */
30 #define AUXIO_FLPY_TCNT 0x04 /* Floppy terminal count. Write only. */
32 /* Set the following to zero to eject the floppy. */
33 #define AUXIO_FLPY_EJCT 0x02 /* Eject floppy disk. Write only. */
34 #define AUXIO_LED 0x01 /* On if set, off if unset. Read/Write */
36 #define AUXREG (auxio_register)
38 /* These are available on sun4c */
41 sbus_writeb(sbus_readb(AUXREG) | \
42 (AUXIO_ORMEIN | AUXIO_LED), AUXREG); \
44 #define TURN_OFF_LED \
46 sbus_writeb((sbus_readb(AUXREG) | \
47 AUXIO_ORMEIN) & (~AUXIO_LED), \
52 sbus_writeb((sbus_readb(AUXREG) | \
53 AUXIO_ORMEIN) ^ AUXIO_LEN, \
56 #define FLPY_MOTORON \
58 sbus_writeb(sbus_readb(AUXREG) | \
59 (AUXIO_ORMEIN | AUXIO_FLPY_DSEL), \
62 #define FLPY_MOTOROFF \
64 sbus_writeb((sbus_readb(AUXREG) | \
65 AUXIO_ORMEIN) & (~AUXIO_FLPY_DSEL), \
70 sbus_writeb((sbus_readb(AUXREG) | \
71 AUXIO_ORMEIN) | AUXIO_FLPY_TCNT, \
74 #define FLPY_TCNTOFF \
76 sbus_writeb((sbus_readb(AUXREG) | \
77 AUXIO_ORMEIN) & (~AUXIO_FLPY_TCNT), \
82 extern __inline__
void set_auxio(unsigned char bits_on
, unsigned char bits_off
)
87 save_flags(flags
); cli();
92 regval
= sbus_readb(AUXREG
);
93 newval
= regval
| bits_on
;
95 newval
|= AUXIO_ORMEIN4M
;
96 sbus_writeb(newval
, AUXREG
);
100 #endif /* !(__ASSEMBLY__) */
103 /* AUXIO2 (Power Off Control) */
104 extern __volatile__
unsigned char * auxio_power_register
;
106 #define AUXIO_POWER_DETECT_FAILURE 32
107 #define AUXIO_POWER_CLEAR_FAILURE 2
108 #define AUXIO_POWER_OFF 1
111 #endif /* !(_SPARC_AUXIO_H) */