* for the board related ioctl calls: flash, get free kernel
* page and dump kernel memory, etc.
*
- * Created on : 2/20/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
*
***************************************************************************/
-
/* Includes. */
#include <linux/version.h>
#include <linux/init.h>
static LED_MAP_PAIR LedMapping[] =
{ // led name Initial state physical pin (ledMask)
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0},
- {kLedEnd, kLedStateOff, 0, 0, 0, 0} // NOTE: kLedEnd has to be at the end.
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0},
+ {kLedEnd, kLedStateOff, 0, 0, 0, 0, 0, 0} // NOTE: kLedEnd has to be at the end.
};
/* Externs. */
static void __exit kerSysDeinitDyingGaspHandler( void );
/* -DyingGasp function prototype - */
+static int ConfigCs(BOARD_IOCTL_PARMS *parms);
+static void SetPll(int pll_mask, int pll_value);
+static void SetGpio(int gpio, GPIO_STATE_t state);
#if defined (WIRELESS)
static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs);
static void __exit ses_board_deinit(void);
#endif
+static irqreturn_t reset_isr(int irq, void *dev_id, struct pt_regs *ptregs);
+
static PNVRAM_INFO g_pNvramInfo = NULL;
static int g_ledInitialized = 0;
static wait_queue_head_t g_board_wait_queue;
{kLedEnd, NULL, NULL}
};
+ unsigned short pah_irq;
int ret;
ret = register_chrdev(BOARD_DRV_MAJOR, "bcrmboard", &board_fops );
PLED_MAP_PAIR pLedMap = LedMapping;
unsigned short gpio;
struct BpLedInformation *pInfo;
+ ETHERNET_MAC_INFO EnetInfo;
printk("brcmboard: brcm_board_init entry\n");
board_major = BOARD_DRV_MAJOR;
for( pInfo = bpLedInfo; pInfo->ledName != kLedEnd; pInfo++ )
{
- if( pInfo->bpFunc && (*pInfo->bpFunc) (&gpio) == BP_SUCCESS )
+ if( pInfo->bpFunc && (*pInfo->bpFunc) (&gpio) == BP_SUCCESS &&
+ gpio != BP_HW_DEFINED_AH && gpio != BP_HW_DEFINED_AL )
{
pLedMap->ledName = pInfo->ledName;
pLedMap->ledMask = GPIO_NUM_TO_MASK(gpio);
pLedMap->ledActiveLow = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
+ pLedMap->ledSerial = (gpio & BP_GPIO_SERIAL) ? 1 : 0;
}
- if( pInfo->bpFuncFail && (*pInfo->bpFuncFail) (&gpio) == BP_SUCCESS )
+ if( pInfo->bpFuncFail && (*pInfo->bpFuncFail)(&gpio)==BP_SUCCESS &&
+ gpio != BP_HW_DEFINED_AH && gpio != BP_HW_DEFINED_AL )
{
pLedMap->ledName = pInfo->ledName;
pLedMap->ledMaskFail = GPIO_NUM_TO_MASK(gpio);
pLedMap->ledActiveLowFail = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
+ pLedMap->ledSerialFail = (gpio & BP_GPIO_SERIAL) ? 1 : 0;
}
if( pLedMap->ledName != kLedEnd )
pLedMap++;
}
+
+ if( BpGetEthernetMacInfo( &EnetInfo, 1 ) == BP_SUCCESS )
+ {
+ if( EnetInfo.usGpioPhyLinkSpeed != BP_NOT_DEFINED )
+ {
+ /* The internal Ethernet PHY has a GPIO for 10/100 link speed. */
+ gpio = EnetInfo.usGpioPhyLinkSpeed;
+ pLedMap->ledName = kLedEphyLinkSpeed;
+ pLedMap->ledMask = GPIO_NUM_TO_MASK(gpio);
+ pLedMap->ledActiveLow = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
+ pLedMap->ledSerial = (gpio & BP_GPIO_SERIAL) ? 1 : 0;
+ pLedMap++;
+ }
+ }
init_waitqueue_head(&g_board_wait_queue);
#if defined (WIRELESS)
boardLedInit(LedMapping);
g_ledInitialized = 1;
+
+ if( BpGetPressAndHoldResetExtIntr(&pah_irq) == BP_SUCCESS )
+ {
+ pah_irq += INTERRUPT_ID_EXTERNAL_0;
+ BcmHalMapInterrupt((FN_HANDLER)reset_isr, 0, pah_irq);
+ BcmHalInterruptEnable(pah_irq);
+ }
}
return ret;
return( nRet );
} /* kerSysReleaseMacAddr */
+// USR9109/91113
+void kerSysSetMacAddress(unsigned char *pucaMacAddr)
+{
+ UINT32 crc = CRC32_INIT_VALUE;
+ NVRAM_DATA NvramData;
+ volatile unsigned char *mac;
+
+ memcpy((char *)&NvramData, (char *)get_nvram_start_addr(), sizeof(NVRAM_DATA));
+
+ mac = (unsigned char*)NvramData.ucaBaseMacAddr;
+ printk("Original ucaBaseMacAddr: %02X %02X %02X %02X %02X %02X\r\n", mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
+
+ memcpy(NvramData.ucaBaseMacAddr, pucaMacAddr, NVRAM_MAC_ADDRESS_LEN);
+ printk("New Mac: %02X %02X %02X %02X %02X %02X\r\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
+
+ NvramData.ulCheckSum = 0;
+ NvramData.ulCheckSum = getCrc32((char *)&NvramData, (UINT32) sizeof(NVRAM_DATA), crc);
+ kerSysNvRamSet((char *)&NvramData, sizeof(NVRAM_DATA), NVRAM_VERSION_NUMBER_ADDRESS);
+
+} /* kerSysSetMacAddr */
+
int kerSysGetSdramSize( void )
{
return( (int) g_pNvramInfo->ulSdramSize );
return -1;
}
- if( getTagFromPartition(1) != NULL && getTagFromPartition(2) != NULL &&
- newImgSize > availableSizeTwoImgs )
- {
- printk("Illegal image size %d. Image size must not be greater "
- "than %d.\n", newImgSize, availableSizeTwoImgs);
- return -1;
- }
-
// If the current image fits in half the flash space and the new
// image to flash also fits in half the flash space, then flash it
// in the partition that is not currently being used to boot from.
// not used for now. kerSysBcmImageInit();
break;
-
case BOARD_IOCTL_FLASH_WRITE:
if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
{
switch (ctrlParms.action)
{
case SCRATCH_PAD:
- ret = kerSysScratchPadSet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
+ if (ctrlParms.offset == -1)
+ ret = kerSysScratchPadClearAll();
+ else
+ ret = kerSysScratchPadSet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
break;
case PERSISTENT:
// set memory type field
BpGetSdramSize( (unsigned long *) &ctrlParms.string[SDRAM_TYPE_ADDRESS_OFFSET] );
+ // set thread number field
+ BpGetCMTThread( (unsigned long *) &ctrlParms.string[THREAD_NUM_ADDRESS_OFFSET] );
ret = kerSysBcmImageSet(ctrlParms.offset + BOOT_OFFSET, ctrlParms.string, ctrlParms.strLen);
// save NVRAM data into a local structure
memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
+ if (ctrlParms.offset == 0) {
+ ctrlParms.offset = FLASH_BASE;
+ }
ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
// if nvram is not valid, restore the current nvram settings
else
ret = -EFAULT;
break;
-
+
case BOARD_IOCTL_GET_CHIP_ID:
ctrlParms.result = (int) (PERF->RevID & 0xFFFF0000) >> 16;
__copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
kerSysWakeupMonitorTask();
break;
+ case BOARD_IOCTL_GET_VCOPE_GPIO:
+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
+ ret = ((ctrlParms.result = BpGetVcopeGpio(ctrlParms.offset)) != BP_NOT_DEFINED) ? 0 : -EFAULT;
+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
+ }
+ else {
+ ret = -EFAULT;
+ ctrlParms.result = BP_NOT_DEFINED;
+ }
+
+ break;
+
+ case BOARD_IOCTL_SET_CS_PAR:
+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
+ ret = ConfigCs(&ctrlParms);
+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
+ }
+ else {
+ ret = -EFAULT;
+ }
+ break;
+
+ case BOARD_IOCTL_SET_PLL:
+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
+ SetPll(ctrlParms.strLen, ctrlParms.offset);
+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
+ ret = 0;
+ }
+ else {
+ ret = -EFAULT;
+ }
+ break;
+
+ case BOARD_IOCTL_SET_GPIO:
+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
+ SetGpio(ctrlParms.strLen, ctrlParms.offset);
+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
+ ret = 0;
+ }
+ else {
+ ret = -EFAULT;
+ }
+ break;
+
default:
ret = -EINVAL;
ctrlParms.result = 0;
#if defined (WIRELESS)
static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs)
{
-#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-#endif
-#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
- unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-#endif
-#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
- unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned long *gpio_reg = &GPIO->GPIOio;
+ volatile unsigned long *gpio_io_reg = &GPIO->GPIOio;
- if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
+#if !defined(CONFIG_BCM96338)
+ if( (sesBtn_gpio & BP_GPIO_NUM_MASK) >= 32 )
{
gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
- gpio_reg = &GPIO->GPIOio_high;
+ gpio_io_reg = &GPIO->GPIOio_high;
}
#endif
- if (!(*gpio_reg & gpio_mask)){
+ if (!(*gpio_io_reg & gpio_mask)){
wake_up_interruptible(&g_board_wait_queue);
return IRQ_RETVAL(1);
} else {
static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait)
{
-#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
- unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-#endif
-#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
- unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-#endif
-#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned long *gpio_reg = &GPIO->GPIOio;
+ volatile unsigned long *gpio_io_reg = &GPIO->GPIOio;
- if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
+#if !defined(CONFIG_BCM96338)
+ if( (sesBtn_gpio & BP_GPIO_NUM_MASK) >= 32 )
{
gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
- gpio_reg = &GPIO->GPIOio_high;
+ gpio_io_reg = &GPIO->GPIOio_high;
}
#endif
- if (!(*gpio_reg & gpio_mask)){
- return POLLIN;
+ if (!(*gpio_io_reg & gpio_mask)){
+ return POLLIN;
}
return 0;
}
volatile unsigned int event=0;
ssize_t ret=0;
-#if defined(_BCM96338_) || defined (CONFIG_BCM96338)
- unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-#endif
-#if defined(_BCM96345_) || defined (CONFIG_BCM96345)
- unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-#endif
-#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
- volatile unsigned long *gpio_reg = &GPIO->GPIOio;
+ volatile unsigned long *gpio_io_reg = &GPIO->GPIOio;
- if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
+#if !defined (CONFIG_BCM96338)
+ if( (sesBtn_gpio & BP_GPIO_NUM_MASK) >= 32 )
{
gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
- gpio_reg = &GPIO->GPIOio_high;
+ gpio_io_reg = &GPIO->GPIOio_high;
}
#endif
- if(*gpio_reg & gpio_mask){
+ if(*gpio_io_reg & gpio_mask){
BcmHalInterruptEnable(sesBtn_irq);
- return ret;
+ return ret;
}
event = SES_EVENTS;
__copy_to_user((char*)buffer, (char*)&event, sizeof(event));
***************************************************************************/
#define KERSYS_DBG printk
-#if defined(CONFIG_BCM96345)
-#define CYCLE_PER_US 70
-#elif defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
+#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
/* The BCM6348 cycles per microsecond is really variable since the BCM6348
* MIPS speed can vary depending on the PLL settings. However, an appoximate
* value of 120 will still work OK for the test being done.
*/
#define CYCLE_PER_US 120
+#elif defined(CONFIG_BCM96358)
+#define CYCLE_PER_US 150
#endif
#define DG_GLITCH_TO (100*CYCLE_PER_US)
{
unsigned long ulIntr;
-#if defined(CONFIG_BCM96348) || defined(_BCM96348_) || defined(CONFIG_BCM96338) || defined(_BCM96338_)
if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, INTERRUPT_ID_DG);
BcmHalInterruptEnable( INTERRUPT_ID_DG );
}
-#elif defined(CONFIG_BCM96345) || defined(_BCM96345_)
- if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
- ulIntr += INTERRUPT_ID_EXTERNAL_0;
- BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, ulIntr);
- BcmHalInterruptEnable( ulIntr );
- }
-#endif
-
}
void kerSysSetWdTimer(ulong timeUs)
UART->Data = '%';
UART->Data = 'G';
-#if defined(CONFIG_BCM96345)
- BpGetAdslDyingGaspExtIntr( &ulIntr );
-
- do {
- ulong clk1;
-
- clk1 = kerSysGetCycleCount(); /* time cleared */
- /* wait a little to get new reading */
- while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
- ;
- } while ((0 == (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT)))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
-
- if (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT))) { /* power glitch */
- BcmHalInterruptEnable( ulIntr + INTERRUPT_ID_EXTERNAL_0);
- KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
- return 0;
- }
-#elif (defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)) && !defined(VXWORKS)
do {
ulong clk1;
KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
return 0;
}
-#endif
+
return 1;
}
static void kerSysDyingGaspShutdown( void )
{
kerSysSetWdTimer(1000000);
-#if defined(CONFIG_BCM96345)
- PERF->blkEnables &= ~(EMAC_CLK_EN | USB_CLK_EN | CPU_CLK_EN);
-#elif defined(CONFIG_BCM96348)
+#if defined(CONFIG_BCM96348)
PERF->blkEnables &= ~(EMAC_CLK_EN | USBS_CLK_EN | USBH_CLK_EN | SAR_CLK_EN);
+#elif defined(CONFIG_BCM96358)
+ PERF->blkEnables &= ~(EMAC_CLK_EN | USBS_CLK_EN | SAR_CLK_EN);
#endif
}
#endif
{
struct list_head *pos;
- CB_DGASP_LIST *tmp, *dsl = NULL;
+ CB_DGASP_LIST *tmp = NULL, *dsl = NULL;
if (kerSysDyingGaspCheckPowerLoss()) {
/* reset and shutdown system */
kerSysDyingGaspShutdown();
+
+ // If power is going down, nothing should continue!
+
+ while (1)
+ ;
}
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
return( IRQ_HANDLED );
} /* kerSysDeregisterDyingGaspHandler */
+static int ConfigCs (BOARD_IOCTL_PARMS *parms)
+{
+ int retv = 0;
+#if !defined(CONFIG_BCM96338)
+ int cs, flags;
+ cs_config_pars_t info;
+
+ if (copy_from_user(&info, (void*)parms->buf, sizeof(cs_config_pars_t)) == 0)
+ {
+ cs = parms->offset;
+
+ MPI->cs[cs].base = ((info.base & 0x1FFFE000) | (info.size >> 13));
+
+ if ( info.mode == EBI_TS_TA_MODE ) // syncronious mode
+ flags = (EBI_TS_TA_MODE | EBI_ENABLE);
+ else
+ {
+ flags = ( EBI_ENABLE | \
+ (EBI_WAIT_STATES & (info.wait_state << EBI_WTST_SHIFT )) | \
+ (EBI_SETUP_STATES & (info.setup_time << EBI_SETUP_SHIFT)) | \
+ (EBI_HOLD_STATES & (info.hold_time << EBI_HOLD_SHIFT )) );
+ }
+ MPI->cs[cs].config = flags;
+ parms->result = BP_SUCCESS;
+ retv = 0;
+ }
+ else
+ {
+ retv -= EFAULT;
+ parms->result = BP_NOT_DEFINED;
+ }
+#endif
+ return( retv );
+}
+
+static void SetPll (int pll_mask, int pll_value)
+{
+ PERF->pll_control &= ~pll_mask; // clear relevant bits
+ PERF->pll_control |= pll_value; // and set desired value
+}
+
+static void SetGpio(int gpio, GPIO_STATE_t state)
+{
+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(gpio);
+ volatile unsigned long *gpio_io_reg = &GPIO->GPIOio;
+ volatile unsigned long *gpio_dir_reg = &GPIO->GPIODir;
+
+#if !defined (CONFIG_BCM96338)
+ if( gpio >= 32 )
+ {
+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(gpio);
+ gpio_io_reg = &GPIO->GPIOio_high;
+ gpio_dir_reg = &GPIO->GPIODir_high;
+ }
+#endif
+
+ *gpio_dir_reg |= gpio_mask;
+
+ if(state == GPIO_HIGH)
+ *gpio_io_reg |= gpio_mask;
+ else
+ *gpio_io_reg &= ~gpio_mask;
+}
+
+
+static irqreturn_t reset_isr(int irq, void *dev_id, struct pt_regs *ptregs)
+{
+ printk("\n*** Restore to Factory Default Setting ***\n\n");
+ kerSysPersistentSet( "Reset Persistent", strlen("Reset Persistent"), 0 );
+ kerSysMipsSoftReset();
+ return 0;
+}
+
+
/***************************************************************************
* MACRO to call driver initialization and cleanup functions.
***************************************************************************/
EXPORT_SYMBOL(kerSysNvRamGet);
EXPORT_SYMBOL(dumpaddr);
EXPORT_SYMBOL(kerSysGetMacAddress);
+EXPORT_SYMBOL(kerSysSetMacAddress); // USR9109/9113
EXPORT_SYMBOL(kerSysReleaseMacAddress);
EXPORT_SYMBOL(kerSysGetSdramSize);
EXPORT_SYMBOL(kerSysLedCtrl);
EXPORT_SYMBOL(BpGetPressAndHoldResetGpio);
EXPORT_SYMBOL(BpGetVoipResetGpio);
EXPORT_SYMBOL(BpGetVoipIntrGpio);
-EXPORT_SYMBOL(BpGetPcmciaResetGpio);
EXPORT_SYMBOL(BpGetRtsCtsUartGpios);
EXPORT_SYMBOL(BpGetAdslLedGpio);
EXPORT_SYMBOL(BpGetAdslFailLedGpio);
EXPORT_SYMBOL(BpGetPppLedGpio);
EXPORT_SYMBOL(BpGetPppFailLedGpio);
EXPORT_SYMBOL(BpGetVoipLedGpio);
-EXPORT_SYMBOL(BpGetWirelessExtIntr);
EXPORT_SYMBOL(BpGetAdslDyingGaspExtIntr);
EXPORT_SYMBOL(BpGetVoipExtIntr);
EXPORT_SYMBOL(BpGetHpnaExtIntr);
EXPORT_SYMBOL(BpGetWirelessSesBtnGpio);
EXPORT_SYMBOL(BpGetWirelessSesExtIntr);
EXPORT_SYMBOL(BpGetWirelessSesLedGpio);
+EXPORT_SYMBOL(BpGetWirelessFlags);
EXPORT_SYMBOL(kerSysRegisterDyingGaspHandler);
EXPORT_SYMBOL(kerSysDeregisterDyingGaspHandler);
EXPORT_SYMBOL(kerSysGetCycleCount);
EXPORT_SYMBOL(kerSysSetWdTimer);
EXPORT_SYMBOL(kerSysWakeupMonitorTask);
+EXPORT_SYMBOL(BpUpdateWirelessSromMap);