forked from Qortal/Brooklyn
* 0day explit mitigation * Memory corruption prevention * Privilege escalation prevention * Buffer over flow prevention * File System corruption defense * Thread escape prevention This may very well be the most intensive inclusion to BrooklynR. This will not be part of an x86 suite nor it will be released as tool kit. The security core toolkit will remain part of kernel base.
178 lines
4.1 KiB
C
178 lines
4.1 KiB
C
/*
|
|
* Copyright (C) 2008
|
|
* Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
|
|
*
|
|
* Copyright (C) 2005-2007 Freescale Semiconductor, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef __LINUX_DMA_IPU_DMA_H
|
|
#define __LINUX_DMA_IPU_DMA_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/dmaengine.h>
|
|
|
|
/* IPU DMA Controller channel definitions. */
|
|
enum ipu_channel {
|
|
IDMAC_IC_0 = 0, /* IC (encoding task) to memory */
|
|
IDMAC_IC_1 = 1, /* IC (viewfinder task) to memory */
|
|
IDMAC_ADC_0 = 1,
|
|
IDMAC_IC_2 = 2,
|
|
IDMAC_ADC_1 = 2,
|
|
IDMAC_IC_3 = 3,
|
|
IDMAC_IC_4 = 4,
|
|
IDMAC_IC_5 = 5,
|
|
IDMAC_IC_6 = 6,
|
|
IDMAC_IC_7 = 7, /* IC (sensor data) to memory */
|
|
IDMAC_IC_8 = 8,
|
|
IDMAC_IC_9 = 9,
|
|
IDMAC_IC_10 = 10,
|
|
IDMAC_IC_11 = 11,
|
|
IDMAC_IC_12 = 12,
|
|
IDMAC_IC_13 = 13,
|
|
IDMAC_SDC_0 = 14, /* Background synchronous display data */
|
|
IDMAC_SDC_1 = 15, /* Foreground data (overlay) */
|
|
IDMAC_SDC_2 = 16,
|
|
IDMAC_SDC_3 = 17,
|
|
IDMAC_ADC_2 = 18,
|
|
IDMAC_ADC_3 = 19,
|
|
IDMAC_ADC_4 = 20,
|
|
IDMAC_ADC_5 = 21,
|
|
IDMAC_ADC_6 = 22,
|
|
IDMAC_ADC_7 = 23,
|
|
IDMAC_PF_0 = 24,
|
|
IDMAC_PF_1 = 25,
|
|
IDMAC_PF_2 = 26,
|
|
IDMAC_PF_3 = 27,
|
|
IDMAC_PF_4 = 28,
|
|
IDMAC_PF_5 = 29,
|
|
IDMAC_PF_6 = 30,
|
|
IDMAC_PF_7 = 31,
|
|
};
|
|
|
|
/* Order significant! */
|
|
enum ipu_channel_status {
|
|
IPU_CHANNEL_FREE,
|
|
IPU_CHANNEL_INITIALIZED,
|
|
IPU_CHANNEL_READY,
|
|
IPU_CHANNEL_ENABLED,
|
|
};
|
|
|
|
#define IPU_CHANNELS_NUM 32
|
|
|
|
enum pixel_fmt {
|
|
/* 1 byte */
|
|
IPU_PIX_FMT_GENERIC,
|
|
IPU_PIX_FMT_RGB332,
|
|
IPU_PIX_FMT_YUV420P,
|
|
IPU_PIX_FMT_YUV422P,
|
|
IPU_PIX_FMT_YUV420P2,
|
|
IPU_PIX_FMT_YVU422P,
|
|
/* 2 bytes */
|
|
IPU_PIX_FMT_RGB565,
|
|
IPU_PIX_FMT_RGB666,
|
|
IPU_PIX_FMT_BGR666,
|
|
IPU_PIX_FMT_YUYV,
|
|
IPU_PIX_FMT_UYVY,
|
|
/* 3 bytes */
|
|
IPU_PIX_FMT_RGB24,
|
|
IPU_PIX_FMT_BGR24,
|
|
/* 4 bytes */
|
|
IPU_PIX_FMT_GENERIC_32,
|
|
IPU_PIX_FMT_RGB32,
|
|
IPU_PIX_FMT_BGR32,
|
|
IPU_PIX_FMT_ABGR32,
|
|
IPU_PIX_FMT_BGRA32,
|
|
IPU_PIX_FMT_RGBA32,
|
|
};
|
|
|
|
enum ipu_color_space {
|
|
IPU_COLORSPACE_RGB,
|
|
IPU_COLORSPACE_YCBCR,
|
|
IPU_COLORSPACE_YUV
|
|
};
|
|
|
|
/*
|
|
* Enumeration of IPU rotation modes
|
|
*/
|
|
enum ipu_rotate_mode {
|
|
/* Note the enum values correspond to BAM value */
|
|
IPU_ROTATE_NONE = 0,
|
|
IPU_ROTATE_VERT_FLIP = 1,
|
|
IPU_ROTATE_HORIZ_FLIP = 2,
|
|
IPU_ROTATE_180 = 3,
|
|
IPU_ROTATE_90_RIGHT = 4,
|
|
IPU_ROTATE_90_RIGHT_VFLIP = 5,
|
|
IPU_ROTATE_90_RIGHT_HFLIP = 6,
|
|
IPU_ROTATE_90_LEFT = 7,
|
|
};
|
|
|
|
/*
|
|
* Enumeration of DI ports for ADC.
|
|
*/
|
|
enum display_port {
|
|
DISP0,
|
|
DISP1,
|
|
DISP2,
|
|
DISP3
|
|
};
|
|
|
|
struct idmac_video_param {
|
|
unsigned short in_width;
|
|
unsigned short in_height;
|
|
uint32_t in_pixel_fmt;
|
|
unsigned short out_width;
|
|
unsigned short out_height;
|
|
uint32_t out_pixel_fmt;
|
|
unsigned short out_stride;
|
|
bool graphics_combine_en;
|
|
bool global_alpha_en;
|
|
bool key_color_en;
|
|
enum display_port disp;
|
|
unsigned short out_left;
|
|
unsigned short out_top;
|
|
};
|
|
|
|
/*
|
|
* Union of initialization parameters for a logical channel. So far only video
|
|
* parameters are used.
|
|
*/
|
|
union ipu_channel_param {
|
|
struct idmac_video_param video;
|
|
};
|
|
|
|
struct idmac_tx_desc {
|
|
struct dma_async_tx_descriptor txd;
|
|
struct scatterlist *sg; /* scatterlist for this */
|
|
unsigned int sg_len; /* tx-descriptor. */
|
|
struct list_head list;
|
|
};
|
|
|
|
struct idmac_channel {
|
|
struct dma_chan dma_chan;
|
|
dma_cookie_t completed; /* last completed cookie */
|
|
union ipu_channel_param params;
|
|
enum ipu_channel link; /* input channel, linked to the output */
|
|
enum ipu_channel_status status;
|
|
void *client; /* Only one client per channel */
|
|
unsigned int n_tx_desc;
|
|
struct idmac_tx_desc *desc; /* allocated tx-descriptors */
|
|
struct scatterlist *sg[2]; /* scatterlist elements in buffer-0 and -1 */
|
|
struct list_head free_list; /* free tx-descriptors */
|
|
struct list_head queue; /* queued tx-descriptors */
|
|
spinlock_t lock; /* protects sg[0,1], queue */
|
|
struct mutex chan_mutex; /* protects status, cookie, free_list */
|
|
bool sec_chan_en;
|
|
int active_buffer;
|
|
unsigned int eof_irq;
|
|
char eof_name[16]; /* EOF IRQ name for request_irq() */
|
|
};
|
|
|
|
#define to_tx_desc(tx) container_of(tx, struct idmac_tx_desc, txd)
|
|
#define to_idmac_chan(c) container_of(c, struct idmac_channel, dma_chan)
|
|
|
|
#endif /* __LINUX_DMA_IPU_DMA_H */
|