WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] hvmloader: add code to generate a $PIR ta

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] hvmloader: add code to generate a $PIR table.
From: Xen patchbot-unstable <patchbot@xxxxxxx>
Date: Thu, 16 Jun 2011 11:12:18 +0100
Delivery-date: Thu, 16 Jun 2011 03:24:49 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1306943416 -3600
# Node ID 221f431092c04df90ed017f7471ce9641356d40d
# Parent  303635b6fe5bd523e0919b0e60fd69b1a4322c55
hvmloader: add code to generate a $PIR table.

Does not replace the table hardcoded in ROMBIOS (it ain't broke) but
is used for SeaBIOS.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---


diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/Makefile
--- a/tools/firmware/hvmloader/Makefile Wed Jun 01 16:49:23 2011 +0100
+++ b/tools/firmware/hvmloader/Makefile Wed Jun 01 16:50:16 2011 +0100
@@ -30,7 +30,7 @@
 
 OBJS  = hvmloader.o mp_tables.o util.o smbios.o 
 OBJS += 32bitbios_support.o smp.o cacheattr.o xenbus.o
-OBJS += e820.o pci.o
+OBJS += e820.o pci.o pir.o
 ifeq ($(debug),y)
 OBJS += tests.o
 endif
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/config.h
--- a/tools/firmware/hvmloader/config.h Wed Jun 01 16:49:23 2011 +0100
+++ b/tools/firmware/hvmloader/config.h Wed Jun 01 16:50:16 2011 +0100
@@ -31,6 +31,7 @@
     void (*acpi_build_tables)(void);
     void (*create_mp_tables)(void);
     void (*create_smbios_tables)(void);
+    void (*create_pir_tables)(void);
 };
 
 extern struct bios_config rombios_config;
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c      Wed Jun 01 16:49:23 2011 +0100
+++ b/tools/firmware/hvmloader/hvmloader.c      Wed Jun 01 16:50:16 2011 +0100
@@ -423,9 +423,12 @@
     if (bios->bios_relocate)
         bios->bios_relocate();
 
