Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
1b989ed2
Commit
1b989ed2
authored
Jul 18, 2014
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@5574
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
f6aaedf3
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
97 additions
and
31 deletions
+97
-31
targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c
targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c
+2
-2
targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
+78
-19
targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m
targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m
+17
-10
No files found.
targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c
View file @
1b989ed2
...
...
@@ -214,7 +214,7 @@ int openair_device_ioctl(struct inode *inode,struct file *filp, unsigned int cmd
case
openair_GET_BIGSHMTOPS_KVIRT
:
//printk("[openair][IOCTL] : openair_GET_BIGSHMTOPS_KVIRT (0x%p)[0] = %p[0] (bigshm_head) for 0..3 (sizeof %d) \n", (void *)arg, bigshm_head[0], sizeof(bigshm_head));
//printk("[openair][IOCTL] : openair_GET_BIGSHMTOPS_KVIRT (0x%p)[0] = %p[0] (bigshm_head) for 0..3 (sizeof %d) \n", (void *)arg, bigshm_head[0], sizeof(bigshm_head));
copy_to_user
((
void
*
)
arg
,
bigshm_head
,
sizeof
(
bigshm_head
));
break
;
...
...
@@ -222,7 +222,7 @@ int openair_device_ioctl(struct inode *inode,struct file *filp, unsigned int cmd
case
openair_GET_PCI_INTERFACE_BOTS_KVIRT
:
//printk("[openair][IOCTL] : openair_GET_PCI_INTERFACE_BOTS_KVIRT: copying exmimo_pci_kvirt(@%8p) to %lx (sizeof %d)\n", &exmimo_pci_kvirt[0], arg, sizeof(exmimo_pci_kvirt));
//printk("[openair][IOCTL] : openair_GET_PCI_INTERFACE_BOTS_KVIRT: copying exmimo_pci_kvirt(@%8p) to %lx (sizeof %d)\n", &exmimo_pci_kvirt[0], arg, sizeof(exmimo_pci_kvirt));
copy_to_user
((
void
*
)
arg
,
exmimo_pci_kvirt
,
sizeof
(
exmimo_pci_kvirt
));
break
;
...
...
targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
View file @
1b989ed2
...
...
@@ -13,6 +13,7 @@
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include "openair0_lib.h"
#include "openair_device.h"
...
...
@@ -28,6 +29,13 @@ int openair0_num_detected_cards = 0;
unsigned
int
PAGE_SHIFT
;
static
uint32_t
rf_local
[
4
]
=
{
8255000
,
8255000
,
8255000
,
8255000
};
// UE zepto
//{8254617, 8254617, 8254617, 8254617}; //eNB khalifa
//{8255067,8254810,8257340,8257340}; // eNB PETRONAS
static
uint32_t
rf_vcocal
[
4
]
=
{
910
,
910
,
910
,
910
};
static
uint32_t
rf_vcocal_850
[
4
]
=
{
2015
,
2015
,
2015
,
2015
};
static
uint32_t
rf_rxdc
[
4
]
=
{
32896
,
32896
,
32896
,
32896
};
unsigned
int
log2_int
(
unsigned
int
x
)
{
...
...
@@ -39,20 +47,23 @@ unsigned int log2_int( unsigned int x )
int
openair0_open
(
void
)
{
exmimo_pci_interface_bot_virtual_t
exmimo_pci_kvirt
[
MAX_CARDS
];
unsigned
int
bigshm_top_kvirtptr
[
MAX_CARDS
];
void
*
bigshm_top_kvirtptr
[
MAX_CARDS
];
int
card
;
int
ant
;
int
openair0_num_antennas
[
4
];
PAGE_SHIFT
=
log2_int
(
sysconf
(
_SC_PAGESIZE
)
);
if
((
openair0_fd
=
open
(
"/dev/openair0"
,
O_RDWR
,
0
))
<
0
)
{
return
-
1
;
}
ioctl
(
openair0_fd
,
openair_GET_NUM_DETECTED_CARDS
,
&
openair0_num_detected_cards
);
if
(
openair0_num_detected_cards
==
0
)
{
...
...
@@ -63,8 +74,10 @@ int openair0_open(void)
ioctl
(
openair0_fd
,
openair_GET_BIGSHMTOPS_KVIRT
,
&
bigshm_top_kvirtptr
[
0
]);
ioctl
(
openair0_fd
,
openair_GET_PCI_INTERFACE_BOTS_KVIRT
,
&
exmimo_pci_kvirt
[
0
]);
//printf("bigshm_top_kvirtptr: %08x %08x %08x %08x\n", bigshm_top_kvirtptr[0], bigshm_top_kvirtptr[1], bigshm_top_kvirtptr[2], bigshm_top_kvirtptr[3]);
printf
(
"bigshm_top_kvirtptr (MAX_CARDS %d): %p %p %p %p
\n
"
,
MAX_CARDS
,
bigshm_top_kvirtptr
[
0
],
bigshm_top_kvirtptr
[
1
],
bigshm_top_kvirtptr
[
2
],
bigshm_top_kvirtptr
[
3
]);
for
(
card
=
0
;
card
<
openair0_num_detected_cards
;
card
++
)
{
bigshm_top
[
card
]
=
(
char
*
)
mmap
(
NULL
,
...
...
@@ -80,22 +93,30 @@ int openair0_open(void)
}
// calculate userspace addresses
openair0_exmimo_pci
[
card
].
firmware_block_ptr
=
(
char
*
)
(
bigshm_top
[
card
]
+
(
unsigned
int
)
exmimo_pci_kvirt
[
0
].
firmware_block_ptr
-
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
printk_buffer_ptr
=
(
char
*
)
(
bigshm_top
[
card
]
+
(
unsigned
int
)
exmimo_pci_kvirt
[
0
].
printk_buffer_ptr
-
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
exmimo_config_ptr
=
(
exmimo_config_t
*
)
(
bigshm_top
[
card
]
+
(
unsigned
int
)
exmimo_pci_kvirt
[
0
].
exmimo_config_ptr
-
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
exmimo_id_ptr
=
(
exmimo_id_t
*
)
(
bigshm_top
[
card
]
+
(
unsigned
int
)
exmimo_pci_kvirt
[
0
].
exmimo_id_ptr
-
bigshm_top_kvirtptr
[
0
]);
//printf("openair0_exmimo_pci.firmware_block_ptr (%p) = bigshm_top(%p) + exmimo_pci_kvirt.firmware_block_ptr(%p) - bigshm_top_kvirtptr(%x)\n",
// openair0_exmimo_pci[card].firmware_block_ptr, bigshm_top, exmimo_pci_kvirt[card].firmware_block_ptr, bigshm_top_kvirtptr[card]);
//printf("card%d, openair0_exmimo_pci.exmimo_id_ptr (%p) = bigshm_top(%p) + exmimo_pci_kvirt.exmimo_id_ptr (%p) - bigshm_top_kvirtptr(%x)\n",
// card, openair0_exmimo_pci[card].exmimo_id_ptr, bigshm_top[card], exmimo_pci_kvirt[card].exmimo_id_ptr, bigshm_top_kvirtptr[card]);
#if __x86_64
openair0_exmimo_pci
[
card
].
firmware_block_ptr
=
(
bigshm_top
[
card
]
+
(
int64_t
)
exmimo_pci_kvirt
[
0
].
firmware_block_ptr
-
(
int64_t
)
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
printk_buffer_ptr
=
(
bigshm_top
[
card
]
+
(
int64_t
)
exmimo_pci_kvirt
[
0
].
printk_buffer_ptr
-
(
int64_t
)
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
exmimo_config_ptr
=
(
exmimo_config_t
*
)
(
bigshm_top
[
card
]
+
(
int64_t
)
exmimo_pci_kvirt
[
0
].
exmimo_config_ptr
-
(
int64_t
)
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
exmimo_id_ptr
=
(
exmimo_id_t
*
)
(
bigshm_top
[
card
]
+
(
int64_t
)
exmimo_pci_kvirt
[
0
].
exmimo_id_ptr
-
(
int64_t
)
bigshm_top_kvirtptr
[
0
]);
#else
openair0_exmimo_pci
[
card
].
firmware_block_ptr
=
(
bigshm_top
[
card
]
+
(
int32_t
)
exmimo_pci_kvirt
[
0
].
firmware_block_ptr
-
(
int32_t
)
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
printk_buffer_ptr
=
(
bigshm_top
[
card
]
+
(
int32_t
)
exmimo_pci_kvirt
[
0
].
printk_buffer_ptr
-
(
int32_t
)
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
exmimo_config_ptr
=
(
exmimo_config_t
*
)
(
bigshm_top
[
card
]
+
(
int32_t
)
exmimo_pci_kvirt
[
0
].
exmimo_config_ptr
-
(
int32_t
)
bigshm_top_kvirtptr
[
0
]);
openair0_exmimo_pci
[
card
].
exmimo_id_ptr
=
(
exmimo_id_t
*
)
(
bigshm_top
[
card
]
+
(
int32_t
)
exmimo_pci_kvirt
[
0
].
exmimo_id_ptr
-
(
int32_t
)
bigshm_top_kvirtptr
[
0
]);
#endif
printf
(
"openair0_exmimo_pci.firmware_block_ptr (%p) = bigshm_top(%p) + exmimo_pci_kvirt.firmware_block_ptr(%p) - bigshm_top_kvirtptr(%p)
\n
"
,
openair0_exmimo_pci
[
card
].
firmware_block_ptr
,
bigshm_top
,
exmimo_pci_kvirt
[
card
].
firmware_block_ptr
,
bigshm_top_kvirtptr
[
card
]);
printf
(
"card%d, openair0_exmimo_pci.exmimo_id_ptr (%p) = bigshm_top(%p) + exmimo_pci_kvirt.exmimo_id_ptr (%p) - bigshm_top_kvirtptr(%p)
\n
"
,
card
,
openair0_exmimo_pci
[
card
].
exmimo_id_ptr
,
bigshm_top
[
card
],
exmimo_pci_kvirt
[
card
].
exmimo_id_ptr
,
bigshm_top_kvirtptr
[
card
]);
//if (openair0_exmimo_pci[card].exmimo_id_ptr->board_swrev != BOARD_SWREV_CNTL2)
// {
// error("Software revision %d and firmware revision %d do not match, Please update either Software or Firmware",BOARD_SWREV_CNTL2,openair0_exmimo_pci[card].exmimo_id_ptr->board_swrev);
// return -5;
// }
if
(
openair0_exmimo_pci
[
card
].
exmimo_id_ptr
->
board_exmimoversion
==
1
)
openair0_num_antennas
[
card
]
=
2
;
...
...
@@ -105,8 +126,13 @@ int openair0_open(void)
for
(
ant
=
0
;
ant
<
openair0_num_antennas
[
card
];
ant
++
)
{
openair0_exmimo_pci
[
card
].
rxcnt_ptr
[
ant
]
=
(
unsigned
int
*
)
(
bigshm_top
[
card
]
+
(
unsigned
int
)
exmimo_pci_kvirt
[
card
].
rxcnt_ptr
[
ant
]
-
bigshm_top_kvirtptr
[
card
]);
openair0_exmimo_pci
[
card
].
txcnt_ptr
[
ant
]
=
(
unsigned
int
*
)
(
bigshm_top
[
card
]
+
(
unsigned
int
)
exmimo_pci_kvirt
[
card
].
txcnt_ptr
[
ant
]
-
bigshm_top_kvirtptr
[
card
]);
#if __x86_64__
openair0_exmimo_pci
[
card
].
rxcnt_ptr
[
ant
]
=
(
unsigned
int
*
)
(
bigshm_top
[
card
]
+
(
int64_t
)
exmimo_pci_kvirt
[
card
].
rxcnt_ptr
[
ant
]
-
(
int64_t
)
bigshm_top_kvirtptr
[
card
]);
openair0_exmimo_pci
[
card
].
txcnt_ptr
[
ant
]
=
(
unsigned
int
*
)
(
bigshm_top
[
card
]
+
(
int64_t
)
exmimo_pci_kvirt
[
card
].
txcnt_ptr
[
ant
]
-
(
int64_t
)
bigshm_top_kvirtptr
[
card
]);
#else
openair0_exmimo_pci
[
card
].
rxcnt_ptr
[
ant
]
=
(
unsigned
int
*
)
(
bigshm_top
[
card
]
+
(
int32_t
)
exmimo_pci_kvirt
[
card
].
rxcnt_ptr
[
ant
]
-
(
int32_t
)
bigshm_top_kvirtptr
[
card
]);
openair0_exmimo_pci
[
card
].
txcnt_ptr
[
ant
]
=
(
unsigned
int
*
)
(
bigshm_top
[
card
]
+
(
int32_t
)
exmimo_pci_kvirt
[
card
].
txcnt_ptr
[
ant
]
-
(
int32_t
)
bigshm_top_kvirtptr
[
card
]);
#endif
}
for
(
ant
=
0
;
ant
<
openair0_num_antennas
[
card
];
ant
++
)
...
...
@@ -201,7 +227,11 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
int
ret
;
int
ant
;
ret
=
openair0_open
();
if
(
ret
!=
0
)
{
if
(
ret
==
-
1
)
printf
(
"Error opening /dev/openair0"
);
...
...
@@ -225,6 +255,8 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
exit
(
-
1
);
}
if
(
p_exmimo_id
->
board_swrev
>=
9
)
p_exmimo_config
->
framing
.
eNB_flag
=
0
;
else
...
...
@@ -238,6 +270,10 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
p_exmimo_config
->
framing
.
resampling_factor
=
2
;
#endif
if
(
!
openair0_cfg
)
{
printf
(
"Error, openair0_cfg is null!!
\n
"
);
return
(
-
1
);
}
for
(
ant
=
0
;
ant
<
max
(
openair0_cfg
->
tx_num_channels
,
openair0_cfg
->
rx_num_channels
);
ant
++
)
p_exmimo_config
->
rf
.
rf_mode
[
ant
]
=
RF_MODE_BASE
;
for
(
ant
=
0
;
ant
<
openair0_cfg
->
tx_num_channels
;
ant
++
)
...
...
@@ -264,14 +300,37 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
for
(
ant
=
0
;
ant
<
openair0_cfg
->
rx_num_channels
;
ant
++
)
{
p_exmimo_config
->
rf
.
do_autocal
[
ant
]
=
1
;
p_exmimo_config
->
rf
.
rf_freq_rx
[
ant
]
=
(
unsigned
int
)
openair0_cfg
->
rx_freq
[
ant
];
p_exmimo_config
->
rf
.
tx_gain
[
ant
][
0
]
=
(
unsigned
int
)
openair0_cfg
->
rx_gain
;
p_exmimo_config
->
rf
.
rx_gain
[
ant
][
0
]
=
(
unsigned
int
)
openair0_cfg
->
rx_gain
[
ant
];
printf
(
"openair0 : programming RX antenna %d (freq %d, gain %d)
\n
"
,
ant
,
p_exmimo_config
->
rf
.
rf_freq_rx
[
ant
],
p_exmimo_config
->
rf
.
rx_gain
[
ant
][
0
]);
}
for
(
ant
=
0
;
ant
<
openair0_cfg
->
tx_num_channels
;
ant
++
)
{
p_exmimo_config
->
rf
.
do_autocal
[
ant
]
=
1
;
p_exmimo_config
->
rf
.
rf_freq_tx
[
ant
]
=
(
unsigned
int
)
openair0_cfg
->
tx_freq
[
ant
];
p_exmimo_config
->
rf
.
tx_gain
[
ant
][
0
]
=
(
unsigned
int
)
openair0_cfg
->
tx_gain
;
p_exmimo_config
->
rf
.
tx_gain
[
ant
][
0
]
=
(
unsigned
int
)
openair0_cfg
->
tx_gain
[
ant
];
printf
(
"openair0 : programming TX antenna %d (freq %d, gain %d)
\n
"
,
ant
,
p_exmimo_config
->
rf
.
rf_freq_tx
[
ant
],
p_exmimo_config
->
rf
.
tx_gain
[
ant
][
0
]);
}
p_exmimo_config
->
rf
.
rf_local
[
ant
]
=
rf_local
[
ant
];
p_exmimo_config
->
rf
.
rf_rxdc
[
ant
]
=
rf_rxdc
[
ant
];
for
(
ant
=
0
;
ant
<
4
;
ant
++
)
{
p_exmimo_config
->
rf
.
rf_local
[
ant
]
=
rf_local
[
ant
];
p_exmimo_config
->
rf
.
rf_rxdc
[
ant
]
=
rf_rxdc
[
ant
];
if
((
p_exmimo_config
->
rf
.
rf_freq_tx
[
ant
]
>=
850000000
)
&&
(
p_exmimo_config
->
rf
.
rf_freq_tx
[
ant
]
<=
865000000
))
{
p_exmimo_config
->
rf
.
rf_vcocal
[
ant
]
=
rf_vcocal_850
[
ant
];
p_exmimo_config
->
rf
.
rffe_band_mode
[
ant
]
=
DD_TDD
;
}
else
if
((
p_exmimo_config
->
rf
.
rf_freq_tx
[
ant
]
>=
1900000000
)
&&
(
p_exmimo_config
->
rf
.
rf_freq_tx
[
ant
]
<=
2000000000
))
{
p_exmimo_config
->
rf
.
rf_vcocal
[
ant
]
=
rf_vcocal
[
ant
];
p_exmimo_config
->
rf
.
rffe_band_mode
[
ant
]
=
B19G_TDD
;
}
else
{
p_exmimo_config
->
rf
.
rf_vcocal
[
ant
]
=
rf_vcocal
[
ant
];
p_exmimo_config
->
rf
.
rffe_band_mode
[
ant
]
=
0
;
}
}
return
(
0
);
}
unsigned
int
*
openair0_daq_cnt
()
{
...
...
targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m
View file @
1b989ed2
%fc = 2660000000;
fc
=
1907600000
;
%
fc = 1907600000;
%fc = 859.5e6;
fc
=
[
2051800000
2051800000
1551800000
2000000000
];
rxgain
=
0
;
txgain
=
2
5
;
txgain
=
2
0
;
eNB_flag
=
0
;
card
=
0
;
active_rf
=
[
1
1
1
0
];
...
...
@@ -23,8 +24,8 @@ rf_rxdc = rf_rxdc * active_rf;
rf_vcocal
=
rf_vcocal_19G
*
active_rf
;
%rf_vcocal = rf_vcocal_26G_eNB * chan_sel;
rxgain
=
rxgain
*
active_rf
;
txgain
=
txgain
*
active_rf
;
freq_tx
=
fc
*
active_rf
;
txgain
=
txgain
*
[
2
2
1
1
]
;
freq_tx
=
fc
.
*
active_rf
;
freq_rx
=
freq_tx
;
%freq_rx = freq_tx-120000000*chan_sel;
%freq_tx = freq_rx+1920000;
...
...
@@ -38,17 +39,23 @@ oarf_config_exmimo(card, freq_rx,freq_tx,tdd_config,syncmode,rxgain,txgain,eNB_f
amp
=
pow2
(
14
)
-
1
;
n_bit
=
16
;
s
=
zeros
(
76800
*
4
,
4
);
s
=
zeros
(
76800
,
4
);
select
=
1
;
select
=
0
;
switch
(
select
)
case
0
s
(:,
1
)
=
amp
*
ones
(
1
,
76800
);
s
(:,
2
)
=
amp
*
ones
(
1
,
76800
);
s
(:,
3
)
=
amp
*
OFDM_TX_FRAME
(
512
,
199
,
128
,
120
,
1
)
.'
;
s
(:,
4
)
=
amp
*
ones
(
1
,
76800
);
case
1
s
(:,
1
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
7680
)));
s
(:,
2
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
7680
)));
s
(:,
3
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
7680
)));
s
(:,
4
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
7680
)));
s
(:,
1
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
4
)));
s
(:,
2
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
4
)));
s
(:,
3
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
4
)));
s
(:,
4
)
=
floor
(
amp
*
(
exp
(
1
i
*
2
*
pi
*
(
0
:((
76800
*
4
)
-
1
))/
4
)));
case
2
s
(
38400
+
128
,
1
)
=
80
-
1
j
*
40
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment