In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

/dev/net/kd/time: Difference between revisions

From WiiBrew
< /dev | net | kd
Jump to navigation Jump to search
IMacros (talk | contribs)
No edit summary
Leoetlino (talk | contribs)
Slightly better formatting.
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:
これは、任天堂株式会社のCEOです。このサイトがダウンするか今の我々の利益の喪失を訴えて!
== Ioctl listing ==
==これは、任天堂株式会社のCEOです。このサイトがダウンするか今の我々の利益の喪失を訴えて!==
 
===これは、任天堂株式会社のCEOです。このサイトがダウンするか今の我々の利益の喪失を訴えて!===
typedef struct _skd_timebuf//This is used by all ioctls for at least outbuf. For ioctl 0x18, inbuf addr & 3 is written to retval.
これは、任天堂株式会社のCEOです。このサイトがダウンするか今の我々の利益の喪失を訴えて!
{
[[これは、任天堂株式会社のCEOです。このサイトがダウンするか今の我々の利益の喪失を訴えて!]]
        s32 retval;//Zero for success, -30 when "Universal time is not ready.".
        u64 time;//UTC time in seconds.
} kd_timebuf;
 
{| class="wikitable"
|-
! Request number
! Name
! Input
! Output
! Notes
|-
| 0x14
| NWC24iGetUniversalTime
| none
| 12 bytes
| Writes the current UTC time to inbuf kd_timebuf->time.
|-
| 0x15
| NWC24iSetUniversalTime
| 12 bytes
| 4 bytes
| Sets the current UTC time to inbuf kd_timebuf->time.
|-
| 0x16
| Undefined
| none
| none
| always returns -9
|-
| 0x17
| NWC24iSetRtcCounter
| 8 bytes
| 4 bytes
| Corrects the internal KD RTC by adding the input u64.
|-
| 0x18
| NWC24iGetTimeDifference
| none
| 12 bytes
|
|}
 
== Detailed Description ==
/dev/net/kd/time is used to get and set utc and rtc offsets. this is used by things like nwc24's scheduler and the module handles reading and editing of /shared2/wc24/misc.bin
 
=== KD_GetUTCTime ===
no inbuffer
 
outbuffer must be >= 0xC bytes and must be 0x4 aligned
 
if outbuffer is not >= 0xC bytes or outbuffer == NULL the IOS_Ioctl will return -4, else it returns 0
 
checks if a word is set in the module's memory that indicates the Universal time is ready and returns -30 in outbuffer->retval if not
 
outbuffer->time is set to the stored utc otherwise
 
=== KD_SetUTCTime ===
inbuffer must be >= 0xC bytes and must be 0x4 aligned
 
outbuffer must be >= 0x4 bytes and must be 0x4 aligned
 
if outbuffer or inbuffer is NULL or are not aligned the IOS_Ioctl will return -4, else it returns 0
 
struct inbuffer { u64 utc, u32 other_value };
 
checks that 0x30df3b00 <= utc <= 0xdfaef080 else it sets outbuffer->retval to -3
 
if utc is ok, it sets the module's struct containing the utc and the other_value
 
=== Undefined ===
no buffers checked
 
always returns -9 from IOS_Ioctl
 
=== NWC24iSetRtcCounter ===
inbuffer must be >= 0x8 bytes and must be 0x4 aligned
 
outbuffer must be >= 0x4 bytes and must be 0x4 aligned
 
if outbuffer or inbuffer is NULL or not aligned the IOS_Ioctl will return -4, else it returns 0
 
struct inbuffer { u32 rtc_value, u32 other_value };
 
other_value is checked for the lowest bit to be either 0 or 1 which sets a word in memory
 
this function messes with the /shared2/wc24/misc.bin file and by reading and writing utc data to/from it
 
it also sets utc when it needs to be synchronized due to offset
 
outbuffer->retval will always hold 0 if the IOS_Ioctl doesn't return -4
 
