summaryrefslogtreecommitdiffstats
path: root/src/include/isapnp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/isapnp.h')
-rw-r--r--src/include/isapnp.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/include/isapnp.h b/src/include/isapnp.h
new file mode 100644
index 000000000..228823b29
--- /dev/null
+++ b/src/include/isapnp.h
@@ -0,0 +1,124 @@
+/**************************************************************************
+*
+* isapnp.h -- Etherboot isapnp support for the 3Com 3c515
+* Written 2002-2003 by Timothy Legge <tlegge@rogers.com>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*
+* Portions of this code:
+* Copyright (C) 2001 P.J.H.Fox (fox@roestock.demon.co.uk)
+*
+*
+*
+* REVISION HISTORY:
+* ================
+* Version 0.1 April 26, 2002 TJL
+* Version 0.2 01/08/2003 TJL Renamed from 3c515_isapnp.h
+*
+***************************************************************************/
+
+/*extern int read_port;*/
+/*#define DEBUG*/
+#define ADDRESS_ADDR 0x0279
+#define WRITEDATA_ADDR 0x0a79
+/* MIN and MAX READ_ADDR must have the bottom two bits set */
+#define MIN_READ_ADDR 0x0203
+#define START_READ_ADDR 0x203
+#define MAX_READ_ADDR 0x03ff
+/* READ_ADDR_STEP must be a multiple of 4 */
+#ifndef READ_ADDR_STEP
+#define READ_ADDR_STEP 8
+#endif
+
+#ifdef EDEBUG
+static int x;
+#define ADDRESS(x) (outb(x, ADDRESS_ADDR), printf("\nAddress: %hX", x))
+#define WRITE_DATA(x) (outb(x, WRITEDATA_ADDR), printf(" WR(%hX)", x & 0xff))
+#define READ_DATA (x = inb(read_port), printf(" RD(%hX)", x & 0xff), x)
+#define READ_IOPORT(p) (x = inb(p), printf(" [%hX](%hX)", p, x & 0xff), x)
+#else /* !DEBUG */
+#define ADDRESS(x) outb(x, ADDRESS_ADDR)
+#define WRITE_DATA(x) outb(x, WRITEDATA_ADDR)
+#define READ_DATA inb(read_port)
+#define READ_IOPORT(p) inb(p)
+#endif /* !DEBUG */
+
+
+
+#define INIT_LENGTH 32
+
+#define INITDATA { 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe,\
+ 0xdf, 0x6f, 0x37, 0x1b, 0x0d, 0x86, 0xc3, 0x61,\
+ 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45, 0xa2, 0xd1,\
+ 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39 }
+
+/* Registers */
+#define SetRdPort(x) (ADDRESS(0x00),WRITE_DATA((x)>>2),read_port=((x)|3))
+#define SERIALISOLATION ADDRESS(0x01)
+#define CONFIGCONTROL ADDRESS(0x02)
+#define Wake(x) (ADDRESS(0x03),WRITE_DATA(x))
+#define RESOURCEDATA (ADDRESS(0x04),READ_DATA)
+#define STATUS (ADDRESS(0x05),READ_DATA)
+#define CARDSELECTNUMBER ADDRESS(0x06)
+#define LOGICALDEVICENUMBER ADDRESS(0x07)
+#define ACTIVATE ADDRESS(0x30)
+#define IORANGECHECK ADDRESS(0x31)
+
+/* Bits */
+#define CONFIG_RESET 0x01
+#define CONFIG_WAIT_FOR_KEY 0x02
+#define CONFIG_RESET_CSN 0x04
+#define CONFIG_RESET_DRV 0x07
+
+/* Short Tags */
+#define PnPVerNo_TAG 0x01
+#define LogDevId_TAG 0x02
+#define CompatDevId_TAG 0x03
+#define IRQ_TAG 0x04
+#define DMA_TAG 0x05
+#define StartDep_TAG 0x06
+#define EndDep_TAG 0x07
+#define IOport_TAG 0x08
+#define FixedIO_TAG 0x09
+#define RsvdShortA_TAG 0x0A
+#define RsvdShortB_TAG 0x0B
+#define RsvdShortC_TAG 0x0C
+#define RsvdShortD_TAG 0x0D
+#define VendorShort_TAG 0x0E
+#define End_TAG 0x0F
+/* Long Tags */
+#define MemRange_TAG 0x81
+#define ANSIstr_TAG 0x82
+#define UNICODEstr_TAG 0x83
+#define VendorLong_TAG 0x84
+#define Mem32Range_TAG 0x85
+#define FixedMem32Range_TAG 0x86
+#define RsvdLong0_TAG 0xF0
+#define RsvdLong1_TAG 0xF1
+#define RsvdLong2_TAG 0xF2
+#define RsvdLong3_TAG 0xF3
+#define RsvdLong4_TAG 0xF4
+#define RsvdLong5_TAG 0xF5
+#define RsvdLong6_TAG 0xF6
+#define RsvdLong7_TAG 0xF7
+#define RsvdLong8_TAG 0xF8
+#define RsvdLong9_TAG 0xF9
+#define RsvdLongA_TAG 0xFA
+#define RsvdLongB_TAG 0xFB
+#define RsvdLongC_TAG 0xFC
+#define RsvdLongD_TAG 0xFD
+#define RsvdLongE_TAG 0xFE
+#define RsvdLongF_TAG 0xFF
+#define NewBoard_PSEUDOTAG 0x100