PCIe services: Difference between revisions

No edit summary
No edit summary
 
(12 intermediate revisions by 2 users not shown)
Line 6: Line 6:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#RegisterClassDriver]]
| 0 || [[#RegisterClassDriver|RegisterClassDriver]]
|-
|-
| 1 || [[#QueryFunctionsUnregistered]]
| 1 || [[#QueryFunctions|QueryFunctions]]
|}
|}


== RegisterClassDriver ==
== RegisterClassDriver ==
Takes the current process handle (0xFFFF8001).
Takes an input Process handle and an input [[#ClassDriverConfig]]. Returns an output Event handle and an [[#ISession]].


Returns an event handle and session handle to a [[#ISession]].
== QueryFunctions ==
 
Takes a type-0x6 output buffer containing an array of [[#FunctionState]]. Returns an output s32 '''FunctionStateCount'''.
== QueryFunctionsUnregistered ==
Takes a type-6 buffer.
 
Returns a list of connected PCIe endpoint devices.


== ISession ==
== ISession ==
Line 28: Line 24:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || QueryFunctions
| 0 || [[#QueryFunctions_2|QueryFunctions]]
|-
|-
| 1 || AcquireFunction
| 1 || [[#AcquireFunction|AcquireFunction]]
|-
|-
| 2 || ReleaseFunction
| 2 || [[#ReleaseFunction|ReleaseFunction]]
|-
|-
| 3 || GetFunctionState
| 3 || [[#GetFunctionState|GetFunctionState]]
|-
|-
| 4 || GetBarProfile
| 4 || [[#GetBarProfile|GetBarProfile]]
|-
|-
| 5 || ReadConfig
| 5 || [[#ReadConfig|ReadConfig]]
|-
|-
| 6 || WriteConfig
| 6 || [[#WriteConfig|WriteConfig]]
|-
|-
| 7 || ReadBarRegion
| 7 || [[#ReadBarRegion|ReadBarRegion]]
|-
|-
| 8 || WriteBarRegion
| 8 || [[#WriteBarRegion|WriteBarRegion]]
|-
|-
| 9 || FindCapability
| 9 || [[#FindCapability|FindCapability]]
|-
|-
| 10 || FindExtendedCapability
| 10 || [[#FindExtendedCapability|FindExtendedCapability]]
|-
|-
| 11 || MapDma
| 11 || [[#MapDma|MapDma]]
|-
|-
| 12 || UnmapDma
| 12 || [[#UnmapDmaByProcVa|UnmapDmaByProcVa]]
|-
|-
| 13 || UnmapDmaBusAddress
| 13 || [[#UnmapDmaByBusAddress|UnmapDmaByBusAddress]]
|-
|-
| 14 || GetDmaBusAddress
| 14 || [[#GetDmaBusAddress|GetDmaBusAddress]]
|-
|-
| 15 || GetDmaBusAddressRange
| 15 || [[#GetDmaBusAddressRange|GetDmaBusAddressRange]]
|-
|-
| 16 || SetDmaEnable
| 16 || [[#SetDmaEnable|SetDmaEnable]]
|-
|-
| 17 || AcquireIrq
| 17 || [[#AcquireIrq|AcquireIrq]]
|-
|-
| 18 || ReleaseIrq
| 18 || [[#ReleaseIrq|ReleaseIrq]]
|-
|-
| 19 || SetIrqEnable
| 19 || [[#SetIrqEnable|SetIrqEnable]]
|-
|-
| 20 || SetAspmEnable
| 20 || [7.0.0+] [[#GetIrqEvent|GetIrqEvent]] ([1.0.0-6.2.0] SetAspmEnable)
|-
|-
| 21 || [3.0.0+] SetResetUponResumeEnable
| 21 || [7.0.0+] [[#SetAspmEnable|SetAspmEnable]] ([3.0.0-6.2.0] SetResetUponResumeEnable)
|-
|-
| 22 || [4.0.0+]
| 22 || [7.0.0+] [[#SetResetUponResumeEnable]] ([4.0.0-6.2.0] ResetFunction)
|-
|-
| 23 || [7.0.0+]
| 23 || [7.0.0+] [[#ResetFunction]]
|}
|}


[5.0.0+] The buffer types for ReadBarRegion/WriteBarRegion were changed: 0x6 changed to 0x22, and 0x5 changed to 0x21.
=== QueryFunctions ===
Takes a type-0x6 output buffer containing an array of [[#FunctionState]]. Returns an output s32 '''FunctionStateCount'''.
 
=== 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'''.


[7.0.0+] AcquireIrq now takes an additional 4-bytes of input, and no longer returns an output handle. SetAspmEnable now returns an output handle.
=== 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'''.
 
=== UnmapDmaByProcVa ===
Takes an input u32 '''FunctionHandle''' and an input u64 '''PhysicalAddress'''. No output.
 
=== UnmapDmaByBusAddress ===
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''', an input [[#IrqType]] and an input s32 '''IrqCount'''. No output.
 
=== 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.
 
=== GetIrqEvent ===
Takes an input u32s '''FunctionHandle''' and an input [[#IrqType]]. Returns an output Event handle.
 
=== SetAspmEnable ===
Takes an input u32 '''FunctionHandle''' and an input bool '''Enable'''. No output.
 
=== 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 =
= pcie:log =
This is "nn::pcie::detail::ILoggedStateManager".
This was added with [6.0.0+].
This was added with [6.0.0+].


Line 88: Line 158:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 ||  
| 0 || GetLoggedState
|-
| 1 || GetLoggedStateEvent
|}
 
= ClassDriverConfig =
This is "nn::pcie::ClassDriverConfig".
 
This is a 0x18-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x00
| 0x04
|
|-
| 0x04
| 0x01
|  
|-
|-
| 1 ||  
| 0x05
| 0x03
| Reserved
|-
| 0x08
| 0x04
| [[#ClassCode|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.
{| class="wikitable" border="1"
|-
! 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.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x00
| 0x04
| Handle
|-
| 0x04
| 0x04
| BusNum
|-
| 0x08
| 0x01
| DevNum
|-
| 0x09
| 0x01
| FuncNum
|-
| 0x0A
| 0x02
| Vid
|-
| 0x0C
| 0x02
| DevId
|-
| 0x0E
| 0x01
| HeaderType
|-
| 0x0F
| 0x01
| Reserved
|-
| 0x10
| 0x04
| [[#ClassCode|ClassCode]]
|-
| 0x14
| 0x01
| RevisionId
|-
| 0x15
| 0x03
| Reserved
|-
| 0x18
| 0x04
|
|-
| 0x1C
| 0x04
|
|-
| 0x20
| 0x04
|
|-
| 0x24
| 0x01
| HasAssignedClient
|-
| 0x25
| 0x03
| Reserved
|}
= BarProfile =
This is "nn::pcie::BarProfile".
This is a 0x18-byte struct.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x00
| 0x08
| BaseAddress
|-
| 0x08
| 0x08
| Size
|-
| 0x10
| 0x04
| Flags
|-
| 0x14
| 0x04
| Reserved
|}
[14.0.0+] This is a 0x20-byte struct.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x00
| 0x08
| BaseAddress
|-
| 0x08
| 0x08
|
|-
| 0x10
| 0x08
| Size
|-
| 0x18
| 0x04
| Flags
|-
| 0x1C
| 0x04
| Reserved
|}
= BusAccessWidth =
This is "nn::pcie::BusAccessWidth".
{| class="wikitable" border="1"
|-
! 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 [[SVC#MemoryPermission|MemoryPermission]] passed to [[SVC#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]].
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0 || ReadWrite
|-
| 1 || Write
|-
| 2 || Read
|}
= IrqType =
This is "nn::pcie::IrqType".


[[Category:Services]]
[[Category:Services]]