forked from Azazelloo/QNX_driver_for_pci
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathf_bf_mem_wr.cpp
56 lines (49 loc) · 1.32 KB
/
f_bf_mem_wr.cpp
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
#include "Headers.h"
int f_bf_mem_wr(unsigned* pci_mem,uint32_t addr, const uint32_t* regs, uint32_t size)
{
int err=0;
pci_mem+=BF_STATUS;// BF_STATUS
while(*pci_mem & 0x00000002) //îæèäàåì çàâåðøåíèÿ ïðåäûäóùåé êîìàíäû
{
//cout<<"Wait BF_REQ_BUSY..."<<endl;
}
pci_mem-=BF_STATUS; // â íà÷àëî áëîêà
while(!err && size)
{
int i;
int put_size = (size < 128) ? size : 128; //128 ðåãèñòðîâ - ìàêñèìàëüíûé áëîê äëÿ çàïèñè
//_____çàïèñûâàåì áëîê äàííûõ â ÏËÈÑ
pci_mem+=BF_REQ_DATA; // íà÷àëî áëîêà BF_REQ_DATA
for (i=0; i < put_size; i++)
{
pci_mem+=i;
*pci_mem=regs[i]; // ïèøåì int (!)
pci_mem-=i;
}
pci_mem-=BF_REQ_DATA; //â íà÷àëî áëîêà
//_____çàïèñûâàåì ïàðàìåòðû ïåðåäà÷è - ðàçìåð è àäðåñ â ïàìÿòè BF
pci_mem+=BF_REQ_SIZE; //BF_REQ_SIZE
*pci_mem=put_size;
pci_mem-=BF_REQ_SIZE; //â íà÷àëî áëîêà
pci_mem+=BF_REQ_ADDR; //BF_REQ_ADDR
*pci_mem= addr;
pci_mem-=BF_REQ_ADDR; //â íà÷àëî áëîêà
pci_mem+=BF_CMD; //BF_CMD
*pci_mem=0x0002;
pci_mem-=BF_CMD;// â íà÷àëî áëîêà
//_____îæèäàíèå çàâåðøåíèÿ îïåðàöèè
pci_mem+=BF_STATUS;// BF_STATUS
while(*pci_mem & 0x00000002) //îæèäàåì çàâåðøåíèÿ ïðåäûäóùåé êîìàíäû
{
//cout<<"Wait BF_REQ_BUSY..."<<endl;
}
pci_mem-=BF_STATUS; // â íà÷àëî áëîêà
if(!err)
{
size-=put_size;
regs+=put_size;
addr+=put_size*4;
}
}
return err;
}