ActiveLayerIndex
0
ApplicationVersion
com.omnigroup.OmniGraffle.MacAppStore
139.16
AutoAdjust
BackgroundGraphic
Bounds
{{0, 0}, {559.19998741149902, 782.79998779296875}}
Class
SolidGraphic
ID
2
Style
shadow
Draws
NO
stroke
Draws
NO
BaseZoom
0
CanvasOrigin
{0, 0}
ColumnAlign
1
ColumnSpacing
36
CreationDate
2013-01-02 19:31:53 +0000
Creator
Aldo Cortesi
DisplayScale
1.000 cm = 1.000 cm
GraphDocumentVersion
8
GraphicsList
Class
LineGraphic
ID
4075
Points
{299.94835408528644, 473.66668184598285}
{344.38497416178376, 473.66668184598302}
{361.71830749511713, 473.00001517931634}
{413.05166625976557, 472.66668192545569}
Style
stroke
HeadArrow
FilledArrow
Legacy
TailArrow
0
Class
LineGraphic
ID
4074
Points
{300.4483540852865, 420.70833897590637}
{344.88497416178387, 420.70833897590654}
{362.21830749511713, 420.04167230923986}
{413.55166625976557, 419.70833905537921}
Style
stroke
HeadArrow
0
Legacy
TailArrow
FilledArrow
Class
LineGraphic
ID
4073
Points
{300.44835408528655, 367.66666611035561}
{344.88497416178393, 367.66666611035578}
{362.21830749511719, 366.99999944368909}
{413.55166625976568, 366.66666618982845}
Style
stroke
HeadArrow
FilledArrow
Legacy
TailArrow
0
Class
LineGraphic
ID
4072
Points
{84.896697998046875, 526.66670727729809}
{129.33331807454422, 526.6667072772982}
{146.66665140787754, 526.00004061063157}
{198.00001017252598, 525.66670735677087}
Style
stroke
HeadArrow
FilledArrow
Legacy
TailArrow
0
Class
LineGraphic
ID
4071
Points
{84.896687825520942, 472.91668446858688}
{197.99999491373694, 472.66668319702148}
Style
stroke
HeadArrow
0
Legacy
TailArrow
FilledArrow
Class
LineGraphic
ID
4070
Points
{84.896692911783873, 420.66667453447985}
{129.33331298828122, 420.66667453448002}
{146.66664632161454, 420.00000786781334}
{198.00000508626297, 419.66667461395269}
Style
stroke
HeadArrow
FilledArrow
Legacy
TailArrow
0
Bounds
{{316.49998792012531, 326.66665395100904}, {65, 36}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4069
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 4: Initiate SSL \
handshake \
with SNI}
VerticalPad
0
Wrap
NO
Bounds
{{317.00000000000006, 456.66707356770831}, {49, 12}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4067
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 8: Request}
VerticalPad
0
Wrap
NO
Bounds
{{94.187746683756515, 509.33333333333331}, {49, 12}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4066
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 7: Request}
VerticalPad
0
Wrap
NO
Bounds
{{94.1877466837567, 441.50006103515642}, {76, 24}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4065
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 6: Complete SSL\
handshake}
VerticalPad
0
Wrap
NO
Bounds
{{316.99998982747411, 403.66686820983904}, {64, 12}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4063
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 5: CN & SANs}
VerticalPad
0
Wrap
NO
Bounds
{{94.187741597493542, 380.00018183390387}, {65, 36}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4061
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 3: Initiate SSL \
handshake \
with SNI}
VerticalPad
0
Wrap
NO
Bounds
{{94.187745571136503, 338.66666666666669}, {84, 24}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4060
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 2: 200 Connection \
Established}
VerticalPad
0
Wrap
NO
Bounds
{{94.187741915384976, 283.66659164428717}, {64, 24}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
FontInfo
Font
Helvetica
Size
12
ID
4058
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs20 \cf0 1: CONNECT \
request}
VerticalPad
0
Wrap
NO
Class
LineGraphic
ID
4041
Points
{84.896692911783944, 366.91666793823208}
{198, 366.66666666666669}
Style
stroke
HeadArrow
0
Legacy
TailArrow
FilledArrow
Class
LineGraphic
ID
31
Points
{84.896687825520857, 314.66666126251221}
{129.33330790201822, 314.66666126251238}
{146.66664123535153, 313.99999459584569}
{198, 313.66666134198505}
Style
stroke
HeadArrow
FilledArrow
Legacy
TailArrow
0
Bounds
{{430.83098347981803, 515.99999999999989}, {36, 14}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
ID
4026
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs24 \cf0 Server}
VerticalPad
0
Wrap
NO
Bounds
{{40.499999999999993, 486.66666666666663}, {31, 14}}
Class
ShapedGraphic
FitText
YES
Flow
Resize
ID
4025
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Text
Pad
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs24 \cf0 Client}
VerticalPad
0
Wrap
NO
Bounds
{{417.16432189941418, 323.90565299479198}, {63.333332061767578, 185.52200317382812}}
Class
ShapedGraphic
ID
4004
ImageID
6
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
Bounds
{{205.34386889139773, 289.33333333333331}, {84, 248.66667175292969}}
Class
ShapedGraphic
ID
4023
Shape
Rectangle
Style
fill
Color
b
0
g
0.463735
r
1
Text
Text
{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;\red37\green17\blue0;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
\f0\fs24 \cf2 mitmproxy}
Bounds
{{4.6666666467984399, 351.33332316080771}, {102.66666412353516, 130.66667175292969}}
Class
ShapedGraphic
ID
134
ImageID
3
Shape
Rectangle
Style
fill
Draws
NO
shadow
Draws
NO
stroke
Draws
NO
GridInfo
GuidesLocked
NO
GuidesVisible
YES
HPages
1
ImageCounter
7
ImageLinkBack
ImageList
image6.tiff
image3.icns
KeepToScale
Layers
Lock
NO
Name
Layer 1
Print
YES
View
YES
LayoutInfo
Animate
NO
circoMinDist
18
circoSeparation
0.0
layoutEngine
dot
neatoSeparation
0.0
twopiSeparation
0.0
LinksVisible
NO
MagnetsVisible
NO
MasterSheets
ModificationDate
2013-01-03 02:14:45 +0000
Modifier
Aldo Cortesi
NotesVisible
NO
Orientation
2
OriginVisible
NO
PageBreaks
YES
PrintInfo
NSBottomMargin
float
41
NSHorizonalPagination
coded
BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG
NSLeftMargin
float
18
NSPaperSize
size
{595.19998741149902, 841.79998779296875}
NSPrintReverseOrientation
int
0
NSRightMargin
float
18
NSTopMargin
float
18
PrintOnePage
ReadOnly
NO
RowAlign
1
RowSpacing
36
SheetTitle
Canvas 1
SmartAlignmentGuidesActive
YES
SmartDistanceGuidesActive
YES
UniqueID
1
UseEntirePage
VPages
1
WindowInfo
CurrentSheet
0
ExpandedCanvases
name
Canvas 1
Frame
{{271, 336}, {974, 874}}
ListView
OutlineWidth
142
RightSidebar
ShowRuler
Sidebar
SidebarWidth
120
VisibleRegion
{{0, 202}, {550, 469.33333333333337}}
Zoom
1.5
ZoomValues
Canvas 1
1.5
1
s="o">* get_intremap_lock(int req_id)
{
return (amd_iommu_perdev_intremap ?
&ivrs_mappings[req_id].intremap_lock:
&shared_intremap_lock);
}
static int get_intremap_requestor_id(int bdf)
{
ASSERT( bdf < ivrs_bdf_entries );
return ivrs_mappings[bdf].dte_requestor_id;
}
static int get_intremap_offset(u8 vector, u8 dm)
{
int offset = 0;
offset = (dm << INT_REMAP_INDEX_DM_SHIFT) & INT_REMAP_INDEX_DM_MASK;
offset |= (vector << INT_REMAP_INDEX_VECTOR_SHIFT ) &
INT_REMAP_INDEX_VECTOR_MASK;
return offset;
}
static u8 *get_intremap_entry(int bdf, int offset)
{
u8 *table;
table = (u8*)ivrs_mappings[bdf].intremap_table;
ASSERT( (table != NULL) && (offset < INTREMAP_ENTRIES) );
return (u8*) (table + offset);
}
static void free_intremap_entry(int bdf, int offset)
{
u32* entry;
entry = (u32*)get_intremap_entry(bdf, offset);
memset(entry, 0, sizeof(u32));
}
static void update_intremap_entry(u32* entry, u8 vector, u8 int_type,
u8 dest_mode, u8 dest)
{
set_field_in_reg_u32(IOMMU_CONTROL_ENABLED, 0,
INT_REMAP_ENTRY_REMAPEN_MASK,
INT_REMAP_ENTRY_REMAPEN_SHIFT, entry);
set_field_in_reg_u32(IOMMU_CONTROL_DISABLED, *entry,
INT_REMAP_ENTRY_SUPIOPF_MASK,
INT_REMAP_ENTRY_SUPIOPF_SHIFT, entry);
set_field_in_reg_u32(int_type, *entry,
INT_REMAP_ENTRY_INTTYPE_MASK,
INT_REMAP_ENTRY_INTTYPE_SHIFT, entry);
set_field_in_reg_u32(IOMMU_CONTROL_DISABLED, *entry,
INT_REMAP_ENTRY_REQEOI_MASK,
INT_REMAP_ENTRY_REQEOI_SHIFT, entry);
set_field_in_reg_u32((u32)dest_mode, *entry,
INT_REMAP_ENTRY_DM_MASK,
INT_REMAP_ENTRY_DM_SHIFT, entry);
set_field_in_reg_u32((u32)dest, *entry,
INT_REMAP_ENTRY_DEST_MAST,
INT_REMAP_ENTRY_DEST_SHIFT, entry);
set_field_in_reg_u32((u32)vector, *entry,
INT_REMAP_ENTRY_VECTOR_MASK,
INT_REMAP_ENTRY_VECTOR_SHIFT, entry);
}
void invalidate_interrupt_table(struct amd_iommu *iommu, u16 device_id)
{
u32 cmd[4], entry;
cmd[3] = cmd[2] = 0;
set_field_in_reg_u32(device_id, 0,
IOMMU_INV_INT_TABLE_DEVICE_ID_MASK,
IOMMU_INV_INT_TABLE_DEVICE_ID_SHIFT, &entry);
cmd[0] = entry;
set_field_in_reg_u32(IOMMU_CMD_INVALIDATE_INT_TABLE, 0,
IOMMU_CMD_OPCODE_MASK, IOMMU_CMD_OPCODE_SHIFT,
&entry);
cmd[1] = entry;
send_iommu_command(iommu, cmd);
}
static void update_intremap_entry_from_ioapic(
int bdf,
struct amd_iommu *iommu,
struct IO_APIC_route_entry *ioapic_rte,
unsigned int rte_upper, unsigned int value)
{
unsigned long flags;
u32* entry;
u8 delivery_mode, dest, vector, dest_mode;
struct IO_APIC_route_entry *rte = ioapic_rte;
int req_id;
spinlock_t *lock;
int offset;
req_id = get_intremap_requestor_id(bdf);
lock = get_intremap_lock(req_id);
/* only remap interrupt vector when lower 32 bits in ioapic ire changed */
if ( likely(!rte_upper) )
{
delivery_mode = rte->delivery_mode;
vector = rte->vector;
dest_mode = rte->dest_mode;
dest = rte->dest.logical.logical_dest;
spin_lock_irqsave(lock, flags);
offset = get_intremap_offset(vector, delivery_mode);
entry = (u32*)get_intremap_entry(req_id, offset);
update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest);
spin_unlock_irqrestore(lock, flags);
if ( iommu->enabled )
{
spin_lock_irqsave(&iommu->lock, flags);
invalidate_interrupt_table(iommu, req_id);
flush_command_buffer(iommu);
spin_unlock_irqrestore(&iommu->lock, flags);
}
}
}
int __init amd_iommu_setup_ioapic_remapping(void)
{
struct IO_APIC_route_entry rte = {0};
unsigned long flags;
u32* entry;
int apic, pin;
u8 delivery_mode, dest, vector, dest_mode;
u16 bdf, req_id;
struct amd_iommu *iommu;
spinlock_t *lock;
int offset;
/* Read ioapic entries and update interrupt remapping table accordingly */
for ( apic = 0; apic < nr_ioapics; apic++ )
{
for ( pin = 0; pin < nr_ioapic_registers[apic]; pin++ )
{
*(((int *)&rte) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
*(((int *)&rte) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
if ( rte.mask == 1 )
continue;
/* get device id of ioapic devices */
bdf = ioapic_bdf[IO_APIC_ID(apic)];
iommu = find_iommu_for_device(bdf);
if ( !iommu )
{
AMD_IOMMU_DEBUG(
"Fail to find iommu for ioapic device id = 0x%x\n", bdf);
continue;
}
req_id = get_intremap_requestor_id(bdf);
lock = get_intremap_lock(req_id);
delivery_mode = rte.delivery_mode;
vector = rte.vector;
dest_mode = rte.dest_mode;
dest = rte.dest.logical.logical_dest;
spin_lock_irqsave(lock, flags);
offset = get_intremap_offset(vector, delivery_mode);
entry = (u32*)get_intremap_entry(req_id, offset);
update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest);
spin_unlock_irqrestore(lock, flags);
if ( iommu->enabled )
{
spin_lock_irqsave(&iommu->lock, flags);
invalidate_interrupt_table(iommu, req_id);