wii_ipcreg.h revision 256281
1/*-
2 * Copyright (C) 2012 Margarida Gouveia
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
21 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: stable/10/sys/powerpc/wii/wii_ipcreg.h 252500 2013-07-02 07:17:56Z rpaulo $
27 */
28
29#ifndef	_POWERPC_WII_WII_IPCREG_H
30#define	_POWERPC_WII_WII_IPCREG_H
31
32#define	WIIIPC_REG_ADDR		0x0d000000
33#define	WIIIPC_REG_LEN		0x40
34#define	WIIIPC_IOH_ADDR		0x133e0000
35#define	WIIIPC_IOH_LEN		0xc20000
36
37#define	WIIIPC_TXBUF		0x00
38#define	WIIIPC_CSR		0x04
39#define	WIIIPC_CSR_TXSTART	0x01
40#define	WIIIPC_CSR_TBEI		0x02
41#define	WIIIPC_CSR_RBFI		0x04
42#define	WIIIPC_CSR_RXREADY	0x08
43#define	WIIIPC_CSR_RBFIMASK	0x10
44#define	WIIIPC_CSR_TBEIMASK	0x20
45#define	WIIIPC_RXBUF		0x08
46#define	WIIIPC_ISR		0x30
47#define	WIIIPC_ISR_MAGIC 	0x40000000
48
49enum wiiipc_cmd {
50	WIIIPC_CMD_OPEN		= 1,
51	WIIIPC_CMD_CLOSE	= 2,
52	WIIIPC_CMD_READ		= 3,
53	WIIIPC_CMD_WRITE	= 4,
54	WIIIPC_CMD_SEEK		= 5,
55	WIIIPC_CMD_IOCTL	= 6,
56	WIIIPC_CMD_IOCTLV	= 7,
57	WIIIPC_CMD_ASYNCRESP	= 8
58};
59
60struct wiiipc_ipc_msg {
61	uint32_t	ipc_cmd;
62	int32_t		ipc_result;
63	int32_t	 	ipc_fd;	/* WIIIPC_CMD_ASYNCRESP - the original cmd */
64	union {
65		struct {
66			intptr_t  pathname;
67			uint32_t  mode;
68		} _ipc_open;
69		struct {
70			intptr_t  data;
71			uint32_t  len;
72		} _ipc_read, _ipc_write;
73		struct {
74			int32_t   offset;
75			int32_t   whence;
76		} _ipc_seek;
77		struct {
78			uint32_t  request;
79			intptr_t  ibuf;
80			uint32_t  ilen;
81			intptr_t  obuf;
82			uint32_t  olen;
83		} _ipc_ioctl;
84		struct {
85			uint32_t  request;
86			uint32_t  argin;
87			uint32_t  argout;
88			intptr_t  iovec;
89		} _ipc_ioctlv;
90		uint32_t _ipc_argv[5];
91	} args;
92} __attribute__((packed));
93
94CTASSERT(sizeof(struct wiiipc_ipc_msg) == 32);
95
96#define	ipc_open 	args._ipc_open
97#define	ipc_read	args._ipc_read
98#define	ipc_write	args._ipc_write
99#define	ipc_ioctl 	args._ipc_ioctl
100#define	ipc_ioctlv	args._ipc_ioctlv
101
102#endif	/* _POWERPC_WII_WII_IPCREG_H */
103