1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | /* * eisa_eeprom.h - provide support for EISA adapters in PA-RISC machines * * 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. * * Copyright (c) 2001, 2002 Daniel Engstrom <5116@telia.com> * */ #ifndef ASM_EISA_EEPROM_H #define ASM_EISA_EEPROM_H extern void __iomem *eisa_eeprom_addr; #define HPEE_MAX_LENGTH 0x2000 /* maximum eeprom length */ #define HPEE_SLOT_INFO(slot) (20+(48*slot)) struct eeprom_header { u_int32_t num_writes; /* number of writes */ u_int8_t flags; /* flags, usage? */ u_int8_t ver_maj; u_int8_t ver_min; u_int8_t num_slots; /* number of EISA slots in system */ u_int16_t csum; /* checksum, I don't know how to calculate this */ u_int8_t pad[10]; } __attribute__ ((packed)); struct eeprom_eisa_slot_info { u_int32_t eisa_slot_id; u_int32_t config_data_offset; u_int32_t num_writes; u_int16_t csum; u_int16_t num_functions; u_int16_t config_data_length; /* bits 0..3 are the duplicate slot id */ #define HPEE_SLOT_INFO_EMBEDDED 0x10 #define HPEE_SLOT_INFO_VIRTUAL 0x20 #define HPEE_SLOT_INFO_NO_READID 0x40 #define HPEE_SLOT_INFO_DUPLICATE 0x80 u_int8_t slot_info; #define HPEE_SLOT_FEATURES_ENABLE 0x01 #define HPEE_SLOT_FEATURES_IOCHK 0x02 #define HPEE_SLOT_FEATURES_CFG_INCOMPLETE 0x80 u_int8_t slot_features; u_int8_t ver_min; u_int8_t ver_maj; #define HPEE_FUNCTION_INFO_HAVE_TYPE 0x01 #define HPEE_FUNCTION_INFO_HAVE_MEMORY 0x02 #define HPEE_FUNCTION_INFO_HAVE_IRQ 0x04 #define HPEE_FUNCTION_INFO_HAVE_DMA 0x08 #define HPEE_FUNCTION_INFO_HAVE_PORT 0x10 #define HPEE_FUNCTION_INFO_HAVE_PORT_INIT 0x20 /* I think there are two slighty different * versions of the function_info field * one int the fixed header and one optional * in the parsed slot data area */ #define HPEE_FUNCTION_INFO_HAVE_FUNCTION 0x01 #define HPEE_FUNCTION_INFO_F_DISABLED 0x80 #define HPEE_FUNCTION_INFO_CFG_FREE_FORM 0x40 u_int8_t function_info; #define HPEE_FLAG_BOARD_IS_ISA 0x01 /* flag and minor version for isa board */ u_int8_t flags; u_int8_t pad[24]; } __attribute__ ((packed)); #define HPEE_MEMORY_MAX_ENT 9 /* memory descriptor: byte 0 */ #define HPEE_MEMORY_WRITABLE 0x01 #define HPEE_MEMORY_CACHABLE 0x02 #define HPEE_MEMORY_TYPE_MASK 0x18 #define HPEE_MEMORY_TYPE_SYS 0x00 #define HPEE_MEMORY_TYPE_EXP 0x08 #define HPEE_MEMORY_TYPE_VIR 0x10 #define HPEE_MEMORY_TYPE_OTH 0x18 #define HPEE_MEMORY_SHARED 0x20 #define HPEE_MEMORY_MORE 0x80 /* memory descriptor: byte 1 */ #define HPEE_MEMORY_WIDTH_MASK 0x03 #define HPEE_MEMORY_WIDTH_BYTE 0x00 #define HPEE_MEMORY_WIDTH_WORD 0x01 #define HPEE_MEMORY_WIDTH_DWORD 0x02 #define HPEE_MEMORY_DECODE_MASK 0x0c #define HPEE_MEMORY_DECODE_20BITS 0x00 #define HPEE_MEMORY_DECODE_24BITS 0x04 #define HPEE_MEMORY_DECODE_32BITS 0x08 /* byte 2 and 3 are a 16bit LE value * containing the memory size in kilobytes */ /* byte 4,5,6 are a 24bit LE value * containing the memory base address */ #define HPEE_IRQ_MAX_ENT 7 /* Interrupt entry: byte 0 */ #define HPEE_IRQ_CHANNEL_MASK 0xf #define HPEE_IRQ_TRIG_LEVEL 0x20 #define HPEE_IRQ_MORE 0x80 /* byte 1 seems to be unused */ #define HPEE_DMA_MAX_ENT 4 /* dma entry: byte 0 */ #define HPEE_DMA_CHANNEL_MASK 7 #define HPEE_DMA_SIZE_MASK 0xc #define HPEE_DMA_SIZE_BYTE 0x0 #define HPEE_DMA_SIZE_WORD 0x4 #define HPEE_DMA_SIZE_DWORD 0x8 #define HPEE_DMA_SHARED 0x40 #define HPEE_DMA_MORE 0x80 /* dma entry: byte 1 */ #define HPEE_DMA_TIMING_MASK 0x30 #define HPEE_DMA_TIMING_ISA 0x0 #define HPEE_DMA_TIMING_TYPEA 0x10 #define HPEE_DMA_TIMING_TYPEB 0x20 #define HPEE_DMA_TIMING_TYPEC 0x30 #define HPEE_PORT_MAX_ENT 20 /* port entry byte 0 */ #define HPEE_PORT_SIZE_MASK 0x1f #define HPEE_PORT_SHARED 0x40 #define HPEE_PORT_MORE 0x80 /* byte 1 and 2 is a 16bit LE value * containing the start port number */ #define HPEE_PORT_INIT_MAX_LEN 60 /* in bytes here */ /* port init entry byte 0 */ #define HPEE_PORT_INIT_WIDTH_MASK 0x3 #define HPEE_PORT_INIT_WIDTH_BYTE 0x0 #define HPEE_PORT_INIT_WIDTH_WORD 0x1 #define HPEE_PORT_INIT_WIDTH_DWORD 0x2 #define HPEE_PORT_INIT_MASK 0x4 #define HPEE_PORT_INIT_MORE 0x80 #define HPEE_SELECTION_MAX_ENT 26 #define HPEE_TYPE_MAX_LEN 80 #endif |