32 #define TRACE_LEVEL NIC_TRACE_LEVEL 
   35 #include "inc/hw_ethernet.h" 
   36 #include "inc/hw_ints.h" 
   37 #include "inc/hw_memmap.h" 
   38 #include "inc/hw_types.h" 
   39 #include "driverlib/gpio.h" 
   40 #include "driverlib/interrupt.h" 
   41 #include "driverlib/sysctl.h" 
   50 #if defined(__ICCARM__) 
   53 #pragma data_alignment = 4 
   56 #pragma data_alignment = 4 
  105 #ifdef ti_sysbios_BIOS___VERS 
  106    Hwi_Params hwiParams;
 
  110    TRACE_INFO(
"Initializing F28M35x Ethernet MAC driver...\r\n");
 
  113    nicDriverInterface = interface;
 
  116    SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
 
  118    SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
 
  124    div = SysCtlClockGet(20000000) / (2 * 2500000) - 1;
 
  129    if(interface->phyDriver != NULL)
 
  132       error = interface->phyDriver->init(interface);
 
  134    else if(interface->switchDriver != NULL)
 
  137       error = interface->switchDriver->init(interface);
 
  152    MAC_IA0_R = interface->macAddr.w[0] | (interface->macAddr.w[1] << 16);
 
  156    MAC_TCTL_R = MAC_TCTL_DUPLEX | MAC_TCTL_CRC | MAC_TCTL_PADEN;
 
  158    MAC_RCTL_R = MAC_RCTL_RSTFIFO | MAC_RCTL_BADCRC;
 
  161    MAC_IM_R = MAC_IM_TXEMPM | MAC_IM_RXINTM;
 
  163 #ifdef ti_sysbios_BIOS___VERS 
  165    Hwi_Params_init(&hwiParams);
 
  166    hwiParams.enableInt = 
