wifistix : Add driver for Marvell cf8385 wireless interface driver for gumstix.
authorPhilip Balister <philip@balister.org>
Sat, 29 Sep 2007 20:43:38 +0000 (20:43 +0000)
committerPhilip Balister <philip@balister.org>
Sat, 29 Sep 2007 20:43:38 +0000 (20:43 +0000)
14 files changed:
packages/wifistix/.mtn2git_empty [new file with mode: 0644]
packages/wifistix/wifistix-modules/.mtn2git_empty [new file with mode: 0644]
packages/wifistix/wifistix-modules/2.6.17-new-pcmcia-layer.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/bad-cast.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/fix-essid-truncation.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/install-properly.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/marvell-devicename.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/marvell-devicetable.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/marvell-gumstix.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/no-more-config-h.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/realtime-kernel.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/sbi-no-inline.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules/struct-changes.patch [new file with mode: 0644]
packages/wifistix/wifistix-modules_5.0.16.p0.bb [new file with mode: 0644]

diff --git a/packages/wifistix/.mtn2git_empty b/packages/wifistix/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/wifistix/wifistix-modules/.mtn2git_empty b/packages/wifistix/wifistix-modules/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
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 (file)
index 0000000..209df1b
--- /dev/null
@@ -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, &reg);
++  pcmcia_access_configuration_register(ifinfo->p_dev, &reg);
+   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 (file)
index 0000000..5f4f48c
--- /dev/null
@@ -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 (file)
index 0000000..c9185ea
--- /dev/null
@@ -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 (file)
index 0000000..ebc00ed
--- /dev/null
@@ -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 (file)
index 0000000..4846b09
--- /dev/null
@@ -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 (file)
index 0000000..5d726a5
--- /dev/null
@@ -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 (file)
index 0000000..5c336e3
--- /dev/null
@@ -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 (file)
index 0000000..8bd7a14
--- /dev/null
@@ -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 (file)
index 0000000..49a86c2
--- /dev/null
@@ -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 (file)
index 0000000..204ebc7
--- /dev/null
@@ -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 (file)
index 0000000..d935796
--- /dev/null
@@ -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 (file)
index 0000000..abd8a8c
--- /dev/null
@@ -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/"