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

Difference between revisions of "IOS"

From WiiBrew
Jump to navigation Jump to search
(Added IOS/QA link)
m (added the link to /dev/sdio/slot0)
Line 26: Line 26:
 
  24:    async2
 
  24:    async2
 
  28:    0
 
  28:    0
 +
40:    relaunch, used for ioctlvreboot
 
   
 
   
 
  open:  fd = 0
 
  open:  fd = 0
Line 83: Line 84:
 
* /dev/printserver
 
* /dev/printserver
 
* /dev/sdio
 
* /dev/sdio
* /dev/sdio/slot0
+
* [[/dev/sdio/slot0]]
 
* /dev/sdio/slot1
 
* /dev/sdio/slot1
 
* /dev/sdio/slotw
 
* /dev/sdio/slotw

Revision as of 19:54, 1 March 2008

IOS is the operating system that runs on the Starlet coprocessor inside the Hollywood package. It provides the services that are used by Wii code to access most of the system devices.

See also: IOS/QA

IPC

Communication with IOS from PPC code is done using an IPC mechanism. There are 7 calls that can be made using this system:

  1. open
  2. close
  3. read
  4. write
  5. seek
  6. ioctl
  7. ioctlv

Here is a sample implementation, not guaranteed to work: ipc.c

ipc struct size = 40, aligned to 20

00:     cmd     // 1=open 2=close 3=read 4=write 5=seek 6=ioctl 7=ioctlv
04:     ret
08:     fd
0c:     arg[5]
20:     async1
24:     async2
28:     0
40:     relaunch, used for ioctlvreboot

open:   fd = 0
        arg0, arg1: name, mode (1=read 2=write)

close:  fd

read:   fd
        arg0, arg1: addr, len

write:  fd
        arg0, arg1: addr, len

seek:   fd
        arg0, arg1: where, whence

ioctl:  fd
        arg0: ioctl #
        arg1, arg2: addr, len
        arg3, arg4: addr, len

ioctlv: fd
        arg0: ioctl #
        arg1: # in
        arg2: # out (or in-out)
        arg3: pointer to # in plus # out pairs of (addr, len)

fd is a handle you get back from ios on "open", and that you should pass back to all other calls --segher

Most non-trivial operations are performed by opening one of the below resources, then calling ioctl or ioctlv on it.

The Starlet kernel hands these calls over to the individual drivers / processes within the Starlet. The processes register themselves to handle requests by creating one or more queues and assigning them to handle requests from a particular /dev device.

For testing out IOS devices, you can use the EasyIOS application for the wii.

/dev tree

Known resources in the /dev tree: