#include "qede.h"
qede_link_props_t qede_def_link_props =
{
GLDM_FIBER,
B_TRUE,
B_TRUE,
B_TRUE,
B_TRUE,
B_TRUE,
B_TRUE,
B_TRUE,
B_TRUE,
B_FALSE
};
static void
qede_cfg_get_val(qede_t *qede,
char * pName,
void * pVal,
int defaultVal,
boolean_t boolVal)
{
int val;
#define QEDE_CFG_NAME_LEN_MAX 128
char name[QEDE_CFG_NAME_LEN_MAX];
snprintf(name, QEDE_CFG_NAME_LEN_MAX, "default_%s", pName);
val = ddi_prop_get_int(DDI_DEV_T_ANY,
qede->dip,
(DDI_PROP_NOTPROM | DDI_PROP_DONTPASS),
name,
defaultVal);
snprintf(name, QEDE_CFG_NAME_LEN_MAX, "qede%d_%s", qede->instance,
pName);
val = ddi_prop_get_int(DDI_DEV_T_ANY,
qede->dip,
(DDI_PROP_NOTPROM | DDI_PROP_DONTPASS),
name,
val);
if (boolVal) {
*((boolean_t *)pVal) = (val) ? B_TRUE : B_FALSE;
} else {
*((int *)pVal) = val;
}
}
void
qede_cfg_init(qede_t *qede)
{
int option;
qede->checksum = DEFAULT_CKSUM_OFFLOAD;
qede->enabled_offloads = QEDE_OFFLOAD_NONE;
qede->mtu = DEFAULT_MTU;
qede->num_fp = DEFAULT_FASTPATH_COUNT;
qede->rx_ring_size = DEFAULT_RX_RING_SIZE;
qede->tx_ring_size = DEFAULT_TX_RING_SIZE;
qede->tx_recycle_threshold = DEFAULT_TX_RECYCLE_THRESHOLD;
qede->rx_copy_threshold = DEFAULT_RX_COPY_THRESHOLD;
qede->tx_bcopy_threshold = DEFAULT_TX_COPY_THRESHOLD;
qede->lso_enable = B_TRUE;
qede->lro_enable = B_TRUE;
qede->log_enable = B_TRUE;
qede->ecore_debug_level = DEFAULT_ECORE_DEBUG_LEVEL;
qede->ecore_debug_module = DEFAULT_ECORE_DEBUG_MODULE;
qede_cfg_get_val(qede, "checksum",
&qede->checksum,
qede->checksum,
B_FALSE);
switch(qede->checksum) {
case USER_OPTION_CKSUM_L3:
case USER_OPTION_CKSUM_L3_L4:
qede->checksum = DEFAULT_CKSUM_OFFLOAD;
break;
}
qede_cfg_get_val(qede, "mtu", &option,
qede->mtu,
B_FALSE);
if (option != DEFAULT_JUMBO_MTU &&
option != DEFAULT_MTU) {
qede->mtu = DEFAULT_MTU;
qede->jumbo_enable = B_FALSE;
} else {
if (qede->mtu != option) {
qede->mtu = option;
}
if (option == DEFAULT_JUMBO_MTU) {
qede->jumbo_enable = B_TRUE;
}
}
qede_cfg_get_val(qede, "num_fp", &option,
qede->num_fp,
B_FALSE);
qede->num_fp = (option < MIN_FASTPATH_COUNT) ?
MIN_FASTPATH_COUNT :
(option > MAX_FASTPATH_COUNT) ?
MAX_FASTPATH_COUNT :
option;
qede_cfg_get_val(qede, "rx_ring_size", &option,
qede->rx_ring_size,
B_FALSE);
qede->rx_ring_size = (option < MIN_RX_RING_SIZE) ?
MIN_RX_RING_SIZE :
(option > MAX_RX_RING_SIZE) ?
MAX_RX_RING_SIZE :
option;
qede_cfg_get_val(qede, "tx_ring_size", &option,
qede->tx_ring_size,
B_FALSE);
qede->tx_ring_size = (option < MIN_TX_RING_SIZE) ?
MIN_TX_RING_SIZE :
(option > MAX_TX_RING_SIZE) ?
MAX_TX_RING_SIZE :
option;
qede_cfg_get_val(qede, "rx_copy_threshold", &option,
qede->rx_copy_threshold,
B_FALSE);
qede_cfg_get_val(qede, "tx_copy_threshold", &option,
qede->tx_bcopy_threshold,
B_FALSE);
qede_cfg_get_val(qede, "tx_recycle_threshold", &option,
qede->tx_bcopy_threshold,
B_FALSE);
qede->tx_recycle_threshold =
(option < 0) ? 0:
(option > qede->tx_ring_size) ?
qede->tx_ring_size : option;
qede_cfg_get_val(qede, "lso_enable", &option,
qede->lso_enable,
B_TRUE);
qede->lso_enable = option;
qede_cfg_get_val(qede, "lro_enable", &option,
qede->lro_enable,
B_TRUE);
qede->lro_enable = option;
if(qede->checksum != DEFAULT_CKSUM_OFFLOAD) {
qede->lso_enable = B_FALSE;
qede->lro_enable = B_FALSE;
}
qede_cfg_get_val(qede, "log_enable", &option,
qede->log_enable,
B_TRUE);
qede_cfg_get_val(qede, "debug_level", &option,
qede->ecore_debug_level,
B_FALSE);
qede->ecore_debug_level = (uint32_t)((option < 0) ? 0 : option);
qede_cfg_get_val(qede, "debug_module", &option,
qede->ecore_debug_module,
B_FALSE);
qede->ecore_debug_module = (uint32_t)((option < 0) ? 0 : option);
}
void
qede_cfg_reset(qede_t *qede)
{
qede->params.link_state = 0;
qede->props.link_speed = 0;
qede->props.link_duplex = B_FALSE;
qede->props.tx_pause = B_FALSE;
qede->props.rx_pause = B_FALSE;
qede->props.uptime = 0;
}