diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c')
-rw-r--r-- | drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c | 404 |
1 files changed, 404 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c index 73db24b..ead8c7a 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c @@ -37,6 +37,7 @@ #include "lnxwrp_sysfs_fm.h" #include "../../fman/Peripherals/FM/Port/fm_port.h" +#include "../../fman/Peripherals/FM/Port/fm_port_dsar.h" #if defined(__ERR_MODULE__) #undef __ERR_MODULE__ @@ -276,7 +277,400 @@ static ssize_t show_fm_port_regs(struct device *dev, return n; #endif } +static int fm_port_dsar_dump_mem(void *h_dev, char *buf, int nn) +{ + t_FmPort *p_FmPort; + t_Fm *p_Fm; + uint8_t hardwarePortId; + uint32_t *param_page; + t_ArCommonDesc *ArCommonDescPtr; + uint32_t *mem; + int i, n = nn; + + p_FmPort = (t_FmPort *)h_dev; + hardwarePortId = p_FmPort->hardwarePortId; + p_Fm = (t_Fm *)p_FmPort->h_Fm; + + if (!FM_PORT_IsInDsar(p_FmPort)) + { + FM_DMP_LN(buf, n, "port %u is not a DSAR port\n", + hardwarePortId); + return n; + } + FM_DMP_LN(buf, n, "port %u DSAR mem\n", hardwarePortId); + FM_DMP_LN(buf, n, "========================\n"); + + /* do I need request_mem_region here? */ + param_page = ioremap(p_FmPort->fmMuramPhysBaseAddr + ioread32be(&p_FmPort->p_FmPortBmiRegs->rxPortBmiRegs.fmbm_rgpr), 4); + ArCommonDescPtr = (t_ArCommonDesc*)(ioremap(p_FmPort->fmMuramPhysBaseAddr + ioread32be(param_page), sizeof(t_ArCommonDesc))); /* this should be changed*/ + mem = (uint32_t*)ArCommonDescPtr; + for (i = 0; i < 100; i+=4) + FM_DMP_LN(buf, n, "%08x %08x %08x %08x\n", mem[i], mem[i + 1], mem[i + 2], mem[i + 3]); + iounmap(ArCommonDescPtr); + iounmap(param_page); + return n; +} + +static int fm_port_dsar_dump_regs(void *h_dev, char *buf, int nn) +{ + t_FmPort *p_FmPort; + t_Fm *p_Fm; + uint8_t hardwarePortId; + uint32_t *param_page; + t_ArCommonDesc *ArCommonDescPtr; + int i, n = nn; + p_FmPort = (t_FmPort *)h_dev; + hardwarePortId = p_FmPort->hardwarePortId; + p_Fm = (t_Fm *)p_FmPort->h_Fm; + + if (!FM_PORT_IsInDsar(p_FmPort)) + { + FM_DMP_LN(buf, n, "port %u is not a DSAR port\n", + hardwarePortId); + return n; + } + FM_DMP_LN(buf, n, "port %u DSAR information\n", hardwarePortId); + FM_DMP_LN(buf, n, "========================\n"); + + /* do I need request_mem_region here? */ + param_page = ioremap(p_FmPort->fmMuramPhysBaseAddr + ioread32be(&p_FmPort->p_FmPortBmiRegs->rxPortBmiRegs.fmbm_rgpr), 4); + ArCommonDescPtr = (t_ArCommonDesc*)(ioremap(p_FmPort->fmMuramPhysBaseAddr + ioread32be(param_page), sizeof(t_ArCommonDesc))); /* this should be changed*/ + FM_DMP_LN(buf, n, "Tx port: 0x%x\n", ArCommonDescPtr->arTxPort); + FM_DMP_LN(buf, n, "Active HPNIA: 0x%08x\n", ArCommonDescPtr->activeHPNIA); + FM_DMP_LN(buf, n, "Snmp port: 0x%x\n", ArCommonDescPtr->snmpPort); + FM_DMP_LN(buf, n, "MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n", ArCommonDescPtr->macStationAddr[0], + ArCommonDescPtr->macStationAddr[1], ArCommonDescPtr->macStationAddr[2], + ArCommonDescPtr->macStationAddr[3], ArCommonDescPtr->macStationAddr[4], + ArCommonDescPtr->macStationAddr[5]); + FM_DMP_LN(buf, n, "filterControl: 0x%02x\n", ArCommonDescPtr->filterControl); + FM_DMP_LN(buf, n, "tcpControlPass: 0x%04x\n", ArCommonDescPtr->tcpControlPass); + FM_DMP_LN(buf, n, "ipProtocolTblSize: 0x%x\n", ArCommonDescPtr->ipProtocolTblSize); + FM_DMP_LN(buf, n, "udpPortTblSize: 0x%x\n", ArCommonDescPtr->udpPortTblSize); + FM_DMP_LN(buf, n, "tcpPortTblSize: 0x%x\n", ArCommonDescPtr->tcpPortTblSize); + if (ArCommonDescPtr->p_ArStats) + { + t_ArStatistics *arStatistics = (t_ArStatistics*) + ioremap(ioread32be(&ArCommonDescPtr->p_ArStats) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof (t_ArStatistics)); + FM_DMP_LN(buf, n, "\nDSAR statistics\n"); + FM_DMP_LN(buf, n, "DSAR_Discarded: 0x%x\n", arStatistics->dsarDiscarded); + FM_DMP_LN(buf, n, "DSAR_Err_Discarded: 0x%x\n", arStatistics->dsarErrDiscarded); + FM_DMP_LN(buf, n, "DSAR_Frag_Discarded: 0x%x\n", arStatistics->dsarFragDiscarded); + FM_DMP_LN(buf, n, "DSAR_Tunnel_Discarded: 0x%x\n", arStatistics->dsarTunnelDiscarded); + FM_DMP_LN(buf, n, "DSAR_ARP_Discarded: 0x%x\n", arStatistics->dsarArpDiscarded); + FM_DMP_LN(buf, n, "DSAR_IP_Discarded: 0x%x\n", arStatistics->dsarIpDiscarded); + FM_DMP_LN(buf, n, "DSAR_TCP_Discarded: 0x%x\n", arStatistics->dsarTcpDiscarded); + FM_DMP_LN(buf, n, "DSAR_UDP_Discarded: 0x%x\n", arStatistics->dsarUdpDiscarded); + FM_DMP_LN(buf, n, "DSAR_ICMPv6_Checksum_Err: 0x%x\n", arStatistics->dsarIcmpV6ChecksumErr); + FM_DMP_LN(buf, n, "DSAR_ICMPv6_Other_Type: 0x%x\n", arStatistics->dsarIcmpV6OtherType); + FM_DMP_LN(buf, n, "DSAR_ICMPv4_Other_Type: 0x%x\n", arStatistics->dsarIcmpV4OtherType); + + iounmap(arStatistics); + } + if (ArCommonDescPtr->p_ArpDescriptor) + { + t_DsarArpDescriptor* ArpDescriptor = (t_DsarArpDescriptor*) + ioremap(ioread32be(&ArCommonDescPtr->p_ArpDescriptor) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof (t_DsarArpDescriptor)); + FM_DMP_LN(buf, n, "\nARP\n"); + FM_DMP_LN(buf, n, "===\n"); + FM_DMP_LN(buf, n, "control bits 0x%04x\n", ArpDescriptor->control); + if (ArpDescriptor->numOfBindings) + { + char ip_str[20]; + t_DsarArpBindingEntry* bindings = ioremap( + ioread32be(&ArpDescriptor->p_Bindings) + + p_FmPort->fmMuramPhysBaseAddr, + ArpDescriptor->numOfBindings * + sizeof(t_DsarArpBindingEntry)); + uint8_t* ip_addr = (uint8_t*)&bindings->ipv4Addr; + FM_DMP_LN(buf, n, " ip vlan id\n"); + for (i = 0; i < ArpDescriptor->numOfBindings; i++) + { + n += sprintf(ip_str, "%d:%d:%d:%d", ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]); + FM_DMP_LN(buf, n, "%-15s 0x%x\n", ip_str, bindings->vlanId); + } + iounmap(bindings); + } + if (ArpDescriptor->p_Statistics) + { + t_DsarArpStatistics* arpStats = ioremap( + ioread32be(&ArpDescriptor->p_Statistics) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof(t_DsarArpStatistics)); + FM_DMP_LN(buf, n, "statistics\n"); + FM_DMP_LN(buf, n, "INVAL_CNT: 0x%x\n", arpStats->invalCnt); + FM_DMP_LN(buf, n, "ECHO_CNT: 0x%x\n", arpStats->echoCnt); + FM_DMP_LN(buf, n, "CD_CNT: 0x%x\n", arpStats->cdCnt); + FM_DMP_LN(buf, n, "AR_CNT: 0x%x\n", arpStats->arCnt); + FM_DMP_LN(buf, n, "RATM_CNT: 0x%x\n", arpStats->ratmCnt); + FM_DMP_LN(buf, n, "UKOP_CNT: 0x%x\n", arpStats->ukopCnt); + FM_DMP_LN(buf, n, "NMTP_CNT: 0x%x\n", arpStats->nmtpCnt); + FM_DMP_LN(buf, n, "NMVLAN_CNT: 0x%x\n", arpStats->nmVlanCnt); + iounmap(arpStats); + } + + iounmap(ArpDescriptor); + } + if (ArCommonDescPtr->p_IcmpV4Descriptor) + { + t_DsarIcmpV4Descriptor* ICMPV4Descriptor = + (t_DsarIcmpV4Descriptor*)ioremap(ioread32be( + &ArCommonDescPtr->p_IcmpV4Descriptor) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof (t_DsarIcmpV4Descriptor)); + FM_DMP_LN(buf, n, "\nEcho ICMPv4\n"); + FM_DMP_LN(buf, n, "===========\n"); + FM_DMP_LN(buf, n, "control bits 0x%04x\n", ICMPV4Descriptor->control); + if (ICMPV4Descriptor->numOfBindings) + { + char ip_str[20]; + t_DsarArpBindingEntry* bindings = ioremap( + ioread32be(&ICMPV4Descriptor->p_Bindings) + + p_FmPort->fmMuramPhysBaseAddr, + ICMPV4Descriptor->numOfBindings * + sizeof(t_DsarArpBindingEntry)); + uint8_t* ip_addr = (uint8_t*)&bindings->ipv4Addr; + FM_DMP_LN(buf, n, " ip vlan id\n"); + for (i = 0; i < ICMPV4Descriptor->numOfBindings; i++) + { + n += sprintf(ip_str, "%d:%d:%d:%d", ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]); + FM_DMP_LN(buf, n, "%-15s 0x%x\n", ip_str, bindings->vlanId); + } + iounmap(bindings); + } + if (ICMPV4Descriptor->p_Statistics) + { + t_DsarIcmpV4Statistics* icmpv4Stats = ioremap( + ioread32be(&ICMPV4Descriptor->p_Statistics) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof(t_DsarIcmpV4Statistics)); + FM_DMP_LN(buf, n, "statistics\n"); + FM_DMP_LN(buf, n, "INVAL_CNT: 0x%x\n", icmpv4Stats->invalCnt); + FM_DMP_LN(buf, n, "NMVLAN_CNT: 0x%x\n", icmpv4Stats->nmVlanCnt); + FM_DMP_LN(buf, n, "NMIP_CNT: 0x%x\n", icmpv4Stats->nmIpCnt); + FM_DMP_LN(buf, n, "AR_CNT: 0x%x\n", icmpv4Stats->arCnt); + FM_DMP_LN(buf, n, "CSERR_CNT: 0x%x\n", icmpv4Stats->cserrCnt); + iounmap(icmpv4Stats); + } + iounmap(ICMPV4Descriptor); + } + if (ArCommonDescPtr->p_NdDescriptor) + { + t_DsarNdDescriptor *NDDescriptor = + (t_DsarNdDescriptor*)ioremap(ioread32be( + &ArCommonDescPtr->p_NdDescriptor) + p_FmPort-> + fmMuramPhysBaseAddr, sizeof (t_DsarNdDescriptor)); + FM_DMP_LN(buf, n, "\nNDP\n"); + FM_DMP_LN(buf, n, "===\n"); + FM_DMP_LN(buf, n, "control bits 0x%04x\n", NDDescriptor->control); + FM_DMP_LN(buf, n, "solicited address 0x%08x\n", NDDescriptor->solicitedAddr); + if (NDDescriptor->numOfBindings) + { + char ip_str[20]; + t_DsarIcmpV6BindingEntry* bindings = ioremap( + ioread32be(&NDDescriptor->p_Bindings) + + p_FmPort->fmMuramPhysBaseAddr, + NDDescriptor->numOfBindings * + sizeof(t_DsarIcmpV6BindingEntry)); + uint16_t* ip_addr = (uint16_t*)&bindings->ipv6Addr; + FM_DMP_LN(buf, n, " ip vlan id\n"); + for (i = 0; i < NDDescriptor->numOfBindings; i++) + { + n += sprintf(ip_str, "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x", + ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3], + ip_addr[4], ip_addr[5], ip_addr[6], ip_addr[7]); + FM_DMP_LN(buf, n, "%s 0x%x\n", ip_str, bindings->vlanId); + } + iounmap(bindings); + } + if (NDDescriptor->p_Statistics) + { + t_NdStatistics* ndStats = ioremap( + ioread32be(&NDDescriptor->p_Statistics) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof(t_NdStatistics)); + FM_DMP_LN(buf, n, "statistics\n"); + FM_DMP_LN(buf, n, "INVAL_CNT: 0x%x\n", ndStats->invalCnt); + FM_DMP_LN(buf, n, "NMVLAN_CNT: 0x%x\n", ndStats->nmVlanCnt); + FM_DMP_LN(buf, n, "NMIP_CNT: 0x%x\n", ndStats->nmIpCnt); + FM_DMP_LN(buf, n, "AR_CNT: 0x%x\n", ndStats->arCnt); + FM_DMP_LN(buf, n, "USADVERT_CNT: 0x%x\n", ndStats->usadvertCnt); + FM_DMP_LN(buf, n, "NMMCAST_CNT: 0x%x\n", ndStats->nmmcastCnt); + FM_DMP_LN(buf, n, "NSLLA_CNT: 0x%x\n", ndStats->nsllaCnt); + iounmap(ndStats); + } + iounmap(NDDescriptor); + } + if (ArCommonDescPtr->p_IcmpV6Descriptor) + { + t_DsarIcmpV6Descriptor *ICMPV6Descriptor = + (t_DsarIcmpV6Descriptor*)ioremap(ioread32be( + &ArCommonDescPtr->p_IcmpV6Descriptor) + p_FmPort-> + fmMuramPhysBaseAddr, sizeof (t_DsarIcmpV6Descriptor)); + FM_DMP_LN(buf, n, "\nEcho ICMPv6\n"); + FM_DMP_LN(buf, n, "===========\n"); + FM_DMP_LN(buf, n, "control bits 0x%04x\n", ICMPV6Descriptor->control); + if (ICMPV6Descriptor->numOfBindings) + { + char ip_str[20]; + t_DsarIcmpV6BindingEntry* bindings = ioremap( + ioread32be(&ICMPV6Descriptor->p_Bindings) + + p_FmPort->fmMuramPhysBaseAddr, + ICMPV6Descriptor->numOfBindings * + sizeof(t_DsarIcmpV6BindingEntry)); + uint16_t* ip_addr = (uint16_t*)&bindings->ipv6Addr; + FM_DMP_LN(buf, n, " ip vlan id\n"); + for (i = 0; i < ICMPV6Descriptor->numOfBindings; i++) + { + n += sprintf(ip_str, "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x", + ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3], + ip_addr[4], ip_addr[5], ip_addr[6], ip_addr[7]); + FM_DMP_LN(buf, n, "%s 0x%x\n", ip_str, bindings->vlanId); + } + iounmap(bindings); + } + if (ICMPV6Descriptor->p_Statistics) + { + t_DsarIcmpV6Statistics* icmpv6Stats = ioremap( + ioread32be(&ICMPV6Descriptor->p_Statistics) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof(t_DsarIcmpV6Statistics)); + FM_DMP_LN(buf, n, "statistics\n"); + FM_DMP_LN(buf, n, "INVAL_CNT: 0x%x\n", icmpv6Stats->invalCnt); + FM_DMP_LN(buf, n, "NMVLAN_CNT: 0x%x\n", icmpv6Stats->nmVlanCnt); + FM_DMP_LN(buf, n, "NMIP_CNT: 0x%x\n", icmpv6Stats->nmIpCnt); + FM_DMP_LN(buf, n, "AR_CNT: 0x%x\n", icmpv6Stats->arCnt); + iounmap(icmpv6Stats); + } + iounmap(ICMPV6Descriptor); + } + if (ArCommonDescPtr->p_SnmpDescriptor) + { + t_DsarSnmpDescriptor *SnmpDescriptor = + (t_DsarSnmpDescriptor*)ioremap(ioread32be( + &ArCommonDescPtr->p_SnmpDescriptor) + p_FmPort-> + fmMuramPhysBaseAddr, sizeof (t_DsarSnmpDescriptor)); + FM_DMP_LN(buf, n, "\nSNMP\n"); + FM_DMP_LN(buf, n, "===========\n"); + FM_DMP_LN(buf, n, "control bits 0x%04x\n", SnmpDescriptor->control); + FM_DMP_LN(buf, n, "max message length 0x%04x\n", SnmpDescriptor->maxSnmpMsgLength); + if (SnmpDescriptor->numOfIpv4Addresses) + { + char ip_str[20]; + t_DsarSnmpIpv4AddrTblEntry* addrs = ioremap( + ioread32be(&SnmpDescriptor->p_Ipv4AddrTbl) + + p_FmPort->fmMuramPhysBaseAddr, + SnmpDescriptor->numOfIpv4Addresses * + sizeof(t_DsarSnmpIpv4AddrTblEntry)); + uint8_t* ip_addr = (uint8_t*)&addrs->ipv4Addr; + FM_DMP_LN(buf, n, " ip vlan id\n"); + for (i = 0; i < SnmpDescriptor->numOfIpv4Addresses; i++) + { + n += sprintf(ip_str, "%d:%d:%d:%d", ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]); + FM_DMP_LN(buf, n, "%-15s 0x%x\n", ip_str, addrs->vlanId); + } + iounmap(addrs); + } + if (SnmpDescriptor->p_Statistics) + { + t_DsarSnmpStatistics* snmpStats = ioremap( + ioread32be(&SnmpDescriptor->p_Statistics) + + p_FmPort->fmMuramPhysBaseAddr, + sizeof(t_DsarSnmpStatistics)); + FM_DMP_LN(buf, n, "statistics\n"); + FM_DMP_LN(buf, n, "snmpErrCnt: 0x%x\n", snmpStats->snmpErrCnt); + FM_DMP_LN(buf, n, "snmpCommunityErrCnt: 0x%x\n", snmpStats->snmpCommunityErrCnt); + FM_DMP_LN(buf, n, "snmpTotalDiscardCnt: 0x%x\n", snmpStats->snmpTotalDiscardCnt); + FM_DMP_LN(buf, n, "snmpGetReqCnt: 0x%x\n", snmpStats->snmpGetReqCnt); + FM_DMP_LN(buf, n, "snmpGetNextReqCnt: 0x%x\n", snmpStats->snmpGetNextReqCnt); + iounmap(snmpStats); + } + iounmap(SnmpDescriptor); + } + iounmap(ArCommonDescPtr); + iounmap(param_page); + return n; +} + +static ssize_t show_fm_port_dsar_mem(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned long flags; + unsigned n = 0; +#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = + (t_LnxWrpFmPortDev *) dev_get_drvdata(dev); +#endif + if (attr == NULL || buf == NULL || dev == NULL) + return -EINVAL; + +#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) + local_irq_save(flags); + + if (!p_LnxWrpFmPortDev->h_Dev) { + n = snprintf(buf, PAGE_SIZE, "\tFM Port not configured...\n"); + return n; + } else { + n = snprintf(buf, PAGE_SIZE, + "FM port driver registers dump.\n"); + n = fm_port_dsar_dump_mem(p_LnxWrpFmPortDev->h_Dev, buf, n); + } + + local_irq_restore(flags); + + return n; +#else + + local_irq_save(flags); + n = snprintf(buf, PAGE_SIZE, + "Debug level is too low to dump registers!!!\n"); + local_irq_restore(flags); + + return n; +#endif +} + +static ssize_t show_fm_port_dsar_regs(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned long flags; + unsigned n = 0; +#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = + (t_LnxWrpFmPortDev *) dev_get_drvdata(dev); +#endif + if (attr == NULL || buf == NULL || dev == NULL) + return -EINVAL; + +#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) + local_irq_save(flags); + + if (!p_LnxWrpFmPortDev->h_Dev) { + n = snprintf(buf, PAGE_SIZE, "\tFM Port not configured...\n"); + return n; + } else { + n = snprintf(buf, PAGE_SIZE, + "FM port driver registers dump.\n"); + n = fm_port_dsar_dump_regs(p_LnxWrpFmPortDev->h_Dev, buf, n); + } + + local_irq_restore(flags); + + return n; +#else + + local_irq_save(flags); + n = snprintf(buf, PAGE_SIZE, + "Debug level is too low to dump registers!!!\n"); + local_irq_restore(flags); + + return n; +#endif +} #if (DPAA_VERSION >= 11) static ssize_t show_fm_port_ipv4_options(struct device *dev, @@ -404,6 +798,8 @@ static DEVICE_ATTR(fm_port_bmi_regs, 0x644, show_fm_port_bmi_regs, NULL); #if (DPAA_VERSION >= 11) static DEVICE_ATTR(fm_port_ipv4_opt, 0x644, show_fm_port_ipv4_options, NULL); #endif +static DEVICE_ATTR(fm_port_dsar_regs, 0x644, show_fm_port_dsar_regs, NULL); +static DEVICE_ATTR(fm_port_dsar_mem, 0x644, show_fm_port_dsar_mem, NULL); int fm_port_sysfs_create(struct device *dev) { @@ -423,6 +819,8 @@ int fm_port_sysfs_create(struct device *dev) #if (DPAA_VERSION >= 11) p_LnxWrpFmPortDev->dev_attr_ipv4_opt = &dev_attr_fm_port_ipv4_opt; #endif + p_LnxWrpFmPortDev->dev_attr_dsar_regs = &dev_attr_fm_port_dsar_regs; + p_LnxWrpFmPortDev->dev_attr_dsar_mem = &dev_attr_fm_port_dsar_mem; /* Registers dump entry - in future will be moved to debugfs */ if (device_create_file(dev, &dev_attr_fm_port_regs) != 0) return -EIO; @@ -434,6 +832,10 @@ int fm_port_sysfs_create(struct device *dev) if (device_create_file(dev, &dev_attr_fm_port_ipv4_opt) != 0) return -EIO; #endif + if (device_create_file(dev, &dev_attr_fm_port_dsar_regs) != 0) + return -EIO; + if (device_create_file(dev, &dev_attr_fm_port_dsar_mem) != 0) + return -EIO; /* FM Ports statistics */ switch (p_LnxWrpFmPortDev->settings.param.portType) { @@ -504,6 +906,8 @@ void fm_port_sysfs_destroy(struct device *dev) #if (DPAA_VERSION >= 11) device_remove_file(dev, p_LnxWrpFmPortDev->dev_attr_ipv4_opt); #endif + device_remove_file(dev, p_LnxWrpFmPortDev->dev_attr_dsar_regs); + device_remove_file(dev, p_LnxWrpFmPortDev->dev_attr_dsar_mem); } |