1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#ifndef _SPI_DATA_H_
#define _SPI_DATA_H_
#include "spi_dev.h"
#define SPI_TASK_EVENT_COUNT 64
#define SPI_DATA_BOF 0x7F
#define SPI_DATA_EOF 0x7E
#define SPI_DATA_FF_PADDING_HEADER 0xFFFFFFFF
#define SPI_DATA_MUX_NORMAL_MASK 0x0F
#define SPI_DATA_MUX_MORE_H 0x10
#define SPI_DATA_MUX_MORE_M 0x20
#define SPI_DATA_MUX_MORE_T 0x30
#define SPI_DATA_MUX_SIZE 2
#define SPI_DATA_LENGTH_SIZE 4
#define SPI_DATA_BOF_SIZE 1
#define SPI_DATA_INNER_LENGTH_SIZE 4
#define SPI_DATA_IPC_INNER_LENGTH_SIZE 2
#define SPI_DATA_IPC_INNER_CONTROL_SIZE 1
#define SPI_DATA_EOF_SIZE 1
#define SPI_DATA_HEADER_SIZE (SPI_DATA_MUX_SIZE+ \
SPI_DATA_LENGTH_SIZE+SPI_DATA_BOF_SIZE+SPI_DATA_EOF_SIZE)
#define SPI_DATA_HEADER_SIZE_FRONT (SPI_DATA_MUX_SIZE+ \
SPI_DATA_LENGTH_SIZE+SPI_DATA_BOF_SIZE)
#define SPI_DATA_IPC_INNER_HEADER_SIZE \
(SPI_DATA_IPC_INNER_LENGTH_SIZE+ \
SPI_DATA_IPC_INNER_CONTROL_SIZE)
#define SPI_DATA_SIZE(X) (SPI_DATA_HEADER_SIZE+X)
#define SPI_DATA_LENGTH_OFFSET SPI_DATA_MUX_SIZE
#define SPI_DATA_BOF_OFFSET (SPI_DATA_LENGTH_OFFSET+ \
SPI_DATA_LENGTH_SIZE)
#define SPI_DATA_DATA_OFFSET (SPI_DATA_BOF_OFFSET+ \
SPI_DATA_BOF_SIZE)
#define SPI_DATA_EOF_OFFSET(X) (SPI_DATA_DATA_OFFSET+X)
#define SPI_DATA_PACKET_HEADER_SIZE 4
#define SPI_DATA_PACKET_MUX_ERROR_SPARE_SIZE 4
#define SPI_DATA_PACKET_MAX_PACKET_BODY_SIZE \
(SPI_DEV_MAX_PACKET_SIZE-SPI_DATA_PACKET_HEADER_SIZE- \
SPI_DATA_PACKET_MUX_ERROR_SPARE_SIZE)
#define SPI_DATA_MIN_SIZE (SPI_DATA_HEADER_SIZE*2)
#define SPI_DATA_MAX_SIZE_PER_PACKET (SPI_DEV_MAX_PACKET_SIZE- \
SPI_DATA_PACKET_HEADER_SIZE-SPI_DATA_HEADER_SIZE- \
SPI_DATA_PACKET_MUX_ERROR_SPARE_SIZE)
#define SPI_DATA_MAX_COUNT_PER_PACKET 240
#define SPI_DATA_IPC_QUEUE_SIZE 0x10000
#define SPI_DATA_RAW_QUEUE_SIZE 0x100000
#define SPI_DATA_RFS_QUEUE_SIZE 0x100000
#define SPI_DATA_IPC_DIV_BUFFER_SIZE 0x1000
#define SPI_DATA_RAW_DIV_BUFFER_SIZE 0x1000
#define SPI_DATA_RFS_DIV_BUFFER_SIZE 0x1000
#define SPI_DATA_DIVIDE_BUFFER_SIZE SPI_DEV_MAX_PACKET_SIZE
enum SPI_DATA_TYPE_T {
SPI_DATA_MUX_IPC = 0x01,
SPI_DATA_MUX_RAW = 0x02,
SPI_DATA_MUX_RFS = 0x03,
SPI_DATA_MUX_CMD = 0x04,
};
struct spi_data_packet_header {
/* 12bit : packet size less than SPI_DEV_PACKET_SIZE */
unsigned long current_data_size:31;
/* 1bit : packet division flag */
unsigned long more:1;
};
enum SPI_DATA_QUEUE_TYPE_T {
SPI_DATA_QUEUE_TYPE_IPC_TX, /* 0 : formatted(IPC) tx buffer */
SPI_DATA_QUEUE_TYPE_IPC_RX, /* 1 : formatted(IPC) rx buffer */
SPI_DATA_QUEUE_TYPE_RAW_TX, /* 2 : raw tx buffer */
SPI_DATA_QUEUE_TYPE_RAW_RX, /* 3 : raw rx buffer */
SPI_DATA_QUEUE_TYPE_RFS_TX, /* 4 : rfs tx buffer */
SPI_DATA_QUEUE_TYPE_RFS_RX, /* 5 : rfs rx buffer */
SPI_DATA_QUEUE_TYPE_NB /* 6 : number of buffer */
};
struct spi_data_queue {
unsigned int tail; /* circular queue header */
unsigned int head; /* circular queue tail */
};
struct spi_data_queue_info {
struct spi_data_queue *header;
enum SPI_DATA_TYPE_T type;
unsigned int buf_size; /* queue size */
char *buffer; /* queue data */
};
struct spi_data_div_buf {
unsigned int length;
char *buffer; /* queue data */
};
extern void *ipc_spi_get_queue_buff(void);
extern struct spi_data_queue *spi_data_queue;
extern struct spi_data_queue_info *spi_queue_info;
extern char *gspi_data_packet_buf;
extern void spi_data_queue_init(void);
extern void spi_data_queue_destroy(void);
extern unsigned int spi_data_dequeue(struct spi_data_queue_info *queue_info,
void *pdata);
extern int spi_data_inqueue(struct spi_data_queue_info *queue, void *data,
unsigned int length);
extern void spi_data_msg_inqueuefront(enum SPI_MAIN_MSG_T task_msg);
extern int spi_data_queue_is_empty(enum SPI_DATA_QUEUE_TYPE_T type);
extern int spi_data_div_buf_is_empty(enum SPI_DATA_QUEUE_TYPE_T type);
extern int spi_data_check_tx_queue(void);
extern int spi_data_prepare_tx_packet(void *buf);
extern int spi_data_parsing_rx_packet(void *buf, unsigned int length);
extern void spi_data_print_raw_data(void *data, unsigned int length);
#endif
|