1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Intel Camera Imaging ISP subsystem.
4  * Copyright (c) 2015, Intel Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  */
15 
16 #ifndef _STREAM2MMMIO_DEFS_H
17 #define _STREAM2MMMIO_DEFS_H
18 
19 #include <mipi_backend_defs.h>
20 
21 #define _STREAM2MMIO_REG_ALIGN                  4
22 
23 #define _STREAM2MMIO_COMMAND_REG_ID             0
24 #define _STREAM2MMIO_ACKNOWLEDGE_REG_ID         1
25 #define _STREAM2MMIO_PIX_WIDTH_ID_REG_ID        2
26 #define _STREAM2MMIO_START_ADDR_REG_ID          3      /* master port address,NOT Byte */
27 #define _STREAM2MMIO_END_ADDR_REG_ID            4      /* master port address,NOT Byte */
28 #define _STREAM2MMIO_STRIDE_REG_ID              5      /* stride in master port words, increment is per packet for long sids, stride is not used for short sid's*/
29 #define _STREAM2MMIO_NUM_ITEMS_REG_ID           6      /* number of packets for store packets cmd, number of words for store_words cmd */
30 #define _STREAM2MMIO_BLOCK_WHEN_NO_CMD_REG_ID   7      /* if this register is 1, input will be stalled if there is no pending command for this sid */
31 #define _STREAM2MMIO_REGS_PER_SID               8
32 
33 #define _STREAM2MMIO_SID_REG_OFFSET             8
34 #define _STREAM2MMIO_MAX_NOF_SIDS              64      /* value used in hss model */
35 
36 /* command token definition     */
37 #define _STREAM2MMIO_CMD_TOKEN_CMD_LSB          0      /* bits 1-0 is for the command field */
38 #define _STREAM2MMIO_CMD_TOKEN_CMD_MSB          1
39 
40 #define _STREAM2MMIO_CMD_TOKEN_WIDTH           (_STREAM2MMIO_CMD_TOKEN_CMD_MSB + 1 - _STREAM2MMIO_CMD_TOKEN_CMD_LSB)
41 
42 #define _STREAM2MMIO_CMD_TOKEN_STORE_WORDS              0      /* command for storing a number of output words indicated by reg _STREAM2MMIO_NUM_ITEMS */
43 #define _STREAM2MMIO_CMD_TOKEN_STORE_PACKETS            1      /* command for storing a number of packets indicated by reg _STREAM2MMIO_NUM_ITEMS      */
44 #define _STREAM2MMIO_CMD_TOKEN_SYNC_FRAME               2      /* command for waiting for a frame start                                                */
45 
46 /* acknowledges from packer module */
47 /* fields: eof   - indicates whether last (short) packet received was an eof packet */
48 /*         eop   - indicates whether command has ended due to packet end or due to no of words requested has been received */
49 /*         count - indicates number of words stored */
50 #define _STREAM2MMIO_PACK_NUM_ITEMS_BITS        16
51 #define _STREAM2MMIO_PACK_ACK_EOP_BIT           _STREAM2MMIO_PACK_NUM_ITEMS_BITS
52 #define _STREAM2MMIO_PACK_ACK_EOF_BIT           (_STREAM2MMIO_PACK_ACK_EOP_BIT + 1)
53 
54 /* acknowledge token definition */
55 #define _STREAM2MMIO_ACK_TOKEN_NUM_ITEMS_LSB    0      /* bits 3-0 is for the command field */
56 #define _STREAM2MMIO_ACK_TOKEN_NUM_ITEMS_MSB   (_STREAM2MMIO_PACK_NUM_ITEMS_BITS - 1)
57 #define _STREAM2MMIO_ACK_TOKEN_EOP_BIT         _STREAM2MMIO_PACK_ACK_EOP_BIT
58 #define _STREAM2MMIO_ACK_TOKEN_EOF_BIT         _STREAM2MMIO_PACK_ACK_EOF_BIT
59 #define _STREAM2MMIO_ACK_TOKEN_VALID_BIT       (_STREAM2MMIO_ACK_TOKEN_EOF_BIT + 1)      /* this bit indicates a valid ack    */
60 /* if there is no valid ack, a read  */
61 /* on the ack register returns 0     */
62 #define _STREAM2MMIO_ACK_TOKEN_WIDTH           (_STREAM2MMIO_ACK_TOKEN_VALID_BIT + 1)
63 
64 /* commands for packer module */
65 #define _STREAM2MMIO_PACK_CMD_STORE_WORDS        0
66 #define _STREAM2MMIO_PACK_CMD_STORE_LONG_PACKET  1
67 #define _STREAM2MMIO_PACK_CMD_STORE_SHORT_PACKET 2
68 
69 #endif /* _STREAM2MMIO_DEFS_H */
70