1c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH Modified by umesh on 16th may 2001 3c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH Modified by sarath on 22nd may 2001 4c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 5c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 7c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi/drivers/amcc_s5933_v_58.h 8c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH Stuff for AMCC S5933 PCI Controller 10c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH Author: Michal Dobes <majkl@tesnet.cz> 12c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 13c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH Inspirated from general-purpose AMCC S5933 PCI Matchmaker driver 14c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH made by Andrea Cisternino <acister@pcape1.pi.infn.it> 15c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH and as result of espionage from MITE code made by David A. Schleef. 16c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH Thanks to AMCC for their on-line documentation and bus master DMA 17c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH example. 18c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 19c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 20c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#ifndef _AMCC_S5933_H_ 21c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define _AMCC_S5933_H_ 22c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 23c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include <linux/pci.h> 24c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include "../../comedidev.h" 25c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 26c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#ifdef PCI_SUPPORT_VER1 27c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#error Sorry, no support for 2.1.55 and older! :-(((( 28c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#endif 29c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 30c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/***********Added by sarath for compatibility with APCI3120 31c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 32c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*************************/ 33c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 342696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton#define FIFO_ADVANCE_ON_BYTE_2 0x20000000 /* written on base0 */ 35c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 362696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton#define AMWEN_ENABLE 0x02 /* added for step 6 dma written on base2 */ 37c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define A2P_FIFO_WRITE_ENABLE 0x01 38c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 392696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton#define AGCSTS_TC_ENABLE 0x10000000 /* Added for transfer count enable bit */ 40c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 412696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* ADDON RELATED ADDITIONS */ 422696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Constant */ 43c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ENABLE_TRANSFER_ADD_ON_LOW 0x00 44c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH 0x1200 45c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_A2P_FIFO_MANAGEMENT 0x04000400L 46c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_AMWEN_ENABLE 0x02 47c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_A2P_FIFO_WRITE_ENABLE 0x01 48c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_FIFO_ADVANCE_ON_BYTE_2 0x20000000L 49c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ENABLE_WRITE_TC_INT 0x00004000L 50c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_CLEAR_WRITE_TC_INT 0x00040000L 51c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_DISABLE_AMWEN_AND_A2P_FIFO_WRITE 0x0 52c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_DISABLE_BUS_MASTER_ADD_ON 0x0 53c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_DISABLE_BUS_MASTER_PCI 0x0 54c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 552696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /* ADD_ON ::: this needed since apci supports 16 bit interface to add on */ 56c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ADD_ON_AGCSTS_LOW 0x3C 57c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ADD_ON_AGCSTS_HIGH APCI3120_ADD_ON_AGCSTS_LOW + 2 58c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ADD_ON_MWAR_LOW 0x24 59c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ADD_ON_MWAR_HIGH APCI3120_ADD_ON_MWAR_LOW + 2 60c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ADD_ON_MWTC_LOW 0x058 61c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_ADD_ON_MWTC_HIGH APCI3120_ADD_ON_MWTC_LOW + 2 62c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 632696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* AMCC */ 64c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_AMCC_OP_MCSR 0x3C 65c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define APCI3120_AMCC_OP_REG_INTCSR 0x38 66c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 67c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*******from here all upward definitions are added by sarath */ 68c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 69c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 70c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC Operation Register Offsets - PCI */ 71c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 72c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 73c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB1 0x00 74c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB2 0x04 75c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB3 0x08 76c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB4 0x0c 77c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB1 0x10 78c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB2 0x14 79c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB3 0x18 80c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB4 0x1c 81c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_FIFO 0x20 82c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MWAR 0x24 83c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MWTC 0x28 84c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MRAR 0x2c 85c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MRTC 0x30 86c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MBEF 0x34 87c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_INTCSR 0x38 8874b894e56abcb2403894b268100773f4aabe1999Bill Pemberton#define AMCC_OP_REG_INTCSR_SRC (AMCC_OP_REG_INTCSR + 2) /* int source */ 89c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_INTCSR_FEC (AMCC_OP_REG_INTCSR + 3) /* FIFO ctrl */ 90c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MCSR 0x3c 91c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MCSR_NVDATA (AMCC_OP_REG_MCSR + 2) /* Data in byte 2 */ 92c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MCSR_NVCMD (AMCC_OP_REG_MCSR + 3) /* Command in byte 3 */ 93c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 94c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_FIFO_DEPTH_DWORD 8 95c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_FIFO_DEPTH_BYTES (8 * sizeof (u32)) 96c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 97c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 98c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC Operation Registers Size - PCI */ 99c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 100c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_SIZE 64 /* in bytes */ 102c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 103c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 104c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC Operation Register Offsets - Add-on */ 105c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 106c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 107c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB1 0x00 108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB2 0x04 109c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB3 0x08 110c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB4 0x0c 111c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB1 0x10 112c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB2 0x14 113c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB3 0x18 114c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB4 0x1c 115c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AFIFO 0x20 116c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMWAR 0x24 117c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_APTA 0x28 118c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_APTD 0x2c 119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMRAR 0x30 120c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMBEF 0x34 121c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AINT 0x38 122c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AGCSTS 0x3c 123c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMWTC 0x58 124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMRTC 0x5c 125c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 126c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 127c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC - Add-on General Control/Status Register */ 128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_CONTROL_MASK 0xfffff000 131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_NV_ACC_MASK 0xe0000000 132c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_MASK 0x0e000000 133c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_NV_DA_MASK 0x00ff0000 134c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_BIST_MASK 0x0000f000 135c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_STATUS_MASK 0x000000ff 136c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_TCZERO_MASK 0x000000c0 137c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FIFO_ST_MASK 0x0000003f 138c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 139c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_MBFLAGS 0x08000000 140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_P2A_FIFO 0x04000000 141c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_A2P_FIFO 0x02000000 142c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_FIFOS (AGCSTS_RESET_A2P_FIFO | AGCSTS_RESET_P2A_FIFO) 143c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 144c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_A2P_TCOUNT 0x00000080 145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_P2A_TCOUNT 0x00000040 146c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 147c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_P2A_EMPTY 0x00000020 148c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_P2A_HALF 0x00000010 149c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_P2A_FULL 0x00000008 150c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 151c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_A2P_EMPTY 0x00000004 152c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_A2P_HALF 0x00000002 153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_A2P_FULL 0x00000001 154c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 155c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 156c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC - Add-on Interrupt Control/Status Register */ 157c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 158c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 159c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_INT_MASK 0x00ff0000 160c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_SEL_MASK 0x0000ffff 161c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IS_ENSEL_MASK 0x00001f1f 162c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 163c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_INT_ASSERTED 0x00800000 164c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_BM_ERROR 0x00200000 165c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_BIST_INT 0x00100000 166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 167c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_RT_COMPLETE 0x00080000 168c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_WT_COMPLETE 0x00040000 169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 170c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OUT_MB_INT 0x00020000 171c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IN_MB_INT 0x00010000 172c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 173c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_READ_COMPL 0x00008000 174c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_WRITE_COMPL 0x00004000 175c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 176c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OMB_ENABLE 0x00001000 177c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OMB_SELECT 0x00000c00 178c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OMB_BYTE 0x00000300 179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 180c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IMB_ENABLE 0x00000010 181c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IMB_SELECT 0x0000000c 182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IMB_BYTE 0x00000003 183c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 184c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* Enable Bus Mastering */ 185c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define EN_A2P_TRANSFERS 0x00000400 186c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* FIFO Flag Reset */ 187c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define RESET_A2P_FLAGS 0x04000000L 188c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* FIFO Relative Priority */ 189c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define A2P_HI_PRIORITY 0x00000100L 190c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* Identify Interrupt Sources */ 191c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define ANY_S593X_INT 0x00800000L 192c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define READ_TC_INT 0x00080000L 193c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define WRITE_TC_INT 0x00040000L 194c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define IN_MB_INT 0x00020000L 195c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define MASTER_ABORT_INT 0x00100000L 196c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define TARGET_ABORT_INT 0x00200000L 197c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define BUS_MASTER_INT 0x00200000L 198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 200c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct { 202c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *next; 203c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int used; 204c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pci_dev *pcidev; 205c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned short vendor; 206c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned short device; 207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int master; 208c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned char pci_bus; 209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned char pci_slot; 210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned char pci_func; 211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int io_addr[5]; 212c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int irq; 213c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}; 214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2152696fb57e6af653dd8b4df41b16754579f42fc78Bill Pembertonstruct pcilst_struct *amcc_devices; /* ptr to root list of all amcc devices */ 216c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_init(unsigned short pci_vendor, char display); 220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_cleanup(unsigned short pci_vendor); 221c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, 22215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short 22315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman device_id); 224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_find_free_pci_card_by_position(unsigned short vendor_id, 22515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short device_id, 22615d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_bus, 22715d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_slot, 22815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman struct pcilst_struct **card); 229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id, 23015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short device_id, 23115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_bus, 23215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_slot); 233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 234c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_alloc(struct pcilst_struct *amcc); 235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_free(struct pcilst_struct *amcc); 236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_display(void); 237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_data(struct pcilst_struct *amcc, 23815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned char *pci_bus, unsigned char *pci_slot, 23915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned char *pci_func, unsigned short *io_addr, 24015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short *irq, unsigned short *master); 241c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 242c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 243c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* build list of amcc cards in this system */ 245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_init(unsigned short pci_vendor, char display) 246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pci_dev *pcidev; 248c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *amcc, *last; 249c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int i; 250c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 251c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc_devices = NULL; 252c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH last = NULL; 253c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 254c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pci_for_each_dev(pcidev) { 255c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (pcidev->vendor == pci_vendor) { 2567a6cb0d5497418599d2125b670926b75e673861cJulia Lawall amcc = kzalloc(sizeof(*amcc), GFP_KERNEL); 257a2279ae5b58edb7cbe2196d08572fcf59f292354Roel Kluin if (amcc == NULL) 258a2279ae5b58edb7cbe2196d08572fcf59f292354Roel Kluin continue; 259a2279ae5b58edb7cbe2196d08572fcf59f292354Roel Kluin 260c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->pcidev = pcidev; 261c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (last) { 262c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH last->next = amcc; 263c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 264c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc_devices = amcc; 265c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 266c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH last = amcc; 267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 268c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->vendor = pcidev->vendor; 269c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->device = pcidev->device; 270c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#if 0 2712696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton amcc->master = pcidev->master; /* how get this information under 2.4 kernels? */ 272c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#endif 273c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->pci_bus = pcidev->bus->number; 274c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->pci_slot = PCI_SLOT(pcidev->devfn); 275c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->pci_func = PCI_FUNC(pcidev->devfn); 276c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < 5; i++) 277c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->io_addr[i] = 27815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman pcidev->resource[i].start & ~3UL; 279c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->irq = pcidev->irq; 280c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 281c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 282c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 283c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (display) 284c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH v_pci_card_list_display(); 285c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 286c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 287c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 288c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* free up list of amcc cards in this system */ 289c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_cleanup(unsigned short pci_vendor) 290c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 291c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *amcc, *next; 292c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 293c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (amcc = amcc_devices; amcc; amcc = next) { 294c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH next = amcc->next; 295c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH kfree(amcc); 296c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc_devices = NULL; 299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 301c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 302c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* find first unused card with this device_id */ 303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, 30415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short device_id) 305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *amcc, *next; 307c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 308c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (amcc = amcc_devices; amcc; amcc = next) { 309c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH next = amcc->next; 310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((!amcc->used) && (amcc->device == device_id) 31115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman && (amcc->vendor == vendor_id)) 312c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return amcc; 313c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 315c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 316c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return NULL; 317c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 318c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 319c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* find card on requested position */ 321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_find_free_pci_card_by_position(unsigned short vendor_id, 32215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short device_id, 32315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_bus, 32415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_slot, 32515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman struct pcilst_struct **card) 326c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 327c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *amcc, *next; 328c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *card = NULL; 330c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (amcc = amcc_devices; amcc; amcc = next) { 331c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH next = amcc->next; 332c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((amcc->vendor == vendor_id) && (amcc->device == device_id) 33315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman && (amcc->pci_bus == pci_bus) 33415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman && (amcc->pci_slot == pci_slot)) { 335c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!(amcc->used)) { 336c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *card = amcc; 3372696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return 0; /* ok, card is found */ 338c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 3395f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman printk 34015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman (" - \nCard on requested position is used b:s %d:%d!\n", 34115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman pci_bus, pci_slot); 3422696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return 2; /* card exist but is used */ 343c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 344c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 345c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 346c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3472696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return 1; /* no card found */ 348c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 349c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 350c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 351c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* mark card as used */ 352c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_alloc(struct pcilst_struct *amcc) 353c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 354c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!amcc) 355c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -1; 356c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 357c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (amcc->used) 358c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 1; 359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->used = 1; 360c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 362c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 363c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 364c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* mark card as free */ 365c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_free(struct pcilst_struct *amcc) 366c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 367c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!amcc) 368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -1; 369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 370c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!amcc->used) 371c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 1; 372c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH amcc->used = 0; 373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 374c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 375c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 377c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* display list of found cards */ 378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_display(void) 379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *amcc, *next; 381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 382c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("List of pci cards\n"); 383c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("bus:slot:func vendor device master io_amcc io_daq irq used\n"); 384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (amcc = amcc_devices; amcc; amcc = next) { 386c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH next = amcc->next; 38715d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman printk 38815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman ("%2d %2d %2d 0x%4x 0x%4x %3s 0x%4x 0x%4x %2d %2d\n", 38915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman amcc->pci_bus, amcc->pci_slot, amcc->pci_func, 39015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman amcc->vendor, amcc->device, amcc->master ? "yes" : "no", 39115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman amcc->io_addr[0], amcc->io_addr[2], amcc->irq, amcc->used); 392c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 393c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 394c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 396c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 397c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* return all card information for driver */ 398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_data(struct pcilst_struct *amcc, 39915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned char *pci_bus, unsigned char *pci_slot, 40015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned char *pci_func, unsigned short *io_addr, 40115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short *irq, unsigned short *master) 402c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 403c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int i; 404c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!amcc) 406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -1; 407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *pci_bus = amcc->pci_bus; 408c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *pci_slot = amcc->pci_slot; 409c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *pci_func = amcc->pci_func; 410c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < 5; i++) 411c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH io_addr[i] = amcc->io_addr[i]; 412c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *irq = amcc->irq; 413c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *master = amcc->master; 414c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 415c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 416c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 417c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/ 418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* select and alloc card */ 419c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id, 42015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short device_id, 42115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_bus, 42215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman unsigned short pci_slot) 423c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 424c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH struct pcilst_struct *card; 425c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4262696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton if ((pci_bus < 1) & (pci_slot < 1)) { /* use autodetection */ 427c3744138715045adb316284ee7a1e608f0278f6cBill Pemberton card = ptr_find_free_pci_card_by_device(vendor_id, device_id); 428c3744138715045adb316284ee7a1e608f0278f6cBill Pemberton if (card == NULL) { 4295f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman printk(" - Unused card not found in system!\n"); 430c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return NULL; 431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 432c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 433c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (i_find_free_pci_card_by_position(vendor_id, device_id, 43415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman pci_bus, pci_slot, 43515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman &card)) { 436c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 1: 4375f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman printk 43815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman (" - Card not found on requested position b:s %d:%d!\n", 43915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman pci_bus, pci_slot); 440c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return NULL; 441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 4425f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman printk 44315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman (" - Card on requested position is used b:s %d:%d!\n", 44415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman pci_bus, pci_slot); 445c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return NULL; 446c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 447c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 448c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (i_pci_card_alloc(card) != 0) { 4505f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman printk(" - Can't allocate card!\n"); 451c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return NULL; 452c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 453c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 454c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return card; 455c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 456c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 457c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#endif 458