aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/lantiq/ltq-adsl-mei/src
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/lantiq/ltq-adsl-mei/src')
-rw-r--r--package/kernel/lantiq/ltq-adsl-mei/src/lantiq_mei.c53
1 files changed, 44 insertions, 9 deletions
diff --git a/package/kernel/lantiq/ltq-adsl-mei/src/lantiq_mei.c b/package/kernel/lantiq/ltq-adsl-mei/src/lantiq_mei.c
index 443b9d90ac..561b300710 100644
--- a/package/kernel/lantiq/ltq-adsl-mei/src/lantiq_mei.c
+++ b/package/kernel/lantiq/ltq-adsl-mei/src/lantiq_mei.c
@@ -1513,13 +1513,31 @@ IFX_MEI_DFEMemoryAlloc (DSL_DEV_Device_t * pDev, long size)
allocate_size = size;
else
allocate_size = SDRAM_SEGMENT_SIZE;
- org_mem_ptr = kmalloc (allocate_size + 1024, GFP_KERNEL);
+
+ org_mem_ptr = kmalloc (allocate_size, GFP_KERNEL);
if (org_mem_ptr == NULL) {
IFX_MEI_EMSG ("%d: kmalloc %d bytes memory fail!\n", idx, allocate_size);
err = -ENOMEM;
goto allocate_error;
}
- mem_ptr = (unsigned long) (org_mem_ptr + 1023) & ~(1024 -1);
+
+ if (((unsigned long)org_mem_ptr) & (1023)) {
+ /* Pointer not 1k aligned, so free it and allocate a larger chunk
+ * for further alignment.
+ */
+ kfree(org_mem_ptr);
+ org_mem_ptr = kmalloc (allocate_size + 1024, GFP_KERNEL);
+ if (org_mem_ptr == NULL) {
+ IFX_MEI_EMSG ("%d: kmalloc %d bytes memory fail!\n",
+ idx, allocate_size + 1024);
+ err = -ENOMEM;
+ goto allocate_error;
+ }
+ mem_ptr = (unsigned long) (org_mem_ptr + 1023) & ~(1024 -1);
+ } else {
+ mem_ptr = (unsigned long) org_mem_ptr;
+ }
+
adsl_mem_info[idx].address = (char *) mem_ptr;
adsl_mem_info[idx].org_address = org_mem_ptr;
adsl_mem_info[idx].size = allocate_size;
@@ -1591,6 +1609,7 @@ DSL_BSP_FWDownload (DSL_DEV_Device_t * pDev, const char *buf,
size_t nRead = 0, nCopy = 0;
char *mem_ptr;
+ char *org_mem_ptr = NULL;
ssize_t retval = -ENOMEM;
int idx = 0;
@@ -1634,17 +1653,33 @@ DSL_BSP_FWDownload (DSL_DEV_Device_t * pDev, const char *buf,
DSL_DEV_PRIVATE(pDev)->img_hdr =
(ARC_IMG_HDR *) adsl_mem_info[0].address;
- adsl_mem_info[XDATA_REGISTER].org_address = kmalloc (SDRAM_SEGMENT_SIZE + 1024, GFP_KERNEL);
- adsl_mem_info[XDATA_REGISTER].address =
- (char *) ((unsigned long) (adsl_mem_info[XDATA_REGISTER].org_address + 1023) & 0xFFFFFC00);
-
- adsl_mem_info[XDATA_REGISTER].size = SDRAM_SEGMENT_SIZE;
-
- if (adsl_mem_info[XDATA_REGISTER].address == NULL) {
+ org_mem_ptr = kmalloc (SDRAM_SEGMENT_SIZE, GFP_KERNEL);
+ if (org_mem_ptr == NULL) {
IFX_MEI_EMSG ("kmalloc memory fail!\n");
retval = -ENOMEM;
goto error;
}
+
+ if (((unsigned long)org_mem_ptr) & (1023)) {
+ /* Pointer not 1k aligned, so free it and allocate a larger chunk
+ * for further alignment.
+ */
+ kfree(org_mem_ptr);
+ org_mem_ptr = kmalloc (SDRAM_SEGMENT_SIZE + 1024, GFP_KERNEL);
+ if (org_mem_ptr == NULL) {
+ IFX_MEI_EMSG ("kmalloc memory fail!\n");
+ retval = -ENOMEM;
+ goto error;
+ }
+ adsl_mem_info[XDATA_REGISTER].address =
+ (char *) ((unsigned long) (org_mem_ptr + 1023) & ~(1024 -1));
+ } else {
+ adsl_mem_info[XDATA_REGISTER].address = org_mem_ptr;
+ }
+
+ adsl_mem_info[XDATA_REGISTER].org_address = org_mem_ptr;
+ adsl_mem_info[XDATA_REGISTER].size = SDRAM_SEGMENT_SIZE;
+
adsl_mem_info[XDATA_REGISTER].type = FREE_RELOAD;
IFX_MEI_DMSG("-> IFX_MEI_BarUpdate()\n");
IFX_MEI_BarUpdate (pDev, (DSL_DEV_PRIVATE(pDev)->nBar));
="k">)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_URL:=git://github.com/sbyx/6relayd.git PKG_SOURCE_PROTO:=git PKG_SOURCE_VERSION:=9fc96765899e88d9219669b1b1db9ad3c63d2bf4 PKG_MAINTAINER:=Steven Barth <steven@midlink.org> include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk define Package/6relayd SECTION:=net CATEGORY:=Network TITLE:=DHCPv6(-PD)/RA Server & Relay DEPENDS:=+kmod-ipv6 endef define Package/6relayd/description 6relayd is a daemon for serving and relaying IPv6 management protocols to configure clients and downstream routers. 6relayd provides server services for RA, stateless DHCPv6, DHCPv6-PD and can be used to relay RA, DHCPv6 and NDP between routed (non-bridged) interfaces in case no delegated prefixes are provided by the upstream router. endef define Package/6relayd/conffiles /etc/config/6relayd endef define Package/6relayd/install $(INSTALL_DIR) $(1)/usr/sbin/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/6relayd $(1)/usr/sbin/ $(INSTALL_BIN) ./files/6relayd-update $(1)/usr/sbin/ $(INSTALL_DIR) $(1)/etc/hotplug.d/iface $(INSTALL_DATA) ./files/6relayd.hotplug $(1)/etc/hotplug.d/iface/30-6relay $(INSTALL_DIR) $(1)/etc/config $(INSTALL_DATA) ./files/6relayd.config $(1)/etc/config/6relayd $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/6relayd.init $(1)/etc/init.d/6relayd endef $(eval $(call BuildPackage,6relayd))