PCIe services

From Nintendo Switch Brew
Revision as of 18:31, 13 July 2022 by Hexkyz (talk | contribs)
Jump to navigation Jump to search

pcie

This is "nn::pcie::detail::IManager".

Cmd Name
0 #RegisterClassDriver
1 #QueryFunctionsUnregistered

RegisterClassDriver

Takes an input Process handle and an input #ClassDriverConfig. Returns an output Event handle and an #ISession.

QueryFunctionsUnregistered

Takes a type-0x6 output buffer containing an array of #FunctionState. Returns an output s32 Count.

ISession

This is "nn::pcie::detail::ISession".

Cmd Name
0 #QueryFunctions
1 #AcquireFunction
2 #ReleaseFunction
3 #GetFunctionState
4 #GetBarProfile
5 #ReadConfig
6 #WriteConfig
7 #ReadBarRegion
8 #WriteBarRegion
9 #FindCapability
10 #FindExtendedCapability
11 #MapDma
12 #UnmapDma
13 #UnmapDmaBusAddress
14 #GetDmaBusAddress
15 #GetDmaBusAddressRange
16 #SetDmaEnable
17 #AcquireIrq
18 #ReleaseIrq
19 #SetIrqEnable
20 #SetAspmEnable
21 [3.0.0+] #SetResetUponResumeEnable
22 [4.0.0+] #ResetFunction
23 [7.0.0+]

QueryFunctions

Takes a type-0x6 output buffer containing an array of #FunctionState. Returns an output s32 Count.

AcquireFunction

Takes an input u32 FunctionHandle. Returns an output readable Event handle.

ReleaseFunction

Takes an input u32 FunctionHandle. No output.

GetFunctionState

Takes an input u32 FunctionHandle and a type-0x6 output buffer containing a #FunctionState. No output.

GetBarProfile

Takes two input u32s FunctionHandle and Bar. Returns an output #BarProfile.

ReadConfig

Takes two input u32s FunctionHandle, Offset and an input #BusAccessWidth. Returns an output u32 Config.

WriteConfig

Takes three input u32s FunctionHandle, Offset, Config and an input #BusAccessWidth. No output.

ReadBarRegion

Takes three input u32s FunctionHandle, Bar, Offset, an input #BusAccessWidth and a type-0x6 output buffer. No output.

[5.0.0+] Now takes a type-0x22 output buffer instead.

WriteBarRegion

Takes three input u32s FunctionHandle, Bar, Offset, an input #BusAccessWidth and a type-0x5 input buffer. No output.

[5.0.0+] Now takes a type-0x21 input buffer instead.

FindCapability

Takes an input u32s FunctionHandle and an input #CapabilityId. Returns an output u32 Capability.

FindExtendedCapability

Takes an input u32s FunctionHandle and an input #ExtendedCapabilityId. Returns an output u32 ExtendedCapability.

MapDma

Takes an input u32 FunctionHandle, an input #DmaDirection, an input u64 VirtualAddress and an input u32 Size. Returns an output u64 PhysicalAddress.

UnmapDma

Takes an input u32 FunctionHandle and an input u64 PhysicalAddress. No output.

UnmapDmaBusAddress

Takes an input u32 FunctionHandle and an input u64 BusAddress. No output.

GetDmaBusAddress

Takes an input u32 FunctionHandle, an input u64 VirtualAddress and an input u32 Size. Returns an output u64 BusAddress.

GetDmaBusAddressRange

Takes an input u32 FunctionHandle. Returns two output u64s BusAddressRangeStart and BusAddressRangeEnd.

SetDmaEnable

Takes an input u32 FunctionHandle and an input bool Enable. No output.

AcquireIrq

Takes an input u32s FunctionHandle and an input #IrqType. Returns an output Event handle.

[7.0.0+] Now takes another input u32 and no longer returns an output Event handle.

ReleaseIrq

Takes an input u32 FunctionHandle. No output.

SetIrqEnable

Takes an input u32s FunctionHandle, an unknown input u32 and an input bool Enable. No output.

SetAspmEnable

Takes an input u32 FunctionHandle and an input bool Enable. No output.

[7.0.0+] Now returns an output Event handle.

SetResetUponResumeEnable

Takes an input u32 FunctionHandle and an input bool Enable. No output.

ResetFunction

Takes an input u32 FunctionHandle and an unknown input u32. No output.

pcie:log

This is "nn::pcie::detail::ILoggedStateManager".

This was added with [6.0.0+].

Cmd Name
0
1

ClassDriverConfig

This is "nn::pcie::ClassDriverConfig".

This is a 0x18-byte struct.

Offset Size Description
0x00 0x04
0x04 0x01
0x05 0x03 Reserved
0x08 0x04 ClassCode
0x0C 0x01 Function
0x0D 0x01 Reserved
0x0E 0x02 Vid
0x10 0x02 DevId
0x12 0x01
0x13 0x01 Reserved
0x14 0x04

ClassCode

This is a 0x4-byte struct.

Offset Size Description
0x00 0x01 ProgrammingInterface
0x01 0x01 SubClass
0x02 0x01 BaseClass
0x03 0x01 Reserved

FunctionState

This is "nn::pcie::FunctionState".

This is a 0x28-byte struct.

Offset Size Description
0x00 0x04 Handle
0x04 0x24

BarProfile

This is "nn::pcie::BarProfile".

This is a 0x18-byte struct.

[14.0.0+] This is a 0x20-byte struct.

Offset Size Description
0x00 0x08 Address
0x08 0x08 Size
0x10 0x08 Flags
0x18 0x08

BusAccessWidth

This is "nn::pcie::BusAccessWidth".

Value Description
0 8bits
1 16bits
2 32bits

CapabilityId

This is "nn::pcie::CapabilityId".

ExtendedCapabilityId

This is "nn::pcie::ExtendedCapabilityId".

DmaDirection

This is "nn::pcie::DmaDirection".

This controls the MemoryPermission passed to MapDeviceAddressSpaceByForce.

Value Description
0 ReadWrite
1 Write
2 Read

IrqType

This is "nn::pcie::IrqType".