GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright (c) LOTUS. All rights reserved.
|
||||
*/
|
||||
|
||||
|
||||
#define BSPETH_FEMAC
|
||||
|
||||
#include "bspeth.h"
|
||||
#include "mac.h"
|
||||
|
||||
static u32 _set_linkstat(struct bspeth_netdev_local *ld, u32 mode)
|
||||
{
|
||||
u32 old;
|
||||
|
||||
old = bspeth_readl_bits(ld, ud_reg_name(MAC_PORTSET), BITS_MACSTAT);
|
||||
bspeth_writel_bits(ld, mode, ud_reg_name(MAC_PORTSET), BITS_MACSTAT);
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
static u32 _set_negmode(struct bspeth_netdev_local *ld, u32 mode)
|
||||
{
|
||||
u32 old;
|
||||
|
||||
old = bspeth_readl_bits(ld, ud_reg_name(MAC_PORTSEL), BITS_NEGMODE);
|
||||
bspeth_writel_bits(ld, mode, ud_reg_name(MAC_PORTSEL), BITS_NEGMODE);
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
static u32 _get_negmode(struct bspeth_netdev_local *ld)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = bspeth_readl_bits(ld, ud_reg_name(MAC_PORTSEL), BITS_NEGMODE);
|
||||
return val;
|
||||
}
|
||||
|
||||
void bspeth_set_linkstat(struct bspeth_netdev_local *ld, u32 mode)
|
||||
{
|
||||
local_lock(ld);
|
||||
(void)_set_linkstat(ld, mode);
|
||||
local_unlock(ld);
|
||||
}
|
||||
|
||||
u32 bspeth_get_linkstat(struct bspeth_netdev_local *ld)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
local_lock(ld);
|
||||
val = bspeth_readl_bits(ld, ud_reg_name(MAC_RO_STAT), BITS_MACSTAT);
|
||||
local_unlock(ld);
|
||||
return val;
|
||||
}
|
||||
|
||||
void bspeth_set_mac_leadcode_cnt_limit(struct bspeth_netdev_local *ld, u32 cnt)
|
||||
{
|
||||
local_lock(ld);
|
||||
(void)bspeth_readl_bits(ld, ud_reg_name(MAC_TX_IPGCTRL),
|
||||
BITS_PRE_CNT_LIMIT);
|
||||
bspeth_writel_bits(ld, cnt, ud_reg_name(MAC_TX_IPGCTRL),
|
||||
BITS_PRE_CNT_LIMIT);
|
||||
local_unlock(ld);
|
||||
}
|
||||
|
||||
void bspeth_set_mac_trans_interval_bits(struct bspeth_netdev_local *ld, u32 nbits)
|
||||
{
|
||||
u32 linkstat, negmode;
|
||||
|
||||
local_lock(ld);
|
||||
|
||||
negmode = _set_negmode(ld, BSPETH_NEGMODE_CPUSET);
|
||||
linkstat = _set_linkstat(ld, 0);
|
||||
mdelay(1);
|
||||
|
||||
(void)bspeth_readl_bits(ld, ud_reg_name(MAC_TX_IPGCTRL), BITS_IPG);
|
||||
bspeth_writel_bits(ld, nbits, ud_reg_name(MAC_TX_IPGCTRL), BITS_IPG);
|
||||
udelay(100); /* delay 100us */
|
||||
|
||||
_set_negmode(ld, negmode);
|
||||
_set_linkstat(ld, linkstat);
|
||||
|
||||
local_unlock(ld);
|
||||
}
|
||||
|
||||
void bspeth_set_mac_fc_interval(struct bspeth_netdev_local *ld, u32 para)
|
||||
{
|
||||
local_lock(ld);
|
||||
(void)bspeth_readl_bits(ld, ud_reg_name(MAC_TX_IPGCTRL), BITS_FC_INTER);
|
||||
bspeth_writel_bits(ld, para, ud_reg_name(MAC_TX_IPGCTRL), BITS_FC_INTER);
|
||||
local_unlock(ld);
|
||||
}
|
||||
|
||||
void bspeth_set_negmode(struct bspeth_netdev_local *ld, u32 mode)
|
||||
{
|
||||
local_lock(ld);
|
||||
_set_negmode(ld, mode);
|
||||
local_unlock(ld);
|
||||
}
|
||||
|
||||
u32 bspeth_get_negmode(struct bspeth_netdev_local *ld)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
local_lock(ld);
|
||||
val = _get_negmode(ld);
|
||||
local_unlock(ld);
|
||||
return val;
|
||||
}
|
||||
|
||||
void bspeth_set_mii_mode(struct bspeth_netdev_local *ld, u32 mode)
|
||||
{
|
||||
local_lock(ld);
|
||||
(void)bspeth_readl_bits(ld, ud_reg_name(MAC_PORTSEL), BITS_MII_MODE);
|
||||
bspeth_writel_bits(ld, mode, ud_reg_name(MAC_PORTSEL), BITS_MII_MODE);
|
||||
local_unlock(ld);
|
||||
}
|
||||
Reference in New Issue
Block a user