=== NWC24iGetTimeDifference ===
inbuffer is not checked
 
outbuffer must be >= 0xC bytes and must be 0x4 aligned
 
if outbuffer is NULL or not aligned the IOS_Ioctl will return -4
 
if the module's memory indicates no time difference the IOS_Ioctl will return -30
 
else it returns 0
 
outbuffer->retval could hold the outbuffer address & 3 if:
 
a) it wasn't doing a 32bit write to an unaligned address
 
b) it didn't jump to return -4 from the Ioctl when it was unaligned
 
so it'll always hold 0
 
outbuffer->time will hold the timedifference
 
[[Category:Wii Filesystem]]

Latest revision as of 15:42, 7 July 2017

Ioctl listing

typedef struct _skd_timebuf//This is used by all ioctls for at least outbuf. For ioctl 0x18, inbuf addr & 3 is written to retval.
{
       s32 retval;//Zero for success, -30 when "Universal time is not ready.".
       u64 time;//UTC time in seconds.
} kd_timebuf;
Request number Name Input Output Notes
0x14 NWC24iGetUniversalTime none 12 bytes Writes the current UTC time to inbuf kd_timebuf->time.
0x15 NWC24iSetUniversalTime 12 bytes 4 bytes Sets the current UTC time to inbuf kd_timebuf->time.
0x16 Undefined none none always returns -9
0x17 NWC24iSetRtcCounter 8 bytes 4 bytes Corrects the internal KD RTC by adding the input u64.
0x18 NWC24iGetTimeDifference none 12 bytes

Detailed Description

/dev/net/kd/time is used to get and set utc and rtc offsets. this is used by things like nwc24's scheduler and the module handles reading and editing of /shared2/wc24/misc.bin

KD_GetUTCTime

no inbuffer

outbuffer must be >= 0xC bytes and must be 0x4 aligned

if outbuffer is not >= 0xC bytes or outbuffer == NULL the IOS_Ioctl will return -4, else it returns 0

checks if a word is set in the module's memory that indicates the Universal time is ready and returns -30 in outbuffer->retval if not

outbuffer->time is set to the stored utc otherwise

KD_SetUTCTime

inbuffer must be >= 0xC bytes and must be 0x4 aligned

outbuffer must be >= 0x4 bytes and must be 0x4 aligned

if outbuffer or inbuffer is NULL or are not aligned the IOS_Ioctl will return -4, else it returns 0

struct inbuffer { u64 utc, u32 other_value };

checks that 0x30df3b00 <= utc <= 0xdfaef080 else it sets outbuffer->retval to -3

if utc is ok, it sets the module's struct containing the utc and the other_value

Undefined

no buffers checked

always returns -9 from IOS_Ioctl

NWC24iSetRtcCounter

inbuffer must be >= 0x8 bytes and must be 0x4 aligned

outbuffer must be >= 0x4 bytes and must be 0x4 aligned

if outbuffer or inbuffer is NULL or not aligned the IOS_Ioctl will return -4, else it returns 0

struct inbuffer { u32 rtc_value, u32 other_value };

other_value is checked for the lowest bit to be either 0 or 1 which sets a word in memory

this function messes with the /shared2/wc24/misc.bin file and by reading and writing utc data to/from it

it also sets utc when it needs to be synchronized due to offset

outbuffer->retval will always hold 0 if the IOS_Ioctl doesn't return -4

NWC24iGetTimeDifference

inbuffer is not checked

outbuffer must be >= 0xC bytes and must be 0x4 aligned

if outbuffer is NULL or not aligned the IOS_Ioctl will return -4

if the module's memory indicates no time difference the IOS_Ioctl will return -30

else it returns 0

outbuffer->retval could hold the outbuffer address & 3 if:

a) it wasn't doing a 32bit write to an unaligned address

b) it didn't jump to return -4 from the Ioctl when it was unaligned

so it'll always hold 0

outbuffer->time will hold the timedifference