Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
amd_iommu_init.c File Reference
#include <linux/pci.h>
#include <linux/acpi.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/syscore_ops.h>
#include <linux/interrupt.h>
#include <linux/msi.h>
#include <linux/amd-iommu.h>
#include <linux/export.h>
#include <acpi/acpi.h>
#include <asm/pci-direct.h>
#include <asm/iommu.h>
#include <asm/gart.h>
#include <asm/x86_init.h>
#include <asm/iommu_table.h>
#include <asm/io_apic.h>
#include <asm/irq_remapping.h>
#include "amd_iommu_proto.h"
#include "amd_iommu_types.h"
#include "irq_remapping.h"

Go to the source code of this file.

Data Structures

struct  ivhd_header
 
struct  ivhd_entry
 
struct  ivmd_header
 

Macros

#define IVRS_HEADER_LENGTH   48
 
#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_DEV_SPECIAL   0x48
 
#define IVHD_SPECIAL_IOAPIC   1
 
#define IVHD_SPECIAL_HPET   2
 
#define IVHD_FLAG_HT_TUN_EN_MASK   0x01
 
#define IVHD_FLAG_PASSPW_EN_MASK   0x02
 
#define IVHD_FLAG_RESPASSPW_EN_MASK   0x04
 
#define IVHD_FLAG_ISOC_EN_MASK   0x08
 
#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
 
#define IOAPIC_SB_DEVID   ((0x00 << 8) | PCI_DEVFN(0x14, 0))
 

Enumerations

enum  iommu_init_state {
  IOMMU_START_STATE, IOMMU_IVRS_DETECTED, IOMMU_ACPI_FINISHED, IOMMU_ENABLED,
  IOMMU_PCI_INIT, IOMMU_INTERRUPTS_EN, IOMMU_DMA_OPS, IOMMU_INITIALIZED,
  IOMMU_NOT_FOUND, IOMMU_INIT_ERROR
}
 

Functions

struct ivhd_header __attribute__ ((packed))
 
 LIST_HEAD (amd_iommu_unity_map)
 
 LIST_HEAD (amd_iommu_list)
 
 LIST_HEAD (amd_iommu_pd_list)
 
void amd_iommu_reset_cmd_buffer (struct amd_iommu *iommu)
 
void amd_iommu_apply_erratum_63 (u16 devid)
 
int __init amd_iommu_detect (void)
 
 __setup ("amd_iommu_dump", parse_amd_iommu_dump)
 
 __setup ("amd_iommu=", parse_amd_iommu_options)
 
 IOMMU_INIT_FINISH (amd_iommu_detect, gart_iommu_hole_init, NULL, NULL)
 
bool amd_iommu_v2_supported (void)
 
 EXPORT_SYMBOL (amd_iommu_v2_supported)
 

Variables

u8 type
 
u8 flags
 
u16 length
 
u16 devid
 
u16 cap_ptr
 
u64 mmio_phys
 
u16 pci_seg
 
u16 info
 
u32 reserved
 
u32 ext
 
u16 aux
 
u64 resv
 
u64 range_start
 
u64 range_length
 
bool amd_iommu_dump
 
bool amd_iommu_irq_remap __read_mostly = true
 
u16 amd_iommu_last_bdf
 
u32 amd_iommu_unmap_flush
 
struct amd_iommuamd_iommus [MAX_IOMMUS]
 
int amd_iommus_present
 
spinlock_t amd_iommu_pd_lock
 
struct dev_table_entryamd_iommu_dev_table
 
u16amd_iommu_alias_table
 
struct amd_iommu ** amd_iommu_rlookup_table
 
struct irq_remap_table ** irq_lookup_table
 
unsigned longamd_iommu_pd_alloc_bitmap
 
enum iommu_init_state __attribute__
 

Macro Definition Documentation

#define ACPI_DEVFLAG_ATSDIS   0x10000000

Definition at line 80 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_EXTINT   0x02

Definition at line 74 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_INITPASS   0x01

Definition at line 73 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_LINT0   0x40

Definition at line 78 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_LINT1   0x80

Definition at line 79 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_NMI   0x04

Definition at line 75 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_SYSMGT1   0x10

Definition at line 76 of file amd_iommu_init.c.

#define ACPI_DEVFLAG_SYSMGT2   0x20

Definition at line 77 of file amd_iommu_init.c.

#define ACPI_IVHD_TYPE   0x10

Definition at line 47 of file amd_iommu_init.c.

#define ACPI_IVMD_TYPE   0x21

Definition at line 49 of file amd_iommu_init.c.

#define ACPI_IVMD_TYPE_ALL   0x20

Definition at line 48 of file amd_iommu_init.c.

#define ACPI_IVMD_TYPE_RANGE   0x22

Definition at line 50 of file amd_iommu_init.c.

#define IOAPIC_SB_DEVID   ((0x00 << 8) | PCI_DEVFN(0x14, 0))

Definition at line 1603 of file amd_iommu_init.c.

#define IVHD_DEV_ALIAS   0x42

Definition at line 56 of file amd_iommu_init.c.

#define IVHD_DEV_ALIAS_RANGE   0x43

Definition at line 57 of file amd_iommu_init.c.

#define IVHD_DEV_ALL   0x01

Definition at line 52 of file amd_iommu_init.c.

#define IVHD_DEV_EXT_SELECT   0x46

Definition at line 58 of file amd_iommu_init.c.

