--- a/src/drv_mei_cpe_common.c +++ b/src/drv_mei_cpe_common.c @@ -19,7 +19,6 @@ /* get at first the driver configuration */ #include "drv_mei_cpe_config.h" -#include "ifx_types.h" #include "drv_mei_cpe_os.h" #include "drv_mei_cpe_dbg.h" --- a/src/drv_mei_cpe_linux.h +++ b/src/drv_mei_cpe_linux.h @@ -60,12 +60,6 @@ #include #include -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)) - #include -#else - #include -#endif - #endif /* #if (MEI_DRV_IFXOS_ENABLE == 0)*/ #include --- a/src/drv_mei_cpe_linux.c +++ b/src/drv_mei_cpe_linux.c @@ -114,6 +114,8 @@ #include "drv_mei_cpe_api_atm_ptm_intern.h" +#include + /* =================================== extern function declarations =================================== */ @@ -220,6 +222,8 @@ static void MEI_NlSendMsg(IFX_char_t* pM /* Local variables (LINUX) */ /* =================================== */ static IFX_uint8_t major_number = 0; +static struct class *mei_class; +static dev_t mei_devt; #ifdef MODULE #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) MODULE_PARM(major_number, "b"); @@ -1256,7 +1260,9 @@ static long MEI_Ioctl( struct file *filp MEI_IOCTL_RETURN: local_args.drv_ioctl.retCode = ret; - copy_to_user( ((IOCTL_MEI_arg_t *)nArgument), &local_args, retSize); + if ( ret == IFX_SUCCESS && + copy_to_user( ((IOCTL_MEI_arg_t *)nArgument), &local_args, retSize) ) + ret = -e_MEI_ERR_RETURN_ARG; return (ret < 0) ? -1 : 0; } @@ -1479,7 +1485,11 @@ struct proc_entry { char name[32]; proc_rd_callback_t rd; proc_wr_callback_t wr; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5,6,0)) struct file_operations ops; +#else + struct proc_ops ops; +#endif int entity; }; @@ -1869,6 +1879,7 @@ static int mei_proc_single_open(struct i static void mei_proc_entry_create(struct proc_dir_entry *parent_node, struct proc_entry *proc_entry) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5,6,0)) memset(&proc_entry->ops, 0, sizeof(struct file_operations)); proc_entry->ops.owner = THIS_MODULE; @@ -1879,6 +1890,17 @@ static void mei_proc_entry_create(struct proc_entry->ops.llseek = seq_lseek; if (proc_entry->wr) proc_entry->ops.write = proc_entry->wr; +#else + memset(&proc_entry->ops, 0, sizeof(struct proc_ops)); + + proc_entry->ops.proc_open = mei_proc_single_open; + proc_entry->ops.proc_release = single_release; + + proc_entry->ops.proc_read = seq_read; + proc_entry->ops.proc_lseek = seq_lseek; + if (proc_entry->wr) + proc_entry->ops.proc_write = proc_entry->wr; +#endif proc_create_data(proc_entry->name, (S_IFREG | S_IRUGO), @@ -2174,9 +2196,11 @@ static int MEI_module_init (void) return (result); } +#if 0 #if (MEI_DRV_ATM_PTM_INTERFACE_ENABLE == 1) ppa_callback_set(LTQ_MEI_SHOWTIME_CHECK, (void *)ltq_mei_showtime_check); #endif /* #if (MEI_DRV_ATM_PTM_INTERFACE_ENABLE == 1) */ +#endif return 0; } @@ -2304,6 +2328,10 @@ static void MEI_module_exit (void) #else unregister_chrdev ( major_number , DRV_MEI_NAME ); + device_destroy(mei_class, mei_devt); + mei_devt = 0; + class_destroy(mei_class); + mei_class = NULL; #endif #if CONFIG_PROC_FS @@ -2388,9 +2416,11 @@ static void MEI_module_exit (void) ("MEI_DRV: Chipset Basic Exit failed" MEI_DRV_CRLF)); } +#if 0 #if (MEI_DRV_ATM_PTM_INTERFACE_ENABLE == 1) ppa_callback_set(LTQ_MEI_SHOWTIME_CHECK, (void *)NULL); #endif /* #if (MEI_DRV_ATM_PTM_INTERFACE_ENABLE == 1) */ +#endif #if (MEI_SUPPORT_DEBUG_LOGGER == 1) if (nl_debug_sock) @@ -2514,6 +2544,10 @@ static int MEI_InitModuleRegCharDev(cons ("Using major number %d" MEI_DRV_CRLF, major_number)); } + mei_class = class_create(THIS_MODULE, devName); + mei_devt = MKDEV(major_number, 0); + device_create(mei_class, NULL, mei_devt, NULL, "%s/%i", devName, 0); + return 0; #endif /* CONFIG_DEVFS_FS */ } @@ -2563,21 +2597,32 @@ static int MEI_InitModuleBasics(void) } #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)) + +#define PMU_DFE BIT(9) + static int MEI_SysClkEnable(struct clk *clk) { +#if 0 if (IS_ERR(clk)) return -1; clk_enable(clk); +#else + ltq_pmu_enable(PMU_DFE); +#endif return 0; } static int MEI_SysClkDisable(struct clk *clk) { +#if 0 if (IS_ERR(clk)) return -1; clk_disable(clk); clk_put(clk); +#else + ltq_pmu_disable(PMU_DFE); +#endif return 0; } @@ -2905,11 +2950,15 @@ IFX_int32_t MEI_IoctlInitDevice( pMeiDev->eModePoll = e_MEI_DEV_ACCESS_MODE_IRQ; pMeiDev->intMask = ME_ARC2ME_INTERRUPT_UNMASK_ALL; +#if 1 + virq = (IFX_uint32_t)pInitDev->usedIRQ; +#else #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) virq = (IFX_uint32_t)pInitDev->usedIRQ; #else virq = irq_create_mapping(NULL, (IFX_uint32_t)pInitDev->usedIRQ); #endif +#endif pTmpXCntrl = MEI_VrxXDevToIrqListAdd( MEI_DRV_LINENUM_GET(pMeiDev), @@ -3249,9 +3298,11 @@ static int MEI_IoctlMeiDbgAccessWr_Wrap( ret = MEI_IoctlMeiDbgAccessWr( pMeiDynCntrl, pLocalArgument); /* return arguments - count */ - copy_to_user( (void *)&pUserArgument->count, - (void *)&pLocalArgument->count, - sizeof(pUserArgument->count) ) ; + if ( ret == IFX_SUCCESS && + copy_to_user( (void *)&pUserArgument->count, + (void *)&pLocalArgument->count, + sizeof(pUserArgument->count) ) ) + ret = -e_MEI_ERR_RETURN_ARG; return ret; } @@ -3278,16 +3329,18 @@ static int MEI_IoctlMeiDbgAccessRd_Wrap( if ( pLocalArgument->count ) { /* return the buffer */ - copy_to_user( pUserBuf, - pLocalArgument->pData_32, - pLocalArgument->count * sizeof(IFX_uint32_t) ) ; + if ( copy_to_user( pUserBuf, + pLocalArgument->pData_32, + pLocalArgument->count * sizeof(IFX_uint32_t) ) ) + ret = -e_MEI_ERR_RETURN_ARG; } /* return count argument */ - copy_to_user( (void *)&pUserArgument->count, - (void *)&pLocalArgument->count, - sizeof(pUserArgument->count) ) ; + if ( copy_to_user( (void *)&pUserArgument->count, + (void *)&pLocalArgument->count, + sizeof(pUserArgument->count) ) ) + ret = -e_MEI_ERR_RETURN_ARG; return ret; } --- a/src/drv_mei_cpe_api_atm_ptm_intern.c +++ b/src/drv_mei_cpe_api_atm_ptm_intern.c @@ -147,6 +147,7 @@ IFX_int32_t MEI_InternalXtmSwhowtimeExit return retVal; } +#if 0 IFX_int32_t MEI_InternalTcRequest( MEI_DYN_CNTRL_T *pMeiDynCntrl, MEI_TC_Request_t *pArgTcRequest) @@ -232,6 +233,7 @@ IFX_int32_t MEI_InternalTcReset( return retVal; } +#endif /** Function that is used by the PP subsystem to get some showtime relevant data @@ -311,10 +313,57 @@ int ifx_mei_atm_led_blink(void) return IFX_SUCCESS; } +#if MEI_MAX_DFE_CHAN_DEVICES > 1 +#error "Compat functions do not support MEI_MAX_DFE_CHAN_DEVICES > 1 yet" +#else +int (*ifx_mei_atm_showtime_enter)(struct port_cell_info *, void *) = NULL; +int (*ifx_mei_atm_showtime_exit)(void) = NULL; + +int ltq_ifx_mei_atm_showtime_enter_compat(IFX_uint8_t dslLineNum, + struct port_cell_info *cellInfo, + void *xdata) { + if (ifx_mei_atm_showtime_enter) + return ifx_mei_atm_showtime_enter(cellInfo, xdata); + + return -e_MEI_ERR_OP_FAILED; +} + +int ltq_ifx_mei_atm_showtime_exit_compat(IFX_uint8_t dslLineNum) { + if (ifx_mei_atm_showtime_exit) + return ifx_mei_atm_showtime_exit(); + + return -e_MEI_ERR_OP_FAILED; +} + +void* ppa_callback_get(e_ltq_mei_cb_type type) { + switch (type) { + case LTQ_MEI_SHOWTIME_ENTER: + return <q_ifx_mei_atm_showtime_enter_compat; + case LTQ_MEI_SHOWTIME_EXIT: + return <q_ifx_mei_atm_showtime_exit_compat; + break; + } + + BUG(); +} + +int ifx_mei_atm_showtime_check(int *is_showtime, + struct port_cell_info *port_cell, + void **xdata_addr) { + return ltq_mei_showtime_check(0, is_showtime, port_cell, xdata_addr); +} + +EXPORT_SYMBOL(ifx_mei_atm_showtime_enter); +EXPORT_SYMBOL(ifx_mei_atm_showtime_exit); +EXPORT_SYMBOL(ifx_mei_atm_showtime_check); +#endif + EXPORT_SYMBOL (MEI_InternalXtmSwhowtimeEntrySignal); EXPORT_SYMBOL (MEI_InternalXtmSwhowtimeExitSignal); +#if 0 EXPORT_SYMBOL (MEI_InternalTcRequest); EXPORT_SYMBOL (MEI_InternalTcReset); +#endif EXPORT_SYMBOL(ifx_mei_atm_led_blink); #endif /* #if (MEI_EXPORT_INTERNAL_API == 1) && (MEI_DRV_ATM_PTM_INTERFACE_ENABLE == 1) */ --- a/src/drv_mei_cpe_api_atm_ptm_intern.h +++ b/src/drv_mei_cpe_api_atm_ptm_intern.h @@ -21,7 +21,6 @@ #include "drv_mei_cpe_config.h" #include "drv_mei_cpe_interface.h" -#include #if (MEI_EXPORT_INTERNAL_API == 1) && (MEI_DRV_ATM_PTM_INTERFACE_ENABLE == 1) @@ -59,8 +58,21 @@ extern IFX_int32_t MEI_InternalTcReset( MEI_DYN_CNTRL_T *pMeiDynCntrl, MEI_TC_Reset_t *pArgTcReset); +#if 1 +#include +typedef enum { + LTQ_MEI_SHOWTIME_ENTER, + LTQ_MEI_SHOWTIME_EXIT +} e_ltq_mei_cb_type; + +typedef void (*ltq_mei_atm_showtime_enter_t)(IFX_uint8_t, struct port_cell_info *, void *); +typedef void (*ltq_mei_atm_showtime_exit_t)(IFX_uint8_t); + +void* ppa_callback_get(e_ltq_mei_cb_type type); +#else extern int ppa_callback_set(e_ltq_mei_cb_type type, void *func); extern void* ppa_callback_get(e_ltq_mei_cb_type type); +#endif int ltq_mei_showtime_check( const unsigned char line_idx, --- a/src/drv_mei_cpe_device_vrx.c +++ b/src/drv_mei_cpe_device_vrx.c @@ -28,17 +28,6 @@ #include "drv_mei_cpe_api.h" #include "drv_mei_cpe_mei_vrx.h" -#if defined(LINUX) -# if (LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)) -# if (MEI_SUPPORT_DEVICE_VR10_320 != 1) -# include "ifx_pcie.h" -# else -# include "../drivers/net/ethernet/lantiq/lantiq_pcie.h" -# endif -# else -# include "lantiq_pcie.h" -# endif -#endif /* #if defined(LINUX)*/ IFX_int32_t MEI_GPIntProcess(MEI_MeiRegVal_t processInt, MEI_DEV_T *pMeiDev) { @@ -86,6 +75,7 @@ IFX_int32_t MEI_GetChipInfo(MEI_DEV_T *p */ IFX_int32_t MEI_VR10_PcieEntitiesCheck(IFX_uint8_t nEntityNum) { +#if 0 IFX_uint32_t pcie_entitiesNum; /* get information from pcie driver */ @@ -110,6 +100,9 @@ IFX_int32_t MEI_VR10_PcieEntitiesCheck(I } return IFX_SUCCESS; +#else + return IFX_ERROR; +#endif } /** @@ -124,6 +117,7 @@ IFX_int32_t MEI_VR10_PcieEntitiesCheck(I */ IFX_int32_t MEI_VR10_PcieEntityInit(MEI_MEI_DRV_CNTRL_T *pMeiDrvCntrl) { +#if 0 IFX_uint8_t entityNum; #if (MEI_SUPPORT_DEVICE_VR10_320 != 1) ifx_pcie_ep_dev_t MEI_pcie_ep_dev; @@ -156,6 +150,9 @@ IFX_int32_t MEI_VR10_PcieEntityInit(MEI_ pMeiDrvCntrl->MEI_pcie_irq = 99; return IFX_SUCCESS; +#else + return IFX_ERROR; +#endif } /** @@ -170,6 +167,7 @@ IFX_int32_t MEI_VR10_PcieEntityInit(MEI_ */ IFX_int32_t MEI_VR10_PcieEntityFree(IFX_uint8_t entityNum) { +#if 0 #if (MEI_SUPPORT_DEVICE_VR10_320 != 1) if (ifx_pcie_ep_dev_info_release(entityNum)) #else @@ -183,6 +181,9 @@ IFX_int32_t MEI_VR10_PcieEntityFree(IFX_ } return IFX_SUCCESS; +#else + return IFX_ERROR; +#endif } /** @@ -197,6 +198,7 @@ IFX_int32_t MEI_VR10_PcieEntityFree(IFX_ */ IFX_int32_t MEI_VR10_InternalInitDevice(MEI_DYN_CNTRL_T *pMeiDynCntrl) { +#if 0 IFX_int32_t retVal; IOCTL_MEI_devInit_t InitDev; MEI_DEV_T *pMeiDev = pMeiDynCntrl->pMeiDev; @@ -221,6 +223,9 @@ IFX_int32_t MEI_VR10_InternalInitDevice( *MEI_GPIO_U32REG(GPIO_P0_ALSEL1) &= ~((1 << 0) | (1 << 3) | (1 << 8)); return IFX_SUCCESS; +#else + return IFX_ERROR; +#endif } IFX_int32_t MEI_PLL_ConfigInit(MEI_DEV_T *pMeiDev) --- a/src/drv_mei_cpe_download_vrx.c +++ b/src/drv_mei_cpe_download_vrx.c @@ -3281,12 +3281,14 @@ IFX_int32_t MEI_DEV_IoctlFirmwareDownloa /* reset TC layer */ if (ret == 0) { +#if 0 if (MEI_InternalTcReset(pMeiDynCntrl, &tc_reset) != 0) { PRN_ERR_USR_NL( MEI_DRV, MEI_DRV_PRN_LEVEL_WRN, ("MEI_DRV[%02d]: Could not perform reset of TC-Layer!" MEI_DRV_CRLF, MEI_DRV_LINENUM_GET(pMeiDev))); } +#endif } #endif --- a/src/drv_mei_cpe_linux_proc_config.c +++ b/src/drv_mei_cpe_linux_proc_config.c @@ -1039,6 +1039,7 @@ static int mei_proc_single_open(struct i return single_open(file, mei_seq_single_show, PDE_DATA(inode)); } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5,6,0)) static struct file_operations proc_ops = { .owner = THIS_MODULE, .open = mei_proc_single_open, @@ -1047,6 +1048,15 @@ static struct file_operations proc_ops = .llseek = seq_lseek, .write = MEI_ProcWriteConfig }; +#else +static struct proc_ops proc_ops = { + .proc_open = mei_proc_single_open, + .proc_release = single_release, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_write = MEI_ProcWriteConfig +}; +#endif /** Create an read/write proc entry for configuration.