11.1Sjmcneill/* $NetBSD: miniipc.h,v 1.1 2025/11/16 20:11:47 jmcneill Exp $ */
21.1Sjmcneill
31.1Sjmcneill/*-
41.1Sjmcneill * Copyright (c) 2025 Jared McNeill <jmcneill@invisible.ca>
51.1Sjmcneill * All rights reserved.
61.1Sjmcneill *
71.1Sjmcneill * Redistribution and use in source and binary forms, with or without
81.1Sjmcneill * modification, are permitted provided that the following conditions
91.1Sjmcneill * are met:
101.1Sjmcneill * 1. Redistributions of source code must retain the above copyright
111.1Sjmcneill *    notice, this list of conditions and the following disclaimer.
121.1Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright
131.1Sjmcneill *    notice, this list of conditions and the following disclaimer in the
141.1Sjmcneill *    documentation and/or other materials provided with the distribution.
151.1Sjmcneill *
161.1Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
171.1Sjmcneill * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
181.1Sjmcneill * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
191.1Sjmcneill * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
201.1Sjmcneill * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
211.1Sjmcneill * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
221.1Sjmcneill * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
231.1Sjmcneill * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
241.1Sjmcneill * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
251.1Sjmcneill * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
261.1Sjmcneill * SUCH DAMAGE.
271.1Sjmcneill */
281.1Sjmcneill
291.1Sjmcneill#ifndef _WII_MINIIPC_H
301.1Sjmcneill#define _WII_MINIIPC_H
311.1Sjmcneill
321.1Sjmcneill#include <lib/libsa/stand.h>
331.1Sjmcneill
341.1Sjmcneill#define IPC_NUM_ARGS	6
351.1Sjmcneill
361.1Sjmcneilltypedef struct {
371.1Sjmcneill	union {
381.1Sjmcneill		struct {
391.1Sjmcneill			uint8_t		flags;
401.1Sjmcneill			uint8_t		device;
411.1Sjmcneill			uint16_t	req;
421.1Sjmcneill		};
431.1Sjmcneill		uint32_t		code;
441.1Sjmcneill	};
451.1Sjmcneill	uint32_t			tag;
461.1Sjmcneill	uint32_t			args[IPC_NUM_ARGS];
471.1Sjmcneill} ipc_request_t;
481.1Sjmcneill
491.1Sjmcneilltypedef struct {
501.1Sjmcneill	char				magic[3];
511.1Sjmcneill	char				version;
521.1Sjmcneill	void				*mem2_boundary;
531.1Sjmcneill	volatile ipc_request_t		*ipc_in;
541.1Sjmcneill	uint32_t			ipc_in_size;
551.1Sjmcneill	volatile ipc_request_t		*ipc_out;
561.1Sjmcneill	uint32_t			ipc_out_size;
571.1Sjmcneill} ipc_info_header_t;
581.1Sjmcneill
591.1Sjmcneillbool	miniipc_probe(void);
601.1Sjmcneillint	miniipc_ping(void);
611.1Sjmcneillint	miniipc_sdmmc_ack(uint32_t *);
621.1Sjmcneillint	miniipc_sdmmc_state(uint32_t *);
631.1Sjmcneillint	miniipc_sdmmc_size(uint32_t *);
641.1Sjmcneillint	miniipc_sdmmc_read(uint32_t, uint32_t, void *);
651.1Sjmcneillint	miniipc_sdmmc_write(uint32_t, uint32_t, const void *);
661.1Sjmcneill
671.1Sjmcneill#endif /* !_WII_MINIIPC_H */
68