Changes

1,104 bytes added ,  06:42, 31 January 2023
Line 690: Line 690:     
The buffer contains an array of [[#XferReport]].
 
The buffer contains an array of [[#XferReport]].
 +
 +
On newer sysvers this runs code which is the same as the user-process code handling the tmem from [[#ShareReportRing]]. This cmd can handle getting reports from that tmem as well, however normally user-processes would just access the tmem [[#ShareReportRing|directly]].
    
==== BatchBufferAsync ====
 
==== BatchBufferAsync ====
Line 702: Line 704:  
Takes an input u64 '''buffer''' and an u64 '''size''', no output.
 
Takes an input u64 '''buffer''' and an u64 '''size''', no output.
   −
Official user-processes validate that both input params are page-aligned.
+
This validates that both input params are page-aligned.
 +
 
 +
This maps the specified buffer as devicemem and stores the fields for this in object state. If this was already used with this IClientEpSession object, an error is thrown.
    
==== ShareReportRing ====
 
==== ShareReportRing ====
 
Takes an input u32 '''size''' and an input TransferMemory handle, no output.
 
Takes an input u32 '''size''' and an input TransferMemory handle, no output.
   −
Official user-processes create the TransferMemory with permissions=RW. User-processes also validate that the input size is page-aligned, and this is also validated against data from state.
+
Official user-processes create the TransferMemory with permissions=RW. This validates that the input size is page-aligned, and this is also validated against data from state. Official user-processes also do this same validation.
    
When this was used, official user-processes read data from this TransferMemory buffer instead of using [[#GetXferReport]].
 
When this was used, official user-processes read data from this TransferMemory buffer instead of using [[#GetXferReport]].
 +
 +
This maps a TransferMemory buffer which is used for the [[#XferReport]] Ring, replacing the heap Ring buffer which was setup during [[#PopulateRing]].
 +
 +
Structure of the tmem:
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || Write index
 +
|-
 +
| 0x8 || 0x8 || Read index
 +
|-
 +
| 0x10 || 0x18*count || Array of [[#XferReport]]
 +
|}
 +
 +
write_index!=read_index indicates that report data is available. The index fields are updated with: <code>index = index+1 % count;</code> write_index is updated by sysmodule, read_index is updated by the user-process. If the index field being used is >=count, this will Abort.
    
= usb:pd =
 
= usb:pd =