-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 99602 b: refs/heads/master c: f6e2e6b h: refs/heads/master v: v3
- Loading branch information
Joerg Roedel
authored and
Ingo Molnar
committed
Jun 27, 2008
1 parent
940ecaa
commit 28f42c3
Showing
2 changed files
with
102 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 8d283c35a293e6091fdf7ef86842c1174c48a941 | ||
refs/heads/master: f6e2e6b6fc465bc3cc4eae8d53fcf573ca1cfa14 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
/* | ||
* Copyright (C) 2007-2008 Advanced Micro Devices, Inc. | ||
* Author: Joerg Roedel <joerg.roedel@amd.com> | ||
* Leo Duran <leo.duran@amd.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 as published | ||
* by the Free Software Foundation. | ||
* | ||
* 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 | ||
*/ | ||
|
||
#include <linux/pci.h> | ||
#include <linux/acpi.h> | ||
#include <linux/gfp.h> | ||
#include <linux/list.h> | ||
#include <asm/pci-direct.h> | ||
#include <asm/amd_iommu_types.h> | ||
#include <asm/gart.h> | ||
|
||
/* | ||
* definitions for the ACPI scanning code | ||
*/ | ||
#define UPDATE_LAST_BDF(x) do {\ | ||
if ((x) > amd_iommu_last_bdf) \ | ||
amd_iommu_last_bdf = (x); \ | ||
} while (0); | ||
|
||
#define DEVID(bus, devfn) (((bus) << 8) | (devfn)) | ||
#define PCI_BUS(x) (((x) >> 8) & 0xff) | ||
#define IVRS_HEADER_LENGTH 48 | ||
#define TBL_SIZE(x) (1 << (PAGE_SHIFT + get_order(amd_iommu_last_bdf * (x)))) | ||
|
||
#define ACPI_IVHD_TYPE 0x10 | ||
#define ACPI_IVMD_TYPE_ALL 0x20 | ||
#define ACPI_IVMD_TYPE 0x21 | ||
#define ACPI_IVMD_TYPE_RANGE 0x22 | ||
|
||
#define IVHD_DEV_ALL 0x01 | ||
#define IVHD_DEV_SELECT 0x02 | ||
#define IVHD_DEV_SELECT_RANGE_START 0x03 | ||
#define IVHD_DEV_RANGE_END 0x04 | ||
#define IVHD_DEV_ALIAS 0x42 | ||
#define IVHD_DEV_ALIAS_RANGE 0x43 | ||
#define IVHD_DEV_EXT_SELECT 0x46 | ||
#define IVHD_DEV_EXT_SELECT_RANGE 0x47 | ||
|
||
#define IVHD_FLAG_HT_TUN_EN 0x00 | ||
#define IVHD_FLAG_PASSPW_EN 0x01 | ||
#define IVHD_FLAG_RESPASSPW_EN 0x02 | ||
#define IVHD_FLAG_ISOC_EN 0x03 | ||
|
||
#define IVMD_FLAG_EXCL_RANGE 0x08 | ||
#define IVMD_FLAG_UNITY_MAP 0x01 | ||
|
||
#define ACPI_DEVFLAG_INITPASS 0x01 | ||
#define ACPI_DEVFLAG_EXTINT 0x02 | ||
#define ACPI_DEVFLAG_NMI 0x04 | ||
#define ACPI_DEVFLAG_SYSMGT1 0x10 | ||
#define ACPI_DEVFLAG_SYSMGT2 0x20 | ||
#define ACPI_DEVFLAG_LINT0 0x40 | ||
#define ACPI_DEVFLAG_LINT1 0x80 | ||
#define ACPI_DEVFLAG_ATSDIS 0x10000000 | ||
|
||
struct ivhd_header { | ||
u8 type; | ||
u8 flags; | ||
u16 length; | ||
u16 devid; | ||
u16 cap_ptr; | ||
u64 mmio_phys; | ||
u16 pci_seg; | ||
u16 info; | ||
u32 reserved; | ||
} __attribute__((packed)); | ||
|
||
struct ivhd_entry { | ||
u8 type; | ||
u16 devid; | ||
u8 flags; | ||
u32 ext; | ||
} __attribute__((packed)); | ||
|
||
struct ivmd_header { | ||
u8 type; | ||
u8 flags; | ||
u16 length; | ||
u16 devid; | ||
u16 aux; | ||
u64 resv; | ||
u64 range_start; | ||
u64 range_length; | ||
} __attribute__((packed)); | ||
|