brintos

brintos / linux-shallow public Read only

0
0
Text · 2.8 KiB · 971382a Raw
82 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *  cx18 mailbox functions4 *5 *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>6 *  Copyright (C) 2008  Andy Walls <awalls@md.metrocast.net>7 */8 9#ifndef _CX18_MAILBOX_H_10#define _CX18_MAILBOX_H_11 12/* mailbox max args */13#define MAX_MB_ARGUMENTS 614/* compatibility, should be same as the define in cx2341x.h */15#define CX2341X_MBOX_MAX_DATA 1616 17#define MB_RESERVED_HANDLE_0 018#define MB_RESERVED_HANDLE_1 0xFFFFFFFF19 20#define APU 021#define CPU 122#define EPU 223#define HPU 324 25struct cx18;26 27/*28 * This structure is used by CPU to provide completed MDL & buffers information.29 * Its structure is dictated by the layout of the SCB, required by the30 * firmware, but its definition needs to be here, instead of in cx18-scb.h,31 * for mailbox work order scheduling32 */33struct cx18_mdl_ack {34    u32 id;        /* ID of a completed MDL */35    u32 data_used; /* Total data filled in the MDL with 'id' */36};37 38/* The cx18_mailbox struct is the mailbox structure which is used for passing39   messages between processors */40struct cx18_mailbox {41    /* The sender sets a handle in 'request' after he fills the command. The42       'request' should be different than 'ack'. The sender, also, generates43       an interrupt on XPU2YPU_irq where XPU is the sender and YPU is the44       receiver. */45    u32       request;46    /* The receiver detects a new command when 'req' is different than 'ack'.47       He sets 'ack' to the same value as 'req' to clear the command. He, also,48       generates an interrupt on YPU2XPU_irq where XPU is the sender and YPU49       is the receiver. */50    u32       ack;51    u32       reserved[6];52    /* 'cmd' identifies the command. The list of these commands are in53       cx23418.h */54    u32       cmd;55    /* Each command can have up to 6 arguments */56    u32       args[MAX_MB_ARGUMENTS];57    /* The return code can be one of the codes in the file cx23418.h. If the58       command is completed successfully, the error will be ERR_SYS_SUCCESS.59       If it is pending, the code is ERR_SYS_PENDING. If it failed, the error60       code would indicate the task from which the error originated and will61       be one of the errors in cx23418.h. In that case, the following62       applies ((error & 0xff) != 0).63       If the command is pending, the return will be passed in a MB from the64       receiver to the sender. 'req' will be returned in args[0] */65    u32       error;66};67 68struct cx18_stream;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]);76 77void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu);78 79void cx18_in_work_handler(struct work_struct *work);80 81#endif82