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
|
// PIR table generation (for emulators)
// DO NOT ADD NEW FEATURES HERE. (See paravirt.c / biostables.c instead.)
//
// Copyright (C) 2008 Kevin O'Connor <kevin@koconnor.net>
// Copyright (C) 2002 MandrakeSoft S.A.
//
// This file may be distributed under the terms of the GNU LGPLv3 license.
#include "config.h" // CONFIG_*
#include "output.h" // dprintf
#include "std/pirtable.h" // struct pir_header
#include "string.h" // checksum
#include "util.h" // PirAddr
struct pir_table {
struct pir_header pir;
struct pir_slot slots[6];
} PACKED;
static struct pir_table PIR_TABLE = {
.pir = {
.version = 0x0100,
.size = sizeof(struct pir_table),
.router_devfunc = 0x08,
.compatible_devid = 0x122e8086,
},
.slots = {
{
// first slot entry PCI-to-ISA (embedded)
.dev = 1<<3,
.links = {
{.link = 0x60, .bitmap = 0xdef8}, // INTA#
{.link = 0x61, .bitmap = 0xdef8}, // INTB#
{.link = 0x62, .bitmap = 0xdef8}, // INTC#
{.link = 0x63, .bitmap = 0xdef8}, // INTD#
},
.slot_nr = 0, // embedded
}, {
// second slot entry: 1st PCI slot
.dev = 2<<3,
.links = {
{.link = 0x61, .bitmap = 0xdef8}, // INTA#
{.link = 0x62, .bitmap = 0xdef8}, // INTB#
{.link = 0x63, .bitmap = 0xdef8}, // INTC#
{.link = 0x60, .bitmap = 0xdef8}, // INTD#
},
.slot_nr = 1,
}, {
// third slot entry: 2nd PCI slot
.dev = 3<<3,
.links = {
{.link = 0x62, .bitmap = 0xdef8}, // INTA#
{.link = 0x63, .bitmap = 0xdef8}, // INTB#
{.link = 0x60, .bitmap = 0xdef8}, // INTC#
{.link = 0x61, .bitmap = 0xdef8}, // INTD#
},
.slot_nr = 2,
}, {
// 4th slot entry: 3rd PCI slot
.dev = 4<<3,
.links = {
{.link = 0x63, .bitmap = 0xdef8}, // INTA#
{.link = 0x60, .bitmap = 0xdef8}, // INTB#
{.link = 0x61, .bitmap = 0xdef8}, // INTC#
{.link = 0x62, .bitmap = 0xdef8}, // INTD#
},
.slot_nr = 3,
}, {
// 5th slot entry: 4th PCI slot
.dev = 5<<3,
.links = {
{.link = 0x60, .bitmap = 0xdef8}, // INTA#
{.link = 0x61, .bitmap = 0xdef8}, // INTB#
{.link = 0x62, .bitmap = 0xdef8}, // INTC#
{.link = 0x63, .bitmap = 0xdef8}, // INTD#
},
.slot_nr = 4,
}, {
// 6th slot entry: 5th PCI slot
.dev = 6<<3,
.links = {
{.link = 0x61, .bitmap = 0xdef8}, // INTA#
{.link = 0x62, .bitmap = 0xdef8}, // INTB#
{.link = 0x63, .bitmap = 0xdef8}, // INTC#
{.link = 0x60, .bitmap = 0xdef8}, // INTD#
},
.slot_nr = 5,
},
}
};
void
pirtable_setup(void)
{
if (! CONFIG_PIRTABLE)
return;
dprintf(3, "init PIR table\n");
PIR_TABLE.pir.signature = PIR_SIGNATURE;
PIR_TABLE.pir.checksum -= checksum(&PIR_TABLE, sizeof(PIR_TABLE));
copy_pir(&PIR_TABLE);
}
|