Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/axgbe/xgbe-dev.c
Show First 20 Lines • Show All 287 Lines • ▼ Show 20 Lines | xgbe_config_rx_buffer_size(struct xgbe_prv_data *pdata) | ||||
} | } | ||||
} | } | ||||
static void | static void | ||||
xgbe_config_tso_mode(struct xgbe_prv_data *pdata) | xgbe_config_tso_mode(struct xgbe_prv_data *pdata) | ||||
{ | { | ||||
unsigned int i; | unsigned int i; | ||||
int tso_enabled = (if_getcapenable(pdata->netdev) & IFCAP_TSO); | |||||
for (i = 0; i < pdata->channel_count; i++) { | for (i = 0; i < pdata->channel_count; i++) { | ||||
if (!pdata->channel[i]->tx_ring) | if (!pdata->channel[i]->tx_ring) | ||||
break; | break; | ||||
axgbe_printf(0, "Enabling TSO in channel %d\n", i); | axgbe_printf(1, "TSO in channel %d %s\n", i, tso_enabled ? "enabled" : "disabled"); | ||||
XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_TCR, TSE, 1); | XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_TCR, TSE, tso_enabled ? 1 : 0); | ||||
} | } | ||||
} | } | ||||
static void | static void | ||||
xgbe_config_sph_mode(struct xgbe_prv_data *pdata) | xgbe_config_sph_mode(struct xgbe_prv_data *pdata) | ||||
{ | { | ||||
unsigned int i; | unsigned int i; | ||||
int sph_enable_flag = XGMAC_IOREAD_BITS(pdata, MAC_HWF1R, SPHEN); | |||||
axgbe_printf(1, "sph_enable %d sph feature enabled?: %d\n", | |||||
pdata->sph_enable, sph_enable_flag); | |||||
if (pdata->sph_enable && sph_enable_flag) | |||||
axgbe_printf(0, "SPH Enabled\n"); | |||||
for (i = 0; i < pdata->channel_count; i++) { | for (i = 0; i < pdata->channel_count; i++) { | ||||
if (!pdata->channel[i]->rx_ring) | if (!pdata->channel[i]->rx_ring) | ||||
break; | break; | ||||
if (pdata->sph_enable && sph_enable_flag) { | |||||
/* Enable split header feature */ | |||||
XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_CR, SPH, 1); | XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_CR, SPH, 1); | ||||
} else { | |||||
/* Disable split header feature */ | |||||
XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_CR, SPH, 0); | |||||
} | } | ||||
/* per-channel confirmation of SPH being disabled/enabled */ | |||||
int val = XGMAC_DMA_IOREAD_BITS(pdata->channel[i], DMA_CH_CR, SPH); | |||||
axgbe_printf(0, "%s: SPH %s in channel %d\n", __func__, | |||||
(val ? "enabled" : "disabled"), i); | |||||
} | |||||
if (pdata->sph_enable && sph_enable_flag) | |||||
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, HDSMS, XGBE_SPH_HDSMS_SIZE); | XGMAC_IOWRITE_BITS(pdata, MAC_RCR, HDSMS, XGBE_SPH_HDSMS_SIZE); | ||||
} | } | ||||
static int | static int | ||||
xgbe_write_rss_reg(struct xgbe_prv_data *pdata, unsigned int type, | xgbe_write_rss_reg(struct xgbe_prv_data *pdata, unsigned int type, | ||||
unsigned int index, unsigned int val) | unsigned int index, unsigned int val) | ||||
{ | { | ||||
unsigned int wait; | unsigned int wait; | ||||
int ret = 0; | int ret = 0; | ||||
▲ Show 20 Lines • Show All 622 Lines • ▼ Show 20 Lines | xgbe_set_mac_address(struct xgbe_prv_data *pdata, uint8_t *addr) | ||||
return (0); | return (0); | ||||
} | } | ||||
static int | static int | ||||
xgbe_config_rx_mode(struct xgbe_prv_data *pdata) | xgbe_config_rx_mode(struct xgbe_prv_data *pdata) | ||||
{ | { | ||||
unsigned int pr_mode, am_mode; | unsigned int pr_mode, am_mode; | ||||
pr_mode = ((pdata->netdev->if_drv_flags & IFF_PPROMISC) != 0); | pr_mode = ((pdata->netdev->if_flags & IFF_PPROMISC) != 0); | ||||
am_mode = ((pdata->netdev->if_drv_flags & IFF_ALLMULTI) != 0); | am_mode = ((pdata->netdev->if_flags & IFF_ALLMULTI) != 0); | ||||
xgbe_set_promiscuous_mode(pdata, pr_mode); | xgbe_set_promiscuous_mode(pdata, pr_mode); | ||||
xgbe_set_all_multicast_mode(pdata, am_mode); | xgbe_set_all_multicast_mode(pdata, am_mode); | ||||
xgbe_add_mac_addresses(pdata); | xgbe_add_mac_addresses(pdata); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 381 Lines • ▼ Show 20 Lines | xgbe_dev_read(struct xgbe_channel *channel) | ||||
/* Check for data availability */ | /* Check for data availability */ | ||||
if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN)) | if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN)) | ||||
return (1); | return (1); | ||||
rmb(); | rmb(); | ||||
if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, CTXT)) { | if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, CTXT)) { | ||||
/* TODO - Timestamp Context Descriptor */ | /* TODO - Timestamp Context Descriptor */ | ||||
XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES, | XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES, | ||||
CONTEXT, 1); | CONTEXT, 1); | ||||
XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES, | XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES, | ||||
CONTEXT_NEXT, 0); | CONTEXT_NEXT, 0); | ||||
return (0); | return (0); | ||||
} | } | ||||
/* Normal Descriptor, be sure Context Descriptor bit is off */ | /* Normal Descriptor, be sure Context Descriptor bit is off */ | ||||
▲ Show 20 Lines • Show All 1,482 Lines • Show Last 20 Lines |