PCIe services

Revision as of 00:34, 5 March 2022 by Yellows8 (talk | contribs)

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 #GetMappedBar
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.

GetMappedBar

Takes two input u32s FunctionHandle and Bar. Returns an output u64 Address and 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 was added with [6.0.0+].

Cmd Name
0
1

ClassDriverConfig

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

This is a 0x18-byte struct.

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 0xC-byte struct.

Offset Size Description
0x00 0x08 Size
0x08 0x04 Flags

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".