From 7c7e18790c8236ec2bb7581f5337ecff7e31916e Mon Sep 17 00:00:00 2001 From: Lior Dotan Date: Wed, 5 Nov 2008 11:27:17 +0200 Subject: Staging: slicoss: use kzalloc This patch uses kzalloc() where really applicable. Signed-off-by: Lior Dotan Cc: Jiri Slaby Signed-off-by: Greg Kroah-Hartman --- drivers/staging/slicoss/slicoss.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/staging/slicoss/slicoss.c') diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c index 00390362f10..b8ac872e070 100644 --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c @@ -2832,9 +2832,8 @@ static u32 slic_card_locate(struct adapter *adapter) } if (!physcard) { /* no structure allocated for this physical card yet */ - physcard = kmalloc(sizeof(struct physcard *), GFP_ATOMIC); + physcard = kzalloc(sizeof(struct physcard *), GFP_ATOMIC); ASSERT(physcard); - memset(physcard, 0, sizeof(struct physcard *)); DBG_MSG ("\n%s Allocate a PHYSICALcard:\n PHYSICAL_Card[%p]\n\ -- cgit v1.2.3-70-g09d2 From 66615321f59c6ff98b7bf2e9a3caf04ff30c031b Mon Sep 17 00:00:00 2001 From: Lior Dotan Date: Wed, 5 Nov 2008 11:52:17 +0200 Subject: Staging: slicoss: use correct type for memory allcations Fix sizeof to use the right type Signed-off-by: Lior Dotan Cc: Jiri Slaby Signed-off-by: Greg Kroah-Hartman --- drivers/staging/slicoss/slicoss.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/staging/slicoss/slicoss.c') diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c index b8ac872e070..d256aef9c43 100644 --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c @@ -323,7 +323,7 @@ static void slic_init_adapter(struct net_device *netdev, index, pslic_handle, adapter->pfree_slic_handles, pslic_handle->next);*/ adapter->pshmem = (struct slic_shmem *) pci_alloc_consistent(adapter->pcidev, - sizeof(struct slic_shmem *), + sizeof(struct slic_shmem), &adapter-> phys_shmem); /* @@ -1431,7 +1431,7 @@ static void slic_init_cleanup(struct adapter *adapter) DBG_MSG("adapter[%p] port %d pshmem[%p] FreeShmem ", adapter, adapter->port, (void *) adapter->pshmem); pci_free_consistent(adapter->pcidev, - sizeof(struct slic_shmem *), + sizeof(struct slic_shmem), adapter->pshmem, adapter->phys_shmem); adapter->pshmem = NULL; adapter->phys_shmem = (dma_addr_t) NULL; @@ -2832,7 +2832,7 @@ static u32 slic_card_locate(struct adapter *adapter) } if (!physcard) { /* no structure allocated for this physical card yet */ - physcard = kzalloc(sizeof(struct physcard *), GFP_ATOMIC); + physcard = kzalloc(sizeof(struct physcard), GFP_ATOMIC); ASSERT(physcard); DBG_MSG -- cgit v1.2.3-70-g09d2 From 470c5736fffa16923a3d27a0f365b691086a014d Mon Sep 17 00:00:00 2001 From: Lior Dotan Date: Wed, 5 Nov 2008 16:02:20 +0200 Subject: Staging: slicoss: use request_firmware This should make the driver use request_firmware() instead of a static firmware. Some obvious things are missing: 1) The unneeded header files are not removed yet. This is to keep the patch size small. 2) The .bin files are missing so the driver doesn't have what to load. 3) Testing. None of this was tested. It does compiles OK though :) Signed-off-by: Lior Dotan Signed-off-by: Greg Kroah-Hartman --- drivers/staging/slicoss/slic.h | 34 +++++++++++++++++ drivers/staging/slicoss/slicoss.c | 77 +++++++++++++++++++++++++++------------ 2 files changed, 87 insertions(+), 24 deletions(-) (limited to 'drivers/staging/slicoss/slicoss.c') diff --git a/drivers/staging/slicoss/slic.h b/drivers/staging/slicoss/slic.h index 0d5dc24c0b7..a8ea59d7ea1 100644 --- a/drivers/staging/slicoss/slic.h +++ b/drivers/staging/slicoss/slic.h @@ -41,6 +41,40 @@ #ifndef __SLIC_DRIVER_H__ #define __SLIC_DRIVER_H__ +/* firmware stuff */ +#define OASIS_UCODE_VERS_STRING "1.2" +#define OASIS_UCODE_VERS_DATE "2006/03/27 15:10:37" +#define OASIS_UCODE_HOSTIF_ID 3 + +static s32 ONumSections = 0x2; +static u32 OSectionSize[] = { + 0x00004000, 0x00010000, +}; + +static u32 OSectionStart[] = { + 0x00000000, 0x00008000, +}; + +#define MOJAVE_UCODE_VERS_STRING "1.2" +#define MOJAVE_UCODE_VERS_DATE "2006/03/27 15:12:22" +#define MOJAVE_UCODE_HOSTIF_ID 3 + +static s32 MNumSections = 0x2; +static u32 MSectionSize[] = +{ + 0x00008000, 0x00010000, +}; + +static u32 MSectionStart[] = +{ + 0x00000000, 0x00008000, +}; + +#define GB_RCVUCODE_VERS_STRING "1.2" +#define GB_RCVUCODE_VERS_DATE "2006/03/27 15:12:15" +static u32 OasisRcvUCodeLen = 512; +static u32 GBRcvUCodeLen = 512; +#define SECTION_SIZE 65536 struct slic_spinlock { spinlock_t lock; diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c index d256aef9c43..bf7da8f898a 100644 --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c @@ -94,6 +94,7 @@ #include #include +#include #include #include #include @@ -105,15 +106,6 @@ #include #include "slicinc.h" -#include "gbdownload.h" -#include "gbrcvucode.h" -#include "oasisrcvucode.h" - -#ifdef DEBUG_MICROCODE -#include "oasisdbgdownload.h" -#else -#include "oasisdownload.h" -#endif #if SLIC_DUMP_ENABLED #include "slicdump.h" @@ -2186,6 +2178,9 @@ static void slic_card_cleanup(struct sliccard *card) static int slic_card_download_gbrcv(struct adapter *adapter) { + const struct firmware *fw; + const char *file = ""; + int ret; __iomem struct slic_regs *slic_regs = adapter->slic_regs; u32 codeaddr; unsigned char *instruction = NULL; @@ -2193,12 +2188,32 @@ static int slic_card_download_gbrcv(struct adapter *adapter) switch (adapter->devid) { case SLIC_2GB_DEVICE_ID: - instruction = (unsigned char *)&OasisRcvUCode[0]; - rcvucodelen = OasisRcvUCodeLen; + file = "oasis_rcv.bin"; break; case SLIC_1GB_DEVICE_ID: - instruction = (unsigned char *)&GBRcvUCode[0]; - rcvucodelen = GBRcvUCodeLen; + file = "gb_rcv.bin"; + break; + default: + ASSERT(0); + break; + } + + ret = request_firmware(&fw, file, &adapter->pcidev->dev); + if (ret) { + printk(KERN_ERR "SLICOSS: Failed to load firmware %s\n", file); + return ret; + } + + instruction = (unsigned char *)fw->data; + rcvucodelen = fw->size; + switch (adapter->devid) { + case SLIC_2GB_DEVICE_ID: + if (rcvucodelen != OasisRcvUCodeLen) + return -EINVAL; + break; + case SLIC_1GB_DEVICE_ID: + if (rcvucodelen != GBRcvUCodeLen) + return -EINVAL; break; default: ASSERT(0); @@ -2225,13 +2240,16 @@ static int slic_card_download_gbrcv(struct adapter *adapter) } /* download finished */ + release_firmware(fw); WRITE_REG(slic_regs->slic_rcv_wcs, SLIC_RCVWCS_FINISH, FLUSH); - return 0; } static int slic_card_download(struct adapter *adapter) { + const struct firmware *fw; + const char *file = ""; + int ret; u32 section; int thissectionsize; int codeaddr; @@ -2255,6 +2273,7 @@ static int slic_card_download(struct adapter *adapter) case SLIC_2GB_DEVICE_ID: /* DBG_MSG ("slicoss: %s devid==SLIC_2GB_DEVICE_ID sections[%x]\n", __func__, (uint) ONumSections); */ + file = "slic_oasis.bin"; numsects = ONumSections; for (i = 0; i < numsects; i++) { sectsize[i] = OSectionSize[i]; @@ -2264,6 +2283,7 @@ static int slic_card_download(struct adapter *adapter) case SLIC_1GB_DEVICE_ID: /* DBG_MSG ("slicoss: %s devid==SLIC_1GB_DEVICE_ID sections[%x]\n", __func__, (uint) MNumSections); */ + file = "slic_mojave.bin"; numsects = MNumSections; for (i = 0; i < numsects; i++) { sectsize[i] = MSectionSize[i]; @@ -2274,26 +2294,33 @@ static int slic_card_download(struct adapter *adapter) ASSERT(0); break; } + ret = request_firmware(&fw, file, &adapter->pcidev->dev); + if (ret) { + printk(KERN_ERR "SLICOSS: Failed to load firmware %s\n", file); + return ret; + } ASSERT(numsects <= 3); for (section = 0; section < numsects; section++) { switch (adapter->devid) { case SLIC_2GB_DEVICE_ID: - instruction = (u32 *) &OasisUCode[section][0]; + instruction = (u32 *)(fw->data + (SECTION_SIZE * + section)); baseaddress = sectstart[section]; thissectionsize = sectsize[section] >> 3; lastinstruct = - (u32 *) &OasisUCode[section][sectsize[section] - - 8]; + (u32 *)(fw->data + (SECTION_SIZE * section) + + sectsize[section] - 8); break; case SLIC_1GB_DEVICE_ID: - instruction = (u32 *) &MojaveUCode[section][0]; + instruction = (u32 *)(fw->data + (SECTION_SIZE * + section)); baseaddress = sectstart[section]; thissectionsize = sectsize[section] >> 3; lastinstruct = - (u32 *) &MojaveUCode[section][sectsize[section] - - 8]; + (u32 *)(fw->data + (SECTION_SIZE * section) + + sectsize[section] - 8); break; default: ASSERT(0); @@ -2329,10 +2356,12 @@ static int slic_card_download(struct adapter *adapter) for (section = 0; section < numsects; section++) { switch (adapter->devid) { case SLIC_2GB_DEVICE_ID: - instruction = (u32 *)&OasisUCode[section][0]; + instruction = (u32 *)fw->data + (SECTION_SIZE * + section); break; case SLIC_1GB_DEVICE_ID: - instruction = (u32 *)&MojaveUCode[section][0]; + instruction = (u32 *)fw->data + (SECTION_SIZE * + section); break; default: ASSERT(0); @@ -2374,13 +2403,13 @@ static int slic_card_download(struct adapter *adapter) thissectionsize[%x] failure[%x]\n", __func__, codeaddr, thissectionsize, failure); - + release_firmware(fw); return -EIO; } } } /* DBG_MSG ("slicoss: Compare done\n");*/ - + release_firmware(fw); /* Everything OK, kick off the card */ mdelay(10); WRITE_REG(slic_regs->slic_wcs, SLIC_WCS_START, FLUSH); -- cgit v1.2.3-70-g09d2