FALSE;
 
  202 #if defined(USE_TMDSCNCDH52C1) 
  204    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
 
  205    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
 
  206    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
 
  207    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
 
  208    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
 
  209    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
 
  212    GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_HW);
 
  213    GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_STD);
 
  214    GPIOPinConfigure(GPIO_PC4_MIITXD3);
 
  217    GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_6, GPIO_DIR_MODE_HW);
 
  218    GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_6, GPIO_PIN_TYPE_STD);
 
  219    GPIOPinConfigure(GPIO_PE6_MIIMDIO);
 
  222    GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_DIR_MODE_HW);
 
  223    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_PIN_TYPE_STD);
 
  224    GPIOPinConfigure(GPIO_PF5_MIIRXD3);
 
  227    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_0, GPIO_DIR_MODE_HW);
 
  228    GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_0, GPIO_PIN_TYPE_STD);
 
  229    GPIOPinConfigure(GPIO_PG0_MIIRXD2);
 
  232    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_1, GPIO_DIR_MODE_HW);
 
  233    GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_1, GPIO_PIN_TYPE_STD);
 
  234    GPIOPinConfigure(GPIO_PG1_MIIRXD1);
 
  237    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_3, GPIO_DIR_MODE_HW);
 
  238    GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_3, GPIO_PIN_TYPE_STD);
 
  239    GPIOPinConfigure(GPIO_PG3_MIIRXDV);
 
  242    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_7, GPIO_DIR_MODE_HW);
 
  243    GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_7, GPIO_PIN_TYPE_STD);
 
  244    GPIOPinConfigure(GPIO_PG7_MIITXER);
 
  247    GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_1, GPIO_DIR_MODE_HW);
 
  248    GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_1, GPIO_PIN_TYPE_STD);
 
  249    GPIOPinConfigure(GPIO_PH1_MIIRXD0);
 
  252    GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_3, GPIO_DIR_MODE_HW);
 
  253    GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_3, GPIO_PIN_TYPE_STD);
 
  254    GPIOPinConfigure(GPIO_PH3_MIITXD2);
 
  257    GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_4, GPIO_DIR_MODE_HW);
 
  258    GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_STD);
 
  259    GPIOPinConfigure(GPIO_PH4_MIITXD1);
 
  262    GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_5, GPIO_DIR_MODE_HW);
 
  263    GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_5, GPIO_PIN_TYPE_STD);
 
  264    GPIOPinConfigure(GPIO_PH5_MIITXD0);
 
  267    GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_6, GPIO_DIR_MODE_HW);
 
  268    GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_6, GPIO_PIN_TYPE_STD);
 
  269    GPIOPinConfigure(GPIO_PH6_MIITXEN);
 
  272    GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_7, GPIO_DIR_MODE_HW);
 
  273    GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_7, GPIO_PIN_TYPE_STD);
 
  274    GPIOPinConfigure(GPIO_PH7_MIITXCK);
 
  277    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_0, GPIO_DIR_MODE_HW);
 
  278    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_0, GPIO_PIN_TYPE_STD);
 
  279    GPIOPinConfigure(GPIO_PJ0_MIIRXER);
 
  282    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_2, GPIO_DIR_MODE_HW);
 
  283    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_2, GPIO_PIN_TYPE_STD);
 
  284    GPIOPinConfigure(GPIO_PJ2_MIIRXCK);
 
  287    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_3, GPIO_DIR_MODE_HW);
 
  288    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_3, GPIO_PIN_TYPE_STD);
 
  289    GPIOPinConfigure(GPIO_PJ3_MIIMDC);
 
  292    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_4, GPIO_DIR_MODE_HW);
 
  293    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_STD);
 
  294    GPIOPinConfigure(GPIO_PJ4_MIICOL);
 
  297    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_5, GPIO_DIR_MODE_HW);
 
  298    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_5, GPIO_PIN_TYPE_STD);
 
  299    GPIOPinConfigure(GPIO_PJ5_MIICRS);
 
  302    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_6, GPIO_DIR_MODE_HW);
 
  303    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_6, GPIO_PIN_TYPE_STD);
 
  304    GPIOPinConfigure(GPIO_PJ6_MIIPHYINTRn);
 
  307    GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_7, GPIO_DIR_MODE_HW);
 
  308    GPIOPadConfigSet(GPIO_PORTJ_BASE, GPIO_PIN_7, GPIO_PIN_TYPE_STD);
 
  309    GPIOPinConfigure(GPIO_PJ7_MIIPHYRSTn);
 
  326    if(interface->phyDriver != NULL)
 
  329       interface->phyDriver->tick(interface);
 
  331    else if(interface->switchDriver != NULL)
 
  334       interface->switchDriver->tick(interface);
 
  350 #ifdef ti_sysbios_BIOS___VERS 
  352    Hwi_enableInterrupt(INT_ETH);
 
  359    if(interface->phyDriver != NULL)
 
  362       interface->phyDriver->enableIrq(interface);
 
  364    else if(interface->switchDriver != NULL)
 
  367       interface->switchDriver->enableIrq(interface);
 
  383 #ifdef ti_sysbios_BIOS___VERS 
  385    Hwi_disableInterrupt(INT_ETH);
 
  392    if(interface->phyDriver != NULL)
 
  395       interface->phyDriver->disableIrq(interface);
 
  397    else if(interface->switchDriver != NULL)
 
  400       interface->switchDriver->disableIrq(interface);
 
  428    if((status & MAC_RIS_TXEMP) != 0)
 
  442    if((status & MAC_RIS_RXINT) != 0)
 
  448       nicDriverInterface->nicEvent = 
TRUE;
 
  472       while((
MAC_NP_R & MAC_NP_NPR_M) != 0)
 
  480    MAC_IM_R = MAC_IM_TXEMPM | MAC_IM_RXINTM;
 
  532    for(i = 0; i < 
length; i++)
 
  582             *(
p++) = (uint16_t) (
data >> 16);
 
  586          for(i = 2; i < 
n; i += 4)
 
  591             *(
p++) = (uint16_t) 
data;
 
  592             *(
p++) = (uint16_t) (
data >> 16);
 
  658    MAC_IA0_R = interface->macAddr.w[0] | (interface->macAddr.w[1] << 16);
 
  662    acceptMulticast = 
FALSE;
 
  669       if(interface->macAddrFilter[i].refCount > 0)
 
  672          acceptMulticast = 
TRUE;