fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
at master 146 lines 5.4 kB view raw
1/***************************************************************************** 2 * pce * 3 *****************************************************************************/ 4 5/***************************************************************************** 6 * File name: src/devices/pci.h * 7 * Created: 2004-06-05 by Hampa Hug <hampa@hampa.ch> * 8 * Copyright: (C) 2004-2009 Hampa Hug <hampa@hampa.ch> * 9 *****************************************************************************/ 10 11/***************************************************************************** 12 * This program is free software. You can redistribute it and / or modify it * 13 * under the terms of the GNU General Public License version 2 as published * 14 * by the Free Software Foundation. * 15 * * 16 * This program is distributed in the hope that it will be useful, but * 17 * WITHOUT ANY WARRANTY, without even the implied warranty of * 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * 19 * Public License for more details. * 20 *****************************************************************************/ 21 22 23#ifndef PCE_DEVICES_PCI_H 24#define PCE_DEVICES_PCI_H 1 25 26 27#include <stdio.h> 28 29#include <devices/memory.h> 30 31 32#define PCI_REG_MAX 8 33#define PCI_MEM_MAX 8 34 35#define PCIID_VENDOR_INTEL 0x8086 36#define PCIID_VENDOR_OPTI 0x1045 37#define PCIID_VENDOR_NS 0x100b 38#define PCIID_VENDOR_VIA 0x1106 39 40 41struct pci_bus_t; 42 43 44typedef struct { 45 unsigned index; 46 47 struct pci_bus_t *pci; 48 49 mem_blk_t *reg[PCI_REG_MAX]; 50 mem_blk_t *mem[PCI_MEM_MAX]; 51 52 unsigned char config[256]; 53 unsigned char wrmask[256]; 54 55 void *cfg_ext; 56 57 mem_get_uint8_f get_cfg8; 58 mem_get_uint16_f get_cfg16; 59 mem_get_uint32_f get_cfg32; 60 61 mem_set_uint8_f set_cfg8; 62 mem_set_uint16_f set_cfg16; 63 mem_set_uint32_f set_cfg32; 64 65 void (*intr[4]) (void *ext, unsigned char val); 66 void *intr_ext[4]; 67 unsigned char intr_val[4]; 68 69 void *ext; 70} pci_dev_t; 71 72 73typedef struct pci_bus_t { 74 pci_dev_t *dev[32]; 75 76 memory_t *asio; 77 memory_t *asmem; 78 79 unsigned long cfgaddr; 80 unsigned long cfgdata; 81 82 void (*irq[32][4]) (void *ext, unsigned char val); 83 void *irq_ext[32][4]; 84 unsigned char irq_val[32][4]; 85} pci_bus_t; 86 87 88void pci_dev_init (pci_dev_t *dev); 89void pci_dev_free (pci_dev_t *dev); 90 91void pci_dev_set_intr_fct (pci_dev_t *dev, unsigned intr, void *ext, void *fct); 92void pci_dev_set_intr (pci_dev_t *dev, unsigned intr, unsigned char val); 93void pci_dev_set_inta (pci_dev_t *dev, unsigned char val); 94void pci_dev_set_intb (pci_dev_t *dev, unsigned char val); 95void pci_dev_set_intc (pci_dev_t *dev, unsigned char val); 96void pci_dev_set_intd (pci_dev_t *dev, unsigned char val); 97 98void pci_dev_set_device_id (pci_dev_t *dev, unsigned vendor, unsigned id); 99 100void pci_dev_set_cfg_mask (pci_dev_t *dev, unsigned i, unsigned n, int val); 101 102unsigned char pci_dev_get_cfg8 (pci_dev_t *dev, unsigned long addr); 103unsigned short pci_dev_get_cfg16 (pci_dev_t *dev, unsigned long addr); 104unsigned long pci_dev_get_cfg32 (pci_dev_t *dev, unsigned long addr); 105 106void pci_dev_set_cfg8 (pci_dev_t *dev, unsigned long addr, unsigned char val); 107void pci_dev_set_cfg16 (pci_dev_t *dev, unsigned long addr, unsigned short val); 108void pci_dev_set_cfg32 (pci_dev_t *dev, unsigned long addr, unsigned long val); 109 110 111void pci_init (pci_bus_t *pci); 112void pci_free (pci_bus_t *pci); 113 114void pci_set_device (pci_bus_t *pci, pci_dev_t *dev, unsigned i); 115 116void pci_set_asio (pci_bus_t *pci, memory_t *as); 117void pci_set_asmem (pci_bus_t *pci, memory_t *as); 118 119void pci_set_irq_fct (pci_bus_t *pci, unsigned dev, unsigned intr, void *ext, void *fct); 120 121void pci_set_cfg8 (pci_bus_t *pci, unsigned dev, unsigned long addr, unsigned char val); 122void pci_set_cfg16 (pci_bus_t *pci, unsigned dev, unsigned long addr, unsigned short val); 123void pci_set_cfg32 (pci_bus_t *pci, unsigned dev, unsigned long addr, unsigned long val); 124 125unsigned char pci_get_cfg8 (pci_bus_t *pci, unsigned dev, unsigned long addr); 126unsigned short pci_get_cfg16 (pci_bus_t *pci, unsigned dev, unsigned long addr); 127unsigned long pci_get_cfg32 (pci_bus_t *pci, unsigned dev, unsigned long addr); 128 129void pci_set_intr (pci_bus_t *pci, unsigned dev, unsigned intr, unsigned char val); 130void pci_set_inta (pci_bus_t *pci, unsigned dev, unsigned char val); 131void pci_set_intb (pci_bus_t *pci, unsigned dev, unsigned char val); 132void pci_set_intc (pci_bus_t *pci, unsigned dev, unsigned char val); 133void pci_set_intd (pci_bus_t *pci, unsigned dev, unsigned char val); 134 135unsigned long pci_get_config_addr (pci_bus_t *pci); 136unsigned char pci_get_config_data8 (pci_bus_t *pci, unsigned addr); 137unsigned short pci_get_config_data16 (pci_bus_t *pci, unsigned addr); 138unsigned long pci_get_config_data32 (pci_bus_t *pci); 139 140void pci_set_config_addr (pci_bus_t *pci, unsigned long val); 141void pci_set_config_data8 (pci_bus_t *pci, unsigned addr, unsigned char val); 142void pci_set_config_data16 (pci_bus_t *pci, unsigned addr, unsigned short val); 143void pci_set_config_data32 (pci_bus_t *pci, unsigned long val); 144 145 146#endif