-    if ( bios->create_mp_tables &&
-         ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) )
-        bios->create_mp_tables();
+    if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) {
+        if ( bios->create_mp_tables )
+            bios->create_mp_tables();
+        if ( bios->create_pir_tables )
+            bios->create_pir_tables();
+    }
 
     if ( bios->load_roms )
     {
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/pir.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/pir.c    Wed Jun 01 16:50:16 2011 +0100
@@ -0,0 +1,67 @@
+/*
+ * pir.c: Support for genrating $PIR tables.
+ *
+ * Copyright (c) 2011 Citrix Systems Inc
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope 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.
+ */
+
+#include "config.h"
+#include "pir_types.h"
+#include "util.h"
+
+/*
+ * The structure of these tables is described in
+ * http://www.microsoft.com/taiwan/whdc/archive/pciirq.mspx
+ */
+unsigned long create_pir_tables(void)
+{
+    int length = sizeof(struct pir_table) + sizeof(struct 
pir_slot)*NR_PIR_SLOTS;
+    struct pir_table *pir = scratch_alloc(length, 0);
+    int i, checksum;
+
+    memset(pir, 0, length);
+
+    memcpy(pir->signature, "$PIR", 4);
+    pir->version = 0x0100;
+    pir->length = length;
+
+    pir->router_bus = 0;
+    pir->router_devfn = PCI_ISA_DEVFN;
+    pir->router_vid = 0x8086;
+    pir->router_did = 0x122e;
+
+    pir->pci_irqs = 0x0000;
+
+    for ( i = 0 ; i < NR_PIR_SLOTS; i++ )
+    {
+        struct pir_slot *slot = &pir->slots[i];
+        slot->slot = i;
+        slot->bus = 0;
+        slot->dev = i<<3;
+        slot->link_a = 0x60 + (i+1)%4;
+        slot->bitmap_a = PCI_ISA_IRQ_MASK;
+        slot->link_b = 0x60 + (i+2)%4;
+        slot->bitmap_b = PCI_ISA_IRQ_MASK;
+        slot->link_c = 0x60 + (i+3)%4;
+        slot->bitmap_c = PCI_ISA_IRQ_MASK;
+        slot->link_d = 0x60 + (i+4)%4;
+        slot->bitmap_d = PCI_ISA_IRQ_MASK;
+    }
+
+    checksum = 0;
+    for ( i = 0; i < length; i++)
+    {
+        checksum += ((int8_t *)pir)[i];
+    }
+    pir->checksum = -checksum;
+
+    return (unsigned long)pir;
+}
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/pir_types.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/pir_types.h      Wed Jun 01 16:50:16 2011 +0100
@@ -0,0 +1,61 @@
+/*
+ * pir_types.h - data structure definitions for Xen HVM $PIR support
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright (C) Citrix Systems, 2011
+ *
+ * See the PCI Interrupt Routing spec for more detail:
+ *   http://www.microsoft.com/taiwan/whdc/archive/pciirq.mspx
+ */
+
+#ifndef PIR_TYPES_H
+#define PIR_TYPES_H
+
+#include <stdint.h>
+
+#define NR_PIR_SLOTS 6
+
+struct pir_slot {
+    uint8_t bus;
+    uint8_t dev;
+    uint8_t link_a;
+    uint16_t bitmap_a;
+    uint8_t link_b;
+    uint16_t bitmap_b;
+    uint8_t link_c;
+    uint16_t bitmap_c;
+    uint8_t link_d;
+    uint16_t bitmap_d;
+    uint8_t slot;
+    uint8_t reserved;
+} __attribute__ ((packed));
+
+struct pir_table {
+    char signature[4];
+    uint16_t version;
+    uint16_t length;
+    uint8_t router_bus;
+    uint8_t router_devfn;
+    uint16_t pci_irqs;
+    uint16_t router_vid;
+    uint16_t router_did;
+    uint32_t miniport_data;
+    uint8_t reserved[11];
+    uint8_t checksum;
+    struct pir_slot slots[0];
+} __attribute__ ((packed));
+
+#endif
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/rombios.c
--- a/tools/firmware/hvmloader/rombios.c        Wed Jun 01 16:49:23 2011 +0100
+++ b/tools/firmware/hvmloader/rombios.c        Wed Jun 01 16:50:16 2011 +0100
@@ -187,6 +187,7 @@
     .acpi_build_tables = rombios_acpi_build_tables,
     .create_mp_tables = rombios_create_mp_tables,
     .create_smbios_tables = rombios_create_smbios_tables,
+    .create_pir_tables = NULL, /* embedded in ROMBIOS */
 };
 
 /*
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/seabios.c
--- a/tools/firmware/hvmloader/seabios.c        Wed Jun 01 16:49:23 2011 +0100
+++ b/tools/firmware/hvmloader/seabios.c        Wed Jun 01 16:50:16 2011 +0100
@@ -107,6 +107,11 @@
     add_table(ep);
 }
 
+static void seabios_create_pir_tables(void)
+{
+    add_table(create_pir_tables());
+}
+
 static void seabios_setup_e820(void)
 {
     struct seabios_info *info = (void *)BIOS_INFO_PHYSICAL_ADDRESS;
@@ -142,6 +147,7 @@
     .acpi_build_tables = seabios_acpi_build_tables,
     .create_mp_tables = seabios_create_mp_tables,
     .create_smbios_tables = seabios_create_smbios_tables,
+    .create_pir_tables = seabios_create_pir_tables,
 };
 
 /*
diff -r 303635b6fe5b -r 221f431092c0 tools/firmware/hvmloader/util.h
--- a/tools/firmware/hvmloader/util.h   Wed Jun 01 16:49:23 2011 +0100
+++ b/tools/firmware/hvmloader/util.h   Wed Jun 01 16:50:16 2011 +0100
@@ -195,6 +195,8 @@
 void hvm_write_smbios_tables(unsigned long ep,
                            unsigned long smbios_start,
                            unsigned long smbios_end);
+unsigned long create_pir_tables(void);
+
 void smp_initialise(void);
 
 #include "e820.h"

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] hvmloader: add code to generate a $PIR table., Xen patchbot-unstable <=