diff options
author | Philip Balister <philip@balister.org> | 2007-09-29 20:43:38 +0000 |
---|---|---|
committer | Philip Balister <philip@balister.org> | 2007-09-29 20:43:38 +0000 |
commit | ea52a2ce713343961a660f74efd5fbff95668f94 (patch) | |
tree | 4c83af5a077ed985c6ac4c73f04995c29e56ab5f /packages | |
parent | 6feecb2942024a270c39b50d6892be3f421dcab6 (diff) |
wifistix : Add driver for Marvell cf8385 wireless interface driver for gumstix.
Diffstat (limited to 'packages')
14 files changed, 703 insertions, 0 deletions
diff --git a/packages/wifistix/.mtn2git_empty b/packages/wifistix/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/wifistix/.mtn2git_empty diff --git a/packages/wifistix/wifistix-modules/.mtn2git_empty b/packages/wifistix/wifistix-modules/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/wifistix/wifistix-modules/.mtn2git_empty diff --git a/packages/wifistix/wifistix-modules/2.6.17-new-pcmcia-layer.patch b/packages/wifistix/wifistix-modules/2.6.17-new-pcmcia-layer.patch new file mode 100644 index 0000000000..209df1b121 --- /dev/null +++ b/packages/wifistix/wifistix-modules/2.6.17-new-pcmcia-layer.patch @@ -0,0 +1,484 @@ +Index: src_cf8385/io/mcf/cf_io.c +=================================================================== +--- src_cf8385.orig/io/mcf/cf_io.c ++++ src_cf8385/io/mcf/cf_io.c +@@ -49,17 +49,15 @@ Change log: + + dev_info_t cfio_dev_info = "mcf25"; + +-dev_link_t *dev_list = NULL; +- +-MODULE_PARM(interrupt_steer, "1-4i"); +- +-INT_MODULE_PARM(irq_mask, CF_IRQMASK); +- + /* Module Variables */ + static int interrupt_steer[IRQINFO2_LEN] = { -1 }; ++static u_int irq_mask = CF_IRQMASK; ++ ++module_param_array(interrupt_steer, int, NULL, 0); ++module_param(irq_mask, int, 0); + + typedef struct _if_pcmcia_info_t { +- dev_link_t link; ++ struct pcmcia_device *p_dev; + dev_node_t node; + int stop; + struct bus_operations *bus; +@@ -81,22 +79,9 @@ struct cf_card_rec cardp; + * @param arg pointer to dev_link_t + * @return N/A + */ +-static void cf_release(ulong arg) ++static void mv8385_cf_release(struct pcmcia_device *arg) + { +- dev_link_t *link = (dev_link_t *) arg; +- +- link->dev = NULL; +- +- link->conf.Vcc = 0; +- pcmcia_release_configuration(link->handle); +- if (link->io.NumPorts1) +- pcmcia_release_io(link->handle, &link->io); +- +- if (link->irq.AssignedIRQ) +- pcmcia_release_irq(link->handle, &link->irq); +- +- link->state &= ~DEV_CONFIG; +- ++ pcmcia_disable_device(arg); + } /* cf_release */ + + +@@ -107,41 +92,9 @@ static void cf_release(ulong arg) + * @return N/A + */ + +-static void cf_detach(dev_link_t * link) ++static void mv8385_cf_detach(struct pcmcia_device * link) + { +- dev_link_t **p; +- +- for (p = &dev_list; *p; p = &(*p)->next) +- if (*p == link) +- break; +- +- if (*p == NULL) +- return; +- +-#ifdef LINUX_2_4 +- del_timer_sync(&link->release); +-#endif +- +- if (((if_pcmcia_info_t *) link->priv)->eth_dev) { +- printk("Before calling wlan_remove function\n"); +- cardp.remove(&cardp); +- printk("After calling wlan_remove function\n"); +- } +- +- if (link->state & DEV_CONFIG) { +- cf_release((u32) link); +- } +- +- ((if_pcmcia_info_t *) link->priv)->eth_dev = NULL; +- +- if (link->handle) { +-#ifdef LINUX_2_4 +- pcmcia_reset_card(link->handle, NULL); +-#endif +- pcmcia_deregister_client(link->handle); +- } +- +- *p = link->next; ++ mv8385_cf_release(link); + /* This points to the parent if_pcmcia_info_t struct */ + if (link->priv) + kfree(link->priv); +@@ -152,9 +105,8 @@ static void cf_detach(dev_link_t * link) + * @param link pointer to dev_link_t + * @return N/A + */ +-static void cf_config(dev_link_t * link) ++static int mv8385_cf_config(struct pcmcia_device * link) + { +- client_handle_t handle = link->handle; + if_pcmcia_info_t *dev = link->priv; + tuple_t tuple; + cisparse_t parse; +@@ -169,22 +121,14 @@ static void cf_config(dev_link_t * link) + tuple.TupleDataMax = sizeof(buf); + tuple.TupleOffset = 0; + +- if (pcmcia_get_first_tuple(handle, &tuple)) +- goto onerror; +- if (pcmcia_get_tuple_data(handle, &tuple)) +- goto onerror; +- if (pcmcia_parse_tuple(handle, &tuple, &parse)) +- goto onerror; ++ if(pcmcia_get_first_tuple(link, &tuple)) goto onerror; ++ if(pcmcia_get_tuple_data(link, &tuple)) goto onerror; ++ if(pcmcia_parse_tuple(link, &tuple, &parse)) goto onerror; + + link->conf.ConfigBase = parse.config.base; + link->conf.Present = parse.config.rmask[0]; + +- link->state |= DEV_CONFIG; +- +- if (pcmcia_get_configuration_info(handle, &conf)) +- goto onerror; +- +- link->conf.Vcc = conf.Vcc; ++ if(pcmcia_get_configuration_info(link, &conf)) goto onerror; + + /* + The Configuration table consists of a series of configuration table +@@ -194,15 +138,9 @@ static void cf_config(dev_link_t * link) + + tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; + +- if (pcmcia_get_first_tuple(handle, &tuple)) +- goto onerror; +- +- if (pcmcia_get_tuple_data(handle, &tuple) != CS_SUCCESS) +- goto onerror; +- +- if (pcmcia_parse_tuple(handle, &tuple, &parse) != CS_SUCCESS) +- goto onerror; +- ++ if(pcmcia_get_first_tuple(link, &tuple)) goto onerror; ++ if (pcmcia_get_tuple_data(link, &tuple) != CS_SUCCESS || ++ pcmcia_parse_tuple(link, &tuple, &parse) != CS_SUCCESS) goto onerror; + + link->conf.ConfigIndex = cfg->index; + +@@ -237,19 +175,18 @@ static void cf_config(dev_link_t * link) + link->io.NumPorts2 = io->win[1].len; + } + +- if (pcmcia_request_io(link->handle, &link->io) ++ if (pcmcia_request_io(link, &link->io) + != CS_SUCCESS) { +- pcmcia_release_io(link->handle, &link->io); + printk("Request IO Error !!\n"); + goto onerror; + } + } + + if (link->conf.Attributes & CONF_ENABLE_IRQ) +- if (pcmcia_request_irq(link->handle, &link->irq)) ++ if (pcmcia_request_irq(link, &link->irq)) + goto onerror; + +- if (pcmcia_request_configuration(link->handle, &link->conf)) ++ if (pcmcia_request_configuration(link, &link->conf)) + goto onerror; + + cardp.irq = link->irq.AssignedIRQ; +@@ -271,97 +208,40 @@ static void cf_config(dev_link_t * link) + + strcpy(dev->node.dev_name, cardp.eth_dev->name); + dev->node.major = dev->node.minor = 0; +- link->dev = &dev->node; ++ link->dev_node = &dev->node; + +- link->state &= ~DEV_CONFIG_PENDING; +- return; ++ return 0; + + onerror: + printk("card configuration failed...calling cf_release function\n"); +- cf_release((u32) link); +- link->state &= ~DEV_CONFIG_PENDING; ++ mv8385_cf_release(link); + cardp.flag = 1; ++ return -ENODEV; + + } /* cf_config */ + + + /** +- * @brief CF BUS driver Event handler +- * @param event event id +- * @param priority event priority +- * @param args pointer to event_callback_args_t +- * @return 0 +- */ +-static int cf_event(event_t event, int priority, event_callback_args_t *args) +-{ +- dev_link_t *link = args->client_data; +- if_pcmcia_info_t *dev = link->priv; +- +- switch (event) { +- case CS_EVENT_CARD_INSERTION: +- link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; +-#ifdef LINUX_2_4 +- dev->bus = args->bus; +-#endif +- cf_config(link); +- break; +- +- case CS_EVENT_CARD_REMOVAL: +- link->state &= ~DEV_PRESENT; +- printk("card removal event detected\n"); +- if (link->state & DEV_CONFIG) { +- ((if_pcmcia_info_t *) link->priv)->stop = 1; +- printk("Before calling release function\n"); +-#ifdef LINUX_2_4 +-#define REMOVE_TIMEOUT (HZ/20) +- mod_timer(&link->release, jiffies + REMOVE_TIMEOUT); +-#else +- cf_detach(link); +-#endif +- printk("After calling release function\n"); +- } +- break; +- case CS_EVENT_CARD_RESET: +- if (link->state & DEV_CONFIG) { +- pcmcia_request_configuration(link->handle, &link->conf); +- } +- dev->stop = 0; +- break; +- } +- +- return 0; +-} /* cf_event */ +- +-/** + * @brief attach CF BUS driver + * @return pointer to dev_link_t + */ + +-static dev_link_t *cf_attach(void) ++static int mv8385_cf_probe(struct pcmcia_device *link) + { + u8 i; +- int status; + if_pcmcia_info_t *ifinfo; +- dev_link_t *link; +- client_reg_t client_reg; + + printk("Entering cf_attach()\n"); + + /* Allocate space for PCMCIA information */ + if (!(ifinfo = kmalloc(sizeof(if_pcmcia_info_t), GFP_KERNEL))) { +- return NULL; ++ return -ENOMEM; + } + + memset(ifinfo, 0, sizeof(if_pcmcia_info_t)); +- link = &ifinfo->link; ++ ifinfo->p_dev = link; + link->priv = ifinfo; + +-#ifdef LINUX_2_4 +- init_timer(&link->release); +- link->release.function = &cf_release; +- link->release.data = (ulong) link; +-#endif +- + link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; + link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; + +@@ -380,38 +260,13 @@ static dev_link_t *cf_attach(void) + link->irq.Handler = NULL; + + link->conf.Attributes = 0; +-#define VCC_VALUE 50 +- link->conf.Vcc = VCC_VALUE; +- link->conf.Vpp1 = 0; +- link->conf.Vpp2 = 0; ++ link->conf.Vpp = 0; + link->conf.IntType = INT_MEMORY_AND_IO; + link->conf.ConfigIndex = 1; + link->conf.Present = PRESENT_OPTION; + +- link->next = dev_list; +- dev_list = link; +- client_reg.dev_info = &cfio_dev_info; +- client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE; +- client_reg.EventMask = CS_EVENT_CARD_INSERTION | +- CS_EVENT_CARD_REMOVAL | CS_EVENT_CARD_RESET; +- client_reg.event_handler = &cf_event; +- client_reg.event_callback_args.client_data = link; +- client_reg.Version = CF_VERSION; +- +- printk("Before registering the client\n"); +- +- if ((status = pcmcia_register_client(&link->handle, +- &client_reg)) != CS_SUCCESS) { +- printk("Registering the client failed\n"); +- CS_ERROR(link->handle, RegisterClient, status); +- cf_detach(link); +- return NULL; +- } +- +- printk("Leaving cf_attach()\n"); +- +- return link; +-} /* cf_attach */ ++ return mv8385_cf_config(link); ++} /* cf_probe */ + + + #ifndef LINUX_2_4 +@@ -428,9 +283,8 @@ static struct pcmcia_driver cfio_cs_driv + .drv = { + .name = "mcf25" + }, +- .attach = cf_attach, +- .detach = cf_detach, +- .event = cf_event, ++ .probe = mv8385_cf_probe, ++ .remove = mv8385_cf_detach, + .id_table = cfio_ids, + }; + #endif +@@ -449,28 +303,11 @@ static struct pcmcia_driver cfio_cs_driv + u32 *register_cf_driver(cf_notifier_fn_add add, + cf_notifier_fn_remove remove, void *arg) + { +-#ifdef LINUX_2_4 +- servinfo_t serv; +-#endif +- + cardp.add = add; + cardp.remove = remove; + cardp.host_int_mask = 0; +- +-#ifdef LINUX_2_4 +- pcmcia_get_card_services_info(&serv); +- +- if (serv.Revision != CS_RELEASE_CODE) { +- return NULL; +- } +-#endif +- + printk("Before register driver\n"); +-#ifdef LINUX_2_4 +- register_pccard_driver(&cfio_dev_info, &cf_attach, &cf_detach); +-#else + pcmcia_register_driver(&cfio_cs_driver); +-#endif + printk("After register driver\n"); + + return (u32 *) &cardp; +@@ -482,22 +319,7 @@ u32 *register_cf_driver(cf_notifier_fn_a + */ + void unregister_cf_driver( void ) + { +- +-#ifdef LINUX_2_4 +- unregister_pccard_driver(&cfio_dev_info); +-#else + pcmcia_unregister_driver(&cfio_cs_driver); +-#endif +- +- cf_detach(dev_list); +- +- while (dev_list != NULL) { +-#ifdef LINUX_2_4 +- del_timer(&dev_list->release); +-#endif +- if (dev_list->state & DEV_CONFIG) +- cf_release((u32) dev_list); +- } + } + + +@@ -508,6 +330,8 @@ void unregister_cf_driver( void ) + */ + s16 cfio_read_cfg_reg(void* priv) + { ++ if_pcmcia_info_t *ifinfo = (if_pcmcia_info_t *)priv; ++ + conf_reg_t reg; + + reg.Function = 0; +@@ -515,7 +339,7 @@ s16 cfio_read_cfg_reg(void* priv) + reg.Offset = 0; + reg.Value = 0; + +- pcmcia_access_configuration_register(dev_list->handle, ®); ++ pcmcia_access_configuration_register(ifinfo->p_dev, ®); + return 0; + } + +Index: src_cf8385/io/mcf/cfio_io.h +=================================================================== +--- src_cf8385.orig/io/mcf/cfio_io.h ++++ src_cf8385/io/mcf/cfio_io.h +@@ -82,7 +82,6 @@ typedef void * (*cf_notifier_fn_add) (s + typedef int (*cf_notifier_fn_remove) (struct cf_card_rec *); + + extern dev_info_t cfio_dev_info; +-extern dev_link_t *dev_list; + + extern struct cf_card_rec cardp; + s16 cfio_read_cfg_reg(void *priv); +Index: src_cf8385/if/if_mcf/if_cf.c +=================================================================== +--- src_cf8385.orig/if/if_mcf/if_cf.c ++++ src_cf8385/if/if_mcf/if_cf.c +@@ -32,11 +32,9 @@ Change log: + do { \ + tuple.DesiredTuple = X; \ + \ +- if (!handle) \ ++ if (pcmcia_get_first_tuple((&cisinfo), &tuple)) \ + goto error; \ +- if (pcmcia_get_first_tuple(handle, &tuple)) \ +- goto error; \ +- if (pcmcia_get_tuple_data(handle, &tuple)) \ ++ if (pcmcia_get_tuple_data((&cisinfo), &tuple)) \ + goto error; \ + \ + cisbuf[ofs++] = tuple.TupleCode; \ +@@ -48,7 +46,7 @@ Change log: + int *register_cf_driver(cf_notifier_fn_add ,cf_notifier_fn_remove , void *); + void unregister_cf_driver(void); + +-static dev_link_t cisinfo; ++static struct pcmcia_device cisinfo; + + static u16 int_cause = 0; + +@@ -771,7 +769,6 @@ int sbi_host_to_card(wlan_private *priv, + int sbi_get_cis_info(wlan_private *priv) + { + wlan_adapter *Adapter = priv->adapter; +- client_handle_t handle = cisinfo.handle; + tuple_t tuple; + char buf[64], cisbuf[512]; + int ofs=0, count=6; +@@ -793,9 +790,9 @@ int sbi_get_cis_info(wlan_private *priv) + + do + { +- if (pcmcia_get_next_tuple(handle, &tuple)) ++ if (pcmcia_get_next_tuple((&cisinfo), &tuple)) + goto error; +- if (pcmcia_get_tuple_data(handle, &tuple)) ++ if (pcmcia_get_tuple_data((&cisinfo), &tuple)) + goto error; + + cisbuf[ofs++] = tuple.TupleCode; +Index: src_cf8385/wlan/wlan_fw.c +=================================================================== +--- src_cf8385.orig/wlan/wlan_fw.c ++++ src_cf8385/wlan/wlan_fw.c +@@ -21,11 +21,11 @@ Change log: + ********************************************************/ + + +-u8 *helper_name=NULL; +-u8 *fw_name=NULL; ++static char *helper_name=NULL; ++static char *fw_name=NULL; + +-MODULE_PARM( helper_name, "s"); +-MODULE_PARM( fw_name, "s" ); ++module_param( helper_name, charp, 0); ++module_param( fw_name, charp, 0); + + + /******************************************************** diff --git a/packages/wifistix/wifistix-modules/bad-cast.patch b/packages/wifistix/wifistix-modules/bad-cast.patch new file mode 100644 index 0000000000..5f4f48c27b --- /dev/null +++ b/packages/wifistix/wifistix-modules/bad-cast.patch @@ -0,0 +1,13 @@ +Index: src_cf8385/wlan/wlan_wext.c +=================================================================== +--- src_cf8385.orig/wlan/wlan_wext.c ++++ src_cf8385/wlan/wlan_wext.c +@@ -1023,7 +1023,7 @@ static int wlan_txcontrol(wlan_private * + return -EFAULT; + } + copy_from_user(&data,wrq->u.data.pointer,sizeof(int)); +- (u32)Adapter->PktTxCtrl = data; ++ Adapter->PktTxCtrl = (u32)data; + } + + wrq->u.data.length = 1; diff --git a/packages/wifistix/wifistix-modules/fix-essid-truncation.patch b/packages/wifistix/wifistix-modules/fix-essid-truncation.patch new file mode 100644 index 0000000000..c9185eab03 --- /dev/null +++ b/packages/wifistix/wifistix-modules/fix-essid-truncation.patch @@ -0,0 +1,13 @@ +Index: src_cf8385/wlan/wlan_join.c +=================================================================== +--- src_cf8385.orig/wlan/wlan_join.c ++++ src_cf8385/wlan/wlan_join.c +@@ -213,7 +213,7 @@ int wlan_set_essid(struct net_device* de + } else { + /* Set the SSID */ + memcpy(reqSSID.Ssid, extra, dwrq->length); +- reqSSID.SsidLength = dwrq->length - 1; ++ reqSSID.SsidLength = dwrq->length; + } + + PRINTM(INFO, "Requested new SSID = %s\n", diff --git a/packages/wifistix/wifistix-modules/install-properly.patch b/packages/wifistix/wifistix-modules/install-properly.patch new file mode 100644 index 0000000000..ebc00ed867 --- /dev/null +++ b/packages/wifistix/wifistix-modules/install-properly.patch @@ -0,0 +1,14 @@ +Index: src_cf8385/Makefile +=================================================================== +--- src_cf8385.orig/Makefile ++++ src_cf8385/Makefile +@@ -2014,8 +2014,7 @@ endif + + ifeq ($(CONFIG_CF),y) + ifeq ($(KVER),2.6) +- cp -f cfio.$(MODEXT) $(INSTALLDIR)/ +- cp -f mcf25.$(MODEXT) $(INSTALLDIR)/ ++ $(MAKE) -C $(KERNELDIR) M=$(PWD) INSTALL_MOD_PATH="$(INSTALL_MOD_PATH)" modules_install + else + cp -f io/mcf/cfio.$(MODEXT) $(INSTALLDIR)/ + $(LD) -r -o $(INSTALLDIR)/mcf25.$(MODEXT) cf8xxx.$(MODEXT) diff --git a/packages/wifistix/wifistix-modules/marvell-devicename.patch b/packages/wifistix/wifistix-modules/marvell-devicename.patch new file mode 100644 index 0000000000..4846b0947a --- /dev/null +++ b/packages/wifistix/wifistix-modules/marvell-devicename.patch @@ -0,0 +1,11 @@ +--- src_cf8385-orig/wlan/wlan_main.c 2006-05-06 17:24:51.000000000 -0700 ++++ src_cf8385/wlan/wlan_main.c 2006-05-06 17:26:14.000000000 -0700 +@@ -873,7 +873,7 @@ + #ifdef LINUX_2_4 + if (!(dev = init_etherdev(dev, sizeof(wlan_private)))) { + #else +- if (!(dev = alloc_etherdev(sizeof(wlan_private)))) { ++ if (!(dev = alloc_netdev(sizeof(wlan_private), "mwlan%d", ether_setup))) { + #endif + PRINTM(MSG, "Init ethernet device failed!\n"); + return NULL; diff --git a/packages/wifistix/wifistix-modules/marvell-devicetable.patch b/packages/wifistix/wifistix-modules/marvell-devicetable.patch new file mode 100644 index 0000000000..5d726a582b --- /dev/null +++ b/packages/wifistix/wifistix-modules/marvell-devicetable.patch @@ -0,0 +1,25 @@ +--- src_cf8385/io/mcf/cf_io-orig.c 2006-04-29 16:26:16.000000000 -0700 ++++ src_cf8385/io/mcf/cf_io.c 2006-04-29 16:32:59.000000000 -0700 +@@ -415,6 +415,14 @@ + + + #ifndef LINUX_2_4 ++static struct pcmcia_device_id cfio_ids[] = { ++ PCMCIA_DEVICE_MANF_CARD(0x02df, 0x8103), ++ PCMCIA_DEVICE_PROD_ID12("Marvell", "88W8300 802.11g PC Card", ++ 0xE86284BA, 0x8C78E0CD), ++ PCMCIA_DEVICE_NULL, ++}; ++MODULE_DEVICE_TABLE(pcmcia, cfio_ids); ++ + static struct pcmcia_driver cfio_cs_driver = { + .owner = THIS_MODULE, + .drv = { +@@ -423,6 +431,7 @@ + .attach = cf_attach, + .detach = cf_detach, + .event = cf_event, ++ .id_table = cfio_ids, + }; + #endif + diff --git a/packages/wifistix/wifistix-modules/marvell-gumstix.patch b/packages/wifistix/wifistix-modules/marvell-gumstix.patch new file mode 100644 index 0000000000..5c336e3fa1 --- /dev/null +++ b/packages/wifistix/wifistix-modules/marvell-gumstix.patch @@ -0,0 +1,24 @@ +--- src_cf8385/Makefile 2006-03-06 16:15:36.000000000 -0800 ++++ /tmp/Makefile 2006-04-28 15:45:26.000000000 -0700 +@@ -36,9 +36,6 @@ + # Valid options for OMAP1510: 15, 16 + KERNEL_WE=16 + +-CC= $(CROSS)gcc +-LD= $(CROSS)ld +- + BACKUP= /root/backup + YMD= `date +%Y%m%d%H%M` + +@@ -1095,6 +1092,11 @@ + CROSS=$(TOOLPATH_iMX21)/arm-linux- + endif + endif ++ifeq ($(CONFIG_GUMSTIX), y) ++ INSTALLDIR=$(TARGET_DIR) ++ TOOLPATH=$(STAGING_DIR)/bin ++ CFLAGS += -DNOMEMCOPY ++endif + ifeq ($(CONFIG_BULVERDE), y) + INSTALLDIR=$(BULVERDE_DIR) + ifeq ($(CONFIG_SD),y) diff --git a/packages/wifistix/wifistix-modules/no-more-config-h.patch b/packages/wifistix/wifistix-modules/no-more-config-h.patch new file mode 100644 index 0000000000..8bd7a14e58 --- /dev/null +++ b/packages/wifistix/wifistix-modules/no-more-config-h.patch @@ -0,0 +1,24 @@ +Index: src_cf8385/io/mcf/cfio_io.h +=================================================================== +--- src_cf8385.orig/io/mcf/cfio_io.h ++++ src_cf8385/io/mcf/cfio_io.h +@@ -51,7 +51,6 @@ Change log: + #include <linux/skbuff.h> + #include <linux/if_arp.h> + #include <linux/ioport.h> +-#include <linux/config.h> + + #include <pcmcia/version.h> + #include <pcmcia/cs_types.h> +Index: src_cf8385/os/linux/os_headers.h +=================================================================== +--- src_cf8385.orig/os/linux/os_headers.h ++++ src_cf8385/os/linux/os_headers.h +@@ -32,7 +32,6 @@ + #include <linux/proc_fs.h> + #include <linux/ptrace.h> + #include <linux/string.h> +-#include <linux/config.h> + #include <linux/ioport.h> + + diff --git a/packages/wifistix/wifistix-modules/realtime-kernel.patch b/packages/wifistix/wifistix-modules/realtime-kernel.patch new file mode 100644 index 0000000000..49a86c29de --- /dev/null +++ b/packages/wifistix/wifistix-modules/realtime-kernel.patch @@ -0,0 +1,25 @@ +Index: src_cf8385/if/if_mcf/if_cf.c +=================================================================== +--- src_cf8385.orig/if/if_mcf/if_cf.c ++++ src_cf8385/if/if_mcf/if_cf.c +@@ -238,10 +238,9 @@ static void init_cf_addr(wlan_private *p + * @brief This function is interrupt handler. + * @param iqr interrupt number + * @param dev_id pointer to net_device structure +- * @param regs pointer to pt_regs structure + * @return n/a + */ +-static IRQ_RET_TYPE cf_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++static IRQ_RET_TYPE cf_interrupt(int irq, void *dev_id) + { + struct net_device *dev = dev_id; + wlan_private *priv = (wlan_private *) dev->priv; +@@ -710,7 +709,7 @@ int sbi_register_dev(wlan_private * priv + + PRINTM(INFO, "IRQ %d\n", cardp.irq); + +- ret = request_irq(cardp.irq, cf_interrupt, SA_SHIRQ, ++ ret = request_irq(cardp.irq, cf_interrupt, IRQF_SHARED, + "cf_irq", priv->wlan_dev.netdev ); + + if (ret != 0) diff --git a/packages/wifistix/wifistix-modules/sbi-no-inline.patch b/packages/wifistix/wifistix-modules/sbi-no-inline.patch new file mode 100644 index 0000000000..204ebc78b5 --- /dev/null +++ b/packages/wifistix/wifistix-modules/sbi-no-inline.patch @@ -0,0 +1,13 @@ +--- src_cf8385/wlan/sbi.h ++++ src_cf8385/wlan/sbi.h +@@ -92,8 +92,8 @@ + u16 npayload); + int sbi_enable_host_int(wlan_private *); + +-inline int sbi_exit_deep_sleep(wlan_private *); +-inline int sbi_reset_deepsleep_wakeup(wlan_private *); ++int sbi_exit_deep_sleep(wlan_private *); ++int sbi_reset_deepsleep_wakeup(wlan_private *); + + #ifdef ENABLE_PM + inline int sbi_suspend(wlan_private *); diff --git a/packages/wifistix/wifistix-modules/struct-changes.patch b/packages/wifistix/wifistix-modules/struct-changes.patch new file mode 100644 index 0000000000..d935796900 --- /dev/null +++ b/packages/wifistix/wifistix-modules/struct-changes.patch @@ -0,0 +1,13 @@ +Index: src_cf8385/wlan/wlan_main.c +=================================================================== +--- src_cf8385.orig/wlan/wlan_main.c ++++ src_cf8385/wlan/wlan_main.c +@@ -912,7 +912,7 @@ static wlan_private *wlan_add_card(void + dev->watchdog_timeo = WLAN_WATCHDOG_TIMEOUT; + + #ifdef WIRELESS_EXT +- dev->get_wireless_stats = wlan_get_wireless_stats; ++ wlan_handler_def.get_wireless_stats = wlan_get_wireless_stats; + dev->wireless_handlers = (struct iw_handler_def *) &wlan_handler_def; + #endif + #endif /* linux */ diff --git a/packages/wifistix/wifistix-modules_5.0.16.p0.bb b/packages/wifistix/wifistix-modules_5.0.16.p0.bb new file mode 100644 index 0000000000..abd8a8c246 --- /dev/null +++ b/packages/wifistix/wifistix-modules_5.0.16.p0.bb @@ -0,0 +1,44 @@ +DESCRIPTION = "Linux Driver for Marvel 88W8385 802.11b/g Wifi Module used in Gumstix daughtercards" +SECTION = "base" +PRIORITY = "optional" +HOMEPAGE = "http://www.gumstix.com" +LICENSE = "GPL" +RDEPENDS = "kernel (${KERNEL_VERSION})" +DEPENDS = "virtual/kernel" +PR = "r0" + +SRC_URI = "http://files.gumstix.com/cf8385-5.0.16.p0-26306.tbz \ + file://marvell-devicename.patch;patch=1 \ + file://marvell-devicetable.patch;patch=1 \ + file://marvell-gumstix.patch;patch=1 \ + file://sbi-no-inline.patch;patch=1 \ + file://2.6.17-new-pcmcia-layer.patch;patch=1 \ + file://bad-cast.patch;patch=1 \ + file://struct-changes.patch;patch=1 \ + file://no-more-config-h.patch;patch=1 \ + file://realtime-kernel.patch;patch=1 \ + file://install-properly.patch;patch=1 \ + file://fix-essid-truncation.patch;patch=1" + +S = "${WORKDIR}/src_cf8385" + +inherit module-base + +do_compile() { + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + make CONFIG_GUMSTIX=y CONFIG_DEBUG=n KVER=2.6 KERNELDIR="${KERNEL_SOURCE}" \ + ARCH="${TARGET_ARCH}" CC="${KERNEL_CC}" EXTRA_CFLAGS="${CFLAGS}" +} + +do_install() { + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + make CONFIG_GUMSTIX=y CONFIG_DEBUG=n KVER=2.6 KERNELDIR="${KERNEL_SOURCE}" \ + ARCH="${TARGET_ARCH}" CC="${KERNEL_CC}" EXTRA_CFLAGS="${CFLAGS}" INSTALL_MOD_PATH="${D}" install +# (grep -q mcf25 ${D}/etc/modprobe.conf || \ +# echo -e 'alias mwlan0 mcf25\n' >> ${D}/etc/modprobe.conf) +# (grep -q mwlan0 ${D}/etc/network/interfaces || \ +# echo -e '\nauto mwlan0\niface mwlan0 inet dhcp\n pre-up /sbin/iwconfig $$IFACE essid any txpower 100mW\n' >> $(TARGET_DIR)/etc/network/interfaces) +} + +PACKAGES = "${PN}" +FILES_${PN} = "/lib/modules/" |