#define IVHD_DEV_EXT_SELECT_RANGE   0x47

Definition at line 59 of file amd_iommu_init.c.

#define IVHD_DEV_RANGE_END   0x04

Definition at line 55 of file amd_iommu_init.c.

#define IVHD_DEV_SELECT   0x02

Definition at line 53 of file amd_iommu_init.c.

#define IVHD_DEV_SELECT_RANGE_START   0x03

Definition at line 54 of file amd_iommu_init.c.

#define IVHD_DEV_SPECIAL   0x48

Definition at line 60 of file amd_iommu_init.c.

#define IVHD_FLAG_HT_TUN_EN_MASK   0x01

Definition at line 65 of file amd_iommu_init.c.

#define IVHD_FLAG_ISOC_EN_MASK   0x08

Definition at line 68 of file amd_iommu_init.c.

#define IVHD_FLAG_PASSPW_EN_MASK   0x02

Definition at line 66 of file amd_iommu_init.c.

#define IVHD_FLAG_RESPASSPW_EN_MASK   0x04

Definition at line 67 of file amd_iommu_init.c.

#define IVHD_SPECIAL_HPET   2

Definition at line 63 of file amd_iommu_init.c.

#define IVHD_SPECIAL_IOAPIC   1

Definition at line 62 of file amd_iommu_init.c.

#define IVMD_FLAG_EXCL_RANGE   0x08

Definition at line 70 of file amd_iommu_init.c.

#define IVMD_FLAG_UNITY_MAP   0x01

Definition at line 71 of file amd_iommu_init.c.

#define IVRS_HEADER_LENGTH   48

Definition at line 45 of file amd_iommu_init.c.

Enumeration Type Documentation

Enumerator:
IOMMU_START_STATE 
IOMMU_IVRS_DETECTED 
IOMMU_ACPI_FINISHED 
IOMMU_ENABLED 
IOMMU_PCI_INIT 
IOMMU_INTERRUPTS_EN 
IOMMU_DMA_OPS 
IOMMU_INITIALIZED 
IOMMU_NOT_FOUND 
IOMMU_INIT_ERROR 

Definition at line 203 of file amd_iommu_init.c.

Function Documentation

struct ivhd_header __attribute__ ( (packed)  )
read

Definition at line 171 of file esd_usb2.c.

__setup ( "amd_iommu_dump"  ,
parse_amd_iommu_dump   
)
__setup ( )
void amd_iommu_apply_erratum_63 ( u16  devid)

Definition at line 662 of file amd_iommu_init.c.

int __init amd_iommu_detect ( void  )

Definition at line 2017 of file amd_iommu_init.c.

void amd_iommu_reset_cmd_buffer ( struct amd_iommu iommu)

Definition at line 523 of file amd_iommu_init.c.

bool amd_iommu_v2_supported ( void  )

Definition at line 2074 of file amd_iommu_init.c.

EXPORT_SYMBOL ( amd_iommu_v2_supported  )
IOMMU_INIT_FINISH ( amd_iommu_detect  ,
gart_iommu_hole_init  ,
NULL  ,
NULL   
)
LIST_HEAD ( amd_iommu_unity_map  )
LIST_HEAD ( amd_iommu_list  )
LIST_HEAD ( amd_iommu_pd_list  )

Variable Documentation

Definition at line 132 of file amd_iommu_init.c.

u16* amd_iommu_alias_table

Definition at line 179 of file amd_iommu_init.c.

struct dev_table_entry* amd_iommu_dev_table

Definition at line 172 of file amd_iommu_init.c.

bool amd_iommu_dump

Definition at line 131 of file amd_iommu_init.c.

u16 amd_iommu_last_bdf

Definition at line 137 of file amd_iommu_init.c.

unsigned long* amd_iommu_pd_alloc_bitmap

Definition at line 197 of file amd_iommu_init.c.

spinlock_t amd_iommu_pd_lock

Definition at line 164 of file amd_iommu_init.c.

struct amd_iommu** amd_iommu_rlookup_table

Definition at line 185 of file amd_iommu_init.c.

u32 amd_iommu_unmap_flush

Definition at line 141 of file amd_iommu_init.c.

struct amd_iommu* amd_iommus[MAX_IOMMUS]

Definition at line 147 of file amd_iommu_init.c.

int amd_iommus_present

Definition at line 148 of file amd_iommu_init.c.

u16 aux

Definition at line 134 of file amd_iommu_init.c.

u16 cap_ptr

Definition at line 108 of file amd_iommu_init.c.

u16 devid

Definition at line 107 of file amd_iommu_init.c.

u32 ext

Definition at line 118 of file amd_iommu_init.c.

u8 flags

Definition at line 105 of file amd_iommu_init.c.

u16 info

Definition at line 111 of file amd_iommu_init.c.

struct irq_remap_table** irq_lookup_table

Definition at line 191 of file amd_iommu_init.c.

u16 length

Definition at line 106 of file amd_iommu_init.c.

u64 mmio_phys

Definition at line 109 of file amd_iommu_init.c.

u16 pci_seg

Definition at line 110 of file amd_iommu_init.c.

u64 range_length

Definition at line 137 of file amd_iommu_init.c.

u64 range_start

Definition at line 136 of file amd_iommu_init.c.

u32 reserved

Definition at line 112 of file amd_iommu_init.c.

u64 resv

Definition at line 135 of file amd_iommu_init.c.

Definition at line 104 of file amd_iommu_init.c.