blob: 54758f32db1ec2ea9acc382e2412e528afb27fd7 [file] [log] [blame]
Hans Verkuil1c1e45d2008-04-28 20:24:33 -03001/*
2 * cx18 mailbox functions
3 *
4 * Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 * 02111-1307 USA
20 */
21
22#ifndef _CX18_MAILBOX_H_
23#define _CX18_MAILBOX_H_
24
25/* mailbox max args */
26#define MAX_MB_ARGUMENTS 6
27/* compatibility, should be same as the define in cx2341x.h */
28#define CX2341X_MBOX_MAX_DATA 16
29
30#define MB_RESERVED_HANDLE_0 0
31#define MB_RESERVED_HANDLE_1 0xFFFFFFFF
32
Andy Walls72c2d6d2008-11-06 01:15:41 -030033#define APU 0
34#define CPU 1
35#define EPU 2
36#define HPU 3
37
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030038struct cx18;
39
40/* The cx18_mailbox struct is the mailbox structure which is used for passing
41 messages between processors */
42struct cx18_mailbox {
43 /* The sender sets a handle in 'request' after he fills the command. The
44 'request' should be different than 'ack'. The sender, also, generates
45 an interrupt on XPU2YPU_irq where XPU is the sender and YPU is the
46 receiver. */
47 u32 request;
48 /* The receiver detects a new command when 'req' is different than 'ack'.
49 He sets 'ack' to the same value as 'req' to clear the command. He, also,
50 generates an interrupt on YPU2XPU_irq where XPU is the sender and YPU
51 is the receiver. */
52 u32 ack;
53 u32 reserved[6];
54 /* 'cmd' identifies the command. The list of these commands are in
55 cx23418.h */
56 u32 cmd;
57 /* Each command can have up to 6 arguments */
58 u32 args[MAX_MB_ARGUMENTS];
59 /* The return code can be one of the codes in the file cx23418.h. If the
60 command is completed successfuly, the error will be ERR_SYS_SUCCESS.
61 If it is pending, the code is ERR_SYS_PENDING. If it failed, the error
62 code would indicate the task from which the error originated and will
63 be one of the errors in cx23418.h. In that case, the following
64 applies ((error & 0xff) != 0).
65 If the command is pending, the return will be passed in a MB from the
66 receiver to the sender. 'req' will be returned in args[0] */
67 u32 error;
68};
69
70int cx18_api(struct cx18 *cx, u32 cmd, int args, u32 data[]);
71int cx18_vapi_result(struct cx18 *cx, u32 data[MAX_MB_ARGUMENTS], u32 cmd,
72 int args, ...);
73int cx18_vapi(struct cx18 *cx, u32 cmd, int args, ...);
74int cx18_api_func(void *priv, u32 cmd, int in, int out,
75 u32 data[CX2341X_MBOX_MAX_DATA]);
Andy Walls72c2d6d2008-11-06 01:15:41 -030076long cx18_mb_ack(struct cx18 *cx, const struct cx18_mailbox *mb, int rpu);
Hans Verkuil1c1e45d2008-04-28 20:24:33 -030077
78#endif