From b06e7e57f5e726a15bb36342343ce3c3b1dedd02 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 22 Sep 2007 10:23:09 +0000 Subject: python-pygobject[-native]: drop 2.12.2, add dependency on glib-2.0[-native] --- packages/python/python-pygobject-native_2.12.2.bb | 3 --- packages/python/python-pygobject-native_2.12.3.bb | 2 +- packages/python/python-pygobject_2.12.2.bb | 23 ----------------------- 3 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 packages/python/python-pygobject-native_2.12.2.bb delete mode 100644 packages/python/python-pygobject_2.12.2.bb diff --git a/packages/python/python-pygobject-native_2.12.2.bb b/packages/python/python-pygobject-native_2.12.2.bb deleted file mode 100644 index c93950b31b..0000000000 --- a/packages/python/python-pygobject-native_2.12.2.bb +++ /dev/null @@ -1,3 +0,0 @@ -require python-pygobject_${PV}.bb - -DEPENDS = "python-native" diff --git a/packages/python/python-pygobject-native_2.12.3.bb b/packages/python/python-pygobject-native_2.12.3.bb index 86d778c5ab..cb879fdeb1 100644 --- a/packages/python/python-pygobject-native_2.12.3.bb +++ b/packages/python/python-pygobject-native_2.12.3.bb @@ -1,6 +1,6 @@ require python-pygobject_${PV}.bb -DEPENDS = "python-native" +DEPENDS = "python-native glib-2.0-native" SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/2.12/pygobject-${PV}.tar.bz2 " diff --git a/packages/python/python-pygobject_2.12.2.bb b/packages/python/python-pygobject_2.12.2.bb deleted file mode 100644 index 1604b54715..0000000000 --- a/packages/python/python-pygobject_2.12.2.bb +++ /dev/null @@ -1,23 +0,0 @@ -DESCRIPTION = "Python GObject bindings" -SECTION = "devel/python" -LICENSE = "LGPL" -DEPENDS = "python-pygobject-native" -PR = "ml2" - -SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/2.12/pygobject-${PV}.tar.bz2" -S = "${WORKDIR}/pygobject-${PV}" - -inherit autotools distutils-base pkgconfig - -# otherwise the main package keeps snatching the .pc file away -# and therefore depends on glib-2.0-dev (which only the -dev -# package should). -PACKAGES =+ "${PN}-dev" - -do_stage() { - autotools_stage_all - install -d ${STAGING_LIBDIR}/../share/pygobject/ - cp -dpfR docs/* ${STAGING_LIBDIR}/../share/pygobject/ - install -d ${STAGING_LIBDIR}/../share/gtk-doc/html/pygobject/ - cp docs/style.css ${STAGING_LIBDIR}/../share/gtk-doc/html/pygobject/ -} -- cgit v1.2.3 From ea52a2ce713343961a660f74efd5fbff95668f94 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Sat, 29 Sep 2007 20:43:38 +0000 Subject: wifistix : Add driver for Marvell cf8385 wireless interface driver for gumstix. --- packages/wifistix/.mtn2git_empty | 0 packages/wifistix/wifistix-modules/.mtn2git_empty | 0 .../wifistix-modules/2.6.17-new-pcmcia-layer.patch | 484 +++++++++++++++++++++ packages/wifistix/wifistix-modules/bad-cast.patch | 13 + .../wifistix-modules/fix-essid-truncation.patch | 13 + .../wifistix-modules/install-properly.patch | 14 + .../wifistix-modules/marvell-devicename.patch | 11 + .../wifistix-modules/marvell-devicetable.patch | 25 ++ .../wifistix-modules/marvell-gumstix.patch | 24 + .../wifistix-modules/no-more-config-h.patch | 24 + .../wifistix-modules/realtime-kernel.patch | 25 ++ .../wifistix/wifistix-modules/sbi-no-inline.patch | 13 + .../wifistix/wifistix-modules/struct-changes.patch | 13 + packages/wifistix/wifistix-modules_5.0.16.p0.bb | 44 ++ 14 files changed, 703 insertions(+) create mode 100644 packages/wifistix/.mtn2git_empty create mode 100644 packages/wifistix/wifistix-modules/.mtn2git_empty create mode 100644 packages/wifistix/wifistix-modules/2.6.17-new-pcmcia-layer.patch create mode 100644 packages/wifistix/wifistix-modules/bad-cast.patch create mode 100644 packages/wifistix/wifistix-modules/fix-essid-truncation.patch create mode 100644 packages/wifistix/wifistix-modules/install-properly.patch create mode 100644 packages/wifistix/wifistix-modules/marvell-devicename.patch create mode 100644 packages/wifistix/wifistix-modules/marvell-devicetable.patch create mode 100644 packages/wifistix/wifistix-modules/marvell-gumstix.patch create mode 100644 packages/wifistix/wifistix-modules/no-more-config-h.patch create mode 100644 packages/wifistix/wifistix-modules/realtime-kernel.patch create mode 100644 packages/wifistix/wifistix-modules/sbi-no-inline.patch create mode 100644 packages/wifistix/wifistix-modules/struct-changes.patch create mode 100644 packages/wifistix/wifistix-modules_5.0.16.p0.bb diff --git a/packages/wifistix/.mtn2git_empty b/packages/wifistix/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/wifistix/wifistix-modules/.mtn2git_empty b/packages/wifistix/wifistix-modules/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 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 + #include + #include +-#include + + #include + #include +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 + #include + #include +-#include + #include + + 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/" -- cgit v1.2.3 From 09e8f6331cadd9a89f69028ea8108f13c2680d0a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 29 Sep 2007 21:58:55 +0000 Subject: webkit-gtk: catch up with gdk->gtk rename --- packages/webkit/files/WebKit.pri | 25 ++++++++++++++----------- packages/webkit/files/WebKit.pro | 17 ++++++++++------- packages/webkit/webkit-gtk_svn.bb | 16 ++++++++-------- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/packages/webkit/files/WebKit.pri b/packages/webkit/files/WebKit.pri index 0375102a0c..350c95d311 100644 --- a/packages/webkit/files/WebKit.pri +++ b/packages/webkit/files/WebKit.pri @@ -6,14 +6,17 @@ isEmpty(OUTPUT_DIR) { CONFIG(debug):OUTPUT_DIR=$$PWD/WebKitBuild/Debug } -!gdk-port:CONFIG += qt-port +!gtk-port:CONFIG += qt-port qt-port:DEFINES += BUILDING_QT__=1 -qt-port:!building-libs:LIBS += -L$$OUTPUT_DIR/lib -lQtWebKit -gdk-port:CONFIG += link_pkgconfig -gdk-port:PKGCONFIG += cairo gdk-2.0 gtk+-2.0 libcurl -gdk-port:DEFINES += BUILDING_GDK__=1 BUILDING_CAIRO__ -gdk-port:LIBS += -L$$OUTPUT_DIR/lib -lWebKitGdk $$system(icu-config --ldflags) -ljpeg -lpng -lcurl -gdk-port:QMAKE_CXXFLAGS += $$system(icu-config --cppflags) +qt-port:!building-libs { + QMAKE_LIBDIR = $$OUTPUT_DIR/lib $$QMAKE_LIBDIR + LIBS += -lQtWebKit +} +gtk-port:CONFIG += link_pkgconfig +gtk-port:PKGCONFIG += cairo cairo-ft gdk-2.0 gtk+-2.0 libcurl +gtk-port:DEFINES += BUILDING_GTK__=1 BUILDING_CAIRO__ +gtk-port:LIBS += -L$$OUTPUT_DIR/lib -lWebKitGtk $$system(icu-config --ldflags) -ljpeg -lpng +gtk-port:QMAKE_CXXFLAGS += $$system(icu-config --cppflags) DEFINES += USE_SYSTEM_MALLOC CONFIG(release) { @@ -23,12 +26,12 @@ CONFIG(release) { BASE_DIR = $$PWD qt-port:INCLUDEPATH += \ $$PWD/WebKitQt/Api -gdk-port:INCLUDEPATH += \ - $$BASE_DIR/WebCore/platform/gdk \ +gtk-port:INCLUDEPATH += \ + $$BASE_DIR/WebCore/platform/gtk \ $$BASE_DIR/WebCore/platform/network/curl \ $$BASE_DIR/WebCore/platform/graphics/cairo \ - $$BASE_DIR/WebCore/loader/gdk \ - $$BASE_DIR/WebCore/page/gdk \ + $$BASE_DIR/WebCore/loader/gtk \ + $$BASE_DIR/WebCore/page/gtk \ $$BASE_DIR/WebKit/gtk/Api \ $$BASE_DIR/WebKit/gtk/WebCoreSupport INCLUDEPATH += \ diff --git a/packages/webkit/files/WebKit.pro b/packages/webkit/files/WebKit.pro index 335d11e6e7..8536c41515 100644 --- a/packages/webkit/files/WebKit.pro +++ b/packages/webkit/files/WebKit.pro @@ -1,13 +1,16 @@ TEMPLATE = subdirs CONFIG += ordered -!gdk-port:CONFIG += qt-port -qt-port:SUBDIRS += WebKitQt/Plugins +!gtk-port:CONFIG += qt-port +qt-port:!win32-*:SUBDIRS += WebKitQt/Plugins SUBDIRS += \ WebCore \ JavaScriptCore/kjs/testkjs.pro -qt-port:SUBDIRS += \ - WebKitQt/QtLauncher \ - WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro -gdk-port:SUBDIRS += \ - WebKitTools/GdkLauncher +qt-port { + SUBDIRS += WebKitQt/QtLauncher + + !win32-*: SUBDIRS += WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro +} + +gtk-port:SUBDIRS += \ + WebKitTools/GtkLauncher diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb index 077baec95e..35ab38a167 100644 --- a/packages/webkit/webkit-gtk_svn.bb +++ b/packages/webkit/webkit-gtk_svn.bb @@ -23,10 +23,10 @@ SRC_URI = "\ S = "${WORKDIR}/" do_configure() { - qmake2 -spec ${QMAKESPEC} CONFIG+=gdk-port CONFIG-=qt CONFIG-=release CONFIG+=debug + qmake2 -spec ${QMAKESPEC} CONFIG+=gtk-port CONFIG-=qt CONFIG-=release CONFIG+=debug mkdir -p WebKitBuilds/Debug cd WebKitBuilds/Debug - PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gdk-port $PWD/../../WebKit.pro \ + PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gtk-port $PWD/../../WebKit.pro \ WEBKIT_INC_DIR=${prefix}/include WEBKIT_LIB_DIR=${libdir} } @@ -43,9 +43,9 @@ do_install() { install -d ${D}${libdir} install -d ${D}${libdir}/pkgconfig - install -m 0755 ${S}/WebKitBuilds/Debug/WebKitTools/GdkLauncher/GdkLauncher ${D}${bindir} + install -m 0755 ${S}/WebKitBuilds/Debug/WebKitTools/GtkLauncher/GtkLauncher ${D}${bindir} cd ${S}/WebKitBuilds/Debug - PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gdk-port $PWD/../../WebKit.pro \ + PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gtk-port $PWD/../../WebKit.pro \ WEBKIT_INC_DIR=${D}${prefix}/include WEBKIT_LIB_DIR=${D}${libdir} oe_runmake install } @@ -54,12 +54,12 @@ do_stage() { install -d ${STAGING_LIBDIR} install -d ${STAGING_INCDIR} cd ${S}/WebKitBuilds/Debug - PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gdk-port $PWD/../../WebKit.pro \ + PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gtk-port $PWD/../../WebKit.pro \ WEBKIT_INC_DIR=${STAGING_INCDIR} WEBKIT_LIB_DIR=${STAGING_LIBDIR} oe_runmake install } -PACKAGES =+ "webkit-gdklauncher-dbg webkit-gdklauncher" +PACKAGES =+ "webkit-gtklauncher-dbg webkit-gtklauncher" -FILES_webkit-gdklauncher = "${bindir}/GdkLauncher" -FILES_webkit-gdklauncher-dbg = "${bindir}/.debug/GdkLauncher" +FILES_webkit-gtklauncher = "${bindir}/GtkLauncher" +FILES_webkit-gtklauncher-dbg = "${bindir}/.debug/GtkLauncher" -- cgit v1.2.3 From ffd654e9247793d0c4597f53788aed6680186bd8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 29 Sep 2007 22:00:20 +0000 Subject: sane-srcrevs: bump openmoko-today, openmoko-theme2 and webkit --- conf/distro/include/sane-srcrevs.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index afd281b42a..6382154986 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -57,7 +57,7 @@ SRCREV_pn-openmoko-finger-demo ?= "1671" SRCREV_pn-openmoko-firststart2 ?= "2873" SRCREV_pn-openmoko-footer ?= "2354" SRCREV_pn-openmoko-icon-theme-standard ?= "2232" -SRCREV_pn-openmoko-icon-theme-standard2 ?= "2967" +SRCREV_pn-openmoko-icon-theme-standard2 ?= "3055" SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "2967" SRCREV_pn-openmoko-keyboard ?= "1631" SRCREV_pn-openmoko-libs ?= "2367" @@ -85,7 +85,7 @@ SRCREV_pn-openmoko-theme-standard ?= "2370" SRCREV_pn-openmoko-theme-standard-qvga ?= "2370" SRCREV_pn-openmoko-theme-standard2 ?= "2964" SRCREV_pn-openmoko-theme-standard2-qvga ?= "2964" -SRCREV_pn-openmoko-today ?= "2556" +SRCREV_pn-openmoko-today ?= "3056" SRCREV_pn-openmoko-today2 ?= "2955" SRCREV_pn-openmoko-today2-folders ?= "2680" SRCREV_pn-openocd ?= "206" @@ -94,7 +94,7 @@ SRCREV_pn-psplash ?= "249" SRCREV_pn-settings-daemon ?= "1615" SRCREV_pn-sjf2410-linux-native ?= "933" SRCREV_pn-sphyrna ?= "44" -SRCREV_pn-webkit-gtk ?= "25615" +SRCREV_pn-webkit-gtk ?= "25808" SRCREV_pn-xoo ?= "1623" SRCREV_pn-mplayer ?= "24587" -- cgit v1.2.3 From 6009c3769647135923e1ce7b1c3617a8073df6ab Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 30 Sep 2007 15:38:45 +0000 Subject: pidgin: update to 2.2.1 --- packages/gaim/pidgin_2.2.1.bb | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 packages/gaim/pidgin_2.2.1.bb diff --git a/packages/gaim/pidgin_2.2.1.bb b/packages/gaim/pidgin_2.2.1.bb new file mode 100644 index 0000000000..5531880669 --- /dev/null +++ b/packages/gaim/pidgin_2.2.1.bb @@ -0,0 +1,10 @@ +require pidgin.inc + +SRC_URI = "${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2 \ + file://sanitize-configure.ac.patch;patch=1 \ + file://gconf-no-errors.patch;patch=1 \ + file://pidgin.desktop-set-icon.patch;patch=1 \ + file://purple-OE-branding.patch;patch=1 \ + " + +PR = "r0" -- cgit v1.2.3 From e038f25a766aff2840a9ec63ede6b722cdaff865 Mon Sep 17 00:00:00 2001 From: Michael Krelin Date: Sun, 30 Sep 2007 20:49:49 +0000 Subject: procps: fixed build error, supposedly closing #3081. I don't know why it worked before, do you? --- packages/procps/procps-3.2.7/linux-limits.patch | 13 +++++++++++++ packages/procps/procps_3.2.7.bb | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/procps/procps-3.2.7/linux-limits.patch diff --git a/packages/procps/procps-3.2.7/linux-limits.patch b/packages/procps/procps-3.2.7/linux-limits.patch new file mode 100644 index 0000000000..dcd66163ad --- /dev/null +++ b/packages/procps/procps-3.2.7/linux-limits.patch @@ -0,0 +1,13 @@ +diff --git a/pwdx.c b/pwdx.c +index cb96a52..29ebce2 100644 +--- a/pwdx.c ++++ b/pwdx.c +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + diff --git a/packages/procps/procps_3.2.7.bb b/packages/procps/procps_3.2.7.bb index de7524b2cb..e6a6573635 100644 --- a/packages/procps/procps_3.2.7.bb +++ b/packages/procps/procps_3.2.7.bb @@ -3,7 +3,8 @@ require procps.inc PR = "r5" SRC_URI += "file://procmodule.patch;patch=1 \ - file://psmodule.patch;patch=1" + file://psmodule.patch;patch=1 \ + file://linux-limits.patch;patch=1" FILES = "${bindir}/top.${PN} ${base_bindir}/ps.${PN} ${bindir}/uptime.${PN} ${base_bindir}/kill.${PN} \ ${bindir}/free.${PN} ${bindir}/w ${bindir}/watch ${bindir}/pgrep ${bindir}/pmap ${bindir}/pwdx \ -- cgit v1.2.3 From 16cbf4ea61c3c1c4b8bd384e27e2bc14cd98c512 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 30 Sep 2007 21:03:23 +0000 Subject: packages/dbus/dbus-glib_0.74.bb : add updated version from poky, remove older version This will fix networkmanager --- packages/dbus/dbus-glib-0.72/.mtn2git_empty | 0 packages/dbus/dbus-glib-0.72/cross.patch | 12 --------- packages/dbus/dbus-glib-0.72/no-introspect.patch | 19 -------------- packages/dbus/dbus-glib-0.74/.mtn2git_empty | 0 packages/dbus/dbus-glib-0.74/no-examples.patch | 8 ++++++ packages/dbus/dbus-glib-0.74/no-introspect.patch | 14 +++++++++++ packages/dbus/dbus-glib-native-0.72/.mtn2git_empty | 0 .../run-with-tmp-session-bus.patch | 23 ----------------- packages/dbus/dbus-glib-native-0.74/.mtn2git_empty | 0 .../run-with-tmp-session-bus.patch | 23 +++++++++++++++++ packages/dbus/dbus-glib-native_0.71.bb | 22 ---------------- packages/dbus/dbus-glib-native_0.72.bb | 23 ----------------- packages/dbus/dbus-glib-native_0.74.bb | 21 ++++++++++++++++ packages/dbus/dbus-glib/.mtn2git_empty | 0 packages/dbus/dbus-glib/cross.patch | 15 ----------- packages/dbus/dbus-glib/no-examples.patch | 8 ------ packages/dbus/dbus-glib/no-introspect.patch | 17 ------------- packages/dbus/dbus-glib_0.71.bb | 29 ---------------------- packages/dbus/dbus-glib_0.72.bb | 29 ---------------------- packages/dbus/dbus-glib_0.74.bb | 28 +++++++++++++++++++++ 20 files changed, 94 insertions(+), 197 deletions(-) delete mode 100644 packages/dbus/dbus-glib-0.72/.mtn2git_empty delete mode 100644 packages/dbus/dbus-glib-0.72/cross.patch delete mode 100644 packages/dbus/dbus-glib-0.72/no-introspect.patch create mode 100644 packages/dbus/dbus-glib-0.74/.mtn2git_empty create mode 100644 packages/dbus/dbus-glib-0.74/no-examples.patch create mode 100644 packages/dbus/dbus-glib-0.74/no-introspect.patch delete mode 100644 packages/dbus/dbus-glib-native-0.72/.mtn2git_empty delete mode 100644 packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch create mode 100644 packages/dbus/dbus-glib-native-0.74/.mtn2git_empty create mode 100644 packages/dbus/dbus-glib-native-0.74/run-with-tmp-session-bus.patch delete mode 100644 packages/dbus/dbus-glib-native_0.71.bb delete mode 100644 packages/dbus/dbus-glib-native_0.72.bb create mode 100644 packages/dbus/dbus-glib-native_0.74.bb delete mode 100644 packages/dbus/dbus-glib/.mtn2git_empty delete mode 100644 packages/dbus/dbus-glib/cross.patch delete mode 100644 packages/dbus/dbus-glib/no-examples.patch delete mode 100644 packages/dbus/dbus-glib/no-introspect.patch delete mode 100644 packages/dbus/dbus-glib_0.71.bb delete mode 100644 packages/dbus/dbus-glib_0.72.bb create mode 100644 packages/dbus/dbus-glib_0.74.bb diff --git a/packages/dbus/dbus-glib-0.72/.mtn2git_empty b/packages/dbus/dbus-glib-0.72/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus-glib-0.72/cross.patch b/packages/dbus/dbus-glib-0.72/cross.patch deleted file mode 100644 index b3f41c8507..0000000000 --- a/packages/dbus/dbus-glib-0.72/cross.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: dbus-glib-0.72/configure.ac -=================================================================== ---- dbus-glib-0.72.orig/configure.ac 2006-10-27 10:05:05.000000000 +0200 -+++ dbus-glib-0.72/configure.ac 2006-10-27 10:05:48.000000000 +0200 -@@ -571,6 +571,7 @@ - exit (0); - ]])], - [have_abstract_sockets=yes], -+ [have_abstract_sockets=no], - [have_abstract_sockets=no]) - AC_LANG_POP(C) - AC_MSG_RESULT($have_abstract_sockets) diff --git a/packages/dbus/dbus-glib-0.72/no-introspect.patch b/packages/dbus/dbus-glib-0.72/no-introspect.patch deleted file mode 100644 index 607f0acc9c..0000000000 --- a/packages/dbus/dbus-glib-0.72/no-introspect.patch +++ /dev/null @@ -1,19 +0,0 @@ -Index: dbus-glib-0.72/tools/Makefile.am -=================================================================== ---- dbus-glib-0.72.orig/tools/Makefile.am 2006-10-25 21:10:36.000000000 +0200 -+++ dbus-glib-0.72/tools/Makefile.am 2006-10-27 10:07:35.000000000 +0200 -@@ -3,14 +3,8 @@ - nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h - libdbus_glibdir = $(includedir)/dbus-1.0/dbus - --dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/dbus/dbus-binding-tool$(EXEEXT) -- $(top_builddir)/dbus/dbus-binding-tool --mode=glib-client --prefix=dbus_bus --output=dbus-glib-bindings.h dbus-bus-introspect.xml -- - BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml - --dbus-bus-introspect.xml: -- DBUS_TOP_BUILDDIR=$(top_builddir) dbus-daemon --introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml -- - EXTRA_DIST = run-with-tmp-session-bus.sh session.conf - - CLEANFILES = \ diff --git a/packages/dbus/dbus-glib-0.74/.mtn2git_empty b/packages/dbus/dbus-glib-0.74/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/dbus/dbus-glib-0.74/no-examples.patch b/packages/dbus/dbus-glib-0.74/no-examples.patch new file mode 100644 index 0000000000..483153db74 --- /dev/null +++ b/packages/dbus/dbus-glib-0.74/no-examples.patch @@ -0,0 +1,8 @@ +--- dbus-glib-0.70/dbus/Makefile.am.orig 2006-07-23 16:04:43.000000000 +0200 ++++ dbus-glib-0.70/dbus/Makefile.am 2006-07-23 16:04:52.000000000 +0200 +@@ -1,4 +1,4 @@ +-SUBDIRS = . examples ++SUBDIRS = . + + INCLUDES=-I$(top_srcdir) $(DBUS_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS) -DDBUS_COMPILATION=1 -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" + diff --git a/packages/dbus/dbus-glib-0.74/no-introspect.patch b/packages/dbus/dbus-glib-0.74/no-introspect.patch new file mode 100644 index 0000000000..9115801f71 --- /dev/null +++ b/packages/dbus/dbus-glib-0.74/no-introspect.patch @@ -0,0 +1,14 @@ +Index: dbus-glib-0.73/tools/Makefile.am +=================================================================== +--- dbus-glib-0.73.orig/tools/Makefile.am 2006-10-25 21:10:36.000000000 +0200 ++++ dbus-glib-0.73/tools/Makefile.am 2006-10-27 10:07:35.000000000 +0200 +@@ -3,9 +3,6 @@ + nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h + libdbus_glibdir = $(includedir)/dbus-1.0/dbus + +-dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/dbus/dbus-binding-tool$(EXEEXT) +- $(top_builddir)/dbus/dbus-binding-tool --mode=glib-client --prefix=dbus_bus --output=dbus-glib-bindings.h dbus-bus-introspect.xml +- + BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml + + if USE_INTROSPECT_XML diff --git a/packages/dbus/dbus-glib-native-0.72/.mtn2git_empty b/packages/dbus/dbus-glib-native-0.72/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch b/packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch deleted file mode 100644 index ba117d0309..0000000000 --- a/packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch +++ /dev/null @@ -1,23 +0,0 @@ -Index: dbus-glib-0.72/tools/run-with-tmp-session-bus.sh -=================================================================== ---- dbus-glib-0.72.orig/tools/run-with-tmp-session-bus.sh 2006-09-27 14:27:25.000000000 +0200 -+++ dbus-glib-0.72/tools/run-with-tmp-session-bus.sh 2006-10-27 10:13:57.000000000 +0200 -@@ -30,16 +30,15 @@ - echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2 - - ## create a configuration file based on the standard session.conf --cat $DBUS_TOP_SRCDIR/tools/session.conf | \ -+cat $datadir/dbus/session.conf | \ - sed -e 's/.*$/'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \ - sed -e 's/ $CONFIG_FILE - - echo "Created configuration file $CONFIG_FILE" >&2 - --export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH - ## the libtool script found by the path search should already do this, but --export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH -+export LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH - - unset DBUS_SESSION_BUS_ADDRESS - unset DBUS_SESSION_BUS_PID diff --git a/packages/dbus/dbus-glib-native-0.74/.mtn2git_empty b/packages/dbus/dbus-glib-native-0.74/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/dbus/dbus-glib-native-0.74/run-with-tmp-session-bus.patch b/packages/dbus/dbus-glib-native-0.74/run-with-tmp-session-bus.patch new file mode 100644 index 0000000000..ba117d0309 --- /dev/null +++ b/packages/dbus/dbus-glib-native-0.74/run-with-tmp-session-bus.patch @@ -0,0 +1,23 @@ +Index: dbus-glib-0.72/tools/run-with-tmp-session-bus.sh +=================================================================== +--- dbus-glib-0.72.orig/tools/run-with-tmp-session-bus.sh 2006-09-27 14:27:25.000000000 +0200 ++++ dbus-glib-0.72/tools/run-with-tmp-session-bus.sh 2006-10-27 10:13:57.000000000 +0200 +@@ -30,16 +30,15 @@ + echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2 + + ## create a configuration file based on the standard session.conf +-cat $DBUS_TOP_SRCDIR/tools/session.conf | \ ++cat $datadir/dbus/session.conf | \ + sed -e 's/.*$/'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \ + sed -e 's/ $CONFIG_FILE + + echo "Created configuration file $CONFIG_FILE" >&2 + +-export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH + ## the libtool script found by the path search should already do this, but +-export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH ++export LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH + + unset DBUS_SESSION_BUS_ADDRESS + unset DBUS_SESSION_BUS_PID diff --git a/packages/dbus/dbus-glib-native_0.71.bb b/packages/dbus/dbus-glib-native_0.71.bb deleted file mode 100644 index 1f5d71da91..0000000000 --- a/packages/dbus/dbus-glib-native_0.71.bb +++ /dev/null @@ -1,22 +0,0 @@ -SECTION = "base" -PR = "r0" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -DESCRIPTION = "message bus system for applications to talk to one another" -LICENSE = "GPL" - -SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-glib-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - file://run-with-tmp-session-bus.patch;patch=1" - -inherit autotools pkgconfig gettext native - -S = "${WORKDIR}/dbus-glib-${PV}" -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-glib" -DEPENDS = "glib-2.0-native dbus-native" - -do_stage() { - oe_runmake install - install -d ${STAGING_DATADIR}/dbus - install -m 0644 tools/dbus-bus-introspect.xml ${STAGING_DATADIR}/dbus - install -m 0644 tools/dbus-glib-bindings.h ${STAGING_DATADIR}/dbus -} diff --git a/packages/dbus/dbus-glib-native_0.72.bb b/packages/dbus/dbus-glib-native_0.72.bb deleted file mode 100644 index 90ecc4e9fe..0000000000 --- a/packages/dbus/dbus-glib-native_0.72.bb +++ /dev/null @@ -1,23 +0,0 @@ -SECTION = "base" -PR = "r1" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -DESCRIPTION = "message bus system for applications to talk to one another" -LICENSE = "GPL" - -SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - file://run-with-tmp-session-bus.patch;patch=1" - -inherit autotools pkgconfig gettext native - -S = "${WORKDIR}/dbus-glib-${PV}" -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-glib-${PV}" -DEPENDS = "glib-2.0-native dbus-native" - -do_stage() { - oe_runmake install - install -d ${STAGING_DATADIR}/dbus - install -m 0644 tools/dbus-bus-introspect.xml ${STAGING_DATADIR}/dbus - install -m 0644 tools/dbus-glib-bindings.h ${STAGING_DATADIR}/dbus - install -m 0755 dbus/.libs/dbus-binding-tool ${STAGING_BINDIR}/ -} diff --git a/packages/dbus/dbus-glib-native_0.74.bb b/packages/dbus/dbus-glib-native_0.74.bb new file mode 100644 index 0000000000..d76cc043d4 --- /dev/null +++ b/packages/dbus/dbus-glib-native_0.74.bb @@ -0,0 +1,21 @@ +SECTION = "base" +PR = "r0" +HOMEPAGE = "http://www.freedesktop.org/Software/dbus" +DESCRIPTION = "message bus system for applications to talk to one another" +LICENSE = "GPL" + +SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \ + file://run-with-tmp-session-bus.patch;patch=1" + +inherit autotools pkgconfig gettext native + +S = "${WORKDIR}/dbus-glib-${PV}" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-glib-${PV}" +DEPENDS = "glib-2.0-native dbus-native" + +do_stage() { + oe_runmake install + install -d ${STAGING_DATADIR}/dbus + install -m 0644 tools/dbus-bus-introspect.xml ${STAGING_DATADIR}/dbus + install -m 0644 tools/dbus-glib-bindings.h ${STAGING_DATADIR}/dbus +} diff --git a/packages/dbus/dbus-glib/.mtn2git_empty b/packages/dbus/dbus-glib/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/dbus/dbus-glib/cross.patch b/packages/dbus/dbus-glib/cross.patch deleted file mode 100644 index 6d1d9d8e7e..0000000000 --- a/packages/dbus/dbus-glib/cross.patch +++ /dev/null @@ -1,15 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- dbus-0.20/configure.in~cross -+++ dbus-0.20/configure.in -@@ -466,6 +466,7 @@ - exit (0); - ]])], - [have_abstract_sockets=yes], -+ [have_abstract_sockets=no], - [have_abstract_sockets=no]) - AC_LANG_POP(C) - AC_MSG_RESULT($have_abstract_sockets) diff --git a/packages/dbus/dbus-glib/no-examples.patch b/packages/dbus/dbus-glib/no-examples.patch deleted file mode 100644 index 483153db74..0000000000 --- a/packages/dbus/dbus-glib/no-examples.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- dbus-glib-0.70/dbus/Makefile.am.orig 2006-07-23 16:04:43.000000000 +0200 -+++ dbus-glib-0.70/dbus/Makefile.am 2006-07-23 16:04:52.000000000 +0200 -@@ -1,4 +1,4 @@ --SUBDIRS = . examples -+SUBDIRS = . - - INCLUDES=-I$(top_srcdir) $(DBUS_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS) -DDBUS_COMPILATION=1 -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" - diff --git a/packages/dbus/dbus-glib/no-introspect.patch b/packages/dbus/dbus-glib/no-introspect.patch deleted file mode 100644 index 7057a63020..0000000000 --- a/packages/dbus/dbus-glib/no-introspect.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- dbus-glib-0.70/tools/Makefile.am.orig 2006-07-23 15:53:06.000000000 +0200 -+++ dbus-glib-0.70/tools/Makefile.am 2006-07-23 15:53:53.000000000 +0200 -@@ -3,14 +3,8 @@ - nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h - libdbus_glibdir = $(includedir)/dbus-1.0/dbus - --dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/dbus/dbus-binding-tool$(EXEEXT) -- $(top_builddir)/dbus/dbus-binding-tool --mode=glib-client --output=dbus-glib-bindings.h dbus-bus-introspect.xml -- - BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml - --dbus-bus-introspect.xml: -- DBUS_TOP_BUILDDIR=$(top_builddir) dbus-send --system --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml -- - EXTRA_DIST = run-with-tmp-session-bus.sh - - CLEANFILES = \ diff --git a/packages/dbus/dbus-glib_0.71.bb b/packages/dbus/dbus-glib_0.71.bb deleted file mode 100644 index 26bc851098..0000000000 --- a/packages/dbus/dbus-glib_0.71.bb +++ /dev/null @@ -1,29 +0,0 @@ -SECTION = "base" -PR = "r0" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -DESCRIPTION = "message bus system for applications to talk to one another" -LICENSE = "GPL" -DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus" - -SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-glib-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - file://no-examples.patch;patch=1 \ - file://no-introspect.patch;patch=1" - -inherit autotools pkgconfig gettext - -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" - -do_configure_prepend() { - install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-bus-introspect.xml ${S}/tools/ - install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-glib-bindings.h ${S}/tools/ -} - -do_stage () { - oe_libinstall -so -C dbus libdbus-glib-1 ${STAGING_LIBDIR} - - autotools_stage_includes -} - -FILES_${PN}-dev += "${bindir}/dbus-binding-tool" diff --git a/packages/dbus/dbus-glib_0.72.bb b/packages/dbus/dbus-glib_0.72.bb deleted file mode 100644 index 641f0263a2..0000000000 --- a/packages/dbus/dbus-glib_0.72.bb +++ /dev/null @@ -1,29 +0,0 @@ -SECTION = "base" -PR = "r0" -HOMEPAGE = "http://www.freedesktop.org/Software/dbus" -DESCRIPTION = "message bus system for applications to talk to one another" -LICENSE = "GPL" -DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus" - -SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \ - file://cross.patch;patch=1 \ - file://no-examples.patch;patch=1 \ - file://no-introspect.patch;patch=1" - -inherit autotools pkgconfig gettext - -FILES_${PN} = "${libdir}/lib*.so.*" -FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" - -do_configure_prepend() { - install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-bus-introspect.xml ${S}/tools/ - install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-glib-bindings.h ${S}/tools/ -} - -do_stage () { - oe_libinstall -so -C dbus libdbus-glib-1 ${STAGING_LIBDIR} - - autotools_stage_includes -} - -FILES_${PN}-dev += "${bindir}/dbus-binding-tool" diff --git a/packages/dbus/dbus-glib_0.74.bb b/packages/dbus/dbus-glib_0.74.bb new file mode 100644 index 0000000000..3754abb708 --- /dev/null +++ b/packages/dbus/dbus-glib_0.74.bb @@ -0,0 +1,28 @@ +SECTION = "base" +PR = "r0" +HOMEPAGE = "http://www.freedesktop.org/Software/dbus" +DESCRIPTION = "message bus system for applications to talk to one another" +LICENSE = "GPL" +DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus" + +SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \ + file://no-examples.patch;patch=1 \ + file://no-introspect.patch;patch=1" + +inherit autotools pkgconfig gettext + +FILES_${PN} = "${libdir}/lib*.so.*" +FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" + +do_configure_prepend() { + install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-bus-introspect.xml ${S}/tools/ + install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-glib-bindings.h ${S}/tools/ +} + +do_stage () { + oe_libinstall -so -C dbus libdbus-glib-1 ${STAGING_LIBDIR} + + autotools_stage_includes +} + +FILES_${PN}-dev += "${bindir}/dbus-binding-tool" -- cgit v1.2.3 From ef925687529a6aa4357efe277da42041a1a1793d Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 30 Sep 2007 21:04:33 +0000 Subject: conf/distro/angstrom-2007.1.conf : update version of dbus-glib for angstrom. --- conf/distro/angstrom-2007.1.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2007.1.conf b/conf/distro/angstrom-2007.1.conf index 9b3c3fed11..3b14fd82a9 100644 --- a/conf/distro/angstrom-2007.1.conf +++ b/conf/distro/angstrom-2007.1.conf @@ -312,7 +312,7 @@ PREFERRED_VERSION_glibc-initial ?= "2.5" PREFERRED_VERSION_busybox = "1.2.1" PREFERRED_VERSION_dbus ?= "1.0.2" -PREFERRED_VERSION_dbus-glib ?= "0.72" +PREFERRED_VERSION_dbus-glib ?= "0.74" PREFERRED_VERSION_wpa-supplicant = "0.5.5" -- cgit v1.2.3 From 806c81a467119f22aa1d0068ac605109b3cf8e8a Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 30 Sep 2007 21:08:43 +0000 Subject: conf/distro/include/sane-srcrevs.inc : add network manager REVs from poky --- conf/distro/include/sane-srcrevs.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 6382154986..0c85876340 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -97,4 +97,6 @@ SRCREV_pn-sphyrna ?= "44" SRCREV_pn-webkit-gtk ?= "25808" SRCREV_pn-xoo ?= "1623" SRCREV_pn-mplayer ?= "24587" +SRCREV_pn-networkmanager ?= "2887" +SRCREV_pn-networkmanager-applet ?= "200" -- cgit v1.2.3 From e1819d3631cf4bde857b03e2f5d2f2269dda8a36 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 30 Sep 2007 21:48:06 +0000 Subject: packages/atk/atk_1.20.0.bb : add newer atk from poky --- packages/atk/atk_1.20.0.bb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/atk/atk_1.20.0.bb diff --git a/packages/atk/atk_1.20.0.bb b/packages/atk/atk_1.20.0.bb new file mode 100644 index 0000000000..e2733d5b87 --- /dev/null +++ b/packages/atk/atk_1.20.0.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "An accessibility toolkit for GNOME." +SECTION = "x11/libs" +PRIORITY = "optional" +LICENSE = "LGPL" + +DEPENDS = "glib-2.0 gtk-doc" + +SRC_URI = "http://download.gnome.org/sources/atk/1.20/${PN}-${PV}.tar.bz2" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--disable-glibtest" + +do_stage () { + autotools_stage_all +} -- cgit v1.2.3 From 12a5560824d4c914a21a3fdffd42efc35b037149 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 07:32:56 +0000 Subject: sanesrcrevs: bump webkit dependants to catch up with gdk->gtk renaming --- conf/distro/include/sane-srcrevs.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 0c85876340..e3efa9f699 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -41,7 +41,7 @@ SRCREV_pn-osb-jscore ?= "117" SRCREV_pn-osb-nrcit ?= "125" SRCREV_pn-osb-nrcore ?= "126" SRCREV_pn-openmoko-appmanager ?= "1851" -SRCREV_pn-openmoko-browser2 ?= "3031" +SRCREV_pn-openmoko-browser2 ?= "3061" SRCREV_pn-openmoko-calculator ?= "2404" SRCREV_pn-openmoko-calculator2 ?= "2789" SRCREV_pn-openmoko-common ?= "397" @@ -52,7 +52,7 @@ SRCREV_pn-openmoko-dates ?= "467" SRCREV_pn-openmoko-dates2 ?= "563" SRCREV_pn-openmoko-dialer ?= "2811" SRCREV_pn-openmoko-dialer2 ?= "2976" -SRCREV_pn-openmoko-feedreader2 ?= "2944" +SRCREV_pn-openmoko-feedreader2 ?= "3060" SRCREV_pn-openmoko-finger-demo ?= "1671" SRCREV_pn-openmoko-firststart2 ?= "2873" SRCREV_pn-openmoko-footer ?= "2354" -- cgit v1.2.3 From 7d702d18fde12ee930a8e41128707887ccd49480 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 09:42:19 +0000 Subject: dbus: tweak packaging, should help XorA's single core build :) --- packages/dbus/dbus.inc | 2 +- packages/dbus/dbus_1.0.2.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index ab139b2afa..0b421071aa 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -19,7 +19,7 @@ INITSCRIPT_PARAMS = "defaults" CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf" -FILES_${PN} = "${bindir}/dbus-daemon-1 ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*" +FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*" FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" pkg_postinst_dbus() { diff --git a/packages/dbus/dbus_1.0.2.bb b/packages/dbus/dbus_1.0.2.bb index 62a22254c3..be62e1cc6e 100644 --- a/packages/dbus/dbus_1.0.2.bb +++ b/packages/dbus/dbus_1.0.2.bb @@ -2,7 +2,7 @@ require dbus.inc DEFAULT_PREFERENCE = "1" -PR = "r5" +PR = "r6" SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ file://tmpdir.patch;patch=1 \ -- cgit v1.2.3 From 0758358b14b63d166784e5163682f9dc72b49a0e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 09:49:57 +0000 Subject: dbus: include uidgen as well --- packages/dbus/dbus.inc | 2 +- packages/dbus/dbus_1.0.2.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc index 0b421071aa..93eac00ccd 100644 --- a/packages/dbus/dbus.inc +++ b/packages/dbus/dbus.inc @@ -19,7 +19,7 @@ INITSCRIPT_PARAMS = "defaults" CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf" -FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*" +FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*" FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool" pkg_postinst_dbus() { diff --git a/packages/dbus/dbus_1.0.2.bb b/packages/dbus/dbus_1.0.2.bb index be62e1cc6e..c2b31db782 100644 --- a/packages/dbus/dbus_1.0.2.bb +++ b/packages/dbus/dbus_1.0.2.bb @@ -2,7 +2,7 @@ require dbus.inc DEFAULT_PREFERENCE = "1" -PR = "r6" +PR = "r7" SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \ file://tmpdir.patch;patch=1 \ -- cgit v1.2.3 From 5aaaaa5942b4a928a34bf3804a3cf8cc302be4f8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 12:31:31 +0000 Subject: er0100: commit it, this has been sitting in my repo for too long --- conf/machine/er0100.conf | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 conf/machine/er0100.conf diff --git a/conf/machine/er0100.conf b/conf/machine/er0100.conf new file mode 100644 index 0000000000..1eebb03f37 --- /dev/null +++ b/conf/machine/er0100.conf @@ -0,0 +1,46 @@ +#@TYPE: Machine +#@NAME: iRex Iliad e-ink reader +#@DESCRIPTION: Machine configuration for the iRex Iliad e-ink reader + +# +# Hardware-based properties +# + +# CPU: Intel (now Marvell) PXA255 + +TARGET_ARCH = "arm" +PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5te" + +# Use tune-xscale per default. Machine independent feeds should be built with tune-strongarm. +require conf/machine/include/tune-xscale.conf + +# Fix us: + +#ROOT_FLASH_SIZE = "80" +#VOLATILE_STORAGE_SIZE = "64" +MACHINE_GUI_CLASS = "bigscreen" +MACHINE_DISPLAY_WIDTH_PIXELS = "768" +MACHINE_DISPLAY_HEIGHT_PIXELS = "1024" +MACHINE_FEATURES = "kernel24 touchscreen apm alsa pcmcia wifi usbgadget usbhost screen" + +# +# Software/packages selection +# +PREFERRED_PROVIDER_virtual/kernel = "linux-er0100" +PCMCIA_MANAGER = "pcmcia-cs" +MODUTILS = "24" +XSERVER = "xserver-kdrive-fbdev" + + +# +# Modules autoload and other boot properties +# +module_autoload_evdev = "evdev" +module_autoload_pcmcia = "pcmcia" + +#FIXME: this should be controlled by a userspace utility later. +module_autoload_g_ether = "g_ether" + +USE_VT = "0" +SERIAL_CONSOLE = "-L ttyS2 115200 vt100" + -- cgit v1.2.3 From 05b509107f4697d9ec9a6eaae1d8085a197ac57b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 12:56:53 +0000 Subject: iwmmxt machines: add 'iwmmxt' as machine feature --- conf/machine/akita.conf | 2 ++ conf/machine/htcuniversal.conf | 1 + conf/machine/hx4700.conf | 1 + conf/machine/include/motorola-ezx-base.inc | 3 +++ conf/machine/magician.conf | 2 ++ conf/machine/palmld.conf | 1 + conf/machine/rokre2.conf | 2 ++ conf/machine/rokre6.conf | 2 -- conf/machine/spitz.conf | 2 ++ 9 files changed, 14 insertions(+), 2 deletions(-) diff --git a/conf/machine/akita.conf b/conf/machine/akita.conf index 06d5946523..0f5eaca9cc 100644 --- a/conf/machine/akita.conf +++ b/conf/machine/akita.conf @@ -6,6 +6,8 @@ require conf/machine/include/zaurus-2.6.inc require conf/machine/include/zaurus-clamshell.inc PACKAGE_EXTRA_ARCHS += "iwmmxt" +MACHINE_FEATURES += "iwmmxt" + IMAGE_FSTYPES ?= "jffs2" ROOT_FLASH_SIZE = "58" diff --git a/conf/machine/htcuniversal.conf b/conf/machine/htcuniversal.conf index 634b388f96..c3e7cf710e 100644 --- a/conf/machine/htcuniversal.conf +++ b/conf/machine/htcuniversal.conf @@ -18,6 +18,7 @@ MACHINE_GUI_CLASS = "bigscreen" MACHINE_DISPLAY_WIDTH_PIXELS = "480" MACHINE_DISPLAY_HEIGHT_PIXELS = "640" MACHINE_FEATURES = "kernel26 apm alsa irda usbgadget usbhost keyboard touchscreen screen wifi bluetooth phone" +MACHINE_FEATURES += "iwmmxt" # # Software/packages selection diff --git a/conf/machine/hx4700.conf b/conf/machine/hx4700.conf index 141470b5a4..7cea4e08de 100644 --- a/conf/machine/hx4700.conf +++ b/conf/machine/hx4700.conf @@ -20,6 +20,7 @@ MACHINE_GUI_CLASS = "bigscreen" MACHINE_DISPLAY_WIDTH_PIXELS = "480" MACHINE_DISPLAY_HEIGHT_PIXELS = "640" MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda wifi usbgadget screen" +MACHINE_FEATURES += "iwmmxt" # # Software/packages selection diff --git a/conf/machine/include/motorola-ezx-base.inc b/conf/machine/include/motorola-ezx-base.inc index 3912d8fc9b..87571c0db0 100644 --- a/conf/machine/include/motorola-ezx-base.inc +++ b/conf/machine/include/motorola-ezx-base.inc @@ -12,6 +12,9 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-ezx" #mtd3: 00020000 00020000 "Logo" MACHINE_FEATURES = "kernel26 touchscreen apm alsa bluetooth usbgadget usbhost keyboard screen" +MACHINE_FEATURES += "iwmmxt" + + MACHINE_DISPLAY_WIDTH_PIXELS = "240" MACHINE_DISPLAY_HEIGHT_PIXELS = "320" MACHINE_DISPLAY_ORIENTATION = "0" diff --git a/conf/machine/magician.conf b/conf/machine/magician.conf index 60cc9af3d1..f7451cccb0 100644 --- a/conf/machine/magician.conf +++ b/conf/machine/magician.conf @@ -20,6 +20,8 @@ MACHINE_GUI_CLASS = "smallscreen" MACHINE_DISPLAY_WIDTH_PIXELS = "240" MACHINE_DISPLAY_HEIGHT_PIXELS = "320" MACHINE_FEATURES = "alsa apm bluetooth irda kernel26 phone screen touchscreen usbgadget usbhost" +MACHINE_FEATURES += "iwmmxt" + # # We don't support jffs2 installations (yet). diff --git a/conf/machine/palmld.conf b/conf/machine/palmld.conf index 2f92eb4158..bbeaf3a4a2 100644 --- a/conf/machine/palmld.conf +++ b/conf/machine/palmld.conf @@ -10,6 +10,7 @@ MACHINE_GUI_CLASS = "bigscreen" MACHINE_DISPLAY_WIDTH_PIXELS = "320" MACHINE_DISPLAY_HEIGHT_PIXELS = "480" MACHINE_FEATURES += "pcmcia wifi" +MACHINE_FEATURES += "iwmmxt" MACHINE_EXTRA_RRECOMMENDS += "\ diff --git a/conf/machine/rokre2.conf b/conf/machine/rokre2.conf index 621e95f166..1a99c877ce 100644 --- a/conf/machine/rokre2.conf +++ b/conf/machine/rokre2.conf @@ -6,3 +6,5 @@ require conf/machine/include/motorola-ezx-base.inc # there is no touchscreen MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost keyboard screen" +MACHINE_FEATURES += "iwmmxt" + diff --git a/conf/machine/rokre6.conf b/conf/machine/rokre6.conf index 7b20091140..044a65c9fa 100644 --- a/conf/machine/rokre6.conf +++ b/conf/machine/rokre6.conf @@ -4,5 +4,3 @@ require conf/machine/include/motorola-ezx-base.inc -# there is no touchscreen -MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost keyboard screen" diff --git a/conf/machine/spitz.conf b/conf/machine/spitz.conf index 3199065606..32060d090c 100644 --- a/conf/machine/spitz.conf +++ b/conf/machine/spitz.conf @@ -5,6 +5,8 @@ require conf/machine/include/zaurus-2.6.inc require conf/machine/include/zaurus-clamshell.inc +MACHINE_FEATURES += "iwmmxt" + PIVOTBOOT_EXTRA_RDEPENDS += "pivotinit ${PCMCIA_MANAGER}" PACKAGE_EXTRA_ARCHS += "iwmmxt" -- cgit v1.2.3 From 3d13ac6f238bf6d2fdf2508f14b63ab6665c5865 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 13:11:03 +0000 Subject: mplayer svn: use iwmmxt when appropriate MACHINE_FEATURE has been set [15:04] XorA: koen: good for me, saves adding a bazilion machines --- packages/mplayer/mplayer_svn.bb | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/packages/mplayer/mplayer_svn.bb b/packages/mplayer/mplayer_svn.bb index 995ed763ff..faef8c0f2d 100644 --- a/packages/mplayer/mplayer_svn.bb +++ b/packages/mplayer/mplayer_svn.bb @@ -180,29 +180,16 @@ EXTRA_OECONF_append_progear = " --disable-sse --disable-3dnow --disable-mmxext - EXTRA_OECONF_append_c7x0 = " --enable-w100 --enable-imageon " EXTRA_OECONF_append_hx4700 = " --enable-imageon " -#enable pxa270 overlay support -EXTRA_OECONF_append_spitz = " --enable-pxa --enable-iwmmxt " -EXTRA_OECONF_append_akita = " --enable-pxa --enable-iwmmxt " -EXTRA_OECONF_append_a780 = " --enable-pxa --enable-iwmmxt" -EXTRA_OECONF_append_magician = " --enable-pxa --enable-iwmmxt" -EXTRA_OECONF_append_htcuniversal = " --enable-pxa --enable-iwmmxt" -EXTRA_OECONF_append_palmld = " --enable-pxa --enable-iwmmxt" - -#build with support for the iwmmxt instruction support (pxa270 and up) -TARGET_CC_ARCH_spitz = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_spitz = "iwmmxt" -TARGET_CC_ARCH_akita = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_akita = "iwmmxt" -TARGET_CC_ARCH_a780 = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_a780 = "iwmmxt" -TARGET_CC_ARCH_hx4700 = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_hx4700 = "iwmmxt" -TARGET_CC_ARCH_magician = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_magician = "iwmmxt" -TARGET_CC_ARCH_htcuniversal = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_htcuniversal = "iwmmxt" -TARGET_CC_ARCH_palmld = "-march=iwmmxt -mtune=iwmmxt" -PACKAGE_ARCH_palmld = "iwmmxt" + +#build with support for the iwmmxt instruction and pxa270fb overlay support (pxa270 and up) +#not every iwmmxt machine has the lcd connected to pxafb, but building the module doesn't hurt +MY_ARCH := "${PACKAGE_ARCH}" +PACKAGE_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '${MY_ARCH}',d)}" + +MY_TARGET_CC_ARCH := "${TARGET_CC_ARCH}" +TARGET_CC_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', '-march=iwmmxt -mtune=iwmmxt', '${MY_TARGET_CC_ARCH}',d)}" + +EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'iwmmxt', '--enable-pxa --enable-iwmmxt', '',d)} " do_configure() { cp ${WORKDIR}/vo_w100.c ${S}/libvo -- cgit v1.2.3 From b8347f23da36885e21473b5d83a7fa77076ac213 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 13:20:54 +0000 Subject: er0100: catch up with include renaming --- conf/machine/er0100.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/er0100.conf b/conf/machine/er0100.conf index 1eebb03f37..211091d929 100644 --- a/conf/machine/er0100.conf +++ b/conf/machine/er0100.conf @@ -12,7 +12,7 @@ TARGET_ARCH = "arm" PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5te" # Use tune-xscale per default. Machine independent feeds should be built with tune-strongarm. -require conf/machine/include/tune-xscale.conf +require conf/machine/include/tune-xscale.inc # Fix us: -- cgit v1.2.3 From fdfb1e4cba345a9b4cd74d25ea78de7892243962 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 14:54:55 +0000 Subject: gst-meta-base: gst-plugins-bad is needed for ivorbis --- packages/gstreamer/gst-meta-base_0.10.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gstreamer/gst-meta-base_0.10.bb b/packages/gstreamer/gst-meta-base_0.10.bb index fbf36b94b0..d3b9d6ac20 100644 --- a/packages/gstreamer/gst-meta-base_0.10.bb +++ b/packages/gstreamer/gst-meta-base_0.10.bb @@ -1,8 +1,8 @@ # Based on its sibling on Poky which is copyright (C) 2006,2007 OpenedHand LTD DESCRIPTION = "Gstreamer package groups" -DEPENDS = "gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly" -PR = "r5" +DEPENDS = "gstreamer gst-plugins-base gst-plugins-bad gst-plugins-good gst-plugins-ugly" +PR = "r7" PACKAGES = "\ gst-meta-base \ -- cgit v1.2.3 From 2bcf4f6e0b4cb7ef204514440b4f90d4c03886fd Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 1 Oct 2007 17:43:16 +0000 Subject: site: commit some local changes --- site/arm-common | 8 ++++---- site/arm-linux | 3 +++ site/common-glibc | 3 +++ site/common-uclibc | 3 +++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/site/arm-common b/site/arm-common index bfc141072b..fb050dbcf1 100644 --- a/site/arm-common +++ b/site/arm-common @@ -158,15 +158,15 @@ nano_cv_func_regexec_segv_emptystr=${nano_cv_func_regexec_segv_emptystr=no} # ORBit2 ac_cv_alignof_CORBA_boolean=1 ac_cv_alignof_CORBA_char=1 -ac_cv_alignof_CORBA_double=4 +ac_cv_alignof_CORBA_double=8 ac_cv_alignof_CORBA_float=4 ac_cv_alignof_CORBA_long=4 -ac_cv_alignof_CORBA_long_double=4 -ac_cv_alignof_CORBA_long_long=4 +ac_cv_alignof_CORBA_long_double=8 +ac_cv_alignof_CORBA_long_long=8 ac_cv_alignof_CORBA_octet=1 ac_cv_alignof_CORBA_pointer=4 ac_cv_alignof_CORBA_short=2 -ac_cv_alignof_CORBA_struct=4 +ac_cv_alignof_CORBA_struct=1 ac_cv_alignof_CORBA_wchar=2 ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes} diff --git a/site/arm-linux b/site/arm-linux index d45c8f87c2..9aea75b5a9 100644 --- a/site/arm-linux +++ b/site/arm-linux @@ -168,6 +168,9 @@ ac_cv_file___dev_ptc_=yes #mono mono_cv_uscore=${mono_cv_uscore=no} +# guile +ac_cv_func_pthread_attr_getstack=${ac_cv_func_pthread_attr_getstack=yes} + # gnet ac_cv_member_struct_sockaddr_sa_len=${ac_cv_member_struct_sockaddr_sa_len=no} ac_cv_gnet_have_abstract_sockets=${ac_cv_gnet_have_abstract_sockets=no} diff --git a/site/common-glibc b/site/common-glibc index 8e0e90d614..edbf4b41ee 100644 --- a/site/common-glibc +++ b/site/common-glibc @@ -21,6 +21,9 @@ ac_cv_func_vsnprintf_c99=${ac_cv_func_vsnprintf_c99=yes} glib_cv_compliant_posix_memalign=${glib_cv_compliant_posix_memalign=1} glib_cv_long_long_format=${glib_cv_long_long_format=ll} +#dbus-glib +ac_cv_have_abstract_sockets=${ac_cv_have_abstract_sockets=yes} + # gnucash am_cv_scanf_lld=${am_cv_scanf_lld=yes} diff --git a/site/common-uclibc b/site/common-uclibc index a57abdbef8..3112d3ed6c 100644 --- a/site/common-uclibc +++ b/site/common-uclibc @@ -1,6 +1,9 @@ # general ac_cv_have_decl_sys_siglist=${ac_cv_have_decl_sys_siglist=no} +#dbus-glib +ac_cv_have_abstract_sockets=${ac_cv_have_abstract_sockets=yes} + # bash bash_cv_under_sys_siglist=${bash_cv_under_sys_siglist=no} bash_cv_sys_siglist=${bash_cv_sys_siglist=no} -- cgit v1.2.3 From d1f179f470466c3ff18855ba7c4bc9ca41fab2df Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Mon, 1 Oct 2007 19:28:02 +0000 Subject: linux : Update patches for gumstix from gumstix buildroot. --- .../linux/linux-2.6.21/gumstix-pxa270-mmc.patch | 33 ++ packages/linux/linux-2.6.21/mmc-card-detect.patch | 6 +- packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch | 17 +- packages/linux/linux-2.6.21/pxafb-definition.patch | 42 +-- packages/linux/linux-2.6.21/smc911x-fixup.patch | 392 +++++++++++++++++++++ packages/linux/linux_2.6.21.bb | 2 + 6 files changed, 464 insertions(+), 28 deletions(-) create mode 100644 packages/linux/linux-2.6.21/gumstix-pxa270-mmc.patch create mode 100644 packages/linux/linux-2.6.21/smc911x-fixup.patch diff --git a/packages/linux/linux-2.6.21/gumstix-pxa270-mmc.patch b/packages/linux/linux-2.6.21/gumstix-pxa270-mmc.patch new file mode 100644 index 0000000000..59d97809d1 --- /dev/null +++ b/packages/linux/linux-2.6.21/gumstix-pxa270-mmc.patch @@ -0,0 +1,33 @@ +Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +=================================================================== +--- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c ++++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +@@ -33,8 +33,9 @@ + + static struct pxamci_platform_data gumstix_mci_platform_data; + +-static int gumstix_mci_init(struct device *dev, irqreturn_t (*gumstix_detect_int)(int, void *, struct pt_regs *), void *data) ++static int gumstix_mci_init(struct device *dev, irq_handler_t gumstix_detect_int, void *data) + { ++#ifndef CONFIG_ARCH_GUMSTIX_VERDEX + int err; + + pxa_gpio_mode(GPIO6_MMCCLK_MD); +@@ -55,6 +56,17 @@ static int gumstix_mci_init(struct devic + } + + err = set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE); ++#else ++ // Setup GPIOs for MMC on the 120-pin connector ++ // There is no card detect on a uSD connector so no interrupt to register ++ // There is no WP detect GPIO line either ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++#endif + + return 0; + } diff --git a/packages/linux/linux-2.6.21/mmc-card-detect.patch b/packages/linux/linux-2.6.21/mmc-card-detect.patch index 9a853b4df8..26dd970e3b 100644 --- a/packages/linux/linux-2.6.21/mmc-card-detect.patch +++ b/packages/linux/linux-2.6.21/mmc-card-detect.patch @@ -2,7 +2,7 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c =================================================================== --- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c +++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c -@@ -29,19 +29,51 @@ +@@ -29,19 +29,55 @@ #include "generic.h" @@ -38,9 +38,13 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c +static int gumstix_mci_get_ro(struct device *dev) +{ ++#ifdef CONFIG_ARCH_GUMSTIX_VERDEX ++ return 0; // microSD is always writable on verdex ++#else + int ro; + ro = GPLR(GUMSTIX_GPIO_nSD_WP) & GPIO_bit(GUMSTIX_GPIO_nSD_WP); + return ro; ++#endif +} + +static void gumstix_mci_exit(struct device *dev, void *data) diff --git a/packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch b/packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch index 3643b402e5..c9849d22f4 100644 --- a/packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch +++ b/packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch @@ -154,7 +154,7 @@ Index: linux-2.6.21gum/drivers/video/pxafb.c case '-': namelen = i; if (!bpp_specified && !yres_specified) { -@@ -1227,6 +1268,18 @@ static int __init pxafb_parse_options(st +@@ -1227,12 +1268,29 @@ static int __init pxafb_parse_options(st } if (bpp_specified) switch (bpp) { @@ -173,6 +173,17 @@ Index: linux-2.6.21gum/drivers/video/pxafb.c case 1: case 2: case 4: + case 8: + case 16: + inf->modes[0].bpp = bpp; ++ if(nonstd_specified) { ++ dev_err(dev, "Depth %d requires nonstd to *not* be specified\n",bpp); ++ } else { ++ inf->modes[0].nonstd = 0; ++ } + dev_info(dev, "overriding bit depth: %d\n", bpp); + break; + default: Index: linux-2.6.21gum/include/asm-arm/arch-pxa/pxa-regs.h =================================================================== --- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/pxa-regs.h @@ -217,7 +228,7 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c =================================================================== --- linux-2.6.21gum.orig/arch/arm/mach-pxa/gumstix.c +++ linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c -@@ -100,7 +100,8 @@ static struct pxafb_mode_info gumstix_fb +@@ -116,7 +116,8 @@ static struct pxafb_mode_info gumstix_fb .pixclock = 110000, .xres = 480, .yres = 272, @@ -227,7 +238,7 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c .hsync_len = 41, .left_margin = 2, .right_margin = 2, -@@ -139,7 +140,8 @@ static struct pxafb_mode_info gumstix_fb +@@ -144,7 +145,8 @@ static struct pxafb_mode_info gumstix_fb .vsync_len = 10, // VLW from datasheet: 10 typ .upper_margin = 2, // VBP - VLW from datasheet: 12 - 10 = 2 .lower_margin = 4, // VFP from datasheet: 4 typ diff --git a/packages/linux/linux-2.6.21/pxafb-definition.patch b/packages/linux/linux-2.6.21/pxafb-definition.patch index 2a782c6143..56369fd788 100644 --- a/packages/linux/linux-2.6.21/pxafb-definition.patch +++ b/packages/linux/linux-2.6.21/pxafb-definition.patch @@ -10,10 +10,26 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c #include #include "generic.h" -@@ -86,6 +87,95 @@ static struct platform_device gum_audio_ +@@ -86,6 +87,89 @@ static struct platform_device gum_audio_ .id = -1, }; ++ ++#if defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) || defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) ++static void gumstix_lcd_backlight(int on_or_off) ++{ ++ if(on_or_off) ++ { ++ pxa_gpio_mode(17 | GPIO_IN); ++ } else { ++ GPCR(17) = GPIO_bit(17); ++ pxa_gpio_mode(17 | GPIO_OUT); ++ GPCR(17) = GPIO_bit(17); ++ } ++} ++#endif ++ ++ +#ifdef CONFIG_FB_PXA_ALPS_CDOLLAR +static struct pxafb_mode_info gumstix_fb_mode = { + .pixclock = 300000, @@ -50,17 +66,6 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c + .sync = 0, // Hsync and Vsync both active low +}; + -+static void gumstix_lcd_backlight(int on_or_off) -+{ -+ pxa_gpio_mode(17 | GPIO_OUT); -+ if(on_or_off) -+ { -+ GPSR(17) = GPIO_bit(17); -+ } else { -+ GPCR(17) = GPIO_bit(17); -+ } -+} -+ +static struct pxafb_mach_info gumstix_fb_info = { + .modes = &gumstix_fb_mode, + .num_modes = 1, @@ -83,17 +88,6 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c + .sync = 0, // Hsync and Vsync both active low +}; + -+static void gumstix_lcd_backlight(int on_or_off) -+{ -+ pxa_gpio_mode(17 | GPIO_OUT); -+ if(on_or_off) -+ { -+ GPSR(17) = GPIO_bit(17); -+ } else { -+ GPCR(17) = GPIO_bit(17); -+ } -+} -+ +static struct pxafb_mach_info gumstix_fb_info = { + .modes = &gumstix_fb_mode, + .num_modes = 1, @@ -106,7 +100,7 @@ Index: linux-2.6.21gum/arch/arm/mach-pxa/gumstix.c static struct platform_device *devices[] __initdata = { &gum_audio_device, }; -@@ -94,6 +184,9 @@ static void __init gumstix_init(void) +@@ -94,6 +178,9 @@ static void __init gumstix_init(void) { pxa_set_mci_info(&gumstix_mci_platform_data); pxa_set_udc_info(&gumstix_udc_info); diff --git a/packages/linux/linux-2.6.21/smc911x-fixup.patch b/packages/linux/linux-2.6.21/smc911x-fixup.patch new file mode 100644 index 0000000000..c0b7574d3a --- /dev/null +++ b/packages/linux/linux-2.6.21/smc911x-fixup.patch @@ -0,0 +1,392 @@ +Index: linux-2.6.21gum/drivers/net/smc911x.c +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc911x.c ++++ linux-2.6.21gum/drivers/net/smc911x.c +@@ -76,6 +76,7 @@ static const char version[] = + #include + #include + ++#include + #include + #include + +@@ -303,14 +304,14 @@ static void smc911x_reset(struct net_dev + SMC_SET_AFC_CFG(lp->afc_cfg); + + +- /* Set to LED outputs */ +- SMC_SET_GPIO_CFG(0x70070000); ++ /* Set to LED outputs and configure EEPROM pins as GP outputs */ ++ SMC_SET_GPIO_CFG(GPIO_CFG_LED1_EN_ | GPIO_CFG_LED2_EN_ | 1 << 20); + + /* +- * Deassert IRQ for 1*10us for edge type interrupts ++ * Deassert IRQ for 22*10us for edge type interrupts + * and drive IRQ pin push-pull + */ +- SMC_SET_IRQ_CFG( (1 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_ ); ++ SMC_SET_IRQ_CFG( (22 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_ ); + + /* clear anything saved */ + if (lp->pending_tx_skb != NULL) { +@@ -413,7 +414,7 @@ static inline void smc911x_drop_pkt(stru + if (fifo_count <= 4) { + /* Manually dump the packet data */ + while (fifo_count--) +- SMC_GET_RX_FIFO(); ++ (void)SMC_GET_RX_FIFO(); + } else { + /* Fast forward through the bad packet */ + SMC_SET_RX_DP_CTRL(RX_DP_CTRL_FFWD_BUSY_); +@@ -499,7 +500,7 @@ static inline void smc911x_rcv(struct n + SMC_SET_RX_CFG(RX_CFG_RX_END_ALGN4_ | ((2<<8) & RX_CFG_RXDOFF_)); + SMC_PULL_DATA(data, pkt_len+2+3); + +- DBG(SMC_DEBUG_PKTS, "%s: Received packet\n", dev->name,); ++ DBG(SMC_DEBUG_PKTS, "%s: Received packet\n", dev->name); + PRINT_PKT(data, ((pkt_len - 4) <= 64) ? pkt_len - 4 : 64); + dev->last_rx = jiffies; + skb->dev = dev; +@@ -900,6 +901,7 @@ static void smc911x_phy_powerdown(struct + unsigned long ioaddr = dev->base_addr; + unsigned int bmcr; + ++ DBG(SMC_DEBUG_FUNC, "%s: --> %s\n", dev->name, __FUNCTION__); + /* Enter Link Disable state */ + SMC_GET_PHY_BMCR(phy, bmcr); + bmcr |= BMCR_PDOWN; +@@ -925,6 +927,7 @@ static void smc911x_phy_check_media(stru + + if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) { + /* duplex state has changed */ ++ DBG(SMC_DEBUG_MISC, "%s: duplex state has changed\n", dev->name); + SMC_GET_PHY_BMCR(phyaddr, bmcr); + SMC_GET_MAC_CR(cr); + if (lp->mii.full_duplex) { +@@ -960,6 +963,7 @@ static void smc911x_phy_configure(struct + int my_phy_caps; /* My PHY capabilities */ + int my_ad_caps; /* My Advertised capabilities */ + int status; ++ int bmcr; + unsigned long flags; + + DBG(SMC_DEBUG_FUNC, "%s: --> %s()\n", dev->name, __FUNCTION__); +@@ -1033,9 +1037,12 @@ static void smc911x_phy_configure(struct + + DBG(SMC_DEBUG_MISC, "%s: phy caps=0x%04x\n", dev->name, my_phy_caps); + DBG(SMC_DEBUG_MISC, "%s: phy advertised caps=0x%04x\n", dev->name, my_ad_caps); ++ DBG(SMC_DEBUG_MISC, "%s: phy advertised readback caps=0x%04x\n", dev->name, status); + + /* Restart auto-negotiation process in order to advertise my caps */ +- SMC_SET_PHY_BMCR(phyaddr, BMCR_ANENABLE | BMCR_ANRESTART); ++ SMC_GET_PHY_BMCR(phyaddr, bmcr); ++ bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; ++ SMC_SET_PHY_BMCR(phyaddr, bmcr); + + smc911x_phy_check_media(dev, 1); + +@@ -1888,6 +1895,39 @@ static int __init smc911x_findirq(unsign + return probe_irq_off(cookie); + } + ++static inline unsigned int is_gumstix_oui(u8 *addr) ++{ ++ return (addr[0] == 0x00 && addr[1] == 0x15 && addr[2] == 0xC9); ++} ++ ++/** ++ * gen_serial_ether_addr - Generate software assigned Ethernet address ++ * based on the system_serial number ++ * @addr: Pointer to a six-byte array containing the Ethernet address ++ * ++ * Generate an Ethernet address (MAC) that is not multicast ++ * and has the local assigned bit set, keyed on the system_serial ++ */ ++static inline void gen_serial_ether_addr(u8 *addr) ++{ ++ static u8 ether_serial_digit = 0; ++ addr [0] = system_serial_high >> 8; ++ addr [1] = system_serial_high; ++ addr [2] = system_serial_low >> 24; ++ addr [3] = system_serial_low >> 16; ++ addr [4] = system_serial_low >> 8; ++ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */ ++ (1 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */ ++ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */ ++ ++ if(!is_gumstix_oui(addr)) ++ { ++ addr [0] &= 0xfe; /* clear multicast bit */ ++ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ ++ } ++} ++ ++ + /* + * Function: smc911x_probe(unsigned long ioaddr) + * +@@ -2116,15 +2156,13 @@ static int __init smc911x_probe(struct n + #endif + printk("\n"); + if (!is_valid_ether_addr(dev->dev_addr)) { +- printk("%s: Invalid ethernet MAC address. Please " +- "set using ifconfig\n", dev->name); +- } else { +- /* Print the Ethernet address */ +- printk("%s: Ethernet addr: ", dev->name); +- for (i = 0; i < 5; i++) +- printk("%2.2x:", dev->dev_addr[i]); +- printk("%2.2x\n", dev->dev_addr[5]); ++ gen_serial_ether_addr(dev->dev_addr); + } ++ /* Print the Ethernet address */ ++ printk("%s: Ethernet addr: ", dev->name); ++ for (i = 0; i < 5; i++) ++ printk("%2.2x:", dev->dev_addr[i]); ++ printk("%2.2x\n", dev->dev_addr[5]); + + if (lp->phy_type == 0) { + PRINTK("%s: No PHY found\n", dev->name); +@@ -2300,8 +2338,15 @@ static struct platform_driver smc911x_dr + }, + }; + ++#ifdef CONFIG_ARCH_GUMSTIX ++extern void gumstix_smc911x_load(void); ++#endif ++ + static int __init smc911x_init(void) + { ++#ifdef CONFIG_ARCH_GUMSTIX ++ gumstix_smc911x_load(); ++#endif + return platform_driver_register(&smc911x_driver); + } + +Index: linux-2.6.21gum/drivers/net/gumstix-smc911x.c +=================================================================== +--- /dev/null ++++ linux-2.6.21gum/drivers/net/gumstix-smc911x.c +@@ -0,0 +1,148 @@ ++/* ++ * Gumstix SMC911x chip intialization driver ++ * ++ * Author: Craig Hughes ++ * Created: December 9, 2004 ++ * Copyright: (C) 2004 Craig Hughes ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++ ++#define SMC_DEBUG 9 ++#include ++#include "smc911x.h" ++ ++static struct resource gumstix_smc911x0_resources[] = { ++ [0] = { ++ .name = "smc911x-regs", ++ .start = PXA_CS1_PHYS, ++ .end = PXA_CS1_PHYS + 0x000fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = GUMSTIX_ETH0_IRQ, ++ .end = GUMSTIX_ETH0_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct resource gumstix_smc911x1_resources[] = { ++ [0] = { ++ .name = "smc911x-regs", ++ .start = PXA_CS2_PHYS, ++ .end = PXA_CS2_PHYS + 0x000fffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = GUMSTIX_ETH1_IRQ, ++ .end = GUMSTIX_ETH1_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device gumstix_smc911x0_device = { ++ .name = "smc911x", ++ .id = 0, ++ .num_resources = ARRAY_SIZE(gumstix_smc911x0_resources), ++ .resource = gumstix_smc911x0_resources, ++}; ++ ++static struct platform_device gumstix_smc911x1_device = { ++ .name = "smc911x", ++ .id = 1, ++ .num_resources = ARRAY_SIZE(gumstix_smc911x1_resources), ++ .resource = gumstix_smc911x1_resources, ++}; ++ ++static struct platform_device *smc911x_devices[] = { ++ &gumstix_smc911x0_device, ++ &gumstix_smc911x1_device, ++}; ++ ++/* First we're going to test if there's a 2nd SMC911x, and if not, then we'll free up those resources and the GPIO lines ++ * that it would otherwise use. We have no choice but to probe by doing: ++ * Set nCS2 to CS2 mode ++ * Set the reset line to GPIO out mode, and pull it high, then drop it low (to trigger reset) ++ * Read from the memory space to check for the sentinel sequence identifying a likely SMC911x device ++ */ ++int __init gumstix_smc911x_init(void) ++{ ++ unsigned int val, num_devices=ARRAY_SIZE(smc911x_devices); ++ void *ioaddr; ++ ++ /* Set up nPWE */ ++ pxa_gpio_mode(GPIO49_nPWE_MD); ++ ++ pxa_gpio_mode(GPIO78_nCS_2_MD); ++ // If either if statement fails, then we'll drop out and turn_off_eth1, ++ // if both succeed, then we'll skip that and just proceed with 2 cards ++ if(request_mem_region(gumstix_smc911x1_resources[1].start, SMC911X_IO_EXTENT, "smc911x probe")) ++ { ++ ioaddr = ioremap(gumstix_smc911x1_resources[1].start, SMC911X_IO_EXTENT); ++ val = SMC_GET_PN(); ++ iounmap(ioaddr); ++ release_mem_region(gumstix_smc911x1_resources[1].start, SMC911X_IO_EXTENT); ++ if (CHIP_9115 == val || ++ CHIP_9116 == val || ++ CHIP_9117 == val || ++ CHIP_9118 == val ) { ++ goto proceed; ++ } ++ } ++ ++turn_off_eth1: ++ // This is apparently not an SMC911x ++ // So, let's decrement the number of devices to request, and reset the GPIO lines to GPIO IN mode ++ num_devices--; ++ smc911x_devices[1] = NULL; ++ pxa_gpio_mode(78 | GPIO_IN); ++ ++proceed: ++ pxa_gpio_mode(GPIO15_nCS_1_MD); ++ ++ if(smc911x_devices[1]) pxa_gpio_mode(GPIO_GUMSTIX_ETH1_RST_MD); ++ pxa_gpio_mode(GPIO_GUMSTIX_ETH0_RST_MD); ++ ++ if(smc911x_devices[1]) GPCR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); ++ GPCR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); ++ msleep(500); // Hold RESET for at least 200µ ++ ++ if(smc911x_devices[1]) GPSR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); ++ GPSR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); ++ msleep(50); ++ ++ return platform_add_devices(smc911x_devices, num_devices); ++} ++ ++void __exit gumstix_smc911x_exit(void) ++{ ++ if(smc911x_devices[1] != NULL) platform_device_unregister(&gumstix_smc911x1_device); ++ platform_device_unregister(&gumstix_smc911x0_device); ++} ++ ++void gumstix_smc911x_load(void) {} ++EXPORT_SYMBOL(gumstix_smc911x_load); ++ ++module_init(gumstix_smc911x_init); ++module_exit(gumstix_smc911x_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Craig Hughes "); ++MODULE_DESCRIPTION("Gumstix board SMC911x chip initialization driver"); ++MODULE_VERSION("1:0.1"); +Index: linux-2.6.21gum/drivers/net/Kconfig +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/Kconfig ++++ linux-2.6.21gum/drivers/net/Kconfig +@@ -897,6 +897,13 @@ config SMC911X + called smc911x. If you want to compile it as a module, say M + here and read + ++config SMC911X_GUMSTIX ++ tristate ++ default m if SMC911X=m ++ default y if SMC911X=y ++ depends on SMC911X && ARCH_GUMSTIX ++ ++ + config NET_VENDOR_RACAL + bool "Racal-Interlan (Micom) NI cards" + depends on NET_ETHERNET && ISA +Index: linux-2.6.21gum/drivers/net/Makefile +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/Makefile ++++ linux-2.6.21gum/drivers/net/Makefile +@@ -201,6 +201,7 @@ obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o + obj-$(CONFIG_MACB) += macb.o + + obj-$(CONFIG_SMC91X_GUMSTIX) += gumstix-smc91x.o ++obj-$(CONFIG_SMC911X_GUMSTIX) += gumstix-smc911x.o + obj-$(CONFIG_ARM) += arm/ + obj-$(CONFIG_DEV_APPLETALK) += appletalk/ + obj-$(CONFIG_TR) += tokenring/ +Index: linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +=================================================================== +--- linux-2.6.21gum.orig/include/asm-arm/arch-pxa/gumstix.h ++++ linux-2.6.21gum/include/asm-arm/arch-pxa/gumstix.h +@@ -52,7 +52,7 @@ + #define GPIO_GUMSTIX_ETH0_RST 80 + #define GPIO_GUMSTIX_ETH0 36 + #else +-#define GPIO_GUMSTIX_ETH0_RST 32 ++#define GPIO_GUMSTIX_ETH0_RST 107 + #define GPIO_GUMSTIX_ETH0 99 + #endif + #define GPIO_GUMSTIX_ETH1_RST 52 +Index: linux-2.6.21gum/drivers/net/smc911x.h +=================================================================== +--- linux-2.6.21gum.orig/drivers/net/smc911x.h ++++ linux-2.6.21gum/drivers/net/smc911x.h +@@ -33,7 +33,9 @@ + * Use the DMA feature on PXA chips + */ + #ifdef CONFIG_ARCH_PXA ++#ifndef CONFIG_SMC911X_GUMSTIX + #define SMC_USE_PXA_DMA 1 ++#endif + #define SMC_USE_16BIT 0 + #define SMC_USE_32BIT 1 + #endif +@@ -46,13 +48,13 @@ + #if SMC_USE_16BIT + #define SMC_inb(a, r) readb((a) + (r)) + #define SMC_inw(a, r) readw((a) + (r)) +-#define SMC_inl(a, r) ((SMC_inw(a, r) & 0xFFFF)+(SMC_inw(a+2, r)<<16)) ++#define SMC_inl(a, r) ((SMC_inw(a, r) & 0xFFFF)+(SMC_inw((a)+2, r)<<16)) + #define SMC_outb(v, a, r) writeb(v, (a) + (r)) + #define SMC_outw(v, a, r) writew(v, (a) + (r)) + #define SMC_outl(v, a, r) \ + do{ \ +- writel(v & 0xFFFF, (a) + (r)); \ +- writel(v >> 16, (a) + (r) + 2); \ ++ writel((v) & 0xFFFF, (a) + (r)); \ ++ writel((v) >> 16, (a) + (r) + 2); \ + } while (0) + #define SMC_insl(a, r, p, l) readsw((short*)((a) + (r)), p, l*2) + #define SMC_outsl(a, r, p, l) writesw((short*)((a) + (r)), p, l*2) diff --git a/packages/linux/linux_2.6.21.bb b/packages/linux/linux_2.6.21.bb index 0848bcd71a..2ef35ef4c0 100644 --- a/packages/linux/linux_2.6.21.bb +++ b/packages/linux/linux_2.6.21.bb @@ -69,7 +69,9 @@ GUMSTIX_PATCHES = "\ file://uImage-in-own-partition.patch;patch=1 \ file://pxa-regs-fixup.patch;patch=1 \ file://gumstix-fb-logo.patch;patch=1 \ + file://gumstix-pxa270-mmc.patch;patch=1 \ file://pxafb-18bpp-mode.patch;patch=1 \ + file://smc911x-fixup.patch;patch=1 \ " SRC_URI_append_gumstix-verdex = "${GUMSTIX_PATCHES}" -- cgit v1.2.3 From e3dacfd0d5adc3f38769380efde0d60a949b6c2d Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Mon, 1 Oct 2007 19:36:30 +0000 Subject: mtd-utils-tests: add package It may make sense to add this to the main package, but because so few people will use it I did not want to risk breakage at this time. --- packages/mtd/mtd-utils-tests_1.0.0+git.bb | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 packages/mtd/mtd-utils-tests_1.0.0+git.bb diff --git a/packages/mtd/mtd-utils-tests_1.0.0+git.bb b/packages/mtd/mtd-utils-tests_1.0.0+git.bb new file mode 100644 index 0000000000..b5240009a7 --- /dev/null +++ b/packages/mtd/mtd-utils-tests_1.0.0+git.bb @@ -0,0 +1,59 @@ +require mtd-utils_1.0.0+git.bb + +# this can probably be integrated into the main mtd-utils package +# but I did not want to risk breakage -- but would be glad to +# integrate them if that is best -- cbrake + +SRC_URI = "git://git.infradead.org/mtd-utils.git;protocol=git;tag=${TAG}" + +PR = "r1" + +S = "${WORKDIR}/git/tests/fs-tests" + +FILES_${PN} = "${datadir}/mtd-utils" + +do_compile () { + make || die "Make failed" +} + +do_stage () { +} + +INHIBIT_PACKAGE_STRIP = "1" + +mtd_utils_tests = " \ + help_all.sh \ + run_all.sh \ + integrity/integck \ + simple/ftrunc \ + simple/test_1 \ + simple/test_2 \ + stress/stress00.sh \ + stress/stress01.sh \ + stress/atoms/fwrite00 \ + stress/atoms/gcd_hupper \ + stress/atoms/pdfrun \ + stress/atoms/rmdir00 \ + stress/atoms/rndrm00 \ + stress/atoms/rndrm99 \ + stress/atoms/rndwrite00 \ + stress/atoms/stress_1 \ + stress/atoms/stress_2 \ + stress/atoms/stress_3 \ + utils/free_space \ + utils/fstest_monitor \ + " + +do_install () { + install -d ${D}${datadir}/mtd-utils/tests + install -d ${D}${datadir}/mtd-utils/tests/integrity + install -d ${D}${datadir}/mtd-utils/tests/simple + install -d ${D}${datadir}/mtd-utils/tests/stress + install -d ${D}${datadir}/mtd-utils/tests/stress/atoms + install -d ${D}${datadir}/mtd-utils/tests/utils + for app in ${mtd_utils_tests}; do + install -m 0755 $app ${D}${datadir}/mtd-utils/tests/$app + done +} + + -- cgit v1.2.3 From b55c7ef04bddb57bbd68446ec0b54f6d0bb65a95 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 06:38:56 +0000 Subject: midori: add 0.0.8 --- packages/gtk-webcore/midori/.mtn2git_empty | 0 packages/gtk-webcore/midori/midori.desktop | 8 -------- packages/gtk-webcore/midori_0.0.6.bb | 18 ------------------ packages/gtk-webcore/midori_0.0.8.bb | 11 +++++++++++ 4 files changed, 11 insertions(+), 26 deletions(-) delete mode 100644 packages/gtk-webcore/midori/.mtn2git_empty delete mode 100644 packages/gtk-webcore/midori/midori.desktop delete mode 100644 packages/gtk-webcore/midori_0.0.6.bb create mode 100644 packages/gtk-webcore/midori_0.0.8.bb diff --git a/packages/gtk-webcore/midori/.mtn2git_empty b/packages/gtk-webcore/midori/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/gtk-webcore/midori/midori.desktop b/packages/gtk-webcore/midori/midori.desktop deleted file mode 100644 index 683b1a343e..0000000000 --- a/packages/gtk-webcore/midori/midori.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Midori -Comment=Webkit based browser -Exec=midori -Terminal=false -Type=Application -Categories=Application diff --git a/packages/gtk-webcore/midori_0.0.6.bb b/packages/gtk-webcore/midori_0.0.6.bb deleted file mode 100644 index ed0213964f..0000000000 --- a/packages/gtk-webcore/midori_0.0.6.bb +++ /dev/null @@ -1,18 +0,0 @@ -DESCRIPTION = "Midori is a lightweight web browser." -LICENSE = "GPLv2" - -DEPENDS = "webkit-gtk libsexy" - -inherit autotools pkgconfig - -SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \ - file://midori.desktop" - -do_install_append() { - if [ -f ${WORKDIR}/midori.desktop ]; then - install -d ${D}${datadir}/applications - install -m 0644 ${WORKDIR}/midori.desktop ${D}${datadir}/applications - fi - -} - diff --git a/packages/gtk-webcore/midori_0.0.8.bb b/packages/gtk-webcore/midori_0.0.8.bb new file mode 100644 index 0000000000..23d0179375 --- /dev/null +++ b/packages/gtk-webcore/midori_0.0.8.bb @@ -0,0 +1,11 @@ +DESCRIPTION = "Midori is a lightweight web browser." +LICENSE = "GPLv2" + +DEPENDS = "webkit-gtk libsexy" + +inherit autotools pkgconfig + +SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \ + " + + -- cgit v1.2.3 From 607bb202aaf42a980762ddd8f16d27801a7f8cd0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 07:49:24 +0000 Subject: hx4700: kdrive 1.3.0.0 also has Xw100 --- conf/machine/hx4700.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/machine/hx4700.conf b/conf/machine/hx4700.conf index 7cea4e08de..87e03a7bdd 100644 --- a/conf/machine/hx4700.conf +++ b/conf/machine/hx4700.conf @@ -30,7 +30,6 @@ PCMCIA_MANAGER = "pcmciautils" MODUTILS = "26" XSERVER = "xserver-kdrive-w100" -PREFERRED_VERSION_xserver-kdrive = "1.2.0" PREFERRED_VERSION_orinoco-modules = "0.15rc1" -- cgit v1.2.3 From 83eaea652d877c928a59da22a8c7d6fc8ef7950d Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 08:20:25 +0000 Subject: libgcrypt/libgcrypt_1.2.3.bb : remove custom do_stage as its not needed and doesnt actually stage enough. --- packages/libgcrypt/libgcrypt_1.2.3.bb | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/libgcrypt/libgcrypt_1.2.3.bb b/packages/libgcrypt/libgcrypt_1.2.3.bb index 3cca30a6bb..fb4631fd57 100644 --- a/packages/libgcrypt/libgcrypt_1.2.3.bb +++ b/packages/libgcrypt/libgcrypt_1.2.3.bb @@ -17,14 +17,5 @@ EXTRA_OECONF = "--without-pth --disable-asm --with-capabilities" ARM_INSTRUCTION_SET = "arm" do_stage() { - oe_libinstall -so -C src libgcrypt ${STAGING_LIBDIR} - oe_libinstall -so -C src libgcrypt-pthread ${STAGING_LIBDIR} - install -m 0755 src/libgcrypt-config ${STAGING_BINDIR_CROSS}/ - - install -d ${STAGING_INCDIR}/ - for X in gcrypt.h gcrypt-module.h - do - install -m 0644 src/${X} ${STAGING_INCDIR}/${X} - done - + autotools_stage_all } -- cgit v1.2.3 From 80849d56784efbaf1764f05f1ca6a155d04f3b2b Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 08:28:47 +0000 Subject: libgcrypt/libgcrypt_1.2.3.bb : PR bump for last change --- packages/libgcrypt/libgcrypt_1.2.3.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/libgcrypt/libgcrypt_1.2.3.bb b/packages/libgcrypt/libgcrypt_1.2.3.bb index fb4631fd57..74205da673 100644 --- a/packages/libgcrypt/libgcrypt_1.2.3.bb +++ b/packages/libgcrypt/libgcrypt_1.2.3.bb @@ -3,6 +3,7 @@ SECTION = "libs" PRIORITY = "optional" LICENSE = "GPL LGPL FDL" DEPENDS = "libgpg-error" +PR = "r1" # move libgcrypt-config into -dev package FILES_${PN} = "${libdir}/lib*.so.*" -- cgit v1.2.3 From a5cc2c34da8c269c29c2ed34409650d0486118a1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 08:36:46 +0000 Subject: atk: remove def_pref from 1.19.3 --- packages/atk/atk_1.19.3.bb | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/atk/atk_1.19.3.bb b/packages/atk/atk_1.19.3.bb index beef4ce97a..52136682d7 100644 --- a/packages/atk/atk_1.19.3.bb +++ b/packages/atk/atk_1.19.3.bb @@ -1,7 +1,5 @@ require atk.inc -DEFAULT_PREFERENCE = "-1" - SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/atk/1.19/atk-${PV}.tar.bz2" do_stage () { -- cgit v1.2.3 From 4218198e3242ca560292ce7428f14e59dba0e5e0 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 09:15:33 +0000 Subject: openmoko2/openmoko-dates2_svn.bb : version bump to latest for thomas --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/openmoko2/openmoko-dates2_svn.bb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index e3efa9f699..17992f822c 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -49,7 +49,7 @@ SRCREV_pn-openmoko-common2 ?= "2679" SRCREV_pn-openmoko-contacts ?= "2298" SRCREV_pn-openmoko-contacts2 ?= "335" SRCREV_pn-openmoko-dates ?= "467" -SRCREV_pn-openmoko-dates2 ?= "563" +SRCREV_pn-openmoko-dates2 ?= "617" SRCREV_pn-openmoko-dialer ?= "2811" SRCREV_pn-openmoko-dialer2 ?= "2976" SRCREV_pn-openmoko-feedreader2 ?= "3060" diff --git a/packages/openmoko2/openmoko-dates2_svn.bb b/packages/openmoko2/openmoko-dates2_svn.bb index 9650a20b0d..14a71d423a 100644 --- a/packages/openmoko2/openmoko-dates2_svn.bb +++ b/packages/openmoko2/openmoko-dates2_svn.bb @@ -10,3 +10,8 @@ SRC_URI = "svn://svn.o-hand.com/repos/dates/branches;module=jana;proto=http" S = "${WORKDIR}/jana/" EXTRA_OECONF = "--with-frontend=openmoko" + +do_configure_prepend() { + touch gtk-doc.make +} + -- cgit v1.2.3 From 704460df23bc662a814545a336e96abcdb2acdcb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 09:31:48 +0000 Subject: gtk-2.10.inc: add hack for maemo software --- packages/gtk+/gtk-2.10.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/gtk+/gtk-2.10.inc b/packages/gtk+/gtk-2.10.inc index c3bbb0232a..3fa5d22a71 100644 --- a/packages/gtk+/gtk-2.10.inc +++ b/packages/gtk+/gtk-2.10.inc @@ -52,7 +52,8 @@ do_stage () { mkdir -p ${STAGING_LIBDIR}/gtk-2.0/include install -m 0644 gdk/gdkconfig.h ${STAGING_LIBDIR}/gtk-2.0/include/gdkconfig.h - + # Copy over all headers, since the maemo stuff needs access to the private api. *sigh* + cp gtk/*.h ${STAGING_INCDIR}/gtk-2.0/gtk/ install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/ } -- cgit v1.2.3 From 206c0e46891163d72b02bc9365ba1770c03ff942 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 09:40:11 +0000 Subject: libhildonfm: add 1.9.41 works against a stock gtk+! --- packages/maemo3/libhildonfm/.mtn2git_empty | 0 .../libhildonfm/hildonfm-ifdef-maemogtk.diff | 132 +++++++++++++++++++++ packages/maemo3/libhildonfm_1.9.41.bb | 29 +++++ 3 files changed, 161 insertions(+) create mode 100644 packages/maemo3/libhildonfm/.mtn2git_empty create mode 100644 packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff create mode 100644 packages/maemo3/libhildonfm_1.9.41.bb diff --git a/packages/maemo3/libhildonfm/.mtn2git_empty b/packages/maemo3/libhildonfm/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff b/packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff new file mode 100644 index 0000000000..8d91e1dd65 --- /dev/null +++ b/packages/maemo3/libhildonfm/hildonfm-ifdef-maemogtk.diff @@ -0,0 +1,132 @@ +--- /tmp/hildon-file-selection.c 2007-10-02 10:08:17.000000000 +0200 ++++ 1_1.9.41/hildon-fm/hildon-file-selection.c 2007-10-02 11:26:58.292045000 +0200 +@@ -2036,6 +2036,7 @@ + g_object_set(cell, "text", buffer, "sensitive", sensitive, NULL); + } + ++#ifdef USE_MAEMO_GTK + static void hildon_file_selection_navigation_pane_context(GtkWidget * + widget, + gpointer data) +@@ -2052,6 +2053,7 @@ + ULOG_DEBUG(__FUNCTION__); + g_signal_emit(data, signal_content_pane_context_menu, 0); + } ++#endif /* USE_MAEMO_GTK */ + + static gboolean hildon_file_selection_on_content_pane_key(GtkWidget * + widget, +@@ -2200,6 +2202,7 @@ + } + } + ++#ifdef USE_MAEMO_GTK + static gboolean + tap_and_hold_query (gpointer self, guint signal_id) + { +@@ -2225,6 +2228,8 @@ + return tap_and_hold_query (self, signal_navigation_pane_context_menu); + } + ++#endif /* USE_MAEMO_GTK */ ++ + static void hildon_file_selection_create_thumbnail_view(HildonFileSelection + * self) + { +@@ -2277,7 +2282,7 @@ + g_signal_connect_object(tree, "key-press-event", + G_CALLBACK(hildon_file_selection_on_content_pane_key), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, + GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (tree, "tap-and-hold-query", +@@ -2286,6 +2291,7 @@ + g_signal_connect_object(tree, "tap-and-hold", + G_CALLBACK + (hildon_file_selection_content_pane_context), self, 0); ++#endif /* USE_MAEMO_GTK */ + + g_signal_connect_object(tree, "notify::has-focus", + G_CALLBACK(content_pane_focus), self, 0); +@@ -2397,7 +2403,7 @@ + (selection, "changed", + G_CALLBACK (hildon_file_selection_content_pane_selection_changed), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(tree), NULL, NULL, + GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (tree, "tap-and-hold-query", +@@ -2406,7 +2412,7 @@ + g_signal_connect_object(tree, "tap-and-hold", + G_CALLBACK + (hildon_file_selection_content_pane_context), self, 0); +- ++#endif /* USE_MAEMO_GTK */ + g_signal_connect_object(tree, "key-press-event", + G_CALLBACK(hildon_file_selection_on_content_pane_key), + self, 0); +@@ -2492,7 +2498,7 @@ + g_signal_connect_object(selection, "changed", + G_CALLBACK(hildon_file_selection_selection_changed), + self, 0); +- ++#ifdef USE_MAEMO_GTK + gtk_widget_tap_and_hold_setup(GTK_WIDGET(self->priv->dir_tree), NULL, + NULL, GTK_TAP_AND_HOLD_NONE | GTK_TAP_AND_HOLD_NO_INTERNALS); + g_signal_connect_object (self->priv->dir_tree, "tap-and-hold-query", +@@ -2502,7 +2508,7 @@ + G_CALLBACK + (hildon_file_selection_navigation_pane_context), + self, 0); +- ++#endif /* USE_MAEMO_GTK */ + g_signal_connect_object(self->priv->dir_tree, "key-press-event", + G_CALLBACK + (hildon_file_selection_on_navigation_pane_key), self, 0); +--- /tmp/hildon-file-chooser-dialog.c 2007-10-02 10:14:05.000000000 +0200 ++++ 1_1.9.41/hildon-fm/hildon-file-chooser-dialog.c 2007-10-02 11:33:43.132045000 +0200 +@@ -191,7 +191,7 @@ + + return (first_digit << 4) | second_digit; + } +- ++#ifdef USE_MAEMO_GTK + static void chooser_entry_invalid_input_cb (GtkEntry *entry, + GtkInvalidInputType inv_type, + gpointer user_data) +@@ -202,7 +202,7 @@ + HCS("ckdg_ib_maximum_characters_reached")); + } + } +- ++#endif /* USE_MAEMO_GTK */ + static gchar * + g_unescape_uri_string (const char *escaped, + int len, +@@ -1837,8 +1837,9 @@ + G_PARAM_READWRITE); + g_object_class_install_property(gobject_class, PROP_SELECTION_MODE, pspec); + +- ++#ifdef USE_MAEMO_GTK + hildon_gtk_file_chooser_install_properties(gobject_class); ++#endif + } + + static void hildon_file_chooser_dialog_sort_changed(GtkWidget * item, +@@ -1975,10 +1976,10 @@ + g_signal_connect( priv->entry_name, "changed", + G_CALLBACK( hildon_file_chooser_entry_changed ), + self ); +- ++#ifdef USE_MAEMO_GTK + g_signal_connect(priv->entry_name, "invalid-input", + G_CALLBACK(chooser_entry_invalid_input_cb), self); +- ++#endif /* USE_MAEMO_GTK */ + priv->hbox_location = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); + priv->hbox_items = gtk_hbox_new(FALSE, HILDON_MARGIN_DEFAULT); + priv->image_location = gtk_image_new(); diff --git a/packages/maemo3/libhildonfm_1.9.41.bb b/packages/maemo3/libhildonfm_1.9.41.bb new file mode 100644 index 0000000000..de1bb3d9e3 --- /dev/null +++ b/packages/maemo3/libhildonfm_1.9.41.bb @@ -0,0 +1,29 @@ +LICENSE = "LGPL" +DESCRIPTION = "Nokia hildon filemanager library" + +DEPENDS = "hildon-thumbnail mce-dev libhildonmime osso-gwconnect hildon-libs osso-thumbnail" + +PR = "r0" + +SRC_URI = "http://repository.maemo.org/pool/sardine/main/source/libh/libhildonfm/libhildonfm_${PV}.tar.gz \ + file://hildonfm-ifdef-maemogtk.diff;patch=1 \ + " + +inherit autotools pkgconfig lib_package + +S = "${WORKDIR}/1_${PV}" + +do_configure_prepend() { + # remove Werror from OSSO_CFLAGS + sed -i s:-Werror::g configure.ac + touch gtk-doc.make +} + + +PARALLEL_MAKE = "" + +do_stage() { + autotools_stage_all +} + + -- cgit v1.2.3 From 60ec12d7d56354a2e3367a3f867bf11c02163000 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 09:45:43 +0000 Subject: libhildonhelp: correct DEPENDS --- packages/maemo3/libhildonhelp_1.9.1.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/maemo3/libhildonhelp_1.9.1.bb b/packages/maemo3/libhildonhelp_1.9.1.bb index b04efe2660..43d4c15d2e 100644 --- a/packages/maemo3/libhildonhelp_1.9.1.bb +++ b/packages/maemo3/libhildonhelp_1.9.1.bb @@ -1,7 +1,7 @@ LICENSE = "LGPL" DESCRIPTION = "Nokia hildon help library" -DEPENDS = "libart libpng jpeg libxml2 gtkhtml-3.8 libosso" +DEPENDS = "libart-lgpl libpng jpeg libxml2 gtkhtml-3.8 libosso" PR = "r0" -- cgit v1.2.3 From 13deecd844254126961b034214a1f1ce77026c6c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 10:24:01 +0000 Subject: fontconfig: stage nokia device table header --- packages/fontconfig/fontconfig_2.4.1.bb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/fontconfig/fontconfig_2.4.1.bb b/packages/fontconfig/fontconfig_2.4.1.bb index 098939324a..cdfc28fb38 100644 --- a/packages/fontconfig/fontconfig_2.4.1.bb +++ b/packages/fontconfig/fontconfig_2.4.1.bb @@ -3,9 +3,9 @@ LICENSE = "BSD" DESCRIPTION = "A library for configuring and customizing font access." DEPENDS = "expat freetype freetype-native zlib" -SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz" - -PR = "r0" +SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \ + https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h" +PR = "r1" PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils " FILES_fontconfig-utils-dbg = "${bindir}/*.dbg" @@ -39,6 +39,7 @@ python do_unpack () { } do_stage () { + cp ${WORKDIR}/device_symbols.h ${S}/fontconfig/ oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR} install -d ${STAGING_INCDIR}/fontconfig for i in ${S}/fontconfig/*.h; do install -m 0644 $i ${STAGING_INCDIR}/fontconfig/; done -- cgit v1.2.3 From 7c5486f8849c4c3a22b9fa6b282ec085c823af79 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 10:28:31 +0000 Subject: hildon-1: update PV --- packages/maemo3/hildon-1_svn.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/maemo3/hildon-1_svn.bb b/packages/maemo3/hildon-1_svn.bb index c5c01792ca..5105472989 100644 --- a/packages/maemo3/hildon-1_svn.bb +++ b/packages/maemo3/hildon-1_svn.bb @@ -3,7 +3,7 @@ LICENSE = "LGPL" DEPENDS = "gconf-dbus esound gtk+" -PV = "1.0.12+svnr${SRCREV}" +PV = "1.0.17+svnr${SRCREV}" SRC_URI = "svn://stage.maemo.org/svn/maemo/projects/haf/trunk;module=hildon-1;proto=https \ file://buttonbox.patch;patch=1 " -- cgit v1.2.3 From 76fd07d9e9def4526f1fd47517e9d8822e555177 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 10:41:16 +0000 Subject: sane-srcrevs: bump hildon-1 --- conf/distro/include/sane-srcrevs.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 17992f822c..26ae145486 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -17,7 +17,7 @@ SRCREV_pn-fbgrab-viewer-native ?= "1943" SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "606" SRCREV_pn-gnuradio ?= "6377" -SRCREV_pn-hildon-1 ?= "13708" +SRCREV_pn-hildon-1 ?= "14173" SRCREV_pn-libgsmd ?= "2957" SRCREV_pn-libmokogsmd2 ?= "2950" SRCREV_pn-libmokojournal2 ?= "2780" -- cgit v1.2.3 From 7173f65e20f5ba6ce37216ff8e0e5fbba958edba Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 2 Oct 2007 13:49:06 +0000 Subject: htcblueangel.conf: Remove PREFERRED_VERSION for kernel. --- conf/machine/htcblueangel.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/machine/htcblueangel.conf b/conf/machine/htcblueangel.conf index 6aa1885293..44454f3902 100644 --- a/conf/machine/htcblueangel.conf +++ b/conf/machine/htcblueangel.conf @@ -21,7 +21,6 @@ MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget # Software/packages selection # PREFERRED_PROVIDER_virtual/kernel = "linux-handhelds-2.6" -PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.19-hh8" PCMCIA_MANAGER = "pcmciautils" PREFERRED_PROVIDER_xserver = "xserver-kdrive" -- cgit v1.2.3 From 4386856d55dd89cd9e532c9c71e9d3aa170de396 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 2 Oct 2007 14:47:00 +0000 Subject: sane-srcrevs: bump openmoko icon themes --- conf/distro/include/sane-srcrevs.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 26ae145486..78ded7f51c 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -57,8 +57,8 @@ SRCREV_pn-openmoko-finger-demo ?= "1671" SRCREV_pn-openmoko-firststart2 ?= "2873" SRCREV_pn-openmoko-footer ?= "2354" SRCREV_pn-openmoko-icon-theme-standard ?= "2232" -SRCREV_pn-openmoko-icon-theme-standard2 ?= "3055" -SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "2967" +SRCREV_pn-openmoko-icon-theme-standard2 ?= "3066" +SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "3066" SRCREV_pn-openmoko-keyboard ?= "1631" SRCREV_pn-openmoko-libs ?= "2367" SRCREV_pn-openmoko-mediaplayer2 ?= "2952" -- cgit v1.2.3 From 6f9b6256a5b0d50c9386ce0c460de98452b8f86f Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 16:02:06 +0000 Subject: sane-srcrevs.inc : update some openmoko revs --- conf/distro/include/sane-srcrevs.inc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 78ded7f51c..67380a3160 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -22,7 +22,7 @@ SRCREV_pn-libgsmd ?= "2957" SRCREV_pn-libmokogsmd2 ?= "2950" SRCREV_pn-libmokojournal2 ?= "2780" SRCREV_pn-libmokopanelui2 ?= "2958" -SRCREV_pn-libmokoui2 ?= "3053" +SRCREV_pn-libmokoui2 ?= "3064" SRCREV_pn-libowl ?= "277" SRCREV_pn-libxosd ?= "627" SRCREV_pn-linux-hackndev-2.6 ?= "1308" @@ -47,7 +47,7 @@ SRCREV_pn-openmoko-calculator2 ?= "2789" SRCREV_pn-openmoko-common ?= "397" SRCREV_pn-openmoko-common2 ?= "2679" SRCREV_pn-openmoko-contacts ?= "2298" -SRCREV_pn-openmoko-contacts2 ?= "335" +SRCREV_pn-openmoko-contacts2 ?= "350" SRCREV_pn-openmoko-dates ?= "467" SRCREV_pn-openmoko-dates2 ?= "617" SRCREV_pn-openmoko-dialer ?= "2811" @@ -61,7 +61,7 @@ SRCREV_pn-openmoko-icon-theme-standard2 ?= "3066" SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "3066" SRCREV_pn-openmoko-keyboard ?= "1631" SRCREV_pn-openmoko-libs ?= "2367" -SRCREV_pn-openmoko-mediaplayer2 ?= "2952" +SRCREV_pn-openmoko-mediaplayer2 ?= "3057" SRCREV_pn-openmoko-messages ?= "2276" SRCREV_pn-openmoko-panel-battery ?= "2897" SRCREV_pn-openmoko-panel-bt ?= "2896" @@ -79,14 +79,14 @@ SRCREV_pn-openmoko-stylus-demo ?= "2324" SRCREV_pn-openmoko-stylus-demo-simple ?= "1818" SRCREV_pn-openmoko-taskmanager ?= "1663" SRCREV_pn-openmoko-tasks ?= "320" -SRCREV_pn-openmoko-tasks2 ?= "320" +SRCREV_pn-openmoko-tasks2 ?= "343" SRCREV_pn-openmoko-terminal2 ?= "2972" SRCREV_pn-openmoko-theme-standard ?= "2370" SRCREV_pn-openmoko-theme-standard-qvga ?= "2370" -SRCREV_pn-openmoko-theme-standard2 ?= "2964" +SRCREV_pn-openmoko-theme-standard2 ?= "3044" SRCREV_pn-openmoko-theme-standard2-qvga ?= "2964" SRCREV_pn-openmoko-today ?= "3056" -SRCREV_pn-openmoko-today2 ?= "2955" +SRCREV_pn-openmoko-today2 ?= "3056" SRCREV_pn-openmoko-today2-folders ?= "2680" SRCREV_pn-openocd ?= "206" SRCREV_pn-openocd-native ?= "206" -- cgit v1.2.3 From 239fbede1a35795644854839bbf9623d7779febc Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 16:02:45 +0000 Subject: xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch : drop duplicate old patch --- .../xserver-kdrive-1.2.0/kdrive-imageon.patch | 9079 -------------------- 1 file changed, 9079 deletions(-) delete mode 100644 packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch deleted file mode 100644 index b143eedff3..0000000000 --- a/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch +++ /dev/null @@ -1,9079 +0,0 @@ -# Author: Manuel Teira (sirfred in #oe) -# Description: New driver for the Imageon ATI Card. Implementing: -# -Hardware solid fills -# -Hardware bitblt -# -Hardware cursors -# -XV Extension -# -Internal and External Imageon offscreen memory support -# -Hardware RandR rotation (without using a shadow framebuffer) -# -Support for RandR mode changing - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: xorg-server-1.2.0/configure.ac -=================================================================== ---- xorg-server-1.2.0.orig/configure.ac 2007-06-17 10:49:00.000000000 +0200 -+++ xorg-server-1.2.0/configure.ac 2007-06-17 10:49:02.000000000 +0200 -@@ -444,6 +444,7 @@ - AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no]) - AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto]) - AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto]) -+AC_ARG_ENABLE(imageon, AS_HELP_STRING([--enable-imageon], [Build the kdrive Ximageon server (default: no)]), [KDRIVEIMAGEON=$enableval], [KDRIVEIMAGEON=no]) - dnl xprint - AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no]) - AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto) -@@ -1581,6 +1582,11 @@ - AC_SUBST([XSDL_INCS]) - - -+AM_CONDITIONAL(KDRIVEIMAGEON, [test "x$KDRIVEIMAGEON" = xyes]) -+if test "x$KDRIVEIMAGEON" = xyes; then -+ AC_DEFINE(KDRIVEIMAGEON, 1, [Build Ximageon server]) -+fi -+ - dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers) - AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules]) - AC_DEFINE_DIR(XKB_BASE_DIRECTORY, XKBPATH, [Path to XKB data]) -@@ -1806,6 +1812,7 @@ - hw/kdrive/epson/Makefile - hw/kdrive/fake/Makefile - hw/kdrive/fbdev/Makefile -+hw/kdrive/imageon/Makefile - hw/kdrive/i810/Makefile - hw/kdrive/linux/Makefile - hw/kdrive/mach64/Makefile -Index: xorg-server-1.2.0/hw/kdrive/Makefile.am -=================================================================== ---- xorg-server-1.2.0.orig/hw/kdrive/Makefile.am 2007-06-17 10:49:00.000000000 +0200 -+++ xorg-server-1.2.0/hw/kdrive/Makefile.am 2007-06-17 11:03:40.000000000 +0200 -@@ -1,24 +1,15 @@ --if KDRIVEVESA --VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \ -- smi via --endif -- - if KDRIVEFBDEV --FBDEV_SUBDIRS = fbdev epson --endif -- --if XSDLSERVER --XSDL_SUBDIRS = sdl --endif -- --if XEPHYR --XEPHYR_SUBDIRS = ephyr -+FBDEV_SUBDIRS = fbdev - endif - - if KDRIVELINUX - LINUX_SUBDIRS = linux - endif - -+if KDRIVEIMAGEON -+IMAGEON_SUBDIRS = imageon -+endif -+ - SUBDIRS = \ - src \ - $(LINUX_SUBDIRS) \ -@@ -26,7 +17,7 @@ - $(FBDEV_SUBDIRS) \ - $(VESA_SUBDIRS) \ - $(XEPHYR_SUBDIRS) \ -- fake -+ $(IMAGEON_SUBDIRS) - - DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \ - smi via fbdev sdl ephyr src linux fake sis300 -Index: xorg-server-1.2.0/hw/kdrive/imageon/Makefile.am -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/Makefile.am 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,47 @@ -+if KDRIVEFBDEV -+FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev -+FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a -+endif -+ -+INCLUDES = \ -+ @KDRIVE_INCS@ \ -+ $(FBDEV_INCLUDES) \ -+ @KDRIVE_CFLAGS@ -+ -+bin_PROGRAMS = Ximageon -+ -+if TSLIB -+TSLIB_FLAG = -lts -+endif -+ -+noinst_LIBRARIES = libimageon.a -+ -+libimageon_a_SOURCES = \ -+ imageon.h \ -+ imageon_regs.h \ -+ imageon_const.h \ -+ imageon.c \ -+ imageon_cursor.c \ -+ imageon_draw.c \ -+ imageon_support.c \ -+ imageon_video.c -+ -+ -+ -+Ximageon_SOURCES = \ -+ imageon_stub.c -+ -+W100_LIBS = \ -+ libimageon.a \ -+ $(FBDEV_LIBS) \ -+ @KDRIVE_LIBS@ -+ -+Ximageon_LDADD = \ -+ $(W100_LIBS) \ -+ @XSERVER_LIBS@ \ -+ $(TSLIB_FLAG) -+ -+ -+Ximageon_DEPENDENCIES = \ -+ libimageon.a \ -+ $(FBDEV_LIBS) -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,606 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+#include "imageon.h" -+#include "imageon_regs.h" -+#include "imageon_support.h" -+ -+W100CardEntry w100_cards[] = { -+ {0x1002, 0x5644, 0, "ATI Imageon 3200"}, -+ {0x1002, 0x5741, W100XVSupport, "ATI Imageon 100"}, -+ {0x1002, 0x5744, 0, "ATI Imageon 3220"}, -+ {0, 0, 0, NULL} -+}; -+ -+W100ModeSpec w100_modes[] = { -+ {800, 600, 16, W100_EXTMEM, FALSE}, -+ {640, 480, 16, W100_EXTMEM, FALSE}, -+ {320, 240, 16, W100_INTMEM, FALSE}, -+ { 0, 0, 0, 0, FALSE} -+}; -+ -+W100StartupInfo w100StartupInfo; -+ -+extern void (*tslib_transform_coords)(long *x, long *y, void *closure); -+extern void *tslib_transform_closure; -+ -+static void -+W100Startup(W100CardInfo *w100c) -+{ -+ int i; -+ DBG_IMAGEON(("--W100Startup\n")); -+ W100ModeSpec *modes; -+ /* Take the current graphics mode */ -+ if (!W100GetFbMode(w100c, &w100StartupInfo.mode)) { -+ ErrorF("(E) Unable to get current mode\n"); -+ } -+ w100StartupInfo.randr = W100GetRotation(w100c); -+ w100StartupInfo.portrait = w100StartupInfo.mode.width < w100StartupInfo.mode.height; -+ -+ /* Test the valid modes */ -+ for (modes = w100_modes; modes->width; modes++) { -+ modes->supported = W100CheckFbMode(w100c, modes); -+ } -+ -+ DBG_IMAGEON(("Startup Mode: %dx%d@%d, rot: %d, portrait: %s\n", -+ w100StartupInfo.mode.width, -+ w100StartupInfo.mode.height, -+ w100StartupInfo.mode.bpp, -+ w100StartupInfo.randr, -+ w100StartupInfo.portrait ? "Yes" : "No")); -+ -+ /* Tell the kernel to never switch off external memory */ -+ W100SysFsSet(w100c, W100_SYSFS_BASE "extmem", "1"); -+ -+ /* Disable framebuffer accel */ -+ W100SysFsSet(w100c, W100_SYSFS_BASE "accel", "0"); -+ -+ /* Enable fastsysclk */ -+ W100SysFsSet(w100c, W100_SYSFS_BASE "fastpllclk", "1"); -+ -+} -+ -+ -+static Bool -+W100Map(KdCardInfo * card, W100CardInfo *w100c) -+{ -+ DBG_IMAGEON(("--W100Map\n")); -+ w100c->mem_base = (CARD8 *) KdMapDevice(W100_MEM_BASE, W100_MEM_SIZE); -+ -+ if (w100c->mem_base == NULL) { -+ return FALSE; -+ } -+ -+ w100c->reg_base = w100c->mem_base + W100_REG_OFFSET; -+ -+ /* -+ * It doesn't matter mapping all the area as registers. -+ * There's only difference when HAVE_ASM_MTRR_H is defined. -+ * So, this call is doing nothing. -+ */ -+ KdSetMappedMode(W100_MEM_BASE, W100_MEM_SIZE, KD_MAPPED_MODE_REGISTERS); -+ -+ return TRUE; -+} -+ -+static void -+W100Unmap(KdCardInfo * card, W100CardInfo *w100c) -+{ -+ DBG_IMAGEON(("--W100Unmap\n")); -+ if (w100c->mem_base) { -+ KdResetMappedMode(W100_MEM_BASE, W100_MEM_SIZE, -+ KD_MAPPED_MODE_REGISTERS); -+ KdUnmapDevice((void *) w100c->mem_base, W100_MEM_SIZE); -+ w100c->mem_base = w100c->reg_base = 0; -+ } -+} -+ -+static void W100MemSetup(W100CardInfo *w100c) -+{ -+ int reg_value; -+ int int_start, int_size; -+ int ext_start, ext_size; -+ int i; -+ DBG_IMAGEON(("--W100MemSetup\n")); -+ -+ for (i = 0; i < w100c->num_memareas; i++) { -+ xfree(w100c->memareas[i]); -+ } -+ xfree(w100c->memareas); -+ -+ reg_value = MMIO_IN32(mmMC_FB_LOCATION); -+ int_start = (reg_value & 0xffff) << 8; -+ int_size = (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8; -+ DBG_IMAGEON(("(I) MC_FB_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n", -+ reg_value, int_start, int_size)); -+ -+ reg_value = MMIO_IN32(mmMC_EXT_MEM_LOCATION); -+ ext_start = (reg_value & 0xffff) << 8; -+ ext_size = (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8; -+ DBG_IMAGEON(("(I) MC_EXT_MEM_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n", -+ reg_value, ext_start, ext_size)); -+ -+ w100c->num_memareas = (ext_size > 0) ? 2 : 1; -+ w100c->memareas = xcalloc(sizeof(W100MemArea *), w100c->num_memareas); -+ -+ w100c->memareas[W100_INTMEM] = xcalloc(sizeof(W100MemArea), 1); -+ w100c->memareas[W100_INTMEM]->priority = KD_VIDMEM_MAXPRIO; -+ w100c->memareas[W100_INTMEM]->start = (CARD8 *) int_start; -+ w100c->memareas[W100_INTMEM]->size = int_size; -+ -+ if (w100c->num_memareas == 2) { -+ w100c->memareas[W100_EXTMEM] = xcalloc(sizeof(W100MemArea), 1); -+ w100c->memareas[W100_EXTMEM]->priority = KD_VIDMEM_MINPRIO; -+ w100c->memareas[W100_EXTMEM]->start = (CARD8 *) ext_start; -+ w100c->memareas[W100_EXTMEM]->size = ext_size; -+ } -+ -+ for (i = 0; i < w100c->num_memareas; i++) { -+ DBG_IMAGEON(("(I) Memory mapped at 0x%08x(0x%08x), size %d bytes\n", -+ W100_CARD2HOST(w100c->memareas[i]->start), -+ w100c->memareas[i]->start, -+ w100c->memareas[i]->size)); -+ } -+ -+} -+ -+static Bool -+W100CardInit(KdCardInfo * card) -+{ -+ W100CardInfo *w100c; -+ -+ W100CardEntry *model = &w100_cards[0]; -+ static Bool initialized = FALSE; -+ -+ DBG_IMAGEON(("--W100CardInit\n")); -+ -+ w100c = xcalloc(sizeof(W100CardInfo), 1); -+ if (w100c == NULL) -+ return FALSE; -+ -+ if (!fbdevInitialize(card, &w100c->fbdev)) { -+ return FALSE; -+ } -+ -+ if (!W100Map(card, w100c)) { -+ xfree(w100c); -+ return FALSE; -+ } -+ card->driver = w100c; -+ -+ while (model->name) { -+ if (model->device == card->attr.deviceID) { -+ w100c->card_id = model; -+ break; -+ } -+ model++; -+ } -+ -+ ErrorF("(I) Using ATI card: %s\n", w100c->card_id->name); -+ -+ if (!initialized) { -+ initialized = TRUE; -+ W100Startup(w100c); -+ } -+ -+ w100c->hw_window.mode = W100GetModeSpec(w100c, &w100StartupInfo.mode); -+ w100c->hw_window.randr = w100StartupInfo.randr; -+ -+ tslib_transform_closure = w100c; -+ tslib_transform_coords = W100TransformTsLibCoordinates; -+ return TRUE; -+} -+ -+ -+static void -+W100CardFini(KdCardInfo * card) -+{ -+ W100CardInfo *w100c = (W100CardInfo *) card->driver; -+ -+ DBG_IMAGEON(("--W100CardFini\n")); -+ W100Unmap(card, w100c); -+ fbdevCardFini(card); -+} -+ -+static void -+W100Setup(KdScreenInfo *screen) -+{ -+ W100CardInfo(screen); -+ W100MemArea *mem; -+ KdMouseMatrix m; -+ int fb_size, i; -+ -+ DBG_IMAGEON(("--W100Setup\n")); -+ -+ /* Adjust mode */ -+ w100c->hw_window.width = screen->width; -+ w100c->hw_window.height = screen->height; -+ w100c->hw_window.bpp = screen->fb[0].bitsPerPixel; -+ W100SetupGraphicWindow(w100c); -+ -+ /* Get some register values */ -+ w100c->regs.ENG_CNTL = MMIO_IN32(mmENG_CNTL); -+ w100c->regs.VIDEO_CTRL = MMIO_IN32(mmVIDEO_CTRL); -+ w100c->regs.GRAPHIC_H_DISP = MMIO_IN32(mmGRAPHIC_H_DISP); -+ w100c->regs.GRAPHIC_V_DISP = MMIO_IN32(mmGRAPHIC_V_DISP); -+ w100c->regs.DISP_DEBUG2 = MMIO_IN32(mmDISP_DEBUG2); -+ -+ W100MemSetup(w100c); -+ -+ /* Clear the VideoMemAreas set up by the framebuffer initialization */ -+ for (i = 0; i < screen->num_videomem_areas; i++) { -+ xfree(screen->videomem_areas[i]); -+ } -+ xfree(screen->videomem_areas); -+ -+ screen->videomem_areas = xcalloc(sizeof(KdVideoMemArea *), -+ w100c->num_memareas); -+ screen->num_videomem_areas = w100c->num_memareas; -+ -+ screen->fb[0].byteStride = screen->width * screen->fb[0].bitsPerPixel / 8; -+ fb_size = screen->fb[0].byteStride * screen->height; -+ -+ DBG_IMAGEON(("(I) Framebuffer required size: %d bytes\n", fb_size)); -+ -+ for (i = 0; i < w100c->num_memareas; i++) { -+ mem = w100c->memareas[i]; -+ screen->videomem_areas[i] = xcalloc(sizeof(KdVideoMemArea), 1); -+ screen->videomem_areas[i]->priority = mem->priority; -+ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start); -+ screen->videomem_areas[i]->size = mem->size; -+ if (w100c->hw_window.mode->fbpool == i) { -+ DBG_IMAGEON(("(I) FrameBuffer in w100 memzone 0x%08x(0x%08x)\n", -+ W100_CARD2HOST(mem->start), mem->start)); -+ screen->videomem_areas[i]->available_offset = fb_size; -+ screen->fb[0].frameBuffer = W100_CARD2HOST(mem->start); -+ } else { -+ screen->videomem_areas[i]->available_offset = 0; -+ } -+ DBG_IMAGEON(("New videomem_area(priority:%d, start:0x%08x, size:%d, available_offset:%d\n", -+ screen->videomem_areas[i]->priority, -+ screen->videomem_areas[i]->base, -+ screen->videomem_areas[i]->size, -+ screen->videomem_areas[i]->available_offset)); -+ } -+ -+ -+ w100c->hw_window.offset = W100_HOST2CARD(screen->fb[0].frameBuffer); -+ -+ KdComputeMouseMatrix(&m, screen->randr, -+ w100StartupInfo.portrait ? -+ W100_MIN(screen->width, screen->height) : -+ W100_MAX(screen->width, screen->height), -+ w100StartupInfo.portrait ? -+ W100_MAX(screen->width, screen->height) : -+ W100_MIN(screen->width, screen->height)); -+ -+ KdSetMouseMatrix(&m); -+ -+ DBG_IMAGEON(("Window(width:%d,height:%d,bpp:%d,offset:0x%08x" -+ "(0x%08x), randr:%d)\n", -+ w100c->hw_window.width, -+ w100c->hw_window.height, -+ w100c->hw_window.bpp, -+ w100c->hw_window.offset, -+ screen->fb[0].frameBuffer, -+ w100c->hw_window.randr)); -+ -+} -+ -+static Bool -+W100ScreenInit(KdScreenInfo * screen) -+{ -+ W100ScreenInfo *w100s; -+ W100CardInfo(screen); -+ Bool success = FALSE; -+ -+ DBG_IMAGEON(("--W100ScreenInit\n")); -+ w100s = xcalloc(sizeof(W100ScreenInfo), 1); -+ if (w100s == NULL) -+ return FALSE; -+ -+ w100s->w100c = w100c; -+ w100s->screen = screen; -+ screen->driver = w100s; -+ -+ success = fbdevScreenInitialize(screen, &w100s->fbdev); -+ -+ if (!success) { -+ screen->driver = NULL; -+ xfree(w100s); -+ return FALSE; -+ } -+ -+ W100Setup(screen); -+ -+ return TRUE; -+} -+ -+static void -+W100ScreenFini(KdScreenInfo * screen) -+{ -+ W100ScreenInfo *w100s = (W100ScreenInfo *) screen->driver; -+ DBG_IMAGEON(("--W100ScreenFini\n")); -+ fbdevScreenFini(screen); -+ xfree(w100s); -+ screen->driver = 0; -+} -+ -+static Bool -+W100InitScreen(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ DBG_IMAGEON(("--W100InitScreen\n")); -+ if (w100c->card_id->caps & W100XVSupport) { -+ W100InitVideo(pScreen); -+ } -+ return fbdevInitScreen(pScreen); -+} -+ -+#ifdef RANDR -+ -+static Bool W100RandRSetConfig(ScreenPtr pScreen, -+ Rotation randr, -+ int rate, -+ RRScreenSizePtr pSize) -+{ -+ KdScreenPriv(pScreen); -+ KdScreenInfo *screen = pScreenPriv->screen; -+ W100CardInfo(pScreenPriv); -+ Bool screenEnabled = pScreenPriv->enabled; -+ -+ DBG_IMAGEON(("--W100RandRSetConfig(randr:%d,pSize:%dx%d)\n", -+ randr, pSize->width, pSize->height)); -+ -+ if (screenEnabled) { -+ KdDisableScreen(pScreen); -+ } -+ -+ if (randr & (RR_Rotate_0|RR_Rotate_180)) { -+ pScreen->mmWidth = screen->width_mm; -+ pScreen->mmHeight = screen->height_mm; -+ pScreen->width = pSize->width; -+ pScreen->height = pSize->height; -+ } else { -+ pScreen->mmWidth = screen->height_mm; -+ pScreen->mmHeight = screen->width_mm; -+ pScreen->width = pSize->height; -+ pScreen->height = pSize->width; -+ } -+ -+ screen->randr = randr; -+ screen->width = pScreen->width; -+ screen->height = pScreen->height; -+ w100c->hw_window.randr = KdSubRotation(w100StartupInfo.randr, randr); -+ w100c->hw_window.mode = W100GetBestMode(w100c, pScreen->width, pScreen->height); -+ -+ KdOffscreenSwapOut(screen->pScreen); -+ -+ W100Setup(screen); -+ -+ DBG_IMAGEON(("ModifyPixMapHeader(width:%d,height:%d,depth:%d,bpp:%d,bs:%d,fb:0x%08x)\n", pScreen->width, pScreen->height, -+ screen->fb[0].depth, -+ screen->fb[0].bitsPerPixel, -+ screen->fb[0].byteStride, -+ screen->fb[0].frameBuffer)); -+ -+ -+ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap(pScreen), -+ pScreen->width, -+ pScreen->height, -+ screen->fb[0].depth, -+ screen->fb[0].bitsPerPixel, -+ screen->fb[0].byteStride, -+ screen->fb[0].frameBuffer); -+ -+ -+ if (screenEnabled) { -+ KdEnableScreen(pScreen); -+ } -+ return TRUE; -+} -+ -+static Bool W100RandRGetInfo(ScreenPtr pScreen, Rotation *rotations) -+{ -+ KdScreenPriv(pScreen); -+ KdScreenInfo *screen = pScreenPriv->screen; -+ W100CardInfo(pScreenPriv); -+ RRScreenSizePtr pSize; -+ Rotation randr; -+ W100ModeSpec *modes; -+ int i; -+ -+ DBG_IMAGEON(("--W100RandRGetInfo\n")); -+ -+ *rotations = RR_Rotate_All; -+ -+ for (modes = w100_modes; modes->width; modes++) { -+ if (modes->supported) { -+ pSize = RRRegisterSize(pScreen, -+ modes->width, -+ modes->height, -+ screen->width_mm, -+ screen->height_mm); -+ if (modes == w100c->hw_window.mode) { -+ RRSetCurrentConfig(pScreen, screen->randr, 0, pSize); -+ } -+ } -+ } -+ -+ return TRUE; -+} -+ -+static Bool W100RandRInit(ScreenPtr pScreen) -+{ -+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); -+ DBG_IMAGEON(("--W100RandRInit\n")); -+ pScrPriv->rrSetConfig = W100RandRSetConfig; -+ pScrPriv->rrGetInfo = W100RandRGetInfo; -+ return TRUE; -+} -+ -+#endif -+ -+static Bool -+W100FinishInitScreen(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ DBG_IMAGEON(("--W100FinishInitScreen\n")); -+ if (!fbdevFinishInitScreen(pScreen)) -+ return FALSE; -+ -+#ifdef RANDR -+ if (!W100RandRInit(pScreen)) -+ return FALSE; -+#endif -+ return TRUE; -+} -+ -+static Bool -+W100CreateResources(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ return fbdevCreateResources(pScreen); -+} -+ -+static void -+W100Preserve(KdCardInfo * card) -+{ -+ W100CardInfo *w100c = card->driver; -+ DBG_IMAGEON(("--W100Preserve\n")); -+ -+ fbdevPreserve(card); -+} -+ -+static void -+W100Restore(KdCardInfo * card) -+{ -+ W100CardInfo *w100c = card->driver; -+ DBG_IMAGEON(("--W100Restore\n")); -+ fbdevRestore(card); -+} -+ -+static Bool -+W100DPMS(ScreenPtr pScreen, int mode) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ DBG_IMAGEON(("--W100DPMS\n")); -+ return fbdevDPMS(pScreen, mode); -+} -+ -+static Bool -+W100Enable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ DBG_IMAGEON(("--W100Enable\n")); -+ -+ /* -+ if (!fbdevEnable(pScreen)) -+ return FALSE; -+ */ -+ -+ if (w100c->mem_base == NULL) { -+ if (!W100Map(pScreenPriv->screen->card, w100c)) { -+ return FALSE; -+ } -+ W100Setup(pScreenPriv->screen); -+ } -+ W100SetupGraphicEngine(w100c); -+ -+ graphic_offset_u go; -+ go.val = MMIO_IN32(mmGRAPHIC_OFFSET); -+ DBG_IMAGEON(("Graphic offset is 0x%08x(0x%08x)\n", -+ go.f.graphic_offset, -+ W100_CARD2HOST(go.f.graphic_offset))); -+ -+ -+ return TRUE; -+} -+ -+static void -+W100Disable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ DBG_IMAGEON(("--W100Disable\n")); -+ //W100Unmap(pScreenPriv->card, w100c); -+ -+ fbdevDisable(pScreen); -+} -+ -+static void -+W100GetColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ fbdevGetColors(pScreen, fb, n, pdefs); -+} -+ -+static void -+W100PutColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ -+ fbdevPutColors(pScreen, fb, n, pdefs); -+} -+ -+KdCardFuncs W100Funcs = { -+ W100CardInit, /* cardinit */ -+ W100ScreenInit, /* scrinit */ -+ W100InitScreen, /* initScreen */ -+ W100FinishInitScreen, /* finishInitScreen */ -+ W100CreateResources, /* createRes */ -+ W100Preserve, /* preserve */ -+ W100Enable, /* enable */ -+ W100DPMS, /* dpms */ -+ W100Disable, /* disable */ -+ W100Restore, /* restore */ -+ W100ScreenFini, /* scrfini */ -+ W100CardFini, /* cardfini */ -+ -+ W100CursorInit, /* initCursor */ -+ W100CursorEnable, /* enableCursor */ -+ W100CursorDisable, /* disableCursor */ -+ W100CursorFini, /* finiCursor */ -+ W100RecolorCursor, /* recolorCursor */ -+ -+ W100InitAccel, /* initAccel */ -+ W100EnableAccel, /* enableAccel */ -+ W100DisableAccel, /* disableAccel */ -+ W100FiniAccel, /* finiAccel */ -+ -+ W100GetColors, /* getColors */ -+ W100PutColors, /* putColors */ -+}; -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_const.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_const.h 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,161 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifndef __IMAGEON_CONST_H__ -+#define __IMAGEON_CONST_H__ -+ -+// DP_GUI_MASTER_CNTL.GMC_Brush_DataType -+// DP_DATATYPE.Brush_DataType -+#define DP_BRUSH_8x8MONOOPA 0 //8x8 mono pattern (expanded to frgd, bkgd) -+#define DP_BRUSH_8x8MONOTRA 1 //8x8 mono pattern (expanded to frgd, leave_alone) -+#define DP_PEN_32x1MONOOPA 6 //32x1 mono pattern (expanded to frgd, bkgd) -+#define DP_PEN_32x1MONOTRA 7 //32x1 mono pattern (expanded to frgd, leave_alone) -+#define DP_BRUSH_8x8COLOR 10 //8x8 color pattern -+#define DP_BRUSH_SOLIDCOLOR 13 //solid color pattern (frgd) -+#define DP_BRUSH_NONE 15 //no brush used -+ -+#define SIZE_BRUSH_8x8MONO 2 -+#define SIZE_PEN_32x1MONO 1 -+#define SIZE_BRUSH_8x8COLOR_8 16 -+#define SIZE_BRUSH_8x8COLOR_16 32 -+#define MAX_BRUSH_SIZE SIZE_BRUSH_8x8COLOR_16 -+ -+// DP_GUI_MASTER_CNTL.GMC_Dst_DataType -+// DP_DATATYPE.Dp_Dst_DataType -+#define DP_DST_8BPP 2 // 8 bpp grey scale -+#define DP_DST_16BPP_1555 3 //16 bpp aRGB 1555 -+#define DP_DST_16BPP_444 5 //16 bpp aRGB 4444 -+ -+// DP_GUI_MASTER_CNTL.GMC_Src_DataType -+// DP_DATATYPE.Dp_Src_DataType -+#define DP_SRC_1BPP_OPA 0 //mono (expanded to frgd, bkgd) -+#define DP_SRC_1BPP_TRA 1 //mono (expanded to frgd, leave_alone) -+#define DP_SRC_COLOR_SAME_AS_DST 3 //color (same as DST) -+#define DP_SRC_SOLID_COLOR_BLT 4 //solid color for Blt (use frgd) -+#define DP_SRC_4BPP 5 //4 bpp -+#define DP_SRC_12BPP_PACKED 6 //12 bpp packed -+ -+// DP_GUI_MASTER_CNTL.GMC_Byte_Pix_Order -+// DP_DATATYPE.Dp_Byte_Pix_Order -+#define DP_PIX_ORDER_MSB2LSB 0 //monochrome pixel order from MSBit to LSBit -+#define DP_PIX_ORDER_LSB2MSB 1 //monochrome pixel order from LSBit to MSBit -+ -+// DP_GUI_MASTER_CNTL.GMC_Dp_Src_Source -+#define DP_SRC_MEM_LINEAR 1 //loaded from memory (linear trajectory) -+#define DP_SRC_MEM_RECTANGULAR 2 //loaded from memory (rectangular trajectory) -+#define DP_SRC_HOSTDATA_BIT 3 //loaded from hostdata (linear trajectory) -+#define DP_SRC_HOSTDATA_BYTE 4 //loaded from hostdata (linear trajectory & byte-aligned) -+ -+// DP_GUI_MASTER_CNTL.GMC_Dp_Op -+#define DP_OP_ROP 0 -+#define DP_OP_ARITHMETIC 1 -+ -+// E2_ARITHMETIC_CNTL.opcode -+#define E2_OPC_GLBALP_ADD_SRC2 0 -+#define E2_OPC_GLBALP_SUB_SRC2 1 -+#define E2_OPC_SRC1_ADD_SRC2 2 -+#define E2_OPC_SRC1_SUB_SRC2 3 -+#define E2_OPC_DST_SADDBLEND_SRC2 4 -+#define E2_OPC_DST_CADDBLEND_SRC2 5 -+#define E2_OPC_DST_CSUBBLEND_SRC2 6 -+#define E2_OPC_LF_SRC2 7 -+#define E2_OPC_SCALE_SRC2 8 -+#define E2_OPC_STRETCH_SRC2 9 -+#define E2_OPC_SRC1_4BPPCPYWEXP 10 -+#define E2_OPC_MC1 11 -+#define E2_OPC_MC2 12 -+#define E2_OPC_MC1_IDCT 13 -+#define E2_OPC_MC2_IDCT 14 -+#define E2_OPC_IDCT_ONLY_IFRAME 15 -+ -+// E2_ARITHMETIC_CNTL.clamp -+#define E2_CLAMP_OFF 0 -+#define E2_CLAMP_ON 1 -+ -+// E2_ARITHMETIC_CNTL.rounding -+#define E2_ROUNDING_TRUNCATE 0 -+#define E2_ROUNDING_TO_INFINITY 1 -+ -+// E2_ARITHMETIC_CNTL.srcblend -+#define E2_SRCBLEND_GLOBALALPHA 0 -+#define E2_SRCBLEND_ZERO 1 -+#define E2_SRCBLEND_SRC2ALPHA 2 -+#define E2_SRCBLEND_DSTALPHA 3 -+#define E2_SRCBLEND_ALPHA1PLANE 4 -+ -+// E2_ARITHMETIC_CNTL.destblend -+#define E2_DSTBLEND_GLOBALALPHA 0 -+#define E2_DSTBLEND_ZERO 1 -+#define E2_DSTBLEND_SRC2ALPHA 2 -+#define E2_DSTBLEND_DSTALPHA 3 -+#define E2_DSTBLEND_ALPHA1PLANE 4 -+ -+// LCD_FORMAT.lcd_type -+#define LCDTYPE_TFT333 0 -+#define LCDTYPE_TFT444 1 -+#define LCDTYPE_TFT555 2 -+#define LCDTYPE_TFT666 3 -+#define LCDTYPE_COLSTNPACK4 4 -+#define LCDTYPE_COLSTNPACK8F1 5 -+#define LCDTYPE_COLSTNPACK8F2 6 -+#define LCDTYPE_COLSTNPACK16 7 -+#define LCDTYPE_MONSTNPACK4 8 -+#define LCDTYPE_MONSTNPACK8 9 -+ -+// CP_RB_CNTL.rb_bufsz -+#define RB_SIZE_2K 8 -+#define RB_SIZE_4K 9 -+#define RB_SIZE_8K 10 -+#define RB_SIZE_16K 11 -+#define RB_SIZE_32K 12 -+#define RB_SIZE_64K 13 -+ -+// GRAPHIC_CTRL.color_depth -+#define COLOR_DEPTH_1BPP 0 -+#define COLOR_DEPTH_2BPP 1 -+#define COLOR_DEPTH_4BPP 2 -+#define COLOR_DEPTH_8BPP 3 -+#define COLOR_DEPTH_332 4 -+#define COLOR_DEPTH_A444 5 -+#define COLOR_DEPTH_A555 6 -+ -+// VIDEO_CTRL.video_mode -+#define VIDEO_MODE_422 0 -+#define VIDEO_MODE_420 1 -+ -+// CLR_CMP_CNTL.cmp_fcn_src -+#define CMP_FCN_SRC_NEQ 4 -+#define CMP_FCN_SRC_EQ 5 -+ -+// CLR_CMP_CNTL.cmp_src -+#define CMP_SRC_SRC 1 -+ -+// Overlay formats -+#define OVLFORMAT_YUV422 (6) -+#define OVLFORMAT_YUV420 (7) -+#define OVLFORMAT_RGB565 (5) -+#define OVLFORMAT_EQU_DISPLAY (8) -+ -+#define W100_CLK_SRC_XTAL 0 -+#define W100_CLK_SRC_PLL 1 -+ -+#endif -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_cursor.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_cursor.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,569 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include "cursorstr.h" -+#include "imageon.h" -+#include "imageon_regs.h" -+ -+#define W100_CURSOR_HEIGHT (16) -+#define W100_CURSOR_WIDTH (16) -+#define W100_CURSOR_PITCH (W100_CURSOR_WIDTH / 4) -+ -+#define W100_CURSOR_SIZE W100_CURSOR_PITCH * W100_CURSOR_WIDTH -+ -+static CARD16 expand2bpp[256]; -+ -+static CARD16 spread_byte(CARD8 b) -+{ -+ CARD16 s = b; -+ -+ s = ((s & 0x00f0) << 4) | (s & 0x000f); -+ s = ((s & 0x0c0c) << 2) | (s & 0x0303); -+ s = ((s & 0x2222) << 1) | (s & 0x1111); -+ return s; -+} -+ -+static void W100InitExpansionTable() -+{ -+ int i; -+ for (i = 0; i < 256; i++) { -+ expand2bpp[i] = spread_byte(i); -+ } -+} -+ -+#define BigEndian(v) \ -+ (((v & 0x000000ff) << 24) | \ -+ ((v & 0x0000ff00) << 8) | \ -+ ((v & 0x00ff0000) >> 8) | \ -+ ((v & 0xff000000) >> 24)) -+ -+#define PixelOffset(x, y) \ -+ (((y) * W100_CURSOR_PITCH + ((x) / 4)) >> 2) -+ -+#define PixelShift(x, y) \ -+ (2 * ((x) % 16)) -+ -+#define PixelMask(x, y) \ -+ ((0xc0000000) >> PixelShift(x, y)) -+ -+#define PixelVal(src, x, y) \ -+ ((*(src + PixelOffset(x, y)) & PixelMask(x, y)) >> (30 - PixelShift(x, y))) -+ -+#define SetPixelVal(ptr, x, y, val) \ -+ *(((CARD32 *)(ptr)) + PixelOffset(x, y)) = \ -+ *(((CARD32 *)(ptr)) + PixelOffset(x, y)) & ~PixelMask(x, y) | \ -+ ((val) & 0x03) << (30 - PixelShift(x2, y2)) -+ -+#define DUMP_CURSOR(src) do { \ -+ int x; \ -+ int y; \ -+ for (y = 0; y < W100_CURSOR_HEIGHT; y++) { \ -+ DBG_IMAGEON(("Line %02d: ", y)); \ -+ for (x = 0; x < W100_CURSOR_WIDTH; x++) { \ -+ DBG_IMAGEON(("%d", PixelVal(src,x,y))); \ -+ } \ -+ DBG_IMAGEON(("\n")); \ -+ } \ -+ DBG_IMAGEON((".\n")); \ -+} while (0) -+ -+static void -+W100RotateCursor(int randr, CARD32 *src, CARD32 *dst) -+{ -+ int x1, y1, x2, y2; -+ -+ switch (randr & RR_Rotate_All) { -+ case RR_Rotate_0: -+ x1 = 0; -+ y1 = 0; -+ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) { -+ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ case RR_Rotate_90: -+ x1 = 0; -+ y1 = 0; -+ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) { -+ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >=0; --y2) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ case RR_Rotate_180: -+ x1 = 0; -+ y1 = 0; -+ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >= 0; --y2) { -+ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ case RR_Rotate_270: -+ x1 = 0; -+ y1 = 0; -+ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) { -+ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) { -+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1)); -+ ++x1; -+ if (x1 >= W100_CURSOR_WIDTH) { -+ x1 = 0; -+ ++y1; -+ } -+ } -+ } -+ break; -+ } -+} -+ -+static void -+W100SetCursorColors(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ CursorPtr pCursor = pCurPriv->pCursor; -+ CursorBitsPtr bits = pCursor->bits; -+ cursor_color_u fgcolor; -+ cursor_color_u bgcolor; -+ -+ fgcolor.f.cur_color_r = pCursor->foreRed >> 8; -+ fgcolor.f.cur_color_g = pCursor->foreGreen >> 8; -+ fgcolor.f.cur_color_b = pCursor->foreBlue >> 8; -+ -+ bgcolor.f.cur_color_r = pCursor->backRed >> 8; -+ bgcolor.f.cur_color_g = pCursor->backGreen >> 8; -+ bgcolor.f.cur_color_b = pCursor->backBlue >> 8; -+ -+ DBG_IMAGEON(("W100SetCursorColors fg(%02x,%02x,%02x), bg(%02x,%02x,%02x)\n", -+ fgcolor.f.cur_color_r, -+ fgcolor.f.cur_color_g, -+ fgcolor.f.cur_color_b, -+ bgcolor.f.cur_color_r, -+ bgcolor.f.cur_color_g, -+ bgcolor.f.cur_color_b)); -+ -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmCURSOR1_COLOR0, bgcolor.val); -+ MMIO_OUT32(mmCURSOR1_COLOR1, fgcolor.val); -+ W100EnableDisplayUpdate(w100c); -+ -+} -+ -+static void -+W100LoadCursor(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ CursorPtr pCursor = pCurPriv->pCursor; -+ CursorBitsPtr bits = pCursor->bits; -+ CARD32 *dst; -+ CARD8 tmpCursor0[W100_CURSOR_SIZE]; -+ CARD8 tmpCursor1[W100_CURSOR_SIZE]; -+ CARD32 expValue, expMask; -+ CARD32 *src; -+ CARD32 *mask; -+ int lwsrc; -+ int line, i; -+ int h, w; -+ -+ -+ pCurPriv->pCursor = pCursor; -+ pCurPriv->xhot = bits->xhot; -+ pCurPriv->yhot = bits->yhot; -+ -+ memset(tmpCursor0, 0xaa, W100_CURSOR_SIZE); -+ -+ h = bits->height; -+ w = bits->width; -+ if (h > W100_CURSOR_HEIGHT) { -+ h = W100_CURSOR_HEIGHT; -+ } -+ -+ if (w > W100_CURSOR_WIDTH) { -+ w = W100_CURSOR_WIDTH; -+ } -+ -+ src = (CARD32*) bits->source; -+ dst = (CARD32*) tmpCursor0; -+ mask = (CARD32*) bits->mask; -+ -+ lwsrc = BitmapBytePad(bits->width) >> 2; -+ -+ for (line = 0; line < h; line++) { -+ for (i = 0; i < lwsrc; i++) { -+ expValue = -+ (expand2bpp[src[i] & 0xff]) | -+ (expand2bpp[(src[i] >> 8) & 0xff] << 16); -+ expMask = -+ (expand2bpp[mask[i] & 0xff]) | -+ (expand2bpp[(mask[i] >> 8) & 0xff] << 16); -+ expMask |= (expMask << 1); /* Expand 01 -> 11, 00 -> 00 */ -+ dst[i] = (0xaaaaaaaa & ~expMask) | (expValue & expMask); -+ } -+ src += lwsrc; -+ mask += lwsrc; -+ dst += lwsrc; -+ } -+ -+ /* Rotate the pixmap to get the correct orientation */ -+ W100RotateCursor(w100c->hw_window.randr, -+ (CARD32*) tmpCursor0, -+ (CARD32*) tmpCursor1); -+ -+ DUMP_CURSOR((CARD32*)tmpCursor1); -+ /* Correct endianness */ -+ src = (CARD32*) tmpCursor1; -+ dst = (CARD32*) (pCurPriv->area->vidmem->base + pCurPriv->area->offset); -+ DBG_IMAGEON(("W100LoadCursor(xhot:%d,yhot:%d,width:%d,height:%d) dst(0x%08x)\n", -+ bits->xhot, bits->yhot, -+ bits->width, bits->height, -+ dst)); -+ -+ for (line = 0; line < h; line++) { -+ for (i = 0; i < lwsrc; i++) { -+ dst[i] = BigEndian(src[i]); -+ } -+ src += lwsrc; -+ dst += lwsrc; -+ } -+ -+ W100SetCursorColors(pScreen); -+} -+ -+static void -+W100UnloadCursor(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ cursor_h_pos_u hpos; -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ DBG_IMAGEON(("W100UnloadCursor pCurPriv:%p\n", pCurPriv)); -+ -+ hpos.val = pCurPriv->hpos; -+ hpos.f.cur_en = 0; -+ -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmCURSOR1_H_POS, hpos.val); -+ W100EnableDisplayUpdate(w100c); -+ pCurPriv->hpos = hpos.val; -+} -+ -+static void -+W100MoveCursor(ScreenPtr pScreen, int x, int y) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ int xoffs, yoffs; -+ cursor_offset_u cursor_offset; -+ cursor_h_pos_u hpos; -+ cursor_v_pos_u vpos; -+ graphic_h_disp_u graphic_hdisp; -+ graphic_v_disp_u graphic_vdisp; -+ BoxRec cursorBox, deviceBox; -+ -+ -+ if (!pCurPriv->has_cursor) { -+ return; -+ } -+ if (!pScreenPriv->enabled) { -+ return; -+ } -+ -+ graphic_hdisp.val = w100c->regs.GRAPHIC_H_DISP; -+ graphic_vdisp.val = w100c->regs.GRAPHIC_V_DISP; -+ xoffs = 0; -+ yoffs = 0; -+ cursorBox.x1 = x - pCurPriv->xhot; -+ cursorBox.y1 = y - pCurPriv->yhot; -+ cursorBox.x2 = cursorBox.x1 + pCurPriv->width - 1; -+ cursorBox.y2 = cursorBox.y1 + pCurPriv->height - 1; -+ W100MapToDevice(w100c, &cursorBox, &deviceBox); -+ -+ if (deviceBox.x1 < 0) { -+ xoffs = -deviceBox.x1; -+ deviceBox.x1 = 0; -+ } -+ -+ if (deviceBox.y1 < 0) { -+ yoffs = -deviceBox.y1; -+ deviceBox.y1 = 0; -+ } -+ -+ hpos.f.cur_h_start = graphic_hdisp.f.graphic_h_start + deviceBox.x1; -+ hpos.f.cur_h_end = graphic_hdisp.f.graphic_h_start + deviceBox.x2 + 1; -+ hpos.f.cur_en = 1; -+ vpos.f.cur_v_start = graphic_vdisp.f.graphic_v_start + deviceBox.y1; -+ vpos.f.cur_v_end = graphic_vdisp.f.graphic_v_start + deviceBox.y2 + 1; -+ -+ cursor_offset.f.cur_x_offset = xoffs; -+ cursor_offset.f.cur_y_offset = yoffs; -+ cursor_offset.f.cur_offset = (CARD32) -+ W100_HOST2CARD(pCurPriv->area->vidmem->base -+ + pCurPriv->area->offset); -+ DBG_IMAGEON(("W100MoveCursor dst(x:%d,y:%d)," -+ "hwpos(hpos.start:%d,hpos.end:%d,vpos.start:%d,vpos.end:%d)," -+ "mapped(x:%d,y:%d,xoffs:%d,yoffs:%d)\n", -+ x, y, -+ hpos.f.cur_h_start, hpos.f.cur_h_end, -+ vpos.f.cur_v_start, vpos.f.cur_v_end, -+ deviceBox.x1, deviceBox.y1, xoffs, yoffs)); -+ -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmCURSOR1_OFFSET, cursor_offset.val); -+ MMIO_OUT32(mmCURSOR1_V_POS, vpos.val); -+ MMIO_OUT32(mmCURSOR1_H_POS, hpos.val); -+ W100EnableDisplayUpdate(w100c); -+ -+ pCurPriv->hpos = hpos.val; -+ pCurPriv->vpos = vpos.val; -+ pCurPriv->coffset = cursor_offset.val; -+ -+} -+ -+static Bool -+W100RealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ DBG_IMAGEON(("W100RealizeCursor\n")); -+ -+ if (!pScreenPriv->enabled) { -+ return TRUE; -+ } -+ -+ if (pCursor && pCurPriv->pCursor == pCursor) { -+ int x, y; -+ miPointerPosition(&x, &y); -+ W100LoadCursor(pScreen); -+ W100MoveCursor(pScreen, x, y); -+ } -+ return TRUE; -+} -+ -+ -+static Bool -+W100UnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor) -+{ -+ DBG_IMAGEON(("W100UnrealizeCursor\n")); -+ return TRUE; -+} -+ -+ -+static void -+W100SetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ pCurPriv->pCursor = pCursor; -+ -+ if (!pScreenPriv->enabled) { -+ return; -+ } -+ -+ if (pCursor) { -+ W100LoadCursor(pScreen); -+ W100MoveCursor(pScreen, x, y); -+ } else { -+ W100UnloadCursor(pScreen); -+ } -+} -+ -+ -+miPointerSpriteFuncRec W100PointerSpriteFuncs = { -+ W100RealizeCursor, -+ W100UnrealizeCursor, -+ W100SetCursor, -+ W100MoveCursor, -+}; -+ -+static void -+W100QueryBestSize(int class, unsigned short *pwidth, unsigned short *pheight, -+ ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ switch (class) { -+ case CursorShape: -+ if (*pwidth > pCurPriv->width) { -+ *pwidth = pCurPriv->width; -+ } -+ if (*pheight > pCurPriv->height) { -+ *pheight = pCurPriv->height; -+ } -+ if (*pwidth > pScreen->width) { -+ *pwidth = pScreen->width; -+ } -+ if (*pheight > pScreen->height) { -+ *pheight = pScreen->height; -+ } -+ break; -+ default: -+ fbQueryBestSize(class, pwidth, pheight, pScreen); -+ break; -+ } -+} -+ -+static void -+W100CursorSave(ScreenPtr pScreen, KdOffscreenArea *area) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ DBG_IMAGEON(("W100CursorSave\n")); -+ -+ pCurPriv->area = NULL; -+} -+ -+void -+W100CursorEnable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ if (!pCurPriv->has_cursor) { -+ return; -+ } -+ -+ DBG_IMAGEON(("W100CursorEnable\n")); -+ -+ if (pCurPriv->area == NULL) { -+ pCurPriv->area = KdOffscreenAlloc(pScreen, -+ W100_CURSOR_SIZE, 0, TRUE, -+ W100CursorSave, w100s); -+ } -+ if (pCurPriv->area == NULL) { -+ FatalError("Couldn't allocate offscreen memory for cursor.\n"); -+ } else { -+ DBG_IMAGEON(("Cursor memory at 0x%08x(0x%08x)\n", -+ pCurPriv->area->vidmem->base + pCurPriv->area->offset, -+ W100_HOST2CARD(pCurPriv->area->vidmem->base -+ + pCurPriv->area->offset))); -+ } -+ if (pCurPriv->pCursor) { -+ int x, y; -+ miPointerPosition(&x, &y); -+ W100LoadCursor(pScreen); -+ W100MoveCursor(pScreen, x, y); -+ } else { -+ W100UnloadCursor(pScreen); -+ } -+} -+ -+ -+void -+W100CursorDisable(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ DBG_IMAGEON(("W100CursorDisable\n")); -+ -+ if (!pScreenPriv->enabled || !pCurPriv->has_cursor) { -+ return; -+ } -+ -+ if (pCurPriv->pCursor) { -+ W100UnloadCursor(pScreen); -+ } -+ -+ pCurPriv->area = NULL; -+} -+ -+Bool -+W100CursorInit(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ DBG_IMAGEON(("W100CursorInit\n")); -+ -+ pCurPriv->width = W100_CURSOR_WIDTH; -+ pCurPriv->height = W100_CURSOR_HEIGHT; -+ pScreen->QueryBestSize = W100QueryBestSize; -+ miPointerInitialize(pScreen, -+ &W100PointerSpriteFuncs, -+ &kdPointerScreenFuncs, -+ FALSE); -+ pCurPriv->has_cursor = TRUE; -+ pCurPriv->pCursor = NULL; -+ W100InitExpansionTable(); -+ return TRUE; -+} -+ -+ -+void -+W100RecolorCursor(ScreenPtr pScreen, int ndef, xColorItem *pdef) -+{ -+ return; -+} -+ -+ -+void -+W100CursorFini(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100Cursor *pCurPriv = &w100s->cursor; -+ -+ pCurPriv->has_cursor = FALSE; -+ pCurPriv->pCursor = NULL; -+} -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_draw.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_draw.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,238 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include "imageon.h" -+#include "imageon_regs.h" -+#include "imageon_const.h" -+#include "imageon_support.h" -+#include "kaa.h" -+ -+static W100CardInfo *currentCard; -+ -+void -+W100WaitMarker(ScreenPtr pScreen, int marker) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100WaitIdle(w100c); -+} -+ -+Bool -+W100PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg) -+{ -+ KdScreenPriv(pPix->drawable.pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100CardInfo(pScreenPriv); -+ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr; -+ int fifoEntries = 4; -+ -+ DBG_IMAGEON(("W100PrepareSolid(alu:%d, pm:0x%08x, fg:%d)\n", -+ alu, pm, fg)); -+ -+ W100ResetContext(w100c); -+ W100SetPixelMask(w100c, pm); -+ -+ if (W100SetDestinationPixmap(pPix)) { -+ if (w100c->ctx.mask.enable) { -+ ++fifoEntries; -+ } -+ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) { -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeSolidGmc(w100c, alu)); -+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch); -+ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset); -+ MMIO_OUT32(mmDP_BRUSH_FRGD_CLR, fg); -+ -+ if (w100c->ctx.mask.enable) { -+ MMIO_OUT32(mmDP_WRITE_MSK, pm); -+ } -+ currentCard = w100c; -+ return TRUE; -+ } -+ } -+ ErrorF("Error in W100PrepareSolid\n"); -+ return FALSE; -+} -+ -+void -+W100Solid(int x1, int y1, int x2, int y2) -+{ -+ W100CardInfo *w100c = currentCard; -+ DBG_IMAGEON(("W100Solid(x1:%d,y1:%d,x2:%d,y2:%d)\n", x1, y1, x2, y2)); -+ -+ if (W100WaitCmdFifoEntries(w100c, 2)) { -+ MMIO_OUT32(mmDST_Y_X, (y1 << 16) | x1); -+ MMIO_OUT32(mmDST_HEIGHT_WIDTH, ((y2 - y1) << 16) | (x2 - x1)); -+ } else { -+ ErrorF("Error in W100Solid\n"); -+ } -+} -+ -+void -+W100DoneSolid(void) -+{ -+} -+ -+ -+Bool -+W100PrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, -+ int dx, int dy, int alu, Pixel pm) -+{ -+ KdScreenPriv(pDst->drawable.pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100CardInfo(pScreenPriv); -+ dp_datatype_u datatype; -+ -+ int fifoEntries = 6; -+ -+ W100ResetContext(w100c); -+ W100SetPixelMask(w100c, pm); -+ W100SetXForm(w100c, dx, dy); -+ -+ if (W100SetSourcePixmap(pSrc) && W100SetDestinationPixmap(pDst)) { -+ DBG_IMAGEON(("W100PrepareCopy(src(pitch:%d,offset:0x%08x)," -+ "dst(pitch:%d,offset:0x%08x))\n", -+ w100c->ctx.src.pitch, -+ w100c->ctx.src.offset, -+ w100c->ctx.dst.pitch, -+ w100c->ctx.dst.offset)); -+ if (w100c->ctx.mask.enable) { -+ ++fifoEntries; -+ } -+ -+ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) { -+ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch); -+ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset); -+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch); -+ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset); -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeCopyGmc(w100c, alu)); -+ if (w100c->ctx.mask.enable) { -+ MMIO_OUT32(mmDP_WRITE_MSK, pm); -+ } -+ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath); -+ currentCard = w100c; -+ return TRUE; -+ } -+ } -+ ErrorF("Error in W100PrepareCopy\n"); -+ return FALSE; -+} -+ -+void -+W100Copy(int srcX, int srcY, int dstX, int dstY, int w, int h) -+{ -+ W100CardInfo *w100c = currentCard; -+ DBG_IMAGEON(("W100Copy(src(x:%d,y:%d),dst(x:%d,y:%d),w:%d,h:%d)\n", -+ srcX, srcY, -+ dstX, dstY, -+ w, h)); -+ if (w100c->ctx.xform.dx < 0) { -+ dstX += w - 1; -+ srcX += w - 1; -+ } -+ -+ if (w100c->ctx.xform.dy < 0) { -+ dstY += h - 1; -+ srcY += h - 1; -+ } -+ -+ if (W100WaitCmdFifoEntries(w100c, 3)) { -+ MMIO_OUT32(mmSRC_Y_X, (srcY << 16) | srcX); -+ MMIO_OUT32(mmDST_Y_X, (dstY << 16) | dstX); -+ MMIO_OUT32(mmDST_HEIGHT_WIDTH, (h << 16) | w); -+ } else { -+ ErrorF("Error in W100Copy\n"); -+ } -+} -+ -+void -+W100DoneCopy(void) -+{ -+} -+ -+Bool -+W100InitAccel(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ -+ -+ DBG_IMAGEON(("--W100InitAccel: %d/%d depth/bpp\n", -+ pScreenPriv->screen->fb[0].depth, -+ pScreenPriv->screen->fb[0].bitsPerPixel)); -+ -+ memset(&w100s->kaa, 0, sizeof(KaaScreenInfoRec)); -+ w100s->kaa.waitMarker = W100WaitMarker; -+ w100s->kaa.PrepareSolid = W100PrepareSolid; -+ w100s->kaa.Solid = W100Solid; -+ w100s->kaa.DoneSolid = W100DoneSolid; -+ w100s->kaa.PrepareCopy = W100PrepareCopy; -+ w100s->kaa.Copy = W100Copy; -+ w100s->kaa.DoneCopy = W100DoneCopy; -+ -+ w100s->kaa.flags |= KAA_OFFSCREEN_PIXMAPS; -+ /* Offset alignment, not sure if this is enought */ -+ w100s->kaa.offsetAlign = 0; -+ w100s->kaa.pitchAlign = 16; -+ -+ if (!kaaDrawInit(pScreen, &w100s->kaa)) { -+ return FALSE; -+ } -+ DBG_IMAGEON(("KAA flags: 0x%08x\n", w100s->kaa.flags)); -+ return TRUE; -+} -+ -+void -+W100EnableAccel(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100CardInfo(pScreenPriv); -+ -+ DBG_IMAGEON(("--W100EnableAccel\n")); -+ -+ w100s->kaa.PrepareBlend = NULL; -+ w100s->kaa.Blend = NULL; -+ w100s->kaa.DoneBlend = NULL; -+ w100s->kaa.CheckComposite = NULL; -+ w100s->kaa.PrepareComposite = NULL; -+ w100s->kaa.Composite = NULL; -+ w100s->kaa.DoneComposite = NULL; -+ w100s->kaa.UploadToScreen = NULL; -+ w100s->kaa.UploadToScratch = NULL; -+ kaaMarkSync(pScreen); -+} -+ -+void -+W100DisableAccel(ScreenPtr pScreen) -+{ -+ DBG_IMAGEON(("--W100DisableAccel\n")); -+} -+ -+void -+W100FiniAccel(ScreenPtr pScreen) -+{ -+ DBG_IMAGEON(("--W100FiniAccel\n")); -+} -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon.h 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,284 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifndef _IMAGEON_H_ -+#define _IMAGEON_H_ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+ -+#include -+ -+#define DEBUG_IMAGEON 0 -+#if DEBUG_IMAGEON -+#define DBG_IMAGEON(a) ErrorF a -+#else -+#define DBG_IMAGEON(a) -+#endif -+ -+ -+#define W100_MEM_BASE (0x08000000) -+#define W100_REG_OFFSET (0x00010000) -+#define W100_REG_BASE (W100_MEM_BASE + W100_REG_OFFSET) -+#define W100_MEM_SIZE (0x01000000) -+#define W100_REG_SIZE (0x00002000) -+#define W100_CMDFIFO_SIZE (16) -+ -+#define W100_CARD2HOST(x) (w100c->mem_base + (CARD32)(x)) -+#define W100_HOST2CARD(x) ((x) - (CARD32)(w100c->mem_base)) -+#define W100_MEMAREAS (2) -+#define W100_INTMEM (0) -+#define W100_EXTMEM (1) -+ -+#define W100_SYSFS_BASE "/sys/bus/platform/devices/w100fb/" -+ -+#define MMIO_OUT32(a, v) (*(VOL32 *)((w100c->reg_base) + (a)) = (v)) -+#define MMIO_IN32(a) (*(VOL32 *)((w100c->reg_base) + (a))) -+ -+#define W100_MAX(x, y) ((x) > (y) ? x : y) -+#define W100_MIN(x, y) ((x) < (y) ? x : y) -+ -+#define W100_ALIGN(q, a) ((q + a - 1) & ~(a - 1)) -+ -+#define TIMEOUT_LOCALS struct timeval _target, _curtime; -+ -+static inline Bool -+tv_le(struct timeval *tv1, struct timeval *tv2) -+{ -+ if (tv1->tv_sec < tv2->tv_sec || -+ (tv1->tv_sec == tv2->tv_sec && -+ tv1->tv_usec < tv2->tv_usec)) -+ return TRUE; -+ else -+ return FALSE; -+} -+ -+#define WHILE_NOT_TIMEOUT(_timeout) \ -+ gettimeofday(&_target, NULL); \ -+ _target.tv_usec += ((_timeout) * 1000000); \ -+ _target.tv_sec += _target.tv_usec / 1000000; \ -+ _target.tv_usec = _target.tv_usec % 1000000; \ -+ while (gettimeofday(&_curtime, NULL), tv_le(&_curtime, &_target)) -+ -+#define TIMEDOUT() (!tv_le(&_curtime, &_target)) -+ -+typedef volatile CARD8 VOL8; -+typedef volatile CARD16 VOL16; -+typedef volatile CARD32 VOL32; -+ -+typedef struct _W100CardEntry { -+ CARD16 vendor; -+ CARD16 device; -+ CARD8 caps; -+ char *name; -+} W100CardEntry; -+ -+ -+typedef enum _W100Caps { -+ W100XVSupport = 1 -+} W100Caps; -+ -+typedef struct _W100ModeSpec { -+ CARD16 width; -+ CARD16 height; -+ CARD8 bpp; -+ CARD8 fbpool; -+ Bool supported; -+} W100ModeSpec; -+ -+typedef struct _W100BoxRec { -+ CARD16 x; -+ CARD16 y; -+ CARD16 w; -+ CARD16 h; -+} W100BoxRec, *W100BoxPtr; -+ -+typedef struct _W100Mode { -+ CARD16 width; -+ CARD16 height; -+ CARD8 bpp; -+} W100Mode; -+ -+typedef struct _W100MemArea { -+ CARD8 *start; -+ CARD32 size; -+ CARD8 priority; -+} W100MemArea; -+ -+typedef struct _W100StartupInfo { -+ W100CardEntry *card_id; -+ W100Mode mode; -+ Bool portrait; -+ int randr; -+} W100StartupInfo; -+ -+typedef struct _W100CardInfo { -+ FbdevPriv fbdev; -+ W100CardEntry *card_id; -+ CARD8 *mem_base; -+ CARD8 *reg_base; -+ W100MemArea **memareas; -+ int num_memareas; -+ int cmdfifo_entries; -+ struct { -+ CARD32 ENG_CNTL; -+ CARD32 VIDEO_CTRL; -+ CARD32 GRAPHIC_H_DISP; -+ CARD32 GRAPHIC_V_DISP; -+ CARD32 DISP_DEBUG2; -+ } regs; -+ struct { -+ CARD8 *offset; -+ CARD16 width; -+ CARD16 height; -+ int randr; -+ W100ModeSpec *mode; -+ CARD8 bpp; -+ } hw_window; -+ CARD8 last_dst_videomem; -+ CARD8 last_src_videomem; -+ struct { -+ struct { -+ CARD8 datatype; -+ CARD32 pitch; -+ CARD32 offset; -+ CARD8 videomem; -+ } dst; -+ struct { -+ CARD8 datatype; -+ CARD32 pitch; -+ CARD32 offset; -+ CARD8 videomem; -+ } src; -+ struct { -+ int dx; -+ int dy; -+ int randr; -+ Bool mirror; -+ CARD32 dataPath; -+ } xform; -+ struct { -+ Pixel pm; -+ Bool enable; -+ } mask; -+ } ctx; -+} W100CardInfo; -+ -+#define W100GetCardInfo(kd) ((W100CardInfo *) ((kd)->card->driver)) -+#define W100CardInfo(kd) W100CardInfo *w100c = W100GetCardInfo(kd) -+ -+typedef struct _W100Cursor { -+ int width, height; -+ int xhot, yhot; -+ Bool has_cursor; -+ CursorPtr pCursor; -+ KdOffscreenArea *area; -+ CARD32 vpos; -+ CARD32 hpos; -+ CARD32 coffset; -+} W100Cursor; -+ -+typedef struct _W100ScreenInfo { -+ FbdevScrPriv fbdev; -+ KaaScreenInfoRec kaa; -+ W100CardInfo *w100c; -+ KdScreenInfo *screen; -+ KdVideoAdaptorPtr pAdaptor; -+ W100Cursor cursor; -+} W100ScreenInfo; -+ -+#define W100GetScreenInfo(kd) ((W100ScreenInfo *) ((kd)->screen->driver)) -+#define W100ScreenInfo(kd) W100ScreenInfo *w100s = W100GetScreenInfo(kd) -+ -+typedef enum _W100VideoStatus { -+ W100_OVERLAY_ON = 1, -+ W100_OVERLAY_CONFIGURED = 2 -+} W100VideoStatus; -+ -+ -+typedef struct _W100PortPriv { -+ CARD32 videoStatus; -+ CARD32 videoCtrl; -+ RegionRec clip; -+ struct { -+ int width; /* Source width */ -+ int height; /* Source height */ -+ unsigned char *buffer; /* Source buffer */ -+ int id; /* Source FOURCC */ -+ int size; /* Size of source rect (bytes) */ -+ KdOffscreenArea *surface; /* Source surface (on card memory) */ -+ BoxRec box; /* Source rect boundaries */ -+ } src; -+ struct { -+ BoxRec box; /* Screen rectangle */ -+ } dst; -+ struct { -+ int size; /* Size of the overlay surface (bytes) */ -+ KdOffscreenArea *surface; /* Overlay surface (on card memory) */ -+ BoxRec box; /* Overlay box (util size) */ -+ BoxRec frame; /* Overlay box (plus corrections) */ -+ Bool changed; /* To avoid recalculations */ -+ int horExp; /* Horizontal expansion */ -+ int verExp; /* Vertical expansion */ -+ int maxSize; /* Maximum allowed surface size (bytes) */ -+ int colorKey; /* Colour to replace with overlay */ -+ int brightness; /* Brigthness */ -+ } ovl; -+ struct { -+ int size; /* Number of planes */ -+ int bpp; /* bpp of the planes */ -+ int offset[3]; /* Planes offsets */ -+ CARD32 yplane; /* Offset (card) of Y plane */ -+ CARD32 uplane; /* Offset (card) of U plane */ -+ CARD32 vplane; /* Offset (card) of V plane */ -+ } planes; -+ Bool changed; /* To track changes and avoid recalculations */ -+} W100PortPrivRec, *W100PortPrivPtr; -+ -+extern KdCardFuncs W100Funcs; -+ -+/* imageon_draw.c */ -+void W100WaitMarker(ScreenPtr pScreen, int marker); -+Bool W100PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg); -+void W100Solid(int x1, int y1, int x2, int y2); -+Bool W100PrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, -+ int dx, int dy, int alu, Pixel pm); -+void W100Copy(int srcX, int srcY, int dstX, int dstY, int w, int h); -+void W100DoneCopy(void); -+Bool W100InitAccel(ScreenPtr pScreen); -+void W100EnableAccel(ScreenPtr pScreen); -+void W100DisableAccel(ScreenPtr pScreen); -+void W100FiniAccel(ScreenPtr pScreen); -+/* imageon_cursor.c */ -+void W100CursorEnable(ScreenPtr pScreen); -+void W100CursorDisable(ScreenPtr pScreen); -+Bool W100CursorInit(ScreenPtr pScreen); -+void W100RecolorCursor(ScreenPtr pScreen, int ndef, xColorItem * pdef); -+void W100CursorFini(ScreenPtr pScreen); -+ -+ -+ -+ -+#endif /* _IMAGEON_H_ */ -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_regs.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_regs.h 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,4155 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifndef __IMAGEON_REGS_H__ -+#define __IMAGEON_REGS_H__ -+ -+/* Block CIF Start: */ -+#define mmCHIP_ID 0x0000 -+#define mmREVISION_ID 0x0004 -+#define mmWRAP_BUF_A 0x0008 -+#define mmWRAP_BUF_B 0x000C -+#define mmWRAP_TOP_DIR 0x0010 -+#define mmWRAP_START_DIR 0x0014 -+#define mmCIF_CNTL 0x0018 -+#define mmCFGREG_BASE 0x001C -+#define mmCIF_IO 0x0020 -+#define mmCIF_READ_DBG 0x0024 -+#define mmCIF_WRITE_DBG 0x0028 -+#define cfgIND_ADDR_A_0 0x0000 -+#define cfgIND_ADDR_A_1 0x0001 -+#define cfgIND_ADDR_A_2 0x0002 -+#define cfgIND_DATA_A 0x0003 -+#define cfgREG_BASE 0x0004 -+#define cfgINTF_CNTL 0x0005 -+#define cfgSTATUS 0x0006 -+#define cfgCPU_DEFAULTS 0x0007 -+#define cfgIND_ADDR_B_0 0x0008 -+#define cfgIND_ADDR_B_1 0x0009 -+#define cfgIND_ADDR_B_2 0x000A -+#define cfgIND_DATA_B 0x000B -+#define cfgPM4_RPTR 0x000C -+#define cfgSCRATCH 0x000D -+#define cfgPM4_WRPTR_0 0x000E -+#define cfgPM4_WRPTR_1 0x000F -+/* Block CIF End: */ -+ -+/* Block CP Start: */ -+#define mmCP_RB_CNTL 0x0210 -+#define mmCP_RB_BASE 0x0214 -+#define mmCP_RB_RPTR_ADDR 0x0218 -+#define mmCP_RB_RPTR 0x021C -+#define mmCP_RB_RPTR_WR 0x02F8 -+#define mmCP_RB_WPTR 0x0220 -+#define mmCP_IB_BASE 0x0228 -+#define mmCP_IB_BUFSZ 0x022C -+#define mmCP_CSQ_CNTL 0x0230 -+#define mmCP_CSQ_APER_PRIMARY 0x0300 -+#define mmCP_CSQ_APER_INDIRECT 0x0340 -+#define mmCP_ME_CNTL 0x0240 -+#define mmCP_ME_RAM_ADDR 0x0244 -+#define mmCP_ME_RAM_RADDR 0x0248 -+#define mmCP_ME_RAM_DATAH 0x024C -+#define mmCP_ME_RAM_DATAL 0x0250 -+#define mmCP_DEBUG 0x025C -+#define mmSCRATCH_REG0 0x0260 -+#define mmSCRATCH_REG1 0x0264 -+#define mmSCRATCH_REG2 0x0268 -+#define mmSCRATCH_REG3 0x026C -+#define mmSCRATCH_REG4 0x0270 -+#define mmSCRATCH_REG5 0x0274 -+#define mmSCRATCH_UMSK 0x0280 -+#define mmSCRATCH_ADDR 0x0284 -+#define mmCP_CSQ_ADDR 0x02E4 -+#define mmCP_CSQ_DATA 0x02E8 -+#define mmCP_CSQ_STAT 0x02EC -+#define mmCP_STAT 0x02F0 -+#define mmGEN_INT_CNTL 0x0200 -+#define mmGEN_INT_STATUS 0x0204 -+/* Block CP End: */ -+ -+/* Block DISPLAY Start: */ -+#define mmLCD_FORMAT 0x0410 -+#define mmGRAPHIC_CTRL 0x0414 -+#define mmGRAPHIC_OFFSET 0x0418 -+#define mmGRAPHIC_PITCH 0x041C -+#define mmCRTC_TOTAL 0x0420 -+#define mmACTIVE_H_DISP 0x0424 -+#define mmACTIVE_V_DISP 0x0428 -+#define mmGRAPHIC_H_DISP 0x042C -+#define mmGRAPHIC_V_DISP 0x0430 -+#define mmVIDEO_CTRL 0x0434 -+#define mmGRAPHIC_KEY 0x0438 -+#define mmVIDEO_Y_OFFSET 0x043C -+#define mmVIDEO_Y_PITCH 0x0440 -+#define mmVIDEO_U_OFFSET 0x0444 -+#define mmVIDEO_U_PITCH 0x0448 -+#define mmVIDEO_V_OFFSET 0x044C -+#define mmVIDEO_V_PITCH 0x0450 -+#define mmVIDEO_H_POS 0x0454 -+#define mmVIDEO_V_POS 0x0458 -+#define mmBRIGHTNESS_CNTL 0x045C -+#define mmCURSOR1_OFFSET 0x0460 -+#define mmCURSOR1_H_POS 0x0464 -+#define mmCURSOR1_V_POS 0x0468 -+#define mmCURSOR1_COLOR0 0x046C -+#define mmCURSOR1_COLOR1 0x0470 -+#define mmCURSOR2_OFFSET 0x0474 -+#define mmCURSOR2_H_POS 0x0478 -+#define mmCURSOR2_V_POS 0x047C -+#define mmCURSOR2_COLOR0 0x0480 -+#define mmCURSOR2_COLOR1 0x0484 -+#define mmDISP_INT_CNTL 0x0488 -+#define mmCRTC_SS 0x048C -+#define mmCRTC_LS 0x0490 -+#define mmCRTC_REV 0x0494 -+#define mmCRTC_DCLK 0x049C -+#define mmCRTC_GS 0x04A0 -+#define mmCRTC_VPOS_GS 0x04A4 -+#define mmCRTC_GCLK 0x04A8 -+#define mmCRTC_GOE 0x04AC -+#define mmCRTC_FRAME 0x04B0 -+#define mmCRTC_FRAME_VPOS 0x04B4 -+#define mmGPIO_DATA 0x04B8 -+#define mmGPIO_CNTL1 0x04BC -+#define mmGPIO_CNTL2 0x04C0 -+#define mmLCDD_CNTL1 0x04C4 -+#define mmLCDD_CNTL2 0x04C8 -+#define mmGENLCD_CNTL1 0x04CC -+#define mmGENLCD_CNTL2 0x04D0 -+#define mmDISP_DEBUG 0x04D4 -+#define mmDISP_DB_BUF_CNTL 0x04D8 -+#define mmDISP_CRC_SIG 0x04DC -+#define mmCRTC_DEFAULT_COUNT 0x04E0 -+#define mmLCD_BACKGROUND_COLOR 0x04E4 -+#define mmCRTC_PS2 0x04E8 -+#define mmCRTC_PS2_VPOS 0x04EC -+#define mmCRTC_PS1_ACTIVE 0x04F0 -+#define mmCRTC_PS1_NACTIVE 0x04F4 -+#define mmCRTC_GCLK_EXT 0x04F8 -+#define mmCRTC_ALW 0x04FC -+#define mmCRTC_ALW_VPOS 0x0500 -+#define mmCRTC_PSK 0x0504 -+#define mmCRTC_PSK_HPOS 0x0508 -+#define mmCRTC_CV4_START 0x050C -+#define mmCRTC_CV4_END 0x0510 -+#define mmCRTC_CV4_HPOS 0x0514 -+#define mmCRTC_ECK 0x051C -+#define mmREFRESH_CNTL 0x0520 -+#define mmGENLCD_CNTL3 0x0524 -+#define mmGPIO_DATA2 0x0528 -+#define mmGPIO_CNTL3 0x052C -+#define mmGPIO_CNTL4 0x0530 -+#define mmCHIP_STRAP 0x0534 -+#define mmDISP_DEBUG2 0x0538 -+#define mmDEBUG_BUS_CNTL 0x053C -+#define mmGAMMA_VALUE1 0x0540 -+#define mmGAMMA_VALUE2 0x0544 -+#define mmGAMMA_SLOPE 0x0548 -+#define mmGEN_STATUS 0x054C -+#define mmHW_INT 0x0550 -+/* Block DISPLAY End: */ -+ -+/* Block GFX Start: */ -+#define mmDST_OFFSET 0x1004 -+#define mmDST_PITCH 0x1008 -+#define mmDST_PITCH_OFFSET 0x102C -+#define mmDST_X 0x101C -+#define mmDST_Y 0x1020 -+#define mmDST_X_Y 0x1194 -+#define mmDST_Y_X 0x1038 -+#define mmDST_WIDTH 0x100C -+#define mmDST_HEIGHT 0x1010 -+#define mmDST_WIDTH_HEIGHT 0x1198 -+#define mmDST_HEIGHT_WIDTH 0x103C -+#define mmDST_HEIGHT_WIDTH_8 0x118C -+#define mmDST_HEIGHT_Y 0x11A0 -+#define mmDST_WIDTH_X 0x1188 -+#define mmDST_WIDTH_X_INCY 0x119C -+#define mmDST_LINE_START 0x1090 -+#define mmDST_LINE_END 0x1094 -+#define mmBRUSH_OFFSET 0x108C -+#define mmBRUSH_Y_X 0x1074 -+#define mmDP_BRUSH_FRGD_CLR 0x107C -+#define mmDP_BRUSH_BKGD_CLR 0x1078 -+#define mmSRC2_OFFSET 0x1060 -+#define mmSRC2_PITCH 0x1064 -+#define mmSRC2_PITCH_OFFSET 0x1068 -+#define mmSRC2_X 0x1050 -+#define mmSRC2_Y 0x1054 -+#define mmSRC2_X_Y 0x1058 -+#define mmSRC2_WIDTH 0x1080 -+#define mmSRC2_HEIGHT 0x1084 -+#define mmSRC2_INC 0x1088 -+#define mmSRC_OFFSET 0x11AC -+#define mmSRC_PITCH 0x11B0 -+#define mmSRC_PITCH_OFFSET 0x1028 -+#define mmSRC_X 0x1014 -+#define mmSRC_Y 0x1018 -+#define mmSRC_X_Y 0x1190 -+#define mmSRC_Y_X 0x1034 -+#define mmSRC_WIDTH 0x1040 -+#define mmSRC_HEIGHT 0x1044 -+#define mmSRC_INC 0x1048 -+#define mmHOST_DATA0 0x13C0 -+#define mmHOST_DATA1 0x13C4 -+#define mmHOST_DATA2 0x13C8 -+#define mmHOST_DATA3 0x13CC -+#define mmHOST_DATA4 0x13D0 -+#define mmHOST_DATA5 0x13D4 -+#define mmHOST_DATA6 0x13D8 -+#define mmHOST_DATA7 0x13DC -+#define mmHOST_DATA_LAST 0x13E0 -+#define mmDP_SRC_FRGD_CLR 0x1240 -+#define mmDP_SRC_BKGD_CLR 0x1244 -+#define mmSC_LEFT 0x1140 -+#define mmSC_RIGHT 0x1144 -+#define mmSC_TOP 0x1148 -+#define mmSC_BOTTOM 0x114C -+#define mmSRC_SC_RIGHT 0x1154 -+#define mmSRC_SC_BOTTOM 0x115C -+#define mmDP_CNTL 0x11C8 -+#define mmDP_CNTL_DST_DIR 0x11CC -+#define mmDP_DATATYPE 0x12C4 -+#define mmDP_MIX 0x12C8 -+#define mmDP_WRITE_MSK 0x12CC -+#define mmCLR_CMP_CLR_SRC 0x1234 -+#define mmCLR_CMP_CLR_DST 0x1238 -+#define mmCLR_CMP_CNTL 0x1230 -+#define mmCLR_CMP_MSK 0x123C -+#define mmDEFAULT_PITCH_OFFSET 0x10A0 -+#define mmDEFAULT_SC_BOTTOM_RIGHT 0x10A8 -+#define mmDEFAULT2_SC_BOTTOM_RIGHT 0x10AC -+#define mmREF1_PITCH_OFFSET 0x10B8 -+#define mmREF2_PITCH_OFFSET 0x10BC -+#define mmREF3_PITCH_OFFSET 0x10C0 -+#define mmREF4_PITCH_OFFSET 0x10C4 -+#define mmREF5_PITCH_OFFSET 0x10C8 -+#define mmREF6_PITCH_OFFSET 0x10CC -+#define mmDP_GUI_MASTER_CNTL 0x106C -+#define mmSC_TOP_LEFT 0x11BC -+#define mmSC_BOTTOM_RIGHT 0x11C0 -+#define mmSRC_SC_BOTTOM_RIGHT 0x11C4 -+#define mmGLOBAL_ALPHA 0x1210 -+#define mmFILTER_COEF 0x1214 -+#define mmMVC_CNTL_START 0x11E0 -+#define mmE2_ARITHMETIC_CNTL 0x1220 -+#define mmDEBUG0 0x1280 -+#define mmDEBUG1 0x1284 -+#define mmDEBUG2 0x1288 -+#define mmDEBUG3 0x128C -+#define mmDEBUG4 0x1290 -+#define mmDEBUG5 0x1294 -+#define mmDEBUG6 0x1298 -+#define mmDEBUG7 0x129C -+#define mmDEBUG8 0x12A0 -+#define mmDEBUG9 0x12A4 -+#define mmDEBUG10 0x12A8 -+#define mmDEBUG11 0x12AC -+#define mmDEBUG12 0x12B0 -+#define mmDEBUG13 0x12B4 -+#define mmDEBUG14 0x12B8 -+#define mmDEBUG15 0x12BC -+#define mmENG_CNTL 0x13E8 -+#define mmENG_PERF_CNT 0x13F0 -+/* Block GFX End: */ -+ -+/* Block IDCT Start: */ -+#define mmIDCT_RUNS 0x0C00 -+#define mmIDCT_LEVELS 0x0C04 -+#define mmIDCT_CONTROL 0x0C3C -+#define mmIDCT_AUTH_CONTROL 0x0C08 -+#define mmIDCT_AUTH 0x0C0C -+/* Block IDCT End: */ -+ -+/* Block MC Start: */ -+#define mmMEM_CNTL 0x0180 -+#define mmMEM_ARB 0x0184 -+#define mmMC_FB_LOCATION 0x0188 -+#define mmMEM_EXT_CNTL 0x018C -+#define mmMC_EXT_MEM_LOCATION 0x0190 -+#define mmMEM_EXT_TIMING_CNTL 0x0194 -+#define mmMEM_SDRAM_MODE_REG 0x0198 -+#define mmMEM_IO_CNTL 0x019C -+#define mmMC_DEBUG 0x01A0 -+#define mmMC_BIST_CTRL 0x01A4 -+#define mmMC_BIST_COLLAR_READ 0x01A8 -+#define mmTC_MISMATCH 0x01AC -+#define mmMC_PERF_MON_CNTL 0x01B0 -+#define mmMC_PERF_COUNTERS 0x01B4 -+/* Block MC End: */ -+ -+/* Block RBBM Start: */ -+#define mmWAIT_UNTIL 0x1400 -+#define mmISYNC_CNTL 0x1404 -+#define mmRBBM_GUICNTL 0x1408 -+#define mmRBBM_STATUS 0x0140 -+#define mmRBBM_STATUS_alt_1 0x140C -+#define mmRBBM_CNTL 0x0144 -+#define mmRBBM_SOFT_RESET 0x0148 -+#define mmNQWAIT_UNTIL 0x0150 -+#define mmRBBM_DEBUG 0x016C -+#define mmRBBM_CMDFIFO_ADDR 0x0170 -+#define mmRBBM_CMDFIFO_DATAL 0x0174 -+#define mmRBBM_CMDFIFO_DATAH 0x0178 -+#define mmRBBM_CMDFIFO_STAT 0x017C -+/* Block RBBM End: */ -+ -+/* Block CG Start: */ -+#define mmCLK_PIN_CNTL 0x0080 -+#define mmPLL_REF_FB_DIV 0x0084 -+#define mmPLL_CNTL 0x0088 -+#define mmSCLK_CNTL 0x008C -+#define mmPCLK_CNTL 0x0090 -+#define mmCLK_TEST_CNTL 0x0094 -+#define mmPWRMGT_CNTL 0x0098 -+#define mmPWRMGT_STATUS 0x009C -+/* Block CG End: */ -+ -+/* default value definitions */ -+#define defCHIP_ID 0x00001002 -+#define defREVISION_ID 0x00000000 -+#define defWRAP_BUF_A 0x01000000 -+#define defWRAP_BUF_B 0x01000000 -+#define defWRAP_TOP_DIR 0x00000000 -+#define defWRAP_START_DIR 0x00000000 -+//#define defCIF_CNTL 0x00082900 -+#define defCIF_CNTL 0x00182d00 //??updated by Tobey Z.for Sharp,Oct11,2002 -+#define defCFGREG_BASE 0x00000000 -+//#define defCIF_IO 0x000c0800 -+#define defCIF_IO 0x000C0902 //??updated by Tobey Z.for Sharp,Oct11,2002 -+#define defCIF_READ_DBG 0x00018223 -+#define defCIF_WRITE_DBG 0x00002100 -+#define defIND_ADDR_A_0 0x00000000 -+#define defIND_ADDR_A_1 0x00000000 -+#define defIND_ADDR_A_2 0x00000000 -+#define defIND_DATA_A 0x00000000 -+#define defREG_BASE 0x00000001 -+#define defINTF_CNTL 0x00000011 -+#define defSTATUS 0x00000000 -+#define defCPU_DEFAULTS 0x00000006 -+#define defIND_ADDR_B_0 0x00000000 -+#define defIND_ADDR_B_1 0x00000000 -+#define defIND_ADDR_B_2 0x00000000 -+#define defIND_DATA_B 0x00000000 -+#define defPM4_RPTR 0x00000000 -+#define defSCRATCH 0x00000000 -+#define defPM4_WRPTR_0 0x00000000 -+#define defPM4_WRPTR_1 0x00000000 -+#define defCP_RB_CNTL 0x00000000 -+#define defCP_RB_BASE 0x00000000 -+#define defCP_RB_RPTR_ADDR 0x00000000 -+#define defCP_RB_RPTR 0x00000000 -+#define defCP_RB_RPTR_WR 0x00000000 -+#define defCP_RB_WPTR 0x00000000 -+#define defCP_IB_BASE 0x00000000 -+#define defCP_IB_BUFSZ 0x00000000 -+#define defCP_CSQ_CNTL 0x00000000 -+#define defCP_CSQ_APER_PRIMARY 0x00000000 -+#define defCP_CSQ_APER_INDIRECT 0x00000000 -+#define defCP_ME_CNTL 0x40000000 -+#define defCP_ME_RAM_ADDR 0x00000000 -+#define defCP_ME_RAM_RADDR 0x00000000 -+#define defCP_ME_RAM_DATAH 0x00000000 -+#define defCP_ME_RAM_DATAL 0x00000000 -+#define defCP_DEBUG 0x00000000 -+#define defSCRATCH_REG0 0x00000000 -+#define defSCRATCH_REG1 0x00000000 -+#define defSCRATCH_REG2 0x00000000 -+#define defSCRATCH_REG3 0x00000000 -+#define defSCRATCH_REG4 0x00000000 -+#define defSCRATCH_REG5 0x00000000 -+#define defSCRATCH_UMSK 0x00000000 -+#define defSCRATCH_ADDR 0x00000000 -+#define defCP_CSQ_ADDR 0x00000000 -+#define defCP_CSQ_DATA 0x00000000 -+#define defCP_CSQ_STAT 0x00000000 -+#define defCP_STAT 0x00000000 -+#define defGEN_INT_CNTL 0x00000000 -+#define defGEN_INT_STATUS_rd 0x00080000 -+#define defGEN_INT_STATUS_wr 0x00000000 -+#define defLCD_FORMAT 0x00000000 -+#define defGRAPHIC_CTRL 0x00000000 -+#define defGRAPHIC_OFFSET 0x00000000 -+#define defGRAPHIC_PITCH 0x00000000 -+#define defCRTC_TOTAL 0x00000000 -+#define defACTIVE_H_DISP 0x00000000 -+#define defACTIVE_V_DISP 0x00000000 -+#define defGRAPHIC_H_DISP 0x00000000 -+#define defGRAPHIC_V_DISP 0x00000000 -+#define defVIDEO_CTRL 0x00000000 -+#define defGRAPHIC_KEY 0x00000000 -+#define defVIDEO_Y_OFFSET 0x00000000 -+#define defVIDEO_Y_PITCH 0x00000000 -+#define defVIDEO_U_OFFSET 0x00000000 -+#define defVIDEO_U_PITCH 0x00000000 -+#define defVIDEO_V_OFFSET 0x00000000 -+#define defVIDEO_V_PITCH 0x00000000 -+#define defVIDEO_H_POS 0x00000000 -+#define defVIDEO_V_POS 0x00000000 -+#define defBRIGHTNESS_CNTL 0x00000000 -+#define defCURSOR1_OFFSET 0x00000000 -+#define defCURSOR1_H_POS 0x00000000 -+#define defCURSOR1_V_POS 0x00000000 -+#define defCURSOR1_COLOR0 0x00000000 -+#define defCURSOR1_COLOR1 0x00000000 -+#define defCURSOR2_OFFSET 0x00000000 -+#define defCURSOR2_H_POS 0x00000000 -+#define defCURSOR2_V_POS 0x00000000 -+#define defCURSOR2_COLOR0 0x00000000 -+#define defCURSOR2_COLOR1 0x00000000 -+#define defDISP_INT_CNTL 0x00000000 -+#define defCRTC_SS 0x00000000 -+#define defCRTC_LS 0x00000000 -+#define defCRTC_REV 0x00000000 -+#define defCRTC_DCLK 0x00000000 -+#define defCRTC_GS 0x00000000 -+#define defCRTC_VPOS_GS 0x00000000 -+#define defCRTC_GCLK 0x00000000 -+#define defCRTC_GOE 0x00000000 -+#define defCRTC_FRAME 0x00000000 -+#define defCRTC_FRAME_VPOS 0x00000000 -+#define defGPIO_DATA 0x00000000 -+#define defGPIO_CNTL1 0xff00ff00 -+#define defGPIO_CNTL2 0x00000000 -+#define defLCDD_CNTL1 0x0000ffff -+#define defLCDD_CNTL2 0x00000000 -+#define defGENLCD_CNTL1 0x00aaa002 -+#define defGENLCD_CNTL2 0x00000002 -+#define defDISP_DEBUG 0x00000000 -+#define defDISP_DB_BUF_CNTL_rd 0x00000000 -+#define defDISP_DB_BUF_CNTL_wr 0x00000000 -+#define defDISP_CRC_SIG 0x00000000 -+#define defCRTC_DEFAULT_COUNT 0x00000000 -+#define defLCD_BACKGROUND_COLOR 0x00000000 -+#define defCRTC_PS2 0x00000000 -+#define defCRTC_PS2_VPOS 0x00000000 -+#define defCRTC_PS1_ACTIVE 0x00000000 -+#define defCRTC_PS1_NACTIVE 0x00000000 -+#define defCRTC_GCLK_EXT 0x00000000 -+#define defCRTC_ALW 0x00000000 -+#define defCRTC_ALW_VPOS 0x00000000 -+#define defCRTC_PSK 0x00000000 -+#define defCRTC_PSK_HPOS 0x00000000 -+#define defCRTC_CV4_START 0x00000000 -+#define defCRTC_CV4_END 0x00000000 -+#define defCRTC_CV4_HPOS 0x00000000 -+#define defCRTC_ECK 0x00000000 -+#define defREFRESH_CNTL 0x00000000 -+#define defGENLCD_CNTL3 0x000002aa -+#define defGPIO_DATA2 0x00000000 -+#define defGPIO_CNTL3 0x00000000 -+#define defGPIO_CNTL4 0x00000000 -+#define defCHIP_STRAP 0x00000000 -+#define defDISP_DEBUG2 0x00000000 -+#define defDEBUG_BUS_CNTL 0x00000000 -+#define defGAMMA_VALUE1 0x00000000 -+#define defGAMMA_VALUE2 0x00000000 -+#define defGAMMA_SLOPE 0x00000000 -+#define defGEN_STATUS 0x00000000 -+#define defHW_INT 0x00000000 -+#define defDST_OFFSET 0x00000000 -+#define defDST_PITCH 0x00000000 -+#define defDST_PITCH_OFFSET 0x00000000 -+#define defDST_X 0x00000000 -+#define defDST_Y 0x00000000 -+#define defDST_X_Y 0x00000000 -+#define defDST_Y_X 0x00000000 -+#define defDST_WIDTH 0x00000000 -+#define defDST_HEIGHT 0x00000000 -+#define defDST_WIDTH_HEIGHT 0x00000000 -+#define defDST_HEIGHT_WIDTH 0x00000000 -+#define defDST_HEIGHT_WIDTH_8 0x00000000 -+#define defDST_HEIGHT_Y 0x00000000 -+#define defDST_WIDTH_X 0x00000000 -+#define defDST_WIDTH_X_INCY 0x00000000 -+#define defDST_LINE_START 0x00000000 -+#define defDST_LINE_END 0x00000000 -+#define defBRUSH_OFFSET 0x00000000 -+#define defBRUSH_Y_X 0x00000000 -+#define defDP_BRUSH_FRGD_CLR 0x00000000 -+#define defDP_BRUSH_BKGD_CLR 0x00000000 -+#define defSRC2_OFFSET 0x00000000 -+#define defSRC2_PITCH 0x00000000 -+#define defSRC2_PITCH_OFFSET 0x00000000 -+#define defSRC2_X 0x00000000 -+#define defSRC2_Y 0x00000000 -+#define defSRC2_X_Y 0x00000000 -+#define defSRC2_WIDTH 0x00000000 -+#define defSRC2_HEIGHT 0x00000000 -+#define defSRC2_INC 0x00000000 -+#define defSRC_OFFSET 0x00000000 -+#define defSRC_PITCH 0x00000000 -+#define defSRC_PITCH_OFFSET 0x00000000 -+#define defSRC_X 0x00000000 -+#define defSRC_Y 0x00000000 -+#define defSRC_X_Y 0x00000000 -+#define defSRC_Y_X 0x00000000 -+#define defSRC_WIDTH 0x00000000 -+#define defSRC_HEIGHT 0x00000000 -+#define defSRC_INC 0x00000000 -+#define defHOST_DATA0 0x00000000 -+#define defHOST_DATA1 0x00000000 -+#define defHOST_DATA2 0x00000000 -+#define defHOST_DATA3 0x00000000 -+#define defHOST_DATA4 0x00000000 -+#define defHOST_DATA5 0x00000000 -+#define defHOST_DATA6 0x00000000 -+#define defHOST_DATA7 0x00000000 -+#define defHOST_DATA_LAST 0x00000000 -+#define defDP_SRC_FRGD_CLR 0x00000000 -+#define defDP_SRC_BKGD_CLR 0x00000000 -+#define defSC_LEFT 0x00000000 -+#define defSC_RIGHT 0x00000000 -+#define defSC_TOP 0x00000000 -+#define defSC_BOTTOM 0x00000000 -+#define defSRC_SC_RIGHT 0x00000000 -+#define defSRC_SC_BOTTOM 0x00000000 -+#define defDP_CNTL 0x00000000 -+#define defDP_CNTL_DST_DIR 0x00000000 -+#define defDP_DATATYPE 0x00000000 -+#define defDP_MIX 0x00000000 -+#define defDP_WRITE_MSK 0x00000000 -+#define defCLR_CMP_CLR_SRC 0x00000000 -+#define defCLR_CMP_CLR_DST 0x00000000 -+#define defCLR_CMP_CNTL 0x00000000 -+#define defCLR_CMP_MSK 0x00000000 -+#define defDEFAULT_PITCH_OFFSET 0x00000000 -+#define defDEFAULT_SC_BOTTOM_RIGHT 0x00000000 -+#define defDEFAULT2_SC_BOTTOM_RIGHT 0x00000000 -+#define defREF1_PITCH_OFFSET 0x00000000 -+#define defREF2_PITCH_OFFSET 0x00000000 -+#define defREF3_PITCH_OFFSET 0x00000000 -+#define defREF4_PITCH_OFFSET 0x00000000 -+#define defREF5_PITCH_OFFSET 0x00000000 -+#define defREF6_PITCH_OFFSET 0x00000000 -+#define defDP_GUI_MASTER_CNTL 0x00000000 -+#define defSC_TOP_LEFT 0x00000000 -+#define defSC_BOTTOM_RIGHT 0x00000000 -+#define defSRC_SC_BOTTOM_RIGHT 0x00000000 -+#define defGLOBAL_ALPHA 0x00000000 -+#define defFILTER_COEF 0x00000000 -+#define defMVC_CNTL_START 0x00000000 -+#define defE2_ARITHMETIC_CNTL 0x00000000 -+#define defDEBUG0 0x00000000 -+#define defDEBUG1 0x00000000 -+#define defDEBUG2 0x00000000 -+#define defDEBUG3 0x00000000 -+#define defDEBUG4 0x00000000 -+#define defDEBUG5 0x00000000 -+#define defDEBUG6 0x00000000 -+#define defDEBUG7 0x00000000 -+#define defDEBUG8 0x00000000 -+#define defDEBUG9 0x00000000 -+#define defDEBUG10 0x00000000 -+#define defDEBUG11 0x00000000 -+#define defDEBUG12 0x00000000 -+#define defDEBUG13 0x00000000 -+#define defDEBUG14 0x00000000 -+#define defDEBUG15 0x00000000 -+#define defENG_CNTL 0x00000003 -+#define defENG_PERF_CNT 0x00000000 -+#define defIDCT_RUNS 0x00000000 -+#define defIDCT_LEVELS 0x00000000 -+#define defIDCT_CONTROL 0x00000000 -+#define defIDCT_AUTH_CONTROL 0x00000000 -+#define defIDCT_AUTH 0x00000000 -+#define defMEM_CNTL 0x00000006 -+#define defMEM_ARB 0x00000000 -+#define defMC_FB_LOCATION 0x00ff0000 -+#define defMEM_EXT_CNTL 0x00040010 -+#define defMC_EXT_MEM_LOCATION 0x07ff0000 -+#define defMEM_EXT_TIMING_CNTL 0x00140c73 -+#define defMEM_SDRAM_MODE_REG 0x00050000 -+#define defMEM_IO_CNTL 0x00ff00ff -+#define defMC_DEBUG 0x00000000 -+#define defMC_BIST_CTRL 0x00000000 -+#define defMC_BIST_COLLAR_READ 0x00000000 -+#define defTC_MISMATCH 0x00000000 -+#define defMC_PERF_MON_CNTL 0x00000000 -+#define defMC_PERF_COUNTERS 0x00000000 -+#define defWAIT_UNTIL 0xc5cdcdcd -+#define defISYNC_CNTL 0x00000000 -+#define defRBBM_GUICNTL 0x00000000 -+#define defRBBM_STATUS 0x81cdcd40 -+#define defRBBM_CNTL 0x0000000f -+#define defRBBM_SOFT_RESET 0x00000000 -+#define defNQWAIT_UNTIL 0x00000001 -+#define defRBBM_DEBUG 0x00000000 -+#define defRBBM_CMDFIFO_ADDR 0x0000000d -+#define defRBBM_CMDFIFO_DATAL 0xcdcdcdcd -+#define defRBBM_CMDFIFO_DATAH 0x00000dcd -+#define defRBBM_CMDFIFO_STAT 0x00000d0d -+#define defCLK_PIN_CNTL 0x0000003f -+#define defPLL_REF_FB_DIV 0x5a500000 -+#define defPLL_CNTL 0x4b000203 -+#define defSCLK_CNTL 0x00ff0300 -+#define defPCLK_CNTL 0x00010000 -+#define defCLK_TEST_CNTL 0x00000000 -+#define defPWRMGT_CNTL 0x00000004 -+#define defPWRMGT_STATUS 0x00000001 -+ -+#define CFG_BASE_BOOT_DEFAULT 0x0 -+#define CFG_BASE_VALUE 0x0 -+#define REG_BASE_BOOT_DEFAULT 0x01 -+#define REG_BASE_VALUE 0x10000 -+#define MEM_INT_BASE_VALUE 0x100000 -+#define MEM_INT_TOP_VALUE_W100 0x15ffff -+#define MEM_EXT_BASE_VALUE 0x800000 -+#define MEM_EXT_TOP_VALUE 0x9fffff -+#define WRAP_BUF_BASE_VALUE 0x80000 -+#define WRAP_BUF_TOP_VALUE 0xbffff -+ -+ -+/* data structure definitions */ -+ -+typedef struct _chip_id_t { -+ unsigned long vendor_id : 16; -+ unsigned long device_id : 16; -+ } chip_id_t; -+ -+typedef union { -+ unsigned long val : 32; -+ chip_id_t f; -+} chip_id_u; -+ -+typedef struct _revision_id_t { -+ unsigned long minor_rev_id : 4; -+ unsigned long major_rev_id : 4; -+ unsigned long : 24; -+ } revision_id_t; -+ -+typedef union { -+ unsigned long val : 32; -+ revision_id_t f; -+} revision_id_u; -+ -+typedef struct _wrap_buf_a_t { -+ unsigned long offset_addr_a : 24; -+ unsigned long block_size_a : 3; -+ unsigned long : 5; -+ } wrap_buf_a_t; -+ -+typedef union { -+ unsigned long val : 32; -+ wrap_buf_a_t f; -+} wrap_buf_a_u; -+ -+typedef struct _wrap_buf_b_t { -+ unsigned long offset_addr_b : 24; -+ unsigned long block_size_b : 3; -+ unsigned long : 5; -+ } wrap_buf_b_t; -+ -+typedef union { -+ unsigned long val : 32; -+ wrap_buf_b_t f; -+} wrap_buf_b_u; -+ -+typedef struct _wrap_top_dir_t { -+ unsigned long top_addr : 23; -+ unsigned long : 9; -+ } wrap_top_dir_t; -+ -+typedef union { -+ unsigned long val : 32; -+ wrap_top_dir_t f; -+} wrap_top_dir_u; -+ -+typedef struct _wrap_start_dir_t { -+ unsigned long start_addr : 23; -+ unsigned long : 9; -+ } wrap_start_dir_t; -+ -+typedef union { -+ unsigned long val : 32; -+ wrap_start_dir_t f; -+} wrap_start_dir_u; -+ -+typedef struct _cif_cntl_t { -+ unsigned long swap_reg : 2; -+ unsigned long swap_fbuf_1 : 2; -+ unsigned long swap_fbuf_2 : 2; -+ unsigned long swap_fbuf_3 : 2; -+ unsigned long pmi_int_disable : 1; -+ unsigned long pmi_schmen_disable : 1; -+ unsigned long intb_oe : 1; -+ unsigned long en_wait_to_compensate_dq_prop_dly : 1; -+ unsigned long compensate_wait_rd_size : 2; -+ unsigned long wait_asserted_timeout_val : 2; -+ unsigned long wait_masked_val : 2; -+ unsigned long en_wait_timeout : 1; -+ unsigned long en_one_clk_setup_before_wait : 1; -+ unsigned long interrupt_active_high : 1; -+ unsigned long en_overwrite_straps : 1; -+ unsigned long strap_wait_active_hi : 1; -+ unsigned long lat_busy_count : 2; -+ unsigned long lat_rd_pm4_sclk_busy : 1; -+ unsigned long dis_system_bits : 1; -+ unsigned long dis_mr : 1; -+ unsigned long cif_spare_1 : 4; -+ } cif_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cif_cntl_t f; -+} cif_cntl_u; -+ -+typedef struct _cfgreg_base_t { -+ unsigned long cfgreg_base : 24; -+ unsigned long : 8; -+ } cfgreg_base_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cfgreg_base_t f; -+} cfgreg_base_u; -+ -+typedef struct _cif_io_t { -+ unsigned long dq_srp : 1; -+ unsigned long dq_srn : 1; -+ unsigned long dq_sp : 4; -+ unsigned long dq_sn : 4; -+ unsigned long waitb_srp : 1; -+ unsigned long waitb_srn : 1; -+ unsigned long waitb_sp : 4; -+ unsigned long waitb_sn : 4; -+ unsigned long intb_srp : 1; -+ unsigned long intb_srn : 1; -+ unsigned long intb_sp : 4; -+ unsigned long intb_sn : 4; -+ unsigned long : 2; -+ } cif_io_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cif_io_t f; -+} cif_io_u; -+ -+typedef struct _cif_read_dbg_t { -+ unsigned long unpacker_pre_fetch_trig_gen : 2; -+ unsigned long dly_second_rd_fetch_trig : 1; -+ unsigned long rst_rd_burst_id : 1; -+ unsigned long dis_rd_burst_id : 1; -+ unsigned long en_block_rd_when_packer_is_not_emp : 1; -+ unsigned long dis_pre_fetch_cntl_sm : 1; -+ unsigned long rbbm_chrncy_dis : 1; -+ unsigned long rbbm_rd_after_wr_lat : 2; -+ unsigned long dis_be_during_rd : 1; -+ unsigned long one_clk_invalidate_pulse : 1; -+ unsigned long dis_chnl_priority : 1; -+ unsigned long rst_read_path_a_pls : 1; -+ unsigned long rst_read_path_b_pls : 1; -+ unsigned long dis_reg_rd_fetch_trig : 1; -+ unsigned long dis_rd_fetch_trig_from_ind_addr : 1; -+ unsigned long dis_rd_same_byte_to_trig_fetch : 1; -+ unsigned long dis_dir_wrap : 1; -+ unsigned long dis_ring_buf_to_force_dec : 1; -+ unsigned long dis_addr_comp_in_16bit : 1; -+ unsigned long clr_w : 1; -+ unsigned long err_rd_tag_is_3 : 1; -+ unsigned long err_load_when_ful_a : 1; -+ unsigned long err_load_when_ful_b : 1; -+ unsigned long : 7; -+ } cif_read_dbg_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cif_read_dbg_t f; -+} cif_read_dbg_u; -+ -+typedef struct _cif_write_dbg_t { -+ unsigned long packer_timeout_count : 2; -+ unsigned long en_upper_load_cond : 1; -+ unsigned long en_chnl_change_cond : 1; -+ unsigned long dis_addr_comp_cond : 1; -+ unsigned long dis_load_same_byte_addr_cond : 1; -+ unsigned long dis_timeout_cond : 1; -+ unsigned long dis_timeout_during_rbbm : 1; -+ unsigned long dis_packer_ful_during_rbbm_timeout : 1; -+ unsigned long en_dword_split_to_rbbm : 1; -+ unsigned long en_dummy_val : 1; -+ unsigned long dummy_val_sel : 1; -+ unsigned long mask_pm4_wrptr_dec : 1; -+ unsigned long dis_mc_clean_cond : 1; -+ unsigned long err_two_reqi_during_ful : 1; -+ unsigned long err_reqi_during_idle_clk : 1; -+ unsigned long err_global : 1; -+ unsigned long en_wr_buf_dbg_load : 1; -+ unsigned long en_wr_buf_dbg_path : 1; -+ unsigned long sel_wr_buf_byte : 3; -+ unsigned long dis_rd_flush_wr : 1; -+ unsigned long dis_packer_ful_cond : 1; -+ unsigned long dis_invalidate_by_ops_chnl : 1; -+ unsigned long en_halt_when_reqi_err : 1; -+ unsigned long cif_spare_2 : 5; -+ unsigned long : 1; -+ } cif_write_dbg_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cif_write_dbg_t f; -+} cif_write_dbg_u; -+ -+typedef struct _ind_addr_a_0_t { -+ unsigned char ind_addr_a_0 : 8; -+ } ind_addr_a_0_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_addr_a_0_t f; -+} ind_addr_a_0_u; -+ -+typedef struct _ind_addr_a_1_t { -+ unsigned char ind_addr_a_1 : 8; -+ } ind_addr_a_1_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_addr_a_1_t f; -+} ind_addr_a_1_u; -+ -+typedef struct _ind_addr_a_2_t { -+ unsigned char ind_addr_a_2 : 8; -+ } ind_addr_a_2_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_addr_a_2_t f; -+} ind_addr_a_2_u; -+ -+typedef struct _ind_data_a_t { -+ unsigned char ind_data_a : 8; -+ } ind_data_a_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_data_a_t f; -+} ind_data_a_u; -+ -+typedef struct _reg_base_t { -+ unsigned char reg_base : 8; -+ } reg_base_t; -+ -+typedef union { -+ unsigned char val : 8; -+ reg_base_t f; -+} reg_base_u; -+ -+typedef struct _intf_cntl_t { -+ unsigned char ad_inc_a : 1; -+ unsigned char ring_buf_a : 1; -+ unsigned char rd_fetch_trigger_a : 1; -+ unsigned char rd_data_rdy_a : 1; -+ unsigned char ad_inc_b : 1; -+ unsigned char ring_buf_b : 1; -+ unsigned char rd_fetch_trigger_b : 1; -+ unsigned char rd_data_rdy_b : 1; -+ } intf_cntl_t; -+ -+typedef union { -+ unsigned char val : 8; -+ intf_cntl_t f; -+} intf_cntl_u; -+ -+typedef struct _status_t { -+ unsigned char wr_fifo_available_space : 2; -+ unsigned char fbuf_wr_pipe_emp : 1; -+ unsigned char soft_reset : 1; -+ unsigned char system_pwm_mode : 2; -+ unsigned char mem_access_dis : 1; -+ unsigned char en_pre_fetch : 1; -+ } status_t; -+ -+typedef union { -+ unsigned char val : 8; -+ status_t f; -+} status_u; -+ -+typedef struct _cpu_defaults_t { -+ unsigned char unpack_rd_data : 1; -+ unsigned char access_ind_addr_a : 1; -+ unsigned char access_ind_addr_b : 1; -+ unsigned char access_scratch_reg : 1; -+ unsigned char pack_wr_data : 1; -+ unsigned char transition_size : 1; -+ unsigned char en_read_buf_mode : 1; -+ unsigned char rd_fetch_scratch : 1; -+ } cpu_defaults_t; -+ -+typedef union { -+ unsigned char val : 8; -+ cpu_defaults_t f; -+} cpu_defaults_u; -+ -+typedef struct _ind_addr_b_0_t { -+ unsigned char ind_addr_b_0 : 8; -+ } ind_addr_b_0_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_addr_b_0_t f; -+} ind_addr_b_0_u; -+ -+typedef struct _ind_addr_b_1_t { -+ unsigned char ind_addr_b_1 : 8; -+ } ind_addr_b_1_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_addr_b_1_t f; -+} ind_addr_b_1_u; -+ -+typedef struct _ind_addr_b_2_t { -+ unsigned char ind_addr_b_2 : 8; -+ } ind_addr_b_2_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_addr_b_2_t f; -+} ind_addr_b_2_u; -+ -+typedef struct _ind_data_b_t { -+ unsigned char ind_data_b : 8; -+ } ind_data_b_t; -+ -+typedef union { -+ unsigned char val : 8; -+ ind_data_b_t f; -+} ind_data_b_u; -+ -+typedef struct _pm4_rptr_t { -+ unsigned char pm4_rptr : 8; -+ } pm4_rptr_t; -+ -+typedef union { -+ unsigned char val : 8; -+ pm4_rptr_t f; -+} pm4_rptr_u; -+ -+typedef struct _scratch_t { -+ unsigned char scratch : 8; -+ } scratch_t; -+ -+typedef union { -+ unsigned char val : 8; -+ scratch_t f; -+} scratch_u; -+ -+typedef struct _pm4_wrptr_0_t { -+ unsigned char pm4_wrptr_0 : 8; -+ } pm4_wrptr_0_t; -+ -+typedef union { -+ unsigned char val : 8; -+ pm4_wrptr_0_t f; -+} pm4_wrptr_0_u; -+ -+typedef struct _pm4_wrptr_1_t { -+ unsigned char pm4_wrptr_1 : 6; -+ unsigned char rd_fetch_pm4_rptr : 1; -+ unsigned char wrptr_atomic_update_w : 1; -+ } pm4_wrptr_1_t; -+ -+typedef union { -+ unsigned char val : 8; -+ pm4_wrptr_1_t f; -+} pm4_wrptr_1_u; -+ -+typedef struct _cp_rb_cntl_t { -+ unsigned long rb_bufsz : 6; -+ unsigned long : 2; -+ unsigned long rb_blksz : 6; -+ unsigned long : 2; -+ unsigned long buf_swap : 2; -+ unsigned long max_fetch : 2; -+ unsigned long : 7; -+ unsigned long rb_no_update : 1; -+ unsigned long : 3; -+ unsigned long rb_rptr_wr_ena : 1; -+ } cp_rb_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_rb_cntl_t f; -+} cp_rb_cntl_u; -+ -+typedef struct _cp_rb_base_t { -+ unsigned long : 2; -+ unsigned long rb_base : 22; -+ unsigned long : 8; -+ } cp_rb_base_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_rb_base_t f; -+} cp_rb_base_u; -+ -+typedef struct _cp_rb_rptr_addr_t { -+ unsigned long rb_rptr_swap : 2; -+ unsigned long rb_rptr_addr : 22; -+ unsigned long : 8; -+ } cp_rb_rptr_addr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_rb_rptr_addr_t f; -+} cp_rb_rptr_addr_u; -+ -+typedef struct _cp_rb_rptr_t { -+ unsigned long rb_rptr : 23; -+ unsigned long : 9; -+ } cp_rb_rptr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_rb_rptr_t f; -+} cp_rb_rptr_u; -+ -+typedef struct _cp_rb_rptr_wr_t { -+ unsigned long rb_rptr_wr : 23; -+ unsigned long : 9; -+ } cp_rb_rptr_wr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_rb_rptr_wr_t f; -+} cp_rb_rptr_wr_u; -+ -+typedef struct _cp_rb_wptr_t { -+ unsigned long rb_wptr : 23; -+ unsigned long : 9; -+ } cp_rb_wptr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_rb_wptr_t f; -+} cp_rb_wptr_u; -+ -+typedef struct _cp_ib_base_t { -+ unsigned long : 2; -+ unsigned long ib_base : 22; -+ unsigned long : 8; -+ } cp_ib_base_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_ib_base_t f; -+} cp_ib_base_u; -+ -+typedef struct _cp_ib_bufsz_t { -+ unsigned long ib_bufsz : 23; -+ unsigned long : 9; -+ } cp_ib_bufsz_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_ib_bufsz_t f; -+} cp_ib_bufsz_u; -+ -+typedef struct _cp_csq_cntl_t { -+ unsigned long csq_cnt_primary : 8; -+ unsigned long csq_cnt_indirect : 8; -+ unsigned long : 12; -+ unsigned long csq_mode : 4; -+ } cp_csq_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_csq_cntl_t f; -+} cp_csq_cntl_u; -+ -+typedef struct _cp_csq_aper_primary_t { -+ unsigned long cp_csq_aper_primary : 32; -+ } cp_csq_aper_primary_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_csq_aper_primary_t f; -+} cp_csq_aper_primary_u; -+ -+typedef struct _cp_csq_aper_indirect_t { -+ unsigned long cp_csq_aper_indirect : 32; -+ } cp_csq_aper_indirect_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_csq_aper_indirect_t f; -+} cp_csq_aper_indirect_u; -+ -+typedef struct _cp_me_cntl_t { -+ unsigned long me_stat : 16; -+ unsigned long me_statmux : 5; -+ unsigned long : 8; -+ unsigned long me_busy : 1; -+ unsigned long me_mode : 1; -+ unsigned long me_step : 1; -+ } cp_me_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_me_cntl_t f; -+} cp_me_cntl_u; -+ -+typedef struct _cp_me_ram_addr_t { -+ unsigned long me_ram_addr : 8; -+ unsigned long : 24; -+ } cp_me_ram_addr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_me_ram_addr_t f; -+} cp_me_ram_addr_u; -+ -+typedef struct _cp_me_ram_raddr_t { -+ unsigned long me_ram_raddr : 8; -+ unsigned long : 24; -+ } cp_me_ram_raddr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_me_ram_raddr_t f; -+} cp_me_ram_raddr_u; -+ -+typedef struct _cp_me_ram_datah_t { -+ unsigned long me_ram_datah : 6; -+ unsigned long : 26; -+ } cp_me_ram_datah_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_me_ram_datah_t f; -+} cp_me_ram_datah_u; -+ -+typedef struct _cp_me_ram_datal_t { -+ unsigned long me_ram_datal : 32; -+ } cp_me_ram_datal_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_me_ram_datal_t f; -+} cp_me_ram_datal_u; -+ -+typedef struct _cp_debug_t { -+ unsigned long cp_debug : 32; -+ } cp_debug_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_debug_t f; -+} cp_debug_u; -+ -+typedef struct _scratch_reg0_t { -+ unsigned long scratch_reg0 : 32; -+ } scratch_reg0_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_reg0_t f; -+} scratch_reg0_u; -+ -+typedef struct _scratch_reg1_t { -+ unsigned long scratch_reg1 : 32; -+ } scratch_reg1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_reg1_t f; -+} scratch_reg1_u; -+ -+typedef struct _scratch_reg2_t { -+ unsigned long scratch_reg2 : 32; -+ } scratch_reg2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_reg2_t f; -+} scratch_reg2_u; -+ -+typedef struct _scratch_reg3_t { -+ unsigned long scratch_reg3 : 32; -+ } scratch_reg3_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_reg3_t f; -+} scratch_reg3_u; -+ -+typedef struct _scratch_reg4_t { -+ unsigned long scratch_reg4 : 32; -+ } scratch_reg4_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_reg4_t f; -+} scratch_reg4_u; -+ -+typedef struct _scratch_reg5_t { -+ unsigned long scratch_reg5 : 32; -+ } scratch_reg5_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_reg5_t f; -+} scratch_reg5_u; -+ -+typedef struct _scratch_umsk_t { -+ unsigned long scratch_umsk : 6; -+ unsigned long : 10; -+ unsigned long scratch_swap : 2; -+ unsigned long : 14; -+ } scratch_umsk_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_umsk_t f; -+} scratch_umsk_u; -+ -+typedef struct _scratch_addr_t { -+ unsigned long : 5; -+ unsigned long scratch_addr : 27; -+ } scratch_addr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ scratch_addr_t f; -+} scratch_addr_u; -+ -+typedef struct _cp_csq_addr_t { -+ unsigned long : 2; -+ unsigned long csq_addr : 8; -+ unsigned long : 22; -+ } cp_csq_addr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_csq_addr_t f; -+} cp_csq_addr_u; -+ -+typedef struct _cp_csq_data_t { -+ unsigned long csq_data : 32; -+ } cp_csq_data_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_csq_data_t f; -+} cp_csq_data_u; -+ -+typedef struct _cp_csq_stat_t { -+ unsigned long csq_rptr_primary : 8; -+ unsigned long csq_wptr_primary : 8; -+ unsigned long csq_rptr_indirect : 8; -+ unsigned long csq_wptr_indirect : 8; -+ } cp_csq_stat_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_csq_stat_t f; -+} cp_csq_stat_u; -+ -+typedef struct _cp_stat_t { -+ unsigned long mru_busy : 1; -+ unsigned long mwu_busy : 1; -+ unsigned long rsiu_busy : 1; -+ unsigned long rciu_busy : 1; -+ unsigned long : 5; -+ unsigned long csf_primary_busy : 1; -+ unsigned long csf_indirect_busy : 1; -+ unsigned long csq_primary_busy : 1; -+ unsigned long csq_indirect_busy : 1; -+ unsigned long csi_busy : 1; -+ unsigned long : 14; -+ unsigned long guidma_busy : 1; -+ unsigned long viddma_busy : 1; -+ unsigned long cmdstrm_busy : 1; -+ unsigned long cp_busy : 1; -+ } cp_stat_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cp_stat_t f; -+} cp_stat_u; -+ -+typedef struct _gen_int_cntl_t { -+ unsigned long crtc_vblank_mask : 1; -+ unsigned long crtc_vline_mask : 1; -+ unsigned long crtc_hwint1_mask : 1; -+ unsigned long crtc_hwint2_mask : 1; -+ unsigned long : 15; -+ unsigned long gui_idle_mask : 1; -+ unsigned long : 8; -+ unsigned long pm4_idle_int_mask : 1; -+ unsigned long dvi_i2c_int_mask : 1; -+ unsigned long : 2; -+ } gen_int_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gen_int_cntl_t f; -+} gen_int_cntl_u; -+ -+typedef struct _gen_int_status_rd_t { -+ unsigned long crtc_vblank_stat : 1; -+ unsigned long crtc_vline_stat : 1; -+ unsigned long crtc_hwint1_stat : 1; -+ unsigned long crtc_hwint2_stat : 1; -+ unsigned long : 15; -+ unsigned long gui_idle_stat : 1; -+ unsigned long : 8; -+ unsigned long pm4_idle_int_stat : 1; -+ unsigned long dvi_i2c_int_stat : 1; -+ unsigned long : 2; -+ } gen_int_status_rd_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gen_int_status_rd_t f; -+} gen_int_status_rd_u; -+ -+typedef struct _gen_int_status_wr_t { -+ unsigned long crtc_vblank_stat_ak : 1; -+ unsigned long crtc_vline_stat_ak : 1; -+ unsigned long crtc_hwint1_stat_ak : 1; -+ unsigned long crtc_hwint2_stat_ak : 1; -+ unsigned long : 15; -+ unsigned long gui_idle_stat_ak : 1; -+ unsigned long : 8; -+ unsigned long pm4_idle_int_ak : 1; -+ unsigned long dvi_i2c_int_ak : 1; -+ unsigned long : 2; -+ } gen_int_status_wr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gen_int_status_wr_t f; -+} gen_int_status_wr_u; -+ -+typedef struct _lcd_format_t { -+ unsigned long lcd_type : 4; -+ unsigned long color_to_mono : 1; -+ unsigned long data_inv : 1; -+ unsigned long stn_fm : 2; -+ unsigned long tft_fm : 2; -+ unsigned long scan_lr_en : 1; -+ unsigned long scan_ud_en : 1; -+ unsigned long pol_inv : 1; -+ unsigned long rst_fm : 1; -+ unsigned long yuv_to_rgb : 1; -+ unsigned long hr_tft : 1; -+ unsigned long ulc_panel : 1; -+ unsigned long : 15; -+ } lcd_format_t; -+ -+typedef union { -+ unsigned long val : 32; -+ lcd_format_t f; -+} lcd_format_u; -+ -+typedef struct _graphic_ctrl_t { -+ unsigned long color_depth : 3; -+ unsigned long portrait_mode : 2; -+ unsigned long low_power_on : 1; -+ unsigned long req_freq : 4; -+ unsigned long en_crtc : 1; -+ unsigned long en_graphic_req : 1; -+ unsigned long en_graphic_crtc : 1; -+ unsigned long total_req_graphic : 9; -+ unsigned long lcd_pclk_on : 1; -+ unsigned long lcd_sclk_on : 1; -+ unsigned long pclk_running : 1; -+ unsigned long sclk_running : 1; -+ unsigned long : 6; -+ } graphic_ctrl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ graphic_ctrl_t f; -+} graphic_ctrl_u; -+ -+typedef struct _graphic_offset_t { -+ unsigned long graphic_offset : 24; -+ unsigned long : 8; -+ } graphic_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ graphic_offset_t f; -+} graphic_offset_u; -+ -+typedef struct _graphic_pitch_t { -+ unsigned long graphic_pitch : 11; -+ unsigned long : 21; -+ } graphic_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ graphic_pitch_t f; -+} graphic_pitch_u; -+ -+typedef struct _crtc_total_t { -+ unsigned long crtc_h_total : 10; -+ unsigned long : 6; -+ unsigned long crtc_v_total : 10; -+ unsigned long : 6; -+ } crtc_total_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_total_t f; -+} crtc_total_u; -+ -+typedef struct _active_h_disp_t { -+ unsigned long active_h_start : 10; -+ unsigned long : 6; -+ unsigned long active_h_end : 10; -+ unsigned long : 6; -+ } active_h_disp_t; -+ -+typedef union { -+ unsigned long val : 32; -+ active_h_disp_t f; -+} active_h_disp_u; -+ -+typedef struct _active_v_disp_t { -+ unsigned long active_v_start : 10; -+ unsigned long : 6; -+ unsigned long active_v_end : 10; -+ unsigned long : 6; -+ } active_v_disp_t; -+ -+typedef union { -+ unsigned long val : 32; -+ active_v_disp_t f; -+} active_v_disp_u; -+ -+typedef struct _graphic_h_disp_t { -+ unsigned long graphic_h_start : 10; -+ unsigned long : 6; -+ unsigned long graphic_h_end : 10; -+ unsigned long : 6; -+ } graphic_h_disp_t; -+ -+typedef union { -+ unsigned long val : 32; -+ graphic_h_disp_t f; -+} graphic_h_disp_u; -+ -+typedef struct _graphic_v_disp_t { -+ unsigned long graphic_v_start : 10; -+ unsigned long : 6; -+ unsigned long graphic_v_end : 10; -+ unsigned long : 6; -+ } graphic_v_disp_t; -+ -+typedef union { -+ unsigned long val : 32; -+ graphic_v_disp_t f; -+} graphic_v_disp_u; -+ -+typedef struct _video_ctrl_t { -+ unsigned long video_mode : 1; -+ unsigned long keyer_en : 1; -+ unsigned long en_video_req : 1; -+ unsigned long en_graphic_req_video : 1; -+ unsigned long en_video_crtc : 1; -+ unsigned long video_hor_exp : 2; -+ unsigned long video_ver_exp : 2; -+ unsigned long uv_combine : 1; -+ unsigned long total_req_video : 9; -+ unsigned long video_ch_sel : 1; -+ unsigned long video_portrait : 2; -+ unsigned long yuv2rgb_en : 1; -+ unsigned long yuv2rgb_option : 1; -+ unsigned long video_inv_hor : 1; -+ unsigned long video_inv_ver : 1; -+ unsigned long gamma_sel : 2; -+ unsigned long dis_limit : 1; -+ unsigned long en_uv_hblend : 1; -+ unsigned long rgb_gamma_sel : 2; -+ } video_ctrl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_ctrl_t f; -+} video_ctrl_u; -+ -+typedef struct _graphic_key_t { -+ unsigned long keyer_color : 16; -+ unsigned long keyer_mask : 16; -+ } graphic_key_t; -+ -+typedef union { -+ unsigned long val : 32; -+ graphic_key_t f; -+} graphic_key_u; -+ -+typedef struct _video_y_offset_t { -+ unsigned long y_offset : 24; -+ unsigned long : 8; -+ } video_y_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_y_offset_t f; -+} video_y_offset_u; -+ -+typedef struct _video_y_pitch_t { -+ unsigned long y_pitch : 11; -+ unsigned long : 21; -+ } video_y_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_y_pitch_t f; -+} video_y_pitch_u; -+ -+typedef struct _video_u_offset_t { -+ unsigned long u_offset : 24; -+ unsigned long : 8; -+ } video_u_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_u_offset_t f; -+} video_u_offset_u; -+ -+typedef struct _video_u_pitch_t { -+ unsigned long u_pitch : 11; -+ unsigned long : 21; -+ } video_u_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_u_pitch_t f; -+} video_u_pitch_u; -+ -+typedef struct _video_v_offset_t { -+ unsigned long v_offset : 24; -+ unsigned long : 8; -+ } video_v_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_v_offset_t f; -+} video_v_offset_u; -+ -+typedef struct _video_v_pitch_t { -+ unsigned long v_pitch : 11; -+ unsigned long : 21; -+ } video_v_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_v_pitch_t f; -+} video_v_pitch_u; -+ -+typedef struct _video_h_pos_t { -+ unsigned long video_h_start : 10; -+ unsigned long : 6; -+ unsigned long video_h_end : 10; -+ unsigned long : 6; -+ } video_h_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_h_pos_t f; -+} video_h_pos_u; -+ -+typedef struct _video_v_pos_t { -+ unsigned long video_v_start : 10; -+ unsigned long : 6; -+ unsigned long video_v_end : 10; -+ unsigned long : 6; -+ } video_v_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ video_v_pos_t f; -+} video_v_pos_u; -+ -+typedef struct _brightness_cntl_t { -+ unsigned long brightness : 7; -+ unsigned long : 25; -+ } brightness_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ brightness_cntl_t f; -+} brightness_cntl_u; -+ -+typedef struct _cursor1_offset_t { -+ unsigned long cur1_offset : 24; -+ unsigned long cur1_x_offset : 4; -+ unsigned long cur1_y_offset : 4; -+ } cursor1_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor1_offset_t f; -+} cursor1_offset_u; -+ -+typedef struct _cursor1_h_pos_t { -+ unsigned long cur1_h_start : 10; -+ unsigned long : 6; -+ unsigned long cur1_h_end : 10; -+ unsigned long : 5; -+ unsigned long cur1_en : 1; -+ } cursor1_h_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor1_h_pos_t f; -+} cursor1_h_pos_u; -+ -+typedef struct _cursor1_v_pos_t { -+ unsigned long cur1_v_start : 10; -+ unsigned long : 6; -+ unsigned long cur1_v_end : 10; -+ unsigned long : 6; -+ } cursor1_v_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor1_v_pos_t f; -+} cursor1_v_pos_u; -+ -+typedef struct _cursor1_color0_t { -+ unsigned long cur1_color0_r : 8; -+ unsigned long cur1_color0_g : 8; -+ unsigned long cur1_color0_b : 8; -+ unsigned long : 8; -+ } cursor1_color0_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor1_color0_t f; -+} cursor1_color0_u; -+ -+typedef struct _cursor1_color1_t { -+ unsigned long cur1_color1_r : 8; -+ unsigned long cur1_color1_g : 8; -+ unsigned long cur1_color1_b : 8; -+ unsigned long : 8; -+ } cursor1_color1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor1_color1_t f; -+} cursor1_color1_u; -+ -+typedef struct _cursor2_offset_t { -+ unsigned long cur2_offset : 24; -+ unsigned long cur2_x_offset : 4; -+ unsigned long cur2_y_offset : 4; -+ } cursor2_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor2_offset_t f; -+} cursor2_offset_u; -+ -+typedef struct _cursor2_h_pos_t { -+ unsigned long cur2_h_start : 10; -+ unsigned long : 6; -+ unsigned long cur2_h_end : 10; -+ unsigned long : 5; -+ unsigned long cur2_en : 1; -+ } cursor2_h_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor2_h_pos_t f; -+} cursor2_h_pos_u; -+ -+typedef struct _cursor2_v_pos_t { -+ unsigned long cur2_v_start : 10; -+ unsigned long : 6; -+ unsigned long cur2_v_end : 10; -+ unsigned long : 6; -+ } cursor2_v_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor2_v_pos_t f; -+} cursor2_v_pos_u; -+ -+typedef struct _cursor2_color0_t { -+ unsigned long cur2_color0_r : 8; -+ unsigned long cur2_color0_g : 8; -+ unsigned long cur2_color0_b : 8; -+ unsigned long : 8; -+ } cursor2_color0_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor2_color0_t f; -+} cursor2_color0_u; -+ -+typedef struct _cursor2_color1_t { -+ unsigned long cur2_color1_r : 8; -+ unsigned long cur2_color1_g : 8; -+ unsigned long cur2_color1_b : 8; -+ unsigned long : 8; -+ } cursor2_color1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor2_color1_t f; -+} cursor2_color1_u; -+ -+typedef struct _disp_int_cntl_t { -+ unsigned long vline_int_pos : 10; -+ unsigned long : 6; -+ unsigned long hpos_int_pos : 10; -+ unsigned long : 4; -+ unsigned long vblank_int_pol : 1; -+ unsigned long frame_int_pol : 1; -+ } disp_int_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ disp_int_cntl_t f; -+} disp_int_cntl_u; -+ -+typedef struct _crtc_ss_t { -+ unsigned long ss_start : 10; -+ unsigned long : 6; -+ unsigned long ss_end : 10; -+ unsigned long : 2; -+ unsigned long ss_align : 1; -+ unsigned long ss_pol : 1; -+ unsigned long ss_run_mode : 1; -+ unsigned long ss_en : 1; -+ } crtc_ss_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_ss_t f; -+} crtc_ss_u; -+ -+typedef struct _crtc_ls_t { -+ unsigned long ls_start : 10; -+ unsigned long : 6; -+ unsigned long ls_end : 10; -+ unsigned long : 2; -+ unsigned long ls_align : 1; -+ unsigned long ls_pol : 1; -+ unsigned long ls_run_mode : 1; -+ unsigned long ls_en : 1; -+ } crtc_ls_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_ls_t f; -+} crtc_ls_u; -+ -+typedef struct _crtc_rev_t { -+ unsigned long rev_pos : 10; -+ unsigned long : 6; -+ unsigned long rev_align : 1; -+ unsigned long rev_freq_nref : 5; -+ unsigned long rev_en : 1; -+ unsigned long : 9; -+ } crtc_rev_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_rev_t f; -+} crtc_rev_u; -+ -+typedef struct _crtc_dclk_t { -+ unsigned long dclk_start : 10; -+ unsigned long : 6; -+ unsigned long dclk_end : 10; -+ unsigned long : 1; -+ unsigned long dclk_run_mode : 2; -+ unsigned long dclk_pol : 1; -+ unsigned long dclk_align : 1; -+ unsigned long dclk_en : 1; -+ } crtc_dclk_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_dclk_t f; -+} crtc_dclk_u; -+ -+typedef struct _crtc_gs_t { -+ unsigned long gs_start : 10; -+ unsigned long : 6; -+ unsigned long gs_end : 10; -+ unsigned long : 3; -+ unsigned long gs_align : 1; -+ unsigned long gs_pol : 1; -+ unsigned long gs_en : 1; -+ } crtc_gs_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_gs_t f; -+} crtc_gs_u; -+ -+typedef struct _crtc_vpos_gs_t { -+ unsigned long gs_vpos_start : 10; -+ unsigned long : 6; -+ unsigned long gs_vpos_end : 10; -+ unsigned long : 6; -+ } crtc_vpos_gs_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_vpos_gs_t f; -+} crtc_vpos_gs_u; -+ -+typedef struct _crtc_gclk_t { -+ unsigned long gclk_start : 10; -+ unsigned long : 6; -+ unsigned long gclk_end : 10; -+ unsigned long : 3; -+ unsigned long gclk_align : 1; -+ unsigned long gclk_pol : 1; -+ unsigned long gclk_en : 1; -+ } crtc_gclk_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_gclk_t f; -+} crtc_gclk_u; -+ -+typedef struct _crtc_goe_t { -+ unsigned long goe_start : 10; -+ unsigned long : 6; -+ unsigned long goe_end : 10; -+ unsigned long : 3; -+ unsigned long goe_align : 1; -+ unsigned long goe_pol : 1; -+ unsigned long goe_en : 1; -+ } crtc_goe_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_goe_t f; -+} crtc_goe_u; -+ -+typedef struct _crtc_frame_t { -+ unsigned long crtc_fr_start : 10; -+ unsigned long : 6; -+ unsigned long crtc_fr_end : 10; -+ unsigned long : 4; -+ unsigned long crtc_frame_en : 1; -+ unsigned long crtc_frame_align : 1; -+ } crtc_frame_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_frame_t f; -+} crtc_frame_u; -+ -+typedef struct _crtc_frame_vpos_t { -+ unsigned long crtc_fr_vpos : 10; -+ unsigned long : 22; -+ } crtc_frame_vpos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_frame_vpos_t f; -+} crtc_frame_vpos_u; -+ -+typedef struct _gpio_data_t { -+ unsigned long gio_out : 16; -+ unsigned long gio_in : 16; -+ } gpio_data_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gpio_data_t f; -+} gpio_data_u; -+ -+typedef struct _gpio_cntl1_t { -+ unsigned long gio_pd : 16; -+ unsigned long gio_schmen : 16; -+ } gpio_cntl1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gpio_cntl1_t f; -+} gpio_cntl1_u; -+ -+typedef struct _gpio_cntl2_t { -+ unsigned long gio_oe : 16; -+ unsigned long gio_srp : 1; -+ unsigned long gio_srn : 1; -+ unsigned long gio_sp : 4; -+ unsigned long gio_sn : 4; -+ unsigned long : 6; -+ } gpio_cntl2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gpio_cntl2_t f; -+} gpio_cntl2_u; -+ -+typedef struct _lcdd_cntl1_t { -+ unsigned long lcdd_pd : 18; -+ unsigned long lcdd_srp : 1; -+ unsigned long lcdd_srn : 1; -+ unsigned long lcdd_sp : 4; -+ unsigned long lcdd_sn : 4; -+ unsigned long lcdd_align : 1; -+ unsigned long : 3; -+ } lcdd_cntl1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ lcdd_cntl1_t f; -+} lcdd_cntl1_u; -+ -+typedef struct _lcdd_cntl2_t { -+ unsigned long lcdd_oe : 18; -+ unsigned long : 14; -+ } lcdd_cntl2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ lcdd_cntl2_t f; -+} lcdd_cntl2_u; -+ -+typedef struct _genlcd_cntl1_t { -+ unsigned long dclk_oe : 1; -+ unsigned long dclk_pd : 1; -+ unsigned long dclk_srp : 1; -+ unsigned long dclk_srn : 1; -+ unsigned long dclk_sp : 4; -+ unsigned long dclk_sn : 4; -+ unsigned long ss_oe : 1; -+ unsigned long ss_pd : 1; -+ unsigned long ls_oe : 1; -+ unsigned long ls_pd : 1; -+ unsigned long gs_oe : 1; -+ unsigned long gs_pd : 1; -+ unsigned long goe_oe : 1; -+ unsigned long goe_pd : 1; -+ unsigned long rev_oe : 1; -+ unsigned long rev_pd : 1; -+ unsigned long frame_oe : 1; -+ unsigned long frame_pd : 1; -+ unsigned long : 8; -+ } genlcd_cntl1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ genlcd_cntl1_t f; -+} genlcd_cntl1_u; -+ -+typedef struct _genlcd_cntl2_t { -+ unsigned long gclk_oe : 1; -+ unsigned long gclk_pd : 1; -+ unsigned long gclk_srp : 1; -+ unsigned long gclk_srn : 1; -+ unsigned long gclk_sp : 4; -+ unsigned long gclk_sn : 4; -+ unsigned long genlcd_srp : 1; -+ unsigned long genlcd_srn : 1; -+ unsigned long genlcd_sp : 4; -+ unsigned long genlcd_sn : 4; -+ unsigned long : 10; -+ } genlcd_cntl2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ genlcd_cntl2_t f; -+} genlcd_cntl2_u; -+ -+typedef struct _disp_debug_t { -+ unsigned long disp_debug : 32; -+ } disp_debug_t; -+ -+typedef union { -+ unsigned long val : 32; -+ disp_debug_t f; -+} disp_debug_u; -+ -+typedef struct _disp_db_buf_cntl_rd_t { -+ unsigned long en_db_buf : 1; -+ unsigned long update_db_buf_done : 1; -+ unsigned long db_buf_cntl : 6; -+ unsigned long : 24; -+ } disp_db_buf_cntl_rd_t; -+ -+typedef union { -+ unsigned long val : 32; -+ disp_db_buf_cntl_rd_t f; -+} disp_db_buf_cntl_rd_u; -+ -+typedef struct _disp_db_buf_cntl_wr_t { -+ unsigned long en_db_buf : 1; -+ unsigned long update_db_buf : 1; -+ unsigned long db_buf_cntl : 6; -+ unsigned long : 24; -+ } disp_db_buf_cntl_wr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ disp_db_buf_cntl_wr_t f; -+} disp_db_buf_cntl_wr_u; -+ -+typedef struct _disp_crc_sig_t { -+ unsigned long crc_sig_r : 6; -+ unsigned long crc_sig_g : 6; -+ unsigned long crc_sig_b : 6; -+ unsigned long crc_cont_en : 1; -+ unsigned long crc_en : 1; -+ unsigned long crc_mask_en : 1; -+ unsigned long crc_sig_cntl : 6; -+ unsigned long : 5; -+ } disp_crc_sig_t; -+ -+typedef union { -+ unsigned long val : 32; -+ disp_crc_sig_t f; -+} disp_crc_sig_u; -+ -+typedef struct _crtc_default_count_t { -+ unsigned long crtc_hcount_def : 10; -+ unsigned long : 6; -+ unsigned long crtc_vcount_def : 10; -+ unsigned long : 6; -+ } crtc_default_count_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_default_count_t f; -+} crtc_default_count_u; -+ -+typedef struct _lcd_background_color_t { -+ unsigned long lcd_bg_red : 8; -+ unsigned long lcd_bg_green : 8; -+ unsigned long lcd_bg_blue : 8; -+ unsigned long : 8; -+ } lcd_background_color_t; -+ -+typedef union { -+ unsigned long val : 32; -+ lcd_background_color_t f; -+} lcd_background_color_u; -+ -+typedef struct _crtc_ps2_t { -+ unsigned long ps2_start : 10; -+ unsigned long : 6; -+ unsigned long ps2_end : 10; -+ unsigned long : 4; -+ unsigned long ps2_pol : 1; -+ unsigned long ps2_en : 1; -+ } crtc_ps2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_ps2_t f; -+} crtc_ps2_u; -+ -+typedef struct _crtc_ps2_vpos_t { -+ unsigned long ps2_vpos_start : 10; -+ unsigned long : 6; -+ unsigned long ps2_vpos_end : 10; -+ unsigned long : 6; -+ } crtc_ps2_vpos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_ps2_vpos_t f; -+} crtc_ps2_vpos_u; -+ -+typedef struct _crtc_ps1_active_t { -+ unsigned long ps1_h_start : 10; -+ unsigned long : 6; -+ unsigned long ps1_h_end : 10; -+ unsigned long : 3; -+ unsigned long ps1_pol : 1; -+ unsigned long ps1_en : 1; -+ unsigned long ps1_use_nactive : 1; -+ } crtc_ps1_active_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_ps1_active_t f; -+} crtc_ps1_active_u; -+ -+typedef struct _crtc_ps1_nactive_t { -+ unsigned long ps1_h_start_na : 10; -+ unsigned long : 6; -+ unsigned long ps1_h_end_na : 10; -+ unsigned long : 5; -+ unsigned long ps1_en_na : 1; -+ } crtc_ps1_nactive_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_ps1_nactive_t f; -+} crtc_ps1_nactive_u; -+ -+typedef struct _crtc_gclk_ext_t { -+ unsigned long gclk_alter_start : 10; -+ unsigned long : 6; -+ unsigned long gclk_alter_width : 2; -+ unsigned long gclk_en_alter : 1; -+ unsigned long gclk_db_width : 2; -+ unsigned long : 11; -+ } crtc_gclk_ext_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_gclk_ext_t f; -+} crtc_gclk_ext_u; -+ -+typedef struct _crtc_alw_t { -+ unsigned long alw_hstart : 10; -+ unsigned long : 6; -+ unsigned long alw_hend : 10; -+ unsigned long : 4; -+ unsigned long alw_delay : 1; -+ unsigned long alw_en : 1; -+ } crtc_alw_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_alw_t f; -+} crtc_alw_u; -+ -+typedef struct _crtc_alw_vpos_t { -+ unsigned long alw_vstart : 10; -+ unsigned long : 6; -+ unsigned long alw_vend : 10; -+ unsigned long : 6; -+ } crtc_alw_vpos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_alw_vpos_t f; -+} crtc_alw_vpos_u; -+ -+typedef struct _crtc_psk_t { -+ unsigned long psk_vstart : 10; -+ unsigned long : 6; -+ unsigned long psk_vend : 10; -+ unsigned long : 4; -+ unsigned long psk_pol : 1; -+ unsigned long psk_en : 1; -+ } crtc_psk_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_psk_t f; -+} crtc_psk_u; -+ -+typedef struct _crtc_psk_hpos_t { -+ unsigned long psk_hstart : 10; -+ unsigned long : 6; -+ unsigned long psk_hend : 10; -+ unsigned long : 6; -+ } crtc_psk_hpos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_psk_hpos_t f; -+} crtc_psk_hpos_u; -+ -+typedef struct _crtc_cv4_start_t { -+ unsigned long cv4_vstart : 10; -+ unsigned long : 20; -+ unsigned long cv4_pol : 1; -+ unsigned long cv4_en : 1; -+ } crtc_cv4_start_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_cv4_start_t f; -+} crtc_cv4_start_u; -+ -+typedef struct _crtc_cv4_end_t { -+ unsigned long cv4_vend1 : 10; -+ unsigned long : 6; -+ unsigned long cv4_vend2 : 10; -+ unsigned long : 6; -+ } crtc_cv4_end_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_cv4_end_t f; -+} crtc_cv4_end_u; -+ -+typedef struct _crtc_cv4_hpos_t { -+ unsigned long cv4_hstart : 10; -+ unsigned long : 6; -+ unsigned long cv4_hend : 10; -+ unsigned long : 6; -+ } crtc_cv4_hpos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_cv4_hpos_t f; -+} crtc_cv4_hpos_u; -+ -+typedef struct _crtc_eck_t { -+ unsigned long eck_freq1 : 3; -+ unsigned long eck_en : 1; -+ unsigned long : 28; -+ } crtc_eck_t; -+ -+typedef union { -+ unsigned long val : 32; -+ crtc_eck_t f; -+} crtc_eck_u; -+ -+typedef struct _refresh_cntl_t { -+ unsigned long ref_frame : 3; -+ unsigned long nref_frame : 5; -+ unsigned long ref_cntl : 1; -+ unsigned long stop_sm_nref : 1; -+ unsigned long stop_req_nref : 1; -+ unsigned long : 21; -+ } refresh_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ refresh_cntl_t f; -+} refresh_cntl_u; -+ -+typedef struct _genlcd_cntl3_t { -+ unsigned long ps1_oe : 1; -+ unsigned long ps1_pd : 1; -+ unsigned long ps2_oe : 1; -+ unsigned long ps2_pd : 1; -+ unsigned long rev2_oe : 1; -+ unsigned long rev2_pd : 1; -+ unsigned long awl_oe : 1; -+ unsigned long awl_pd : 1; -+ unsigned long dinv_oe : 1; -+ unsigned long dinv_pd : 1; -+ unsigned long psk_out : 1; -+ unsigned long psd_out : 1; -+ unsigned long eck_out : 1; -+ unsigned long cv4_out : 1; -+ unsigned long ps1_out : 1; -+ unsigned long ps2_out : 1; -+ unsigned long rev_out : 1; -+ unsigned long rev2_out : 1; -+ unsigned long : 14; -+ } genlcd_cntl3_t; -+ -+typedef union { -+ unsigned long val : 32; -+ genlcd_cntl3_t f; -+} genlcd_cntl3_u; -+ -+typedef struct _gpio_data2_t { -+ unsigned long gio2_out : 16; -+ unsigned long gio2_in : 16; -+ } gpio_data2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gpio_data2_t f; -+} gpio_data2_u; -+ -+typedef struct _gpio_cntl3_t { -+ unsigned long gio2_pd : 16; -+ unsigned long gio2_schmen : 16; -+ } gpio_cntl3_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gpio_cntl3_t f; -+} gpio_cntl3_u; -+ -+typedef struct _gpio_cntl4_t { -+ unsigned long gio2_oe : 16; -+ unsigned long : 16; -+ } gpio_cntl4_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gpio_cntl4_t f; -+} gpio_cntl4_u; -+ -+typedef struct _chip_strap_t { -+ unsigned long config_strap : 8; -+ unsigned long pkg_strap : 1; -+ unsigned long : 23; -+ } chip_strap_t; -+ -+typedef union { -+ unsigned long val : 32; -+ chip_strap_t f; -+} chip_strap_u; -+ -+typedef struct _disp_debug2_t { -+ unsigned long disp_debug2 : 32; -+ } disp_debug2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ disp_debug2_t f; -+} disp_debug2_u; -+ -+typedef struct _debug_bus_cntl_t { -+ unsigned long debug_testmux : 4; -+ unsigned long debug_testsel : 4; -+ unsigned long debug_gioa_sel : 2; -+ unsigned long debug_giob_sel : 2; -+ unsigned long debug_clk_sel : 1; -+ unsigned long debug_clk_inv : 1; -+ unsigned long : 2; -+ unsigned long debug_bus : 16; -+ } debug_bus_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug_bus_cntl_t f; -+} debug_bus_cntl_u; -+ -+typedef struct _gamma_value1_t { -+ unsigned long gamma1 : 8; -+ unsigned long gamma2 : 8; -+ unsigned long gamma3 : 8; -+ unsigned long gamma4 : 8; -+ } gamma_value1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gamma_value1_t f; -+} gamma_value1_u; -+ -+typedef struct _gamma_value2_t { -+ unsigned long gamma5 : 8; -+ unsigned long gamma6 : 8; -+ unsigned long gamma7 : 8; -+ unsigned long gamma8 : 8; -+ } gamma_value2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gamma_value2_t f; -+} gamma_value2_u; -+ -+typedef struct _gamma_slope_t { -+ unsigned long slope1 : 3; -+ unsigned long slope2 : 3; -+ unsigned long slope3 : 3; -+ unsigned long slope4 : 3; -+ unsigned long slope5 : 3; -+ unsigned long slope6 : 3; -+ unsigned long slope7 : 3; -+ unsigned long slope8 : 3; -+ unsigned long : 8; -+ } gamma_slope_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gamma_slope_t f; -+} gamma_slope_u; -+ -+typedef struct _gen_status_t { -+ unsigned long status : 16; -+ unsigned long : 16; -+ } gen_status_t; -+ -+typedef union { -+ unsigned long val : 32; -+ gen_status_t f; -+} gen_status_u; -+ -+typedef struct _hw_int_t { -+ unsigned long hwint1_pos : 5; -+ unsigned long hwint2_pos : 5; -+ unsigned long hwint1_pol : 1; -+ unsigned long hwint2_pol : 1; -+ unsigned long hwint1_en_db : 1; -+ unsigned long hwint2_en_db : 1; -+ unsigned long : 18; -+ } hw_int_t; -+ -+typedef union { -+ unsigned long val : 32; -+ hw_int_t f; -+} hw_int_u; -+ -+typedef struct _dst_offset_t { -+ unsigned long dst_offset : 24; -+ unsigned long : 8; -+ } dst_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_offset_t f; -+} dst_offset_u; -+ -+typedef struct _dst_pitch_t { -+ unsigned long dst_pitch : 14; -+ unsigned long mc_dst_pitch_mul : 2; -+ unsigned long : 16; -+ } dst_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_pitch_t f; -+} dst_pitch_u; -+ -+typedef struct _dst_pitch_offset_t { -+ unsigned long dst_offset : 20; -+ unsigned long dst_pitch : 10; -+ unsigned long mc_dst_pitch_mul : 2; -+ } dst_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_pitch_offset_t f; -+} dst_pitch_offset_u; -+ -+typedef struct _dst_x_t { -+ unsigned long dst_x : 14; -+ unsigned long : 18; -+ } dst_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_x_t f; -+} dst_x_u; -+ -+typedef struct _dst_y_t { -+ unsigned long dst_y : 14; -+ unsigned long : 18; -+ } dst_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_y_t f; -+} dst_y_u; -+ -+typedef struct _dst_x_y_t { -+ unsigned long dst_y : 14; -+ unsigned long : 2; -+ unsigned long dst_x : 14; -+ unsigned long : 2; -+ } dst_x_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_x_y_t f; -+} dst_x_y_u; -+ -+typedef struct _dst_y_x_t { -+ unsigned long dst_x : 14; -+ unsigned long : 2; -+ unsigned long dst_y : 14; -+ unsigned long : 2; -+ } dst_y_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_y_x_t f; -+} dst_y_x_u; -+ -+typedef struct _dst_width_t { -+ unsigned long dst_width_b0 : 8; -+ unsigned long dst_width_b1 : 6; -+ unsigned long : 18; -+ } dst_width_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_width_t f; -+} dst_width_u; -+ -+typedef struct _dst_height_t { -+ unsigned long dst_height : 14; -+ unsigned long : 18; -+ } dst_height_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_height_t f; -+} dst_height_u; -+ -+typedef struct _dst_width_height_t { -+ unsigned long dst_height : 14; -+ unsigned long : 2; -+ unsigned long dst_width_b0 : 8; -+ unsigned long dst_width_b1 : 6; -+ unsigned long : 2; -+ } dst_width_height_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_width_height_t f; -+} dst_width_height_u; -+ -+typedef struct _dst_height_width_t { -+ unsigned long dst_width_b0 : 8; -+ unsigned long dst_width_b1 : 6; -+ unsigned long : 2; -+ unsigned long dst_height : 14; -+ unsigned long : 2; -+ } dst_height_width_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_height_width_t f; -+} dst_height_width_u; -+ -+typedef struct _dst_height_width_8_t { -+ unsigned long : 16; -+ unsigned long dst_width_b0 : 8; -+ unsigned long dst_height : 8; -+ } dst_height_width_8_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_height_width_8_t f; -+} dst_height_width_8_u; -+ -+typedef struct _dst_height_y_t { -+ unsigned long dst_y : 14; -+ unsigned long : 2; -+ unsigned long dst_height : 14; -+ unsigned long : 2; -+ } dst_height_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_height_y_t f; -+} dst_height_y_u; -+ -+typedef struct _dst_width_x_t { -+ unsigned long dst_x : 14; -+ unsigned long : 2; -+ unsigned long dst_width_b0 : 8; -+ unsigned long dst_width_b1 : 6; -+ unsigned long : 2; -+ } dst_width_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_width_x_t f; -+} dst_width_x_u; -+ -+typedef struct _dst_width_x_incy_t { -+ unsigned long dst_x : 14; -+ unsigned long : 2; -+ unsigned long dst_width_b0 : 8; -+ unsigned long dst_width_b1 : 6; -+ unsigned long : 2; -+ } dst_width_x_incy_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_width_x_incy_t f; -+} dst_width_x_incy_u; -+ -+typedef struct _dst_line_start_t { -+ unsigned long dst_start_x : 14; -+ unsigned long : 2; -+ unsigned long dst_start_y : 14; -+ unsigned long : 2; -+ } dst_line_start_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_line_start_t f; -+} dst_line_start_u; -+ -+typedef struct _dst_line_end_t { -+ unsigned long dst_end_x : 14; -+ unsigned long : 2; -+ unsigned long dst_end_y_b0 : 8; -+ unsigned long dst_end_y_b1 : 6; -+ unsigned long : 2; -+ } dst_line_end_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dst_line_end_t f; -+} dst_line_end_u; -+ -+typedef struct _brush_offset_t { -+ unsigned long brush_offset : 24; -+ unsigned long : 8; -+ } brush_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ brush_offset_t f; -+} brush_offset_u; -+ -+typedef struct _brush_y_x_t { -+ unsigned long brush_x : 5; -+ unsigned long : 3; -+ unsigned long brush_y : 3; -+ unsigned long : 21; -+ } brush_y_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ brush_y_x_t f; -+} brush_y_x_u; -+ -+typedef struct _dp_brush_frgd_clr_t { -+ unsigned long dp_brush_frgd_clr : 32; -+ } dp_brush_frgd_clr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_brush_frgd_clr_t f; -+} dp_brush_frgd_clr_u; -+ -+typedef struct _dp_brush_bkgd_clr_t { -+ unsigned long dp_brush_bkgd_clr : 32; -+ } dp_brush_bkgd_clr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_brush_bkgd_clr_t f; -+} dp_brush_bkgd_clr_u; -+ -+typedef struct _src2_offset_t { -+ unsigned long src2_offset : 24; -+ unsigned long : 8; -+ } src2_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_offset_t f; -+} src2_offset_u; -+ -+typedef struct _src2_pitch_t { -+ unsigned long src2_pitch : 14; -+ unsigned long src2_pitch_mul : 2; -+ unsigned long : 16; -+ } src2_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_pitch_t f; -+} src2_pitch_u; -+ -+typedef struct _src2_pitch_offset_t { -+ unsigned long src2_offset : 20; -+ unsigned long : 2; -+ unsigned long src2_pitch : 8; -+ unsigned long src2_pitch_mul : 2; -+ } src2_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_pitch_offset_t f; -+} src2_pitch_offset_u; -+ -+typedef struct _src2_x_t { -+ unsigned long src_x : 14; -+ unsigned long : 18; -+ } src2_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_x_t f; -+} src2_x_u; -+ -+typedef struct _src2_y_t { -+ unsigned long src_y : 14; -+ unsigned long : 18; -+ } src2_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_y_t f; -+} src2_y_u; -+ -+typedef struct _src2_x_y_t { -+ unsigned long src_y : 14; -+ unsigned long : 2; -+ unsigned long src_x : 14; -+ unsigned long : 2; -+ } src2_x_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_x_y_t f; -+} src2_x_y_u; -+ -+typedef struct _src2_width_t { -+ unsigned long src2_width : 14; -+ unsigned long : 18; -+ } src2_width_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_width_t f; -+} src2_width_u; -+ -+typedef struct _src2_height_t { -+ unsigned long src2_height : 14; -+ unsigned long : 18; -+ } src2_height_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_height_t f; -+} src2_height_u; -+ -+typedef struct _src2_inc_t { -+ unsigned long src2_xinc : 6; -+ unsigned long : 2; -+ unsigned long src2_yinc : 6; -+ unsigned long : 18; -+ } src2_inc_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src2_inc_t f; -+} src2_inc_u; -+ -+typedef struct _src_offset_t { -+ unsigned long src_offset : 24; -+ unsigned long : 8; -+ } src_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_offset_t f; -+} src_offset_u; -+ -+typedef struct _src_pitch_t { -+ unsigned long src_pitch : 14; -+ unsigned long src_pitch_mul : 2; -+ unsigned long : 16; -+ } src_pitch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_pitch_t f; -+} src_pitch_u; -+ -+typedef struct _src_pitch_offset_t { -+ unsigned long src_offset : 20; -+ unsigned long src_pitch : 10; -+ unsigned long src_pitch_mul : 2; -+ } src_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_pitch_offset_t f; -+} src_pitch_offset_u; -+ -+typedef struct _src_x_t { -+ unsigned long src_x : 14; -+ unsigned long : 18; -+ } src_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_x_t f; -+} src_x_u; -+ -+typedef struct _src_y_t { -+ unsigned long src_y : 14; -+ unsigned long : 18; -+ } src_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_y_t f; -+} src_y_u; -+ -+typedef struct _src_x_y_t { -+ unsigned long src_y : 14; -+ unsigned long : 2; -+ unsigned long src_x : 14; -+ unsigned long : 2; -+ } src_x_y_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_x_y_t f; -+} src_x_y_u; -+ -+typedef struct _src_y_x_t { -+ unsigned long src_x : 14; -+ unsigned long : 2; -+ unsigned long src_y : 14; -+ unsigned long : 2; -+ } src_y_x_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_y_x_t f; -+} src_y_x_u; -+ -+typedef struct _src_width_t { -+ unsigned long src_width : 14; -+ unsigned long : 18; -+ } src_width_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_width_t f; -+} src_width_u; -+ -+typedef struct _src_height_t { -+ unsigned long src_height : 14; -+ unsigned long : 18; -+ } src_height_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_height_t f; -+} src_height_u; -+ -+typedef struct _src_inc_t { -+ unsigned long src_xinc : 6; -+ unsigned long : 2; -+ unsigned long src_yinc : 6; -+ unsigned long : 18; -+ } src_inc_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_inc_t f; -+} src_inc_u; -+ -+typedef struct _host_data0_t { -+ unsigned long host_data : 32; -+ } host_data0_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data0_t f; -+} host_data0_u; -+ -+typedef struct _host_data1_t { -+ unsigned long host_data : 32; -+ } host_data1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data1_t f; -+} host_data1_u; -+ -+typedef struct _host_data2_t { -+ unsigned long host_data : 32; -+ } host_data2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data2_t f; -+} host_data2_u; -+ -+typedef struct _host_data3_t { -+ unsigned long host_data : 32; -+ } host_data3_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data3_t f; -+} host_data3_u; -+ -+typedef struct _host_data4_t { -+ unsigned long host_data : 32; -+ } host_data4_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data4_t f; -+} host_data4_u; -+ -+typedef struct _host_data5_t { -+ unsigned long host_data : 32; -+ } host_data5_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data5_t f; -+} host_data5_u; -+ -+typedef struct _host_data6_t { -+ unsigned long host_data : 32; -+ } host_data6_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data6_t f; -+} host_data6_u; -+ -+typedef struct _host_data7_t { -+ unsigned long host_data : 32; -+ } host_data7_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data7_t f; -+} host_data7_u; -+ -+typedef struct _host_data_last_t { -+ unsigned long host_data_last : 32; -+ } host_data_last_t; -+ -+typedef union { -+ unsigned long val : 32; -+ host_data_last_t f; -+} host_data_last_u; -+ -+typedef struct _dp_src_frgd_clr_t { -+ unsigned long dp_src_frgd_clr : 32; -+ } dp_src_frgd_clr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_src_frgd_clr_t f; -+} dp_src_frgd_clr_u; -+ -+typedef struct _dp_src_bkgd_clr_t { -+ unsigned long dp_src_bkgd_clr : 32; -+ } dp_src_bkgd_clr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_src_bkgd_clr_t f; -+} dp_src_bkgd_clr_u; -+ -+typedef struct _sc_left_t { -+ unsigned long sc_left : 14; -+ unsigned long : 18; -+ } sc_left_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sc_left_t f; -+} sc_left_u; -+ -+typedef struct _sc_right_t { -+ unsigned long sc_right : 14; -+ unsigned long : 18; -+ } sc_right_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sc_right_t f; -+} sc_right_u; -+ -+typedef struct _sc_top_t { -+ unsigned long sc_top : 14; -+ unsigned long : 18; -+ } sc_top_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sc_top_t f; -+} sc_top_u; -+ -+typedef struct _sc_bottom_t { -+ unsigned long sc_bottom : 14; -+ unsigned long : 18; -+ } sc_bottom_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sc_bottom_t f; -+} sc_bottom_u; -+ -+typedef struct _src_sc_right_t { -+ unsigned long sc_right : 14; -+ unsigned long : 18; -+ } src_sc_right_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_sc_right_t f; -+} src_sc_right_u; -+ -+typedef struct _src_sc_bottom_t { -+ unsigned long sc_bottom : 14; -+ unsigned long : 18; -+ } src_sc_bottom_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_sc_bottom_t f; -+} src_sc_bottom_u; -+ -+typedef struct _dp_cntl_t { -+ unsigned long dst_x_dir : 1; -+ unsigned long dst_y_dir : 1; -+ unsigned long src_x_dir : 1; -+ unsigned long src_y_dir : 1; -+ unsigned long dst_major_x : 1; -+ unsigned long src_major_x : 1; -+ unsigned long : 26; -+ } dp_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_cntl_t f; -+} dp_cntl_u; -+ -+typedef struct _dp_cntl_dst_dir_t { -+ unsigned long : 15; -+ unsigned long dst_y_dir : 1; -+ unsigned long : 15; -+ unsigned long dst_x_dir : 1; -+ } dp_cntl_dst_dir_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_cntl_dst_dir_t f; -+} dp_cntl_dst_dir_u; -+ -+typedef struct _dp_datatype_t { -+ unsigned long dp_dst_datatype : 4; -+ unsigned long : 4; -+ unsigned long dp_brush_datatype : 4; -+ unsigned long dp_src2_type : 1; -+ unsigned long dp_src2_datatype : 3; -+ unsigned long dp_src_datatype : 3; -+ unsigned long : 11; -+ unsigned long dp_byte_pix_order : 1; -+ unsigned long : 1; -+ } dp_datatype_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_datatype_t f; -+} dp_datatype_u; -+ -+typedef struct _dp_mix_t { -+ unsigned long : 8; -+ unsigned long dp_src_source : 3; -+ unsigned long dp_src2_source : 3; -+ unsigned long : 2; -+ unsigned long dp_rop3 : 8; -+ unsigned long dp_op : 1; -+ unsigned long : 7; -+ } dp_mix_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_mix_t f; -+} dp_mix_u; -+ -+typedef struct _dp_write_msk_t { -+ unsigned long dp_write_msk : 32; -+ } dp_write_msk_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_write_msk_t f; -+} dp_write_msk_u; -+ -+typedef struct _clr_cmp_clr_src_t { -+ unsigned long clr_cmp_clr_src : 32; -+ } clr_cmp_clr_src_t; -+ -+typedef union { -+ unsigned long val : 32; -+ clr_cmp_clr_src_t f; -+} clr_cmp_clr_src_u; -+ -+typedef struct _clr_cmp_clr_dst_t { -+ unsigned long clr_cmp_clr_dst : 32; -+ } clr_cmp_clr_dst_t; -+ -+typedef union { -+ unsigned long val : 32; -+ clr_cmp_clr_dst_t f; -+} clr_cmp_clr_dst_u; -+ -+typedef struct _clr_cmp_cntl_t { -+ unsigned long clr_cmp_fcn_src : 3; -+ unsigned long : 5; -+ unsigned long clr_cmp_fcn_dst : 3; -+ unsigned long : 13; -+ unsigned long clr_cmp_src : 2; -+ unsigned long : 6; -+ } clr_cmp_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ clr_cmp_cntl_t f; -+} clr_cmp_cntl_u; -+ -+typedef struct _clr_cmp_msk_t { -+ unsigned long clr_cmp_msk : 32; -+ } clr_cmp_msk_t; -+ -+typedef union { -+ unsigned long val : 32; -+ clr_cmp_msk_t f; -+} clr_cmp_msk_u; -+ -+typedef struct _default_pitch_offset_t { -+ unsigned long default_offset : 20; -+ unsigned long default_pitch : 10; -+ unsigned long : 2; -+ } default_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ default_pitch_offset_t f; -+} default_pitch_offset_u; -+ -+typedef struct _default_sc_bottom_right_t { -+ unsigned long default_sc_right : 14; -+ unsigned long : 2; -+ unsigned long default_sc_bottom : 14; -+ unsigned long : 2; -+ } default_sc_bottom_right_t; -+ -+typedef union { -+ unsigned long val : 32; -+ default_sc_bottom_right_t f; -+} default_sc_bottom_right_u; -+ -+typedef struct _default2_sc_bottom_right_t { -+ unsigned long default_sc_right : 14; -+ unsigned long : 2; -+ unsigned long default_sc_bottom : 14; -+ unsigned long : 2; -+ } default2_sc_bottom_right_t; -+ -+typedef union { -+ unsigned long val : 32; -+ default2_sc_bottom_right_t f; -+} default2_sc_bottom_right_u; -+ -+typedef struct _ref1_pitch_offset_t { -+ unsigned long offset : 20; -+ unsigned long : 2; -+ unsigned long pitch : 8; -+ unsigned long : 2; -+ } ref1_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ ref1_pitch_offset_t f; -+} ref1_pitch_offset_u; -+ -+typedef struct _ref2_pitch_offset_t { -+ unsigned long offset : 20; -+ unsigned long : 2; -+ unsigned long pitch : 8; -+ unsigned long : 2; -+ } ref2_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ ref2_pitch_offset_t f; -+} ref2_pitch_offset_u; -+ -+typedef struct _ref3_pitch_offset_t { -+ unsigned long offset : 20; -+ unsigned long : 2; -+ unsigned long pitch : 8; -+ unsigned long : 2; -+ } ref3_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ ref3_pitch_offset_t f; -+} ref3_pitch_offset_u; -+ -+typedef struct _ref4_pitch_offset_t { -+ unsigned long offset : 20; -+ unsigned long : 2; -+ unsigned long pitch : 8; -+ unsigned long : 2; -+ } ref4_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ ref4_pitch_offset_t f; -+} ref4_pitch_offset_u; -+ -+typedef struct _ref5_pitch_offset_t { -+ unsigned long offset : 20; -+ unsigned long : 2; -+ unsigned long pitch : 8; -+ unsigned long : 2; -+ } ref5_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ ref5_pitch_offset_t f; -+} ref5_pitch_offset_u; -+ -+typedef struct _ref6_pitch_offset_t { -+ unsigned long offset : 20; -+ unsigned long : 2; -+ unsigned long pitch : 8; -+ unsigned long : 2; -+ } ref6_pitch_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ ref6_pitch_offset_t f; -+} ref6_pitch_offset_u; -+ -+typedef struct _dp_gui_master_cntl_t { -+ unsigned long gmc_src_pitch_offset_cntl : 1; -+ unsigned long gmc_dst_pitch_offset_cntl : 1; -+ unsigned long gmc_src_clipping : 1; -+ unsigned long gmc_dst_clipping : 1; -+ unsigned long gmc_brush_datatype : 4; -+ unsigned long gmc_dst_datatype : 4; -+ unsigned long gmc_src_datatype : 3; -+ unsigned long gmc_byte_pix_order : 1; -+ unsigned long gmc_default_sel : 1; -+ unsigned long gmc_rop3 : 8; -+ unsigned long gmc_dp_src_source : 3; -+ unsigned long gmc_clr_cmp_fcn_dis : 1; -+ unsigned long : 1; -+ unsigned long gmc_wr_msk_dis : 1; -+ unsigned long gmc_dp_op : 1; -+ } dp_gui_master_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ dp_gui_master_cntl_t f; -+} dp_gui_master_cntl_u; -+ -+typedef struct _sc_top_left_t { -+ unsigned long sc_left : 14; -+ unsigned long : 2; -+ unsigned long sc_top : 14; -+ unsigned long : 2; -+ } sc_top_left_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sc_top_left_t f; -+} sc_top_left_u; -+ -+typedef struct _sc_bottom_right_t { -+ unsigned long sc_right : 14; -+ unsigned long : 2; -+ unsigned long sc_bottom : 14; -+ unsigned long : 2; -+ } sc_bottom_right_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sc_bottom_right_t f; -+} sc_bottom_right_u; -+ -+typedef struct _src_sc_bottom_right_t { -+ unsigned long sc_right : 14; -+ unsigned long : 2; -+ unsigned long sc_bottom : 14; -+ unsigned long : 2; -+ } src_sc_bottom_right_t; -+ -+typedef union { -+ unsigned long val : 32; -+ src_sc_bottom_right_t f; -+} src_sc_bottom_right_u; -+ -+typedef struct _global_alpha_t { -+ unsigned long alpha_r : 8; -+ unsigned long alpha_g : 8; -+ unsigned long alpha_b : 8; -+ unsigned long alpha_a : 8; -+ } global_alpha_t; -+ -+typedef union { -+ unsigned long val : 32; -+ global_alpha_t f; -+} global_alpha_u; -+ -+typedef struct _filter_coef_t { -+ unsigned long c_4 : 4; -+ unsigned long c_3 : 4; -+ unsigned long c_2 : 4; -+ unsigned long c_1 : 4; -+ unsigned long c1 : 4; -+ unsigned long c2 : 4; -+ unsigned long c3 : 4; -+ unsigned long c4 : 4; -+ } filter_coef_t; -+ -+typedef union { -+ unsigned long val : 32; -+ filter_coef_t f; -+} filter_coef_u; -+ -+typedef struct _mvc_cntl_start_t { -+ unsigned long mc_cntl_src_1_index : 4; -+ unsigned long mc_cntl_dst_offset : 20; -+ unsigned long mc_dst_pitch_mul : 2; -+ unsigned long mc_cntl_src_2_index : 3; -+ unsigned long mc_cntl_width_height_sel : 3; -+ } mvc_cntl_start_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mvc_cntl_start_t f; -+} mvc_cntl_start_u; -+ -+typedef struct _e2_arithmetic_cntl_t { -+ unsigned long opcode : 5; -+ unsigned long shiftright : 4; -+ unsigned long clamp : 1; -+ unsigned long rounding : 2; -+ unsigned long filter_n : 3; -+ unsigned long : 1; -+ unsigned long srcblend_inv : 1; -+ unsigned long srcblend : 4; -+ unsigned long : 3; -+ unsigned long dstblend_inv : 1; -+ unsigned long dstblend : 4; -+ unsigned long dst_signed : 1; -+ unsigned long autoinc : 1; -+ unsigned long : 1; -+ } e2_arithmetic_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ e2_arithmetic_cntl_t f; -+} e2_arithmetic_cntl_u; -+ -+typedef struct _debug0_t { -+ unsigned long debug0_r : 8; -+ unsigned long : 8; -+ unsigned long debug0_rw : 8; -+ unsigned long : 8; -+ } debug0_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug0_t f; -+} debug0_u; -+ -+typedef struct _debug1_t { -+ unsigned long debug1_r : 8; -+ unsigned long : 8; -+ unsigned long debug1_rw : 8; -+ unsigned long : 8; -+ } debug1_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug1_t f; -+} debug1_u; -+ -+typedef struct _debug2_t { -+ unsigned long debug2_r : 8; -+ unsigned long : 8; -+ unsigned long debug2_rw : 8; -+ unsigned long : 8; -+ } debug2_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug2_t f; -+} debug2_u; -+ -+typedef struct _debug3_t { -+ unsigned long : 32; -+ } debug3_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug3_t f; -+} debug3_u; -+ -+typedef struct _debug4_t { -+ unsigned long : 32; -+ } debug4_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug4_t f; -+} debug4_u; -+ -+typedef struct _debug5_t { -+ unsigned long : 32; -+ } debug5_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug5_t f; -+} debug5_u; -+ -+typedef struct _debug6_t { -+ unsigned long : 32; -+ } debug6_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug6_t f; -+} debug6_u; -+ -+typedef struct _debug7_t { -+ unsigned long : 32; -+ } debug7_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug7_t f; -+} debug7_u; -+ -+typedef struct _debug8_t { -+ unsigned long : 32; -+ } debug8_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug8_t f; -+} debug8_u; -+ -+typedef struct _debug9_t { -+ unsigned long : 32; -+ } debug9_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug9_t f; -+} debug9_u; -+ -+typedef struct _debug10_t { -+ unsigned long : 32; -+ } debug10_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug10_t f; -+} debug10_u; -+ -+typedef struct _debug11_t { -+ unsigned long : 32; -+ } debug11_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug11_t f; -+} debug11_u; -+ -+typedef struct _debug12_t { -+ unsigned long : 32; -+ } debug12_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug12_t f; -+} debug12_u; -+ -+typedef struct _debug13_t { -+ unsigned long : 32; -+ } debug13_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug13_t f; -+} debug13_u; -+ -+typedef struct _debug14_t { -+ unsigned long : 32; -+ } debug14_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug14_t f; -+} debug14_u; -+ -+typedef struct _debug15_t { -+ unsigned long : 32; -+ } debug15_t; -+ -+typedef union { -+ unsigned long val : 32; -+ debug15_t f; -+} debug15_u; -+ -+typedef struct _eng_cntl_t { -+ unsigned long erc_reg_rd_ws : 1; -+ unsigned long erc_reg_wr_ws : 1; -+ unsigned long erc_idle_reg_wr : 1; -+ unsigned long dis_engine_triggers : 1; -+ unsigned long dis_rop_src_uses_dst_w_h : 1; -+ unsigned long dis_src_uses_dst_dirmaj : 1; -+ unsigned long : 6; -+ unsigned long force_3dclk_when_2dclk : 1; -+ unsigned long : 19; -+ } eng_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ eng_cntl_t f; -+} eng_cntl_u; -+ -+typedef struct _eng_perf_cnt_t { -+ unsigned long perf_cnt : 20; -+ unsigned long perf_sel : 4; -+ unsigned long perf_en : 1; -+ unsigned long : 3; -+ unsigned long perf_clr : 1; -+ unsigned long : 3; -+ } eng_perf_cnt_t; -+ -+typedef union { -+ unsigned long val : 32; -+ eng_perf_cnt_t f; -+} eng_perf_cnt_u; -+ -+typedef struct _idct_runs_t { -+ unsigned long idct_runs_3 : 8; -+ unsigned long idct_runs_2 : 8; -+ unsigned long idct_runs_1 : 8; -+ unsigned long idct_runs_0 : 8; -+ } idct_runs_t; -+ -+typedef union { -+ unsigned long val : 32; -+ idct_runs_t f; -+} idct_runs_u; -+ -+typedef struct _idct_levels_t { -+ unsigned long idct_level_hi : 16; -+ unsigned long idct_level_lo : 16; -+ } idct_levels_t; -+ -+typedef union { -+ unsigned long val : 32; -+ idct_levels_t f; -+} idct_levels_u; -+ -+typedef struct _idct_control_t { -+ unsigned long idct_ctl_luma_rd_format : 2; -+ unsigned long idct_ctl_chroma_rd_format : 2; -+ unsigned long idct_ctl_scan_pattern : 1; -+ unsigned long idct_ctl_intra : 1; -+ unsigned long idct_ctl_flush : 1; -+ unsigned long idct_ctl_passthru : 1; -+ unsigned long idct_ctl_sw_reset : 1; -+ unsigned long idct_ctl_constreq : 1; -+ unsigned long idct_ctl_scramble : 1; -+ unsigned long idct_ctl_alt_scan : 1; -+ unsigned long : 20; -+ } idct_control_t; -+ -+typedef union { -+ unsigned long val : 32; -+ idct_control_t f; -+} idct_control_u; -+ -+typedef struct _idct_auth_control_t { -+ unsigned long control_bits : 32; -+ } idct_auth_control_t; -+ -+typedef union { -+ unsigned long val : 32; -+ idct_auth_control_t f; -+} idct_auth_control_u; -+ -+typedef struct _idct_auth_t { -+ unsigned long auth : 32; -+ } idct_auth_t; -+ -+typedef union { -+ unsigned long val : 32; -+ idct_auth_t f; -+} idct_auth_u; -+ -+typedef struct _mem_cntl_t { -+ unsigned long : 1; -+ unsigned long en_mem_ch1 : 1; -+ unsigned long en_mem_ch2 : 1; -+ unsigned long int_mem_mapping : 1; -+ unsigned long : 28; -+ } mem_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mem_cntl_t f; -+} mem_cntl_u; -+ -+typedef struct _mem_arb_t { -+ unsigned long disp_time_slot : 4; -+ unsigned long disp_timer : 4; -+ unsigned long arb_option : 1; -+ unsigned long : 23; -+ } mem_arb_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mem_arb_t f; -+} mem_arb_u; -+ -+typedef struct _mc_fb_location_t { -+ unsigned long mc_fb_start : 16; -+ unsigned long mc_fb_top : 16; -+ } mc_fb_location_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_fb_location_t f; -+} mc_fb_location_u; -+ -+typedef struct _mem_ext_cntl_t { -+ unsigned long mem_ext_enable : 1; -+ unsigned long mem_ap_enable : 1; -+ unsigned long mem_addr_mapping : 2; -+ unsigned long mem_wdoe_cntl : 2; -+ unsigned long mem_wdoe_extend : 1; -+ unsigned long : 1; -+ unsigned long mem_page_timer : 8; -+ unsigned long mem_dynamic_cke : 1; -+ unsigned long mem_sdram_tri_en : 1; -+ unsigned long mem_self_refresh_en : 1; -+ unsigned long mem_power_down : 1; -+ unsigned long mem_hw_power_down_en : 1; -+ unsigned long mem_power_down_stat : 1; -+ unsigned long : 3; -+ unsigned long mem_pd_mck : 1; -+ unsigned long mem_pd_ma : 1; -+ unsigned long mem_pd_mdq : 1; -+ unsigned long mem_tristate_mck : 1; -+ unsigned long mem_tristate_ma : 1; -+ unsigned long mem_tristate_mcke : 1; -+ unsigned long mem_invert_mck : 1; -+ } mem_ext_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mem_ext_cntl_t f; -+} mem_ext_cntl_u; -+ -+typedef struct _mc_ext_mem_location_t { -+ unsigned long mc_ext_mem_start : 16; -+ unsigned long mc_ext_mem_top : 16; -+ } mc_ext_mem_location_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_ext_mem_location_t f; -+} mc_ext_mem_location_u; -+ -+typedef struct _mem_ext_timing_cntl_t { -+ unsigned long mem_trp : 2; -+ unsigned long mem_trcd : 2; -+ unsigned long mem_tras : 3; -+ unsigned long : 1; -+ unsigned long mem_trrd : 2; -+ unsigned long mem_tr2w : 2; -+ unsigned long mem_twr : 2; -+ unsigned long : 4; -+ unsigned long mem_twr_mode : 1; -+ unsigned long : 1; -+ unsigned long mem_refresh_dis : 1; -+ unsigned long : 3; -+ unsigned long mem_refresh_rate : 8; -+ } mem_ext_timing_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mem_ext_timing_cntl_t f; -+} mem_ext_timing_cntl_u; -+ -+typedef struct _mem_sdram_mode_reg_t { -+ unsigned long mem_mode_reg : 14; -+ unsigned long : 2; -+ unsigned long mem_read_latency : 2; -+ unsigned long mem_schmen_latency : 2; -+ unsigned long mem_cas_latency : 2; -+ unsigned long mem_schmen_extend : 1; -+ unsigned long : 8; -+ unsigned long mem_sdram_reset : 1; -+ } mem_sdram_mode_reg_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mem_sdram_mode_reg_t f; -+} mem_sdram_mode_reg_u; -+ -+typedef struct _mem_io_cntl_t { -+ unsigned long mem_sn_mck : 4; -+ unsigned long mem_sn_ma : 4; -+ unsigned long mem_sn_mdq : 4; -+ unsigned long mem_srn_mck : 1; -+ unsigned long mem_srn_ma : 1; -+ unsigned long mem_srn_mdq : 1; -+ unsigned long : 1; -+ unsigned long mem_sp_mck : 4; -+ unsigned long mem_sp_ma : 4; -+ unsigned long mem_sp_mdq : 4; -+ unsigned long mem_srp_mck : 1; -+ unsigned long mem_srp_ma : 1; -+ unsigned long mem_srp_mdq : 1; -+ unsigned long : 1; -+ } mem_io_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mem_io_cntl_t f; -+} mem_io_cntl_u; -+ -+typedef struct _mc_debug_t { -+ unsigned long mc_debug : 32; -+ } mc_debug_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_debug_t f; -+} mc_debug_u; -+ -+typedef struct _mc_bist_ctrl_t { -+ unsigned long mc_bist_ctrl : 32; -+ } mc_bist_ctrl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_bist_ctrl_t f; -+} mc_bist_ctrl_u; -+ -+typedef struct _mc_bist_collar_read_t { -+ unsigned long mc_bist_collar_read : 32; -+ } mc_bist_collar_read_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_bist_collar_read_t f; -+} mc_bist_collar_read_u; -+ -+typedef struct _tc_mismatch_t { -+ unsigned long tc_mismatch : 24; -+ unsigned long : 8; -+ } tc_mismatch_t; -+ -+typedef union { -+ unsigned long val : 32; -+ tc_mismatch_t f; -+} tc_mismatch_u; -+ -+typedef struct _mc_perf_mon_cntl_t { -+ unsigned long clr_perf : 1; -+ unsigned long en_perf : 1; -+ unsigned long : 2; -+ unsigned long perf_op_a : 2; -+ unsigned long perf_op_b : 2; -+ unsigned long : 8; -+ unsigned long monitor_period : 8; -+ unsigned long perf_count_a_overflow : 1; -+ unsigned long perf_count_b_overflow : 1; -+ unsigned long : 6; -+ } mc_perf_mon_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_perf_mon_cntl_t f; -+} mc_perf_mon_cntl_u; -+ -+typedef struct _mc_perf_counters_t { -+ unsigned long mc_perf_counter_a : 16; -+ unsigned long mc_perf_counter_b : 16; -+ } mc_perf_counters_t; -+ -+typedef union { -+ unsigned long val : 32; -+ mc_perf_counters_t f; -+} mc_perf_counters_u; -+ -+typedef struct _wait_until_t { -+ unsigned long wait_crtc_pflip : 1; -+ unsigned long wait_re_crtc_vline : 1; -+ unsigned long wait_fe_crtc_vline : 1; -+ unsigned long wait_crtc_vline : 1; -+ unsigned long wait_dma_viph0_idle : 1; -+ unsigned long wait_dma_viph1_idle : 1; -+ unsigned long wait_dma_viph2_idle : 1; -+ unsigned long wait_dma_viph3_idle : 1; -+ unsigned long wait_dma_vid_idle : 1; -+ unsigned long wait_dma_gui_idle : 1; -+ unsigned long wait_cmdfifo : 1; -+ unsigned long wait_ov0_flip : 1; -+ unsigned long wait_ov0_slicedone : 1; -+ unsigned long : 1; -+ unsigned long wait_2d_idle : 1; -+ unsigned long wait_3d_idle : 1; -+ unsigned long wait_2d_idleclean : 1; -+ unsigned long wait_3d_idleclean : 1; -+ unsigned long wait_host_idleclean : 1; -+ unsigned long wait_extern_sig : 1; -+ unsigned long cmdfifo_entries : 7; -+ unsigned long : 3; -+ unsigned long wait_both_crtc_pflip : 1; -+ unsigned long eng_display_select : 1; -+ } wait_until_t; -+ -+typedef union { -+ unsigned long val : 32; -+ wait_until_t f; -+} wait_until_u; -+ -+typedef struct _isync_cntl_t { -+ unsigned long isync_any2d_idle3d : 1; -+ unsigned long isync_any3d_idle2d : 1; -+ unsigned long isync_trig2d_idle3d : 1; -+ unsigned long isync_trig3d_idle2d : 1; -+ unsigned long isync_wait_idlegui : 1; -+ unsigned long isync_cpscratch_idlegui : 1; -+ unsigned long : 26; -+ } isync_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ isync_cntl_t f; -+} isync_cntl_u; -+ -+typedef struct _rbbm_guicntl_t { -+ unsigned long host_data_swap : 2; -+ unsigned long : 30; -+ } rbbm_guicntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_guicntl_t f; -+} rbbm_guicntl_u; -+ -+typedef struct _rbbm_status_t { -+ unsigned long cmdfifo_avail : 7; -+ unsigned long : 1; -+ unsigned long hirq_on_rbb : 1; -+ unsigned long cprq_on_rbb : 1; -+ unsigned long cfrq_on_rbb : 1; -+ unsigned long hirq_in_rtbuf : 1; -+ unsigned long cprq_in_rtbuf : 1; -+ unsigned long cfrq_in_rtbuf : 1; -+ unsigned long cf_pipe_busy : 1; -+ unsigned long eng_ev_busy : 1; -+ unsigned long cp_cmdstrm_busy : 1; -+ unsigned long e2_busy : 1; -+ unsigned long rb2d_busy : 1; -+ unsigned long rb3d_busy : 1; -+ unsigned long se_busy : 1; -+ unsigned long re_busy : 1; -+ unsigned long tam_busy : 1; -+ unsigned long tdm_busy : 1; -+ unsigned long pb_busy : 1; -+ unsigned long : 6; -+ unsigned long gui_active : 1; -+ } rbbm_status_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_status_t f; -+} rbbm_status_u; -+ -+typedef struct _rbbm_cntl_t { -+ unsigned long rb_settle : 4; -+ unsigned long abortclks_hi : 3; -+ unsigned long : 1; -+ unsigned long abortclks_cp : 3; -+ unsigned long : 1; -+ unsigned long abortclks_cfifo : 3; -+ unsigned long : 2; -+ unsigned long cpq_data_swap : 1; -+ unsigned long : 3; -+ unsigned long no_abort_idct : 1; -+ unsigned long no_abort_bios : 1; -+ unsigned long no_abort_fb : 1; -+ unsigned long no_abort_cp : 1; -+ unsigned long no_abort_hi : 1; -+ unsigned long no_abort_hdp : 1; -+ unsigned long no_abort_mc : 1; -+ unsigned long no_abort_aic : 1; -+ unsigned long no_abort_vip : 1; -+ unsigned long no_abort_disp : 1; -+ unsigned long no_abort_cg : 1; -+ } rbbm_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_cntl_t f; -+} rbbm_cntl_u; -+ -+typedef struct _rbbm_soft_reset_t { -+ unsigned long soft_reset_cp : 1; -+ unsigned long soft_reset_hi : 1; -+ unsigned long reserved3 : 3; -+ unsigned long soft_reset_e2 : 1; -+ unsigned long reserved2 : 2; -+ unsigned long soft_reset_mc : 1; -+ unsigned long reserved1 : 2; -+ unsigned long soft_reset_disp : 1; -+ unsigned long soft_reset_cg : 1; -+ unsigned long : 19; -+ } rbbm_soft_reset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_soft_reset_t f; -+} rbbm_soft_reset_u; -+ -+typedef struct _nqwait_until_t { -+ unsigned long wait_gui_idle : 1; -+ unsigned long : 31; -+ } nqwait_until_t; -+ -+typedef union { -+ unsigned long val : 32; -+ nqwait_until_t f; -+} nqwait_until_u; -+ -+typedef struct _rbbm_debug_t { -+ unsigned long rbbm_debug : 32; -+ } rbbm_debug_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_debug_t f; -+} rbbm_debug_u; -+ -+typedef struct _rbbm_cmdfifo_addr_t { -+ unsigned long cmdfifo_addr : 6; -+ unsigned long : 26; -+ } rbbm_cmdfifo_addr_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_cmdfifo_addr_t f; -+} rbbm_cmdfifo_addr_u; -+ -+typedef struct _rbbm_cmdfifo_datal_t { -+ unsigned long cmdfifo_datal : 32; -+ } rbbm_cmdfifo_datal_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_cmdfifo_datal_t f; -+} rbbm_cmdfifo_datal_u; -+ -+typedef struct _rbbm_cmdfifo_datah_t { -+ unsigned long cmdfifo_datah : 12; -+ unsigned long : 20; -+ } rbbm_cmdfifo_datah_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_cmdfifo_datah_t f; -+} rbbm_cmdfifo_datah_u; -+ -+typedef struct _rbbm_cmdfifo_stat_t { -+ unsigned long cmdfifo_rptr : 6; -+ unsigned long : 2; -+ unsigned long cmdfifo_wptr : 6; -+ unsigned long : 18; -+ } rbbm_cmdfifo_stat_t; -+ -+typedef union { -+ unsigned long val : 32; -+ rbbm_cmdfifo_stat_t f; -+} rbbm_cmdfifo_stat_u; -+ -+typedef struct _clk_pin_cntl_t { -+ unsigned long osc_en : 1; -+ unsigned long osc_gain : 5; -+ unsigned long dont_use_xtalin : 1; -+ unsigned long xtalin_pm_en : 1; -+ unsigned long xtalin_dbl_en : 1; -+ unsigned long : 7; -+ unsigned long cg_debug : 16; -+ } clk_pin_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ clk_pin_cntl_t f; -+} clk_pin_cntl_u; -+ -+typedef struct _pll_ref_fb_div_t { -+ unsigned long pll_ref_div : 4; -+ unsigned long : 4; -+ unsigned long pll_fb_div_int : 6; -+ unsigned long : 2; -+ unsigned long pll_fb_div_frac : 3; -+ unsigned long : 1; -+ unsigned long pll_reset_time : 4; -+ unsigned long pll_lock_time : 8; -+ } pll_ref_fb_div_t; -+ -+typedef union { -+ unsigned long val : 32; -+ pll_ref_fb_div_t f; -+} pll_ref_fb_div_u; -+ -+typedef struct _pll_cntl_t { -+ unsigned long pll_pwdn : 1; -+ unsigned long pll_reset : 1; -+ unsigned long pll_pm_en : 1; -+ unsigned long pll_mode : 1; -+ unsigned long pll_refclk_sel : 1; -+ unsigned long pll_fbclk_sel : 1; -+ unsigned long pll_tcpoff : 1; -+ unsigned long pll_pcp : 3; -+ unsigned long pll_pvg : 3; -+ unsigned long pll_vcofr : 1; -+ unsigned long pll_ioffset : 2; -+ unsigned long pll_pecc_mode : 2; -+ unsigned long pll_pecc_scon : 2; -+ unsigned long pll_dactal : 4; -+ unsigned long pll_cp_clip : 2; -+ unsigned long pll_conf : 3; -+ unsigned long pll_mbctrl : 2; -+ unsigned long pll_ring_off : 1; -+ } pll_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ pll_cntl_t f; -+} pll_cntl_u; -+ -+typedef struct _sclk_cntl_t { -+ unsigned long sclk_src_sel : 2; -+ unsigned long : 2; -+ unsigned long sclk_post_div_fast : 4; -+ unsigned long sclk_clkon_hys : 3; -+ unsigned long sclk_post_div_slow : 4; -+ unsigned long disp_cg_ok2switch_en : 1; -+ unsigned long sclk_force_reg : 1; -+ unsigned long sclk_force_disp : 1; -+ unsigned long sclk_force_mc : 1; -+ unsigned long sclk_force_extmc : 1; -+ unsigned long sclk_force_cp : 1; -+ unsigned long sclk_force_e2 : 1; -+ unsigned long sclk_force_e3 : 1; -+ unsigned long sclk_force_idct : 1; -+ unsigned long sclk_force_bist : 1; -+ unsigned long busy_extend_cp : 1; -+ unsigned long busy_extend_e2 : 1; -+ unsigned long busy_extend_e3 : 1; -+ unsigned long busy_extend_idct : 1; -+ unsigned long : 3; -+ } sclk_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ sclk_cntl_t f; -+} sclk_cntl_u; -+ -+typedef struct _pclk_cntl_t { -+ unsigned long pclk_src_sel : 2; -+ unsigned long : 2; -+ unsigned long pclk_post_div : 4; -+ unsigned long : 8; -+ unsigned long pclk_force_disp : 1; -+ unsigned long : 15; -+ } pclk_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ pclk_cntl_t f; -+} pclk_cntl_u; -+ -+typedef struct _clk_test_cntl_t { -+ unsigned long testclk_sel : 4; -+ unsigned long : 3; -+ unsigned long start_check_freq : 1; -+ unsigned long tstcount_rst : 1; -+ unsigned long : 15; -+ unsigned long test_count : 8; -+ } clk_test_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ clk_test_cntl_t f; -+} clk_test_cntl_u; -+ -+typedef struct _pwrmgt_cntl_t { -+ unsigned long pwm_enable : 1; -+ unsigned long : 1; -+ unsigned long pwm_mode_req : 2; -+ unsigned long pwm_wakeup_cond : 2; -+ unsigned long pwm_fast_noml_hw_en : 1; -+ unsigned long pwm_noml_fast_hw_en : 1; -+ unsigned long pwm_fast_noml_cond : 4; -+ unsigned long pwm_noml_fast_cond : 4; -+ unsigned long pwm_idle_timer : 8; -+ unsigned long pwm_busy_timer : 8; -+ } pwrmgt_cntl_t; -+ -+typedef union { -+ unsigned long val : 32; -+ pwrmgt_cntl_t f; -+} pwrmgt_cntl_u; -+ -+typedef struct _pwrmgt_status_t { -+ unsigned long pwm_mode : 2; -+ unsigned long : 30; -+ } pwrmgt_status_t; -+ -+typedef union { -+ unsigned long val : 32; -+ pwrmgt_status_t f; -+} pwrmgt_status_u; -+ -+typedef struct _cursor_offset_t { -+ unsigned long cur_offset : 24; -+ unsigned long cur_x_offset : 4; -+ unsigned long cur_y_offset : 4; -+} cursor_offset_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor_offset_t f; -+} cursor_offset_u; -+ -+typedef struct _cursor_h_pos_t { -+ unsigned long cur_h_start : 10; -+ unsigned long : 6; -+ unsigned long cur_h_end : 10; -+ unsigned long : 5; -+ unsigned long cur_en : 1; -+} cursor_h_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor_h_pos_t f; -+} cursor_h_pos_u; -+ -+typedef struct _cursor_v_pos_t { -+ unsigned long cur_v_start : 10; -+ unsigned long : 6; -+ unsigned long cur_v_end : 10; -+ unsigned long : 6; -+} cursor_v_pos_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor_v_pos_t f; -+} cursor_v_pos_u; -+ -+typedef struct _cursor_color_t { -+ unsigned long cur_color_r : 8; -+ unsigned long cur_color_g : 8; -+ unsigned long cur_color_b : 8; -+ unsigned long : 8; -+} cursor_color_t; -+ -+typedef union { -+ unsigned long val : 32; -+ cursor_color_t f; -+} cursor_color_u; -+ -+#endif -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_stub.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_stub.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,95 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+#include "imageon.h" -+#include "imageon_regs.h" -+#include "klinux.h" -+ -+extern W100CardEntry w100_cards[]; -+ -+static Bool -+FindW100(CARD16 vendor, CARD16 device, KdCardAttr * attr) -+{ -+ CARD8 *mmio; -+ CARD32 chip_id; -+ Bool found = FALSE; -+ -+ mmio = KdMapDevice(W100_REG_BASE, W100_REG_SIZE); -+ KdSetMappedMode((CARD32) mmio, W100_REG_SIZE, -+ KD_MAPPED_MODE_REGISTERS); -+ -+ chip_id = (*(VOL32 *)(mmio + mmCHIP_ID)); -+ if ((vendor | (device << 16)) == chip_id) { -+ ErrorF("(I) Found W100 Chip ID: %08x\n\n", chip_id); -+ attr->deviceID = device; -+ attr->vendorID = vendor; -+ found = TRUE; -+ } -+ KdUnmapDevice(mmio, W100_REG_SIZE); -+ return found; -+} -+ -+ -+void -+InitCard(char *name) -+{ -+ int i; -+ W100CardEntry *entry; -+ KdCardAttr attr; -+ -+ for (entry = w100_cards; entry->name; entry++) { -+ if (FindW100(entry->vendor, entry->device, &attr)) { -+ KdCardInfoAdd(&W100Funcs, &attr, 0); -+ break; -+ } -+ } -+} -+ -+void -+InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) -+{ -+ KdInitOutput(pScreenInfo, argc, argv); -+} -+ -+void -+InitInput(int argc, char **argv) -+{ -+ KdInitInput(&LinuxMouseFuncs, &LinuxKeyboardFuncs); -+#ifdef TOUCHSCREEN -+ KdAddMouseDriver(&TsFuncs); -+#endif -+} -+ -+void -+ddxUseMsg(void) -+{ -+ KdUseMsg(); -+} -+ -+int -+ddxProcessArgument(int argc, char **argv, int i) -+{ -+ return KdProcessArgument(argc, argv, i); -+} -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,1474 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+ -+#include "imageon.h" -+#include "imageon_regs.h" -+#include "imageon_const.h" -+ -+CARD8 W100SolidRop[16] = { -+ /* GXclear */ 0x00, /* 0 */ -+ /* GXand */ 0xa0, /* src AND dst */ -+ /* GXandReverse */ 0x50, /* src AND NOT dst */ -+ /* GXcopy */ 0xf0, /* src */ -+ /* GXandInverted */ 0x0a, /* NOT src AND dst */ -+ /* GXnoop */ 0xaa, /* dst */ -+ /* GXxor */ 0x5a, /* src XOR dst */ -+ /* GXor */ 0xfa, /* src OR dst */ -+ /* GXnor */ 0x05, /* NOT src AND NOT dst */ -+ /* GXequiv */ 0xa5, /* NOT src XOR dst */ -+ /* GXinvert */ 0x55, /* NOT dst */ -+ /* GXorReverse */ 0xf5, /* src OR NOT dst */ -+ /* GXcopyInverted */ 0x0f, /* NOT src */ -+ /* GXorInverted */ 0xaf, /* NOT src OR dst */ -+ /* GXnand */ 0x5f, /* NOT src OR NOT dst */ -+ /* GXset */ 0xff, /* 1 */ -+}; -+ -+CARD8 W100BltRop[16] = { -+ /* GXclear */ 0x00, /* 0 */ -+ /* GXand */ 0x88, /* src AND dst */ -+ /* GXandReverse */ 0x44, /* src AND NOT dst */ -+ /* GXcopy */ 0xcc, /* src */ -+ /* GXandInverted */ 0x22, /* NOT src AND dst */ -+ /* GXnoop */ 0xaa, /* dst */ -+ /* GXxor */ 0x66, /* src XOR dst */ -+ /* GXor */ 0xee, /* src OR dst */ -+ /* GXnor */ 0x11, /* NOT src AND NOT dst */ -+ /* GXequiv */ 0x99, /* NOT src XOR dst */ -+ /* GXinvert */ 0x55, /* NOT dst */ -+ /* GXorReverse */ 0xdd, /* src OR NOT dst */ -+ /* GXcopyInverted */ 0x33, /* NOT src */ -+ /* GXorInverted */ 0xbb, /* NOT src OR dst */ -+ /* GXnand */ 0x77, /* NOT src OR NOT dst */ -+ /* GXset */ 0xff, /* 1 */ -+}; -+ -+extern W100ModeSpec w100_modes[]; -+extern W100StartupInfo w100StartupInfo; -+ -+void W100DisableDisplayUpdate(W100CardInfo *w100c) -+{ -+ disp_db_buf_cntl_wr_u disp_db_buf_cntl; -+ -+ disp_db_buf_cntl.f.db_buf_cntl = 30; -+ disp_db_buf_cntl.f.en_db_buf = 0; -+ disp_db_buf_cntl.f.update_db_buf = 0; -+ MMIO_OUT32(mmDISP_DB_BUF_CNTL, disp_db_buf_cntl.val); -+} -+ -+void W100EnableDisplayUpdate(W100CardInfo *w100c) -+{ -+ disp_db_buf_cntl_wr_u disp_db_buf_cntl; -+ -+ disp_db_buf_cntl.f.db_buf_cntl = 30; -+ disp_db_buf_cntl.f.en_db_buf = 1; -+ disp_db_buf_cntl.f.update_db_buf = 1; -+ MMIO_OUT32(mmDISP_DB_BUF_CNTL, disp_db_buf_cntl.val); -+} -+ -+void W100SetupGraphicEngine(W100CardInfo *w100c) -+{ -+ eng_cntl_u eng_cntl; -+ sc_bottom_right_u bottomright; -+ rbbm_cntl_u rbbm_cntl; -+ dst_pitch_u dpitch; -+ dst_offset_u doffset; -+ src_pitch_u spitch; -+ src_offset_u soffset; -+ sc_top_left_u tl; -+ sc_bottom_right_u br; -+ src_sc_bottom_right_u srcbr; -+ dp_gui_master_cntl_u gmc; -+ dp_mix_u dp_mix; -+ dp_cntl_u dp_cntl; -+ dp_datatype_u dp_datatype; -+ -+ DBG_IMAGEON(("W100SetupGraphicEngine(offset:%p, pitch:%d)\n", -+ w100c->hw_window.offset, -+ w100c->hw_window.width)); -+ -+ eng_cntl.val = MMIO_IN32(mmENG_CNTL); -+ eng_cntl.f.erc_reg_wr_ws = 0; -+ MMIO_OUT32(mmENG_CNTL, eng_cntl.val); -+ -+ rbbm_cntl.val = 0; -+ rbbm_cntl.f.abortclks_hi = 4; -+ rbbm_cntl.f.abortclks_cp = 4; -+ rbbm_cntl.f.abortclks_cfifo = 2; -+ MMIO_OUT32(mmRBBM_CNTL, rbbm_cntl.val); -+ -+ bottomright.val = 0; -+ bottomright.f.sc_bottom = 0x1fff; -+ bottomright.f.sc_right = 0x1fff; -+ MMIO_OUT32(mmDEFAULT_SC_BOTTOM_RIGHT, bottomright.val); -+ -+ dpitch.val = 0; -+ dpitch.f.dst_pitch = w100c->hw_window.width; -+ MMIO_OUT32(mmDST_PITCH, dpitch.val); -+ -+ doffset.val = 0; -+ doffset.f.dst_offset = (CARD32) w100c->hw_window.offset; -+ MMIO_OUT32(mmDST_OFFSET, doffset.val); -+ -+ spitch.val = 0; -+ spitch.f.src_pitch = w100c->hw_window.width; -+ MMIO_OUT32(mmSRC_PITCH, spitch.val); -+ soffset.val = 0; -+ soffset.f.src_offset = (CARD32) w100c->hw_window.offset; -+ MMIO_OUT32(mmSRC_OFFSET, soffset.val); -+ -+ tl.f.sc_left = tl.f.sc_top = 0; -+ br.f.sc_right = br.f.sc_bottom = 0x1fff; -+ MMIO_OUT32(mmSC_TOP_LEFT, tl.val); -+ MMIO_OUT32(mmSC_BOTTOM_RIGHT, br.val); -+ -+ srcbr.f.sc_right = srcbr.f.sc_bottom = 0x1fff; -+ MMIO_OUT32(mmSRC_SC_BOTTOM_RIGHT, br.val); -+ -+ gmc.val = dp_datatype.val = dp_mix.val = dp_cntl.val = 0; -+ -+ dp_cntl.f.dst_x_dir = 1; -+ dp_cntl.f.dst_y_dir = 1; -+ dp_cntl.f.src_x_dir = 1; -+ dp_cntl.f.src_y_dir = 1; -+ dp_cntl.f.dst_major_x = 1; -+ dp_cntl.f.src_major_x = 1; -+ MMIO_OUT32(mmDP_CNTL, dp_cntl.val); -+ -+ gmc.f.gmc_src_pitch_offset_cntl = 1; -+ gmc.f.gmc_dst_pitch_offset_cntl = 1; -+ gmc.f.gmc_src_clipping = 1; -+ gmc.f.gmc_dst_clipping = 1; -+ gmc.f.gmc_brush_datatype = DP_BRUSH_SOLIDCOLOR; -+ gmc.f.gmc_dst_datatype = DP_DST_16BPP_1555; -+ gmc.f.gmc_src_datatype = DP_SRC_SOLID_COLOR_BLT; -+ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB; -+ gmc.f.gmc_default_sel = 0; -+ gmc.f.gmc_rop3 = W100SolidRop[GXcopy]; -+ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR; -+ gmc.f.gmc_clr_cmp_fcn_dis = 1; -+ gmc.f.gmc_wr_msk_dis = 1; -+ gmc.f.gmc_dp_op = DP_OP_ROP; -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, gmc.val); -+ -+ dp_datatype.f.dp_dst_datatype = gmc.f.gmc_dst_datatype; -+ dp_datatype.f.dp_brush_datatype = gmc.f.gmc_brush_datatype; -+ dp_datatype.f.dp_src2_type = 0; -+ dp_datatype.f.dp_src2_datatype = gmc.f.gmc_src_datatype; -+ dp_datatype.f.dp_src_datatype = gmc.f.gmc_src_datatype; -+ dp_datatype.f.dp_byte_pix_order = gmc.f.gmc_byte_pix_order; -+ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val); -+ -+ dp_mix.f.dp_src_source = gmc.f.gmc_dp_src_source; -+ dp_mix.f.dp_src2_source = gmc.f.gmc_dp_src_source; -+ dp_mix.f.dp_rop3 = gmc.f.gmc_rop3; -+ dp_mix.f.dp_op = gmc.f.gmc_dp_op; -+ MMIO_OUT32(mmDP_MIX, dp_mix.val); -+} -+ -+void W100ResetGraphicEngine(W100CardInfo *w100c) -+{ -+ rbbm_soft_reset_u sreset; -+ sclk_cntl_u sclk_cntl; -+ CARD32 restore_sclk; -+ -+ ErrorF("->W100ResetGraphicEngine\n"); -+ sclk_cntl.val = restore_sclk = MMIO_IN32(mmSCLK_CNTL); -+ -+ sclk_cntl.f.sclk_force_e2 = 1; -+ sclk_cntl.f.sclk_force_e3 = 1; -+ sclk_cntl.f.sclk_force_idct = 1; -+ MMIO_OUT32(mmSCLK_CNTL, sclk_cntl.val); -+ -+ sreset.val = 0; -+ sreset.f.soft_reset_e2 = 1; -+ MMIO_OUT32(mmRBBM_SOFT_RESET, sreset.val); -+ sreset.f.soft_reset_e2 = 0; -+ MMIO_OUT32(mmRBBM_SOFT_RESET, 0); -+ -+ MMIO_OUT32(mmSCLK_CNTL, restore_sclk); -+ ErrorF("<-W100ResetGraphicEngine\n"); -+} -+ -+W100ModeSpec *W100GetModeSpec(W100CardInfo *w100c, W100Mode *mode) -+{ -+ W100ModeSpec *modes; -+ for (modes = w100_modes; modes->width; modes++) { -+ if ((modes->bpp == mode->bpp) && -+ (((modes->width == mode->width) && -+ (modes->height == mode->height)) || -+ ((modes->width == mode->height) && -+ (modes->height == mode->width)))) { -+ return modes; -+ } -+ } -+ ErrorF("No matching mode spec for %dx%d@%d\n", -+ mode->width, mode->height, mode->bpp); -+ return NULL; -+} -+ -+W100ModeSpec *W100GetBestMode(W100CardInfo *w100c, int width, int height) -+{ -+ unsigned int best_x = 0xffffffff; -+ unsigned int best_y = 0xffffffff; -+ W100ModeSpec *modes, *best_mode = NULL; -+ for (modes = w100_modes; modes->width; modes++) { -+ if (modes->supported) { -+ if (((modes->width >= width) && (modes->width < best_x)) && -+ ((modes->height >= height) && (modes->height < best_y))) { -+ best_mode = modes; -+ best_x = modes->width; -+ best_y = modes->height; -+ } else if (((modes->width >= height) && (modes->width < best_y)) && -+ ((modes->height >= width) && (modes->height < best_x))) { -+ best_mode = modes; -+ best_x = modes->height; -+ best_y = modes->width; -+ } -+ } -+ } -+ if (!best_mode) { -+ ErrorF("No matching mode spec for %dx%d\n", width, height); -+ } -+ return best_mode; -+} -+ -+Bool W100GetFbMode(W100CardInfo *w100c, W100Mode *mode) -+{ -+ struct fb_var_screeninfo vinfo; -+ int i; -+ -+ if (ioctl(w100c->fbdev.fd, FBIOGET_VSCREENINFO, &vinfo) != 0) { -+ ErrorF("Unable to get framebuffer mode\n"); -+ return FALSE; -+ } -+ -+ mode->width = vinfo.xres; -+ mode->height = vinfo.yres; -+ mode->bpp = vinfo.bits_per_pixel; -+} -+ -+Bool W100CheckFbMode(W100CardInfo *w100c, W100ModeSpec *modes) -+{ -+ struct fb_var_screeninfo vinfo; -+ -+ vinfo.xres = vinfo.xres_virtual = modes->width; -+ vinfo.yres = vinfo.yres_virtual = modes->height; -+ vinfo.bits_per_pixel = modes->bpp; -+ vinfo.activate = FB_ACTIVATE_TEST; -+ -+ if (ioctl(w100c->fbdev.fd, FBIOPUT_VSCREENINFO, &vinfo) != 0) { -+ ErrorF("(W) Mode %dx%d@%d not supported\n", -+ vinfo.xres, -+ vinfo.yres, -+ vinfo.bits_per_pixel); -+ return FALSE; -+ } -+ DBG_IMAGEON(("(I) Mode %dx%d@%d supported\n", -+ vinfo.xres, -+ vinfo.yres, -+ vinfo.bits_per_pixel)); -+ return TRUE; -+} -+ -+Bool W100SetFbMode(W100CardInfo *w100c) -+{ -+ struct fb_var_screeninfo vinfo; -+ int randr = KdSubRotation(w100c->hw_window.randr, w100StartupInfo.randr); -+ -+ if (randr & (RR_Rotate_0 | RR_Rotate_180)) { -+ vinfo.xres = vinfo.xres_virtual = w100c->hw_window.mode->width; -+ vinfo.yres = vinfo.yres_virtual = w100c->hw_window.mode->height; -+ } else { -+ vinfo.xres = vinfo.xres_virtual = w100c->hw_window.mode->height; -+ vinfo.yres = vinfo.yres_virtual = w100c->hw_window.mode->width; -+ } -+ vinfo.bits_per_pixel = w100c->hw_window.mode->bpp; -+ vinfo.activate = FB_ACTIVATE_NOW; -+ int flip = (w100c->hw_window.randr > RR_Rotate_90) ? 1 : 0; -+ -+ DBG_IMAGEON(("Asking framebuffer for mode %dx%d@%d. Flipped:%d\n", -+ vinfo.xres, vinfo.yres, vinfo.bits_per_pixel, flip)); -+ if (ioctl(w100c->fbdev.fd, FBIOPUT_VSCREENINFO, &vinfo) != 0) { -+ ErrorF("Error setting mode %dx%d@%d\n", -+ vinfo.xres, -+ vinfo.yres, -+ vinfo.bits_per_pixel); -+ return FALSE; -+ } -+ W100SysFsSet(w100c, W100_SYSFS_BASE "flip", flip ? "1" : "0"); -+ return TRUE; -+} -+ -+void W100SetupGraphicWindow(W100CardInfo *w100c) -+{ -+ DBG_IMAGEON(("W100SetupGraphicWindow(width:%d,height:%d,randr:%d)\n", -+ w100c->hw_window.width, -+ w100c->hw_window.height, -+ w100c->hw_window.randr)); -+ -+ if (!W100SetFbMode(w100c)) { -+ ErrorF("Error Setting Graphic Window\n"); -+ } -+} -+ -+void W100EnableGraphicWindow(W100CardInfo *w100c) -+{ -+ graphic_ctrl_u gc; -+ -+ gc.val = MMIO_IN32(mmGRAPHIC_CTRL); -+ gc.f.en_graphic_crtc = 1; -+ gc.f.en_graphic_req = 1; -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmGRAPHIC_CTRL, gc.val); -+ W100EnableDisplayUpdate(w100c); -+} -+ -+void W100DisableGraphicWindow(W100CardInfo *w100c) -+{ -+ graphic_ctrl_u gc; -+ -+ gc.val = MMIO_IN32(mmGRAPHIC_CTRL); -+ gc.f.en_graphic_crtc = 0; -+ gc.f.en_graphic_req = 0; -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmGRAPHIC_CTRL, gc.val); -+ W100EnableDisplayUpdate(w100c); -+} -+ -+inline Bool W100WaitCmdFifoEntries(W100CardInfo *w100c, int entries) -+{ -+ rbbm_status_u rbbmStatus; -+ TIMEOUT_LOCALS; -+ -+ if (entries > W100_CMDFIFO_SIZE) -+ return FALSE; -+ -+ if (entries <= w100c->cmdfifo_entries) { -+ w100c->cmdfifo_entries -= entries; -+ return TRUE; -+ } -+ -+ WHILE_NOT_TIMEOUT(.2) { -+ rbbmStatus.val = MMIO_IN32(mmRBBM_STATUS); -+ w100c->cmdfifo_entries = rbbmStatus.f.cmdfifo_avail; -+ if (w100c->cmdfifo_entries >= entries) { -+ break; -+ } -+ } -+ if (TIMEDOUT()) { -+ ErrorF("Not enough CMDFIFO entries: %d (%d needed)\n", -+ w100c->cmdfifo_entries, entries); -+ return FALSE; -+ } -+ w100c->cmdfifo_entries -= entries; -+ return TRUE; -+} -+ -+Bool W100WaitIdle(W100CardInfo *w100c) -+{ -+ rbbm_status_u rbbm_status; -+ TIMEOUT_LOCALS; -+ -+ DBG_IMAGEON(("W100WaitIdle\n")); -+ if (!W100WaitCmdFifoEntries(w100c, W100_CMDFIFO_SIZE)) { -+ return FALSE; -+ } -+ -+ WHILE_NOT_TIMEOUT(.2) { -+ rbbm_status.val = MMIO_IN32(mmRBBM_STATUS); -+ if (rbbm_status.f.gui_active == 0) { -+ break; -+ } -+ } -+ if (TIMEDOUT()) { -+ ErrorF("Timeout waiting for idle. rbbm_status: 0x%08x\n" -+ " .cmdfifo_avail : %d\n" -+ " .cf_pipe_busy : %d\n" -+ " .eng_ev_busy : %d\n" -+ " .cp_cmdstrm_busy : %d\n" -+ " .e2_busy : %d\n" -+ " .rb2d_busy : %d\n" -+ " .rb3d_busy : %d\n" -+ " .se_busy : %d\n" -+ " .re_busy : %d\n" -+ " .tam_busy : %d\n" -+ " .tdm_busy : %d\n" -+ " .pb_busy : %d\n" -+ " .gui_active : %d\n", -+ rbbm_status.val, -+ rbbm_status.f.cmdfifo_avail, -+ rbbm_status.f.cf_pipe_busy, -+ rbbm_status.f.eng_ev_busy, -+ rbbm_status.f.cp_cmdstrm_busy, -+ rbbm_status.f.e2_busy, -+ rbbm_status.f.rb2d_busy, -+ rbbm_status.f.rb3d_busy, -+ rbbm_status.f.se_busy, -+ rbbm_status.f.re_busy, -+ rbbm_status.f.tam_busy, -+ rbbm_status.f.tdm_busy, -+ rbbm_status.f.pb_busy, -+ rbbm_status.f.gui_active); -+ ErrorF("Last context: src(datatype:%d,pitch:%d,offset:0x%08x)\n" -+ " dst(datatype:%d,pitch:%d,offset:0x%08x)\n" -+ " xform(dx:%d,dy:%d)\n" -+ " mask(pm:0x%08x,enable:%d)\n", -+ w100c->ctx.src.datatype, -+ w100c->ctx.src.pitch, -+ w100c->ctx.src.offset, -+ w100c->ctx.dst.datatype, -+ w100c->ctx.dst.pitch, -+ w100c->ctx.dst.offset, -+ w100c->ctx.xform.dx, -+ w100c->ctx.xform.dy, -+ w100c->ctx.mask.pm, -+ w100c->ctx.mask.enable); -+ -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+void W100ResetContext(W100CardInfo *w100c) -+{ -+ w100c->ctx.dst.datatype = DP_DST_16BPP_1555; -+ w100c->ctx.dst.pitch = 0; -+ w100c->ctx.dst.offset = 0; -+ w100c->ctx.dst.videomem = 0; -+ -+ w100c->ctx.src.datatype = DP_SRC_COLOR_SAME_AS_DST; -+ w100c->ctx.src.pitch = 0; -+ w100c->ctx.src.offset = 0; -+ w100c->ctx.src.videomem = 0; -+ -+ w100c->ctx.xform.dx = 0; -+ w100c->ctx.xform.dy = 0; -+ w100c->ctx.xform.randr = 0; -+ w100c->ctx.xform.mirror = FALSE; -+ w100c->ctx.xform.dataPath = 0x0000003f; -+ -+ w100c->ctx.mask.pm = 0; -+ w100c->ctx.mask.enable = FALSE; -+} -+ -+CARD32 W100ComputeSolidGmc(W100CardInfo *w100c, CARD8 alu) -+{ -+ dp_gui_master_cntl_u gmc; -+ -+ gmc.val = 0; -+ gmc.f.gmc_dst_pitch_offset_cntl = 1; -+ gmc.f.gmc_dst_clipping = 0; -+ gmc.f.gmc_brush_datatype = DP_BRUSH_SOLIDCOLOR; -+ gmc.f.gmc_dst_datatype = w100c->ctx.dst.datatype; -+ gmc.f.gmc_dp_op = DP_OP_ROP; -+ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB; -+ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR; -+ gmc.f.gmc_rop3 = W100SolidRop[alu]; -+ gmc.f.gmc_clr_cmp_fcn_dis = 1; -+ if (w100c->ctx.mask.enable) { -+ gmc.f.gmc_wr_msk_dis = 0; -+ } else { -+ gmc.f.gmc_wr_msk_dis = 1; -+ } -+ return gmc.val; -+} -+ -+CARD32 W100ComputeCopyGmc(W100CardInfo *w100c, CARD8 alu) -+{ -+ dp_gui_master_cntl_u gmc; -+ -+ gmc.val = 0; -+ gmc.f.gmc_src_pitch_offset_cntl = 1; -+ gmc.f.gmc_dst_pitch_offset_cntl = 1; -+ gmc.f.gmc_dst_clipping = 0; -+ gmc.f.gmc_src_clipping = 0; -+ gmc.f.gmc_src_datatype = w100c->ctx.src.datatype; -+ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR; -+ gmc.f.gmc_brush_datatype = DP_BRUSH_NONE; -+ gmc.f.gmc_dst_datatype = w100c->ctx.dst.datatype; -+ gmc.f.gmc_dp_op = DP_OP_ROP; -+ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB; -+ gmc.f.gmc_rop3 = W100BltRop[alu]; -+ gmc.f.gmc_clr_cmp_fcn_dis = 1; -+ if (w100c->ctx.mask.enable) { -+ gmc.f.gmc_wr_msk_dis = 0; -+ } else { -+ gmc.f.gmc_wr_msk_dis = 1; -+ } -+ return gmc.val; -+} -+ -+CARD32 W100ComputeAritGmc(W100CardInfo *w100c, CARD8 alu) -+{ -+ dp_gui_master_cntl_u gmc; -+ -+ gmc.val = 0; -+ gmc.f.gmc_src_pitch_offset_cntl = 1; -+ gmc.f.gmc_dst_pitch_offset_cntl = 1; -+ gmc.f.gmc_dst_clipping = 0; -+ gmc.f.gmc_src_clipping = 0; -+ gmc.f.gmc_src_datatype = w100c->ctx.src.datatype; -+ gmc.f.gmc_dst_datatype = w100c->ctx.dst.datatype; -+ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR; -+ gmc.f.gmc_brush_datatype = DP_BRUSH_NONE; -+ gmc.f.gmc_dp_op = DP_OP_ARITHMETIC; -+ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB; -+ gmc.f.gmc_rop3 = W100BltRop[alu]; -+ gmc.f.gmc_clr_cmp_fcn_dis = 1; -+ if (w100c->ctx.mask.enable) { -+ gmc.f.gmc_wr_msk_dis = 0; -+ } else { -+ gmc.f.gmc_wr_msk_dis = 1; -+ } -+ return gmc.val; -+} -+ -+void W100SetXForm(W100CardInfo *w100c, int dx, int dy) -+{ -+ dp_cntl_u dp_cntl; -+ -+ w100c->ctx.xform.dx = dx; -+ w100c->ctx.xform.dy = dy; -+ -+ dp_cntl.val = 0; -+ dp_cntl.f.src_x_dir = 1; -+ dp_cntl.f.src_y_dir = 1; -+ dp_cntl.f.src_major_x = 1; -+ dp_cntl.f.dst_major_x = 1; -+ -+ if (dx >= 0) { -+ dp_cntl.f.dst_x_dir = 1; -+ } else { -+ dp_cntl.f.dst_x_dir = 0; -+ } -+ if (dy >= 0) { -+ dp_cntl.f.dst_y_dir = 1; -+ } else { -+ dp_cntl.f.dst_y_dir = 0; -+ } -+ w100c->ctx.xform.dataPath = dp_cntl.val; -+} -+ -+void W100SetRotation(W100CardInfo *w100c, -+ int randr, -+ Bool mirror) -+{ -+ dp_cntl_u dp_cntl; -+ w100c->ctx.xform.randr = randr; -+ w100c->ctx.xform.mirror = mirror; -+ dp_cntl.val = 0; -+ dp_cntl.f.src_x_dir = 1; -+ dp_cntl.f.src_y_dir = 1; -+ dp_cntl.f.src_major_x = 1; -+ -+ -+ switch (randr & RR_Rotate_All) { -+ case RR_Rotate_0: -+ dp_cntl.f.dst_x_dir = mirror ? 0 : 1; -+ dp_cntl.f.dst_y_dir = 1; -+ dp_cntl.f.dst_major_x = 1; -+ break; -+ case RR_Rotate_90: -+ dp_cntl.f.dst_x_dir = 0; -+ dp_cntl.f.dst_y_dir = mirror ? 0 : 1; -+ dp_cntl.f.dst_major_x = 0; -+ break; -+ case RR_Rotate_180: -+ dp_cntl.f.dst_x_dir = mirror ? 1 : 0; -+ dp_cntl.f.dst_y_dir = 0; -+ dp_cntl.f.dst_major_x = 1; -+ break; -+ case RR_Rotate_270: -+ dp_cntl.f.dst_x_dir = 1; -+ dp_cntl.f.dst_y_dir = mirror ? 1 : 0; -+ dp_cntl.f.dst_major_x = 0; -+ break; -+ } -+ w100c->ctx.xform.dataPath = dp_cntl.val; -+} -+ -+void W100SetPixelMask(W100CardInfo *w100c, Pixel mask) -+{ -+ if (mask != 0xffffffff) { -+ w100c->ctx.mask.enable = TRUE; -+ w100c->ctx.mask.pm = mask; -+ } else { -+ w100c->ctx.mask.enable = FALSE; -+ } -+} -+ -+Bool W100SetSource(KdScreenInfo *screen, -+ CARD32 srcPitch, -+ CARD32 srcOffset, -+ CARD8 bpp) -+{ -+ W100CardInfo(screen); -+ int i; -+ w100c->ctx.src.pitch = srcPitch * 8 / bpp; -+ switch (bpp) { -+ case 1: -+ w100c->ctx.src.datatype = DP_SRC_1BPP_OPA; -+ break; -+ case 4: -+ w100c->ctx.src.datatype = DP_SRC_4BPP; -+ break; -+ case 12: -+ w100c->ctx.src.datatype = DP_SRC_12BPP_PACKED; -+ break; -+ case 8: -+ case 16: -+ w100c->ctx.src.datatype = DP_SRC_COLOR_SAME_AS_DST; -+ break; -+ default: -+ return FALSE; -+ } -+ -+ for (i = 0; i < screen->num_videomem_areas; i++) { -+ KdVideoMemArea *vidmem = screen->videomem_areas[i]; -+ if ((((CARD8*)srcOffset) >= vidmem->base) && -+ (((CARD8*)srcOffset) <= (vidmem->base + vidmem->size))) { -+ w100c->ctx.src.offset = (CARD32) W100_HOST2CARD(srcOffset); -+ if (w100c->last_src_videomem != i) { -+ W100WaitIdle(w100c); -+ } -+ w100c->last_src_videomem = i; -+ DBG_IMAGEON(("Setting src(pitch:%d,offset:0x%08x,type:%d)\n", -+ w100c->ctx.src.pitch, -+ w100c->ctx.src.offset, -+ w100c->ctx.src.datatype)); -+ return TRUE; -+ } -+ } -+ return FALSE; -+} -+ -+Bool W100SetDestination(KdScreenInfo *screen, -+ CARD32 dstPitch, -+ CARD32 dstOffset, -+ CARD8 bpp) -+{ -+ W100CardInfo(screen); -+ int i; -+ w100c->ctx.dst.pitch = dstPitch * 8 / bpp; -+ switch (bpp) { -+ case 8: -+ w100c->ctx.dst.datatype = DP_DST_8BPP; -+ break; -+ case 16: -+ w100c->ctx.dst.datatype = DP_DST_16BPP_1555; -+ break; -+ default: -+ return FALSE; -+ } -+ -+ for (i = 0; i < screen->num_videomem_areas; i++) { -+ KdVideoMemArea *vidmem = screen->videomem_areas[i]; -+ if ((((CARD8*)dstOffset) >= vidmem->base) && -+ (((CARD8*)dstOffset) <= (vidmem->base + vidmem->size))) { -+ w100c->ctx.dst.offset = (CARD32) W100_HOST2CARD(dstOffset); -+ if (w100c->last_dst_videomem != i) { -+ W100WaitIdle(w100c); -+ } -+ w100c->last_dst_videomem = i; -+ DBG_IMAGEON(("Setting dst(pitch:%d,offset:0x%08x,type:%d)\n", -+ w100c->ctx.dst.pitch, -+ w100c->ctx.dst.offset, -+ w100c->ctx.dst.datatype)); -+ return TRUE; -+ } -+ } -+ return FALSE; -+} -+ -+Bool W100SetSourcePixmap(PixmapPtr pPix) -+{ -+ KdScreenPriv(pPix->drawable.pScreen); -+ -+ return W100SetSource(pScreenPriv->screen, -+ pPix->devKind, -+ (CARD32) pPix->devPrivate.ptr, -+ pPix->drawable.bitsPerPixel); -+} -+ -+Bool W100SetDestinationPixmap(PixmapPtr pPix) -+{ -+ KdScreenPriv(pPix->drawable.pScreen); -+ -+ return W100SetDestination(pScreenPriv->screen, -+ pPix->devKind, -+ (CARD32) pPix->devPrivate.ptr, -+ pPix->drawable.bitsPerPixel); -+} -+ -+void W100MapToDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst) -+{ -+ switch (w100c->hw_window.randr & RR_Rotate_All) { -+ case RR_Rotate_0: -+ dst->x1 = src->x1; -+ dst->y1 = src->y1; -+ dst->x2 = src->x2; -+ dst->y2 = src->y2; -+ break; -+ case RR_Rotate_90: -+ dst->x1 = w100c->hw_window.height - src->y2 - 1; -+ dst->y1 = src->x1; -+ dst->x2 = w100c->hw_window.height - src->y1 - 1; -+ dst->y2 = src->x2; -+ break; -+ case RR_Rotate_180: -+ dst->x1 = w100c->hw_window.width - src->x2 - 1; -+ dst->y1 = w100c->hw_window.height - src->y2 - 1; -+ dst->x2 = w100c->hw_window.width - src->x1 - 1; -+ dst->y2 = w100c->hw_window.height - src->y1 - 1; -+ break; -+ case RR_Rotate_270: -+ dst->x1 = src->y1; -+ dst->y1 = w100c->hw_window.width - src->x2 - 1; -+ dst->x2 = src->y2; -+ dst->y2 = w100c->hw_window.width - src->x1 - 1; -+ break; -+ } -+ DBG_IMAGEON(("MapToDevice (x1:%d,y1:%d,x2:%d,y2:%d)->(x1:%d,y1:%d,x2:%d,y2:%d)\n", -+ src->x1, src->y1, src->x2, src->y2, -+ dst->x1, dst->y1, dst->x2, dst->y2)); -+} -+ -+void W100MapFromDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst) -+{ -+ switch (w100c->hw_window.randr & RR_Rotate_All) { -+ case RR_Rotate_0: -+ dst->x1 = src->x1; -+ dst->y1 = src->y1; -+ dst->x2 = src->x2; -+ dst->y2 = src->y2; -+ break; -+ case RR_Rotate_90: -+ dst->x1 = src->y1; -+ dst->y1 = w100c->hw_window.height - src->x2 - 1; -+ dst->x2 = src->y2; -+ dst->y2 = w100c->hw_window.height - src->x1 - 1; -+ break; -+ case RR_Rotate_180: -+ dst->x1 = w100c->hw_window.width - src->x2 - 1; -+ dst->y1 = w100c->hw_window.height - src->y2 - 1; -+ dst->x2 = w100c->hw_window.width - src->x1 - 1; -+ dst->y2 = w100c->hw_window.height - src->y1 - 1; -+ break; -+ case RR_Rotate_270: -+ dst->x1 = w100c->hw_window.height - src->y2 - 1; -+ dst->y1 = src->x1; -+ dst->x2 = w100c->hw_window.width - src->y1 - 1; -+ dst->y2 = src->x2; -+ break; -+ } -+ DBG_IMAGEON(("MapFromDevice (x1:%d,y1:%d,x2:%d,y2:%d)->(x1:%d,y1:%d,x2:%d,y2:%d)\n", -+ src->x1, src->y1, src->x2, src->y2, -+ dst->x1, dst->y1, dst->x2, dst->y2)); -+} -+ -+void W100MoveTo(BoxPtr src, int x, int y) -+{ -+ src->x1 += x; -+ src->y1 += y; -+ src->x2 += x; -+ src->y2 += y; -+} -+ -+void W100ChangeOrigin(BoxPtr src, int x, int y) -+{ -+ src->x1 -= x; -+ src->y1 -= y; -+ src->x2 -= x; -+ src->y2 -= y; -+} -+ -+void W100ScaleBox(BoxPtr src, BoxPtr dst, int scale) -+{ -+ if (scale >= 0) { -+ dst->x1 = src->x1 << scale; -+ dst->x2 = src->x2 << scale; -+ dst->y1 = src->y1 << scale; -+ dst->y2 = src->y2 << scale; -+ } else { -+ dst->x1 = src->x1 >> -scale; -+ dst->x2 = src->x2 >> -scale; -+ dst->y1 = src->y1 >> -scale; -+ dst->y2 = src->y2 >> -scale; -+ } -+} -+ -+void W100TrajectoryOrigin(W100CardInfo *w100c, BoxPtr box, short *x, short *y) -+{ -+ switch (w100c->ctx.xform.randr & RR_Rotate_All) { -+ case RR_Rotate_0: -+ if (w100c->ctx.xform.mirror) { -+ *x = box->x2; -+ } else { -+ *x = box->x1; -+ } -+ *y = box->y1; -+ break; -+ case RR_Rotate_90: -+ *x = box->x2; -+ if (w100c->ctx.xform.mirror) { -+ *y = box->y2; -+ } else { -+ *y = box->y1; -+ } -+ break; -+ case RR_Rotate_180: -+ if (w100c->ctx.xform.mirror) { -+ *x = box->x1; -+ } else { -+ *x = box->x2; -+ } -+ *y = box->y2; -+ break; -+ case RR_Rotate_270: -+ *x = box->x1; -+ if (w100c->ctx.xform.mirror) { -+ *y = box->y1; -+ } else { -+ *y = box->y2; -+ } -+ } -+} -+ -+CARD8 W100GetScaler(CARD16 dstsize, CARD16 srcsize) -+{ -+ return W100_MAX(1, W100_MIN(31, ((16 * srcsize) + dstsize - 1) / dstsize)); -+ -+} -+ -+CARD16 W100ApplyScaler(CARD16 srcsize, CARD8 scaler) -+{ -+ return ((srcsize * 16) + (scaler - 1)) / scaler; -+} -+ -+ -+static void W100Blt(KdScreenInfo *screen, -+ int randr, int bpp, -+ CARD32 srcOffset, -+ CARD16 srcPitch, -+ BoxPtr srcBox, -+ CARD32 dstOffset, -+ CARD16 dstPitch, -+ BoxPtr dstBox) -+{ -+ ScreenPtr pScreen = screen->pScreen; -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ int fifoEntries = 9; -+ Bool hasXForm = FALSE; -+ eng_cntl_u eng_cntl; -+ src_x_y_u src_x_y; -+ dst_x_y_u dst_x_y; -+ src_width_u src_width; -+ src_height_u src_height; -+ dst_width_height_u dst_width_height; -+ CARD16 dstX; -+ CARD16 dstY; -+ -+ if (randr & (RR_Rotate_90|RR_Rotate_270)) { -+ hasXForm = TRUE; -+ eng_cntl.val = w100c->regs.ENG_CNTL; -+ eng_cntl.f.dis_rop_src_uses_dst_w_h = 1; -+ eng_cntl.f.dis_src_uses_dst_dirmaj = 1; -+ fifoEntries += 4; -+ } -+ -+ W100ResetContext(w100c); -+ W100SetRotation(w100c, randr, FALSE); -+ W100SetSource(screen, srcPitch, srcOffset, bpp); -+ W100SetDestination(screen, dstPitch, dstOffset, bpp); -+ W100TrajectoryOrigin(w100c, dstBox, &dstX, &dstY); -+ -+ src_x_y.f.src_x = srcBox->x1; -+ src_x_y.f.src_y = srcBox->y1; -+ dst_x_y.f.dst_x = dstX; -+ dst_x_y.f.dst_y = dstY; -+ src_width.f.src_width = srcBox->x2 - srcBox->x1 + 1; -+ src_height.f.src_height = srcBox->y2 - srcBox->y1 + 1; -+ dst_width_height.f.dst_height = dstBox->y2 - dstBox->y1 + 1; -+ dst_width_height.f.dst_width_b0 = (dstBox->x2 - dstBox->x1 + 1) & 0xff; -+ dst_width_height.f.dst_width_b1 = ((dstBox->x2 - dstBox->x1 + 1) >> 8) & 0x3f; -+ -+ DBG_IMAGEON(("W100Blt src(x:%d,y:%d,w:%d,h:%d) dst(x:%d,y:%d,w:%d,h:%d)\n", -+ src_x_y.f.src_x, -+ src_x_y.f.src_y, -+ src_width.f.src_width, -+ src_height.f.src_height, -+ dst_x_y.f.dst_x, -+ dst_x_y.f.dst_y, -+ dst_width_height.f.dst_width_b0 | -+ dst_width_height.f.dst_width_b1 << 8, -+ dst_width_height.f.dst_height)); -+ -+ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) { -+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch); -+ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset); -+ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch); -+ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset); -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeCopyGmc(w100c, GXcopy)); -+ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath); -+ if (hasXForm) { -+ MMIO_OUT32(mmENG_CNTL, eng_cntl.val); -+ MMIO_OUT32(mmSRC_WIDTH, src_width.val); -+ MMIO_OUT32(mmSRC_HEIGHT, src_height.val); -+ } -+ MMIO_OUT32(mmSRC_X_Y, src_x_y.val); -+ MMIO_OUT32(mmDST_X_Y, dst_x_y.val); -+ MMIO_OUT32(mmDST_WIDTH_HEIGHT, dst_width_height.val); -+ /* Restore state */ -+ if (hasXForm) { -+ MMIO_OUT32(mmENG_CNTL, w100c->regs.ENG_CNTL); -+ } -+ } else { -+ ErrorF("Unable to perform Blitting\n"); -+ } -+} -+ -+static void W100StretchBlt(KdScreenInfo *screen, -+ int randr, -+ int bpp, -+ CARD32 srcOffset, -+ CARD16 srcPitch, -+ BoxPtr srcBox, -+ CARD32 dstOffset, -+ CARD16 dstPitch, -+ BoxPtr dstBox, -+ CARD8 xscaler, -+ CARD8 yscaler) -+{ -+ ScreenPtr pScreen = screen->pScreen; -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ Bool hasXForm = FALSE; -+ dp_datatype_u dp_datatype; -+ dp_mix_u dp_mix; -+ eng_cntl_u eng_cntl; -+ e2_arithmetic_cntl_u e2; -+ src_inc_u src_inc; -+ src_x_y_u src_x_y; -+ dst_x_y_u dst_x_y; -+ src_width_u src_width; -+ src_height_u src_height; -+ dst_width_height_u dst_width_height; -+ int firstStage = 10; -+ int secondStage = 10; -+ CARD16 dx, dy, sw, sh, dw, dh; -+ BoxRec dst; -+ -+ DBG_IMAGEON(("W100StretchBlt(randr:%d,bpp:%d," -+ "src(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d)," -+ "dst(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d)," -+ "xscaler:%d,yscaler:%d)\n", -+ randr, bpp, -+ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2, -+ srcPitch, srcOffset, -+ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2, -+ dstPitch, dstOffset, -+ xscaler, yscaler)); -+ -+ sw = W100ApplyScaler(srcBox->x2 - srcBox->x1 + 1, xscaler); -+ sh = W100ApplyScaler(srcBox->y2 - srcBox->y1 + 1, yscaler); -+ -+ if (randr & (RR_Rotate_90|RR_Rotate_270)) { -+ hasXForm = TRUE; -+ eng_cntl.val = w100c->regs.ENG_CNTL; -+ eng_cntl.f.dis_rop_src_uses_dst_w_h = 1; -+ eng_cntl.f.dis_src_uses_dst_dirmaj = 1; -+ ++firstStage; -+ ++secondStage; -+ dh = sw; -+ dw = sh; -+ } else { -+ dh = sh; -+ dw = sw; -+ } -+ -+ dst.x1 = dstBox->x1; -+ dst.y1 = dstBox->y1; -+ dst.x2 = dst.x1 + dw - 1; -+ dst.y2 = dst.y1 + dh - 1; -+ -+ W100ResetContext(w100c); -+ W100SetRotation(w100c, randr, FALSE); -+ W100SetSource(screen, srcPitch, srcOffset, bpp); -+ W100SetDestination(screen, dstPitch, dstOffset, bpp); -+ W100TrajectoryOrigin(w100c, &dst, &dx, &dy); -+ -+ src_inc.val = 0; -+ src_inc.f.src_xinc = xscaler; -+ src_inc.f.src_yinc = yscaler; -+ -+ dp_datatype.val = 0; -+ dp_datatype.f.dp_brush_datatype = DP_BRUSH_SOLIDCOLOR; -+ dp_datatype.f.dp_dst_datatype = w100c->ctx.dst.datatype; -+ dp_datatype.f.dp_src_datatype = w100c->ctx.src.datatype; -+ dp_datatype.f.dp_byte_pix_order = DP_PIX_ORDER_LSB2MSB; -+ -+ dp_mix.val = 0; -+ dp_mix.f.dp_op = DP_OP_ARITHMETIC; -+ dp_mix.f.dp_src_source = DP_SRC_MEM_RECTANGULAR; -+ dp_mix.f.dp_rop3 = W100BltRop[GXcopy]; -+ -+ e2.val = 0; -+ e2.f.opcode = E2_OPC_STRETCH_SRC2; -+ e2.f.srcblend = E2_SRCBLEND_ZERO; -+ e2.f.dstblend = E2_DSTBLEND_ZERO; -+ -+ src_x_y.f.src_x = srcBox->x1; -+ src_x_y.f.src_y = srcBox->y1; -+ dst_x_y.f.dst_x = dx; -+ dst_x_y.f.dst_y = dy; -+ src_width.f.src_width = sw + 1; -+ src_height.f.src_height = sh; -+ dst_width_height.f.dst_height = dh; -+ dst_width_height.f.dst_width_b0 = dw & 0xff; -+ dst_width_height.f.dst_width_b1 = (dw >> 8) & 0x3f; -+ -+ -+ if (W100WaitCmdFifoEntries(w100c, firstStage)) { -+ /* Set Source */ -+ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch); -+ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset); -+ -+ /* Set Destination */ -+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch); -+ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset); -+ -+ /* Prepare for Stretch Operation */ -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeAritGmc(w100c, GXcopy)); -+ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val); -+ MMIO_OUT32(mmDP_MIX, dp_mix.val); -+ MMIO_OUT32(mmE2_ARITHMETIC_CNTL, e2.val); -+ -+ /* Set Data Trajectory */ -+ if (hasXForm) { -+ MMIO_OUT32(mmENG_CNTL, eng_cntl.val); -+ } -+ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath); -+ } else { -+ ErrorF("Error preparing for Stretch operation\n"); -+ return; -+ } -+ -+ if (W100WaitCmdFifoEntries(w100c, secondStage)) { -+ /* Perform blitting */ -+ MMIO_OUT32(mmSRC_X_Y, src_x_y.val); -+ MMIO_OUT32(mmDST_X_Y, dst_x_y.val); -+ MMIO_OUT32(mmSRC_WIDTH, src_width.val); -+ MMIO_OUT32(mmSRC_HEIGHT, src_height.val); -+ MMIO_OUT32(mmSRC_INC, src_inc.val); -+ MMIO_OUT32(mmDST_WIDTH_HEIGHT, dst_width_height.val); -+ /* Restore state */ -+ if (hasXForm) { -+ MMIO_OUT32(mmENG_CNTL, w100c->regs.ENG_CNTL); -+ } -+ } else { -+ ErrorF("Error performing Stretch operation\n"); -+ } -+} -+ -+static void W100ScaledBlt(KdScreenInfo *screen, -+ int randr, -+ int bpp, -+ CARD32 srcOffset, -+ CARD16 srcPitch, -+ BoxPtr srcBox, -+ CARD32 dstOffset, -+ CARD16 dstPitch, -+ BoxPtr dstBox, -+ CARD8 xscaler, -+ CARD8 yscaler) -+{ -+ ScreenPtr pScreen = screen->pScreen; -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ Bool hasXForm = FALSE; -+ dp_datatype_u dp_datatype; -+ dp_mix_u dp_mix; -+ eng_cntl_u eng_cntl; -+ e2_arithmetic_cntl_u e2; -+ src_inc_u src_inc; -+ src_x_y_u src_x_y; -+ src2_x_y_u src2_x_y; -+ dst_x_y_u dst_x_y; -+ src_width_u src_width; -+ src_height_u src_height; -+ dst_width_height_u dst_width_height; -+ int firstStage = 11; -+ int secondStage = 11; -+ CARD16 dx, dy, sw, sh, dw, dh; -+ BoxRec dst; -+ -+ DBG_IMAGEON(("W100ScaledBlt(randr:%d,bpp:%d," -+ "src(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d)," -+ "dst(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d)," -+ "xscaler:%d,yscaler:%d)\n", -+ randr, bpp, -+ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2, -+ srcPitch, srcOffset, -+ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2, -+ dstPitch, dstOffset, -+ xscaler, yscaler)); -+ -+ sw = W100ApplyScaler(srcBox->x2 - srcBox->x1 + 1, xscaler); -+ sh = W100ApplyScaler(srcBox->y2 - srcBox->y1 + 1, yscaler); -+ -+ if (randr & (RR_Rotate_90|RR_Rotate_270)) { -+ hasXForm = TRUE; -+ eng_cntl.val = w100c->regs.ENG_CNTL; -+ eng_cntl.f.dis_rop_src_uses_dst_w_h = 1; -+ eng_cntl.f.dis_src_uses_dst_dirmaj = 1; -+ ++firstStage; -+ ++secondStage; -+ dh = sw; -+ dw = sh; -+ } else { -+ dh = sh; -+ dw = sw; -+ } -+ -+ dst.x1 = dstBox->x1; -+ dst.y1 = dstBox->y1; -+ dst.x2 = dst.x1 + dw - 1; -+ dst.y2 = dst.y1 + dh - 1; -+ -+ W100ResetContext(w100c); -+ W100SetRotation(w100c, randr, FALSE); -+ W100SetSource(screen, srcPitch, srcOffset, bpp); -+ W100SetDestination(screen, dstPitch, dstOffset, bpp); -+ W100TrajectoryOrigin(w100c, &dst, &dx, &dy); -+ -+ DBG_IMAGEON(("Corrected dst(x1:%d,y1:%d,x2:%d,y2:%d). Origin(%d,%d)\n", -+ dst.x1, dst.y1, dst.x2, dst.y2, -+ dx, dy)); -+ -+ src_inc.val = 0; -+ src_inc.f.src_xinc = xscaler; -+ src_inc.f.src_yinc = yscaler; -+ -+ dp_datatype.val = 0; -+ dp_datatype.f.dp_brush_datatype = DP_BRUSH_SOLIDCOLOR; -+ dp_datatype.f.dp_src2_type = 1; -+ dp_datatype.f.dp_dst_datatype = w100c->ctx.dst.datatype; -+ dp_datatype.f.dp_src2_datatype = w100c->ctx.src.datatype; -+ dp_datatype.f.dp_src_datatype = w100c->ctx.src.datatype; -+ dp_datatype.f.dp_byte_pix_order = DP_PIX_ORDER_LSB2MSB; -+ -+ dp_mix.val = 0; -+ dp_mix.f.dp_op = DP_OP_ARITHMETIC; -+ dp_mix.f.dp_src_source = DP_SRC_MEM_RECTANGULAR; -+ dp_mix.f.dp_src2_source = DP_SRC_MEM_RECTANGULAR; -+ dp_mix.f.dp_rop3 = W100BltRop[GXcopy]; -+ -+ e2.val = 0; -+ e2.f.opcode = E2_OPC_SCALE_SRC2; -+ e2.f.srcblend = E2_SRCBLEND_ZERO; -+ e2.f.dstblend = E2_DSTBLEND_ZERO; -+ -+ -+ src_x_y.f.src_x = srcBox->x1; -+ src_x_y.f.src_y = srcBox->y1; -+ src2_x_y.f.src_x = srcBox->x1; -+ src2_x_y.f.src_y = srcBox->y1 + 4; -+ dst_x_y.f.dst_x = dx; -+ dst_x_y.f.dst_y = dy; -+ src_width.f.src_width = sw + 1; -+ src_height.f.src_height = sh; -+ dst_width_height.f.dst_height = dh; -+ dst_width_height.f.dst_width_b0 = dw & 0xff; -+ dst_width_height.f.dst_width_b1 = (dw >> 8) & 0x3f; -+ -+ if (W100WaitCmdFifoEntries(w100c, firstStage)) { -+ /* Set Source */ -+ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch); -+ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset); -+ -+ /* Set Destination */ -+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch); -+ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset); -+ /* Set second source */ -+ MMIO_OUT32(mmSRC2_PITCH, w100c->ctx.src.pitch); -+ MMIO_OUT32(mmSRC2_OFFSET, w100c->ctx.src.offset); -+ -+ /* Prepare for Stretch Operation */ -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeAritGmc(w100c, GXcopy)); -+ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val); -+ MMIO_OUT32(mmDP_MIX, dp_mix.val); -+ MMIO_OUT32(mmE2_ARITHMETIC_CNTL, e2.val); -+ /* Set Data Trajectory */ -+ if (hasXForm) { -+ MMIO_OUT32(mmENG_CNTL, eng_cntl.val); -+ } -+ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath); -+ } else { -+ ErrorF("Unable to prepare for Scaled Blitting\n"); -+ return; -+ } -+ if (W100WaitCmdFifoEntries(w100c, secondStage)) { -+ /* Perform blitting */ -+ MMIO_OUT32(mmSRC_X_Y, src_x_y.val); -+ MMIO_OUT32(mmSRC2_X_Y, src2_x_y.val); -+ MMIO_OUT32(mmSRC2_WIDTH, src_width.val); -+ MMIO_OUT32(mmSRC2_HEIGHT, src_height.val); -+ MMIO_OUT32(mmSRC_INC, src_inc.val); -+ MMIO_OUT32(mmSRC2_INC, src_inc.val); -+ MMIO_OUT32(mmDST_X_Y, dst_x_y.val); -+ MMIO_OUT32(mmSRC_WIDTH, src_width.val); -+ MMIO_OUT32(mmSRC_HEIGHT, src_height.val); -+ MMIO_OUT32(mmDST_WIDTH_HEIGHT, dst_width_height.val); -+ /* Restore state */ -+ if (hasXForm) { -+ MMIO_OUT32(mmENG_CNTL, w100c->regs.ENG_CNTL); -+ } -+ /* Without this, solid blitting is no longer working correctly */ -+ dp_datatype.f.dp_src2_type = 0; -+ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val); -+ } else { -+ ErrorF("Unable to perform Scaled Blitting\n"); -+ } -+} -+ -+void W100PlanarBlt(KdScreenInfo *screen, -+ int planes, int planeOffsets[], -+ int bpp, int randr, -+ KdOffscreenArea *src, -+ int srcW, -+ int srcH, -+ BoxPtr srcBox, -+ KdOffscreenArea *dst, -+ int dstW, -+ int dstH, -+ BoxPtr dstBox) -+{ -+ ScreenPtr pScreen = screen->pScreen; -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ -+ CARD16 dstBoxW, dstBoxH, srcBoxW, srcBoxH; -+ CARD8 *srcOffset, *dstBase, *dstOffset; -+ int xerror, yerror; -+ unsigned int subsampling[] = {0, 1, 1}; -+ int plane; -+ srcBoxW = srcBox->x2 - srcBox->x1 + 1; -+ srcBoxH = srcBox->y2 - srcBox->y1 + 1; -+ if (randr & (RR_Rotate_90 | RR_Rotate_270)) { -+ dstBoxW = dstBox->y2 - dstBox->y1 + 1; -+ dstBoxH = dstBox->x2 - dstBox->x1 + 1; -+ } else { -+ dstBoxW = dstBox->x2 - dstBox->x1 + 1; -+ dstBoxH = dstBox->y2 - dstBox->y1 + 1; -+ } -+ -+ Bool stretch = ((srcBoxW != dstBoxW) || (srcBoxH != dstBoxH)); -+ CARD8 xscaler, yscaler; -+ BoxRec dstb = *dstBox; -+ -+ DBG_IMAGEON(("W100PlanarBlt(planes:%d,bpp:%d,randr:%d," -+ "src(x1:%d,y1:%d,x2:%d,y2:%d,w:%d,h:%d)," -+ "dst(x1:%d,y1:%d,x2:%d,y2:%d,w:%d,h:%d)\n", -+ planes, bpp, randr, -+ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2, srcW, srcH, -+ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2, dstW, dstH)); -+ -+ xerror = yerror = 0; -+ if (stretch) { -+ xscaler = W100GetScaler(dstBoxW, srcBoxW); -+ yscaler = W100GetScaler(dstBoxH, srcBoxH); -+ if (xscaler != 16 || yscaler != 16) { -+ xerror = (dstBoxW - W100ApplyScaler(srcBoxW, xscaler)) / 2; -+ yerror = (dstBoxH - W100ApplyScaler(srcBoxH, yscaler)) / 2; -+ DBG_IMAGEON(("Stretching with xscaler:%d,yscaler:%d," -+ "xerror:%d,yerror:%d\n", -+ xscaler, yscaler, xerror, yerror)); -+ } else { -+ xerror = yerror = 0; -+ stretch = FALSE; -+ } -+ } -+ -+ W100MoveTo(&dstb, xerror, yerror); -+ -+ srcOffset = src->vidmem->base + src->offset; -+ dstBase = dst->vidmem->base + dst->offset; -+ for (plane = 0; plane < planes; plane++) { -+ BoxRec srcCBox; -+ BoxRec dstCBox; -+ dstOffset = dstBase + planeOffsets[plane]; -+ W100ScaleBox(srcBox, &srcCBox, -subsampling[plane]); -+ W100ScaleBox(&dstb, &dstCBox, -subsampling[plane]); -+ if (stretch) { -+ W100ScaledBlt(screen, randr, bpp, -+ (CARD32) srcOffset, -+ srcW >> subsampling[plane], -+ &srcCBox, -+ (CARD32) dstOffset, -+ dstW >> subsampling[plane], -+ &dstCBox, -+ xscaler, yscaler); -+ } else { -+ W100Blt(screen, randr, bpp, -+ (CARD32) srcOffset, -+ srcW >> subsampling[plane], -+ &srcCBox, -+ (CARD32) dstOffset, -+ dstW >> subsampling[plane], -+ &dstCBox); -+ } -+ srcOffset += (srcW * srcH) >> (subsampling[plane] * 2); -+ } -+} -+ -+void W100SetBrightness(W100CardInfo *w100c, CARD8 value) -+{ -+ brightness_cntl_u brightness; -+ brightness.val = 0; -+ brightness.f.brightness = value; -+ MMIO_OUT32(mmBRIGHTNESS_CNTL, brightness.val); -+} -+ -+CARD8 W100GetBrightness(W100CardInfo *w100c) -+{ -+ brightness_cntl_u brightness; -+ brightness.val = MMIO_IN32(mmBRIGHTNESS_CNTL); -+ return brightness.f.brightness; -+} -+ -+int W100GetRotation(W100CardInfo *w100c) -+{ -+ graphic_ctrl_u gc; -+ int randr; -+ -+ gc.val = MMIO_IN32(mmGRAPHIC_CTRL); -+ -+ switch (gc.f.portrait_mode) { -+ case 0: -+ randr = RR_Rotate_0; -+ break; -+ case 1: -+ randr = RR_Rotate_90; -+ break; -+ case 2: -+ randr = RR_Rotate_270; -+ break; -+ case 3: -+ randr = RR_Rotate_180; -+ break; -+ } -+ return randr; -+} -+ -+Bool W100SysFsSet(W100CardInfo *w100c, const char *path, const char *value) -+{ -+ FILE *fd; -+ if ((fd = fopen(path, "w")) == NULL) { -+ ErrorF("(E) Error in W100SysFsSet: Unable to open '%s'\n", path); -+ return FALSE; -+ } -+ fprintf(fd, "%s", value); -+ fclose(fd); -+ return TRUE; -+} -+ -+Bool W100SysFsGet(W100CardInfo *w100c, const char *path, char *value) -+{ -+ FILE *fd; -+ if ((fd = fopen(path, "r")) == NULL) { -+ ErrorF("(E) Error in W100SysFsGet: Unable to open '%s'\n", path); -+ return FALSE; -+ } -+ fscanf(fd, "%s", value); -+ fclose(fd); -+ return TRUE; -+} -+ -+void W100TransformTsLibCoordinates(long *x, long *y, void *closure) -+{ -+ W100CardInfo *w100c = closure; -+ -+ if (w100c->hw_window.mode->width == 320) { -+ *x >>= 1; -+ *y >>= 1; -+ } -+} -+ -+void W100VSync(W100CardInfo *w100c) -+{ -+ int timeout = 30000; /* VSync timeout = 30[ms] > 16.8[ms] */ -+ active_v_disp_u active_v_disp; -+ disp_int_cntl_u disp_int_cntl; -+ gen_int_cntl_u gen_int_cntl; -+ gen_int_status_wr_u gen_int_status; -+ -+ active_v_disp.val = MMIO_IN32(mmACTIVE_V_DISP); -+ -+ /*set vline pos */ -+ disp_int_cntl.val = 0; -+ disp_int_cntl.f.vline_int_pos = active_v_disp.f.active_v_end; -+ MMIO_OUT32(mmDISP_INT_CNTL, disp_int_cntl.val); -+ -+ /* disable vline irq */ -+ gen_int_cntl.val = MMIO_IN32(mmGEN_INT_CNTL); -+ gen_int_cntl.f.crtc_vline_mask = 0; -+ MMIO_OUT32(mmGEN_INT_CNTL, gen_int_cntl.val); -+ -+ /* clear vline irq status */ -+ gen_int_status.val = 0; -+ gen_int_status.f.crtc_vline_stat_ak = 1; -+ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val); -+ -+ /* enable vline irq */ -+ gen_int_cntl.f.crtc_vline_mask = 1; -+ MMIO_OUT32(gen_int_cntl.val, mmGEN_INT_CNTL); -+ -+ /* clear vline irq status */ -+ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val); -+ -+ while (timeout > 0) { -+ if (MMIO_IN32(mmGEN_INT_STATUS) & 0x00000002) { -+ break; -+ } -+ usleep(1); -+ timeout--; -+ } -+ -+ /* disable vline irq */ -+ gen_int_cntl.f.crtc_vline_mask = 0; -+ MMIO_OUT32(mmGEN_INT_CNTL, gen_int_cntl.val); -+ -+ /* clear vline irq status */ -+ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val); -+} -+ -+ -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_video.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_video.c 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,1172 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+#include "imageon.h" -+#include "imageon_regs.h" -+#include "imageon_support.h" -+#include "imageon_const.h" -+#include "kaa.h" -+ -+#include -+#include "fourcc.h" -+ -+static Atom xvBrightness; -+static Atom xvMaxOverlaySize; -+static Atom xvColorKey; -+ -+#define IMAGE_MAX_WIDTH 720 -+#define IMAGE_MAX_HEIGHT 576 -+ -+#define W_ALIGN 0 -+#define H_ALIGN 0 -+ -+#define OVL_W_ALIGN 16 -+#define OVL_H_ALIGN 16 -+ -+#define OVL_MAX_SIZE 196608 -+ -+static KdVideoEncodingRec DummyEncoding[1] = { -+ {0, "XV_IMAGE", IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT, {1, 1}} -+}; -+ -+#define NUM_IMAGES (4) -+static KdImageRec Images[NUM_IMAGES] = { -+ XVIMAGE_YUY2, -+ XVIMAGE_YV12, -+ XVIMAGE_I420, -+ XVIMAGE_UYVY -+}; -+ -+#define NUM_FORMATS (3) -+static KdVideoFormatRec Formats[NUM_FORMATS] = { -+ {15, TrueColor}, -+ {16, TrueColor}, -+ {24, TrueColor} -+}; -+ -+#define NUM_ATTRIBUTES (3) -+static KdAttributeRec Attributes[NUM_ATTRIBUTES] = { -+ {XvSettable | XvGettable, 0, (1 << 16) - 1, "XV_COLORKEY"}, -+ {XvSettable | XvGettable, 0, 127, "XV_BRIGHTNESS"}, -+ {XvSettable | XvGettable, 0, 392960, "XV_MAXOVERLAYSIZE"} -+}; -+ -+#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) -+ -+#define NUM_OVL_RESIZERS (10) -+static struct { -+ CARD8 xfactor; -+ CARD8 yfactor; -+} ovlResizers[NUM_OVL_RESIZERS] = { -+ { 0, 0 }, -+ { 0, 1 }, { 1, 0 }, { 1, 1 }, -+ { 1, 2 }, { 2, 1 }, { 2, 2 }, -+ { 2, 3 }, { 3, 2 }, { 3, 3 } -+}; -+ -+static int W100SurfaceSize(W100PortPrivPtr port, short w, short h) -+{ -+ int size = 0; -+ DBG_IMAGEON(("W100SurfaceSize for id=%08x, w=%d, h=%d\n", -+ port->src.id, w, h)); -+ -+ switch (port->src.id) { -+ case FOURCC_YV12: -+ case FOURCC_I420: -+ size = (3 * w * h) / 2; -+ break; -+ case FOURCC_UYVY: -+ case FOURCC_YUY2: -+ size = w * h * 2; -+ break; -+ } -+ return size; -+} -+ -+static void W100ClearSurface(KdScreenInfo *screen, -+ KdOffscreenArea *area, -+ CARD16 x, -+ CARD16 y, -+ CARD16 pitch, -+ CARD16 width, -+ CARD16 height, -+ int id) -+{ -+ W100CardInfo(screen); -+ int nplanes; -+ unsigned int subsampling[] = {0, 1, 1}; -+ unsigned int zero[] = {0, 0x80, 0x80}; -+ int bpp; -+ int plane; -+ CARD8 *dstOffset = area->vidmem->base + area->offset; -+ -+ switch (id) { -+ case FOURCC_UYVY: -+ case FOURCC_YUY2: -+ nplanes = 1; -+ bpp = 16; -+ break; -+ case FOURCC_YV12: -+ case FOURCC_I420: -+ nplanes = 3; -+ bpp = 8; -+ } -+ -+ DBG_IMAGEON(("Clearing surface with planes:%d, bpp:%d, pitch:%d, height:%d\n", -+ nplanes, bpp, pitch, height)); -+ -+ W100ResetContext(w100c); -+ for (plane = 0; plane < nplanes; plane++) { -+ W100SetDestination(screen, -+ pitch >> subsampling[plane], -+ (CARD32) dstOffset, -+ bpp); -+ if (W100WaitCmdFifoEntries(w100c, 6)) { -+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch); -+ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset); -+ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, -+ W100ComputeSolidGmc(w100c, GXcopy)); -+ MMIO_OUT32(mmDP_BRUSH_FRGD_CLR, zero[plane]); -+ MMIO_OUT32(mmDST_Y_X, 0); -+ MMIO_OUT32(mmDST_HEIGHT_WIDTH, (height << 16) | width); -+ } else { -+ ErrorF("Error clearing surface\n"); -+ break; -+ } -+ dstOffset += (pitch * height) >> (subsampling[plane] * 2); -+ } -+} -+ -+static void W100OverlaySetup(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ CARD16 w, h, pitch; -+ video_ctrl_u video_ctrl; -+ video_y_offset_u video_y_offset; -+ video_y_pitch_u video_y_pitch; -+ video_u_offset_u video_u_offset; -+ video_u_pitch_u video_u_pitch; -+ video_v_offset_u video_v_offset; -+ video_v_pitch_u video_v_pitch; -+ graphic_key_u graphic_key; -+ video_h_pos_u video_hpos; -+ video_v_pos_u video_vpos; -+ graphic_h_disp_u graphic_h_disp; -+ graphic_v_disp_u graphic_v_disp; -+ -+ w = pitch = port->ovl.frame.x2 - port->ovl.frame.x1 + 1; -+ h = port->ovl.frame.y2 - port->ovl.frame.y1 + 1; -+ -+ ErrorF("W100OverlaySetup(ovlX:%d,ovlY:%d,ovlWidth:%d,ovlHeight:%d," -+ "videoHorExp:%d,videoVerExp:%d,YPlane:0x%08x,UPlane:0x%08x," -+ "VPlane:0x%08x)\n", -+ port->ovl.frame.x1, port->ovl.frame.y1, w, h, -+ port->ovl.horExp, -+ port->ovl.verExp, -+ port->planes.yplane, -+ port->planes.uplane, -+ port->planes.vplane); -+ -+ if (port->videoStatus & W100_OVERLAY_CONFIGURED) { -+ return; -+ } -+ -+ w <<= port->ovl.horExp; -+ h <<= port->ovl.verExp; -+ -+ video_ctrl.val = w100c->regs.VIDEO_CTRL; -+ -+ video_ctrl.f.video_inv_hor = 0; -+ video_ctrl.f.video_inv_ver = 0; -+ video_ctrl.f.yuv2rgb_option = 0; -+ video_ctrl.f.video_hor_exp = port->ovl.horExp; -+ video_ctrl.f.video_ver_exp = port->ovl.verExp; -+ video_ctrl.f.video_ch_sel = 0; -+ -+ video_ctrl.f.yuv2rgb_en = 1; -+ //Only support this, by the moment -+ video_ctrl.f.video_mode = OVLFORMAT_YUV420; -+ -+ -+ video_y_pitch.val = 0; -+ video_u_pitch.val = 0; -+ video_v_pitch.val = 0; -+ video_y_pitch.f.y_pitch = pitch; -+ video_u_pitch.f.u_pitch = pitch >> 1; -+ video_v_pitch.f.v_pitch = pitch >> 1; -+ -+ video_y_offset.val = 0; -+ video_u_offset.val = 0; -+ video_v_offset.val = 0; -+ video_y_offset.f.y_offset = port->planes.yplane; -+ video_u_offset.f.u_offset = port->planes.uplane; -+ video_v_offset.f.v_offset = port->planes.vplane; -+ -+ graphic_key.val = 0; -+ graphic_key.f.keyer_color = port->ovl.colorKey; -+ graphic_key.f.keyer_mask = 0xffffUL; -+ video_ctrl.f.keyer_en = 1; -+ -+ graphic_h_disp.val = w100c->regs.GRAPHIC_H_DISP; -+ graphic_v_disp.val = w100c->regs.GRAPHIC_V_DISP; -+ -+ video_hpos.f.video_h_start = graphic_h_disp.f.graphic_h_start -+ + port->ovl.frame.x1; -+ video_hpos.f.video_h_end = video_hpos.f.video_h_start + w; -+ -+ video_vpos.f.video_v_start = graphic_v_disp.f.graphic_v_start -+ + port->ovl.frame.y1; -+ video_vpos.f.video_v_end = video_vpos.f.video_v_start + h; -+ if (video_hpos.f.video_h_end > graphic_h_disp.f.graphic_h_end) { -+ w = graphic_h_disp.f.graphic_h_end - video_hpos.f.video_h_start; -+ } -+ -+ //This is possibly not valid for non planar modes -+ video_ctrl.f.total_req_video = (w + 3) / 4; -+ -+ W100DisableDisplayUpdate(w100c); -+ //This need to be tuned deeply, to get an stable -+ //overlay image: -+ //Best results seems to be present with 0x40xxxxxx -+ //But overlay surface must be located in a 8 dot multiple -+ MMIO_OUT32(mmDISP_DEBUG2, -+ (w100c->regs.DISP_DEBUG2 & ~0xff000000) | 0x40000000 ); -+ MMIO_OUT32(mmGRAPHIC_KEY, graphic_key.val); -+ MMIO_OUT32(mmVIDEO_Y_OFFSET, video_y_offset.val); -+ MMIO_OUT32(mmVIDEO_Y_PITCH, video_y_pitch.val); -+ MMIO_OUT32(mmVIDEO_U_OFFSET, video_u_offset.val); -+ MMIO_OUT32(mmVIDEO_U_PITCH, video_u_pitch.val); -+ MMIO_OUT32(mmVIDEO_V_OFFSET, video_v_offset.val); -+ MMIO_OUT32(mmVIDEO_V_PITCH, video_v_pitch.val); -+ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val); -+ MMIO_OUT32(mmVIDEO_H_POS, video_hpos.val); -+ MMIO_OUT32(mmVIDEO_V_POS, video_vpos.val); -+ W100EnableDisplayUpdate(w100c); -+ -+ port->videoCtrl = video_ctrl.val; -+ port->videoStatus |= W100_OVERLAY_CONFIGURED; -+} -+ -+static void W100OverlayEnable(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ video_ctrl_u video_ctrl; -+ -+ if (!(port->videoStatus & W100_OVERLAY_CONFIGURED)) { -+ W100OverlaySetup(screen); -+ } -+ -+ if (!(port->videoStatus & W100_OVERLAY_ON)) { -+ ErrorF("W100OverlayEnable()\n"); -+ video_ctrl.val = port->videoCtrl; -+ video_ctrl.f.en_video_req = 1; -+ video_ctrl.f.en_video_crtc = 1; -+ video_ctrl.f.en_graphic_req_video = 1; -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val); -+ W100EnableDisplayUpdate(w100c); -+ port->videoCtrl = video_ctrl.val; -+ port->videoStatus |= W100_OVERLAY_ON; -+ } -+} -+ -+static void W100OverlayDisable(KdScreenInfo *screen) -+{ -+ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ -+ video_ctrl_u video_ctrl; -+ -+ if ((port->videoStatus & W100_OVERLAY_ON)) { -+ ErrorF("W100OverlayDisable()\n"); -+ video_ctrl.val = port->videoCtrl; -+ video_ctrl.f.en_video_req = 0; -+ video_ctrl.f.en_video_crtc = 0; -+ video_ctrl.f.en_graphic_req_video = 0; -+ W100DisableDisplayUpdate(w100c); -+ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val); -+ W100EnableDisplayUpdate(w100c); -+ port->videoCtrl = video_ctrl.val; -+ port->videoStatus &= ~W100_OVERLAY_ON; -+ } -+} -+ -+static void W100VideoSave(ScreenPtr pScreen, KdOffscreenArea *area) -+{ -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ -+ if (port->src.surface == area) { -+ port->src.surface = NULL; -+ } -+ -+ if (port->ovl.surface == area) { -+ port->ovl.surface = NULL; -+ } -+} -+ -+static void W100SaveSurface(CARD8 *src, int size, const char *file) -+{ -+ int fd; -+ if (fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, -+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) { -+ write(fd, (void*) src, size); -+ close(fd); -+ } -+} -+ -+static void W100HostPlanarData(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ KdOffscreenArea *dst = port->src.surface; -+ CARD8 *src = port->src.buffer; -+ CARD16 srcPitch = port->src.width; //WARN: padding? -+ CARD16 srcHeight = port->src.height; -+ CARD16 dstPitch = port->src.box.x2 - port->src.box.x1 + 1; //WARN: padding? -+ CARD16 dstHeight = port->src.box.y2 - port->src.box.y1 + 1; -+ CARD16 srcX = port->src.box.x1; -+ CARD16 srcY = port->src.box.y1; -+ CARD16 dstX = 0; -+ CARD16 dstY = 0; -+ CARD16 w = dstPitch; -+ CARD16 h = dstHeight; -+ CARD8 *dstBase = dst->vidmem->base + dst->offset; -+ CARD8 *dstPtr; -+ CARD8 *srcPtr; -+ int i; -+ -+ srcPtr = src + (srcY * srcPitch) + srcX; -+ dstPtr = dstBase + (dstY * dstPitch) + dstX; -+ -+ DBG_IMAGEON(("W100HostPlanarData(src(pitch:%d,offset:0x%08x,x:%d,y:%d)," -+ "dst(pitch:%d,offset:0x%08x,x:%d,y:%d), w:%d,h:%d)\n", -+ srcPitch, srcPtr, srcX, srcY, -+ dstPitch, dstPtr, dstX, dstY, -+ w, h)); -+ -+ /* Copy Y plane */ -+ for (i = 0; i < h; i++) { -+ memcpy(dstPtr, srcPtr, w); -+ dstPtr += dstPitch; -+ srcPtr += srcPitch; -+ } -+ /* Copy U plane */ -+ dstPtr = dstBase + (dstHeight * dstPitch) //Start of U Plane -+ + (dstX >> 1) //X Offset -+ + ((dstY * dstPitch) >> 2); //Y Offset -+ if (port->src.id == FOURCC_I420) { -+ srcPtr = src + (srcHeight * srcPitch) //Start of U Plane -+ + (srcX >> 1) //X Offset -+ + ((srcY * srcPitch) >> 2); //Y Offset -+ } else { -+ srcPtr = src + ((5 * srcHeight * srcPitch) / 4) //Start of U Plane -+ + (srcX >> 1) //X Offset -+ + ((srcY * srcPitch) >> 2); //Y Offset -+ } -+ for (i = 0; i < (h >> 1); i++) { -+ memcpy(dstPtr, srcPtr, w >> 1); //U Plane scanline -+ srcPtr += srcPitch >> 1; -+ dstPtr += dstPitch >> 1; -+ } -+ -+ /* Copy V plane */ -+ dstPtr = dstBase + ((5 * dstHeight * dstPitch) / 4) //Start of V Plane -+ + (dstX >> 1) //X Offset -+ + ((dstY * dstPitch) >> 2); //Y Offset -+ if (port->src.id == FOURCC_I420) { -+ srcPtr = src + ((5 * srcHeight * srcPitch) / 4) //Start of V Plane -+ + (srcX >> 1) //X Offset -+ + ((srcY * srcPitch) >> 2); //Y Offset -+ } else { -+ srcPtr = src + (srcHeight * srcPitch) //Start of V Plane -+ + (srcX >> 1) //X Offset -+ + ((srcY * srcPitch) >> 2); //Y Offset -+ } -+ for (i = 0; i < (h >> 1); i++) { -+ memcpy(dstPtr, srcPtr, w >> 1); //V Plane scanline -+ srcPtr += srcPitch >> 1; -+ dstPtr += dstPitch >> 1; -+ } -+} -+ -+static void W100HostPackedData(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ KdOffscreenArea *dst = port->src.surface; -+ CARD8 *src = port->src.buffer; -+ CARD16 srcPitch = port->src.width << 1; //WARN: padding? -+ CARD16 dstPitch = (port->src.box.x2 - port->src.box.x1 + 1) << 1; -+ CARD16 srcX = port->src.box.x1; -+ CARD16 srcY = port->src.box.y1; -+ CARD16 dstX = 0; -+ CARD16 dstY = 0; -+ CARD16 w = port->src.box.x2 - port->src.box.x1 + 1; -+ CARD16 h = port->src.box.y2 - port->src.box.y1 + 1; -+ -+ CARD8 *dstBase = dst->vidmem->base + dst->offset; -+ CARD8 *dstPtr = dstBase + (dstY * dstPitch) + (dstX << 1); -+ CARD8 *srcPtr = src + (srcY + srcPitch) + (srcX << 1); -+ -+ DBG_IMAGEON(("W100HostPackedData(src(pitch:%d,offset:0x%08x,x:%d,y:%d)," -+ "dst(pitch:%d,offset:0x%08x,x:%d,y:%d), w:%d,h:%d)\n", -+ srcPitch, srcPtr, srcX, srcY, -+ dstPitch, dstPtr, dstX, dstY, -+ w, h)); -+ while (h--) { -+ memcpy(dstPtr, srcPtr, (w << 1)); /* 16bpp assumed */ -+ srcPtr += srcPitch; -+ dstPtr += dstPitch; -+ } -+} -+ -+ -+static void W100StopVideo(KdScreenInfo *screen, pointer data, Bool exit) -+{ -+ W100CardInfo(screen); -+ W100PortPrivPtr port = (W100PortPrivPtr)data; -+ -+ DBG_IMAGEON(("W100StopVideo(exit:%d)\n", exit)); -+ -+ REGION_EMPTY(screen->pScreen, &port->clip); -+ -+ if (exit) { -+ if (port->videoStatus & W100_OVERLAY_ON) { -+ W100OverlayDisable(screen); -+ } -+ if (port->src.surface) { -+ KdOffscreenFree(screen->pScreen, port->src.surface); -+ port->src.surface = NULL; -+ } -+ -+ if (port->ovl.surface) { -+ KdOffscreenFree(screen->pScreen, port->ovl.surface); -+ port->ovl.surface = NULL; -+ } -+ port->src.id = -1; // Just to avoid cached values. -+ } else { -+ if (port->videoStatus & W100_OVERLAY_ON) { -+ W100OverlayDisable(screen); -+ } -+ } -+} -+ -+static int W100SetPortAttribute(KdScreenInfo *screen, -+ Atom attribute, -+ int value, -+ pointer data) -+{ -+ W100CardInfo(screen); -+ W100PortPrivPtr port = (W100PortPrivPtr)data; -+ -+ if (attribute == xvBrightness) { -+ DBG_IMAGEON(("Setting Brightness attribute to %d\n", value)); -+ W100SetBrightness(w100c, value); -+ port->ovl.brightness = value; -+ } else if (attribute == xvMaxOverlaySize) { -+ DBG_IMAGEON(("Setting MaxOverlaySize to %d\n", value)); -+ port->ovl.maxSize = value; -+ } else if (attribute == xvColorKey) { -+ DBG_IMAGEON(("Setting ColorKey attribute to %d\n", value)); -+ port->ovl.colorKey = value; -+ } -+ return Success; -+} -+ -+static int W100GetPortAttribute(KdScreenInfo *screen, -+ Atom attribute, -+ int *value, -+ pointer data) -+{ -+ W100CardInfo(screen); -+ W100PortPrivPtr port = (W100PortPrivPtr)data; -+ -+ if (attribute == xvBrightness) { -+ DBG_IMAGEON(("Getting Brightness attribute\n")); -+ *value = port->ovl.brightness; -+ } else if (attribute == xvMaxOverlaySize) { -+ *value = port->ovl.maxSize; -+ DBG_IMAGEON(("Getting Contrast attribute\n")); -+ } else if (attribute == xvColorKey) { -+ DBG_IMAGEON(("Getting ColorKey attribute\n")); -+ *value = port->ovl.colorKey; -+ } -+ return Success; -+} -+ -+static void W100QueryBestSize(KdScreenInfo *screen, -+ Bool motion, -+ short vid_w, short vid_h, /*Video dimensions */ -+ short drw_w, short drw_h, /*Drawable dimensions */ -+ unsigned int *p_w, -+ unsigned int *p_h, -+ pointer data) -+{ -+ DBG_IMAGEON(("W100QueryBestSize(vid_w:%d,vid_h:%d,drw_w:%d,drw_h:%d)\n", -+ vid_w, vid_h, drw_w, drw_h)); -+ int xscaler = W100GetScaler(drw_w, vid_w); -+ int yscaler = W100GetScaler(drw_h, vid_h); -+ *p_w = W100ApplyScaler(vid_w, xscaler); -+ *p_h = W100ApplyScaler(vid_h, yscaler); -+} -+ -+static int W100QueryImageAttributes(KdScreenInfo *screen, -+ int id, -+ unsigned short *w, unsigned short *h, -+ int *pitches, int *offsets) -+{ -+ int size, tmp; -+ -+ DBG_IMAGEON(("W100QueryImageAttributes(id:%d,w:%d,h:%d)\n", id, *w, *h)); -+ -+ if (*w > IMAGE_MAX_WIDTH) { -+ *w = IMAGE_MAX_WIDTH; -+ } -+ if (*h > IMAGE_MAX_HEIGHT) { -+ *h = IMAGE_MAX_HEIGHT; -+ } -+ -+ if (W_ALIGN) { -+ *w = (*w + (W_ALIGN - 1)) & ~(W_ALIGN - 1); -+ } -+ if (H_ALIGN) { -+ *h = (*h + (H_ALIGN - 1)) & ~(H_ALIGN - 1); -+ } -+ -+ if (offsets) { -+ offsets[0] = 0; -+ } -+ -+ switch (id) { -+ /* Planar formats */ -+ case FOURCC_YV12: -+ case FOURCC_I420: -+ *h = (*h + 1) & ~1; -+ size = (*w + 3) & ~3; -+ if (pitches) pitches[0] = size; -+ size *= *h; -+ if (offsets) offsets[1] = size; -+ tmp = ((*w >> 1) + 3) & ~3; -+ if (pitches) pitches[1] = pitches[2] = tmp; -+ tmp *= (*h >> 1); -+ size += tmp; -+ if (offsets) offsets[2] = size; -+ size += tmp; -+ break; -+ /* Packed Formats */ -+ case FOURCC_UYVY: -+ case FOURCC_YUY2: -+ default: -+ size = *w << 1; -+ if (pitches) pitches[0] = size; -+ size *= *h; -+ break; -+ } -+ return size; -+} -+ -+static void W100ClipVideo(BoxPtr src, BoxPtr dst, BoxPtr extents, -+ short width, short height) -+{ -+ INT32 vscale, hscale, delta; -+ INT32 diff, x1, x2, y1, y2; -+ -+ hscale = ((src->x2 - src->x1) << 16) / (dst->x2 - dst->x1); -+ vscale = ((src->y2 - src->y1) << 16) / (dst->y2 - dst->y1); -+ -+ x1 = src->x1 << 16; -+ x2 = src->x2 << 16; -+ y1 = src->y1 << 16; -+ y2 = src->y2 << 16; -+ -+ diff = extents->x1 - dst->x1; -+ if (diff > 0) { -+ dst->x1 = extents->x1; -+ x1 += diff * hscale; -+ } -+ -+ diff = dst->x2 - extents->x2; -+ if (diff > 0) { -+ dst->x2 = extents->x2; -+ x2 -= diff * hscale; -+ } -+ -+ diff = extents->y1 - dst->y1; -+ if (diff > 0) { -+ dst->y1 = extents->y1; -+ y1 += diff * vscale; -+ } -+ -+ diff = dst->y2 - extents->y2; -+ if (diff > 0) { -+ dst->y2 = extents->y2; -+ y2 -= diff * vscale; -+ } -+ -+ if (x1 < 0) { -+ diff = (- x1 + hscale - 1) / hscale; -+ dst->x1 += diff; -+ x1 += diff * hscale; -+ } -+ -+ delta = x2 - (width << 16); -+ if (delta > 0) { -+ diff = (delta + hscale - 1) / hscale; -+ dst->x2 -= diff; -+ x2 -= diff * hscale; -+ } -+ -+ if (y1 < 0) { -+ diff = (- y1 + vscale - 1) / vscale; -+ dst->y1 += diff; -+ y1 += diff * vscale; -+ } -+ delta = y2 - (height << 16); -+ if (delta > 0) { -+ diff = (delta + vscale - 1) / vscale; -+ dst->y2 -= diff; -+ y2 -= diff * vscale; -+ } -+ -+ src->x1 = x1 >> 16; -+ src->x2 = x2 >> 16; -+ src->y1 = y1 >> 16; -+ src->y2 = y2 >> 16; -+} -+ -+static Bool W100SetOverlaySource(W100PortPrivPtr port, -+ unsigned char *buffer, -+ int id, -+ short src_x, short src_y, -+ short src_w, short src_h, -+ short width, short height, -+ short drw_x, short drw_y, -+ short drw_w, short drw_h, -+ RegionPtr clipBoxes) -+{ -+ -+ BoxRec srcBox, dstBox; -+ Bool changed = FALSE; -+ -+ srcBox.x1 = src_x; -+ srcBox.x2 = src_x + src_w - 1; -+ srcBox.y1 = src_y; -+ srcBox.y2 = src_y + src_h - 1; -+ -+ dstBox.x1 = drw_x; -+ dstBox.x2 = drw_x + drw_w - 1; -+ dstBox.y1 = drw_y; -+ dstBox.y2 = drw_y + drw_h - 1; -+ -+ W100ClipVideo(&srcBox, &dstBox, -+ REGION_EXTENTS(pScreen, clipBoxes), -+ width, height); -+ -+ port->src.buffer = buffer; -+ port->ovl.changed = FALSE; -+ -+ if (port->src.id != id) { -+ port->src.id = id; -+ changed = TRUE; -+ port->ovl.changed = TRUE; -+ } -+ if (port->src.box.x1 != srcBox.x1) { -+ port->src.box.x1 = srcBox.x1; -+ changed = TRUE; -+ } -+ if (port->src.box.x2 != srcBox.x2) { -+ port->src.box.x2 = srcBox.x2; -+ changed = TRUE; -+ } -+ if (port->src.box.y1 != srcBox.y1) { -+ port->src.box.y1 = srcBox.y1; -+ changed = TRUE; -+ } -+ if (port->src.box.y2 != srcBox.y2) { -+ port->src.box.y2 = srcBox.y2; -+ changed = TRUE; -+ } -+ if (port->src.width != width) { -+ port->src.width = width; -+ changed = TRUE; -+ } -+ if (port->src.height != height) { -+ port->src.height = height; -+ changed = TRUE; -+ } -+ -+ if (port->dst.box.x1 != dstBox.x1) { -+ port->dst.box.x1 = dstBox.x1; -+ changed = TRUE; -+ } -+ if (port->dst.box.x2 != dstBox.x2) { -+ port->dst.box.x2 = dstBox.x2; -+ changed = TRUE; -+ } -+ if (port->dst.box.y1 != dstBox.y1) { -+ port->dst.box.y1 = dstBox.y1; -+ changed = TRUE; -+ } -+ if (port->dst.box.y2 != dstBox.y2) { -+ port->dst.box.y2 = dstBox.y2; -+ changed = TRUE; -+ } -+ -+ if (changed) { -+ port->src.size = W100SurfaceSize(port, -+ srcBox.x2 - srcBox.x1 + 1, -+ srcBox.y2 - srcBox.y1 + 1); -+ } -+ port->changed = changed; -+ return changed; -+} -+ -+ -+ -+static int W100SetOverlaySurfaces(KdScreenInfo *screen, -+ short x, short y, short w, short h) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ -+ if (port->ovl.changed || -+ (port->ovl.frame.x1 != x) || -+ (port->ovl.frame.y1 != y) || -+ (port->ovl.frame.x2 != (x + w - 1)) || -+ (port->ovl.frame.y2 != (y + h - 1))) { -+ -+ port->ovl.changed = TRUE; -+ port->ovl.frame.x1 = x; -+ port->ovl.frame.x2 = x + w - 1; -+ port->ovl.frame.y1 = y; -+ port->ovl.frame.y2 = y + h - 1; -+ -+ W100MapToDevice(w100c, &port->dst.box, &port->ovl.box); -+ W100ChangeOrigin(&port->ovl.box, -+ port->ovl.frame.x1, port->ovl.frame.y1); -+ port->ovl.box.x2 >>= port->ovl.horExp; -+ port->ovl.box.y2 >>= port->ovl.verExp; -+ DBG_IMAGEON(("Translated ovl.box(x1:%d,y1:%d,x2:%d,y2:%d)\n", -+ port->ovl.box.x1, port->ovl.box.y1, -+ port->ovl.box.x2, port->ovl.box.y2)); -+ } -+ -+ switch (port->src.id) { -+ case FOURCC_YV12: -+ case FOURCC_I420: -+ port->planes.size = 3; -+ port->planes.offset[0] = 0; -+ port->planes.offset[1] = w * h; -+ port->planes.offset[2] = (5 * (w * h)) / 4; -+ port->planes.bpp = 8; -+ break; -+ case FOURCC_UYVY: -+ case FOURCC_YUY2: -+ port->planes.size = 1; -+ port->planes.offset[0] = 0; -+ port->planes.bpp = 16; -+ break; -+ } -+ -+ if (port->ovl.surface && port->ovl.size != port->ovl.surface->size) { -+ KdOffscreenFree(screen->pScreen, port->ovl.surface); -+ KdOffscreenFree(screen->pScreen, port->src.surface); -+ port->ovl.surface = NULL; -+ port->src.surface = NULL; -+ } -+ if (port->src.surface && port->src.size != port->src.surface->size) { -+ KdOffscreenFree(screen->pScreen, port->src.surface); -+ port->src.surface = NULL; -+ } -+ -+ if (!port->ovl.surface) { -+ port->ovl.surface = KdOffscreenAllocPrio(screen->pScreen, -+ port->ovl.size, 0, TRUE, -+ W100VideoSave, -+ port, -+ KD_VIDMEM_MAXPRIO, -+ KD_VIDMEM_MAXPRIO, -+ TRUE); -+ if (!port->ovl.surface) { -+ ErrorF("Using external memory for overlay surface. " -+ "Expect bad performance\n"); -+ port->ovl.surface = KdOffscreenAlloc(screen->pScreen, -+ port->ovl.size, 0, TRUE, -+ W100VideoSave, -+ port); -+ } -+ if (!port->ovl.surface) { -+ ErrorF("Unable to allocate %d bytes for overlay surface\n", -+ port->ovl.size); -+ return BadAlloc; -+ } -+ -+ W100ClearSurface(screen, port->ovl.surface, -+ 0, 0, -+ (w * port->planes.bpp / 8), -+ w, h, port->src.id); -+ } -+ if (!port->src.surface) { -+ port->src.surface = KdOffscreenAlloc(screen->pScreen, -+ port->src.size, 0, TRUE, -+ W100VideoSave, -+ port); -+ if (!port->src.surface) { -+ ErrorF("Unable to allocate %d bytes for offscreen surface\n", -+ port->src.size); -+ return BadAlloc; -+ } -+ } -+ -+ CARD32 baseAddr = (CARD32) W100_HOST2CARD(port->ovl.surface->vidmem->base + -+ port->ovl.surface->offset); -+ -+ -+ switch (port->src.id) { -+ case FOURCC_YV12: -+ case FOURCC_I420: -+ port->planes.yplane = baseAddr + port->planes.offset[0]; -+ port->planes.uplane = baseAddr + port->planes.offset[1]; -+ port->planes.vplane = baseAddr + port->planes.offset[2]; -+ break; -+ case FOURCC_UYVY: -+ case FOURCC_YUY2: -+ port->planes.yplane = baseAddr + port->planes.offset[0]; -+ port->planes.uplane = 0; -+ port->planes.vplane = 0; -+ break; -+ } -+ -+ return Success; -+} -+ -+static int W100OvlSetup(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ BoxRec ovlBox; -+ short x, y, w, h; -+ int i; -+ -+ W100MapToDevice(w100c, &port->dst.box, &ovlBox); -+ -+ x = ovlBox.x1 & ~7; -+ y = ovlBox.y1; -+ -+ for (i = 0; i < NUM_OVL_RESIZERS; i++) { -+ w = (ovlBox.x2 - x + 1) >> ovlResizers[i].xfactor; -+ h = (ovlBox.y2 - y + 1) >> ovlResizers[i].yfactor; -+ w = W100_ALIGN(w, OVL_W_ALIGN); -+ h = W100_ALIGN(h, OVL_H_ALIGN); -+ port->ovl.size = W100SurfaceSize(port, w, h); -+ DBG_IMAGEON(("Trying overlay surface (x:%d,y:%d,w:%d,h:%d). Size %d." -+ " xfactor:%d, yfactor:%d\n", -+ x, y, w, h, port->ovl.size, -+ ovlResizers[i].xfactor, -+ ovlResizers[i].yfactor)); -+ if (port->ovl.size <= port->ovl.maxSize) { -+ ErrorF("Using (x=%d,y=%d,w=%d,h=%d) overlay surface (%d bytes). " -+ "Resizer(xfactor:%d,yfactor:%d)\n", -+ x, y, w, h, port->ovl.size, -+ ovlResizers[i].xfactor, ovlResizers[i].yfactor); -+ port->ovl.horExp = ovlResizers[i].xfactor; -+ port->ovl.verExp = ovlResizers[i].yfactor; -+ return W100SetOverlaySurfaces(screen, x, y, w, h); -+ } -+ } -+ return BadAlloc; -+} -+ -+static void W100OvlHostData(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ -+ W100WaitIdle(w100c); -+ switch (port->src.id) { -+ case FOURCC_YV12: -+ case FOURCC_I420: -+ W100HostPlanarData(screen); -+ break; -+ case FOURCC_UYVY: -+ case FOURCC_YUY2: -+ W100HostPackedData(screen); -+ break; -+ } -+} -+ -+static void W100OvlBlt(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100CardInfo(screen); -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ static int frame = 0; -+ int srcW = port->src.box.x2 - port->src.box.x1 + 1; -+ int srcH = port->src.box.y2 - port->src.box.y1 + 1; -+ int dstW = port->ovl.frame.x2 - port->ovl.frame.x1 + 1; -+ int dstH = port->ovl.frame.y2 - port->ovl.frame.y1 + 1; -+ -+ DBG_IMAGEON(("ovl.box(x1:%d,y1:%d,x2:%d,y2:%d)," -+ "src.box(x1:%d,y1:%d,x2:%d,y2:%d)," -+ "dstW:%d, dstH:%d\n", -+ port->ovl.box.x1, port->ovl.box.y1, -+ port->ovl.box.x2, port->ovl.box.y2, -+ port->src.box.x1, port->src.box.y1, -+ port->src.box.x2, port->src.box.y2, -+ dstW, dstH)); -+ -+ W100PlanarBlt(screen, //KdScreenInfo* screen -+ port->planes.size, //int planes -+ port->planes.offset, //int planeOffsets[] -+ port->planes.bpp, //int bpp -+ w100c->hw_window.randr, //int randr -+ port->src.surface, //KdOffscrenArea *src -+ srcW, //int srcW -+ srcH, //int srcH -+ &port->src.box, //BoxPtr srcBox -+ port->ovl.surface, //KdOffscreenArea *dst -+ dstW, //int dstW -+ dstH, //int dstH -+ &port->ovl.box); //BoxPtr dstBox -+ -+#if 0 -+ if (++frame == 10) { -+ W100SaveSurface(port->src.surface->vidmem->base + -+ port->src.surface->offset, -+ port->src.surface->size, -+ "/media/card/kdrive/source.yuv"); -+ W100SaveSurface(port->ovl.surface->vidmem->base + -+ port->ovl.surface->offset, -+ port->ovl.surface->size, -+ "/media/card/kdrive/ovl.yuv"); -+ exit(1); -+ } -+#endif -+} -+ -+static void W100OvlUpdate(KdScreenInfo *screen) -+{ -+ W100ScreenInfo *w100s = screen->driver; -+ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr; -+ -+ if (port->videoStatus & W100_OVERLAY_ON) { -+ W100OverlayDisable(screen); -+ } -+ port->videoStatus &= ~W100_OVERLAY_CONFIGURED; -+ -+ W100OverlayEnable(screen); -+} -+ -+static int W100PutImage(KdScreenInfo *screen, -+ DrawablePtr pDraw, /* Destination drawable */ -+ short src_x, short src_y, /* Source coordinates */ -+ short drw_x, short drw_y, /* Destination coordinates */ -+ short src_w, short src_h, /* Source rectangle to put */ -+ short drw_w, short drw_h, /* Destination size */ -+ int id, /* FOURCC id */ -+ unsigned char *buffer, /* Source data */ -+ short width, /* Source width */ -+ short height, /* Source height */ -+ Bool sync, /* Sync before returning */ -+ RegionPtr clipBoxes, -+ pointer data) -+{ -+ ScreenPtr pScreen = screen->pScreen; -+ KdScreenPriv(pScreen); -+ W100CardInfo(pScreenPriv); -+ W100ScreenInfo(pScreenPriv); -+ W100PortPrivPtr port = (W100PortPrivPtr) data; -+ int errCode; -+ -+ DBG_IMAGEON(("W100PutImage(src(x:%d,y:%d,w:%d,h:%d)," -+ "drw(x:%d,y:%d,w:%d,h:%d)," -+ "width:%d,height:%d), buffer:%p)\n", -+ src_x,src_y,src_w,src_h, -+ drw_x,drw_y,drw_w,drw_h, -+ width, height, -+ buffer)); -+ -+ if (W100SetOverlaySource(port, buffer, id, -+ src_x, src_y, src_w, src_h, -+ width, height, -+ drw_x, drw_y, drw_w, drw_h, -+ clipBoxes)) { -+ if ((errCode = W100OvlSetup(screen)) != Success) { -+ return errCode; -+ } -+ } -+ W100OvlHostData(screen); -+ /* Update cliplist */ -+ if(!REGION_EQUAL(screen->pScreen, &port->clip, clipBoxes)) { -+ REGION_COPY(screen->pScreen, &port->clip, clipBoxes); -+ KXVPaintRegion(pDraw, &port->clip, port->ovl.colorKey); -+ } -+ -+ W100OvlBlt(screen); -+ -+ if (port->ovl.changed) { -+ W100OvlUpdate(screen); -+ } -+ return Success; -+} -+ -+static KdVideoAdaptorPtr -+W100SetupImageVideo(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100CardInfo(pScreenPriv); -+ KdVideoAdaptorPtr adaptor; -+ W100PortPrivPtr port; -+ -+ adaptor = xcalloc(1, sizeof(KdVideoAdaptorRec) -+ + sizeof(W100PortPrivRec) -+ + sizeof(DevUnion)); -+ if (adaptor == NULL) { -+ return NULL; -+ } -+ -+ adaptor->type = XvWindowMask | XvInputMask | XvImageMask; -+ adaptor->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; -+ adaptor->name = "ATI (C) Imageon Video Overlay"; -+ adaptor->nEncodings = 1; -+ adaptor->pEncodings = DummyEncoding; -+ adaptor->nFormats = NUM_FORMATS; -+ adaptor->pFormats = Formats; -+ adaptor->nPorts = 1; -+ adaptor->pPortPrivates = (DevUnion*)(&adaptor[1]); -+ -+ port = (W100PortPrivPtr)(&adaptor->pPortPrivates[1]); -+ -+ adaptor->pPortPrivates[0].ptr = (pointer)(port); -+ -+ adaptor->nAttributes = NUM_ATTRIBUTES; -+ adaptor->pAttributes = Attributes; -+ adaptor->pImages = Images; -+ adaptor->nImages = NUM_IMAGES; -+ adaptor->PutVideo = NULL; -+ adaptor->PutStill = NULL; -+ adaptor->GetVideo = NULL; -+ adaptor->GetStill = NULL; -+ adaptor->StopVideo = W100StopVideo; -+ adaptor->SetPortAttribute = W100SetPortAttribute; -+ adaptor->GetPortAttribute = W100GetPortAttribute; -+ adaptor->QueryBestSize = W100QueryBestSize; -+ adaptor->PutImage = W100PutImage; -+ adaptor->ReputImage = NULL; -+ adaptor->QueryImageAttributes = W100QueryImageAttributes; -+ -+ REGION_INIT(pScreen, &port->clip, NullBox, 0); -+ -+ w100s->pAdaptor = adaptor; -+ -+ xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); -+ xvColorKey = MAKE_ATOM("XV_COLORKEY"); -+ xvMaxOverlaySize = MAKE_ATOM("XV_MAXOVERLAYSIZE"); -+ -+ port->ovl.maxSize = OVL_MAX_SIZE; -+ port->ovl.colorKey = 0xff00; -+ port->ovl.brightness = W100GetBrightness(w100c); -+ return adaptor; -+} -+ -+Bool W100InitVideo(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ W100CardInfo(pScreenPriv); -+ KdScreenInfo *screen = pScreenPriv->screen; -+ KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL; -+ KdVideoAdaptorPtr newAdaptor = NULL; -+ int num_adaptors; -+ -+ w100s->pAdaptor = NULL; -+ -+ if (w100c->reg_base == NULL) -+ return FALSE; -+ -+ num_adaptors = KdXVListGenericAdaptors(screen, &adaptors); -+ -+ newAdaptor = W100SetupImageVideo(pScreen); -+ -+ if (newAdaptor) { -+ if (!num_adaptors) { -+ num_adaptors = 1; -+ adaptors = &newAdaptor; -+ } else { -+ newAdaptors = xalloc((num_adaptors + 1) * -+ sizeof(KdVideoAdaptorPtr *)); -+ if (newAdaptors) { -+ memcpy(newAdaptors, adaptors, num_adaptors * -+ sizeof(KdVideoAdaptorPtr)); -+ newAdaptors[num_adaptors] = newAdaptor; -+ adaptors = newAdaptors; -+ num_adaptors++; -+ } -+ } -+ } -+ -+ if (num_adaptors) -+ KdXVScreenInit(pScreen, adaptors, num_adaptors); -+ -+ if (newAdaptors) -+ xfree(newAdaptors); -+ -+ return TRUE; -+} -+ -+void -+W100FiniVideo(ScreenPtr pScreen) -+{ -+ KdScreenPriv(pScreen); -+ W100ScreenInfo(pScreenPriv); -+ KdVideoAdaptorPtr adaptor = w100s->pAdaptor; -+ W100PortPrivPtr port; -+ int i; -+ -+ if (!adaptor) -+ return; -+ -+ port = (W100PortPrivPtr)(&adaptor->pPortPrivates[0].ptr); -+ REGION_UNINIT(pScreen, &port->clip); -+ -+ xfree(adaptor); -+ w100s->pAdaptor = NULL; -+} -+ -Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.h 2007-06-17 10:49:02.000000000 +0200 -@@ -0,0 +1,108 @@ -+/* -+ * Copyright © 2007 Manuel Teira -+ * -+ * Permission to use, copy, modify, distribute, and sell this software and its -+ * documentation for any purpose is hereby granted without fee, provided that -+ * the above copyright notice appear in all copies and that both that -+ * copyright notice and this permission notice appear in supporting -+ * documentation, and that the name of Manuel Teira not be used in -+ * advertising or publicity pertaining to distribution of the software without -+ * specific, written prior permission. Manuel Teira makes no -+ * representations about the suitability of this software for any purpose. It -+ * is provided "as is" without express or implied warranty. -+ * -+ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -+ * PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifndef _IMAGEON_SUPPORT_H_ -+#define _IMAGEON_SUPPORT_H -+ -+#include "imageon.h" -+ -+extern CARD8 W100SolidRop[16]; -+extern CARD8 W100BltRop[16]; -+ -+/* Card control */ -+void W100DisableDisplayUpdate(W100CardInfo *w100c); -+void W100EnableDisplayUpdate(W100CardInfo *w100c); -+void W100SetupGraphicEngine(W100CardInfo *w100c); -+void W100ResetGraphicEngine(W100CardInfo *w100c); -+void W100SetupGraphicWindow(W100CardInfo *w100c); -+void W100EnableGraphicWindow(W100CardInfo *w100c); -+void W100DisableGraphicWindow(W100CardInfo *w100c); -+void W100VSync(W100CardInfo *w100c); -+ -+/* Wait for card slots */ -+__inline__ Bool W100WaitCmdFifoEntries(W100CardInfo *w100c, int entries); -+Bool W100WaitIdle(W100CardInfo *w100c); -+ -+/* Set context of the current operation */ -+void W100ResetContext(W100CardInfo *w100c); -+CARD32 W100ComputeSolidGmc(W100CardInfo *w100c, CARD8 alu); -+CARD32 W100ComputeCopyGmc(W100CardInfo *w100c, CARD8 alu); -+CARD32 W100ComputeAritGmc(W100CardInfo *w100c, CARD8 alu); -+void W100SetXForm(W100CardInfo *w100c, int dx, int dy); -+void W100SetRotation(W100CardInfo *w100c, int randr, Bool mirror); -+void W100SetPixelMask(W100CardInfo *w100c, Pixel mask); -+Bool W100SetSource(KdScreenInfo *screen, CARD32 srcPitch, -+ CARD32 srcOffset, CARD8 bpp); -+Bool W100SetDestination(KdScreenInfo *screen, CARD32 dstPitch, -+ CARD32 dstOffset, CARD8 bpp); -+Bool W100SetSourcePixmap(PixmapPtr pPix); -+Bool W100SetDestinationPixmap(PixmapPtr pPix); -+ -+/* Scaler related functions */ -+CARD8 W100GetScaler(CARD16 dstsize, CARD16 srcsize); -+CARD16 W100ApplyScaler(CARD16 srcsize, CARD8 scaler); -+ -+/* Blitting functions */ -+void W100PlanarBlt(KdScreenInfo *screen, int planes, int planeOffsets[], -+ int bpp, int randr, -+ KdOffscreenArea *src, int srcW, int srcH, BoxPtr srcBox, -+ KdOffscreenArea *dst, int dstW, int dstH, BoxPtr dstBox); -+static void W100ScaledBlt(KdScreenInfo *screen, int randr, int bpp, -+ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox, -+ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox, -+ CARD8 xscaler, CARD8 yscaler); -+static void W100StretchBlt(KdScreenInfo *screen, int randr, int bpp, -+ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox, -+ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox, -+ CARD8 xscaler, CARD8 yscaler); -+static void W100Blt(KdScreenInfo *screen, int randr, int bpp, -+ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox, -+ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox); -+ -+/* Brightness functions */ -+CARD8 W100GetBrightness(W100CardInfo *w100c); -+void W100SetBrightness(W100CardInfo *w100c, CARD8 value); -+ -+ -+/* Get and set mode and rotation info */ -+int W100GetRotation(W100CardInfo *w100c); -+W100ModeSpec *W100GetModeSpec(W100CardInfo *w100c, W100Mode *mode); -+Bool W100GetFbMode(W100CardInfo *w100c, W100Mode *mode); -+Bool W100CheckFbMode(W100CardInfo *w100c, W100ModeSpec *modes); -+W100ModeSpec *W100GetBestMode(W100CardInfo *w100c, int width, int height); -+ -+/* SysFS helpers */ -+Bool W100SysFsGet(W100CardInfo *w100c, const char *path, char *value); -+Bool W100SysFsSet(W100CardInfo *w100c, const char *path, const char *value); -+ -+/* Coordinate transformations */ -+void W100TransformTsLibCoordinates(long *x, long *y, void *closure); -+void W100MapToDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst); -+void W100MapFromDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst); -+void W100ChangeOrigin(BoxPtr src, int x, int y); -+void W100TrajectoryOrigin(W100CardInfo *w100c, BoxPtr box, short *x, short *y); -+void W100ScaleBox(BoxPtr src, BoxPtr dst, int scale); -+void W100MoveTo(BoxPtr src, int x, int y); -+ -+ -+ -+#endif -Index: xorg-server-1.2.0/hw/kdrive/linux/tslib.c -=================================================================== ---- xorg-server-1.2.0.orig/hw/kdrive/linux/tslib.c 2007-01-23 06:39:15.000000000 +0100 -+++ xorg-server-1.2.0/hw/kdrive/linux/tslib.c 2007-06-17 10:49:02.000000000 +0200 -@@ -92,6 +92,10 @@ - void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure); - void *tslib_raw_event_closure; - -+/* To support randr hot resolution change */ -+void (*tslib_transform_coords)(long *x, long *y, void *closure); -+void *tslib_transform_closure; -+ - int TsInputType = 0; - int KdTsPhyScreen = 0; /* XXX Togo .. */ - -@@ -121,7 +125,9 @@ - flags = (event.pressure) ? KD_BUTTON_1 : 0; - x = event.x; - y = event.y; -- -+ if (tslib_transform_coords) { -+ tslib_transform_coords(&x, &y, tslib_transform_closure); -+ } - KdEnqueueMouseEvent (mi, flags, x, y); - } - } -- cgit v1.2.3 From 08bb9698fca8c2cd911524f85fe901dfd60c5993 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Tue, 2 Oct 2007 17:03:59 +0000 Subject: wifistix-module : Clean up bb file, add configuration file. --- packages/wifistix/wifistix-modules/wifistix.conf | 4 ++++ packages/wifistix/wifistix-modules_5.0.16.p0.bb | 24 +++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 packages/wifistix/wifistix-modules/wifistix.conf diff --git a/packages/wifistix/wifistix-modules/wifistix.conf b/packages/wifistix/wifistix-modules/wifistix.conf new file mode 100644 index 0000000000..b232463975 --- /dev/null +++ b/packages/wifistix/wifistix-modules/wifistix.conf @@ -0,0 +1,4 @@ +install pcmcia /sbin/modprobe --ignore-install pcmcia && modprobe pxa2xx-cs + +alias mwlan0 mcf25 + diff --git a/packages/wifistix/wifistix-modules_5.0.16.p0.bb b/packages/wifistix/wifistix-modules_5.0.16.p0.bb index abd8a8c246..2682ae6cbc 100644 --- a/packages/wifistix/wifistix-modules_5.0.16.p0.bb +++ b/packages/wifistix/wifistix-modules_5.0.16.p0.bb @@ -8,6 +8,7 @@ DEPENDS = "virtual/kernel" PR = "r0" SRC_URI = "http://files.gumstix.com/cf8385-5.0.16.p0-26306.tbz \ + file://wifistix.conf \ file://marvell-devicename.patch;patch=1 \ file://marvell-devicetable.patch;patch=1 \ file://marvell-gumstix.patch;patch=1 \ @@ -24,21 +25,26 @@ S = "${WORKDIR}/src_cf8385" inherit module-base +EXTRA_OEMAKE = "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}" + 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}" + oe_runmake } 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) + oe_runmake install + + install -m 0755 -d ${D}${sysconfdir}/modprobe.d + install -m 0644 ${WORKDIR}/wifistix.conf ${D}${sysconfdir}/modprobe.d/wifistix.conf } PACKAGES = "${PN}" -FILES_${PN} = "/lib/modules/" +FILES_${PN} = "${base_libdir}/modules/" +FILES_${PN} += "${sysconfdir}/modprobe.d/" +CONFFILES_${PN} = "${sysconfdir}/modprobe.d/wifistix.conf" + -- cgit v1.2.3 From 1f1297df3c3822b2c5c6682c990ce7fac5183117 Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Tue, 2 Oct 2007 18:18:47 +0000 Subject: linux.inc: replace == with = to make posix shell compliant --- packages/linux/linux.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc index 7579481005..41b0c13179 100644 --- a/packages/linux/linux.inc +++ b/packages/linux/linux.inc @@ -40,7 +40,7 @@ do_configure_prepend() { # # oabi / eabi support # - if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then + if [ "${TARGET_OS}" = "linux-gnueabi" -o "${TARGET_OS}" = "linux-uclibcgnueabi" ]; then echo "CONFIG_AEABI=y" >> ${S}/.config echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config else -- cgit v1.2.3 From bcaec55e4e64f6bca21cf0e50eaec787bd29b735 Mon Sep 17 00:00:00 2001 From: Henryk Ploetz Date: Tue, 2 Oct 2007 18:51:53 +0000 Subject: mono 1.2.5.1: added mono.bbclass, many changes required for packaging New file: packages/mono/mono-mcs-intermediate_1.2.5.1.bb Compiles mono in native mode with standard prefix, then tars up the resulting tree and puts the tarfile into staging New file: packages/mono/mono_files.py Automatically generated using collect-path.py (attached to this mail) and contains a list that maps file patterns to package names (and contained assemblies, see below). New file: classes/mono.bbclass Has a helper function for the list that maps file patterns to package names and assemblies (see below). Also has a function mono_do_clilibs and inserts that function into PACKAGEFUNCS. This function calls mono_find_provides_and_requires which finds out (through calls to monodis --assembly and monodis --assemblyref) which assemblies are provided and required by a particular package. mono_do_clilibs then puts the information about provided assemblies into ${STAGING_DIR}/clilibs/${packagename}.list and information about the required packages into ${PKGDEST}/{packagename}.clilibdeps where it will later be picked up by the modified read_shlibdeps. Originally I had dependency resolution through the partial list in mono_files.py but obviously this doens't scale, so I implemented the new method with mono_do_clilibs. The benefit is now that I don't really need the extra information in mono_files.py anymore and can in principle get rid of mono_get_file_table and related code. Instead it should be possible to modify collect-paths.py to output bitbake .inc code (e.g. PACKAGES = "..." and a whole lot of FILES_... = "...") instead of python code. There's still the minor problem of how to handle the .mdb files, that's why I didn't implement it yet but instead opted for an approach that I knew would work. (Debian just puts the .mdb files into the individual packages, while I would argue that they do belong into corresponding -dbg packages.) Modified file: classes/package.bbclass In read_shlibdeps I folded the two identical code blocks dealing with *.shlibdeps and *.pcdeps into one and added *.clilibdeps (generated by mono_do_clilibs above). Modified file: packages/mono/mono_1.2.5.1.bb Add the mono-mcs-intermediate workaround. Add a whole lot of python code in populate_packages_prepend in order to split up the packages based on information from mono_files.py (via mono.bbclass' mono_get_file_table). As I said above a lot of this code can hopefully be replaced in the future. --- classes/mono.bbclass | 214 +++++++++ classes/package.bbclass | 22 +- packages/mono/README | 43 +- packages/mono/collect-paths.py | 135 ++++++ packages/mono/mono-mcs-intermediate_1.2.5.1.bb | 59 +++ packages/mono/mono_1.2.5.1.bb | 140 +++++- packages/mono/mono_files.py | 605 +++++++++++++++++++++++++ 7 files changed, 1190 insertions(+), 28 deletions(-) create mode 100644 classes/mono.bbclass create mode 100644 packages/mono/collect-paths.py create mode 100644 packages/mono/mono-mcs-intermediate_1.2.5.1.bb create mode 100644 packages/mono/mono_files.py diff --git a/classes/mono.bbclass b/classes/mono.bbclass new file mode 100644 index 0000000000..dcf5f7272c --- /dev/null +++ b/classes/mono.bbclass @@ -0,0 +1,214 @@ +def mono_get_file_table(packageversion, d): + # The packageversion is currently ignored, but might be used in the future + # if more than one mono version is available and different versions + # need to use different tables + + import bb, sys, os, glob, commands + curdir = os.path.dirname( bb.data.getVar('FILE', d, 1) ) + if curdir not in sys.path: sys.path.append( curdir ) + from mono_files import debian_mono_file_table + + # mono-jay is not being built (for all platforms at least) + IGNORE = ("mono-jay", ) + file_table = [ + # Standard package + {"name": "mono-doc"}, + + # Virtual packages + {"name": "mono"}, + {"name": "mono-runtime"}, + + # Not provided by Debian: + {"name": "libnunit2.2-cil", + "patterns": [ + "/usr/lib/mono/gac/nunit.*/2.2.*", + "/usr/lib/mono/1.0/nunit.*.dll", + "/usr/lib/pkgconfig/mono-nunit.pc", + ], + "assemblies": [ + ("nunit.core", "2.2.0.0"), + ("nunit.framework", "2.2.0.0"), + ("nunit.util", "2.2.0.0"), + ("nunit.mocks", "2.2.8.0"), + ], + }, + {"name": "libmono-cecil0.5-cil", + "patterns": [ + "/usr/lib/mono/gac/Mono.Cecil/0.5.*", + ], + "assemblies": [ + ("Mono.Cecil", "0.5.*"), + ], + }, + {"name": "libmono-db2-1.0-cil", + "patterns": [ + "/usr/lib/mono/gac/IBM.Data.DB2/1.0*", + "/usr/lib/mono/1.0/IBM.Data.DB2.dll", + ], + "assemblies": [ + ("IBM.Data.DB2", "1.0*"), + ], + }, + ] + debian_mono_file_table + + file_table = [e for e in file_table + if not (e.has_key("name") and e["name"] in IGNORE)] + + return file_table + +def mono_find_provides_and_requires(files, d): + provides = [] + requires = [] + + import bb, os, commands + + pathprefix = "export PATH=%s; export LANG=; export LC_ALL=; " % bb.data.getVar('PATH', d, 1) + for filename in files: + if not filename.endswith(".dll") and not filename.endswith(".exe"): + continue + if not os.path.isfile(filename) or os.path.islink(filename): + continue + + ## Provides + name, version = None, None + + ret, result = commands.getstatusoutput("%smonodis --assembly '%s'" % (pathprefix, filename)) + if ret: + bb.error("raw_provides_and_requires: monodis --assembly '%s' failed, dependency information will be inaccurate" % filename) + continue + for line in result.splitlines(): + if not ":" in line: continue + key, value = line.split(":", 1) + if key.strip() == "Name": + name = value.strip() + elif key.strip() == "Version": + version = value.strip() + if name is not None and version is not None: + if (name, version) not in provides: + provides.append( (name, version) ) + + ## Requires + name, version = None, None + ret, result = commands.getstatusoutput("%smonodis --assemblyref '%s'" % (pathprefix, filename)) + if ret: + bb.error("raw_provides_and_requires: monodis --assemblyref '%s' failed, dependency information will be inaccurate" % filename) + continue + for line in result.splitlines(): + if not "=" in line: continue + key, value = line.split("=", 1) + if ":" in key and key.split(":",1)[1].strip() == "Version": + version = value.strip() + elif key.strip() == "Name": + name = value.strip() + if name is not None and version is not None: + if (name, version) not in requires: + requires.append( (name, version) ) + name, version = None, None + + # Remove everything from requires that's already in provides as it's not actually required + # to be provided externally + requires = [e for e in requires if not e in provides] + return provides, requires + +python mono_do_clilibs() { + import bb, os, re, os.path + + exclude_clilibs = bb.data.getVar('EXCLUDE_FROM_CLILIBS', d, 0) + if exclude_clilibs: + bb.note("not generating clilibs") + return + + lib_re = re.compile("^lib.*\.so") + libdir_re = re.compile(".*/lib$") + + packages = bb.data.getVar('PACKAGES', d, 1) + + workdir = bb.data.getVar('WORKDIR', d, 1) + if not workdir: + bb.error("WORKDIR not defined") + return + + staging = bb.data.getVar('STAGING_DIR', d, 1) + if not staging: + bb.error("STAGING_DIR not defined") + return + + pkgdest = bb.data.getVar('PKGDEST', d, 1) + + clilibs_dir = os.path.join(staging, "clilibs") + bb.mkdirhier(clilibs_dir) + + provides, requires = {}, {} + private_libs = bb.data.getVar('PRIVATE_CLILIBS', d, 1) + for pkg in packages.split(): + bb.debug(2, "calculating clilib provides for %s" % pkg) + + files_to_check = [] + top = os.path.join(pkgdest, pkg) + for root, dirs, files in os.walk(top): + for file in files: + path = os.path.join(root, file) + if file.endswith(".exe") or file.endswith(".dll"): + files_to_check.append( path ) + provides[pkg], requires[pkg] = mono_find_provides_and_requires(files_to_check, d) + clilibs_file = os.path.join(clilibs_dir, pkg + ".list") + if os.path.exists(clilibs_file): + os.remove(clilibs_file) + if len(provides[pkg]) > 0: + fd = open(clilibs_file, 'w') + for s in provides[pkg]: + fd.write(" ".join(s) + '\n') + fd.close() + + clilib_provider = {} + list_re = re.compile('^(.*)\.list$') + for file in os.listdir(clilibs_dir): + m = list_re.match(file) + if m: + dep_pkg = m.group(1) + fd = open(os.path.join(clilibs_dir, file)) + lines = fd.readlines() + fd.close() + for l in lines: + clilib_provider[tuple(l.rstrip().split())] = dep_pkg + + for pkg in packages.split(): + bb.debug(2, "calculating clilib requirements for %s" % pkg) + + deps = [] + for n in requires[pkg]: + if n in clilib_provider.keys(): + dep_pkg = clilib_provider[n] + + if dep_pkg == pkg: + continue + + if not dep_pkg in deps: + deps.append(dep_pkg) + else: + bb.note("Couldn't find CLI library provider for %s" % n) + + deps_file = os.path.join(pkgdest, pkg + ".clilibdeps") + if os.path.exists(deps_file): + os.remove(deps_file) + if len(deps) > 0: + fd = open(deps_file, 'w') + for dep in deps: + fd.write(dep + '\n') + fd.close() +} + +python() { + # Insert mono_do_clilibs into PACKAGEFUNCS + # Needs to be called after populate_packages, but before read_shlibdeps + PACKAGEFUNCS = bb.data.getVar("PACKAGEFUNCS", d, 1) + if PACKAGEFUNCS: + PACKAGEFUNCS = PACKAGEFUNCS.split() + if "read_shlibdeps" in PACKAGEFUNCS: + i = PACKAGEFUNCS.index("read_shlibdeps") + PACKAGEFUNCS.insert(i, "mono_do_clilibs") + elif "populate_packages" in PACKAGEFUNCS: + i = PACKAGEFUNCS.index("populate_packages") + PACKAGEFUNCS.insert(i+1, "mono_do_clilibs") + bb.data.setVar("PACKAGEFUNCS", " ".join(PACKAGEFUNCS), d) +} diff --git a/classes/package.bbclass b/classes/package.bbclass index 516cae823d..b114049b8e 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -793,20 +793,14 @@ python read_shlibdeps () { packages = bb.data.getVar('PACKAGES', d, 1).split() for pkg in packages: rdepends = explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 0) or bb.data.getVar('RDEPENDS', d, 0) or "") - shlibsfile = bb.data.expand("${PKGDEST}/" + pkg + ".shlibdeps", d) - if os.access(shlibsfile, os.R_OK): - fd = file(shlibsfile) - lines = fd.readlines() - fd.close() - for l in lines: - rdepends.append(l.rstrip()) - pcfile = bb.data.expand("${PKGDEST}/" + pkg + ".pcdeps", d) - if os.access(pcfile, os.R_OK): - fd = file(pcfile) - lines = fd.readlines() - fd.close() - for l in lines: - rdepends.append(l.rstrip()) + for extension in ".shlibdeps", ".pcdeps", ".clilibdeps": + depsfile = bb.data.expand("${PKGDEST}/" + pkg + extension, d) + if os.access(depsfile, os.R_OK): + fd = file(depsfile) + lines = fd.readlines() + fd.close() + for l in lines: + rdepends.append(l.rstrip()) bb.data.setVar('RDEPENDS_' + pkg, " " + " ".join(rdepends), d) } diff --git a/packages/mono/README b/packages/mono/README index 39479308b2..c3043faee3 100644 --- a/packages/mono/README +++ b/packages/mono/README @@ -1,10 +1,39 @@ -Mono in OE is still very much a work in progress. -1.2.4 - - is reported to work on MIPS. - - has floating point problems on ARM +Notes on Mono support in OE. + +=============================== +Cross Compiling Mono + +Cross compiling mono requires a two stage build because the mono mcs directory +cannot be built while cross compiling (http://www.mono-project.com/Mono:ARM). +The recommended way to cross compile mono is to + + 1. do a complete build on the host system, and install. + 2. cross compile mono which will only build the native target code and + overlay the target binaries on the host install. + +The MCS build (step 1) is implemented by the mono-mcs-intermediate* recipe. +This recipe is very similiar to the native build, except it uses standard +install prefixes and the install directory is tar'd up, and placed in staging +for use by the cross build. + +During the mono cross build, the first step during the install is to untar +the install results of the mcs-intermediate build. The cross build install +then proceeds to overlay the native binaries in the install directory. + +================================ +mono.bbclass + +Has a helper function for the list that maps file patterns to package +names and assemblies (see below). Also has a function mono_do_clilibs +and inserts that function into PACKAGEFUNCS. This function calls +mono_find_provides_and_requires which finds out (through calls to +monodis --assembly and monodis --assemblyref) which assemblies are +provided and required by a particular package. mono_do_clilibs then +puts the information about provided assemblies into +${STAGING_DIR}/clilibs/${packagename}.list and information about the +required packages into ${PKGDEST}/{packagename}.clilibdeps where it +will later be picked up by the modified read_shlibdeps. + -1.2.5 - - tested on ARM EABI. Floating point issues have been worked around. -There is still a lot of packaging work that needs done to package the mono dll's for installation. diff --git a/packages/mono/collect-paths.py b/packages/mono/collect-paths.py new file mode 100644 index 0000000000..a49b76e5aa --- /dev/null +++ b/packages/mono/collect-paths.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python + +## This utility takes the debian directory from an unpacked debian mono source tree +## (e.g. apt-get source mono), parses the *.install files and generates python source +## for a list of dictionaries that describe the individual packages and their contents +## The output will look like +##debian_mono_file_table = [ +## { 'name': 'libmono-peapi1.0-cil', +## 'patterns': [ +## '/usr/lib/mono/gac/PEAPI/1.0.*/', +## '/usr/lib/mono/1.0/PEAPI.dll' +## ], +## 'assemblies': [ +## ('PEAPI', '1.0.*') +## ] +## }, +## { 'name': 'mono-mjs', +## 'patterns': [ +## '/usr/bin/mjs', +## '/usr/lib/mono/1.0/mjs.exe*' +## ] +## }, +##.... + + +import os, sys, re + +def collect_paths(dir): + paths = {} + + os.chdir(dir) + for filename in os.listdir("."): + if filename.endswith(".install"): + fp = file(filename, "r") + lines = fp.readlines() + fp.close() + + contents = [] + for line in lines: + lineparts = line.strip().split() + if lineparts[0].startswith("debian/tmp"): + pattern = lineparts[0][ len("debian/tmp"): ] + if len(lineparts) == 2: + if not pattern.startswith(lineparts[1]): + print >>sys.stderr, "Warning: Apparently I don't fully understand the format in file %s" % filename + elif len(lineparts) > 2: + print >>sys.stderr, "Warning: Apparently I don't fully understand the format in file %s" % filename + + contents.append( pattern ) + else: + print >>sys.stderr, "Note: Ignoring %s in %s" % (lineparts, filename) + + paths[ filename[ :-len(".install") ] ] = contents + + return paths + +def collect_packages(paths): + gac_re = re.compile(r'/usr/lib/mono/gac/(?P[^/]+)/(?P[^/]+)/?') + + # These packages should be populated first (e.g. because their files will otherwise end up + # in other packages) + PACKAGES_FIRST = ("mono-jit", "mono-gac", "mono-mjs", "mono-gmcs", "mono-utils", "mono-doc") + # These should be populated last (because their spec is very broad) + PACKAGES_LAST = ("mono-mcs", "libmono-system1.0-cil", "libmono-system2.0-cil", "libmono1.0-cil", "libmono2.0-cil") + first = [] + last = [] + packages = paths.keys() + for packagename in PACKAGES_FIRST + PACKAGES_LAST: + if packagename in packages: + packages.remove(packagename) + if packagename in PACKAGES_FIRST: + first.append(packagename) + else: + last.append(packagename) + packagenames = first + packages + last + + packages = [] + for name in packagenames: + patterns = paths[ name ] + package = { "name": name, + "patterns": patterns} + + provided_assemblies = [] + for pattern in patterns: + match = gac_re.match(pattern) + if match: + provided_assemblies.append( (match.group("assembly"), match.group("version")) ) + if pattern == "/usr/lib/mono/1.0/mscorlib.dll*": + provided_assemblies.append( ("mscorlib", "1.0.*" ) ) + elif pattern == "/usr/lib/mono/2.0/mscorlib.dll*": + provided_assemblies.append( ("mscorlib", "2.0.*" ) ) + + if len(provided_assemblies) > 0: + package["assemblies"] = provided_assemblies + + packages.append(package) + + return packages + +if __name__ == "__main__": + packages = collect_packages( collect_paths(".") ) + + if False: # Human-friendly + for package in packages: + print "Package: %s" % package["name"] + if package.has_key("provided_assemblies"): + print "Provides: \t%s" % ( "\n\t\t".join( [" ".join(e) for e in package["assemblies"] ] ) ) + print "Patterns: \t\t%s" % ( "\n\t\t\t".join(package["patterns"]) ) + print + else: + print "# This is a generated file, please do not edit directly" + print "# Use collect-paths.py instead. -- Henryk " + print "debian_mono_file_table = [" + print ",\n".join( + [ + "\t{\t%s\n\t}" % ",\n\t\t".join( + [ + "%r: %r" % (key, value) + for key, value in package.items() + if not isinstance(value, (list,tuple)) + ] + [ + "%r: [\n\t\t\t\t%s\n\t\t\t]" % (key, ",\n\t\t\t\t".join( [ + "%r"%(e,) for e in value + ]) + ) + for key, value in package.items() + if isinstance(value, (list,tuple)) + ] + + ) + for package in packages + ] + ) + print "]" + diff --git a/packages/mono/mono-mcs-intermediate_1.2.5.1.bb b/packages/mono/mono-mcs-intermediate_1.2.5.1.bb new file mode 100644 index 0000000000..07f9387e2a --- /dev/null +++ b/packages/mono/mono-mcs-intermediate_1.2.5.1.bb @@ -0,0 +1,59 @@ +# This is a straw-man recipe for step 1 in the two-step build of +# mono. Because it's impossible to build the mcs directory +# in cross-compile mode, this recipe will do a native build, +# then tar the resulting install tree for usage by the mono +# package in step 2. +# See http://www.mono-project.com/Mono:ARM + +require mono_1.2.5.inc +PR = "r0" +DEPENDS = "mono-native glib-2.0-native" + +SRC_URI += "file://mono-fix-libdir-path.patch;patch=1" + +# Inherit native to set up compiler and paths ... +inherit native +# ... but override the target prefix +prefix = "/usr" +exec_prefix = "/usr" +sysconfdir = "/etc" +# TODO: Where does the mono package get +# these paths from? Use the same source. + +do_fix_libtool_name() { + # inherit native will make that all native tools that are being + # built are prefixed with something like "i686-linux-", + # including libtool. Fix up some hardcoded libtool names: + for i in "${S}"/runtime/*-wrapper.in; do + sed -e "s/libtool/${BUILD_SYS}-libtool/" -i "${i}" + done +} +addtask fix_libtool_name after do_patch before do_configure + +do_stage() { + true +} + +do_install() { + oe_runmake 'DESTDIR=${D}' install +} + +do_package() { + true +} + +do_populate_staging() { + cd ${D} + rm -f ${WORKDIR}/mono-mcs-${PV}.tar.gz + tar -cvzf ${WORKDIR}/mono-mcs-${PV}.tar.gz . + install -d ${STAGING_DIR}/share/mono-mcs + cp ${WORKDIR}/mono-mcs-${PV}.tar.gz ${STAGING_DIR}/share/mono-mcs/ +} + +do_package_write_ipk() { + true +} + +do_package_write() { + true +} diff --git a/packages/mono/mono_1.2.5.1.bb b/packages/mono/mono_1.2.5.1.bb index e1f3f1b6a5..53a671cd74 100644 --- a/packages/mono/mono_1.2.5.1.bb +++ b/packages/mono/mono_1.2.5.1.bb @@ -1,19 +1,145 @@ require mono_1.2.5.inc -DEPENDS = "mono-native glib-2.0" +DEPENDS = "mono-native mono-mcs-intermediate glib-2.0" -PR = "r1" +PR = "r2" SRC_URI += "file://configure.patch;patch=1" +# Per http://www.mono-project.com/Mono:ARM +EXTRA_OECONF += " --disable-mcs-build " +# Instead, get the mcs tree from a different build (see mono-mcs-intermediate) + +do_install_prepend() { + install -d ${D} + pushd ${D} + tar -xzf ${STAGING_DIR}/share/mono-mcs/mono-mcs-${PV}.tar.gz + popd +} + do_install_append() { - install -d ${D}${libdir}/mono/1.0/ - cp ${S}/mcs/class/lib/monolite/* ${D}${libdir}/mono/1.0/ + # mono-mcs-intermediate builds and installs jay (a Yacc for Java and C#), + # however, jay is not being cross-compiled and thus only + # available for the buildhost architecture, so remove it + # entirely + pushd ${D} + rm -rf ./usr/share/man/man1/jay.1 ./usr/share/jay \ + ./usr/share/jay/README.jay \ + ./usr/bin/jay + popd + + # Not packaged with the default rules and apparently + # not used for anything + rm -rf ${D}${datadir}/mono-1.0/mono/cil/cil-opcodes.xml } -EXTRA_OECONF += " --disable-mcs-build " +inherit mono +PACKAGES = "${@" ".join([e["name"] for e in mono_get_file_table(bb.data.getVar('PV', d, 1), d) if e.has_key("name")])}" -PACKAGES =+ "mono-dll" -FILES_mono-dll = "${libdir}/mono/1.0/" +FILES_mono-doc_append = " /usr/share/libgc-mono/ " +FILES_mono = "" # Apparently this gets ignored, so I'm setting it again below +ALLOW_EMPTY_mono = "1" +RDEPENDS_mono = "mono-common mono-jit" +FILES_mono-runtime = "" +ALLOW_EMPTY_mono-runtime = "1" +RDEPENDS_mono-runtime = "mono-jit mono-gac" + +RDEPENDS_mono-jit = "mono-common" + +FILES_libmono-dev = "/usr/lib/libmono.la /usr/lib/libmono-profiler-cov.la /usr/lib/libmono-profiler-aot.la \ + /usr/lib/libMonoPosixHelper.la /usr/lib/libMonoSupportW.la" +FILES_libmono-dbg = "/usr/lib/.debug/libmono*.so.* /usr/lib/.debug/libikvm-native.so \ + /usr/lib/.debug/libMonoPosixHelper.so /usr/lib/.debug/libMonoSupportW.so" + +python populate_packages_prepend () { + def fillin_packages(): + # A lot of this code can probably be replaced with less code and some + # calls to do_split_packages + import bb, sys, os, glob, commands + + PV = bb.data.getVar('PV', d, 1) + + file_table = mono_get_file_table(PV, d) + packages_to_add = [] + + D = bb.data.getVar('D', d, 1) + if not D: return + D = D + "/" + + def classify_files(files): + normal, dev, dbg, doc = [], [], [], [] + for filename in files: + if filename.endswith(".mdb"): + dbg.append(filename) + elif os.path.basename( os.path.dirname( filename ) ) == ".debug": + dbg.append(filename) + elif filename.endswith(".pc"): + dev.append(filename) + else: + normal.append(filename) + return normal, dev, dbg, doc + + def will_strip(filename): + # From package.bbclass function runstrip + pathprefix = "export PATH=%s; " % bb.data.getVar('PATH', d, 1) + ret, result = commands.getstatusoutput("%sfile '%s'" % (pathprefix, filename)) + if "not stripped" in result: + return True + else: + return False + + def append(name, value): + oldvalue = bb.data.getVar(name, d, 1) or "" + newvalue = " ".join([oldvalue, value]) + bb.data.setVar(name, newvalue, d) + + already_covered = [] + for package in file_table: + pn = package["name"] + if package.has_key("patterns"): + files = [] + for pattern in package["patterns"]: + matching = glob.glob( D + pattern ) + for filename in matching: + if os.path.isdir(filename): + for dirpath, dirnames, filenames in os.walk(filename): + for f in filenames: + debugname = os.path.join(dirpath, ".debug", f) + fullname = os.path.join(dirpath, f) + files.append(fullname) + if will_strip(fullname): + files.append(debugname) + else: + files.append(filename) + + # Remove the D prefix + files = [ e[len(D):] for e in files ] + + # Remove files that have already been placed in other packages + files = [ e for e in files if not e in already_covered ] + already_covered.extend( files ) + + if pn.endswith("-dev") or pn.endswith("-dbg") or pn.endswith("-doc"): + normal, dev, dbg, doc = files, [], [], [] + else: + normal, dev, dbg, doc = classify_files(files) + + for extension, filelist in [ ("",normal), ("-dev", dev), ("-dbg", dbg), ("-doc", doc)]: + if len(filelist) > 0: + packagename = pn + extension + append("FILES_%s" % packagename, " ".join(filelist)) + bb.debug(2, "%s\n\t%s" %( packagename, "\n\t".join( filelist ) )) + if not packagename in packages_to_add: + packages_to_add.append(packagename) + + else: + packages_to_add.append(pn) + + # mono is just a stub package + bb.data.setVar("FILES_mono", "", d) + + bb.data.setVar("PACKAGES", " ".join(packages_to_add), d) + fillin_packages() +} diff --git a/packages/mono/mono_files.py b/packages/mono/mono_files.py new file mode 100644 index 0000000000..6e673743c3 --- /dev/null +++ b/packages/mono/mono_files.py @@ -0,0 +1,605 @@ +# This is a generated file, please do not edit directly +# Use collect-paths.py instead. -- Henryk +debian_mono_file_table = [ + { 'name': 'mono-jit', + 'patterns': [ + '/usr/bin/mono' + ] + }, + { 'name': 'mono-gac', + 'patterns': [ + '/usr/bin/gacutil', + '/usr/lib/mono/1.0/gacutil.exe' + ] + }, + { 'name': 'mono-mjs', + 'patterns': [ + '/usr/bin/mjs', + '/usr/lib/mono/1.0/mjs.exe*' + ] + }, + { 'name': 'mono-gmcs', + 'patterns': [ + '/usr/bin/gmcs', + '/usr/bin/wsdl2', + '/usr/bin/monop2', + '/usr/bin/ilasm2', + '/usr/bin/resgen2', + '/usr/bin/mono-api-info2', + '/usr/bin/mono-service2', + '/usr/bin/mkbundle2', + '/usr/bin/xbuild', + '/usr/bin/sgen', + '/usr/bin/al2', + '/usr/bin/httpcfg', + '/usr/lib/mono/2.0/*.exe*', + '/usr/lib/mono/2.0/xbuild.rsp', + '/usr/lib/mono/2.0/MSBuild/', + '/usr/lib/mono/2.0/Microsoft.Build.xsd', + '/usr/lib/mono/2.0/Microsoft.CSharp.targets', + '/usr/lib/mono/2.0/Microsoft.Common.tasks', + '/usr/lib/mono/2.0/Microsoft.Common.targets', + '/usr/lib/mono/2.0/Microsoft.VisualBasic.targets' + ] + }, + { 'name': 'mono-utils', + 'patterns': [ + '/usr/bin/pedump', + '/usr/bin/monodis', + '/usr/bin/monograph', + '/usr/bin/mono-find-provides', + '/usr/bin/mono-find-requires' + ] + }, + { 'name': 'libmono-peapi1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/PEAPI/1.0.*/', + '/usr/lib/mono/1.0/PEAPI.dll' + ], + 'assemblies': [ + ('PEAPI', '1.0.*') + ] + }, + { 'name': 'libmono-cairo1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Cairo/1.0.*/', + '/usr/lib/mono/1.0/Mono.Cairo.dll', + '/usr/lib/pkgconfig/mono-cairo.pc' + ], + 'assemblies': [ + ('Mono.Cairo', '1.0.*') + ] + }, + { 'name': 'libmono-system-web2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Web/2.0.*/', + '/usr/lib/mono/gac/System.Web.Services/2.0.*/', + '/usr/lib/mono/2.0/System.Web.dll', + '/usr/lib/mono/2.0/System.Web.Services.dll' + ], + 'assemblies': [ + ('System.Web', '2.0.*'), + ('System.Web.Services', '2.0.*') + ] + }, + { 'name': 'libmono-accessibility2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Accessibility/2.0.*/', + '/usr/lib/mono/2.0/Accessibility.dll' + ], + 'assemblies': [ + ('Accessibility', '2.0.*') + ] + }, + { 'name': 'libmono-microsoft7.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Microsoft.JScript/7.0.*/', + '/usr/lib/mono/gac/Microsoft.VisualC/7.0.*/', + '/usr/lib/mono/gac/Microsoft.Vsa/7.0.*/', + '/usr/lib/mono/1.0/Microsoft.JScript.dll', + '/usr/lib/mono/1.0/Microsoft.VisualC.dll', + '/usr/lib/mono/1.0/Microsoft.Vsa.dll' + ], + 'assemblies': [ + ('Microsoft.JScript', '7.0.*'), + ('Microsoft.VisualC', '7.0.*'), + ('Microsoft.Vsa', '7.0.*') + ] + }, + { 'name': 'libmono-winforms2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Windows.Forms/2.0.*/', + '/usr/lib/mono/gac/System.Drawing.Design/2.0.*/', + '/usr/lib/mono/gac/System.Design/2.0.*/', + '/usr/lib/mono/2.0/System.Windows.Forms.dll', + '/usr/lib/mono/2.0/System.Drawing.Design.dll', + '/usr/lib/mono/2.0/System.Design.dll' + ], + 'assemblies': [ + ('System.Windows.Forms', '2.0.*'), + ('System.Drawing.Design', '2.0.*'), + ('System.Design', '2.0.*') + ] + }, + { 'name': 'libmono-ldap1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/', + '/usr/lib/mono/1.0/Novell.Directory.Ldap.dll' + ], + 'assemblies': [ + ('Novell.Directory.Ldap', '1.0.*') + ] + }, + { 'name': 'libmono-sharpzip2.84-cil', + 'patterns': [ + '/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/', + '/usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll' + ], + 'assemblies': [ + ('ICSharpCode.SharpZipLib', '2.84.*') + ] + }, + { 'name': 'libmono-system-data2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Data/2.0.*/', + '/usr/lib/mono/2.0/System.Data.dll' + ], + 'assemblies': [ + ('System.Data', '2.0.*') + ] + }, + { 'name': 'libmono-corlib2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/I18N*/2.0.*/', + '/usr/lib/mono/2.0/I18N*.dll', + '/usr/lib/mono/2.0/mscorlib.dll*' + ], + 'assemblies': [ + ('I18N*', '2.0.*'), + ('mscorlib', '2.0.*') + ] + }, + { 'name': 'libmono-winforms1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Windows.Forms/1.0.*/', + '/usr/lib/mono/gac/System.Drawing.Design/1.0.*/', + '/usr/lib/mono/gac/System.Design/1.0.*/', + '/usr/lib/mono/1.0/System.Windows.Forms.dll', + '/usr/lib/mono/1.0/System.Drawing.Design.dll', + '/usr/lib/mono/1.0/System.Design.dll' + ], + 'assemblies': [ + ('System.Windows.Forms', '1.0.*'), + ('System.Drawing.Design', '1.0.*'), + ('System.Design', '1.0.*') + ] + }, + { 'name': 'libmono-microsoft8.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Microsoft.JScript/8.0.*/', + '/usr/lib/mono/gac/Microsoft.VisualC/8.0.*/', + '/usr/lib/mono/gac/Microsoft.Vsa/8.0.*/', + '/usr/lib/mono/2.0/Microsoft.JScript.dll', + '/usr/lib/mono/2.0/Microsoft.VisualC.dll', + '/usr/lib/mono/2.0/Microsoft.Vsa.dll' + ], + 'assemblies': [ + ('Microsoft.JScript', '8.0.*'), + ('Microsoft.VisualC', '8.0.*'), + ('Microsoft.Vsa', '8.0.*') + ] + }, + { 'name': 'libmono-corlib1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/I18N*/1.0.*/', + '/usr/lib/mono/1.0/I18N*.dll', + '/usr/lib/mono/1.0/mscorlib.dll*' + ], + 'assemblies': [ + ('I18N*', '1.0.*'), + ('mscorlib', '1.0.*') + ] + }, + { 'name': 'libmono-system-web1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Web/1.0.*/', + '/usr/lib/mono/gac/System.Web.Services/1.0.*/', + '/usr/lib/mono/1.0/System.Web.dll', + '/usr/lib/mono/1.0/System.Web.Services.dll' + ], + 'assemblies': [ + ('System.Web', '1.0.*'), + ('System.Web.Services', '1.0.*') + ] + }, + { 'name': 'libmono-system-runtime2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Runtime.*/2.0.*/', + '/usr/lib/mono/2.0/System.Runtime.*.dll' + ], + 'assemblies': [ + ('System.Runtime.*', '2.0.*') + ] + }, + { 'name': 'libmono-cscompmgd8.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/cscompmgd/8.0.*/', + '/usr/lib/mono/2.0/cscompmgd.dll' + ], + 'assemblies': [ + ('cscompmgd', '8.0.*') + ] + }, + { 'name': 'libmono-cscompmgd7.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/cscompmgd/7.0.*/', + '/usr/lib/mono/1.0/cscompmgd.dll' + ], + 'assemblies': [ + ('cscompmgd', '7.0.*') + ] + }, + { 'name': 'libmono-firebirdsql1.7-cil', + 'patterns': [ + '/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/', + '/usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll' + ], + 'assemblies': [ + ('FirebirdSql.Data.Firebird', '1.7.*') + ] + }, + { 'name': 'mono-jay', + 'patterns': [ + '/usr/bin/jay' + ] + }, + { 'name': 'libmono-data-tds1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/', + '/usr/lib/mono/1.0/Mono.Data.Tds.dll' + ], + 'assemblies': [ + ('Mono.Data.Tds', '1.0.*') + ] + }, + { 'name': 'libmono-sqlite1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/', + '/usr/lib/mono/gac/Mono.Data.SqliteClient/1.0.*/', + '/usr/lib/mono/1.0/Mono.Data.Sqlite.dll', + '/usr/lib/mono/1.0/Mono.Data.SqliteClient.dll' + ], + 'assemblies': [ + ('Mono.Data.Sqlite', '1.0.*'), + ('Mono.Data.SqliteClient', '1.0.*') + ] + }, + { 'name': 'libmono-relaxng1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/', + '/usr/lib/mono/1.0/Commons.Xml.Relaxng.dll' + ], + 'assemblies': [ + ('Commons.Xml.Relaxng', '1.0.*') + ] + }, + { 'name': 'libmono-dev', + 'patterns': [ + '/usr/lib/libmono*.a', + '/usr/lib/libMono*.a', + '/usr/lib/libmono*.so', + '/usr/lib/libMonoSupportW.a', + '/usr/lib/pkgconfig/mono.pc', + '/usr/lib/pkgconfig/dotnet.pc', + '/usr/include/' + ] + }, + { 'name': 'libmono-accessibility1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Accessibility/1.0.*/', + '/usr/lib/mono/1.0/Accessibility.dll' + ], + 'assemblies': [ + ('Accessibility', '1.0.*') + ] + }, + { 'name': 'mono-common', + 'patterns': [ + '/etc/mono', + '/usr/share/mono-1.0/mono/cil/cil-opcodes.xml' + ] + }, + { 'name': 'libmono-oracle1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/', + '/usr/lib/mono/1.0/System.Data.OracleClient.dll' + ], + 'assemblies': [ + ('System.Data.OracleClient', '1.0.*') + ] + }, + { 'name': 'libmono-system-data1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Data/1.0.*/', + '/usr/lib/mono/1.0/System.Data.dll' + ], + 'assemblies': [ + ('System.Data', '1.0.*') + ] + }, + { 'name': 'libmono-bytefx0.7.6.2-cil', + 'patterns': [ + '/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/', + '/usr/lib/mono/2.0/ByteFX.Data.dll' + ], + 'assemblies': [ + ('ByteFX.Data', '0.7.6.2*') + ] + }, + { 'name': 'libmono0', + 'patterns': [ + '/usr/lib/libmono*.so.*', + '/usr/lib/libMonoPosixHelper.so', + '/usr/lib/libMonoSupportW.so' + ] + }, + { 'name': 'libmono-sharpzip0.6-cil', + 'patterns': [ + '/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/', + '/usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll' + ], + 'assemblies': [ + ('ICSharpCode.SharpZipLib', '0.6.*') + ] + }, + { 'name': 'libmono-data-tds2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/', + '/usr/lib/mono/2.0/Mono.Data.Tds.dll' + ], + 'assemblies': [ + ('Mono.Data.Tds', '2.0.*') + ] + }, + { 'name': 'libmono-system-messaging1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Messaging/1.0.*/', + '/usr/lib/mono/1.0/System.Messaging.dll' + ], + 'assemblies': [ + ('System.Messaging', '1.0.*') + ] + }, + { 'name': 'libmono-npgsql1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Npgsql/1.0.*/', + '/usr/lib/mono/1.0/Npgsql.dll' + ], + 'assemblies': [ + ('Npgsql', '1.0.*') + ] + }, + { 'name': 'libmono-security2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Security/2.0.*/', + '/usr/lib/mono/2.0/Mono.Security.dll' + ], + 'assemblies': [ + ('Mono.Security', '2.0.*') + ] + }, + { 'name': 'libmono-security1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Security/1.0.*/', + '/usr/lib/mono/1.0/Mono.Security.dll' + ], + 'assemblies': [ + ('Mono.Security', '1.0.*') + ] + }, + { 'name': 'libmono-bytefx0.7.6.1-cil', + 'patterns': [ + '/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/', + '/usr/lib/mono/1.0/ByteFX.Data.dll' + ], + 'assemblies': [ + ('ByteFX.Data', '0.7.6.1*') + ] + }, + { 'name': 'libmono-microsoft-build2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/', + '/usr/lib/mono/2.0/Microsoft.Build.*.dll' + ], + 'assemblies': [ + ('Microsoft.Build.*', '2.0.*') + ] + }, + { 'name': 'libmono-system-ldap1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.DirectoryServices/1.0.*/', + '/usr/lib/mono/1.0/System.DirectoryServices.dll' + ], + 'assemblies': [ + ('System.DirectoryServices', '1.0.*') + ] + }, + { 'name': 'libmono-relaxng2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/', + '/usr/lib/mono/2.0/Commons.Xml.Relaxng.dll' + ], + 'assemblies': [ + ('Commons.Xml.Relaxng', '2.0.*') + ] + }, + { 'name': 'libmono-system-ldap2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.DirectoryServices/2.0.*/', + '/usr/lib/mono/2.0/System.DirectoryServices.dll' + ], + 'assemblies': [ + ('System.DirectoryServices', '2.0.*') + ] + }, + { 'name': 'libmono-system-messaging2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Messaging/2.0.*/', + '/usr/lib/mono/2.0/System.Messaging.dll' + ], + 'assemblies': [ + ('System.Messaging', '2.0.*') + ] + }, + { 'name': 'libmono-sharpzip0.84-cil', + 'patterns': [ + '/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/', + '/usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll' + ], + 'assemblies': [ + ('ICSharpCode.SharpZipLib', '0.84.*') + ] + }, + { 'name': 'libmono-sqlite2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/', + '/usr/lib/mono/gac/Mono.Data.SqliteClient/2.0.*/', + '/usr/lib/mono/2.0/Mono.Data.Sqlite.dll', + '/usr/lib/mono/2.0/Mono.Data.SqliteClient.dll' + ], + 'assemblies': [ + ('Mono.Data.Sqlite', '2.0.*'), + ('Mono.Data.SqliteClient', '2.0.*') + ] + }, + { 'name': 'libmono-ldap2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/', + '/usr/lib/mono/2.0/Novell.Directory.Ldap.dll' + ], + 'assemblies': [ + ('Novell.Directory.Ldap', '2.0.*') + ] + }, + { 'name': 'libmono-npgsql2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Npgsql/2.0.*/', + '/usr/lib/mono/2.0/Npgsql.dll' + ], + 'assemblies': [ + ('Npgsql', '2.0.*') + ] + }, + { 'name': 'libmono-system-runtime1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Runtime.*/1.0.*/', + '/usr/lib/mono/1.0/System.Runtime.*.dll' + ], + 'assemblies': [ + ('System.Runtime.*', '1.0.*') + ] + }, + { 'name': 'libmono-oracle2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/', + '/usr/lib/mono/2.0/System.Data.OracleClient.dll' + ], + 'assemblies': [ + ('System.Data.OracleClient', '2.0.*') + ] + }, + { 'name': 'libmono-c5-1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.C5/1.0.*/', + '/usr/lib/mono/2.0/Mono.C5.dll' + ], + 'assemblies': [ + ('Mono.C5', '1.0.*') + ] + }, + { 'name': 'libmono-sharpzip2.6-cil', + 'patterns': [ + '/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/', + '/usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll' + ], + 'assemblies': [ + ('ICSharpCode.SharpZipLib', '2.6.*') + ] + }, + { 'name': 'libmono-cairo2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.Cairo/2.0.*/', + '/usr/lib/mono/2.0/Mono.Cairo.dll' + ], + 'assemblies': [ + ('Mono.Cairo', '2.0.*') + ] + }, + { 'name': 'libmono-peapi2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/PEAPI/2.0.*/', + '/usr/lib/mono/2.0/PEAPI.dll' + ], + 'assemblies': [ + ('PEAPI', '2.0.*') + ] + }, + { 'name': 'mono-mcs', + 'patterns': [ + '/usr/bin/', + '/usr/lib/mono/1.0/*.exe*' + ] + }, + { 'name': 'libmono-system1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System*/1.0.*/', + '/usr/lib/mono/gac/CustomMarshalers/1.0.*/', + '/usr/lib/mono/1.0/System*.dll', + '/usr/lib/mono/1.0/CustomMarshalers.dll*' + ], + 'assemblies': [ + ('System*', '1.0.*'), + ('CustomMarshalers', '1.0.*') + ] + }, + { 'name': 'libmono-system2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/System*/2.0.*/', + '/usr/lib/mono/gac/CustomMarshalers/2.0.*/', + '/usr/lib/mono/2.0/System*.dll', + '/usr/lib/mono/2.0/CustomMarshalers.dll*' + ], + 'assemblies': [ + ('System*', '2.0.*'), + ('CustomMarshalers', '2.0.*') + ] + }, + { 'name': 'libmono1.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.*/1.0.*/', + '/usr/lib/mono/gac/OpenSystem.C/1.0.*', + '/usr/lib/mono/gac/mono-service/1.0.*/', + '/usr/lib/mono/1.0/Mono.*.dll', + '/usr/lib/mono/1.0/OpenSystem.C.dll' + ], + 'assemblies': [ + ('Mono.*', '1.0.*'), + ('OpenSystem.C', '1.0.*'), + ('mono-service', '1.0.*') + ] + }, + { 'name': 'libmono2.0-cil', + 'patterns': [ + '/usr/lib/mono/gac/Mono.*/2.0.*/', + '/usr/lib/mono/gac/OpenSystem.C/2.0.*', + '/usr/lib/mono/gac/mono-service/2.0.*/', + '/usr/lib/mono/2.0/Mono.*.dll', + '/usr/lib/mono/2.0/OpenSystem.C.dll' + ], + 'assemblies': [ + ('Mono.*', '2.0.*'), + ('OpenSystem.C', '2.0.*'), + ('mono-service', '2.0.*') + ] + } +] -- cgit v1.2.3 From c226266988d37950b6e0ca0b967fa30fd43b714c Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Tue, 2 Oct 2007 19:35:45 +0000 Subject: wifistix-modules : Fix quoting in EXTRA_OEMAKE. --- packages/wifistix/wifistix-modules_5.0.16.p0.bb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/wifistix/wifistix-modules_5.0.16.p0.bb b/packages/wifistix/wifistix-modules_5.0.16.p0.bb index 2682ae6cbc..923f24e27a 100644 --- a/packages/wifistix/wifistix-modules_5.0.16.p0.bb +++ b/packages/wifistix/wifistix-modules_5.0.16.p0.bb @@ -25,10 +25,10 @@ S = "${WORKDIR}/src_cf8385" inherit module-base -EXTRA_OEMAKE = "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}" +EXTRA_OEMAKE = '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}"' do_compile() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS -- cgit v1.2.3 From b122a0a61c4045fa1cffcf5ba8ef868bd453ec5e Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Tue, 2 Oct 2007 20:15:53 +0000 Subject: wifistix : Change wifistix wireless device name from mwlan to wlan. --- packages/wifistix/wifistix-modules/marvell-devicename.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wifistix/wifistix-modules/marvell-devicename.patch b/packages/wifistix/wifistix-modules/marvell-devicename.patch index 4846b0947a..62ebe89883 100644 --- a/packages/wifistix/wifistix-modules/marvell-devicename.patch +++ b/packages/wifistix/wifistix-modules/marvell-devicename.patch @@ -5,7 +5,7 @@ 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))) { ++ if (!(dev = alloc_netdev(sizeof(wlan_private), "wlan%d", ether_setup))) { #endif PRINTM(MSG, "Init ethernet device failed!\n"); return NULL; -- cgit v1.2.3 From 06678f4cbb4978d53603b1b9f86e9862a2b2ce28 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Tue, 2 Oct 2007 20:18:16 +0000 Subject: wifistix : Update conf file with new device name. --- packages/wifistix/wifistix-modules/wifistix.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wifistix/wifistix-modules/wifistix.conf b/packages/wifistix/wifistix-modules/wifistix.conf index b232463975..117d8a2281 100644 --- a/packages/wifistix/wifistix-modules/wifistix.conf +++ b/packages/wifistix/wifistix-modules/wifistix.conf @@ -1,4 +1,4 @@ install pcmcia /sbin/modprobe --ignore-install pcmcia && modprobe pxa2xx-cs -alias mwlan0 mcf25 +alias wlan0 mcf25 -- cgit v1.2.3 From a6e66709133c6393bea82160a4a6a648e37de708 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Tue, 2 Oct 2007 21:07:52 +0000 Subject: xorg-xserver/xserver-kdrive-imageon_1.2.0.bb : enable built in fonts so it will start --- packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb index 8ed650266b..26f8666076 100644 --- a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb +++ b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb @@ -7,7 +7,7 @@ DEPENDS += "libxkbfile libxcalibrate" PROVIDES = "virtual/xserver" PE = "1" -PR = "r2" +PR = "r3" FILESPATH = "${FILE_DIRNAME}/xserver-kdrive-1.2.0:${FILE_DIRNAME}/xserver-kdrive" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ @@ -20,6 +20,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://kdrive-vidmemarea.patch;patch=1 \ file://kdrive-imageon.patch;patch=1 \ file://xcalibrate_coords.patch;patch=1 \ + file://enable-builtin-fonts.patch;patch=1 \ " S = "${WORKDIR}/xorg-server-${PV}" -- cgit v1.2.3 From c682389deb5384a1a18c9755376b0d255a9c3482 Mon Sep 17 00:00:00 2001 From: Henryk Ploetz Date: Wed, 3 Oct 2007 01:04:46 +0000 Subject: mono.bbclass: fix whitespace problem - fix for the problem experienced by scruggs on IRC today. There was an inconsistency in the amount and type of whitespace used in the python anonymous blocks between mono.bbclass and multimachine.bbclass. - fixed a small problem in the error output of mono_do_clilibs --- classes/mono.bbclass | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/classes/mono.bbclass b/classes/mono.bbclass index dcf5f7272c..c50274ed0c 100644 --- a/classes/mono.bbclass +++ b/classes/mono.bbclass @@ -186,7 +186,7 @@ python mono_do_clilibs() { if not dep_pkg in deps: deps.append(dep_pkg) else: - bb.note("Couldn't find CLI library provider for %s" % n) + bb.note("Couldn't find CLI library provider for %s" % (n,)) deps_file = os.path.join(pkgdest, pkg + ".clilibdeps") if os.path.exists(deps_file): @@ -198,7 +198,8 @@ python mono_do_clilibs() { fd.close() } -python() { +def mono_after_parse(d): + import bb # Insert mono_do_clilibs into PACKAGEFUNCS # Needs to be called after populate_packages, but before read_shlibdeps PACKAGEFUNCS = bb.data.getVar("PACKAGEFUNCS", d, 1) @@ -211,4 +212,7 @@ python() { i = PACKAGEFUNCS.index("populate_packages") PACKAGEFUNCS.insert(i+1, "mono_do_clilibs") bb.data.setVar("PACKAGEFUNCS", " ".join(PACKAGEFUNCS), d) + +python () { + mono_after_parse(d) } -- cgit v1.2.3 From 3e459b87c6d590a60db1a7b110177011913ee736 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 3 Oct 2007 06:33:17 +0000 Subject: linux/linux-rp_2.6.22.bb : re-add the w100-extmem patch so that Ximageon works again. --- packages/linux/linux-rp_2.6.22.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/linux/linux-rp_2.6.22.bb b/packages/linux/linux-rp_2.6.22.bb index b36189d9fb..50ee894ee9 100644 --- a/packages/linux/linux-rp_2.6.22.bb +++ b/packages/linux/linux-rp_2.6.22.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r9" +PR = "r10" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 @@ -37,6 +37,7 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \ ${RPSRC}/poodle_pm-r4.patch;patch=1 \ ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \ ${RPSRC}/w100_extaccel-r1.patch;patch=1 \ + ${RPSRC}/w100_extmem-r1.patch;patch=1 \ file://hostap-monitor-mode.patch;patch=1 \ file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \ ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \ -- cgit v1.2.3 From 7c18debc66db5e4bca03d28246547ef30d838875 Mon Sep 17 00:00:00 2001 From: Russ Ferriday Date: Wed, 3 Oct 2007 06:33:29 +0000 Subject: portmap: depend on fakeroot-native, closes #3016 --- packages/portmap/portmap.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/portmap/portmap.inc b/packages/portmap/portmap.inc index 478a5ed357..f73ac0e048 100644 --- a/packages/portmap/portmap.inc +++ b/packages/portmap/portmap.inc @@ -1,6 +1,7 @@ DESCRIPTION = "RPC program number mapper." SECTION = "console/network" LICENSE = "GPL" +DEPENDS = "fakeroot-native" SRC_URI = "${DEBIAN_MIRROR}/main/p/portmap/portmap_5.orig.tar.gz \ ${DEBIAN_MIRROR}/main/p/portmap/portmap_${PV}.diff.gz;patch=1 \ -- cgit v1.2.3 From 30354515ef3ef0483c5f4050a8334aaf3d50b89c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 3 Oct 2007 08:33:53 +0000 Subject: openmoko-panel-gsm: depend on libnotify --- packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb index 76401a2b58..079d6ffeea 100644 --- a/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb +++ b/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Shows the GSM / GPRS status in the OpenMoko panel" -DEPENDS = "libgsmd" +DEPENDS = "libgsmd libnotify" PV = "0.1.0+svn${SVNREV}" PR = "r0" -- cgit v1.2.3 From 202e63dd993a2aa781e7ab8a6f695f8af43b1066 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 3 Oct 2007 09:42:33 +0000 Subject: ixp4xx-npe: correct download link and instructions --- packages/ixp4xx/ixp4xx-npe_2.4.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ixp4xx/ixp4xx-npe_2.4.bb b/packages/ixp4xx/ixp4xx-npe_2.4.bb index 3eca80e882..71dc71e274 100644 --- a/packages/ixp4xx/ixp4xx-npe_2.4.bb +++ b/packages/ixp4xx/ixp4xx-npe_2.4.bb @@ -3,8 +3,9 @@ LICENSE = "Intel Software Licence Agreement" PR = "r0" DEPENDS = "ixp4xx-npe-native" -# You need to download the IPL_ixp400NpeLibrary-3_0.zip file (without crypto) from: -# http://www.intel.com/design/network/products/npfamily/ixp400_current.htm +# You need to download the IPL_ixp400NpeLibrary-2_4.zip file (without crypto) from: +# http://www.intel.com/design/network/products/npfamily/download_ixp400.htm +# "Intel IXP400 software - NPE microcode (non-crypto)" -> "2.4" # and put it in your downloads directory so bitbake will find it. # Make sure you *read* and accept the license - it is not a standard one. -- cgit v1.2.3 From 6ef81108167a63dd2f59302d35501d879fe04490 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 3 Oct 2007 09:45:40 +0000 Subject: mplayer: depend on xsp --- packages/mplayer/mplayer_svn.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mplayer/mplayer_svn.bb b/packages/mplayer/mplayer_svn.bb index faef8c0f2d..684923326a 100644 --- a/packages/mplayer/mplayer_svn.bb +++ b/packages/mplayer/mplayer_svn.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Open Source multimedia player." SECTION = "multimedia" PRIORITY = "optional" HOMEPAGE = "http://www.mplayerhq.hu/" -DEPENDS = "virtual/libsdl libmad zlib libpng jpeg liba52 freetype fontconfig alsa-lib lzo ncurses lame libxv virtual/libx11" +DEPENDS = "virtual/libsdl xsp libmad zlib libpng jpeg liba52 freetype fontconfig alsa-lib lzo ncurses lame libxv virtual/libx11" RDEPENDS = "mplayer-common" LICENSE = "GPL" SRC_URI = "svn://svn.mplayerhq.hu/mplayer;module=trunk \ -- cgit v1.2.3 From cfa978e9df15508e69c4c363284c689d922da2da Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 3 Oct 2007 11:07:08 +0000 Subject: mplayer/mplayer_svn.bb : disable imageon as building is broken --- packages/mplayer/mplayer_svn.bb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/mplayer/mplayer_svn.bb b/packages/mplayer/mplayer_svn.bb index 684923326a..bd2bc96b52 100644 --- a/packages/mplayer/mplayer_svn.bb +++ b/packages/mplayer/mplayer_svn.bb @@ -40,9 +40,6 @@ DEFAULT_PREFERENCE = "-1" PARALLEL_MAKE = "" -DEPENDS_append_c7x0 = " sharp-aticore-oss libw100 " -DEPENDS_append_hx4700 = " libw100 " - S = "${WORKDIR}/trunk" PACKAGES =+ "mencoder" @@ -176,11 +173,6 @@ EXTRA_OECONF_append_arm = " --disable-decoder=vorbis_decoder \ EXTRA_OECONF_append_progear = " --disable-sse --disable-3dnow --disable-mmxext --disable-sse2" -#enable support for the ati imageon series (w100 and w3220) -EXTRA_OECONF_append_c7x0 = " --enable-w100 --enable-imageon " -EXTRA_OECONF_append_hx4700 = " --enable-imageon " - - #build with support for the iwmmxt instruction and pxa270fb overlay support (pxa270 and up) #not every iwmmxt machine has the lcd connected to pxafb, but building the module doesn't hurt MY_ARCH := "${PACKAGE_ARCH}" -- cgit v1.2.3 From f71ba113eb283d7a60002dc6425b1f4c77429c28 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 3 Oct 2007 12:36:54 +0000 Subject: sanesrcrevs: bump more openmoko stuff after testing it on the neo --- conf/distro/include/sane-srcrevs.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 67380a3160..e26e7cf95e 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -18,7 +18,7 @@ SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "606" SRCREV_pn-gnuradio ?= "6377" SRCREV_pn-hildon-1 ?= "14173" -SRCREV_pn-libgsmd ?= "2957" +SRCREV_pn-libgsmd ?= "3074" SRCREV_pn-libmokogsmd2 ?= "2950" SRCREV_pn-libmokojournal2 ?= "2780" SRCREV_pn-libmokopanelui2 ?= "2958" @@ -33,7 +33,7 @@ SRCREV_pn-matchbox-desktop-2 ?= "1649" SRCREV_pn-matchbox-keyboard ?= "1675" SRCREV_pn-matchbox-keyboard-inputmethod ?= "1675" SRCREV_pn-matchbox-panel-2 ?= "1626" -SRCREV_pn-moko-gtk-engine ?= "3058" +SRCREV_pn-moko-gtk-engine ?= "3069" SRCREV_pn-neod ?= "2956" SRCREV_pn-oh-puzzles ?= "22" SRCREV_pn-osb-browser ?= "125" @@ -51,7 +51,7 @@ SRCREV_pn-openmoko-contacts2 ?= "350" SRCREV_pn-openmoko-dates ?= "467" SRCREV_pn-openmoko-dates2 ?= "617" SRCREV_pn-openmoko-dialer ?= "2811" -SRCREV_pn-openmoko-dialer2 ?= "2976" +SRCREV_pn-openmoko-dialer2 ?= "3073" SRCREV_pn-openmoko-feedreader2 ?= "3060" SRCREV_pn-openmoko-finger-demo ?= "1671" SRCREV_pn-openmoko-firststart2 ?= "2873" @@ -69,7 +69,7 @@ SRCREV_pn-openmoko-panel-clock ?= "2567" SRCREV_pn-openmoko-panel-demo ?= "1622" SRCREV_pn-openmoko-panel-demo-simple ?= "1328" SRCREV_pn-openmoko-panel-gps ?= "2900" -SRCREV_pn-openmoko-panel-gsm ?= "2936" +SRCREV_pn-openmoko-panel-gsm ?= "3074" SRCREV_pn-openmoko-panel-mainmenu ?= "2567" SRCREV_pn-openmoko-panel-usb ?= "2893" SRCREV_pn-openmoko-session ?= "152" -- cgit v1.2.3 From d63abad2c510fb80b1e2dc439f8277bfe39cd5c2 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 3 Oct 2007 12:43:09 +0000 Subject: openmoko2/openmoko-theme-standard2_svn.bb : remove creation of gtkrc on request of cwiiis XorA: Hi - could you remove the creation of /etc/gtk-2.0/gtkrc from packages/openmoko2/openmoko-theme-standard2_svn.bb please? It breaks setting the theme and as far as I can tell, isn't necessary --- packages/openmoko2/openmoko-theme-standard2_svn.bb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/openmoko2/openmoko-theme-standard2_svn.bb b/packages/openmoko2/openmoko-theme-standard2_svn.bb index b006f6d6dc..ec3b4f702e 100644 --- a/packages/openmoko2/openmoko-theme-standard2_svn.bb +++ b/packages/openmoko2/openmoko-theme-standard2_svn.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Standard Gtk+ theme for the OpenMoko distribution" SECTION = "openmoko/base" RCONFLICTS = "openmoko-theme-standard" PV = "0.1.0+${SVNREV}" -PR = "r3" +PR = "r4" inherit openmoko2 @@ -15,11 +15,7 @@ do_install() { cp -fpPR ${S}/* ${D}${datadir}/themes/openmoko-standard-2/ rm -rf ${D}${datadir}/themes/openmoko-standard-2/patches/ - install -d ${D}${sysconfdir}/gtk-2.0 - echo 'include "${datadir}/themes/openmoko-standard-2/gtk-2.0/gtkrc"' >> ${D}${sysconfdir}/gtk-2.0/gtkrc } -CONFFILES_${PN} = "${sysconfdir}/gtk-2.0/gtkrc" - PACKAGE_ARCH = "all" -FILES_${PN} = "${datadir} ${sysconfdir}" +FILES_${PN} = "${datadir}" -- cgit v1.2.3 From 27cb21bfe1d4a2214f7fa7fbb9ed15f84839fe44 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 3 Oct 2007 13:44:42 +0000 Subject: linux/linux-openmoko/defconfig-2.6.22.5-fic-gta0? : make both of these defconfigs the same. The aim of OM kernel is to boot on both devices and now it does. --- packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta01 | 13 ++++++------- packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta02 | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta01 b/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta01 index 1d12b6ec36..7aa23df77c 100644 --- a/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta01 +++ b/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta01 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.22.1 -# Thu Jul 26 22:01:38 2007 +# Linux kernel version: 2.6.22.5 +# Wed Oct 3 13:55:25 2007 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -200,11 +200,12 @@ CONFIG_ARCH_S3C2440=y CONFIG_SMDK2440_CPU2440=y CONFIG_MACH_HXD8=y CONFIG_MACH_NEO1973_GTA02=y +CONFIG_CPU_S3C2442=y # # S3C2442 Machines # -# CONFIG_SMDK2440_CPU2442 is not set +CONFIG_SMDK2440_CPU2442=y # # S3C2443 Machines @@ -282,6 +283,7 @@ CONFIG_KEXEC=y # At least one emulation must be selected # CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set # CONFIG_FPE_FASTFPE is not set # @@ -1196,9 +1198,6 @@ CONFIG_FONT_6x11=y # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set # CONFIG_LOGO is not set -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -# CONFIG_LOGO_LINUX_CLUT224 is not set # # Sound @@ -1586,7 +1585,7 @@ CONFIG_CONFIGFS_FS=m # CONFIG_EFS_FS is not set CONFIG_YAFFS_FS=y CONFIG_YAFFS_YAFFS1=y -# CONFIG_YAFFS_DOES_ECC is not set +CONFIG_YAFFS_9BYTE_TAGS=y CONFIG_YAFFS_YAFFS2=y CONFIG_YAFFS_AUTO_YAFFS2=y # CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set diff --git a/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta02 b/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta02 index 1d12b6ec36..7aa23df77c 100644 --- a/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta02 +++ b/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta02 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.22.1 -# Thu Jul 26 22:01:38 2007 +# Linux kernel version: 2.6.22.5 +# Wed Oct 3 13:55:25 2007 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -200,11 +200,12 @@ CONFIG_ARCH_S3C2440=y CONFIG_SMDK2440_CPU2440=y CONFIG_MACH_HXD8=y CONFIG_MACH_NEO1973_GTA02=y +CONFIG_CPU_S3C2442=y # # S3C2442 Machines # -# CONFIG_SMDK2440_CPU2442 is not set +CONFIG_SMDK2440_CPU2442=y # # S3C2443 Machines @@ -282,6 +283,7 @@ CONFIG_KEXEC=y # At least one emulation must be selected # CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set # CONFIG_FPE_FASTFPE is not set # @@ -1196,9 +1198,6 @@ CONFIG_FONT_6x11=y # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set # CONFIG_LOGO is not set -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -# CONFIG_LOGO_LINUX_CLUT224 is not set # # Sound @@ -1586,7 +1585,7 @@ CONFIG_CONFIGFS_FS=m # CONFIG_EFS_FS is not set CONFIG_YAFFS_FS=y CONFIG_YAFFS_YAFFS1=y -# CONFIG_YAFFS_DOES_ECC is not set +CONFIG_YAFFS_9BYTE_TAGS=y CONFIG_YAFFS_YAFFS2=y CONFIG_YAFFS_AUTO_YAFFS2=y # CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set -- cgit v1.2.3 From 979ad42ef53bb59179c9c2912b165fed595de31d Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Wed, 3 Oct 2007 14:31:27 +0000 Subject: argtable 2.7: add package --- argtable/.mtn2git_empty | 0 argtable/argtable_2.7.bb | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 argtable/.mtn2git_empty create mode 100644 argtable/argtable_2.7.bb diff --git a/argtable/.mtn2git_empty b/argtable/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/argtable/argtable_2.7.bb b/argtable/argtable_2.7.bb new file mode 100644 index 0000000000..27804626f3 --- /dev/null +++ b/argtable/argtable_2.7.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "Argtable is an ANSI C library for parsing GNU style command line options." +SECTION = "libs" +LICENSE = "LGPL" +HOMEPAGE = "http://argtable.sourceforge.net/" + +PR = "r0" + +DEPENDS = "libtool-cross" + +SRC_URI = "${SOURCEFORGE_MIRROR}/argtable/argtable2-6.tar.gz" + +S = ${WORKDIR}/argtable2-6 + +inherit autotools + +do_stage () { + oe_libinstall -a -so libargtable2 ${STAGING_LIBDIR} + install -m 0644 src/argtable2.h ${STAGING_INCDIR} +} + + -- cgit v1.2.3 From 3715bbdc2c230efaba8e98418db59a2943096e5b Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Wed, 3 Oct 2007 14:34:23 +0000 Subject: MAINTAINERS: add argtable to my recipies --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 7533c3f8fc..f58a2d8960 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -39,7 +39,7 @@ Mail: cbrake@bec-systems.com Website: http://bec-systems.com Interests: Support in OE for single board computers, web application support Machines: compulab-pxa270, logicpd-pxa270, -Recipes: mono +Recipes: mono argtable Person: Erik Hovland Mail: erik@hovland.org -- cgit v1.2.3 From cb7efaa77ff5eb38cfc59a84523cf017e250291b Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 3 Oct 2007 14:38:37 +0000 Subject: linux/linux-openmoko_2.6.22.5.bb : version bump to get new defconfig that allows same kernel on GTA01/2 --- packages/linux/linux-openmoko_2.6.22.5.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux/linux-openmoko_2.6.22.5.bb b/packages/linux/linux-openmoko_2.6.22.5.bb index e4608a7565..290f475130 100644 --- a/packages/linux/linux-openmoko_2.6.22.5.bb +++ b/packages/linux/linux-openmoko_2.6.22.5.bb @@ -8,4 +8,4 @@ SRC_URI += "file://fix-EVIOCGRAB-semantics-2.6.22.5.patch;patch=1" VANILLA_VERSION = "2.6.22.5" MOKOR = "moko11+svnr${SRCREV}" PV = "${VANILLA_VERSION}-${MOKOR}" -PR = "r2" +PR = "r3" -- cgit v1.2.3 From bc7a87b8d2670b3023308c4a83c00625b3947241 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Wed, 3 Oct 2007 15:58:25 +0000 Subject: uboot/u-boot-mkimage-openmoko-native_oe.bb : make build include dirs be before system dirs to we dont pick up /usr/include and /usr/local/include when we dont want to. --- .../makefile-no-dirafter.patch | 17 +++++++++++++++++ packages/uboot/u-boot-mkimage-openmoko-native_oe.bb | 1 + 2 files changed, 18 insertions(+) create mode 100644 packages/uboot/u-boot-mkimage-openmoko-native/makefile-no-dirafter.patch diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/makefile-no-dirafter.patch b/packages/uboot/u-boot-mkimage-openmoko-native/makefile-no-dirafter.patch new file mode 100644 index 0000000000..2ed26c3127 --- /dev/null +++ b/packages/uboot/u-boot-mkimage-openmoko-native/makefile-no-dirafter.patch @@ -0,0 +1,17 @@ +Index: git/tools/Makefile +=================================================================== +--- git.orig/tools/Makefile 2007-10-03 16:51:38.000000000 +0100 ++++ git/tools/Makefile 2007-10-03 16:52:03.000000000 +0100 +@@ -114,9 +114,9 @@ + # + # Use native tools and options + # +-CPPFLAGS = -idirafter $(SRCTREE)/include \ +- -idirafter $(OBJTREE)/include2 \ +- -idirafter $(OBJTREE)/include \ ++CPPFLAGS = -I$(SRCTREE)/include \ ++ -I$(OBJTREE)/include2 \ ++ -I$(OBJTREE)/include \ + -DTEXT_BASE=$(TEXT_BASE) -DUSE_HOSTCC + CFLAGS = $(HOST_CFLAGS) $(CPPFLAGS) -O + AFLAGS = -D__ASSEMBLY__ $(CPPFLAGS) diff --git a/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb b/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb index 8d69a54c4c..d0d47d84d8 100644 --- a/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb +++ b/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb @@ -55,6 +55,7 @@ file://uboot-gta02.patch;patch=1 \ file://uboot-s3c2443.patch;patch=1 \ file://uboot-smdk2443.patch;patch=1 \ file://unbusy-i2c.patch;patch=1 \ +file://makefile-no-dirafter.patch;patch=1 \ " PROVIDES = "" -- cgit v1.2.3 From 49f849d955510d2079e2de3d3a56d20c075eae59 Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Wed, 3 Oct 2007 17:05:47 +0000 Subject: mono 1.2.5.1: disable parallel make due to build issues in the MCS tree --- packages/mono/mono-mcs-intermediate_1.2.5.1.bb | 2 ++ packages/mono/mono-native_1.2.5.1.bb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/mono/mono-mcs-intermediate_1.2.5.1.bb b/packages/mono/mono-mcs-intermediate_1.2.5.1.bb index 07f9387e2a..49e9c2a8e7 100644 --- a/packages/mono/mono-mcs-intermediate_1.2.5.1.bb +++ b/packages/mono/mono-mcs-intermediate_1.2.5.1.bb @@ -9,6 +9,8 @@ require mono_1.2.5.inc PR = "r0" DEPENDS = "mono-native glib-2.0-native" +PARALLEL_MAKE = "" + SRC_URI += "file://mono-fix-libdir-path.patch;patch=1" # Inherit native to set up compiler and paths ... diff --git a/packages/mono/mono-native_1.2.5.1.bb b/packages/mono/mono-native_1.2.5.1.bb index 09223ddcab..acf05039a0 100644 --- a/packages/mono/mono-native_1.2.5.1.bb +++ b/packages/mono/mono-native_1.2.5.1.bb @@ -4,6 +4,8 @@ DEPENDS = "glib-2.0-native" SRC_URI += "file://mono-fix-libdir-path.patch;patch=1" +PARALLEL_MAKE = "" + inherit native #do_stage_prepend() { -- cgit v1.2.3 From 904f1c4293bb3782630904246eb9f1e7d4ca473d Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Wed, 3 Oct 2007 17:06:15 +0000 Subject: mono: drop old partially finished versions of mono --- packages/mono/mono-native_1.2.2.1.bb | 5 ----- packages/mono/mono-native_1.2.4.bb | 9 --------- packages/mono/mono.inc | 17 ----------------- packages/mono/mono_1.2.2.1.bb | 17 ----------------- packages/mono/mono_1.2.4.bb | 19 ------------------- packages/mono/mono_1.2.4.inc | 12 ------------ 6 files changed, 79 deletions(-) delete mode 100644 packages/mono/mono-native_1.2.2.1.bb delete mode 100644 packages/mono/mono-native_1.2.4.bb delete mode 100644 packages/mono/mono.inc delete mode 100644 packages/mono/mono_1.2.2.1.bb delete mode 100644 packages/mono/mono_1.2.4.bb delete mode 100644 packages/mono/mono_1.2.4.inc diff --git a/packages/mono/mono-native_1.2.2.1.bb b/packages/mono/mono-native_1.2.2.1.bb deleted file mode 100644 index 67651ae565..0000000000 --- a/packages/mono/mono-native_1.2.2.1.bb +++ /dev/null @@ -1,5 +0,0 @@ -require mono.inc - -DEPENDS = "glib-2.0-native" - -inherit native diff --git a/packages/mono/mono-native_1.2.4.bb b/packages/mono/mono-native_1.2.4.bb deleted file mode 100644 index 9043ccc801..0000000000 --- a/packages/mono/mono-native_1.2.4.bb +++ /dev/null @@ -1,9 +0,0 @@ -require mono_1.2.4.inc -PR = "r2" -DEPENDS = "glib-2.0-native" - -inherit native - -do_stage_prepend() { - install -m 755 ${S}/mono/monoburg/monoburg ${STAGING_BINDIR} -} diff --git a/packages/mono/mono.inc b/packages/mono/mono.inc deleted file mode 100644 index 444427ea4a..0000000000 --- a/packages/mono/mono.inc +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "Mono Programming Language" -SECTION = "devel/mono" -LICENSE = "GPL LGPL X11" - -SRC_URI = "http://go-mono.com/sources/mono/mono-${PV}.tar.gz \ - file://cpu-arm.h" - -S = "${WORKDIR}/mono-${PV}" - -inherit autotools - -EXTRA_OECONF = "--disable-mcs-build" -EXTRA_OECONF_arm = "--without-tls" - -do_compile_prepend() { - cp ${WORKDIR}/cpu-arm.h ${S}/mono/mini/ -} diff --git a/packages/mono/mono_1.2.2.1.bb b/packages/mono/mono_1.2.2.1.bb deleted file mode 100644 index 7d7134e2b2..0000000000 --- a/packages/mono/mono_1.2.2.1.bb +++ /dev/null @@ -1,17 +0,0 @@ -require mono.inc -DEPENDS = "mono-native glib-2.0" - -PR = "r1" - -#We only have a cpu-${arch}.h from arm, so let's mask out non-working architectures -COMPATIBLE_HOST = "arm.*-linux" - -do_install_append() { - install -d ${D}${libdir}/mono/1.0/ - cp ${S}/mcs/class/lib/monolite/* ${D}${libdir}/mono/1.0/ -} - -PACKAGES =+ "mono-dll" -FILES_mono-dll = "${libdir}/mono/1.0/" - - diff --git a/packages/mono/mono_1.2.4.bb b/packages/mono/mono_1.2.4.bb deleted file mode 100644 index 13cb463129..0000000000 --- a/packages/mono/mono_1.2.4.bb +++ /dev/null @@ -1,19 +0,0 @@ -require mono_1.2.4.inc -DEPENDS = "mono-native glib-2.0" - -PR = "r3" -SRC_URI += "file://mono-monoburg-Makefile.patch;patch=1 \ - file://mono-mips-endian.patch;patch=1 \ - file://mono-configure.patch;patch=1 \ - file://mono-mini-Makefile.patch;patch=1 \ - " - -do_install_append() { - install -d ${D}${libdir}/mono/1.0/ - cp ${S}/mcs/class/lib/monolite/* ${D}${libdir}/mono/1.0/ -} - -PACKAGES =+ "mono-dll" -FILES_mono-dll = "${libdir}/mono/1.0/" - - diff --git a/packages/mono/mono_1.2.4.inc b/packages/mono/mono_1.2.4.inc deleted file mode 100644 index b9a721150f..0000000000 --- a/packages/mono/mono_1.2.4.inc +++ /dev/null @@ -1,12 +0,0 @@ -DESCRIPTION = "Mono Programming Language" -SECTION = "devel/mono" -LICENSE = "GPL LGPL X11" - -SRC_URI = "http://go-mono.com/sources/mono/mono-${PV}.tar.bz2" - -S = "${WORKDIR}/mono-${PV}" - -inherit autotools -EXTRA_OECONF = "--disable-mcs-build" -EXTRA_OECONF_arm = "--without-tls" -EXTRA_OECONF_mipsel = "--without-tls" -- cgit v1.2.3 From 493a9dae7b8d0f0d1e05901bceaa48132c9d2c3e Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Wed, 3 Oct 2007 17:10:04 +0000 Subject: mono 1.2.5.1: add perl-native to DEPENDS --- packages/mono/mono-mcs-intermediate_1.2.5.1.bb | 2 +- packages/mono/mono-native_1.2.5.1.bb | 2 +- packages/mono/mono_1.2.5.1.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mono/mono-mcs-intermediate_1.2.5.1.bb b/packages/mono/mono-mcs-intermediate_1.2.5.1.bb index 49e9c2a8e7..813da24ddf 100644 --- a/packages/mono/mono-mcs-intermediate_1.2.5.1.bb +++ b/packages/mono/mono-mcs-intermediate_1.2.5.1.bb @@ -7,7 +7,7 @@ require mono_1.2.5.inc PR = "r0" -DEPENDS = "mono-native glib-2.0-native" +DEPENDS = "mono-native glib-2.0-native perl-native" PARALLEL_MAKE = "" diff --git a/packages/mono/mono-native_1.2.5.1.bb b/packages/mono/mono-native_1.2.5.1.bb index acf05039a0..7ac2246b3a 100644 --- a/packages/mono/mono-native_1.2.5.1.bb +++ b/packages/mono/mono-native_1.2.5.1.bb @@ -1,6 +1,6 @@ require mono_1.2.5.inc PR = "r1" -DEPENDS = "glib-2.0-native" +DEPENDS = "glib-2.0-native perl-native" SRC_URI += "file://mono-fix-libdir-path.patch;patch=1" diff --git a/packages/mono/mono_1.2.5.1.bb b/packages/mono/mono_1.2.5.1.bb index 53a671cd74..9a3d4971fd 100644 --- a/packages/mono/mono_1.2.5.1.bb +++ b/packages/mono/mono_1.2.5.1.bb @@ -1,6 +1,6 @@ require mono_1.2.5.inc -DEPENDS = "mono-native mono-mcs-intermediate glib-2.0" +DEPENDS = "mono-native mono-mcs-intermediate glib-2.0 perl-native" PR = "r2" -- cgit v1.2.3 From 28bbfa1c1ce42dfd54653330f59e1a11b6456371 Mon Sep 17 00:00:00 2001 From: Henryk Ploetz Date: Wed, 3 Oct 2007 20:59:46 +0000 Subject: mono 1.2.5.1: patch genmdesc.pl to use cpp from staging instead of host --- packages/mono/files/genmdesc-cpp.patch | 22 ++++++++++++++++++++++ packages/mono/mono_1.2.5.1.bb | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 packages/mono/files/genmdesc-cpp.patch diff --git a/packages/mono/files/genmdesc-cpp.patch b/packages/mono/files/genmdesc-cpp.patch new file mode 100644 index 0000000000..56eca8effd --- /dev/null +++ b/packages/mono/files/genmdesc-cpp.patch @@ -0,0 +1,22 @@ +--- mono-1.2.5.1/mono/mini/genmdesc.pl.orig 2007-10-03 21:02:07.000000000 +0200 ++++ mono-1.2.5.1/mono/mini/genmdesc.pl 2007-10-03 21:06:16.000000000 +0200 +@@ -36,7 +36,9 @@ + $i++; + } + close (OPS); +- my $cpp = "cpp -undef "; ++ my $cpp = $ENV{"CPP"}; ++ $cpp = "cpp" unless defined $cpp; ++ $cpp .= " -undef "; + foreach (@defines) { + $cpp .= " -U$_"; + $arch_found = 1 if $arch eq $_; +@@ -44,7 +46,7 @@ + die "$arch arch is not supported.\n" unless $arch_found; + + $cpp .= " -D$arch $srcdir/mini-ops.h|"; +- #print "Running: $cpp\n"; ++ print "Running: $cpp\n"; + open (OPS, $cpp) || die "Cannot execute cpp: $!"; + while () { + next unless /MINI_OP\s*\(\s*(\S+?)\s*,\s*"(.*?)"/; diff --git a/packages/mono/mono_1.2.5.1.bb b/packages/mono/mono_1.2.5.1.bb index 9a3d4971fd..c3ea1818ad 100644 --- a/packages/mono/mono_1.2.5.1.bb +++ b/packages/mono/mono_1.2.5.1.bb @@ -4,7 +4,8 @@ DEPENDS = "mono-native mono-mcs-intermediate glib-2.0 perl-native" PR = "r2" -SRC_URI += "file://configure.patch;patch=1" +SRC_URI += "file://configure.patch;patch=1 \ + file://genmdesc-cpp.patch;patch=1" # Per http://www.mono-project.com/Mono:ARM EXTRA_OECONF += " --disable-mcs-build " -- cgit v1.2.3 From 83ed84ce4985db7354cdf8cef5389af4144eadd0 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Wed, 3 Oct 2007 23:35:22 +0000 Subject: gumstix-verdex : Add support for wired network interface on netwifimicroSD card. --- conf/machine/include/gumstix.inc | 6 ++++-- packages/linux/linux-2.6.21/gumstix-verdex/defconfig | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/conf/machine/include/gumstix.inc b/conf/machine/include/gumstix.inc index 4f66f92cf0..fc5fd4e136 100644 --- a/conf/machine/include/gumstix.inc +++ b/conf/machine/include/gumstix.inc @@ -13,6 +13,7 @@ module_autoload_mmc_block = "mmc_block" module_autoload_gumstix_gadget = "gumstix_gadget" module_autoload_g_ether = "g_ether" module_autoload_smc91x = "smc91x" +module_autoload_smc911x = "smc911x" UBOOT_ENTRYPOINT = "a0008000" @@ -33,8 +34,9 @@ MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS = "kernel-module-unix \ kernel-module-rtc-sysfs \ kernel-module-smc91x \ kernel-module-gumstix-smc91x \ - " - + kernel-module-smc911x \ + kernel-module-gumstix-smc911x \ + " # used by sysvinit_2 SERIAL_CONSOLE = "115200 ttyS0 vt100" diff --git a/packages/linux/linux-2.6.21/gumstix-verdex/defconfig b/packages/linux/linux-2.6.21/gumstix-verdex/defconfig index 9107cd0d7c..c6d5480089 100644 --- a/packages/linux/linux-2.6.21/gumstix-verdex/defconfig +++ b/packages/linux/linux-2.6.21/gumstix-verdex/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21 -# Thu Sep 13 14:49:02 2007 +# Wed Oct 3 16:35:16 2007 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -828,7 +828,8 @@ CONFIG_MII=m CONFIG_SMC91X=m CONFIG_SMC91X_GUMSTIX=m # CONFIG_DM9000 is not set -# CONFIG_SMC911X is not set +CONFIG_SMC911X=m +CONFIG_SMC911X_GUMSTIX=m # # Ethernet (1000 Mbit) -- cgit v1.2.3 From d94d2b66d2be56336d18070b2c492c8c42bb3239 Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Thu, 4 Oct 2007 10:57:20 +0000 Subject: argtable 2.7: mv to packages, and fix 2.7 version info in recipe --- argtable/.mtn2git_empty | 0 argtable/argtable_2.7.bb | 21 --------------------- packages/argtable/.mtn2git_empty | 0 packages/argtable/argtable_2.7.bb | 21 +++++++++++++++++++++ 4 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 argtable/.mtn2git_empty delete mode 100644 argtable/argtable_2.7.bb create mode 100644 packages/argtable/.mtn2git_empty create mode 100644 packages/argtable/argtable_2.7.bb diff --git a/argtable/.mtn2git_empty b/argtable/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/argtable/argtable_2.7.bb b/argtable/argtable_2.7.bb deleted file mode 100644 index 27804626f3..0000000000 --- a/argtable/argtable_2.7.bb +++ /dev/null @@ -1,21 +0,0 @@ -DESCRIPTION = "Argtable is an ANSI C library for parsing GNU style command line options." -SECTION = "libs" -LICENSE = "LGPL" -HOMEPAGE = "http://argtable.sourceforge.net/" - -PR = "r0" - -DEPENDS = "libtool-cross" - -SRC_URI = "${SOURCEFORGE_MIRROR}/argtable/argtable2-6.tar.gz" - -S = ${WORKDIR}/argtable2-6 - -inherit autotools - -do_stage () { - oe_libinstall -a -so libargtable2 ${STAGING_LIBDIR} - install -m 0644 src/argtable2.h ${STAGING_INCDIR} -} - - diff --git a/packages/argtable/.mtn2git_empty b/packages/argtable/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/argtable/argtable_2.7.bb b/packages/argtable/argtable_2.7.bb new file mode 100644 index 0000000000..ee3e6bd70a --- /dev/null +++ b/packages/argtable/argtable_2.7.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "Argtable is an ANSI C library for parsing GNU style command line options." +SECTION = "libs" +LICENSE = "LGPL" +HOMEPAGE = "http://argtable.sourceforge.net/" + +PR = "r1" + +DEPENDS = "libtool-cross" + +SRC_URI = "${SOURCEFORGE_MIRROR}/argtable/argtable2-7.tar.gz" + +S = ${WORKDIR}/argtable2-7 + +inherit autotools + +do_stage () { + oe_libinstall -a -so libargtable2 ${STAGING_LIBDIR} + install -m 0644 src/argtable2.h ${STAGING_INCDIR} +} + + -- cgit v1.2.3 From b930b5f48ece9cc874856b319663fbd8fba2b1ef Mon Sep 17 00:00:00 2001 From: Henryk Ploetz Date: Thu, 4 Oct 2007 11:34:18 +0000 Subject: ipkg: fix long filenames --- packages/ipkg/ipkg_0.99.163.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb index c5972a7c53..56e25900c1 100644 --- a/packages/ipkg/ipkg_0.99.163.bb +++ b/packages/ipkg/ipkg_0.99.163.bb @@ -1,5 +1,5 @@ include ipkg.inc -PR = "r4" +PR = "r5" S = "${WORKDIR}/ipkg-${PV}" @@ -8,6 +8,7 @@ SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \ file://is-processing.patch;patch=1 \ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \ + file://lonk-link-name.patch;patch=1 \ " do_stage() { -- cgit v1.2.3 From bab0c48ac5132ad63b4f3da27a1c39c20b5db86c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 4 Oct 2007 11:52:55 +0000 Subject: ipkg: check in missing patch --- packages/ipkg/files/lonk-link-name.patch | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 packages/ipkg/files/lonk-link-name.patch diff --git a/packages/ipkg/files/lonk-link-name.patch b/packages/ipkg/files/lonk-link-name.patch new file mode 100644 index 0000000000..14fc73a5ac --- /dev/null +++ b/packages/ipkg/files/lonk-link-name.patch @@ -0,0 +1,38 @@ +--- ipkg-0.99.163/libbb/unarchive.c.orig 2007-10-04 12:39:42.000000000 +0200 ++++ ipkg-0.99.163/libbb/unarchive.c 2007-10-04 12:41:28.000000000 +0200 +@@ -595,10 +595,6 @@ + if (longname) { + tar_entry->name = longname; + longname = NULL; +- } +- else if (linkname) { +- tar_entry->name = linkname; +- linkname = NULL; + } else + #endif + if (tar.formated.prefix[0] == 0) { +@@ -606,6 +602,15 @@ + } else { + tar_entry->name = concat_path_file(tar.formated.prefix, tar.formated.name); + } ++ ++#ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS ++ if (linkname) { ++ tar_entry->link_name = linkname; ++ linkname = NULL; ++ } else ++#endif ++ tar_entry->link_name = strlen(tar.formated.linkname) ? ++ xstrdup(tar.formated.linkname) : NULL; + + // tar_entry->name = xstrdup(tar.formated.name); + +@@ -618,8 +623,6 @@ + tar_entry->gid = strtol(tar.formated.gid, NULL, 8); + tar_entry->size = strtol(tar.formated.size, NULL, 8); + tar_entry->mtime = strtol(tar.formated.mtime, NULL, 8); +- tar_entry->link_name = strlen(tar.formated.linkname) ? +- xstrdup(tar.formated.linkname) : NULL; + tar_entry->device = (strtol(tar.formated.devmajor, NULL, 8) << 8) + + strtol(tar.formated.devminor, NULL, 8); + -- cgit v1.2.3 From 94e1ce507e69378472f22faedd6606eb91510e6a Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Fri, 5 Oct 2007 12:04:34 +0000 Subject: lighttpd: split plugin modules into separate packages. --- packages/lighttpd/lighttpd_1.4.18.bb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/lighttpd/lighttpd_1.4.18.bb b/packages/lighttpd/lighttpd_1.4.18.bb index 14a6bd0f25..a83efcaf40 100644 --- a/packages/lighttpd/lighttpd_1.4.18.bb +++ b/packages/lighttpd/lighttpd_1.4.18.bb @@ -2,6 +2,7 @@ DESCRIPTION = "Web server" SECTION = "net" LICENSE = "BSD" DEPENDS = "libpcre" +PR = "r1" SRC_URI = "http://www.lighttpd.net/download/lighttpd-${PV}.tar.gz \ file://configure.in.patch;patch=1 \ @@ -37,4 +38,11 @@ do_stage() { autotools_stage_all } -FILES_${PN} += "${libdir}/mod_*.so ${sysconfdir} /www" +FILES_${PN} += "${sysconfdir} /www" + +PACKAGES_DYNAMIC = "lighttpd-module-*" + +python populate_packages_prepend () { + lighttpd_libdir = bb.data.expand('${libdir}', d) + do_split_packages(d, lighttpd_libdir, '^mod_(.*)\.so$', 'lighttpd-module-%s', 'Lighttpd module for %s', extra_depends='') +} -- cgit v1.2.3 From f0f72d8aa5de6a41796117c6e781e150bbacbe47 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Fri, 5 Oct 2007 12:42:32 +0000 Subject: fastcgi: Disable parallel build, it's broken --- packages/fastcgi/fastcgi_2.4.0.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/fastcgi/fastcgi_2.4.0.bb b/packages/fastcgi/fastcgi_2.4.0.bb index a42949cb96..beada396cd 100644 --- a/packages/fastcgi/fastcgi_2.4.0.bb +++ b/packages/fastcgi/fastcgi_2.4.0.bb @@ -1,6 +1,6 @@ LICENSE = "Open Market" DESCRIPTION = "Fast CGI backend (web server to CGI handler) library" -PR = "r0" +PR = "r1" SRC_URI = "http://www.fastcgi.com/dist/fcgi-${PV}.tar.gz" @@ -8,6 +8,8 @@ S=${WORKDIR}/fcgi-${PV} LEAD_SONAME = "libfcgi.so*" +PARALLEL_MAKE="" + inherit autotools pkgconfig do_stage() { -- cgit v1.2.3 From 5cc37e756a2e69d63b3efd9e5e121c40815e8df9 Mon Sep 17 00:00:00 2001 From: Henryk Ploetz Date: Fri, 5 Oct 2007 13:28:15 +0000 Subject: gtk-sharp 2.10: add package --- packages/gtk-sharp/.mtn2git_empty | 0 packages/gtk-sharp/gtk-sharp.inc | 11 +++++ packages/gtk-sharp/gtk-sharp_2.10.2.bb | 84 ++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 packages/gtk-sharp/.mtn2git_empty create mode 100644 packages/gtk-sharp/gtk-sharp.inc create mode 100644 packages/gtk-sharp/gtk-sharp_2.10.2.bb diff --git a/packages/gtk-sharp/.mtn2git_empty b/packages/gtk-sharp/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gtk-sharp/gtk-sharp.inc b/packages/gtk-sharp/gtk-sharp.inc new file mode 100644 index 0000000000..1fc9941f2b --- /dev/null +++ b/packages/gtk-sharp/gtk-sharp.inc @@ -0,0 +1,11 @@ +DESCRIPTION = "GTK bindings for mono" +SECTION = "devel/mono" + +DEPENDS = "mono mono-native gtk+ atk pango cairo glib-2.0 libglade " +RDEPENDS = "mono" + +inherit autotools + +# For some reason the URL template changes from version to version, +# therefore use some variables for the directory and extension +SRC_URI = "http://go-mono.com/sources/gtk-sharp${SDIRVER}/gtk-sharp-${PV}.tar.${SEXT}" diff --git a/packages/gtk-sharp/gtk-sharp_2.10.2.bb b/packages/gtk-sharp/gtk-sharp_2.10.2.bb new file mode 100644 index 0000000000..87865b7aed --- /dev/null +++ b/packages/gtk-sharp/gtk-sharp_2.10.2.bb @@ -0,0 +1,84 @@ +PV = "2.10.2" +PR = "r0" +SDIRVER = "210" +SEXT = "bz2" + +inherit mono +require gtk-sharp.inc + +FILES_libgtk2.0-cil = "/usr/lib/libgtksharpglue-2.so \ + /usr/lib/libgdksharpglue-2.so \ + /usr/lib/libpangosharpglue-2.so \ + /usr/lib/mono/gac/gtk-sharp \ + /usr/lib/mono/gac/gdk-sharp \ + /usr/lib/mono/gac/atk-sharp \ + /usr/lib/mono/gac/pango-sharp \ + /usr/lib/mono/gac/gtk-dotnet \ + /usr/lib/mono/gtk-sharp-2.0/gtk-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/gdk-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/atk-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/pango-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/gtk-dotnet.dll \ + /usr/lib/mono/gac/policy.2.*.gtk-sharp/ \ + /usr/lib/mono/gac/policy.2.*.gdk-sharp/ \ + /usr/lib/mono/gac/policy.2.*.atk-sharp/ \ + /usr/lib/mono/gac/policy.2.*.pango-sharp/ \ + /usr/lib/mono/gac/policy.2.*.gtk-dotnet/ \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.gtk-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.gdk-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.atk-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.pango-sharp.dll \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.gtk-dotnet.dll \ + " +FILES_libgtk2.0-cil-dev = "/usr/lib/pkgconfig/gtk-sharp-2.0.pc \ + /usr/lib/pkgconfig/gtk-dotnet-2.0.pc \ + /usr/share/gapi-2.0/pango-api.xml \ + /usr/share/gapi-2.0/atk-api.xml \ + /usr/share/gapi-2.0/gdk-api.xml \ + /usr/share/gapi-2.0/gtk-api.xml" +FILES_libgtk2.0-cil-dbg = "/usr/lib/.debug/libgtksharpglue-2.so \ + /usr/lib/.debug/libgdksharpglue-2.so \ + /usr/lib/.debug/libpangosharpglue-2.so" + +FILES_libglib2.0-cil = "/usr/lib/mono/gac/glib-sharp \ + /usr/lib/libglibsharpglue-2.so \ + /usr/lib/mono/gtk-sharp-2.0/glib-sharp.dll \ + /usr/lib/mono/gac/policy.2.*.glib-sharp/ \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.glib-sharp.dll" +FILES_libglib2.0-cil-dev = "/usr/lib/pkgconfig/glib-sharp-2.0.pc" +FILES_libglib2.0-cil-dbg = "/usr/lib/.debug/libglibsharpglue-2.so" + +FILES_libglade2.0-cil = "/usr/lib/mono/gac/glade-sharp \ + /usr/lib/libgladesharpglue-2.so \ + /usr/lib/mono/gtk-sharp-2.0/glade-sharp.dll \ + /usr/lib/mono/gac/policy.2.*.glade-sharp/ \ + /usr/lib/mono/gtk-sharp-2.0/policy.2.*.glade-sharp.dll" +FILES_libglade2.0-cil-dev = "/usr/lib/pkgconfig/glade-sharp-2.0.pc \ + /usr/share/gapi-2.0/glade-api.xml" +FILES_libglade2.0-cil-dbg = "/usr/lib/.debug/libgladesharpglue-2.so" + +FILES_gtk-sharp-gapi2 = " \ + /usr/bin/gapi2-* \ + /usr/lib/gtk-sharp-2.0/gapi*" +FILES_gtk-sharp-gapi2-dev = "/usr/lib/pkgconfig/gapi-2.0.pc" + +FILES_gtk-sharp2-glue-dev = "/usr/lib/libgtksharpglue-2.la \ + /usr/lib/libgtksharpglue-2.a \ + /usr/lib/libpangosharpglue-2.la \ + /usr/lib/libpangosharpglue-2.a \ + /usr/lib/libgdksharpglue-2.la \ + /usr/lib/libgdksharpglue-2.a" + +FILES_glade-sharp2-glue-dev = " \ + /usr/lib/libgladesharpglue-2.la \ + /usr/lib/libgladesharpglue-2.a" + +FILES_glib-sharp2-glue-dev = " \ + /usr/lib/libglibsharpglue-2.la \ + /usr/lib/libglibsharpglue-2.a" + +PACKAGES = "libgtk2.0-cil libgtk2.0-cil-dev libgtk2.0-cil-dbg \ + libglib2.0-cil libglib2.0-cil-dev libglib2.0-cil-dbg \ + libglade2.0-cil libglade2.0-cil-dev libglade2.0-cil-dbg \ + gtk-sharp-gapi2 gtk-sharp-gapi2-dev \ + gtk-sharp2-glue-dev glade-sharp2-glue-dev glib-sharp2-glue-dev" -- cgit v1.2.3 From 7310b3ba8eff902d605b274f3a61c417a0fbff94 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 08:16:58 +0000 Subject: gcc 4.2.1: make maverick stuff ep93xx specific --- packages/gcc/gcc-cross_4.2.1.bb | 2 +- packages/gcc/gcc_4.2.1.bb | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-cross_4.2.1.bb b/packages/gcc/gcc-cross_4.2.1.bb index 34f083b111..e67d6c6b7a 100644 --- a/packages/gcc/gcc-cross_4.2.1.bb +++ b/packages/gcc/gcc-cross_4.2.1.bb @@ -5,7 +5,7 @@ inherit cross FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" # NOTE: split PR. If the main .oe changes something that affects its *build* # remember to increment this one too. -PR = "r7" +PR = "r8" DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index 07f4b0db0c..d11f2460ae 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -1,4 +1,4 @@ -PR = "r4" +PR = "r5" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" @@ -38,6 +38,9 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://unbreak-armv4t.patch;patch=1 \ file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ file://cache-amnesia.patch;patch=1 \ +" + +SRC_URI_append_ep93xx = " \ file://arm-crunch-saveregs.patch;patch=1 \ file://arm-crunch-20000320.patch;patch=1 \ file://arm-crunch-compare.patch;patch=1 \ @@ -58,6 +61,8 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://gfortran.patch;patch=1 \ " +PACKAGE_ARCH_ep93xx = "${MACHINE_ARCH}" + SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " #Set the fortran bits -- cgit v1.2.3 From 17343fbb08ed187f6f2444ee6e676a969104dfe4 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 12:45:14 +0000 Subject: webkit-gtk: add unstage task till Holger fixes qmake --- packages/webkit/files/WebKit.pri | 2 +- packages/webkit/files/WebKit.pro | 6 +++--- packages/webkit/webkit-gtk_svn.bb | 8 ++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/webkit/files/WebKit.pri b/packages/webkit/files/WebKit.pri index 350c95d311..0c47afe7fd 100644 --- a/packages/webkit/files/WebKit.pri +++ b/packages/webkit/files/WebKit.pri @@ -25,7 +25,7 @@ CONFIG(release) { BASE_DIR = $$PWD qt-port:INCLUDEPATH += \ - $$PWD/WebKitQt/Api + $$PWD/WebKit/qt/Api gtk-port:INCLUDEPATH += \ $$BASE_DIR/WebCore/platform/gtk \ $$BASE_DIR/WebCore/platform/network/curl \ diff --git a/packages/webkit/files/WebKit.pro b/packages/webkit/files/WebKit.pro index 8536c41515..dca2614109 100644 --- a/packages/webkit/files/WebKit.pro +++ b/packages/webkit/files/WebKit.pro @@ -1,15 +1,15 @@ TEMPLATE = subdirs CONFIG += ordered !gtk-port:CONFIG += qt-port -qt-port:!win32-*:SUBDIRS += WebKitQt/Plugins +qt-port:!win32-*:SUBDIRS += WebKit/qt/Plugins SUBDIRS += \ WebCore \ JavaScriptCore/kjs/testkjs.pro qt-port { - SUBDIRS += WebKitQt/QtLauncher + SUBDIRS += WebKit/qt/QtLauncher - !win32-*: SUBDIRS += WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro + !win32-*: SUBDIRS += WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro } gtk-port:SUBDIRS += \ diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb index 35ab38a167..7ee08bf5ab 100644 --- a/packages/webkit/webkit-gtk_svn.bb +++ b/packages/webkit/webkit-gtk_svn.bb @@ -59,6 +59,14 @@ do_stage() { oe_runmake install } + +# Noooooooooooooooooooooooooooooooooooooooooooo... +do_unstage() { + rm ${STAGING_LIBDIR}/libWebKitG* || true +} + +addtask unstage before do_configure + PACKAGES =+ "webkit-gtklauncher-dbg webkit-gtklauncher" FILES_webkit-gtklauncher = "${bindir}/GtkLauncher" -- cgit v1.2.3 From ff1b7a11d9e6abc6e1c9cd8454e52db456229d91 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 12:45:34 +0000 Subject: sane-srcrevs: bump some stuff --- conf/distro/include/sane-srcrevs.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index e26e7cf95e..d3985911d9 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -41,7 +41,7 @@ SRCREV_pn-osb-jscore ?= "117" SRCREV_pn-osb-nrcit ?= "125" SRCREV_pn-osb-nrcore ?= "126" SRCREV_pn-openmoko-appmanager ?= "1851" -SRCREV_pn-openmoko-browser2 ?= "3061" +SRCREV_pn-openmoko-browser2 ?= "3082" SRCREV_pn-openmoko-calculator ?= "2404" SRCREV_pn-openmoko-calculator2 ?= "2789" SRCREV_pn-openmoko-common ?= "397" @@ -52,7 +52,7 @@ SRCREV_pn-openmoko-dates ?= "467" SRCREV_pn-openmoko-dates2 ?= "617" SRCREV_pn-openmoko-dialer ?= "2811" SRCREV_pn-openmoko-dialer2 ?= "3073" -SRCREV_pn-openmoko-feedreader2 ?= "3060" +SRCREV_pn-openmoko-feedreader2 ?= "3080" SRCREV_pn-openmoko-finger-demo ?= "1671" SRCREV_pn-openmoko-firststart2 ?= "2873" SRCREV_pn-openmoko-footer ?= "2354" @@ -86,7 +86,7 @@ SRCREV_pn-openmoko-theme-standard-qvga ?= "2370" SRCREV_pn-openmoko-theme-standard2 ?= "3044" SRCREV_pn-openmoko-theme-standard2-qvga ?= "2964" SRCREV_pn-openmoko-today ?= "3056" -SRCREV_pn-openmoko-today2 ?= "3056" +SRCREV_pn-openmoko-today2 ?= "3088" SRCREV_pn-openmoko-today2-folders ?= "2680" SRCREV_pn-openocd ?= "206" SRCREV_pn-openocd-native ?= "206" @@ -94,7 +94,7 @@ SRCREV_pn-psplash ?= "249" SRCREV_pn-settings-daemon ?= "1615" SRCREV_pn-sjf2410-linux-native ?= "933" SRCREV_pn-sphyrna ?= "44" -SRCREV_pn-webkit-gtk ?= "25808" +SRCREV_pn-webkit-gtk ?= "26079" SRCREV_pn-xoo ?= "1623" SRCREV_pn-mplayer ?= "24587" SRCREV_pn-networkmanager ?= "2887" -- cgit v1.2.3 From 506e335420a32971d7cbc175adecbde85a4aa2b3 Mon Sep 17 00:00:00 2001 From: Shane Volpe Date: Sat, 6 Oct 2007 13:41:39 +0000 Subject: fpdf: r0 Initial release --- packages/fpdf/.mtn2git_empty | 0 packages/fpdf/fpdf_1.53.bb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 packages/fpdf/.mtn2git_empty create mode 100644 packages/fpdf/fpdf_1.53.bb diff --git a/packages/fpdf/.mtn2git_empty b/packages/fpdf/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fpdf/fpdf_1.53.bb b/packages/fpdf/fpdf_1.53.bb new file mode 100644 index 0000000000..5f551672fe --- /dev/null +++ b/packages/fpdf/fpdf_1.53.bb @@ -0,0 +1,32 @@ +DESCRIPTION = "Free PDF Creator for PHP" +SECTION = "libs" +DEPENDS = "" +RDEPENDS = "php" +LICENSE = "FREEWARE" +PR = "r0" + +SRC_URI = "http://www.fpdf.org/en/download/fpdf153.tgz \ + " + +S = "${WORKDIR}/fpdf153" +do_compile() { + : +} + +do_install() { + install -d ${D}/usr \ + ${D}/usr/fpdf \ + ${D}/usr/fpdf/font \ + ${D}/usr/fpdf/font/makefont + + install -m 644 ${S}/fpdf.php ${D}/usr/fpdf/ + install -m 644 ${S}/fpdf.css ${D}/usr/fpdf/ + install -m 644 ${S}/font/*.php ${D}/usr/fpdf/font/ + install -m 644 ${S}/font/makefont/* ${D}/usr/fpdf/font/makefont/ +} + +FILES_${PN} = "${exec_prefix}/fpdf/*.* \ + ${exec_prefix}/fpdf/font/*.* \ + " +FILES_${PN}-dev = "${exec_prefix}/fpdf/font/makefont/*" + -- cgit v1.2.3 From 9ea5deaddc75a14bd987c9686cf9a07f03c1baf7 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 15:08:38 +0000 Subject: openmoko-appmanager2: add it --- packages/openmoko2/openmoko-appmanager2_svn.bb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/openmoko2/openmoko-appmanager2_svn.bb diff --git a/packages/openmoko2/openmoko-appmanager2_svn.bb b/packages/openmoko2/openmoko-appmanager2_svn.bb new file mode 100644 index 0000000000..8faf5fd1f9 --- /dev/null +++ b/packages/openmoko2/openmoko-appmanager2_svn.bb @@ -0,0 +1,7 @@ +DESCRIPTION = "The OpenMoko Application Manager" +SECTION = "openmoko/applications" +DEPENDS = "libmokoui2 libmokojournal2 startup-notification dbus-glib libice libsm" +PV = "0.1.0+svn${SVNREV}" +PR = "r0" + +inherit openmoko2 -- cgit v1.2.3 From 388d14d2f430a534ee73af85b04ee68377f09aa8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 15:09:03 +0000 Subject: sane-srcrevs: add openmoko-appmanager2 --- conf/distro/include/sane-srcrevs.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index d3985911d9..008881ed99 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -41,6 +41,7 @@ SRCREV_pn-osb-jscore ?= "117" SRCREV_pn-osb-nrcit ?= "125" SRCREV_pn-osb-nrcore ?= "126" SRCREV_pn-openmoko-appmanager ?= "1851" +SRCREV_pn-openmoko-appmanager2 ?= "3090" SRCREV_pn-openmoko-browser2 ?= "3082" SRCREV_pn-openmoko-calculator ?= "2404" SRCREV_pn-openmoko-calculator2 ?= "2789" -- cgit v1.2.3 From 3d8bb77643c145191f05f1e606879b3df79242fa Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 18:01:38 +0000 Subject: llvm: commit WIP hacks to keep holger busy --- packages/llvm/files/.mtn2git_empty | 0 packages/llvm/llvm-gcc4-cross_svn.bb | 32 ++++++++++++++++++++++++++++++++ packages/llvm/llvm-gcc4_svn.bb | 19 +++++++++++++++++++ packages/llvm/llvm-native_2.0.bb | 4 ++++ packages/llvm/llvm_2.0.bb | 6 ++++++ 5 files changed, 61 insertions(+) create mode 100644 packages/llvm/files/.mtn2git_empty create mode 100644 packages/llvm/llvm-gcc4-cross_svn.bb create mode 100644 packages/llvm/llvm-gcc4_svn.bb create mode 100644 packages/llvm/llvm_2.0.bb diff --git a/packages/llvm/files/.mtn2git_empty b/packages/llvm/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/llvm/llvm-gcc4-cross_svn.bb b/packages/llvm/llvm-gcc4-cross_svn.bb new file mode 100644 index 0000000000..48302c371d --- /dev/null +++ b/packages/llvm/llvm-gcc4-cross_svn.bb @@ -0,0 +1,32 @@ +DESCRIPTION = "The Low Level Virtual Machine - gcc4 frontend" +HOMEPAGE = "http://llvm.org" +LICENSE = "various" + +DEPENDS = "llvm-native" + +PV = "2.0+svnr${SRCREV}" + +inherit autotools cross + +SRC_URI = "svn://anonsvn.opensource.apple.com/svn/llvm/;module=trunk \ + " + +S = "${WORKDIR}/trunk" + +EXTRA_OECONF = "--disable-shared \ + --enable-llvm=/data/build/koen/OE/build/tmp/angstrom/work/i686-linux/llvm-native-2.0-r0/llvm-2.0 \ + " + +do_configure() { + gnu-configize + libtoolize --force + oe_runconf +} + +PARALLEL_MAKE = "" + +#oe_runmake gets distracted by GNUMakefiles... +# we also need to get an install.sh and config-ml.in in gcc/ as well somehow +do_compile_prepend() { + rm -f ${S}/GNUmakefile +} diff --git a/packages/llvm/llvm-gcc4_svn.bb b/packages/llvm/llvm-gcc4_svn.bb new file mode 100644 index 0000000000..599e2ca183 --- /dev/null +++ b/packages/llvm/llvm-gcc4_svn.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "The Low Level Virtual Machine - gcc4 frontend" +HOMEPAGE = "http://llvm.org" +LICENSE = "various" + +DEPENDS = "llvm-native" + +PV = "2.0+svnr${SRCREV}" + +inherit autotools cross + +SRC_URI = "svn://anonsvn.opensource.apple.com/svn/llvm/;module=trunk \ + " + +S = "${WORKDIR}/trunk" + +EXTRA_OECONF = "--disable-shared \ + --enable-llvm \ + " + diff --git a/packages/llvm/llvm-native_2.0.bb b/packages/llvm/llvm-native_2.0.bb index 9507c989cd..03e344cc11 100644 --- a/packages/llvm/llvm-native_2.0.bb +++ b/packages/llvm/llvm-native_2.0.bb @@ -10,3 +10,7 @@ S = "${WORKDIR}/llvm-${PV}" do_stage() { install -m 755 ${S}/Release/bin/* ${STAGING_BINDIR_NATIVE}/ } + +do_rm_work() { + : +} diff --git a/packages/llvm/llvm_2.0.bb b/packages/llvm/llvm_2.0.bb new file mode 100644 index 0000000000..7e80f245cc --- /dev/null +++ b/packages/llvm/llvm_2.0.bb @@ -0,0 +1,6 @@ +require llvm.inc + +SRC_URI = "http://llvm.org/releases/2.0/llvm-${PV}.tar.gz" + +S = "${WORKDIR}/llvm-${PV}" + -- cgit v1.2.3 From 3f84f7432b678ab6d503bf5c67ad9792b4c61c47 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sat, 6 Oct 2007 18:59:28 +0000 Subject: distro/angstrom-2008.1.conf : update to udev 115 for speed and fun --- conf/distro/angstrom-2008.1.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 60557325a9..cdf2970201 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -8,7 +8,7 @@ # Use Xorg R7.3 release -require conf/distro/include/preferred-xorg-versions-X11R7.3.inc +require conf/distro/include/preferred-xorg-versions-X11R7.2.inc # This is a testbed for unstable and/or untested things, while angstrom-2007.1 @@ -42,3 +42,6 @@ PREFERRED_VERSION_gtk+ = "2.12.0" PREFERRED_VERSION_glib-2.0 = "2.14.0" PREFERRED_VERSION_pango = "1.18.1" +# prefer newest for speed and fun +PREFERRED_VERSION_udev = "115" + -- cgit v1.2.3 From e30afac76793f8ac3b4a5d3bf077408bfa82c34a Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Sat, 6 Oct 2007 19:05:10 +0000 Subject: rename compulab-pxa270 machine to cm-x270 --- conf/machine/cm-x270.conf | 59 ++++++++++++++++++ conf/machine/compulab-pxa270.conf | 59 ------------------ .../uclibc/uclibc-0.9.29/cm-x270/.mtn2git_empty | 0 .../uclibc/uclibc-0.9.29/cm-x270/uClibc.machine | 70 ++++++++++++++++++++++ .../uclibc-0.9.29/compulab-pxa270/.mtn2git_empty | 0 .../uclibc-0.9.29/compulab-pxa270/uClibc.machine | 70 ---------------------- 6 files changed, 129 insertions(+), 129 deletions(-) create mode 100644 conf/machine/cm-x270.conf delete mode 100644 conf/machine/compulab-pxa270.conf create mode 100644 packages/uclibc/uclibc-0.9.29/cm-x270/.mtn2git_empty create mode 100644 packages/uclibc/uclibc-0.9.29/cm-x270/uClibc.machine delete mode 100644 packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty delete mode 100644 packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine diff --git a/conf/machine/cm-x270.conf b/conf/machine/cm-x270.conf new file mode 100644 index 0000000000..c712c3728e --- /dev/null +++ b/conf/machine/cm-x270.conf @@ -0,0 +1,59 @@ +#@TYPE: Machine +#@Name: Compulab cm-x270 +#@DESCRIPTION: Machine configuration for Compulab cm-x270 computer module +#OLDEST_KERNEL = "2.6.16" +TARGET_ARCH = "arm" +PREFERRED_VERSION_compulab-pxa270 = "2.6.22" +GUI_MACHINE_CLASS ?= "bigscreen" + +PREFERRED_PROVIDER_virtual/kernel = "compulab-pxa270" +PACKAGE_EXTRA_ARCHS = "armv4 armv5te" + +require conf/machine/include/tune-xscale.inc + +# console serial port. If you have a L module +# the below works. If you have a W module, add +# the following line to your local.conf: +# CMX270_CONSOLE_SERIAL_PORT = "ttyS0" + +# the following is for the cm-x270 L module +CMX270_CONSOLE_SERIAL_PORT ?= "ttyS1" + +# used by sysvinit_2 package, so rebuild this +# package if you change the SERIAL_CONSOLE setting +# the following is the port for the cm-x270 L module +# I think the W module would use ttyS0, but has +# not been tested. This can be overwritten in +# local.conf +SERIAL_CONSOLE ?= "38400 ${CMX270_CONSOLE_SERIAL_PORT}" + +# used by opie-collections.inc +ROOT_FLASH_SIZE ?= "32" + +# for NAND flash. +EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --pad --no-cleanmarkers;\ + sumtool -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ + -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs-summary.jffs2 \ + -e 0x20000 -p; \ + cd ${DEPLOY_DIR_IMAGE}; \ + rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs-summary.jffs2; \ + ln -s ${IMAGE_NAME}.rootfs-summary.jffs2 ${IMAGE_LINK_NAME}.rootfs-summary.jffs2 \ + " + +MACHINE_FEATURES = "kernel26 pcmcia usbhost usbgadget pcmcia touchscreen alsa" + +# to program the compulab NAND flash, the following scheme is suggested. Create +# a small rootfs that can fit in NOR flash using the following config: +# - Angstrom distro +# - uclibc (set ANGSTROM_MODE = "uclibc" in local.conf) +# - angstrom-minimal-image-with-mtd-utils bitbake target +# - put the following in your local.conf +# - IMAGE_FSTYPES = "jffs2 tar cpio.gz" +# now, when you build the image, a cpio.gz will be generated +# that can be used as an initramfs. You can boot into this image and then +# program the main rootfs jffs2 image in NAND flash using mtd-utils +# you can select booting the initramfs, or the main nand rootfs by using +# the "ramdisk on", or "ramdisk off" commands in the bootloader +# + + diff --git a/conf/machine/compulab-pxa270.conf b/conf/machine/compulab-pxa270.conf deleted file mode 100644 index ff0eb42a11..0000000000 --- a/conf/machine/compulab-pxa270.conf +++ /dev/null @@ -1,59 +0,0 @@ -#@TYPE: Machine -#@Name: Compulab PXA270 system -#@DESCRIPTION: Machine configuration for Compulab PXA270 system -#OLDEST_KERNEL = "2.6.16" -TARGET_ARCH = "arm" -PREFERRED_VERSION_compulab-pxa270 = "2.6.22" -GUI_MACHINE_CLASS ?= "bigscreen" - -PREFERRED_PROVIDER_virtual/kernel = "${MACHINE}" -PACKAGE_EXTRA_ARCHS = "armv4 armv5te" - -require conf/machine/include/tune-xscale.inc - -# console serial port. If you have a L module -# the below works. If you have a W module, add -# the following line to your local.conf: -# CMX270_CONSOLE_SERIAL_PORT = "ttyS0" - -# the following is for the cm-x270 L module -CMX270_CONSOLE_SERIAL_PORT ?= "ttyS1" - -# used by sysvinit_2 package, so rebuild this -# package if you change the SERIAL_CONSOLE setting -# the following is the for the cm-x270 L module -# I think the W module would use ttyS0, but has -# not been tested. This can be overwritten in -# local.conf -SERIAL_CONSOLE ?= "38400 ${CMX270_CONSOLE_SERIAL_PORT}" - -# used by opie-collections.inc -ROOT_FLASH_SIZE ?= "32" - -# for NAND flash. -EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --pad --no-cleanmarkers;\ - sumtool -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ - -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs-summary.jffs2 \ - -e 0x20000 -p; \ - cd ${DEPLOY_DIR_IMAGE}; \ - rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs-summary.jffs2; \ - ln -s ${IMAGE_NAME}.rootfs-summary.jffs2 ${IMAGE_LINK_NAME}.rootfs-summary.jffs2 \ - " - -MACHINE_FEATURES = "kernel26 pcmcia usbhost usbgadget pcmcia touchscreen alsa" - -# to program the compulab NAND flash, the following scheme is suggested. Create -# a small rootfs that can fit in NOR flash using the following config: -# - Angstrom distro -# - uclibc (set ANGSTROM_MODE = "uclibc" in local.conf) -# - angstrom-minimal-image-with-mtd-utils bitbake target -# - put the following in your local.conf -# - IMAGE_FSTYPES = "jffs2 tar cpio.gz" -# now, when you build the image, a cpio.gz will be generated -# that can be used as an initramfs. You can boot into this image and then -# program the main rootfs jffs2 image in NAND flash using mtd-utils -# you can select booting the initramfs, or the main nand rootfs by using -# the "ramdisk on", or "ramdisk off" commands in the bootloader -# - - diff --git a/packages/uclibc/uclibc-0.9.29/cm-x270/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/cm-x270/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/uclibc/uclibc-0.9.29/cm-x270/uClibc.machine b/packages/uclibc/uclibc-0.9.29/cm-x270/uClibc.machine new file mode 100644 index 0000000000..e27931cf6b --- /dev/null +++ b/packages/uclibc/uclibc-0.9.29/cm-x270/uClibc.machine @@ -0,0 +1,70 @@ +# +# Automatically generated make config: don't edit +# Sat May 12 23:18:41 2007 +# +# TARGET_alpha is not set +TARGET_arm=y +# TARGET_bfin is not set +# TARGET_cris is not set +# TARGET_e1 is not set +# TARGET_frv is not set +# TARGET_h8300 is not set +# TARGET_hppa is not set +# TARGET_i386 is not set +# TARGET_i960 is not set +# TARGET_ia64 is not set +# TARGET_m68k is not set +# TARGET_microblaze is not set +# TARGET_mips is not set +# TARGET_nios is not set +# TARGET_nios2 is not set +# TARGET_powerpc is not set +# TARGET_sh is not set +# TARGET_sh64 is not set +# TARGET_sparc is not set +# TARGET_v850 is not set +# TARGET_vax is not set +# TARGET_x86_64 is not set + +# +# Target Architecture Features and Options +# +TARGET_ARCH="arm" +FORCE_OPTIONS_FOR_ARCH=y +# CONFIG_ARM_OABI is not set +CONFIG_ARM_EABI=y +USE_BX=y +# CONFIG_GENERIC_ARM is not set +# CONFIG_ARM610 is not set +# CONFIG_ARM710 is not set +# CONFIG_ARM7TDMI is not set +# CONFIG_ARM720T is not set +# CONFIG_ARM920T is not set +# CONFIG_ARM922T is not set +# CONFIG_ARM926T is not set +# CONFIG_ARM10T is not set +# CONFIG_ARM1136JF_S is not set +# CONFIG_ARM1176JZ_S is not set +# CONFIG_ARM1176JZF_S is not set +# CONFIG_ARM_SA110 is not set +# CONFIG_ARM_SA1100 is not set +# CONFIG_ARM_XSCALE is not set +CONFIG_ARM_IWMMXT=y +TARGET_SUBARCH="" + +# +# Using ELF file format +# +ARCH_ANY_ENDIAN=y +ARCH_LITTLE_ENDIAN=y +# ARCH_WANTS_BIG_ENDIAN is not set +ARCH_WANTS_LITTLE_ENDIAN=y +ARCH_HAS_MMU=y +ARCH_USE_MMU=y +UCLIBC_HAS_FLOATS=y +# UCLIBC_HAS_FPU is not set +UCLIBC_HAS_SOFT_FLOAT=y +DO_C99_MATH=y +KERNEL_HEADERS="/usr/include" +HAVE_DOT_CONFIG=y + diff --git a/packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine b/packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine deleted file mode 100644 index e27931cf6b..0000000000 --- a/packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine +++ /dev/null @@ -1,70 +0,0 @@ -# -# Automatically generated make config: don't edit -# Sat May 12 23:18:41 2007 -# -# TARGET_alpha is not set -TARGET_arm=y -# TARGET_bfin is not set -# TARGET_cris is not set -# TARGET_e1 is not set -# TARGET_frv is not set -# TARGET_h8300 is not set -# TARGET_hppa is not set -# TARGET_i386 is not set -# TARGET_i960 is not set -# TARGET_ia64 is not set -# TARGET_m68k is not set -# TARGET_microblaze is not set -# TARGET_mips is not set -# TARGET_nios is not set -# TARGET_nios2 is not set -# TARGET_powerpc is not set -# TARGET_sh is not set -# TARGET_sh64 is not set -# TARGET_sparc is not set -# TARGET_v850 is not set -# TARGET_vax is not set -# TARGET_x86_64 is not set - -# -# Target Architecture Features and Options -# -TARGET_ARCH="arm" -FORCE_OPTIONS_FOR_ARCH=y -# CONFIG_ARM_OABI is not set -CONFIG_ARM_EABI=y -USE_BX=y -# CONFIG_GENERIC_ARM is not set -# CONFIG_ARM610 is not set -# CONFIG_ARM710 is not set -# CONFIG_ARM7TDMI is not set -# CONFIG_ARM720T is not set -# CONFIG_ARM920T is not set -# CONFIG_ARM922T is not set -# CONFIG_ARM926T is not set -# CONFIG_ARM10T is not set -# CONFIG_ARM1136JF_S is not set -# CONFIG_ARM1176JZ_S is not set -# CONFIG_ARM1176JZF_S is not set -# CONFIG_ARM_SA110 is not set -# CONFIG_ARM_SA1100 is not set -# CONFIG_ARM_XSCALE is not set -CONFIG_ARM_IWMMXT=y -TARGET_SUBARCH="" - -# -# Using ELF file format -# -ARCH_ANY_ENDIAN=y -ARCH_LITTLE_ENDIAN=y -# ARCH_WANTS_BIG_ENDIAN is not set -ARCH_WANTS_LITTLE_ENDIAN=y -ARCH_HAS_MMU=y -ARCH_USE_MMU=y -UCLIBC_HAS_FLOATS=y -# UCLIBC_HAS_FPU is not set -UCLIBC_HAS_SOFT_FLOAT=y -DO_C99_MATH=y -KERNEL_HEADERS="/usr/include" -HAVE_DOT_CONFIG=y - -- cgit v1.2.3 From 7ae4083ff59936fc79fbcfa0791f211244f34ce1 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sat, 6 Oct 2007 19:06:37 +0000 Subject: task-boot: include keymaps for devices with keyboard (taken from Poky) --- packages/tasks/task-boot.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tasks/task-boot.bb b/packages/tasks/task-boot.bb index 40c5bd530b..fb09ad1a83 100644 --- a/packages/tasks/task-boot.bb +++ b/packages/tasks/task-boot.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Basic task to get a device booting" -PR = "r40" +PR = "r41" inherit task @@ -40,6 +40,7 @@ RDEPENDS_task-boot = "\ base-passwd \ busybox \ initscripts \ + ${@base_contains("MACHINE_FEATURES", "keyboard", "keymaps", "", d)} \ modutils-initscripts \ netbase \ update-alternatives \ -- cgit v1.2.3 From adecb539d2fdcca398f31e7220dc15d13633994d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 6 Oct 2007 19:09:49 +0000 Subject: hal: enable pci when available --- packages/hal/hal_0.5.9.bb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/hal/hal_0.5.9.bb b/packages/hal/hal_0.5.9.bb index 72d5dc4e2d..03c45623a4 100644 --- a/packages/hal/hal_0.5.9.bb +++ b/packages/hal/hal_0.5.9.bb @@ -5,28 +5,28 @@ RDEPENDS += "udev hal-info" #RDEPENDS_hal-device-manager = "python hal python-pygnome" RRECOMMENDS = "udev-utils" -PR = "r2" +PR = "r3" SRC_URI += "file://99_hal \ file://20hal \ " +# machines with pci and acpi get a machine dependant hal EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \ --with-expat=${STAGING_LIBDIR}/.. \ --with-dbus-sys=${sysconfdir}/dbus-1/system.d \ --with-hotplug=${sysconfdir}/hotplug.d \ --disable-docbook-docs \ --disable-policy-kit \ - --disable-acpi --disable-pmu --disable-pci \ - --disable-pci-ids --disable-pnp-ids \ - " - -# work around autoconf >2.59 deps... -do_configure() { - gnu-configize - libtoolize --force - oe_runconf -} + --disable-pmu \ + --disable-pnp-ids \ + ${@base_contains('COMBINED_FEATURES', 'pci', '--enable-pci --enable-pci-ids', '--disable-pci --disable-pci-ids',d)} \ + ${@base_contains('MACHINE_FEATURES', 'acpi', '--enable-acpi', '--disable-acpi',d)} \ + " + +MY_ARCH := "${PACKAGE_ARCH}" +PACKAGE_ARCH = "${@base_contains('MACHINE_FEATURES', 'acpi', '${MACHINE_ARCH}', '${MY_ARCH}',d)}" +PACKAGE_ARCH = "${@base_contains('MACHINE_FEATURES', 'pci', '${MACHINE_ARCH}', '${MY_ARCH}',d)}" do_install_append() { install -d ${D}/etc/default/volatiles -- cgit v1.2.3 From b4c25abff2ced8801f5b09c6b2be26ce672e323a Mon Sep 17 00:00:00 2001 From: Cliff Brake Date: Sat, 6 Oct 2007 21:06:11 +0000 Subject: compulab-px270 kernel: set compatible machine to cm-x270 (machine name change) --- packages/linux/compulab-pxa270_2.6.16.bb | 2 +- packages/linux/compulab-pxa270_2.6.22.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/compulab-pxa270_2.6.16.bb b/packages/linux/compulab-pxa270_2.6.16.bb index ce6748149b..bd3135510f 100644 --- a/packages/linux/compulab-pxa270_2.6.16.bb +++ b/packages/linux/compulab-pxa270_2.6.16.bb @@ -68,5 +68,5 @@ do_deploy[dirs] = "${S}" addtask deploy before do_install after do_compile addtask compulab_image before do_install after do_deploy -COMPATIBLE_MACHINE = "compulab-pxa270" +COMPATIBLE_MACHINE = "cm-x270" diff --git a/packages/linux/compulab-pxa270_2.6.22.bb b/packages/linux/compulab-pxa270_2.6.22.bb index 86a7626d8a..84c1c63367 100644 --- a/packages/linux/compulab-pxa270_2.6.22.bb +++ b/packages/linux/compulab-pxa270_2.6.22.bb @@ -28,7 +28,7 @@ SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ S = "${WORKDIR}/linux-${PV}" COMPATIBLE_HOST = 'arm.*-linux' -COMPATIBLE_MACHINE = "compulab-pxa270" +COMPATIBLE_MACHINE = "cm-x270" CMDLINE = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=8 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2" -- cgit v1.2.3 From 2a28e332ce380cf1d62ed428d22baf3d986c40d5 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sat, 6 Oct 2007 22:05:41 +0000 Subject: task-slugos: Add ehci-hcd to the rootfs --- packages/tasks/task-slugos.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tasks/task-slugos.bb b/packages/tasks/task-slugos.bb index 07457c52c7..ecb3189741 100644 --- a/packages/tasks/task-slugos.bb +++ b/packages/tasks/task-slugos.bb @@ -6,7 +6,7 @@ DESCRIPTION = "Task packages for the SlugOS distribution" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r14" +PR = "r15" PACKAGE_ARCH = "${MACHINE_ARCH}" ALLOW_EMPTY = "1" @@ -76,6 +76,7 @@ ${SLUGOS_RNG_TOOLS_PACKAGE} \ # Add modules required for usb support SLUGOS_STANDARD_RRECOMMENDS += "\ +kernel-module-ehci-hcd \ kernel-module-ohci-hcd \ kernel-module-uhci-hcd \ " -- cgit v1.2.3 From 64c92768e7cee92f6ff676e22a7cde6aeb5c3322 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sat, 6 Oct 2007 22:05:53 +0000 Subject: slugos-init: Load ehci-hcd on boot --- packages/slugos-init/files/modulefunctions | 7 +++++-- packages/slugos-init/slugos-init_0.10.bb | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/slugos-init/files/modulefunctions b/packages/slugos-init/files/modulefunctions index 784f6ef662..a497f71f6c 100644 --- a/packages/slugos-init/files/modulefunctions +++ b/packages/slugos-init/files/modulefunctions @@ -6,15 +6,18 @@ loaddiskmods(){ case "$(machine)" in nslu2) + modprobe ehci-hcd modprobe ohci-hcd ;; nas100d) - modprobe pata-artop + modprobe ehci-hcd modprobe uhci-hcd + modprobe pata-artop ;; dsmg600) - modprobe pata-artop + modprobe ehci-hcd modprobe uhci-hcd + modprobe pata-artop ;; esac diff --git a/packages/slugos-init/slugos-init_0.10.bb b/packages/slugos-init/slugos-init_0.10.bb index 301a6829a5..c8e903ce97 100644 --- a/packages/slugos-init/slugos-init_0.10.bb +++ b/packages/slugos-init/slugos-init_0.10.bb @@ -4,7 +4,7 @@ PRIORITY = "required" LICENSE = "GPL" DEPENDS = "base-files devio" RDEPENDS = "busybox devio" -PR = "r88" +PR = "r89" SRC_URI = "file://boot/flash \ file://boot/disk \ -- cgit v1.2.3 From 8c838676d5f07387ad3138824804c315fa5e5765 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 6 Oct 2007 23:54:18 +0000 Subject: gpsd: Cleanup startup script. * gpsd configuration is done via mandatory /etc/defaults/gpsd, remove confusing defaults from init script. * Make error reporting more helpful. * Based on complaints by forum users. --- packages/gpsd/files/gpsd | 6 +----- packages/gpsd/gpsd_2.28.bb | 2 +- packages/gpsd/gpsd_2.34.bb | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/gpsd/files/gpsd b/packages/gpsd/files/gpsd index 2cf26c5f3a..3a14867f8a 100755 --- a/packages/gpsd/files/gpsd +++ b/packages/gpsd/files/gpsd @@ -6,10 +6,6 @@ # description: Gpsd manages access to a serial- or USB-connected GPS # processname: gpsd -# If you must specify a non-NMEA driver, uncomment and modify the next line -#GPSD_OPTS= -GPS_DEV="/dev/ttyS3" - # Source function library. #. /etc/rc.d/init.d/functions @@ -39,7 +35,7 @@ start() { echo "success" else # User needs to symlink ${GPS_DEV} to the right thing - echo "No ${GPS_DEV} device, aborting gpsd startup." + echo "No ${GPS_DEV} GPS device, aborting gpsd startup. Check /etc/default/$prog" fi RETVAL=$? echo diff --git a/packages/gpsd/gpsd_2.28.bb b/packages/gpsd/gpsd_2.28.bb index d51d088807..c16de2e951 100644 --- a/packages/gpsd/gpsd_2.28.bb +++ b/packages/gpsd/gpsd_2.28.bb @@ -1,2 +1,2 @@ require gpsd.inc -PR = "r3" +PR = "r4" diff --git a/packages/gpsd/gpsd_2.34.bb b/packages/gpsd/gpsd_2.34.bb index 1399dba53b..32cb4b925d 100644 --- a/packages/gpsd/gpsd_2.34.bb +++ b/packages/gpsd/gpsd_2.34.bb @@ -1,4 +1,4 @@ require gpsd.inc -PR = "r4" +PR = "r5" -- cgit v1.2.3 From 0d0bf315513039bd8560ac91865c7174e789d675 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sun, 7 Oct 2007 00:02:01 +0000 Subject: mpd: Added mpd-alsa from SVN. Builds, but needs configuration love. --- packages/musicpd/mpd-alsa_svn.bb | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 packages/musicpd/mpd-alsa_svn.bb diff --git a/packages/musicpd/mpd-alsa_svn.bb b/packages/musicpd/mpd-alsa_svn.bb new file mode 100644 index 0000000000..932295c3a6 --- /dev/null +++ b/packages/musicpd/mpd-alsa_svn.bb @@ -0,0 +1,50 @@ +DESCRIPTION = "Music Player Daemon (mpd). This version is configured for alsa support" +HOMEPAGE = "http://www.musicpd.org" +SECTION = "console/multimedia" +LICENSE = "GPLv2" +DEPENDS = "libvorbis libogg libid3tag libao-alsa zlib libmikmod libmad flac audiofile virtual/libiconv" +RDEPENDS = "libao-alsa" +PR = "r0" + +SRC_URI = "svn://svn.musicpd.org/mpd;module=trunk;proto=https \ + file://mpd/mpd.init" +# file://mpd/save-volume-state.patch;patch=1 \ + +S = "${WORKDIR}/trunk" + +inherit autotools update-rc.d +INITSCRIPT_NAME = "mpd" + +# Setting --enable-mpd-{mad,id3tag} causes local caches of the libraries to +# be built, instead we use the OE built versions which should be installed +# in staging - remove the --with and replace with --enable to use the local +# versions. + +EXTRA_OECONF = "\ +--disable-ogg \ +--disable-oggvorbis \ +--disable-oggflac \ +--disable-flac \ +--without-faad \ +--with-iconv-libraries=${STAGING_LIBDIR} \ +--with-iconv-includes=${STAGING_INCDIR} \ +--with-ao-libraries=${STAGING_LIBDIR} \ +--with-ao-includes=${STAGING_INCDIR} \ +--with-id3tag-libraries=${STAGING_LIBDIR} \ +--with-id3tag-includes=${STAGING_INCDIR} \ +--with-mad-libraries=${STAGING_LIBDIR} \ +--with-mad-includes=${STAGING_INCDIR} \ +--disable-aotest \ +--disable-alsatest \ +--disable-oggtest \ +--disable-vorbistest \ +--disable-libFLACtest \ +--disable-libOggFLACtest \ +--disable-audiofiletest \ +--disable-libmikmodtest \ +" + +do_install_append() { + install -d ${D}${sysconfdir}/init.d + install -m 755 ${WORKDIR}/mpd/mpd.init ${D}${sysconfdir}/init.d/mpd +} -- cgit v1.2.3 From c06ca8897ad30da4569cd1e01704e63f5a45329d Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 7 Oct 2007 00:11:12 +0000 Subject: linux-handhelds-2.6: Add 2.6.21-hh17. * Changes since -hh16 are: 1. PXA GPIO API merges from mainline git. 2. h5000: IrDA support, samcop suspend/resume fixes. 3. htcmagician: Conversion to leds-gpio, leds-magician removed. 4. htchermes: Elaborated support. 5. h2200: Fix LEDs. --- packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb new file mode 100644 index 0000000000..275602762d --- /dev/null +++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb @@ -0,0 +1,11 @@ +SECTION = "kernel" +DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices." +LICENSE = "GPL" +PR = "r2" + +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \ + file://defconfig" + +require linux-handhelds-2.6.inc -- cgit v1.2.3 From bef8e0e920d8eb2f8fc75c0791c9e71b63e35cfe Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 7 Oct 2007 00:14:12 +0000 Subject: angstrom-2007.1.conf: Use linux-handhelds-2.6_2.6.21-hh16. --- conf/distro/angstrom-2007.1.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2007.1.conf b/conf/distro/angstrom-2007.1.conf index 9b3c3fed11..c78e149e6d 100644 --- a/conf/distro/angstrom-2007.1.conf +++ b/conf/distro/angstrom-2007.1.conf @@ -217,7 +217,7 @@ MACHINE_KERNEL_VERSION = "2.6" PCMCIA_MANAGER = "pcmciautils" #Preferred version for the kernel on various machines -PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh16" +PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh17" RDEPENDS_kernel-base_hx4700 = "" RDEPENDS_kernel-base_htcuniversal = "" -- cgit v1.2.3 From e522d5d50c4708cf97c14f7255fa8faf41f99d46 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 7 Oct 2007 00:20:47 +0000 Subject: h1910.conf: Remove PREFERRED_VERSION_linux-handhelds-2.6. --- conf/machine/h1910.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/machine/h1910.conf b/conf/machine/h1910.conf index 2dac4b48af..15390d2d56 100644 --- a/conf/machine/h1910.conf +++ b/conf/machine/h1910.conf @@ -21,7 +21,6 @@ MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen" # Software/packages selection # PREFERRED_PROVIDER_virtual/kernel = "linux-handhelds-2.6" -PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.16-hh9" PCMCIA_MANAGER = "pcmciautils" PREFERRED_PROVIDER_xserver = "xserver-kdrive" -- cgit v1.2.3 From 950f437e524e56366b8e811acb729fb20d7d23f7 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sun, 7 Oct 2007 06:12:36 +0000 Subject: nfs-utils: Removed duplicated chunks in uclibc patch --- packages/nfs-utils/files/uclibc_bzero_fix.patch | 51 ------------------------- packages/nfs-utils/nfs-utils_1.0.6.bb | 2 +- 2 files changed, 1 insertion(+), 52 deletions(-) diff --git a/packages/nfs-utils/files/uclibc_bzero_fix.patch b/packages/nfs-utils/files/uclibc_bzero_fix.patch index 9a276d326e..2006192d28 100644 --- a/packages/nfs-utils/files/uclibc_bzero_fix.patch +++ b/packages/nfs-utils/files/uclibc_bzero_fix.patch @@ -15,54 +15,3 @@ Index: nfs-utils-1.0.6/support/nfs/svc_socket.c addr.sin_family = AF_INET; #ifndef __UCLIBC__ /* neither getrpcbynumber() nor getrpcbynumber_r() is SuSv3 */ ---- - support/nfs/svc_socket.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: nfs-utils-1.0.6/support/nfs/svc_socket.c -=================================================================== ---- nfs-utils-1.0.6.orig/support/nfs/svc_socket.c 2007-05-27 16:14:09.000000000 +0100 -+++ nfs-utils-1.0.6/support/nfs/svc_socket.c 2007-05-28 22:43:55.000000000 +0100 -@@ -63,7 +63,7 @@ svc_socket (u_long number, int type, int - } - } - -- __bzero ((char *) &addr, sizeof (addr)); -+ memset ((char *) &addr,0, sizeof (addr)); - addr.sin_family = AF_INET; - - #ifndef __UCLIBC__ /* neither getrpcbynumber() nor getrpcbynumber_r() is SuSv3 */ ---- - support/nfs/svc_socket.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: nfs-utils-1.0.6/support/nfs/svc_socket.c -=================================================================== ---- nfs-utils-1.0.6.orig/support/nfs/svc_socket.c 2007-05-27 16:14:09.000000000 +0100 -+++ nfs-utils-1.0.6/support/nfs/svc_socket.c 2007-05-28 22:43:55.000000000 +0100 -@@ -63,7 +63,7 @@ svc_socket (u_long number, int type, int - } - } - -- __bzero ((char *) &addr, sizeof (addr)); -+ memset ((char *) &addr,0, sizeof (addr)); - addr.sin_family = AF_INET; - - #ifndef __UCLIBC__ /* neither getrpcbynumber() nor getrpcbynumber_r() is SuSv3 */ ---- - support/nfs/svc_socket.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: nfs-utils-1.0.6/support/nfs/svc_socket.c -=================================================================== ---- nfs-utils-1.0.6.orig/support/nfs/svc_socket.c 2007-05-27 16:14:09.000000000 +0100 -+++ nfs-utils-1.0.6/support/nfs/svc_socket.c 2007-05-28 22:43:55.000000000 +0100 -@@ -63,7 +63,7 @@ svc_socket (u_long number, int type, int - } - } - -- __bzero ((char *) &addr, sizeof (addr)); -+ memset ((char *) &addr,0, sizeof (addr)); - addr.sin_family = AF_INET; - - #ifndef __UCLIBC__ /* neither getrpcbynumber() nor getrpcbynumber_r() is SuSv3 */ diff --git a/packages/nfs-utils/nfs-utils_1.0.6.bb b/packages/nfs-utils/nfs-utils_1.0.6.bb index 15e3914472..1febf057bf 100644 --- a/packages/nfs-utils/nfs-utils_1.0.6.bb +++ b/packages/nfs-utils/nfs-utils_1.0.6.bb @@ -2,7 +2,7 @@ DESCRIPTION = "userspace utilities for kernel nfs" PRIORITY = "optional" SECTION = "console/network" LICENSE = "GPL" -PR = "r12" +PR = "r13" SRC_URI = "${SOURCEFORGE_MIRROR}/nfs/nfs-utils-${PV}.tar.gz \ file://acinclude-lossage.patch;patch=1 \ -- cgit v1.2.3 From 60fca52b9c150fa11342bc61fbf29e3e487bad1a Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Sun, 7 Oct 2007 09:11:25 +0000 Subject: rxvt-unicode_7.9.bb : Fix LD_LIBRARY_PATH so tic finds a library. From bug #2807. --- packages/rxvt-unicode/rxvt-unicode_7.9.bb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/rxvt-unicode/rxvt-unicode_7.9.bb b/packages/rxvt-unicode/rxvt-unicode_7.9.bb index 72d686bffd..e08583527c 100644 --- a/packages/rxvt-unicode/rxvt-unicode_7.9.bb +++ b/packages/rxvt-unicode/rxvt-unicode_7.9.bb @@ -13,7 +13,7 @@ FILES_${PN}-control = "${bindir}/rxvtc" SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \ file://xwc.patch;patch=1 \ file://signedchar.patch;patch=1" -PR = "r0" +PR = "r1" inherit autotools update-alternatives @@ -23,6 +23,10 @@ ALTERNATIVE_PATH = "${bindir}/rxvt" CFLAGS_append = " -fpermissive" +# This is necessary so that the "tic" command executed during the install can +# link with the correct libary in staging. +export LD_LIBRARY_PATH = "${STAGING_LIBDIR_NATIVE}" + EXTRA_OECONF = "--enable-menubar --enable-xim \ --enable-utmp --enable-wtmp --enable-lastlog \ --disable-strings --with-term=rxvt --enable-keepscrolling \ -- cgit v1.2.3 From 76967345f21e68174450308fe6065121e2b3dea7 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 7 Oct 2007 09:44:11 +0000 Subject: linux-handhelds-2.6: Add htcsable to COMPATIBLE_MACHINES. --- packages/linux/linux-handhelds-2.6.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc index 47c32a4a24..e1c8fbf189 100644 --- a/packages/linux/linux-handhelds-2.6.inc +++ b/packages/linux/linux-handhelds-2.6.inc @@ -3,7 +3,7 @@ DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer h LICENSE = "GPL" COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE ?= '(asus620|asus730|aximx50|aximx50v|h1910|h2200|h3600|h3800|h3900|h4000|h5000|htcalpine|htcapache|htcblueangel|htchermes|htchimalaya|htcuniversal|htcwallaby|hx4700|looxc550|jornada56x|magician|rx1950|rx3000)' +COMPATIBLE_MACHINE ?= '(asus620|asus730|aximx50|aximx50v|h1910|h2200|h3600|h3800|h3900|h4000|h5000|htcalpine|htcapache|htcblueangel|htchermes|htchimalaya|htcsable|htcuniversal|htcwallaby|hx4700|looxc550|jornada56x|magician|rx1950|rx3000)' # SRC_URI *must* be overriden in includer, but this is a good reference SRC_URI ?= "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \ -- cgit v1.2.3 From 83db88d96bc6f6a96eb577f660cc592be3278da1 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 7 Oct 2007 09:52:04 +0000 Subject: machine/include/zaurus-2.6.inc : virtual/xserver = xserver-kdrive --- conf/machine/include/zaurus-2.6.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/machine/include/zaurus-2.6.inc b/conf/machine/include/zaurus-2.6.inc index 979a6bd484..4bcd36e2ab 100644 --- a/conf/machine/include/zaurus-2.6.inc +++ b/conf/machine/include/zaurus-2.6.inc @@ -21,7 +21,8 @@ include conf/machine/include/tune-xscale.inc SERIAL_CONSOLE = "115200 ttyS0" PREFERRED_PROVIDER_virtual/kernel = "linux-rp" -PREFERRED_PROVIDER_xserver = "xserver-kdrive" +PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive" + PCMCIA_MANAGER ?= "pcmciautils" -- cgit v1.2.3 From f33e29a239b9ffb650714a9e3cc1ee0e5f8d5d1c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 7 Oct 2007 09:55:01 +0000 Subject: xserver-kdrive 1.3: add patch to get the gumstix lcd working --- packages/xorg-xserver/gumstix-kmode.patch | 23 +++++++++++++++++++++++ packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb | 6 ++++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 packages/xorg-xserver/gumstix-kmode.patch diff --git a/packages/xorg-xserver/gumstix-kmode.patch b/packages/xorg-xserver/gumstix-kmode.patch new file mode 100644 index 0000000000..56817a7001 --- /dev/null +++ b/packages/xorg-xserver/gumstix-kmode.patch @@ -0,0 +1,23 @@ +--- /tmp/kmode.c 2007-10-07 11:49:52.000000000 +0200 ++++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-10-07 11:51:57.962045000 +0200 +@@ -119,7 +119,19 @@ + 0, 0, 0, KdSyncNegative, /* 59.940 */ + }, + +- ++ ++/* gumstix console-vx */ ++ { 480, 272, 60, 0, /* VESA */ ++ 0, 0, 0, KdSyncNegative, /* 31.469 */ ++ 0, 0, 0, KdSyncNegative, /* 59.940 */ ++ }, ++ ++ { 272, 480, 60, 0, /* VESA */ ++ 0, 0, 0, KdSyncNegative, /* 31.469 */ ++ 0, 0, 0, KdSyncNegative, /* 59.940 */ ++ }, ++ ++ + /* 800x600 modes */ + { 800, 600, 85, 56250, /* VESA */ + 32, 152, 248, KdSyncPositive, /* 53.674 */ diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb index 5f0896f3ed..3cc67078a0 100644 --- a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb +++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb @@ -3,7 +3,7 @@ require xserver-kdrive-common.inc DEPENDS += "libxkbfile libxcalibrate" PE = "1" -PR = "r17" +PR = "r19" SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ ${KDRIVE_COMMON_PATCHES} \ @@ -19,7 +19,9 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \ file://w100.patch;patch=1 \ file://w100-autofoo.patch;patch=1 \ file://w100-fix-offscreen-bmp.patch;patch=1 \ - " + file://kdrive-1.3-18bpp.patch;patch=1 \ + file://gumstix-kmode.patch;patch=1 \ +" S = "${WORKDIR}/xorg-server-${PV}" -- cgit v1.2.3 From 98c12c1fc2107ca47aa72634a9b6ca47f818b7b8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 7 Oct 2007 09:59:21 +0000 Subject: kdrive: move patch to proper place --- packages/xorg-xserver/gumstix-kmode.patch | 23 ---------------------- .../xserver-kdrive/gumstix-kmode.patch | 23 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 packages/xorg-xserver/gumstix-kmode.patch create mode 100644 packages/xorg-xserver/xserver-kdrive/gumstix-kmode.patch diff --git a/packages/xorg-xserver/gumstix-kmode.patch b/packages/xorg-xserver/gumstix-kmode.patch deleted file mode 100644 index 56817a7001..0000000000 --- a/packages/xorg-xserver/gumstix-kmode.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- /tmp/kmode.c 2007-10-07 11:49:52.000000000 +0200 -+++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-10-07 11:51:57.962045000 +0200 -@@ -119,7 +119,19 @@ - 0, 0, 0, KdSyncNegative, /* 59.940 */ - }, - -- -+ -+/* gumstix console-vx */ -+ { 480, 272, 60, 0, /* VESA */ -+ 0, 0, 0, KdSyncNegative, /* 31.469 */ -+ 0, 0, 0, KdSyncNegative, /* 59.940 */ -+ }, -+ -+ { 272, 480, 60, 0, /* VESA */ -+ 0, 0, 0, KdSyncNegative, /* 31.469 */ -+ 0, 0, 0, KdSyncNegative, /* 59.940 */ -+ }, -+ -+ - /* 800x600 modes */ - { 800, 600, 85, 56250, /* VESA */ - 32, 152, 248, KdSyncPositive, /* 53.674 */ diff --git a/packages/xorg-xserver/xserver-kdrive/gumstix-kmode.patch b/packages/xorg-xserver/xserver-kdrive/gumstix-kmode.patch new file mode 100644 index 0000000000..56817a7001 --- /dev/null +++ b/packages/xorg-xserver/xserver-kdrive/gumstix-kmode.patch @@ -0,0 +1,23 @@ +--- /tmp/kmode.c 2007-10-07 11:49:52.000000000 +0200 ++++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-10-07 11:51:57.962045000 +0200 +@@ -119,7 +119,19 @@ + 0, 0, 0, KdSyncNegative, /* 59.940 */ + }, + +- ++ ++/* gumstix console-vx */ ++ { 480, 272, 60, 0, /* VESA */ ++ 0, 0, 0, KdSyncNegative, /* 31.469 */ ++ 0, 0, 0, KdSyncNegative, /* 59.940 */ ++ }, ++ ++ { 272, 480, 60, 0, /* VESA */ ++ 0, 0, 0, KdSyncNegative, /* 31.469 */ ++ 0, 0, 0, KdSyncNegative, /* 59.940 */ ++ }, ++ ++ + /* 800x600 modes */ + { 800, 600, 85, 56250, /* VESA */ + 32, 152, 248, KdSyncPositive, /* 53.674 */ -- cgit v1.2.3 From 099604448556edc3388677206ffde9a81d8f2541 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sun, 7 Oct 2007 10:30:58 +0000 Subject: linux-efika-2.6.20.x: Include sound support as modules. --- packages/linux/linux-efika-2.6.20/defconfig | 114 +++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux-efika-2.6.20/defconfig b/packages/linux/linux-efika-2.6.20/defconfig index fb7c9109bf..d2251d41f1 100644 --- a/packages/linux/linux-efika-2.6.20/defconfig +++ b/packages/linux/linux-efika-2.6.20/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.20 -# Tue Feb 27 05:45:18 2007 +# Linux kernel version: 2.6.20.11-cfs-v9 +# Sun Oct 7 12:21:03 2007 # # CONFIG_PPC64 is not set CONFIG_PPC32=y @@ -1118,7 +1118,115 @@ CONFIG_LOGO=y # # Sound # -# CONFIG_SOUND is not set +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +CONFIG_SND_DEBUG=y +# CONFIG_SND_DEBUG_DETECT is not set +CONFIG_SND_PCM_XRUN_DEBUG=y + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_AC97_POWER_SAVE is not set + +# +# ALSA PowerMac devices +# + +# +# ALSA PPC devices +# +CONFIG_SND_PPC_MPC52xx_AC97=m + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_USX2Y is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m # # HID Devices -- cgit v1.2.3 From 1a815a3319918df758203d21c6a4de07fe3b43d8 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 7 Oct 2007 10:33:30 +0000 Subject: packages/icu/icu-3.6: Use binconfig to stage icu-config to avoid having icu-config --ldflags return the host dirs Now icu-config gets copied to STAGING_BINDIR_CROSS and WebKit/Gtk+ stops having i686 directories in the compiler invocation. --- packages/icu/icu-3.6.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/icu/icu-3.6.inc b/packages/icu/icu-3.6.inc index 92176ee7fb..b9031e202a 100644 --- a/packages/icu/icu-3.6.inc +++ b/packages/icu/icu-3.6.inc @@ -5,7 +5,7 @@ SRC_URI = "ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-s S = "${WORKDIR}/icu/source" -inherit autotools pkgconfig +inherit autotools pkgconfig binconfig do_configure() { libtoolize --force -- cgit v1.2.3 From 5c01320f1ffea885eb868ac5d52215f013408f85 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 7 Oct 2007 10:36:01 +0000 Subject: packages/llvm: Build version 2.1 of LLVM --- conf/checksums.ini | 4 ++++ packages/llvm/llvm-gcc4-cross_svn.bb | 2 +- packages/llvm/llvm-native_2.0.bb | 16 ---------------- packages/llvm/llvm-native_2.1.bb | 16 ++++++++++++++++ 4 files changed, 21 insertions(+), 17 deletions(-) delete mode 100644 packages/llvm/llvm-native_2.0.bb create mode 100644 packages/llvm/llvm-native_2.1.bb diff --git a/conf/checksums.ini b/conf/checksums.ini index 27b9e87e92..2f5e67c762 100644 --- a/conf/checksums.ini +++ b/conf/checksums.ini @@ -6406,6 +6406,10 @@ sha256=986a923a5247468db1d2a03e93268f4025ae5dc27e911dafc7b37e6a802122db md5=866ba97420f5ce978b6a6b1cb4338890 sha256=17b82323151925ff5a7ad09a21781a0fa50ead4b87a339cee262271e4ededa13 +[http://llvm.org/releases/2.1/llvm-2.1.tar.gz] +md5=b930e7213b37acc934d0d163cf13af18 +sha256=8cabd422f249ada736d864fc8a1f4d14aabefacb6f860c9beefbc53f93e0f96c + [http://lsc.fie.umich.mx/%7esadit/spyro/download/SPyDI-0.9.3.tar.gz] md5=9f54fc8a40e26edd61ce67902b315a66 sha256=07675051b60343820b235a818f2c2d528b86d2a19c2f56833213e3f574f9cd1a diff --git a/packages/llvm/llvm-gcc4-cross_svn.bb b/packages/llvm/llvm-gcc4-cross_svn.bb index 48302c371d..9b0e07ab94 100644 --- a/packages/llvm/llvm-gcc4-cross_svn.bb +++ b/packages/llvm/llvm-gcc4-cross_svn.bb @@ -4,7 +4,7 @@ LICENSE = "various" DEPENDS = "llvm-native" -PV = "2.0+svnr${SRCREV}" +PV = "2.1+svnr${SRCREV}" inherit autotools cross diff --git a/packages/llvm/llvm-native_2.0.bb b/packages/llvm/llvm-native_2.0.bb deleted file mode 100644 index 03e344cc11..0000000000 --- a/packages/llvm/llvm-native_2.0.bb +++ /dev/null @@ -1,16 +0,0 @@ -require llvm.inc - -SRC_URI = "http://llvm.org/releases/2.0/llvm-${PV}.tar.gz" - - -inherit native - -S = "${WORKDIR}/llvm-${PV}" - -do_stage() { - install -m 755 ${S}/Release/bin/* ${STAGING_BINDIR_NATIVE}/ -} - -do_rm_work() { - : -} diff --git a/packages/llvm/llvm-native_2.1.bb b/packages/llvm/llvm-native_2.1.bb new file mode 100644 index 0000000000..6366b9bbbe --- /dev/null +++ b/packages/llvm/llvm-native_2.1.bb @@ -0,0 +1,16 @@ +require llvm.inc + +SRC_URI = "http://llvm.org/releases/2.1/llvm-${PV}.tar.gz" + + +inherit native + +S = "${WORKDIR}/llvm-${PV}" + +do_stage() { + install -m 755 ${S}/Release/bin/* ${STAGING_BINDIR_NATIVE}/ +} + +do_rm_work() { + : +} -- cgit v1.2.3 From 82e6771651948d89ff4b058019b67f7a32405b95 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sun, 7 Oct 2007 10:38:36 +0000 Subject: preferred-xorg-versions-X11R7.3: upgrade xdpyinfo to 1.0.2 --- conf/distro/include/preferred-xorg-versions-X11R7.3.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.3.inc b/conf/distro/include/preferred-xorg-versions-X11R7.3.inc index 19ee48174d..d7e19284bc 100644 --- a/conf/distro/include/preferred-xorg-versions-X11R7.3.inc +++ b/conf/distro/include/preferred-xorg-versions-X11R7.3.inc @@ -71,7 +71,7 @@ PREFERRED_VERSION_xcursorgen ?= "1.0.2" PREFERRED_VERSION_xdbedizzy ?= "1.0.2" PREFERRED_VERSION_xditview ?= "1.0.1" PREFERRED_VERSION_xdm ?= "1.1.6" -PREFERRED_VERSION_xdpyinfo ?= "1.0.1" +PREFERRED_VERSION_xdpyinfo ?= "1.0.2" PREFERRED_VERSION_xdriinfo ?= "1.0.2" PREFERRED_VERSION_xedit ?= "1.0.2" PREFERRED_VERSION_xev ?= "1.0.1" -- cgit v1.2.3 From 1f149ef1d7e7f73f95bd7b463855f765328e6912 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sun, 7 Oct 2007 10:39:41 +0000 Subject: angstrom-2008.1.conf: revert accidental xorg downgrade --- conf/distro/angstrom-2008.1.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index cdf2970201..55ff9c93d0 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -8,7 +8,7 @@ # Use Xorg R7.3 release -require conf/distro/include/preferred-xorg-versions-X11R7.2.inc +require conf/distro/include/preferred-xorg-versions-X11R7.3.inc # This is a testbed for unstable and/or untested things, while angstrom-2007.1 -- cgit v1.2.3 From 21cedfc3833d24082f3560dc99f929ad64bc47ce Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sun, 7 Oct 2007 11:30:05 +0000 Subject: mpd-alsa-svn: Added FLAC, Ogg and AAC. --- packages/musicpd/mpd-alsa_svn.bb | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/musicpd/mpd-alsa_svn.bb b/packages/musicpd/mpd-alsa_svn.bb index 932295c3a6..2a9c9ed729 100644 --- a/packages/musicpd/mpd-alsa_svn.bb +++ b/packages/musicpd/mpd-alsa_svn.bb @@ -2,9 +2,9 @@ DESCRIPTION = "Music Player Daemon (mpd). This version is configured for alsa su HOMEPAGE = "http://www.musicpd.org" SECTION = "console/multimedia" LICENSE = "GPLv2" -DEPENDS = "libvorbis libogg libid3tag libao-alsa zlib libmikmod libmad flac audiofile virtual/libiconv" +DEPENDS = "libvorbis libogg libid3tag libao-alsa zlib libmad flac audiofile virtual/libiconv faad2" RDEPENDS = "libao-alsa" -PR = "r0" +PR = "r1" SRC_URI = "svn://svn.musicpd.org/mpd;module=trunk;proto=https \ file://mpd/mpd.init" @@ -21,19 +21,25 @@ INITSCRIPT_NAME = "mpd" # versions. EXTRA_OECONF = "\ ---disable-ogg \ ---disable-oggvorbis \ +--enable-ogg \ +--enable-oggvorbis \ --disable-oggflac \ ---disable-flac \ ---without-faad \ ---with-iconv-libraries=${STAGING_LIBDIR} \ ---with-iconv-includes=${STAGING_INCDIR} \ +--enable-flac \ +--enable-faad \ --with-ao-libraries=${STAGING_LIBDIR} \ --with-ao-includes=${STAGING_INCDIR} \ +--with-iconv-libraries=${STAGING_LIBDIR} \ +--with-iconv-includes=${STAGING_INCDIR} \ --with-id3tag-libraries=${STAGING_LIBDIR} \ --with-id3tag-includes=${STAGING_INCDIR} \ +--with-faad-libraries=${STAGING_LIBDIR} \ +--with-faad-includes=${STAGING_INCDIR} \ --with-mad-libraries=${STAGING_LIBDIR} \ --with-mad-includes=${STAGING_INCDIR} \ +--with-ogg-libraries=${STAGING_LIBDIR} \ +--with-ogg-includes=${STAGING_INCDIR} \ +--with-vorbis-libraries=${STAGING_LIBDIR} \ +--with-vorbis-includes=${STAGING_INCDIR} \ --disable-aotest \ --disable-alsatest \ --disable-oggtest \ -- cgit v1.2.3 From f569da00fa19ad423e53305613c983591f37a4a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Sun, 7 Oct 2007 11:48:52 +0000 Subject: openmoko2: use startup_unintrusive.wav instread of startup_openmoko.wav --- packages/openmoko2/openmoko-sound-system2/session | 2 +- packages/openmoko2/openmoko-sound-system2_0.1.0.bb | 2 +- packages/openmoko2/openmoko-sound-theme-standard2_svn.bb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/openmoko2/openmoko-sound-system2/session b/packages/openmoko2/openmoko-sound-system2/session index dfef83d934..ed2346d55f 100644 --- a/packages/openmoko2/openmoko-sound-system2/session +++ b/packages/openmoko2/openmoko-sound-system2/session @@ -22,7 +22,7 @@ load-sample-lazy x11-bell /usr/share/openmoko/sounds/notify_doorbell.wav load-module module-x11-bell sample=x11-bell # Load samples -load-sample startup /usr/share/openmoko/sounds/startup_openmoko.wav +load-sample startup /usr/share/openmoko/sounds/startup_unintrusive.wav load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav load-sample ringtone /usr/share/openmoko/sounds/ringtone_classy.wav diff --git a/packages/openmoko2/openmoko-sound-system2_0.1.0.bb b/packages/openmoko2/openmoko-sound-system2_0.1.0.bb index 35bfe66318..57b72af4b6 100644 --- a/packages/openmoko2/openmoko-sound-system2_0.1.0.bb +++ b/packages/openmoko2/openmoko-sound-system2_0.1.0.bb @@ -12,7 +12,7 @@ RDEPENDS = "\ " RREPLACES = "openmoko-sound-system" RPROVIDES = "openmoko-sound-system" -PR = "r1" +PR = "r2" inherit openmoko-base update-rc.d diff --git a/packages/openmoko2/openmoko-sound-theme-standard2_svn.bb b/packages/openmoko2/openmoko-sound-theme-standard2_svn.bb index 0693b9bb8a..1cfb519c99 100644 --- a/packages/openmoko2/openmoko-sound-theme-standard2_svn.bb +++ b/packages/openmoko2/openmoko-sound-theme-standard2_svn.bb @@ -3,7 +3,7 @@ SECTION = "openmoko/base" RREPLACES = "openmoko-sound-theme-standard" RPROVIDES = "openmoko-sound-theme-standard" PV = "0.1+svnr${SRCREV}" -PR = "r1" +PR = "r2" inherit openmoko2 autotools @@ -16,7 +16,7 @@ do_install() { for i in *.mp3; do cp -fpPR ${S}/$i ${D}${datadir}/openmoko/sounds/ done - for i in touchscreen_click.wav ringtone_classy.wav notify_doorbell.wav startup_openmoko.wav; do + for i in touchscreen_click.wav ringtone_classy.wav notify_doorbell.wav startup_unintrusive.wav; do cp -f ${S}/$i ${D}${datadir}/openmoko/sounds/ done } -- cgit v1.2.3 From d3dd4dafb5d9a65a55fcb29253a8f30419cbccf8 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 7 Oct 2007 12:06:49 +0000 Subject: gcc/gcc-cross_4.2.1.bb : de-koen the gcc-cross so if you wish to cause anyone pain for PR bump then aim at koen :-) --- packages/gcc/gcc-cross_4.2.1.bb | 2 +- packages/gcc/gcc_4.2.1.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gcc/gcc-cross_4.2.1.bb b/packages/gcc/gcc-cross_4.2.1.bb index e67d6c6b7a..3272876326 100644 --- a/packages/gcc/gcc-cross_4.2.1.bb +++ b/packages/gcc/gcc-cross_4.2.1.bb @@ -5,7 +5,7 @@ inherit cross FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" # NOTE: split PR. If the main .oe changes something that affects its *build* # remember to increment this one too. -PR = "r8" +PR = "r9" DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index d11f2460ae..7bf074de57 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -38,6 +38,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://unbreak-armv4t.patch;patch=1 \ file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \ file://cache-amnesia.patch;patch=1 \ + file://gfortran.patch;patch=1 \ " SRC_URI_append_ep93xx = " \ @@ -58,7 +59,6 @@ SRC_URI_append_ep93xx = " \ file://arm-crunch-truncsi-disable.patch;patch=1 \ file://arm-crunch-cfcvt64-disable.patch;patch=1 \ file://arm-crunch-cirrus-bugfixes.patch;patch=1 \ - file://gfortran.patch;patch=1 \ " PACKAGE_ARCH_ep93xx = "${MACHINE_ARCH}" -- cgit v1.2.3 From caf09f94b1c8d9d9dfef7302b6d3c3b5526c415b Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 7 Oct 2007 12:28:17 +0000 Subject: packages/qmake/qmake2-native: Move the LFLAGS to the end of the linker line Move the LFLAGS to the end of the linker line. Otherwise a package (e.g. webkit) will try to link to the library in the staging directory and not to the one recently built. Remove the unstage hack from webkit-gtk as it is not needed anymore. --- .../qmake2-native-2.10a/use-lflags-last.patch | 22 ++++++++++++++++++++++ packages/qmake/qmake2-native_2.10a.bb | 1 + packages/webkit/webkit-gtk_svn.bb | 7 ------- 3 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 packages/qmake/qmake2-native-2.10a/use-lflags-last.patch diff --git a/packages/qmake/qmake2-native-2.10a/use-lflags-last.patch b/packages/qmake/qmake2-native-2.10a/use-lflags-last.patch new file mode 100644 index 0000000000..4197dbbf64 --- /dev/null +++ b/packages/qmake/qmake2-native-2.10a/use-lflags-last.patch @@ -0,0 +1,22 @@ +Index: qtopia-core-opensource-src-4.3.1/qmake/generators/unix/unixmake2.cpp +=================================================================== +--- qtopia-core-opensource-src-4.3.1.orig/qmake/generators/unix/unixmake2.cpp 2007-10-07 13:45:26.000000000 +0200 ++++ qtopia-core-opensource-src-4.3.1/qmake/generators/unix/unixmake2.cpp 2007-10-07 13:57:09.000000000 +0200 +@@ -416,7 +416,7 @@ + t << "\n\t" << mkdir_p_asstring(destdir) << "\n\t"; + if(!project->isEmpty("QMAKE_PRE_LINK")) + t << var("QMAKE_PRE_LINK") << "\n\t"; +- t << "$(LINK) $(LFLAGS) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(OBJCOMP) $(LIBS)"; ++ t << "$(LINK) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(OBJCOMP) $(LIBS) $(LFLAGS)"; + if(!project->isEmpty("QMAKE_POST_LINK")) + t << "\n\t" << var("QMAKE_POST_LINK"); + t << endl << endl; +@@ -430,7 +430,7 @@ + t << mkdir_p_asstring(destdir) << "\n\t"; + if(!project->isEmpty("QMAKE_PRE_LINK")) + t << var("QMAKE_PRE_LINK") << "\n\t"; +- t << "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)"; ++ t << "$(LINK) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) $(LFLAGS)"; + if(!project->isEmpty("QMAKE_POST_LINK")) + t << "\n\t" << var("QMAKE_POST_LINK"); + t << endl << endl; diff --git a/packages/qmake/qmake2-native_2.10a.bb b/packages/qmake/qmake2-native_2.10a.bb index 207aaaf9b5..55282e562c 100644 --- a/packages/qmake/qmake2-native_2.10a.bb +++ b/packages/qmake/qmake2-native_2.10a.bb @@ -9,6 +9,7 @@ QTVER = "qtopia-core-opensource-src-4.3.1" SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/${QTVER}.tar.gz \ file://0001-fix-mkspecs.patch;patch=1 \ + file://use-lflags-last.patch;patch=1 \ file://linux-oe-qmake.conf" S = "${WORKDIR}/${QTVER}" diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb index 7ee08bf5ab..208ec25719 100644 --- a/packages/webkit/webkit-gtk_svn.bb +++ b/packages/webkit/webkit-gtk_svn.bb @@ -60,13 +60,6 @@ do_stage() { } -# Noooooooooooooooooooooooooooooooooooooooooooo... -do_unstage() { - rm ${STAGING_LIBDIR}/libWebKitG* || true -} - -addtask unstage before do_configure - PACKAGES =+ "webkit-gtklauncher-dbg webkit-gtklauncher" FILES_webkit-gtklauncher = "${bindir}/GtkLauncher" -- cgit v1.2.3 From 2a7fca4dda6eda47cdecb62850e29d81a1b78333 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 7 Oct 2007 12:29:32 +0000 Subject: 2.6.21: add support for the ts controller on the console-vx-lcd gumstix boards --- .../linux/linux-2.6.21/gumstix-verdex/defconfig | 4 +- packages/linux/linux-2.6.21/tsc2003-config.diff | 31 ++ packages/linux/linux-2.6.21/tsc2003.c | 557 +++++++++++++++++++++ packages/linux/linux_2.6.21.bb | 11 +- 4 files changed, 600 insertions(+), 3 deletions(-) create mode 100644 packages/linux/linux-2.6.21/tsc2003-config.diff create mode 100644 packages/linux/linux-2.6.21/tsc2003.c diff --git a/packages/linux/linux-2.6.21/gumstix-verdex/defconfig b/packages/linux/linux-2.6.21/gumstix-verdex/defconfig index c6d5480089..d19cbf34ec 100644 --- a/packages/linux/linux-2.6.21/gumstix-verdex/defconfig +++ b/packages/linux/linux-2.6.21/gumstix-verdex/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.21 -# Wed Oct 3 16:35:16 2007 +# Sun Oct 7 14:19:04 2007 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1058,6 +1058,8 @@ CONFIG_I2C_PXA_SLAVE=y # CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_MAX6875 is not set +CONFIG_SENSORS_TSC2003=m +CONFIG_SENSORS_TSC2003_SYSFS=m # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set diff --git a/packages/linux/linux-2.6.21/tsc2003-config.diff b/packages/linux/linux-2.6.21/tsc2003-config.diff new file mode 100644 index 0000000000..ccad5ed696 --- /dev/null +++ b/packages/linux/linux-2.6.21/tsc2003-config.diff @@ -0,0 +1,31 @@ +--- /tmp/Kconfig 2007-10-07 14:13:14.000000000 +0200 ++++ linux-2.6.21/drivers/i2c/chips/Kconfig 2007-10-07 14:13:56.902045000 +0200 +@@ -125,4 +125,18 @@ + This driver can also be built as a module. If so, the module + will be called max6875. + ++config SENSORS_TSC2003 ++ tristate "TI TSC2003" ++ depends on I2C && EXPERIMENTAL ++ default n ++ help ++ Driver for TI tsc2003 touchscreen and sensor chip/ ++ ++config SENSORS_TSC2003_SYSFS ++ tristate "TI TSC2003 sysfs interface ++ depends on SENSORS_TSC2003 ++ default n ++ help ++ Enabled the sysfs interface for tsc2003 ++ + endmenu +--- /tmp/Makefile 2007-10-07 14:14:14.000000000 +0200 ++++ linux-2.6.21/drivers/i2c/chips/Makefile 2007-10-07 14:14:20.072045000 +0200 +@@ -12,6 +12,7 @@ + obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o + obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o + obj-$(CONFIG_TPS65010) += tps65010.o ++obj-$(CONFIG_SENSORS_TSC2003) += tsc2003.o + + ifeq ($(CONFIG_I2C_DEBUG_CHIP),y) + EXTRA_CFLAGS += -DDEBUG diff --git a/packages/linux/linux-2.6.21/tsc2003.c b/packages/linux/linux-2.6.21/tsc2003.c new file mode 100644 index 0000000000..7af4a49374 --- /dev/null +++ b/packages/linux/linux-2.6.21/tsc2003.c @@ -0,0 +1,557 @@ +/* + * linux/drivers/i2c/chips/tsc2003.c + * + * Copyright (C) 2005 Bill Gatliff + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Driver for TI's TSC2003 I2C Touch Screen Controller + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define DRIVER_NAME "tsc2003" + +enum tsc2003_pd { + PD_POWERDOWN = 0, /* penirq */ + PD_IREFOFF_ADCON = 1, /* no penirq */ + PD_IREFON_ADCOFF = 2, /* penirq */ + PD_IREFON_ADCON = 3, /* no penirq */ + PD_PENIRQ_ARM = PD_IREFON_ADCOFF, + PD_PENIRQ_DISARM = PD_IREFON_ADCON, +}; + +enum tsc2003_m { + M_12BIT = 0, + M_8BIT = 1 +}; + +enum tsc2003_cmd { + MEAS_TEMP0 = 0, + MEAS_VBAT1 = 1, + MEAS_IN1 = 2, + MEAS_TEMP1 = 4, + MEAS_VBAT2 = 5, + MEAS_IN2 = 6, + ACTIVATE_NX_DRIVERS = 8, + ACTIVATE_NY_DRIVERS = 9, + ACTIVATE_YNX_DRIVERS = 10, + MEAS_XPOS = 12, + MEAS_YPOS = 13, + MEAS_Z1POS = 14, + MEAS_Z2POS = 15 +}; + +#define TSC2003_CMD(cn,pdn,m) (((cn) << 4) | ((pdn) << 2) | ((m) << 1)) + +#define ADC_MAX ((1 << 12) - 1) + +struct tsc2003_data { + struct i2c_client *client; + struct input_dev *idev; + struct timer_list penirq_timer; + struct semaphore sem; + struct task_struct *tstask; + struct completion tstask_completion; + enum tsc2003_pd pd; + enum tsc2003_m m; + int vbat1; + int vbat2; + int temp0; + int temp1; + int in1; + int in2; +}; + +static int tsc2003_i2c_detect (struct i2c_adapter *adapter, int address, + int kind); + +static inline int tsc2003_command (struct tsc2003_data *data, + enum tsc2003_cmd cmd, + enum tsc2003_pd pd) +{ + char c; + int ret; + down(&data->sem); + c = TSC2003_CMD(cmd, pd, data->m); + ret = i2c_master_send(data->client, &c, 1); + up(&data->sem); + return ret; +} + +static int tsc2003_read (struct tsc2003_data *data, + enum tsc2003_cmd cmd, + enum tsc2003_pd pd, + int *val) +{ + char c; + char d[2]; + int ret; + + c = TSC2003_CMD(cmd, pd, data->m); + ret = i2c_master_send(data->client, &c, 1); + + udelay(20); + ret = i2c_master_recv(data->client, d, data->m == M_12BIT ? 2 : 1); + + if (val) + { + *val = d[0]; + *val <<= 4; + if (data->m == M_12BIT) + *val += (d[1] >> 4); + } + +#if defined(CONFIG_I2C_DEBUG_CHIP) + printk(KERN_ERR "%s: val[%x] = %d\n", + __FUNCTION__, cmd, (((int)d[0]) << 8) + d[1]); +#endif + + return 0; + if (!ret) ret = -ENODEV; + return ret; +} + +static inline int tsc2003_read_temp0 (struct tsc2003_data *d, enum + tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_TEMP0, pd, t); +} + +static inline int tsc2003_read_temp1 (struct tsc2003_data *d, enum + tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_TEMP1, pd, t); +} + +static inline int tsc2003_read_xpos (struct tsc2003_data *d, enum + tsc2003_pd pd, int *x) +{ + return tsc2003_read(d, MEAS_XPOS, pd, x); +} + +static inline int tsc2003_read_ypos (struct tsc2003_data *d, enum + tsc2003_pd pd, int *y) +{ + return tsc2003_read(d, MEAS_YPOS, pd, y); +} + +static inline int tsc2003_read_pressure (struct tsc2003_data *d, enum + tsc2003_pd pd, int *p) +{ + return tsc2003_read(d, MEAS_Z1POS, pd, p); +} + +static inline int tsc2003_read_in1 (struct tsc2003_data *d, enum + tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_IN1, pd, t); +} + +static inline int tsc2003_read_in2 (struct tsc2003_data *d, enum + tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_IN2, pd, t); +} + +static inline int tsc2003_read_vbat1 (struct tsc2003_data *d, enum + tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_VBAT1, pd, t); +} + +static inline int tsc2003_read_vbat2 (struct tsc2003_data *d, enum + tsc2003_pd pd, int *t) +{ + return tsc2003_read(d, MEAS_VBAT2, pd, t); +} + +static inline int tsc2003_powerdown (struct tsc2003_data *d) +{ + /* we don't have a distinct powerdown command, + so do a benign read with the PD bits cleared */ + return tsc2003_read(d, MEAS_IN1, PD_POWERDOWN, 0); +} + +void tsc2003_init_client (struct i2c_client *client) +{ + struct tsc2003_data *data = i2c_get_clientdata(client); + + data->pd = PD_PENIRQ_DISARM; + data->m = M_8BIT; + return; +} + +static int tsc2003ts_thread (void *v) +{ + struct tsc2003_data *d = v; + struct task_struct *tsk = current; + int pendown=0; + + d->tstask = tsk; + + daemonize(DRIVER_NAME "tsd"); + allow_signal(SIGKILL); + + complete(&d->tstask_completion); + + printk(KERN_INFO "%s: address 0x%x\n", + __FUNCTION__, d->client->addr); + + while (!signal_pending(tsk)) + { + unsigned int x, y, p; + + tsc2003_read_xpos(d, PD_PENIRQ_DISARM, &x); + tsc2003_read_ypos(d, PD_PENIRQ_DISARM, &y); + tsc2003_read_pressure(d, PD_PENIRQ_DISARM, &p); + + /* non-X-Y driver read to avoid glitch in penirq (errata?) */ + if (p > 100) { + pendown = 1; + input_report_abs(d->idev, ABS_X, x); + input_report_abs(d->idev, ABS_Y, y); + input_report_abs(d->idev, ABS_PRESSURE, p); + input_report_key(d->idev, BTN_TOUCH, 1); + input_sync(d->idev); + } else if (pendown == 1) { + pendown = 0; + input_report_key(d->idev, BTN_TOUCH, 0); + input_report_abs(d->idev, ABS_PRESSURE, 0); + input_sync(d->idev); + } + schedule_timeout_interruptible(msecs_to_jiffies(10)); + } + + d->tstask = NULL; + complete_and_exit(&d->tstask_completion, 0); +} + +static int tsc2003_idev_open (struct input_dev *idev) +{ + struct tsc2003_data *d = idev->private; + int ret = 0; + + if (down_interruptible(&d->sem)) + return -EINTR; + + if (d->tstask) + panic(DRIVER_NAME "tsd already running (!). abort."); + + init_completion(&d->tstask_completion); + + ret = kernel_thread(tsc2003ts_thread, d, CLONE_KERNEL); + if (ret >= 0) { + wait_for_completion(&d->tstask_completion); + ret = 0; + } + + up(&d->sem); + + return ret; +} + +static void tsc2003_idev_close (struct input_dev *idev) +{ + struct tsc2003_data *d = idev->private; + down_interruptible(&d->sem); + if (d->tstask) + { + send_sig(SIGKILL, d->tstask, 1); + wait_for_completion(&d->tstask_completion); + } + up(&d->sem); + return; +} + +#if defined(CONFIG_SYSFS) && defined(CONFIG_SENSORS_TSC2003_SYSFS) +static ssize_t show_addr (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->client.addr); +} +static DEVICE_ATTR(addr, S_IRUGO, show_addr, NULL); + +static ssize_t show_vbat1 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->vbat1); +} +static DEVICE_ATTR(vbat1, S_IRUGO, show_vbat1, NULL); + +static ssize_t show_vbat2 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->vbat2); +} +static DEVICE_ATTR(vbat2, S_IRUGO, show_vbat2, NULL); + +static ssize_t show_in1 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->in1); +} +static DEVICE_ATTR(in1, S_IRUGO, show_in1, NULL); + +static ssize_t show_in2 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->in2); +} +static DEVICE_ATTR(in2, S_IRUGO, show_in2, NULL); + +static ssize_t show_temp0 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->temp0); +} +static DEVICE_ATTR(temp0, S_IRUGO, show_temp0, NULL); + +static ssize_t show_temp1 (struct device *dev, char *buf) +{ + struct tsc2003_data *d = container_of(dev->driver, struct + tsc2003_data, driver); + return sprintf(buf, "%d\n", d->temp1); +} +static DEVICE_ATTR(temp1, S_IRUGO, show_temp1, NULL); + +#warning "TODO: this daemon sometimes hangs the touchscreen daemon" +#warning "TODO: under periods of heavy touch screen activity." +#warning "TODO: Use with caution until the bug is squashed." +static int tsc2003s_thread (void *v) +{ + struct tsc2003_data *d = v; + + daemonize(DRIVER_NAME "sd"); + allow_signal(SIGKILL); + + printk(KERN_INFO "%s: address 0x%x\n", + __FUNCTION__, d->client.addr); + + while (!signal_pending(current)) + { + if (!down_interruptible(&d->sem)) + { + if (!timer_pending(&d->penirq_timer)) + { + tsc2003_read_vbat1(d, d->pd, &d->vbat1); + tsc2003_read_vbat2(d, d->pd, &d->vbat2); + tsc2003_read_in1(d, d->pd, &d->in1); + tsc2003_read_in2(d, d->pd, &d->in2); + tsc2003_read_temp0(d, d->pd, &d->temp0); + tsc2003_read_temp1(d, d->pd, &d->temp1); + } + up(&d->sem); + } + set_task_state(current, TASK_INTERRUPTIBLE); + schedule_timeout(5 * HZ); + } + do_exit(0); +} +#endif + +static int tsc2003_driver_register (struct tsc2003_data *data) +{ + int ret = 0; + + init_MUTEX(&data->sem); + + data->idev = input_allocate_device(); + if(!data->idev) + { + return -ENOMEM; + } + data->idev->private = data; + data->idev->name = DRIVER_NAME; + data->idev->evbit[0] = BIT(EV_ABS); + data->idev->open = tsc2003_idev_open; + data->idev->close = tsc2003_idev_close; + data->idev->absbit[LONG(ABS_X)] = BIT(ABS_X); + data->idev->absbit[LONG(ABS_Y)] = BIT(ABS_Y); + data->idev->absbit[LONG(ABS_PRESSURE)] = BIT(ABS_PRESSURE); + input_set_abs_params(data->idev, ABS_X, 0, ADC_MAX, 0, 0); + input_set_abs_params(data->idev, ABS_Y, 0, ADC_MAX, 0, 0); + + ret = input_register_device(data->idev); + if(ret) + { + input_free_device(data->idev); + return ret; + } + return ret; +} + +/* Magic definition of all other variables and things */ +static unsigned short normal_i2c[] = {0x48, I2C_CLIENT_END }; + +I2C_CLIENT_INSMOD; + +static int tsc2003_i2c_attach_adapter(struct i2c_adapter *adapter) +{ + return i2c_probe(adapter, &addr_data, tsc2003_i2c_detect); +} + +static int tsc2003_i2c_detach_client(struct i2c_client *client) +{ + struct tsc2003_data *data=i2c_get_clientdata(client); + int err; + + input_unregister_device(data->idev); + + err = i2c_detach_client(client); + if (err) { + dev_err(&client->dev, "Client deregistration failed, " + "client not detached.\n"); + return err; + } + + return 0; +} + +static struct i2c_driver tsc2003_i2c_driver = { + .driver = { + .owner = THIS_MODULE, + .name = DRIVER_NAME, + }, + .attach_adapter = tsc2003_i2c_attach_adapter, + .detach_client = tsc2003_i2c_detach_client, + .command = NULL +}; + +static struct i2c_client client_template = { + .name = "TSC2003", + .driver = &tsc2003_i2c_driver, +}; + +static int tsc2003_i2c_detect (struct i2c_adapter *adap, int addr, + int kind) +{ + struct i2c_client *i2c; + int ret; + struct tsc2003_data *data; + + client_template.adapter = adap; + client_template.addr = addr; + + printk(KERN_INFO "tsc2003 i2c touch screen controller\n"); + printk(KERN_INFO "Bill Gatliff \n"); + + i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); + if (i2c == NULL){ + return -ENOMEM; + } + + data = kcalloc(1, sizeof(*data), GFP_KERNEL); + if (!data) { + ret = -ENOMEM; + goto err; + } + data->client = i2c; + i2c_set_clientdata(i2c, data); + + ret = i2c_attach_client(i2c); + + if (ret < 0) { + printk("failed to attach codec at addr %x\n", addr); + goto err; + } + + tsc2003_init_client(i2c); + + tsc2003_powerdown(data); + + ret = tsc2003_driver_register(data); + if(ret < 0) { + printk("driver_register failed\n"); + goto err; + } + + return ret; + +err: + kfree(i2c); + return ret; +} + +#define tsc2003_suspend NULL +#define tsc2003_resume NULL + +static int __devinit tsc2003_probe(struct platform_device *dev) +{ + int ret; + + ret=i2c_add_driver(&tsc2003_i2c_driver); + if(ret) + return ret; + +#if defined(CONFIG_SYSFS) && defined(CONFIG_SENSORS_TSC2003_SYSFS) + ret = kernel_thread(tsc2003s_thread, d, CLONE_KERNEL); + if (ret >= 0) + ret = 0; + + device_create_file(dev, &dev_attr_addr); + device_create_file(dev, &dev_attr_vbat1); + device_create_file(dev, &dev_attr_vbat2); + device_create_file(dev, &dev_attr_in1); + device_create_file(dev, &dev_attr_in2); + device_create_file(dev, &dev_attr_temp0); + device_create_file(dev, &dev_attr_temp1); +#endif + return 0; +} + +static int __devexit tsc2003_remove(struct platform_device *dev) +{ + i2c_del_driver(&tsc2003_i2c_driver); + return 0; +} + +static struct platform_driver tsc2003_driver = { + .probe = tsc2003_probe, + .remove = __devexit_p(tsc2003_remove), + .suspend = tsc2003_suspend, + .resume = tsc2003_resume, + .driver = { + .name = "tsc2003", + }, +}; + +static int __init tsc2003_init(void) +{ + return platform_driver_register(&tsc2003_driver); +} + +static void __exit tsc2003_exit(void) +{ + platform_driver_unregister(&tsc2003_driver); +} + +MODULE_AUTHOR("Bill Gatliff "); +MODULE_DESCRIPTION("TSC2003 Touch Screen Controller driver"); +MODULE_LICENSE("GPL"); + +module_init(tsc2003_init); +module_exit(tsc2003_exit); diff --git a/packages/linux/linux_2.6.21.bb b/packages/linux/linux_2.6.21.bb index 2ef35ef4c0..4d41b33e06 100644 --- a/packages/linux/linux_2.6.21.bb +++ b/packages/linux/linux_2.6.21.bb @@ -4,10 +4,12 @@ DEFAULT_PREFERENCE_at91sam9263ek = "-1" DEFAULT_PREFERENCE_gumstix-connex = "1" DEFAULT_PREFERENCE_gumstix-verdex = "1" -PR = "r9" +PR = "r10" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ - file://defconfig \ + file://tsc2003.c \ + file://tsc2003-config.diff;patch=1 \ + file://defconfig \ " SRC_URI_append_simpad = "\ @@ -76,3 +78,8 @@ GUMSTIX_PATCHES = "\ SRC_URI_append_gumstix-verdex = "${GUMSTIX_PATCHES}" SRC_URI_append_gumstix-connex = "${GUMSTIX_PATCHES}" + + +do_configure_prepend() { + cp ${WORKDIR}/tsc2003.c ${S}/drivers/i2c/chips/ +} -- cgit v1.2.3 From 966ed6c2c1b5bf939d484a00ea3e70d0032cbd9f Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sun, 7 Oct 2007 12:47:44 +0000 Subject: gnutls: update to 1.6.3, remove autoconf 2.59 hack (from Poky) --- packages/gnutls/gnutls_1.6.2.bb | 6 ------ packages/gnutls/gnutls_1.6.3.bb | 2 ++ 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 packages/gnutls/gnutls_1.6.2.bb create mode 100644 packages/gnutls/gnutls_1.6.3.bb diff --git a/packages/gnutls/gnutls_1.6.2.bb b/packages/gnutls/gnutls_1.6.2.bb deleted file mode 100644 index 68077c0c5a..0000000000 --- a/packages/gnutls/gnutls_1.6.2.bb +++ /dev/null @@ -1,6 +0,0 @@ -require gnutls.inc -PR = "r1" - -do_configure_prepend() { - sed -i "s/2.60/2.59/" ${S}/configure.in -} diff --git a/packages/gnutls/gnutls_1.6.3.bb b/packages/gnutls/gnutls_1.6.3.bb new file mode 100644 index 0000000000..6e0f6000d3 --- /dev/null +++ b/packages/gnutls/gnutls_1.6.3.bb @@ -0,0 +1,2 @@ +require gnutls.inc +PR = "r2" -- cgit v1.2.3 From 959d5584822d0a283495041ff495e6f51592f4c0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 7 Oct 2007 12:48:17 +0000 Subject: linux 2.6.21: patch tsc2003 to scan at more addresses --- packages/linux/linux-2.6.21/tsc2003.c | 2 +- packages/linux/linux_2.6.21.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-2.6.21/tsc2003.c b/packages/linux/linux-2.6.21/tsc2003.c index 7af4a49374..8d7e5b3f78 100644 --- a/packages/linux/linux-2.6.21/tsc2003.c +++ b/packages/linux/linux-2.6.21/tsc2003.c @@ -405,7 +405,7 @@ static int tsc2003_driver_register (struct tsc2003_data *data) } /* Magic definition of all other variables and things */ -static unsigned short normal_i2c[] = {0x48, I2C_CLIENT_END }; +static unsigned short normal_i2c[] = {0x48, 0x49, 0x4a, 0x48b, I2C_CLIENT_END }; I2C_CLIENT_INSMOD; diff --git a/packages/linux/linux_2.6.21.bb b/packages/linux/linux_2.6.21.bb index 4d41b33e06..59a4f3d68b 100644 --- a/packages/linux/linux_2.6.21.bb +++ b/packages/linux/linux_2.6.21.bb @@ -4,7 +4,7 @@ DEFAULT_PREFERENCE_at91sam9263ek = "-1" DEFAULT_PREFERENCE_gumstix-connex = "1" DEFAULT_PREFERENCE_gumstix-verdex = "1" -PR = "r10" +PR = "r11" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ file://tsc2003.c \ -- cgit v1.2.3 From 743f5cdaf5ccb9fefc7c3ac68ea4676637b8782f Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Sun, 7 Oct 2007 14:43:24 +0000 Subject: linux-efika: Moved from 2.6.20.11-cfs to .20.20-cfs. Needed div64_32() symbol weakening in lib. --- .../linux/linux-efika-2.6.20.11/.mtn2git_empty | 0 .../sched-cfs-v9-v2.6.20.11.patch | 5590 -------------------- .../linux/linux-efika-2.6.20.20/.mtn2git_empty | 0 .../sched-cfs-v9-v2.6.20.11.patch | 5590 ++++++++++++++++++++ .../weaken-div64_32-symbol.patch | 23 + packages/linux/linux-efika-2.6.20/defconfig | 23 +- packages/linux/linux-efika_2.6.20.11.bb | 85 - packages/linux/linux-efika_2.6.20.20.bb | 83 + 8 files changed, 5712 insertions(+), 5682 deletions(-) delete mode 100644 packages/linux/linux-efika-2.6.20.11/.mtn2git_empty delete mode 100644 packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch create mode 100644 packages/linux/linux-efika-2.6.20.20/.mtn2git_empty create mode 100644 packages/linux/linux-efika-2.6.20.20/sched-cfs-v9-v2.6.20.11.patch create mode 100644 packages/linux/linux-efika-2.6.20.20/weaken-div64_32-symbol.patch delete mode 100644 packages/linux/linux-efika_2.6.20.11.bb create mode 100644 packages/linux/linux-efika_2.6.20.20.bb diff --git a/packages/linux/linux-efika-2.6.20.11/.mtn2git_empty b/packages/linux/linux-efika-2.6.20.11/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch b/packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch deleted file mode 100644 index 29071a99ac..0000000000 --- a/packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch +++ /dev/null @@ -1,5590 +0,0 @@ -This is the Complete Fair Scheduler (CFS) v9 patch for -linux 2.6.20.10 patch (rediffed cleanly against .11). - -http://people.redhat.com/mingo/cfs-scheduler/ - -Index: linux-cfs-2.6.20.8.q/Documentation/kernel-parameters.txt -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/Documentation/kernel-parameters.txt -+++ linux-cfs-2.6.20.8.q/Documentation/kernel-parameters.txt -@@ -914,49 +914,6 @@ and is between 256 and 4096 characters. - - mga= [HW,DRM] - -- migration_cost= -- [KNL,SMP] debug: override scheduler migration costs -- Format: ,,... -- This debugging option can be used to override the -- default scheduler migration cost matrix. The numbers -- are indexed by 'CPU domain distance'. -- E.g. migration_cost=1000,2000,3000 on an SMT NUMA -- box will set up an intra-core migration cost of -- 1 msec, an inter-core migration cost of 2 msecs, -- and an inter-node migration cost of 3 msecs. -- -- WARNING: using the wrong values here can break -- scheduler performance, so it's only for scheduler -- development purposes, not production environments. -- -- migration_debug= -- [KNL,SMP] migration cost auto-detect verbosity -- Format=<0|1|2> -- If a system's migration matrix reported at bootup -- seems erroneous then this option can be used to -- increase verbosity of the detection process. -- We default to 0 (no extra messages), 1 will print -- some more information, and 2 will be really -- verbose (probably only useful if you also have a -- serial console attached to the system). -- -- migration_factor= -- [KNL,SMP] multiply/divide migration costs by a factor -- Format= -- This debug option can be used to proportionally -- increase or decrease the auto-detected migration -- costs for all entries of the migration matrix. -- E.g. migration_factor=150 will increase migration -- costs by 50%. (and thus the scheduler will be less -- eager migrating cache-hot tasks) -- migration_factor=80 will decrease migration costs -- by 20%. (thus the scheduler will be more eager to -- migrate tasks) -- -- WARNING: using the wrong values here can break -- scheduler performance, so it's only for scheduler -- development purposes, not production environments. -- - mousedev.tap_time= - [MOUSE] Maximum time between finger touching and - leaving touchpad surface for touch to be considered -Index: linux-cfs-2.6.20.8.q/Documentation/sched-design-CFS.txt -=================================================================== ---- /dev/null -+++ linux-cfs-2.6.20.8.q/Documentation/sched-design-CFS.txt -@@ -0,0 +1,107 @@ -+[announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] -+ -+i'm pleased to announce the first release of the "Modular Scheduler Core -+and Completely Fair Scheduler [CFS]" patchset: -+ -+ http://redhat.com/~mingo/cfs-scheduler/ -+ -+This project is a complete rewrite of the Linux task scheduler. My goal -+is to address various feature requests and to fix deficiencies in the -+vanilla scheduler that were suggested/found in the past few years, both -+for desktop scheduling and for server scheduling workloads. -+ -+[ QuickStart: apply the patch, recompile, reboot. The new scheduler -+ will be active by default and all tasks will default to the -+ SCHED_NORMAL interactive scheduling class. ] -+ -+Highlights are: -+ -+ - the introduction of Scheduling Classes: an extensible hierarchy of -+ scheduler modules. These modules encapsulate scheduling policy -+ details and are handled by the scheduler core without the core -+ code assuming about them too much. -+ -+ - sched_fair.c implements the 'CFS desktop scheduler': it is a -+ replacement for the vanilla scheduler's SCHED_OTHER interactivity -+ code. -+ -+ i'd like to give credit to Con Kolivas for the general approach here: -+ he has proven via RSDL/SD that 'fair scheduling' is possible and that -+ it results in better desktop scheduling. Kudos Con! -+ -+ The CFS patch uses a completely different approach and implementation -+ from RSDL/SD. My goal was to make CFS's interactivity quality exceed -+ that of RSDL/SD, which is a high standard to meet :-) Testing -+ feedback is welcome to decide this one way or another. [ and, in any -+ case, all of SD's logic could be added via a kernel/sched_sd.c module -+ as well, if Con is interested in such an approach. ] -+ -+ CFS's design is quite radical: it does not use runqueues, it uses a -+ time-ordered rbtree to build a 'timeline' of future task execution, -+ and thus has no 'array switch' artifacts (by which both the vanilla -+ scheduler and RSDL/SD are affected). -+ -+ CFS uses nanosecond granularity accounting and does not rely on any -+ jiffies or other HZ detail. Thus the CFS scheduler has no notion of -+ 'timeslices' and has no heuristics whatsoever. There is only one -+ central tunable: -+ -+ /proc/sys/kernel/sched_granularity_ns -+ -+ which can be used to tune the scheduler from 'desktop' (low -+ latencies) to 'server' (good batching) workloads. It defaults to a -+ setting suitable for desktop workloads. SCHED_BATCH is handled by the -+ CFS scheduler module too. -+ -+ due to its design, the CFS scheduler is not prone to any of the -+ 'attacks' that exist today against the heuristics of the stock -+ scheduler: fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c all -+ work fine and do not impact interactivity and produce the expected -+ behavior. -+ -+ the CFS scheduler has a much stronger handling of nice levels and -+ SCHED_BATCH: both types of workloads should be isolated much more -+ agressively than under the vanilla scheduler. -+ -+ ( another rdetail: due to nanosec accounting and timeline sorting, -+ sched_yield() support is very simple under CFS, and in fact under -+ CFS sched_yield() behaves much better than under any other -+ scheduler i have tested so far. ) -+ -+ - sched_rt.c implements SCHED_FIFO and SCHED_RR semantics, in a simpler -+ way than the vanilla scheduler does. It uses 100 runqueues (for all -+ 100 RT priority levels, instead of 140 in the vanilla scheduler) -+ and it needs no expired array. -+ -+ - reworked/sanitized SMP load-balancing: the runqueue-walking -+ assumptions are gone from the load-balancing code now, and -+ iterators of the scheduling modules are used. The balancing code got -+ quite a bit simpler as a result. -+ -+the core scheduler got smaller by more than 700 lines: -+ -+ kernel/sched.c | 1454 ++++++++++++++++------------------------------------------------ -+ 1 file changed, 372 insertions(+), 1082 deletions(-) -+ -+and even adding all the scheduling modules, the total size impact is -+relatively small: -+ -+ 18 files changed, 1454 insertions(+), 1133 deletions(-) -+ -+most of the increase is due to extensive comments. The kernel size -+impact is in fact a small negative: -+ -+ text data bss dec hex filename -+ 23366 4001 24 27391 6aff kernel/sched.o.vanilla -+ 24159 2705 56 26920 6928 kernel/sched.o.CFS -+ -+(this is mainly due to the benefit of getting rid of the expired array -+and its data structure overhead.) -+ -+thanks go to Thomas Gleixner and Arjan van de Ven for review of this -+patchset. -+ -+as usual, any sort of feedback, bugreports, fixes and suggestions are -+more than welcome, -+ -+ Ingo -Index: linux-cfs-2.6.20.8.q/Makefile -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/Makefile -+++ linux-cfs-2.6.20.8.q/Makefile -@@ -1,7 +1,7 @@ - VERSION = 2 - PATCHLEVEL = 6 - SUBLEVEL = 20 --EXTRAVERSION = .11 -+EXTRAVERSION = .11-cfs-v9 - NAME = Homicidal Dwarf Hamster - - # *DOCUMENTATION* -Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/smpboot.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/smpboot.c -+++ linux-cfs-2.6.20.8.q/arch/i386/kernel/smpboot.c -@@ -1132,18 +1132,6 @@ exit: - } - #endif - --static void smp_tune_scheduling(void) --{ -- unsigned long cachesize; /* kB */ -- -- if (cpu_khz) { -- cachesize = boot_cpu_data.x86_cache_size; -- -- if (cachesize > 0) -- max_cache_size = cachesize * 1024; -- } --} -- - /* - * Cycle through the processors sending APIC IPIs to boot each. - */ -@@ -1172,7 +1160,6 @@ static void __init smp_boot_cpus(unsigne - x86_cpu_to_apicid[0] = boot_cpu_physical_apicid; - - current_thread_info()->cpu = 0; -- smp_tune_scheduling(); - - set_cpu_sibling_map(0); - -Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/syscall_table.S -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/syscall_table.S -+++ linux-cfs-2.6.20.8.q/arch/i386/kernel/syscall_table.S -@@ -319,3 +319,4 @@ ENTRY(sys_call_table) - .long sys_move_pages - .long sys_getcpu - .long sys_epoll_pwait -+ .long sys_sched_yield_to /* 320 */ -Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/tsc.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/tsc.c -+++ linux-cfs-2.6.20.8.q/arch/i386/kernel/tsc.c -@@ -61,6 +61,8 @@ static inline int check_tsc_unstable(voi - - void mark_tsc_unstable(void) - { -+ sched_clock_unstable_event(); -+ - tsc_unstable = 1; - } - EXPORT_SYMBOL_GPL(mark_tsc_unstable); -@@ -107,13 +109,7 @@ unsigned long long sched_clock(void) - { - unsigned long long this_offset; - -- /* -- * in the NUMA case we dont use the TSC as they are not -- * synchronized across all CPUs. -- */ --#ifndef CONFIG_NUMA -- if (!cpu_khz || check_tsc_unstable()) --#endif -+ if (!cpu_khz || !cpu_has_tsc) - /* no locking but a rare wrong value is not a big deal */ - return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ); - -Index: linux-cfs-2.6.20.8.q/arch/ia64/kernel/setup.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/ia64/kernel/setup.c -+++ linux-cfs-2.6.20.8.q/arch/ia64/kernel/setup.c -@@ -773,7 +773,6 @@ static void __cpuinit - get_max_cacheline_size (void) - { - unsigned long line_size, max = 1; -- unsigned int cache_size = 0; - u64 l, levels, unique_caches; - pal_cache_config_info_t cci; - s64 status; -@@ -803,8 +802,6 @@ get_max_cacheline_size (void) - line_size = 1 << cci.pcci_line_size; - if (line_size > max) - max = line_size; -- if (cache_size < cci.pcci_cache_size) -- cache_size = cci.pcci_cache_size; - if (!cci.pcci_unified) { - status = ia64_pal_cache_config_info(l, - /* cache_type (instruction)= */ 1, -@@ -821,9 +818,6 @@ get_max_cacheline_size (void) - ia64_i_cache_stride_shift = cci.pcci_stride; - } - out: --#ifdef CONFIG_SMP -- max_cache_size = max(max_cache_size, cache_size); --#endif - if (max > ia64_max_cacheline_size) - ia64_max_cacheline_size = max; - } -Index: linux-cfs-2.6.20.8.q/arch/mips/kernel/smp.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/mips/kernel/smp.c -+++ linux-cfs-2.6.20.8.q/arch/mips/kernel/smp.c -@@ -245,7 +245,6 @@ void __init smp_prepare_cpus(unsigned in - { - init_new_context(current, &init_mm); - current_thread_info()->cpu = 0; -- smp_tune_scheduling(); - plat_prepare_cpus(max_cpus); - #ifndef CONFIG_HOTPLUG_CPU - cpu_present_map = cpu_possible_map; -Index: linux-cfs-2.6.20.8.q/arch/sparc/kernel/smp.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/sparc/kernel/smp.c -+++ linux-cfs-2.6.20.8.q/arch/sparc/kernel/smp.c -@@ -69,16 +69,6 @@ void __cpuinit smp_store_cpu_info(int id - cpu_data(id).prom_node = cpu_node; - cpu_data(id).mid = cpu_get_hwmid(cpu_node); - -- /* this is required to tune the scheduler correctly */ -- /* is it possible to have CPUs with different cache sizes? */ -- if (id == boot_cpu_id) { -- int cache_line,cache_nlines; -- cache_line = 0x20; -- cache_line = prom_getintdefault(cpu_node, "ecache-line-size", cache_line); -- cache_nlines = 0x8000; -- cache_nlines = prom_getintdefault(cpu_node, "ecache-nlines", cache_nlines); -- max_cache_size = cache_line * cache_nlines; -- } - if (cpu_data(id).mid < 0) - panic("No MID found for CPU%d at node 0x%08d", id, cpu_node); - } -Index: linux-cfs-2.6.20.8.q/arch/sparc64/kernel/smp.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/arch/sparc64/kernel/smp.c -+++ linux-cfs-2.6.20.8.q/arch/sparc64/kernel/smp.c -@@ -1293,41 +1293,6 @@ int setup_profiling_timer(unsigned int m - return 0; - } - --static void __init smp_tune_scheduling(void) --{ -- struct device_node *dp; -- int instance; -- unsigned int def, smallest = ~0U; -- -- def = ((tlb_type == hypervisor) ? -- (3 * 1024 * 1024) : -- (4 * 1024 * 1024)); -- -- instance = 0; -- while (!cpu_find_by_instance(instance, &dp, NULL)) { -- unsigned int val; -- -- val = of_getintprop_default(dp, "ecache-size", def); -- if (val < smallest) -- smallest = val; -- -- instance++; -- } -- -- /* Any value less than 256K is nonsense. */ -- if (smallest < (256U * 1024U)) -- smallest = 256 * 1024; -- -- max_cache_size = smallest; -- -- if (smallest < 1U * 1024U * 1024U) -- printk(KERN_INFO "Using max_cache_size of %uKB\n", -- smallest / 1024U); -- else -- printk(KERN_INFO "Using max_cache_size of %uMB\n", -- smallest / 1024U / 1024U); --} -- - /* Constrain the number of cpus to max_cpus. */ - void __init smp_prepare_cpus(unsigned int max_cpus) - { -@@ -1363,7 +1328,6 @@ void __init smp_prepare_cpus(unsigned in - } - - smp_store_cpu_info(boot_cpu_id); -- smp_tune_scheduling(); - } - - /* Set this up early so that things like the scheduler can init -Index: linux-cfs-2.6.20.8.q/fs/proc/array.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/fs/proc/array.c -+++ linux-cfs-2.6.20.8.q/fs/proc/array.c -@@ -165,7 +165,6 @@ static inline char * task_state(struct t - rcu_read_lock(); - buffer += sprintf(buffer, - "State:\t%s\n" -- "SleepAVG:\t%lu%%\n" - "Tgid:\t%d\n" - "Pid:\t%d\n" - "PPid:\t%d\n" -@@ -173,9 +172,8 @@ static inline char * task_state(struct t - "Uid:\t%d\t%d\t%d\t%d\n" - "Gid:\t%d\t%d\t%d\t%d\n", - get_task_state(p), -- (p->sleep_avg/1024)*100/(1020000000/1024), -- p->tgid, p->pid, -- pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, -+ p->tgid, p->pid, -+ pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, - pid_alive(p) && p->ptrace ? rcu_dereference(p->parent)->pid : 0, - p->uid, p->euid, p->suid, p->fsuid, - p->gid, p->egid, p->sgid, p->fsgid); -@@ -312,6 +310,11 @@ int proc_pid_status(struct task_struct * - return buffer - orig; - } - -+int proc_pid_sched(struct task_struct *task, char *buffer) -+{ -+ return sched_print_task_state(task, buffer) - buffer; -+} -+ - static int do_task_stat(struct task_struct *task, char * buffer, int whole) - { - unsigned long vsize, eip, esp, wchan = ~0UL; -Index: linux-cfs-2.6.20.8.q/fs/proc/base.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/fs/proc/base.c -+++ linux-cfs-2.6.20.8.q/fs/proc/base.c -@@ -1839,6 +1839,7 @@ static struct pid_entry tgid_base_stuff[ - INF("environ", S_IRUSR, pid_environ), - INF("auxv", S_IRUSR, pid_auxv), - INF("status", S_IRUGO, pid_status), -+ INF("sched", S_IRUGO, pid_sched), - INF("cmdline", S_IRUGO, pid_cmdline), - INF("stat", S_IRUGO, tgid_stat), - INF("statm", S_IRUGO, pid_statm), -@@ -2121,6 +2122,7 @@ static struct pid_entry tid_base_stuff[] - INF("environ", S_IRUSR, pid_environ), - INF("auxv", S_IRUSR, pid_auxv), - INF("status", S_IRUGO, pid_status), -+ INF("sched", S_IRUGO, pid_sched), - INF("cmdline", S_IRUGO, pid_cmdline), - INF("stat", S_IRUGO, tid_stat), - INF("statm", S_IRUGO, pid_statm), -Index: linux-cfs-2.6.20.8.q/fs/proc/internal.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/fs/proc/internal.h -+++ linux-cfs-2.6.20.8.q/fs/proc/internal.h -@@ -36,6 +36,7 @@ extern int proc_exe_link(struct inode *, - extern int proc_tid_stat(struct task_struct *, char *); - extern int proc_tgid_stat(struct task_struct *, char *); - extern int proc_pid_status(struct task_struct *, char *); -+extern int proc_pid_sched(struct task_struct *, char *); - extern int proc_pid_statm(struct task_struct *, char *); - - extern struct file_operations proc_maps_operations; -Index: linux-cfs-2.6.20.8.q/include/asm-generic/bitops/sched.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-generic/bitops/sched.h -+++ linux-cfs-2.6.20.8.q/include/asm-generic/bitops/sched.h -@@ -6,28 +6,23 @@ - - /* - * Every architecture must define this function. It's the fastest -- * way of searching a 140-bit bitmap where the first 100 bits are -- * unlikely to be set. It's guaranteed that at least one of the 140 -- * bits is cleared. -+ * way of searching a 100-bit bitmap. It's guaranteed that at least -+ * one of the 100 bits is cleared. - */ - static inline int sched_find_first_bit(const unsigned long *b) - { - #if BITS_PER_LONG == 64 -- if (unlikely(b[0])) -+ if (b[0]) - return __ffs(b[0]); -- if (likely(b[1])) -- return __ffs(b[1]) + 64; -- return __ffs(b[2]) + 128; -+ return __ffs(b[1]) + 64; - #elif BITS_PER_LONG == 32 -- if (unlikely(b[0])) -+ if (b[0]) - return __ffs(b[0]); -- if (unlikely(b[1])) -+ if (b[1]) - return __ffs(b[1]) + 32; -- if (unlikely(b[2])) -+ if (b[2]) - return __ffs(b[2]) + 64; -- if (b[3]) -- return __ffs(b[3]) + 96; -- return __ffs(b[4]) + 128; -+ return __ffs(b[3]) + 96; - #else - #error BITS_PER_LONG not defined - #endif -Index: linux-cfs-2.6.20.8.q/include/asm-i386/topology.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-i386/topology.h -+++ linux-cfs-2.6.20.8.q/include/asm-i386/topology.h -@@ -85,7 +85,6 @@ static inline int node_to_first_cpu(int - .idle_idx = 1, \ - .newidle_idx = 2, \ - .wake_idx = 1, \ -- .per_cpu_gain = 100, \ - .flags = SD_LOAD_BALANCE \ - | SD_BALANCE_EXEC \ - | SD_BALANCE_FORK \ -Index: linux-cfs-2.6.20.8.q/include/asm-i386/unistd.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-i386/unistd.h -+++ linux-cfs-2.6.20.8.q/include/asm-i386/unistd.h -@@ -325,10 +325,11 @@ - #define __NR_move_pages 317 - #define __NR_getcpu 318 - #define __NR_epoll_pwait 319 -+#define __NR_sched_yield_to 320 - - #ifdef __KERNEL__ - --#define NR_syscalls 320 -+#define NR_syscalls 321 - - #define __ARCH_WANT_IPC_PARSE_VERSION - #define __ARCH_WANT_OLD_READDIR -Index: linux-cfs-2.6.20.8.q/include/asm-ia64/topology.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-ia64/topology.h -+++ linux-cfs-2.6.20.8.q/include/asm-ia64/topology.h -@@ -65,7 +65,6 @@ void build_cpu_to_node_map(void); - .max_interval = 4, \ - .busy_factor = 64, \ - .imbalance_pct = 125, \ -- .per_cpu_gain = 100, \ - .cache_nice_tries = 2, \ - .busy_idx = 2, \ - .idle_idx = 1, \ -@@ -97,7 +96,6 @@ void build_cpu_to_node_map(void); - .newidle_idx = 0, /* unused */ \ - .wake_idx = 1, \ - .forkexec_idx = 1, \ -- .per_cpu_gain = 100, \ - .flags = SD_LOAD_BALANCE \ - | SD_BALANCE_EXEC \ - | SD_BALANCE_FORK \ -Index: linux-cfs-2.6.20.8.q/include/asm-mips/mach-ip27/topology.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-mips/mach-ip27/topology.h -+++ linux-cfs-2.6.20.8.q/include/asm-mips/mach-ip27/topology.h -@@ -28,7 +28,6 @@ extern unsigned char __node_distances[MA - .busy_factor = 32, \ - .imbalance_pct = 125, \ - .cache_nice_tries = 1, \ -- .per_cpu_gain = 100, \ - .flags = SD_LOAD_BALANCE \ - | SD_BALANCE_EXEC \ - | SD_WAKE_BALANCE, \ -Index: linux-cfs-2.6.20.8.q/include/asm-powerpc/topology.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-powerpc/topology.h -+++ linux-cfs-2.6.20.8.q/include/asm-powerpc/topology.h -@@ -57,7 +57,6 @@ static inline int pcibus_to_node(struct - .busy_factor = 32, \ - .imbalance_pct = 125, \ - .cache_nice_tries = 1, \ -- .per_cpu_gain = 100, \ - .busy_idx = 3, \ - .idle_idx = 1, \ - .newidle_idx = 2, \ -Index: linux-cfs-2.6.20.8.q/include/asm-x86_64/topology.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-x86_64/topology.h -+++ linux-cfs-2.6.20.8.q/include/asm-x86_64/topology.h -@@ -43,7 +43,6 @@ extern int __node_distance(int, int); - .newidle_idx = 0, \ - .wake_idx = 1, \ - .forkexec_idx = 1, \ -- .per_cpu_gain = 100, \ - .flags = SD_LOAD_BALANCE \ - | SD_BALANCE_FORK \ - | SD_BALANCE_EXEC \ -Index: linux-cfs-2.6.20.8.q/include/asm-x86_64/unistd.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/asm-x86_64/unistd.h -+++ linux-cfs-2.6.20.8.q/include/asm-x86_64/unistd.h -@@ -619,8 +619,10 @@ __SYSCALL(__NR_sync_file_range, sys_sync - __SYSCALL(__NR_vmsplice, sys_vmsplice) - #define __NR_move_pages 279 - __SYSCALL(__NR_move_pages, sys_move_pages) -+#define __NR_sched_yield_to 280 -+__SYSCALL(__NR_sched_yield_to, sys_sched_yield_to) - --#define __NR_syscall_max __NR_move_pages -+#define __NR_syscall_max __NR_sched_yield_to - - #ifndef __NO_STUBS - #define __ARCH_WANT_OLD_READDIR -Index: linux-cfs-2.6.20.8.q/include/linux/hardirq.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/linux/hardirq.h -+++ linux-cfs-2.6.20.8.q/include/linux/hardirq.h -@@ -79,6 +79,19 @@ - #endif - - #ifdef CONFIG_PREEMPT -+# define PREEMPT_CHECK_OFFSET 1 -+#else -+# define PREEMPT_CHECK_OFFSET 0 -+#endif -+ -+/* -+ * Check whether we were atomic before we did preempt_disable(): -+ * (used by the scheduler) -+ */ -+#define in_atomic_preempt_off() \ -+ ((preempt_count() & ~PREEMPT_ACTIVE) != PREEMPT_CHECK_OFFSET) -+ -+#ifdef CONFIG_PREEMPT - # define preemptible() (preempt_count() == 0 && !irqs_disabled()) - # define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1) - #else -Index: linux-cfs-2.6.20.8.q/include/linux/ktime.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/linux/ktime.h -+++ linux-cfs-2.6.20.8.q/include/linux/ktime.h -@@ -274,4 +274,6 @@ extern void ktime_get_ts(struct timespec - /* Get the real (wall-) time in timespec format: */ - #define ktime_get_real_ts(ts) getnstimeofday(ts) - -+extern ktime_t ktime_get(void); -+ - #endif -Index: linux-cfs-2.6.20.8.q/include/linux/sched.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/linux/sched.h -+++ linux-cfs-2.6.20.8.q/include/linux/sched.h -@@ -2,7 +2,6 @@ - #define _LINUX_SCHED_H - - #include /* For AT_VECTOR_SIZE */ -- - /* - * cloning flags: - */ -@@ -37,6 +36,8 @@ - - #ifdef __KERNEL__ - -+#include /* For run_node */ -+ - struct sched_param { - int sched_priority; - }; -@@ -196,13 +197,13 @@ extern void init_idle(struct task_struct - extern cpumask_t nohz_cpu_mask; - - /* -- * Only dump TASK_* tasks. (-1 for all tasks) -+ * Only dump TASK_* tasks. (0 for all tasks) - */ - extern void show_state_filter(unsigned long state_filter); - - static inline void show_state(void) - { -- show_state_filter(-1); -+ show_state_filter(0); - } - - extern void show_regs(struct pt_regs *); -@@ -464,7 +465,7 @@ struct signal_struct { - * from jiffies_to_ns(utime + stime) if sched_clock uses something - * other than jiffies.) - */ -- unsigned long long sched_time; -+ unsigned long long sum_sched_runtime; - - /* - * We don't bother to synchronize most readers of this at all, -@@ -524,6 +525,7 @@ struct signal_struct { - #define MAX_RT_PRIO MAX_USER_RT_PRIO - - #define MAX_PRIO (MAX_RT_PRIO + 40) -+#define DEFAULT_PRIO (MAX_RT_PRIO + 20) - - #define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO) - #define rt_task(p) rt_prio((p)->prio) -@@ -635,7 +637,14 @@ enum idle_type - /* - * sched-domains (multiprocessor balancing) declarations: - */ --#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */ -+ -+/* -+ * Increase resolution of nice-level calculations: -+ */ -+#define SCHED_LOAD_SHIFT 10 -+#define SCHED_LOAD_SCALE (1UL << SCHED_LOAD_SHIFT) -+ -+#define SCHED_LOAD_SCALE_FUZZ (SCHED_LOAD_SCALE >> 5) - - #ifdef CONFIG_SMP - #define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ -@@ -684,7 +693,6 @@ struct sched_domain { - unsigned int imbalance_pct; /* No balance until over watermark */ - unsigned long long cache_hot_time; /* Task considered cache hot (ns) */ - unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */ -- unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */ - unsigned int busy_idx; - unsigned int idle_idx; - unsigned int newidle_idx; -@@ -733,12 +741,6 @@ struct sched_domain { - extern int partition_sched_domains(cpumask_t *partition1, - cpumask_t *partition2); - --/* -- * Maximum cache size the migration-costs auto-tuning code will -- * search from: -- */ --extern unsigned int max_cache_size; -- - #endif /* CONFIG_SMP */ - - -@@ -789,14 +791,28 @@ struct mempolicy; - struct pipe_inode_info; - struct uts_namespace; - --enum sleep_type { -- SLEEP_NORMAL, -- SLEEP_NONINTERACTIVE, -- SLEEP_INTERACTIVE, -- SLEEP_INTERRUPTED, --}; -+struct rq; - --struct prio_array; -+struct sched_class { -+ struct sched_class *next; -+ -+ void (*enqueue_task) (struct rq *rq, struct task_struct *p, -+ int wakeup, u64 now); -+ void (*dequeue_task) (struct rq *rq, struct task_struct *p, -+ int sleep, u64 now); -+ void (*yield_task) (struct rq *rq, struct task_struct *p, -+ struct task_struct *p_to); -+ -+ void (*check_preempt_curr) (struct rq *rq, struct task_struct *p); -+ -+ struct task_struct * (*pick_next_task) (struct rq *rq, u64 now); -+ void (*put_prev_task) (struct rq *rq, struct task_struct *p, u64 now); -+ -+ struct task_struct * (*load_balance_start) (struct rq *rq); -+ struct task_struct * (*load_balance_next) (struct rq *rq); -+ void (*task_tick) (struct rq *rq, struct task_struct *p); -+ void (*task_new) (struct rq *rq, struct task_struct *p); -+}; - - struct task_struct { - volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ -@@ -813,26 +829,45 @@ struct task_struct { - #endif - #endif - int load_weight; /* for niceness load balancing purposes */ -+ int load_shift; -+ - int prio, static_prio, normal_prio; -+ int on_rq; - struct list_head run_list; -- struct prio_array *array; -+ struct rb_node run_node; - - unsigned short ioprio; - #ifdef CONFIG_BLK_DEV_IO_TRACE - unsigned int btrace_seq; - #endif -- unsigned long sleep_avg; -- unsigned long long timestamp, last_ran; -- unsigned long long sched_time; /* sched_clock time spent running */ -- enum sleep_type sleep_type; -+ /* CFS scheduling class statistics fields: */ -+ u64 wait_start_fair; -+ u64 wait_start; -+ u64 exec_start; -+ u64 sleep_start; -+ u64 block_start; -+ u64 sleep_max; -+ u64 block_max; -+ u64 exec_max; -+ u64 wait_max; -+ u64 last_ran; -+ -+ s64 wait_runtime; -+ u64 sum_exec_runtime; -+ s64 fair_key; -+ s64 sum_wait_runtime; - - unsigned long policy; - cpumask_t cpus_allowed; -- unsigned int time_slice, first_time_slice; -+ unsigned int time_slice; -+ struct sched_class *sched_class; -+ -+ s64 min_wait_runtime; - - #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) - struct sched_info sched_info; - #endif -+ u64 nr_switches; - - struct list_head tasks; - /* -@@ -1195,8 +1230,9 @@ static inline int set_cpus_allowed(struc - #endif - - extern unsigned long long sched_clock(void); -+extern void sched_clock_unstable_event(void); - extern unsigned long long --current_sched_time(const struct task_struct *current_task); -+current_sched_runtime(const struct task_struct *current_task); - - /* sched_exec is called by processes performing an exec */ - #ifdef CONFIG_SMP -@@ -1212,6 +1248,13 @@ static inline void idle_task_exit(void) - #endif - - extern void sched_idle_next(void); -+extern char * sched_print_task_state(struct task_struct *p, char *buffer); -+ -+extern unsigned int sysctl_sched_granularity; -+extern unsigned int sysctl_sched_wakeup_granularity; -+extern unsigned int sysctl_sched_sleep_history_max; -+extern unsigned int sysctl_sched_child_runs_first; -+extern unsigned int sysctl_sched_load_smoothing; - - #ifdef CONFIG_RT_MUTEXES - extern int rt_mutex_getprio(struct task_struct *p); -@@ -1290,8 +1333,7 @@ extern void FASTCALL(wake_up_new_task(st - #else - static inline void kick_process(struct task_struct *tsk) { } - #endif --extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags)); --extern void FASTCALL(sched_exit(struct task_struct * p)); -+extern void sched_fork(struct task_struct * p, int clone_flags); - - extern int in_group_p(gid_t); - extern int in_egroup_p(gid_t); -Index: linux-cfs-2.6.20.8.q/include/linux/topology.h -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/include/linux/topology.h -+++ linux-cfs-2.6.20.8.q/include/linux/topology.h -@@ -96,7 +96,6 @@ - .busy_factor = 64, \ - .imbalance_pct = 110, \ - .cache_nice_tries = 0, \ -- .per_cpu_gain = 25, \ - .busy_idx = 0, \ - .idle_idx = 0, \ - .newidle_idx = 1, \ -@@ -128,7 +127,6 @@ - .busy_factor = 64, \ - .imbalance_pct = 125, \ - .cache_nice_tries = 1, \ -- .per_cpu_gain = 100, \ - .busy_idx = 2, \ - .idle_idx = 1, \ - .newidle_idx = 2, \ -@@ -159,7 +157,6 @@ - .busy_factor = 64, \ - .imbalance_pct = 125, \ - .cache_nice_tries = 1, \ -- .per_cpu_gain = 100, \ - .busy_idx = 2, \ - .idle_idx = 1, \ - .newidle_idx = 2, \ -@@ -193,7 +190,6 @@ - .newidle_idx = 0, /* unused */ \ - .wake_idx = 0, /* unused */ \ - .forkexec_idx = 0, /* unused */ \ -- .per_cpu_gain = 100, \ - .flags = SD_LOAD_BALANCE \ - | SD_SERIALIZE, \ - .last_balance = jiffies, \ -Index: linux-cfs-2.6.20.8.q/init/main.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/init/main.c -+++ linux-cfs-2.6.20.8.q/init/main.c -@@ -422,7 +422,7 @@ static void noinline rest_init(void) - - /* - * The boot idle thread must execute schedule() -- * at least one to get things moving: -+ * at least once to get things moving: - */ - preempt_enable_no_resched(); - schedule(); -Index: linux-cfs-2.6.20.8.q/kernel/exit.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/kernel/exit.c -+++ linux-cfs-2.6.20.8.q/kernel/exit.c -@@ -112,7 +112,7 @@ static void __exit_signal(struct task_st - sig->maj_flt += tsk->maj_flt; - sig->nvcsw += tsk->nvcsw; - sig->nivcsw += tsk->nivcsw; -- sig->sched_time += tsk->sched_time; -+ sig->sum_sched_runtime += tsk->sum_exec_runtime; - sig = NULL; /* Marker for below. */ - } - -@@ -170,7 +170,6 @@ repeat: - zap_leader = (leader->exit_signal == -1); - } - -- sched_exit(p); - write_unlock_irq(&tasklist_lock); - proc_flush_task(p); - release_thread(p); -Index: linux-cfs-2.6.20.8.q/kernel/fork.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/kernel/fork.c -+++ linux-cfs-2.6.20.8.q/kernel/fork.c -@@ -874,7 +874,7 @@ static inline int copy_signal(unsigned l - sig->utime = sig->stime = sig->cutime = sig->cstime = cputime_zero; - sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0; - sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0; -- sig->sched_time = 0; -+ sig->sum_sched_runtime = 0; - INIT_LIST_HEAD(&sig->cpu_timers[0]); - INIT_LIST_HEAD(&sig->cpu_timers[1]); - INIT_LIST_HEAD(&sig->cpu_timers[2]); -@@ -1037,7 +1037,7 @@ static struct task_struct *copy_process( - - p->utime = cputime_zero; - p->stime = cputime_zero; -- p->sched_time = 0; -+ - p->rchar = 0; /* I/O counter: bytes read */ - p->wchar = 0; /* I/O counter: bytes written */ - p->syscr = 0; /* I/O counter: read syscalls */ -Index: linux-cfs-2.6.20.8.q/kernel/hrtimer.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/kernel/hrtimer.c -+++ linux-cfs-2.6.20.8.q/kernel/hrtimer.c -@@ -45,7 +45,7 @@ - * - * returns the time in ktime_t format - */ --static ktime_t ktime_get(void) -+ktime_t ktime_get(void) - { - struct timespec now; - -Index: linux-cfs-2.6.20.8.q/kernel/posix-cpu-timers.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/kernel/posix-cpu-timers.c -+++ linux-cfs-2.6.20.8.q/kernel/posix-cpu-timers.c -@@ -161,7 +161,7 @@ static inline cputime_t virt_ticks(struc - } - static inline unsigned long long sched_ns(struct task_struct *p) - { -- return (p == current) ? current_sched_time(p) : p->sched_time; -+ return (p == current) ? current_sched_runtime(p) : p->sum_exec_runtime; - } - - int posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *tp) -@@ -246,10 +246,10 @@ static int cpu_clock_sample_group_locked - } while (t != p); - break; - case CPUCLOCK_SCHED: -- cpu->sched = p->signal->sched_time; -+ cpu->sched = p->signal->sum_sched_runtime; - /* Add in each other live thread. */ - while ((t = next_thread(t)) != p) { -- cpu->sched += t->sched_time; -+ cpu->sched += t->sum_exec_runtime; - } - cpu->sched += sched_ns(p); - break; -@@ -417,7 +417,7 @@ int posix_cpu_timer_del(struct k_itimer - */ - static void cleanup_timers(struct list_head *head, - cputime_t utime, cputime_t stime, -- unsigned long long sched_time) -+ unsigned long long sum_exec_runtime) - { - struct cpu_timer_list *timer, *next; - cputime_t ptime = cputime_add(utime, stime); -@@ -446,10 +446,10 @@ static void cleanup_timers(struct list_h - ++head; - list_for_each_entry_safe(timer, next, head, entry) { - list_del_init(&timer->entry); -- if (timer->expires.sched < sched_time) { -+ if (timer->expires.sched < sum_exec_runtime) { - timer->expires.sched = 0; - } else { -- timer->expires.sched -= sched_time; -+ timer->expires.sched -= sum_exec_runtime; - } - } - } -@@ -462,7 +462,7 @@ static void cleanup_timers(struct list_h - void posix_cpu_timers_exit(struct task_struct *tsk) - { - cleanup_timers(tsk->cpu_timers, -- tsk->utime, tsk->stime, tsk->sched_time); -+ tsk->utime, tsk->stime, tsk->sum_exec_runtime); - - } - void posix_cpu_timers_exit_group(struct task_struct *tsk) -@@ -470,7 +470,7 @@ void posix_cpu_timers_exit_group(struct - cleanup_timers(tsk->signal->cpu_timers, - cputime_add(tsk->utime, tsk->signal->utime), - cputime_add(tsk->stime, tsk->signal->stime), -- tsk->sched_time + tsk->signal->sched_time); -+ tsk->sum_exec_runtime + tsk->signal->sum_sched_runtime); - } - - -@@ -531,7 +531,7 @@ static void process_timer_rebalance(stru - nsleft = max_t(unsigned long long, nsleft, 1); - do { - if (likely(!(t->flags & PF_EXITING))) { -- ns = t->sched_time + nsleft; -+ ns = t->sum_exec_runtime + nsleft; - if (t->it_sched_expires == 0 || - t->it_sched_expires > ns) { - t->it_sched_expires = ns; -@@ -999,7 +999,7 @@ static void check_thread_timers(struct t - struct cpu_timer_list *t = list_entry(timers->next, - struct cpu_timer_list, - entry); -- if (!--maxfire || tsk->sched_time < t->expires.sched) { -+ if (!--maxfire || tsk->sum_exec_runtime < t->expires.sched) { - tsk->it_sched_expires = t->expires.sched; - break; - } -@@ -1019,7 +1019,7 @@ static void check_process_timers(struct - int maxfire; - struct signal_struct *const sig = tsk->signal; - cputime_t utime, stime, ptime, virt_expires, prof_expires; -- unsigned long long sched_time, sched_expires; -+ unsigned long long sum_sched_runtime, sched_expires; - struct task_struct *t; - struct list_head *timers = sig->cpu_timers; - -@@ -1039,12 +1039,12 @@ static void check_process_timers(struct - */ - utime = sig->utime; - stime = sig->stime; -- sched_time = sig->sched_time; -+ sum_sched_runtime = sig->sum_sched_runtime; - t = tsk; - do { - utime = cputime_add(utime, t->utime); - stime = cputime_add(stime, t->stime); -- sched_time += t->sched_time; -+ sum_sched_runtime += t->sum_exec_runtime; - t = next_thread(t); - } while (t != tsk); - ptime = cputime_add(utime, stime); -@@ -1085,7 +1085,7 @@ static void check_process_timers(struct - struct cpu_timer_list *t = list_entry(timers->next, - struct cpu_timer_list, - entry); -- if (!--maxfire || sched_time < t->expires.sched) { -+ if (!--maxfire || sum_sched_runtime < t->expires.sched) { - sched_expires = t->expires.sched; - break; - } -@@ -1177,7 +1177,7 @@ static void check_process_timers(struct - virt_left = cputime_sub(virt_expires, utime); - virt_left = cputime_div_non_zero(virt_left, nthreads); - if (sched_expires) { -- sched_left = sched_expires - sched_time; -+ sched_left = sched_expires - sum_sched_runtime; - do_div(sched_left, nthreads); - sched_left = max_t(unsigned long long, sched_left, 1); - } else { -@@ -1203,7 +1203,7 @@ static void check_process_timers(struct - t->it_virt_expires = ticks; - } - -- sched = t->sched_time + sched_left; -+ sched = t->sum_exec_runtime + sched_left; - if (sched_expires && (t->it_sched_expires == 0 || - t->it_sched_expires > sched)) { - t->it_sched_expires = sched; -@@ -1295,7 +1295,7 @@ void run_posix_cpu_timers(struct task_st - - if (UNEXPIRED(prof) && UNEXPIRED(virt) && - (tsk->it_sched_expires == 0 || -- tsk->sched_time < tsk->it_sched_expires)) -+ tsk->sum_exec_runtime < tsk->it_sched_expires)) - return; - - #undef UNEXPIRED -Index: linux-cfs-2.6.20.8.q/kernel/sched.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/kernel/sched.c -+++ linux-cfs-2.6.20.8.q/kernel/sched.c -@@ -89,110 +89,13 @@ - */ - #define MIN_TIMESLICE max(5 * HZ / 1000, 1) - #define DEF_TIMESLICE (100 * HZ / 1000) --#define ON_RUNQUEUE_WEIGHT 30 --#define CHILD_PENALTY 95 --#define PARENT_PENALTY 100 --#define EXIT_WEIGHT 3 --#define PRIO_BONUS_RATIO 25 --#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) --#define INTERACTIVE_DELTA 2 --#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS) --#define STARVATION_LIMIT (MAX_SLEEP_AVG) --#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG)) -- --/* -- * If a task is 'interactive' then we reinsert it in the active -- * array after it has expired its current timeslice. (it will not -- * continue to run immediately, it will still roundrobin with -- * other interactive tasks.) -- * -- * This part scales the interactivity limit depending on niceness. -- * -- * We scale it linearly, offset by the INTERACTIVE_DELTA delta. -- * Here are a few examples of different nice levels: -- * -- * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0] -- * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0] -- * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0] -- * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0] -- * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0] -- * -- * (the X axis represents the possible -5 ... 0 ... +5 dynamic -- * priority range a task can explore, a value of '1' means the -- * task is rated interactive.) -- * -- * Ie. nice +19 tasks can never get 'interactive' enough to be -- * reinserted into the active array. And only heavily CPU-hog nice -20 -- * tasks will be expired. Default nice 0 tasks are somewhere between, -- * it takes some effort for them to get interactive, but it's not -- * too hard. -- */ -- --#define CURRENT_BONUS(p) \ -- (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ -- MAX_SLEEP_AVG) -- --#define GRANULARITY (10 * HZ / 1000 ? : 1) -- --#ifdef CONFIG_SMP --#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ -- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \ -- num_online_cpus()) --#else --#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ -- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1))) --#endif -- --#define SCALE(v1,v1_max,v2_max) \ -- (v1) * (v2_max) / (v1_max) -- --#define DELTA(p) \ -- (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \ -- INTERACTIVE_DELTA) -- --#define TASK_INTERACTIVE(p) \ -- ((p)->prio <= (p)->static_prio - DELTA(p)) -- --#define INTERACTIVE_SLEEP(p) \ -- (JIFFIES_TO_NS(MAX_SLEEP_AVG * \ -- (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1)) -- --#define TASK_PREEMPTS_CURR(p, rq) \ -- ((p)->prio < (rq)->curr->prio) -- --#define SCALE_PRIO(x, prio) \ -- max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) -- --static unsigned int static_prio_timeslice(int static_prio) --{ -- if (static_prio < NICE_TO_PRIO(0)) -- return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); -- else -- return SCALE_PRIO(DEF_TIMESLICE, static_prio); --} -- --/* -- * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] -- * to time slice values: [800ms ... 100ms ... 5ms] -- * -- * The higher a thread's priority, the bigger timeslices -- * it gets during one round of execution. But even the lowest -- * priority thread gets MIN_TIMESLICE worth of execution time. -- */ -- --static inline unsigned int task_timeslice(struct task_struct *p) --{ -- return static_prio_timeslice(p->static_prio); --} - - /* -- * These are the runqueue data structures: -+ * This is the priority-queue data structure of the RT scheduling class: - */ -- - struct prio_array { -- unsigned int nr_active; -- DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */ -- struct list_head queue[MAX_PRIO]; -+ DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */ -+ struct list_head queue[MAX_RT_PRIO]; - }; - - /* -@@ -209,12 +112,13 @@ struct rq { - * nr_running and cpu_load should be in the same cacheline because - * remote CPUs use both these fields when doing load calculation. - */ -- unsigned long nr_running; -+ long nr_running; - unsigned long raw_weighted_load; --#ifdef CONFIG_SMP -- unsigned long cpu_load[3]; --#endif -- unsigned long long nr_switches; -+ #define CPU_LOAD_IDX_MAX 5 -+ unsigned long cpu_load[CPU_LOAD_IDX_MAX]; -+ -+ u64 nr_switches; -+ unsigned long nr_load_updates; - - /* - * This is part of a global counter where only the total sum -@@ -224,14 +128,29 @@ struct rq { - */ - unsigned long nr_uninterruptible; - -- unsigned long expired_timestamp; -- /* Cached timestamp set by update_cpu_clock() */ -- unsigned long long most_recent_timestamp; - struct task_struct *curr, *idle; - unsigned long next_balance; - struct mm_struct *prev_mm; -- struct prio_array *active, *expired, arrays[2]; -- int best_expired_prio; -+ -+ u64 clock, prev_clock_raw; -+ s64 clock_max_delta; -+ u64 fair_clock, prev_fair_clock; -+ u64 exec_clock, prev_exec_clock; -+ u64 wait_runtime; -+ -+ unsigned int clock_warps; -+ unsigned int clock_unstable_events; -+ -+ struct sched_class *load_balance_class; -+ -+ struct prio_array active; -+ int rt_load_balance_idx; -+ struct list_head *rt_load_balance_head, *rt_load_balance_curr; -+ -+ struct rb_root tasks_timeline; -+ struct rb_node *rb_leftmost; -+ struct rb_node *rb_load_balance_curr; -+ - atomic_t nr_iowait; - - #ifdef CONFIG_SMP -@@ -268,7 +187,107 @@ struct rq { - struct lock_class_key rq_lock_key; - }; - --static DEFINE_PER_CPU(struct rq, runqueues); -+static DEFINE_PER_CPU(struct rq, runqueues) ____cacheline_aligned_in_smp; -+ -+static inline void check_preempt_curr(struct rq *rq, struct task_struct *p) -+{ -+ rq->curr->sched_class->check_preempt_curr(rq, p); -+} -+ -+#define SCALE_PRIO(x, prio) \ -+ max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) -+ -+/* -+ * static_prio_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] -+ * to time slice values: [800ms ... 100ms ... 5ms] -+ */ -+static unsigned int static_prio_timeslice(int static_prio) -+{ -+ if (static_prio == NICE_TO_PRIO(19)) -+ return 1; -+ -+ if (static_prio < NICE_TO_PRIO(0)) -+ return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); -+ else -+ return SCALE_PRIO(DEF_TIMESLICE, static_prio); -+} -+ -+/* -+ * Print out various scheduling related per-task fields: -+ */ -+char * sched_print_task_state(struct task_struct *p, char *buffer) -+{ -+ struct rq *this_rq = &per_cpu(runqueues, raw_smp_processor_id()); -+ unsigned long long t0, t1; -+ -+#define P(F) \ -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", #F, (long long)p->F) -+ -+ P(wait_start); -+ P(wait_start_fair); -+ P(exec_start); -+ P(sleep_start); -+ P(block_start); -+ P(sleep_max); -+ P(block_max); -+ P(exec_max); -+ P(wait_max); -+ P(min_wait_runtime); -+ P(last_ran); -+ P(wait_runtime); -+ P(sum_exec_runtime); -+#undef P -+ -+ t0 = sched_clock(); -+ t1 = sched_clock(); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "clock-delta", -+ (long long)t1-t0); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-wait_runtime", -+ (long long)this_rq->wait_runtime); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-exec_clock", -+ (long long)this_rq->exec_clock); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-fair_clock", -+ (long long)this_rq->fair_clock); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-clock", -+ (long long)this_rq->clock); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-prev_clock_raw", -+ (long long)this_rq->prev_clock_raw); -+ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-clock_max_delta", -+ (long long)this_rq->clock_max_delta); -+ buffer += sprintf(buffer, "%-25s:%20u\n", "rq-clock_warps", -+ this_rq->clock_warps); -+ buffer += sprintf(buffer, "%-25s:%20u\n", "rq-clock_unstable_events", -+ this_rq->clock_unstable_events); -+ return buffer; -+} -+ -+/* -+ * Per-runqueue clock, as finegrained as the platform can give us: -+ */ -+static inline unsigned long long __rq_clock(struct rq *rq) -+{ -+ u64 now = sched_clock(); -+ u64 clock = rq->clock; -+ u64 prev_raw = rq->prev_clock_raw; -+ s64 delta = now - prev_raw; -+ -+ /* -+ * Protect against sched_clock() occasionally going backwards: -+ */ -+ if (unlikely(delta < 0)) { -+ clock++; -+ rq->clock_warps++; -+ } else { -+ if (unlikely(delta > rq->clock_max_delta)) -+ rq->clock_max_delta = delta; -+ clock += delta; -+ } -+ -+ rq->prev_clock_raw = now; -+ rq->clock = clock; -+ -+ return clock; -+} - - static inline int cpu_of(struct rq *rq) - { -@@ -279,6 +298,16 @@ static inline int cpu_of(struct rq *rq) - #endif - } - -+static inline unsigned long long rq_clock(struct rq *rq) -+{ -+ int this_cpu = smp_processor_id(); -+ -+ if (this_cpu == cpu_of(rq)) -+ return __rq_clock(rq); -+ -+ return rq->clock; -+} -+ - /* - * The domain tree (rq->sd) is protected by RCU's quiescent state transition. - * See detach_destroy_domains: synchronize_sched for details. -@@ -423,134 +452,6 @@ static inline void task_rq_unlock(struct - spin_unlock_irqrestore(&rq->lock, *flags); - } - --#ifdef CONFIG_SCHEDSTATS --/* -- * bump this up when changing the output format or the meaning of an existing -- * format, so that tools can adapt (or abort) -- */ --#define SCHEDSTAT_VERSION 14 -- --static int show_schedstat(struct seq_file *seq, void *v) --{ -- int cpu; -- -- seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION); -- seq_printf(seq, "timestamp %lu\n", jiffies); -- for_each_online_cpu(cpu) { -- struct rq *rq = cpu_rq(cpu); --#ifdef CONFIG_SMP -- struct sched_domain *sd; -- int dcnt = 0; --#endif -- -- /* runqueue-specific stats */ -- seq_printf(seq, -- "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", -- cpu, rq->yld_both_empty, -- rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt, -- rq->sched_switch, rq->sched_cnt, rq->sched_goidle, -- rq->ttwu_cnt, rq->ttwu_local, -- rq->rq_sched_info.cpu_time, -- rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt); -- -- seq_printf(seq, "\n"); -- --#ifdef CONFIG_SMP -- /* domain-specific stats */ -- preempt_disable(); -- for_each_domain(cpu, sd) { -- enum idle_type itype; -- char mask_str[NR_CPUS]; -- -- cpumask_scnprintf(mask_str, NR_CPUS, sd->span); -- seq_printf(seq, "domain%d %s", dcnt++, mask_str); -- for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES; -- itype++) { -- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu " -- "%lu", -- sd->lb_cnt[itype], -- sd->lb_balanced[itype], -- sd->lb_failed[itype], -- sd->lb_imbalance[itype], -- sd->lb_gained[itype], -- sd->lb_hot_gained[itype], -- sd->lb_nobusyq[itype], -- sd->lb_nobusyg[itype]); -- } -- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu" -- " %lu %lu %lu\n", -- sd->alb_cnt, sd->alb_failed, sd->alb_pushed, -- sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed, -- sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed, -- sd->ttwu_wake_remote, sd->ttwu_move_affine, -- sd->ttwu_move_balance); -- } -- preempt_enable(); --#endif -- } -- return 0; --} -- --static int schedstat_open(struct inode *inode, struct file *file) --{ -- unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32); -- char *buf = kmalloc(size, GFP_KERNEL); -- struct seq_file *m; -- int res; -- -- if (!buf) -- return -ENOMEM; -- res = single_open(file, show_schedstat, NULL); -- if (!res) { -- m = file->private_data; -- m->buf = buf; -- m->size = size; -- } else -- kfree(buf); -- return res; --} -- --const struct file_operations proc_schedstat_operations = { -- .open = schedstat_open, -- .read = seq_read, -- .llseek = seq_lseek, -- .release = single_release, --}; -- --/* -- * Expects runqueue lock to be held for atomicity of update -- */ --static inline void --rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) --{ -- if (rq) { -- rq->rq_sched_info.run_delay += delta_jiffies; -- rq->rq_sched_info.pcnt++; -- } --} -- --/* -- * Expects runqueue lock to be held for atomicity of update -- */ --static inline void --rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) --{ -- if (rq) -- rq->rq_sched_info.cpu_time += delta_jiffies; --} --# define schedstat_inc(rq, field) do { (rq)->field++; } while (0) --# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0) --#else /* !CONFIG_SCHEDSTATS */ --static inline void --rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) --{} --static inline void --rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) --{} --# define schedstat_inc(rq, field) do { } while (0) --# define schedstat_add(rq, field, amt) do { } while (0) --#endif -- - /* - * this_rq_lock - lock this runqueue and disable interrupts. - */ -@@ -566,178 +467,60 @@ static inline struct rq *this_rq_lock(vo - return rq; - } - --#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) --/* -- * Called when a process is dequeued from the active array and given -- * the cpu. We should note that with the exception of interactive -- * tasks, the expired queue will become the active queue after the active -- * queue is empty, without explicitly dequeuing and requeuing tasks in the -- * expired queue. (Interactive tasks may be requeued directly to the -- * active queue, thus delaying tasks in the expired queue from running; -- * see scheduler_tick()). -- * -- * This function is only called from sched_info_arrive(), rather than -- * dequeue_task(). Even though a task may be queued and dequeued multiple -- * times as it is shuffled about, we're really interested in knowing how -- * long it was from the *first* time it was queued to the time that it -- * finally hit a cpu. -- */ --static inline void sched_info_dequeued(struct task_struct *t) --{ -- t->sched_info.last_queued = 0; --} -- - /* -- * Called when a task finally hits the cpu. We can now calculate how -- * long it was waiting to run. We also note when it began so that we -- * can keep stats on how long its timeslice is. -+ * CPU frequency is/was unstable - start new by setting prev_clock_raw: - */ --static void sched_info_arrive(struct task_struct *t) -+void sched_clock_unstable_event(void) - { -- unsigned long now = jiffies, delta_jiffies = 0; -- -- if (t->sched_info.last_queued) -- delta_jiffies = now - t->sched_info.last_queued; -- sched_info_dequeued(t); -- t->sched_info.run_delay += delta_jiffies; -- t->sched_info.last_arrival = now; -- t->sched_info.pcnt++; -+ unsigned long flags; -+ struct rq *rq; - -- rq_sched_info_arrive(task_rq(t), delta_jiffies); -+ rq = task_rq_lock(current, &flags); -+ rq->prev_clock_raw = sched_clock(); -+ rq->clock_unstable_events++; -+ task_rq_unlock(rq, &flags); - } - - /* -- * Called when a process is queued into either the active or expired -- * array. The time is noted and later used to determine how long we -- * had to wait for us to reach the cpu. Since the expired queue will -- * become the active queue after active queue is empty, without dequeuing -- * and requeuing any tasks, we are interested in queuing to either. It -- * is unusual but not impossible for tasks to be dequeued and immediately -- * requeued in the same or another array: this can happen in sched_yield(), -- * set_user_nice(), and even load_balance() as it moves tasks from runqueue -- * to runqueue. -+ * resched_task - mark a task 'to be rescheduled now'. - * -- * This function is only called from enqueue_task(), but also only updates -- * the timestamp if it is already not set. It's assumed that -- * sched_info_dequeued() will clear that stamp when appropriate. -- */ --static inline void sched_info_queued(struct task_struct *t) --{ -- if (unlikely(sched_info_on())) -- if (!t->sched_info.last_queued) -- t->sched_info.last_queued = jiffies; --} -- --/* -- * Called when a process ceases being the active-running process, either -- * voluntarily or involuntarily. Now we can calculate how long we ran. -+ * On UP this means the setting of the need_resched flag, on SMP it -+ * might also involve a cross-CPU call to trigger the scheduler on -+ * the target CPU. - */ --static inline void sched_info_depart(struct task_struct *t) --{ -- unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival; -+#ifdef CONFIG_SMP - -- t->sched_info.cpu_time += delta_jiffies; -- rq_sched_info_depart(task_rq(t), delta_jiffies); --} -+#ifndef tsk_is_polling -+#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) -+#endif - --/* -- * Called when tasks are switched involuntarily due, typically, to expiring -- * their time slice. (This may also be called when switching to or from -- * the idle task.) We are only called when prev != next. -- */ --static inline void --__sched_info_switch(struct task_struct *prev, struct task_struct *next) -+static void resched_task(struct task_struct *p) - { -- struct rq *rq = task_rq(prev); -- -- /* -- * prev now departs the cpu. It's not interesting to record -- * stats about how efficient we were at scheduling the idle -- * process, however. -- */ -- if (prev != rq->idle) -- sched_info_depart(prev); -+ int cpu; - -- if (next != rq->idle) -- sched_info_arrive(next); --} --static inline void --sched_info_switch(struct task_struct *prev, struct task_struct *next) --{ -- if (unlikely(sched_info_on())) -- __sched_info_switch(prev, next); --} --#else --#define sched_info_queued(t) do { } while (0) --#define sched_info_switch(t, next) do { } while (0) --#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ -+ assert_spin_locked(&task_rq(p)->lock); - --/* -- * Adding/removing a task to/from a priority array: -- */ --static void dequeue_task(struct task_struct *p, struct prio_array *array) --{ -- array->nr_active--; -- list_del(&p->run_list); -- if (list_empty(array->queue + p->prio)) -- __clear_bit(p->prio, array->bitmap); --} -+ if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED))) -+ return; - --static void enqueue_task(struct task_struct *p, struct prio_array *array) --{ -- sched_info_queued(p); -- list_add_tail(&p->run_list, array->queue + p->prio); -- __set_bit(p->prio, array->bitmap); -- array->nr_active++; -- p->array = array; --} -+ set_tsk_thread_flag(p, TIF_NEED_RESCHED); - --/* -- * Put task to the end of the run list without the overhead of dequeue -- * followed by enqueue. -- */ --static void requeue_task(struct task_struct *p, struct prio_array *array) --{ -- list_move_tail(&p->run_list, array->queue + p->prio); --} -+ cpu = task_cpu(p); -+ if (cpu == smp_processor_id()) -+ return; - --static inline void --enqueue_task_head(struct task_struct *p, struct prio_array *array) --{ -- list_add(&p->run_list, array->queue + p->prio); -- __set_bit(p->prio, array->bitmap); -- array->nr_active++; -- p->array = array; -+ /* NEED_RESCHED must be visible before we test polling */ -+ smp_mb(); -+ if (!tsk_is_polling(p)) -+ smp_send_reschedule(cpu); - } -- --/* -- * __normal_prio - return the priority that is based on the static -- * priority but is modified by bonuses/penalties. -- * -- * We scale the actual sleep average [0 .... MAX_SLEEP_AVG] -- * into the -5 ... 0 ... +5 bonus/penalty range. -- * -- * We use 25% of the full 0...39 priority range so that: -- * -- * 1) nice +19 interactive tasks do not preempt nice 0 CPU hogs. -- * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks. -- * -- * Both properties are important to certain workloads. -- */ -- --static inline int __normal_prio(struct task_struct *p) -+#else -+static inline void resched_task(struct task_struct *p) - { -- int bonus, prio; -- -- bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; -- -- prio = p->static_prio - bonus; -- if (prio < MAX_RT_PRIO) -- prio = MAX_RT_PRIO; -- if (prio > MAX_PRIO-1) -- prio = MAX_PRIO-1; -- return prio; -+ assert_spin_locked(&task_rq(p)->lock); -+ set_tsk_need_resched(p); - } -+#endif - - /* - * To aid in avoiding the subversion of "niceness" due to uneven distribution -@@ -761,22 +544,33 @@ static inline int __normal_prio(struct t - #define RTPRIO_TO_LOAD_WEIGHT(rp) \ - (PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp)) - -+/* -+ * Nice levels are logarithmic. These are the load shifts assigned -+ * to nice levels, where a step of every 2 nice levels means a -+ * multiplicator of 2: -+ */ -+const int prio_to_load_shift[40] = { -+/* -20 */ 20, 19, 19, 18, 18, 17, 17, 16, 16, 15, -+/* -10 */ 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, -+/* 0 */ 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, -+/* 10 */ 5, 4, 4, 3, 3, 2, 2, 1, 1, 0 -+}; -+ -+static int get_load_shift(struct task_struct *p) -+{ -+ int prio = p->static_prio; -+ -+ if (rt_prio(prio) || p->policy == SCHED_BATCH) -+ return 0; -+ -+ return prio_to_load_shift[prio - MAX_RT_PRIO]; -+} -+ - static void set_load_weight(struct task_struct *p) - { -- if (has_rt_policy(p)) { --#ifdef CONFIG_SMP -- if (p == task_rq(p)->migration_thread) -- /* -- * The migration thread does the actual balancing. -- * Giving its load any weight will skew balancing -- * adversely. -- */ -- p->load_weight = 0; -- else --#endif -- p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority); -- } else -- p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio); -+ p->load_shift = get_load_shift(p); -+ p->load_weight = 1 << p->load_shift; -+ p->wait_runtime = 0; - } - - static inline void -@@ -803,6 +597,40 @@ static inline void dec_nr_running(struct - dec_raw_weighted_load(rq, p); - } - -+static void activate_task(struct rq *rq, struct task_struct *p, int wakeup); -+ -+#include "sched_stats.h" -+#include "sched_rt.c" -+#include "sched_fair.c" -+#include "sched_debug.c" -+ -+#define sched_class_highest (&rt_sched_class) -+ -+static void enqueue_task(struct rq *rq, struct task_struct *p, int wakeup) -+{ -+ u64 now = rq_clock(rq); -+ -+ sched_info_queued(p); -+ p->sched_class->enqueue_task(rq, p, wakeup, now); -+ p->on_rq = 1; -+} -+ -+static void dequeue_task(struct rq *rq, struct task_struct *p, int sleep) -+{ -+ u64 now = rq_clock(rq); -+ -+ p->sched_class->dequeue_task(rq, p, sleep, now); -+ p->on_rq = 0; -+} -+ -+/* -+ * __normal_prio - return the priority that is based on the static prio -+ */ -+static inline int __normal_prio(struct task_struct *p) -+{ -+ return p->static_prio; -+} -+ - /* - * Calculate the expected normal priority: i.e. priority - * without taking RT-inheritance into account. Might be -@@ -842,210 +670,31 @@ static int effective_prio(struct task_st - } - - /* -- * __activate_task - move a task to the runqueue. -+ * activate_task - move a task to the runqueue. - */ --static void __activate_task(struct task_struct *p, struct rq *rq) -+static void activate_task(struct rq *rq, struct task_struct *p, int wakeup) - { -- struct prio_array *target = rq->active; -- -- if (batch_task(p)) -- target = rq->expired; -- enqueue_task(p, target); -+ enqueue_task(rq, p, wakeup); - inc_nr_running(p, rq); - } - - /* -- * __activate_idle_task - move idle task to the _front_ of runqueue. -+ * activate_idle_task - move idle task to the _front_ of runqueue. - */ --static inline void __activate_idle_task(struct task_struct *p, struct rq *rq) -+static inline void activate_idle_task(struct task_struct *p, struct rq *rq) - { -- enqueue_task_head(p, rq->active); -+ enqueue_task(rq, p, 0); - inc_nr_running(p, rq); - } - - /* -- * Recalculate p->normal_prio and p->prio after having slept, -- * updating the sleep-average too: -- */ --static int recalc_task_prio(struct task_struct *p, unsigned long long now) --{ -- /* Caller must always ensure 'now >= p->timestamp' */ -- unsigned long sleep_time = now - p->timestamp; -- -- if (batch_task(p)) -- sleep_time = 0; -- -- if (likely(sleep_time > 0)) { -- /* -- * This ceiling is set to the lowest priority that would allow -- * a task to be reinserted into the active array on timeslice -- * completion. -- */ -- unsigned long ceiling = INTERACTIVE_SLEEP(p); -- -- if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) { -- /* -- * Prevents user tasks from achieving best priority -- * with one single large enough sleep. -- */ -- p->sleep_avg = ceiling; -- /* -- * Using INTERACTIVE_SLEEP() as a ceiling places a -- * nice(0) task 1ms sleep away from promotion, and -- * gives it 700ms to round-robin with no chance of -- * being demoted. This is more than generous, so -- * mark this sleep as non-interactive to prevent the -- * on-runqueue bonus logic from intervening should -- * this task not receive cpu immediately. -- */ -- p->sleep_type = SLEEP_NONINTERACTIVE; -- } else { -- /* -- * Tasks waking from uninterruptible sleep are -- * limited in their sleep_avg rise as they -- * are likely to be waiting on I/O -- */ -- if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) { -- if (p->sleep_avg >= ceiling) -- sleep_time = 0; -- else if (p->sleep_avg + sleep_time >= -- ceiling) { -- p->sleep_avg = ceiling; -- sleep_time = 0; -- } -- } -- -- /* -- * This code gives a bonus to interactive tasks. -- * -- * The boost works by updating the 'average sleep time' -- * value here, based on ->timestamp. The more time a -- * task spends sleeping, the higher the average gets - -- * and the higher the priority boost gets as well. -- */ -- p->sleep_avg += sleep_time; -- -- } -- if (p->sleep_avg > NS_MAX_SLEEP_AVG) -- p->sleep_avg = NS_MAX_SLEEP_AVG; -- } -- -- return effective_prio(p); --} -- --/* -- * activate_task - move a task to the runqueue and do priority recalculation -- * -- * Update all the scheduling statistics stuff. (sleep average -- * calculation, priority modifiers, etc.) -- */ --static void activate_task(struct task_struct *p, struct rq *rq, int local) --{ -- unsigned long long now; -- -- if (rt_task(p)) -- goto out; -- -- now = sched_clock(); --#ifdef CONFIG_SMP -- if (!local) { -- /* Compensate for drifting sched_clock */ -- struct rq *this_rq = this_rq(); -- now = (now - this_rq->most_recent_timestamp) -- + rq->most_recent_timestamp; -- } --#endif -- -- /* -- * Sleep time is in units of nanosecs, so shift by 20 to get a -- * milliseconds-range estimation of the amount of time that the task -- * spent sleeping: -- */ -- if (unlikely(prof_on == SLEEP_PROFILING)) { -- if (p->state == TASK_UNINTERRUPTIBLE) -- profile_hits(SLEEP_PROFILING, (void *)get_wchan(p), -- (now - p->timestamp) >> 20); -- } -- -- p->prio = recalc_task_prio(p, now); -- -- /* -- * This checks to make sure it's not an uninterruptible task -- * that is now waking up. -- */ -- if (p->sleep_type == SLEEP_NORMAL) { -- /* -- * Tasks which were woken up by interrupts (ie. hw events) -- * are most likely of interactive nature. So we give them -- * the credit of extending their sleep time to the period -- * of time they spend on the runqueue, waiting for execution -- * on a CPU, first time around: -- */ -- if (in_interrupt()) -- p->sleep_type = SLEEP_INTERRUPTED; -- else { -- /* -- * Normal first-time wakeups get a credit too for -- * on-runqueue time, but it will be weighted down: -- */ -- p->sleep_type = SLEEP_INTERACTIVE; -- } -- } -- p->timestamp = now; --out: -- __activate_task(p, rq); --} -- --/* - * deactivate_task - remove a task from the runqueue. - */ --static void deactivate_task(struct task_struct *p, struct rq *rq) -+static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep) - { -+ dequeue_task(rq, p, sleep); - dec_nr_running(p, rq); -- dequeue_task(p, p->array); -- p->array = NULL; --} -- --/* -- * resched_task - mark a task 'to be rescheduled now'. -- * -- * On UP this means the setting of the need_resched flag, on SMP it -- * might also involve a cross-CPU call to trigger the scheduler on -- * the target CPU. -- */ --#ifdef CONFIG_SMP -- --#ifndef tsk_is_polling --#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) --#endif -- --static void resched_task(struct task_struct *p) --{ -- int cpu; -- -- assert_spin_locked(&task_rq(p)->lock); -- -- if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED))) -- return; -- -- set_tsk_thread_flag(p, TIF_NEED_RESCHED); -- -- cpu = task_cpu(p); -- if (cpu == smp_processor_id()) -- return; -- -- /* NEED_RESCHED must be visible before we test polling */ -- smp_mb(); -- if (!tsk_is_polling(p)) -- smp_send_reschedule(cpu); --} --#else --static inline void resched_task(struct task_struct *p) --{ -- assert_spin_locked(&task_rq(p)->lock); -- set_tsk_need_resched(p); - } --#endif - - /** - * task_curr - is this task currently executing on a CPU? -@@ -1085,7 +734,7 @@ migrate_task(struct task_struct *p, int - * If the task is not on a runqueue (and not running), then - * it is sufficient to simply update the task's cpu field. - */ -- if (!p->array && !task_running(rq, p)) { -+ if (!p->on_rq && !task_running(rq, p)) { - set_task_cpu(p, dest_cpu); - return 0; - } -@@ -1116,7 +765,7 @@ void wait_task_inactive(struct task_stru - repeat: - rq = task_rq_lock(p, &flags); - /* Must be off runqueue entirely, not preempted. */ -- if (unlikely(p->array || task_running(rq, p))) { -+ if (unlikely(p->on_rq || task_running(rq, p))) { - /* If it's preempted, we yield. It could be a while. */ - preempted = !task_running(rq, p); - task_rq_unlock(rq, &flags); -@@ -1292,9 +941,9 @@ static int sched_balance_self(int cpu, i - struct sched_domain *tmp, *sd = NULL; - - for_each_domain(cpu, tmp) { -- /* -- * If power savings logic is enabled for a domain, stop there. -- */ -+ /* -+ * If power savings logic is enabled for a domain, stop there. -+ */ - if (tmp->flags & SD_POWERSAVINGS_BALANCE) - break; - if (tmp->flags & flag) -@@ -1412,7 +1061,7 @@ static int try_to_wake_up(struct task_st - if (!(old_state & state)) - goto out; - -- if (p->array) -+ if (p->on_rq) - goto out_running; - - cpu = task_cpu(p); -@@ -1505,7 +1154,7 @@ out_set_cpu: - old_state = p->state; - if (!(old_state & state)) - goto out; -- if (p->array) -+ if (p->on_rq) - goto out_running; - - this_cpu = smp_processor_id(); -@@ -1514,25 +1163,10 @@ out_set_cpu: - - out_activate: - #endif /* CONFIG_SMP */ -- if (old_state == TASK_UNINTERRUPTIBLE) { -+ if (old_state == TASK_UNINTERRUPTIBLE) - rq->nr_uninterruptible--; -- /* -- * Tasks on involuntary sleep don't earn -- * sleep_avg beyond just interactive state. -- */ -- p->sleep_type = SLEEP_NONINTERACTIVE; -- } else - -- /* -- * Tasks that have marked their sleep as noninteractive get -- * woken up with their sleep average not weighted in an -- * interactive way. -- */ -- if (old_state & TASK_NONINTERACTIVE) -- p->sleep_type = SLEEP_NONINTERACTIVE; -- -- -- activate_task(p, rq, cpu == this_cpu); -+ activate_task(rq, p, 1); - /* - * Sync wakeups (i.e. those types of wakeups where the waker - * has indicated that it will leave the CPU in short order) -@@ -1541,10 +1175,8 @@ out_activate: - * the waker guarantees that the freshly woken up task is going - * to be considered on this CPU.) - */ -- if (!sync || cpu != this_cpu) { -- if (TASK_PREEMPTS_CURR(p, rq)) -- resched_task(rq->curr); -- } -+ if (!sync || cpu != this_cpu) -+ check_preempt_curr(rq, p); - success = 1; - - out_running: -@@ -1567,19 +1199,35 @@ int fastcall wake_up_state(struct task_s - return try_to_wake_up(p, state, 0); - } - --static void task_running_tick(struct rq *rq, struct task_struct *p); -+/* -+ * The task was running during this tick - call the class tick -+ * (to update the time slice counter and other statistics, etc.): -+ */ -+static void task_running_tick(struct rq *rq, struct task_struct *p) -+{ -+ spin_lock(&rq->lock); -+ p->sched_class->task_tick(rq, p); -+ spin_unlock(&rq->lock); -+} -+ - /* - * Perform scheduler related setup for a newly forked process p. - * p is forked by current. -+ * -+ * __sched_fork() is basic setup used by init_idle() too: - */ --void fastcall sched_fork(struct task_struct *p, int clone_flags) -+static void __sched_fork(struct task_struct *p) - { -- int cpu = get_cpu(); -+ p->wait_start_fair = p->wait_start = p->exec_start = p->last_ran = 0; -+ p->sum_exec_runtime = p->wait_runtime = 0; -+ p->sum_wait_runtime = 0; -+ p->sleep_start = p->block_start = 0; -+ p->sleep_max = p->block_max = p->exec_max = p->wait_max = 0; - --#ifdef CONFIG_SMP -- cpu = sched_balance_self(cpu, SD_BALANCE_FORK); --#endif -- set_task_cpu(p, cpu); -+ INIT_LIST_HEAD(&p->run_list); -+ p->on_rq = 0; -+ p->nr_switches = 0; -+ p->min_wait_runtime = 0; - - /* - * We mark the process as running here, but have not actually -@@ -1588,16 +1236,29 @@ void fastcall sched_fork(struct task_str - * event cannot wake it up and insert it on the runqueue either. - */ - p->state = TASK_RUNNING; -+} -+ -+/* -+ * fork()/clone()-time setup: -+ */ -+void sched_fork(struct task_struct *p, int clone_flags) -+{ -+ int cpu = get_cpu(); -+ -+ __sched_fork(p); -+ -+#ifdef CONFIG_SMP -+ cpu = sched_balance_self(cpu, SD_BALANCE_FORK); -+#endif -+ set_task_cpu(p, cpu); - - /* - * Make sure we do not leak PI boosting priority to the child: - */ - p->prio = current->normal_prio; - -- INIT_LIST_HEAD(&p->run_list); -- p->array = NULL; - #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) -- if (unlikely(sched_info_on())) -+ if (likely(sched_info_on())) - memset(&p->sched_info, 0, sizeof(p->sched_info)); - #endif - #if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW) -@@ -1607,34 +1268,16 @@ void fastcall sched_fork(struct task_str - /* Want to start with kernel preemption disabled. */ - task_thread_info(p)->preempt_count = 1; - #endif -- /* -- * Share the timeslice between parent and child, thus the -- * total amount of pending timeslices in the system doesn't change, -- * resulting in more scheduling fairness. -- */ -- local_irq_disable(); -- p->time_slice = (current->time_slice + 1) >> 1; -- /* -- * The remainder of the first timeslice might be recovered by -- * the parent if the child exits early enough. -- */ -- p->first_time_slice = 1; -- current->time_slice >>= 1; -- p->timestamp = sched_clock(); -- if (unlikely(!current->time_slice)) { -- /* -- * This case is rare, it happens when the parent has only -- * a single jiffy left from its timeslice. Taking the -- * runqueue lock is not a problem. -- */ -- current->time_slice = 1; -- task_running_tick(cpu_rq(cpu), current); -- } -- local_irq_enable(); - put_cpu(); - } - - /* -+ * After fork, child runs first. (default) If set to 0 then -+ * parent will (try to) run first. -+ */ -+unsigned int __read_mostly sysctl_sched_child_runs_first = 1; -+ -+/* - * wake_up_new_task - wake up a newly created task for the first time. - * - * This function will do some initial scheduler statistics housekeeping -@@ -1643,107 +1286,27 @@ void fastcall sched_fork(struct task_str - */ - void fastcall wake_up_new_task(struct task_struct *p, unsigned long clone_flags) - { -- struct rq *rq, *this_rq; - unsigned long flags; -- int this_cpu, cpu; -+ struct rq *rq; -+ int this_cpu; - - rq = task_rq_lock(p, &flags); - BUG_ON(p->state != TASK_RUNNING); -- this_cpu = smp_processor_id(); -- cpu = task_cpu(p); -- -- /* -- * We decrease the sleep average of forking parents -- * and children as well, to keep max-interactive tasks -- * from forking tasks that are max-interactive. The parent -- * (current) is done further down, under its lock. -- */ -- p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) * -- CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); -+ this_cpu = smp_processor_id(); /* parent's CPU */ - - p->prio = effective_prio(p); - -- if (likely(cpu == this_cpu)) { -- if (!(clone_flags & CLONE_VM)) { -- /* -- * The VM isn't cloned, so we're in a good position to -- * do child-runs-first in anticipation of an exec. This -- * usually avoids a lot of COW overhead. -- */ -- if (unlikely(!current->array)) -- __activate_task(p, rq); -- else { -- p->prio = current->prio; -- p->normal_prio = current->normal_prio; -- list_add_tail(&p->run_list, ¤t->run_list); -- p->array = current->array; -- p->array->nr_active++; -- inc_nr_running(p, rq); -- } -- set_need_resched(); -- } else -- /* Run child last */ -- __activate_task(p, rq); -- /* -- * We skip the following code due to cpu == this_cpu -- * -- * task_rq_unlock(rq, &flags); -- * this_rq = task_rq_lock(current, &flags); -- */ -- this_rq = rq; -+ if (!sysctl_sched_child_runs_first || (clone_flags & CLONE_VM) || -+ task_cpu(p) != this_cpu || !current->on_rq) { -+ activate_task(rq, p, 0); - } else { -- this_rq = cpu_rq(this_cpu); -- -- /* -- * Not the local CPU - must adjust timestamp. This should -- * get optimised away in the !CONFIG_SMP case. -- */ -- p->timestamp = (p->timestamp - this_rq->most_recent_timestamp) -- + rq->most_recent_timestamp; -- __activate_task(p, rq); -- if (TASK_PREEMPTS_CURR(p, rq)) -- resched_task(rq->curr); -- - /* -- * Parent and child are on different CPUs, now get the -- * parent runqueue to update the parent's ->sleep_avg: -+ * Let the scheduling class do new task startup -+ * management (if any): - */ -- task_rq_unlock(rq, &flags); -- this_rq = task_rq_lock(current, &flags); -+ p->sched_class->task_new(rq, p); - } -- current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) * -- PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); -- task_rq_unlock(this_rq, &flags); --} -- --/* -- * Potentially available exiting-child timeslices are -- * retrieved here - this way the parent does not get -- * penalized for creating too many threads. -- * -- * (this cannot be used to 'generate' timeslices -- * artificially, because any timeslice recovered here -- * was given away by the parent in the first place.) -- */ --void fastcall sched_exit(struct task_struct *p) --{ -- unsigned long flags; -- struct rq *rq; -- -- /* -- * If the child was a (relative-) CPU hog then decrease -- * the sleep_avg of the parent as well. -- */ -- rq = task_rq_lock(p->parent, &flags); -- if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) { -- p->parent->time_slice += p->time_slice; -- if (unlikely(p->parent->time_slice > task_timeslice(p))) -- p->parent->time_slice = task_timeslice(p); -- } -- if (p->sleep_avg < p->parent->sleep_avg) -- p->parent->sleep_avg = p->parent->sleep_avg / -- (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg / -- (EXIT_WEIGHT + 1); -+ check_preempt_curr(rq, p); - task_rq_unlock(rq, &flags); - } - -@@ -1941,17 +1504,56 @@ unsigned long nr_active(void) - return running + uninterruptible; - } - --#ifdef CONFIG_SMP -- --/* -- * Is this task likely cache-hot: -- */ --static inline int --task_hot(struct task_struct *p, unsigned long long now, struct sched_domain *sd) -+static void update_load_fair(struct rq *this_rq) - { -- return (long long)(now - p->last_ran) < (long long)sd->cache_hot_time; -+ unsigned long this_load, fair_delta, exec_delta, idle_delta; -+ unsigned int i, scale; -+ s64 fair_delta64, exec_delta64; -+ unsigned long tmp; -+ u64 tmp64; -+ -+ this_rq->nr_load_updates++; -+ -+ fair_delta64 = this_rq->fair_clock - this_rq->prev_fair_clock + 1; -+ this_rq->prev_fair_clock = this_rq->fair_clock; -+ WARN_ON_ONCE(fair_delta64 <= 0); -+ -+ exec_delta64 = this_rq->exec_clock - this_rq->prev_exec_clock + 1; -+ this_rq->prev_exec_clock = this_rq->exec_clock; -+ WARN_ON_ONCE(exec_delta64 <= 0); -+ -+ if (fair_delta64 > (s64)LONG_MAX) -+ fair_delta64 = (s64)LONG_MAX; -+ fair_delta = (unsigned long)fair_delta64; -+ -+ if (exec_delta64 > (s64)LONG_MAX) -+ exec_delta64 = (s64)LONG_MAX; -+ exec_delta = (unsigned long)exec_delta64; -+ if (exec_delta > TICK_NSEC) -+ exec_delta = TICK_NSEC; -+ -+ idle_delta = TICK_NSEC - exec_delta; -+ -+ tmp = (SCHED_LOAD_SCALE * exec_delta) / fair_delta; -+ tmp64 = (u64)tmp * (u64)exec_delta; -+ do_div(tmp64, TICK_NSEC); -+ this_load = (unsigned long)tmp64; -+ -+ /* Update our load: */ -+ for (i = 0, scale = 1; i < CPU_LOAD_IDX_MAX; i++, scale += scale) { -+ unsigned long old_load, new_load; -+ -+ /* scale is effectively 1 << i now, and >> i divides by scale */ -+ -+ old_load = this_rq->cpu_load[i]; -+ new_load = this_load; -+ -+ this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i; -+ } - } - -+#ifdef CONFIG_SMP -+ - /* - * double_rq_lock - safely lock two runqueues - * -@@ -2068,23 +1670,17 @@ void sched_exec(void) - * pull_task - move a task from a remote runqueue to the local runqueue. - * Both runqueues must be locked. - */ --static void pull_task(struct rq *src_rq, struct prio_array *src_array, -- struct task_struct *p, struct rq *this_rq, -- struct prio_array *this_array, int this_cpu) -+static void pull_task(struct rq *src_rq, struct task_struct *p, -+ struct rq *this_rq, int this_cpu) - { -- dequeue_task(p, src_array); -- dec_nr_running(p, src_rq); -+ deactivate_task(src_rq, p, 0); - set_task_cpu(p, this_cpu); -- inc_nr_running(p, this_rq); -- enqueue_task(p, this_array); -- p->timestamp = (p->timestamp - src_rq->most_recent_timestamp) -- + this_rq->most_recent_timestamp; -+ activate_task(this_rq, p, 0); - /* - * Note that idle threads have a prio of MAX_PRIO, for this test - * to be always true for them. - */ -- if (TASK_PREEMPTS_CURR(p, this_rq)) -- resched_task(this_rq->curr); -+ check_preempt_curr(this_rq, p); - } - - /* -@@ -2109,25 +1705,59 @@ int can_migrate_task(struct task_struct - return 0; - - /* -- * Aggressive migration if: -- * 1) task is cache cold, or -- * 2) too many balance attempts have failed. -+ * Aggressive migration if too many balance attempts have failed: - */ -- -- if (sd->nr_balance_failed > sd->cache_nice_tries) { --#ifdef CONFIG_SCHEDSTATS -- if (task_hot(p, rq->most_recent_timestamp, sd)) -- schedstat_inc(sd, lb_hot_gained[idle]); --#endif -+ if (sd->nr_balance_failed > sd->cache_nice_tries) - return 1; -- } - -- if (task_hot(p, rq->most_recent_timestamp, sd)) -- return 0; - return 1; - } - --#define rq_best_prio(rq) min((rq)->curr->prio, (rq)->best_expired_prio) -+/* -+ * Load-balancing iterator: iterate through the hieararchy of scheduling -+ * classes, starting with the highest-prio one: -+ */ -+ -+struct task_struct * load_balance_start(struct rq *rq) -+{ -+ struct sched_class *class = sched_class_highest; -+ struct task_struct *p; -+ -+ do { -+ p = class->load_balance_start(rq); -+ if (p) { -+ rq->load_balance_class = class; -+ return p; -+ } -+ class = class->next; -+ } while (class); -+ -+ return NULL; -+} -+ -+struct task_struct * load_balance_next(struct rq *rq) -+{ -+ struct sched_class *class = rq->load_balance_class; -+ struct task_struct *p; -+ -+ p = class->load_balance_next(rq); -+ if (p) -+ return p; -+ /* -+ * Pick up the next class (if any) and attempt to start -+ * the iterator there: -+ */ -+ while ((class = class->next)) { -+ p = class->load_balance_start(rq); -+ if (p) { -+ rq->load_balance_class = class; -+ return p; -+ } -+ } -+ return NULL; -+} -+ -+#define rq_best_prio(rq) (rq)->curr->prio - - /* - * move_tasks tries to move up to max_nr_move tasks and max_load_move weighted -@@ -2141,11 +1771,9 @@ static int move_tasks(struct rq *this_rq - struct sched_domain *sd, enum idle_type idle, - int *all_pinned) - { -- int idx, pulled = 0, pinned = 0, this_best_prio, best_prio, -+ int pulled = 0, pinned = 0, this_best_prio, best_prio, - best_prio_seen, skip_for_load; -- struct prio_array *array, *dst_array; -- struct list_head *head, *curr; -- struct task_struct *tmp; -+ struct task_struct *p; - long rem_load_move; - - if (max_nr_move == 0 || max_load_move == 0) -@@ -2165,76 +1793,41 @@ static int move_tasks(struct rq *this_rq - best_prio_seen = best_prio == busiest->curr->prio; - - /* -- * We first consider expired tasks. Those will likely not be -- * executed in the near future, and they are most likely to -- * be cache-cold, thus switching CPUs has the least effect -- * on them. -- */ -- if (busiest->expired->nr_active) { -- array = busiest->expired; -- dst_array = this_rq->expired; -- } else { -- array = busiest->active; -- dst_array = this_rq->active; -- } -- --new_array: -- /* Start searching at priority 0: */ -- idx = 0; --skip_bitmap: -- if (!idx) -- idx = sched_find_first_bit(array->bitmap); -- else -- idx = find_next_bit(array->bitmap, MAX_PRIO, idx); -- if (idx >= MAX_PRIO) { -- if (array == busiest->expired && busiest->active->nr_active) { -- array = busiest->active; -- dst_array = this_rq->active; -- goto new_array; -- } -+ * Start the load-balancing iterator: -+ */ -+ p = load_balance_start(busiest); -+next: -+ if (!p) - goto out; -- } -- -- head = array->queue + idx; -- curr = head->prev; --skip_queue: -- tmp = list_entry(curr, struct task_struct, run_list); -- -- curr = curr->prev; -- - /* - * To help distribute high priority tasks accross CPUs we don't - * skip a task if it will be the highest priority task (i.e. smallest - * prio value) on its new queue regardless of its load weight - */ -- skip_for_load = tmp->load_weight > rem_load_move; -- if (skip_for_load && idx < this_best_prio) -- skip_for_load = !best_prio_seen && idx == best_prio; -+ skip_for_load = p->load_weight > rem_load_move; -+ if (skip_for_load && p->prio < this_best_prio) -+ skip_for_load = !best_prio_seen && p->prio == best_prio; - if (skip_for_load || -- !can_migrate_task(tmp, busiest, this_cpu, sd, idle, &pinned)) { -+ !can_migrate_task(p, busiest, this_cpu, sd, idle, &pinned)) { - -- best_prio_seen |= idx == best_prio; -- if (curr != head) -- goto skip_queue; -- idx++; -- goto skip_bitmap; -+ best_prio_seen |= p->prio == best_prio; -+ p = load_balance_next(busiest); -+ goto next; - } - -- pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu); -+ pull_task(busiest, p, this_rq, this_cpu); - pulled++; -- rem_load_move -= tmp->load_weight; -+ rem_load_move -= p->load_weight; - - /* - * We only want to steal up to the prescribed number of tasks - * and the prescribed amount of weighted load. - */ - if (pulled < max_nr_move && rem_load_move > 0) { -- if (idx < this_best_prio) -- this_best_prio = idx; -- if (curr != head) -- goto skip_queue; -- idx++; -- goto skip_bitmap; -+ if (p->prio < this_best_prio) -+ this_best_prio = p->prio; -+ p = load_balance_next(busiest); -+ goto next; - } - out: - /* -@@ -2360,8 +1953,8 @@ find_busiest_group(struct sched_domain * - * Busy processors will not participate in power savings - * balance. - */ -- if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE)) -- goto group_next; -+ if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE)) -+ goto group_next; - - /* - * If the local group is idle or completely loaded -@@ -2371,42 +1964,42 @@ find_busiest_group(struct sched_domain * - !this_nr_running)) - power_savings_balance = 0; - -- /* -+ /* - * If a group is already running at full capacity or idle, - * don't include that group in power savings calculations -- */ -- if (!power_savings_balance || sum_nr_running >= group_capacity -+ */ -+ if (!power_savings_balance || sum_nr_running >= group_capacity - || !sum_nr_running) -- goto group_next; -+ goto group_next; - -- /* -+ /* - * Calculate the group which has the least non-idle load. -- * This is the group from where we need to pick up the load -- * for saving power -- */ -- if ((sum_nr_running < min_nr_running) || -- (sum_nr_running == min_nr_running && -+ * This is the group from where we need to pick up the load -+ * for saving power -+ */ -+ if ((sum_nr_running < min_nr_running) || -+ (sum_nr_running == min_nr_running && - first_cpu(group->cpumask) < - first_cpu(group_min->cpumask))) { -- group_min = group; -- min_nr_running = sum_nr_running; -+ group_min = group; -+ min_nr_running = sum_nr_running; - min_load_per_task = sum_weighted_load / - sum_nr_running; -- } -+ } - -- /* -+ /* - * Calculate the group which is almost near its -- * capacity but still has some space to pick up some load -- * from other group and save more power -- */ -- if (sum_nr_running <= group_capacity - 1) { -- if (sum_nr_running > leader_nr_running || -- (sum_nr_running == leader_nr_running && -- first_cpu(group->cpumask) > -- first_cpu(group_leader->cpumask))) { -- group_leader = group; -- leader_nr_running = sum_nr_running; -- } -+ * capacity but still has some space to pick up some load -+ * from other group and save more power -+ */ -+ if (sum_nr_running <= group_capacity - 1) { -+ if (sum_nr_running > leader_nr_running || -+ (sum_nr_running == leader_nr_running && -+ first_cpu(group->cpumask) > -+ first_cpu(group_leader->cpumask))) { -+ group_leader = group; -+ leader_nr_running = sum_nr_running; -+ } - } - group_next: - #endif -@@ -2461,7 +2054,7 @@ group_next: - * a think about bumping its value to force at least one task to be - * moved - */ -- if (*imbalance < busiest_load_per_task) { -+ if (*imbalance + SCHED_LOAD_SCALE_FUZZ < busiest_load_per_task) { - unsigned long tmp, pwr_now, pwr_move; - unsigned int imbn; - -@@ -2475,7 +2068,8 @@ small_imbalance: - } else - this_load_per_task = SCHED_LOAD_SCALE; - -- if (max_load - this_load >= busiest_load_per_task * imbn) { -+ if (max_load - this_load + SCHED_LOAD_SCALE_FUZZ >= -+ busiest_load_per_task * imbn) { - *imbalance = busiest_load_per_task; - return busiest; - } -@@ -2884,30 +2478,6 @@ static void active_load_balance(struct r - spin_unlock(&target_rq->lock); - } - --static void update_load(struct rq *this_rq) --{ -- unsigned long this_load; -- int i, scale; -- -- this_load = this_rq->raw_weighted_load; -- -- /* Update our load: */ -- for (i = 0, scale = 1; i < 3; i++, scale <<= 1) { -- unsigned long old_load, new_load; -- -- old_load = this_rq->cpu_load[i]; -- new_load = this_load; -- /* -- * Round up the averaging division if load is increasing. This -- * prevents us from getting stuck on 9 if the load is 10, for -- * example. -- */ -- if (new_load > old_load) -- new_load += scale-1; -- this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) / scale; -- } --} -- - /* - * run_rebalance_domains is triggered when needed from the scheduler tick. - * -@@ -2987,76 +2557,27 @@ static inline void idle_balance(int cpu, - } - #endif - --static inline void wake_priority_sleeper(struct rq *rq) --{ --#ifdef CONFIG_SCHED_SMT -- if (!rq->nr_running) -- return; -- -- spin_lock(&rq->lock); -- /* -- * If an SMT sibling task has been put to sleep for priority -- * reasons reschedule the idle task to see if it can now run. -- */ -- if (rq->nr_running) -- resched_task(rq->idle); -- spin_unlock(&rq->lock); --#endif --} -- - DEFINE_PER_CPU(struct kernel_stat, kstat); - - EXPORT_PER_CPU_SYMBOL(kstat); - - /* -- * This is called on clock ticks and on context switches. -- * Bank in p->sched_time the ns elapsed since the last tick or switch. -- */ --static inline void --update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now) --{ -- p->sched_time += now - p->last_ran; -- p->last_ran = rq->most_recent_timestamp = now; --} -- --/* -- * Return current->sched_time plus any more ns on the sched_clock -+ * Return current->sum_exec_runtime plus any more ns on the sched_clock - * that have not yet been banked. - */ --unsigned long long current_sched_time(const struct task_struct *p) -+unsigned long long current_sched_runtime(const struct task_struct *p) - { - unsigned long long ns; - unsigned long flags; - - local_irq_save(flags); -- ns = p->sched_time + sched_clock() - p->last_ran; -+ ns = p->sum_exec_runtime + sched_clock() - p->last_ran; - local_irq_restore(flags); - - return ns; - } - - /* -- * We place interactive tasks back into the active array, if possible. -- * -- * To guarantee that this does not starve expired tasks we ignore the -- * interactivity of a task if the first expired task had to wait more -- * than a 'reasonable' amount of time. This deadline timeout is -- * load-dependent, as the frequency of array switched decreases with -- * increasing number of running tasks. We also ignore the interactivity -- * if a better static_prio task has expired: -- */ --static inline int expired_starving(struct rq *rq) --{ -- if (rq->curr->static_prio > rq->best_expired_prio) -- return 1; -- if (!STARVATION_LIMIT || !rq->expired_timestamp) -- return 0; -- if (jiffies - rq->expired_timestamp > STARVATION_LIMIT * rq->nr_running) -- return 1; -- return 0; --} -- --/* - * Account user cpu time to a process. - * @p: the process that the cpu time gets accounted to - * @hardirq_offset: the offset to subtract from hardirq_count() -@@ -3129,81 +2650,6 @@ void account_steal_time(struct task_stru - cpustat->steal = cputime64_add(cpustat->steal, tmp); - } - --static void task_running_tick(struct rq *rq, struct task_struct *p) --{ -- if (p->array != rq->active) { -- /* Task has expired but was not scheduled yet */ -- set_tsk_need_resched(p); -- return; -- } -- spin_lock(&rq->lock); -- /* -- * The task was running during this tick - update the -- * time slice counter. Note: we do not update a thread's -- * priority until it either goes to sleep or uses up its -- * timeslice. This makes it possible for interactive tasks -- * to use up their timeslices at their highest priority levels. -- */ -- if (rt_task(p)) { -- /* -- * RR tasks need a special form of timeslice management. -- * FIFO tasks have no timeslices. -- */ -- if ((p->policy == SCHED_RR) && !--p->time_slice) { -- p->time_slice = task_timeslice(p); -- p->first_time_slice = 0; -- set_tsk_need_resched(p); -- -- /* put it at the end of the queue: */ -- requeue_task(p, rq->active); -- } -- goto out_unlock; -- } -- if (!--p->time_slice) { -- dequeue_task(p, rq->active); -- set_tsk_need_resched(p); -- p->prio = effective_prio(p); -- p->time_slice = task_timeslice(p); -- p->first_time_slice = 0; -- -- if (!rq->expired_timestamp) -- rq->expired_timestamp = jiffies; -- if (!TASK_INTERACTIVE(p) || expired_starving(rq)) { -- enqueue_task(p, rq->expired); -- if (p->static_prio < rq->best_expired_prio) -- rq->best_expired_prio = p->static_prio; -- } else -- enqueue_task(p, rq->active); -- } else { -- /* -- * Prevent a too long timeslice allowing a task to monopolize -- * the CPU. We do this by splitting up the timeslice into -- * smaller pieces. -- * -- * Note: this does not mean the task's timeslices expire or -- * get lost in any way, they just might be preempted by -- * another task of equal priority. (one with higher -- * priority would have preempted this task already.) We -- * requeue this task to the end of the list on this priority -- * level, which is in essence a round-robin of tasks with -- * equal priority. -- * -- * This only applies to tasks in the interactive -- * delta range with at least TIMESLICE_GRANULARITY to requeue. -- */ -- if (TASK_INTERACTIVE(p) && !((task_timeslice(p) - -- p->time_slice) % TIMESLICE_GRANULARITY(p)) && -- (p->time_slice >= TIMESLICE_GRANULARITY(p)) && -- (p->array == rq->active)) { -- -- requeue_task(p, rq->active); -- set_tsk_need_resched(p); -- } -- } --out_unlock: -- spin_unlock(&rq->lock); --} -- - /* - * This function gets called by the timer code, with HZ frequency. - * We call it with interrupts disabled. -@@ -3213,155 +2659,19 @@ out_unlock: - */ - void scheduler_tick(void) - { -- unsigned long long now = sched_clock(); - struct task_struct *p = current; - int cpu = smp_processor_id(); - struct rq *rq = cpu_rq(cpu); - -- update_cpu_clock(p, rq, now); -- -- if (p == rq->idle) -- /* Task on the idle queue */ -- wake_priority_sleeper(rq); -- else -+ if (p != rq->idle) - task_running_tick(rq, p); -+ update_load_fair(rq); - #ifdef CONFIG_SMP -- update_load(rq); - if (time_after_eq(jiffies, rq->next_balance)) - raise_softirq(SCHED_SOFTIRQ); - #endif - } - --#ifdef CONFIG_SCHED_SMT --static inline void wakeup_busy_runqueue(struct rq *rq) --{ -- /* If an SMT runqueue is sleeping due to priority reasons wake it up */ -- if (rq->curr == rq->idle && rq->nr_running) -- resched_task(rq->idle); --} -- --/* -- * Called with interrupt disabled and this_rq's runqueue locked. -- */ --static void wake_sleeping_dependent(int this_cpu) --{ -- struct sched_domain *tmp, *sd = NULL; -- int i; -- -- for_each_domain(this_cpu, tmp) { -- if (tmp->flags & SD_SHARE_CPUPOWER) { -- sd = tmp; -- break; -- } -- } -- -- if (!sd) -- return; -- -- for_each_cpu_mask(i, sd->span) { -- struct rq *smt_rq = cpu_rq(i); -- -- if (i == this_cpu) -- continue; -- if (unlikely(!spin_trylock(&smt_rq->lock))) -- continue; -- -- wakeup_busy_runqueue(smt_rq); -- spin_unlock(&smt_rq->lock); -- } --} -- --/* -- * number of 'lost' timeslices this task wont be able to fully -- * utilize, if another task runs on a sibling. This models the -- * slowdown effect of other tasks running on siblings: -- */ --static inline unsigned long --smt_slice(struct task_struct *p, struct sched_domain *sd) --{ -- return p->time_slice * (100 - sd->per_cpu_gain) / 100; --} -- --/* -- * To minimise lock contention and not have to drop this_rq's runlock we only -- * trylock the sibling runqueues and bypass those runqueues if we fail to -- * acquire their lock. As we only trylock the normal locking order does not -- * need to be obeyed. -- */ --static int --dependent_sleeper(int this_cpu, struct rq *this_rq, struct task_struct *p) --{ -- struct sched_domain *tmp, *sd = NULL; -- int ret = 0, i; -- -- /* kernel/rt threads do not participate in dependent sleeping */ -- if (!p->mm || rt_task(p)) -- return 0; -- -- for_each_domain(this_cpu, tmp) { -- if (tmp->flags & SD_SHARE_CPUPOWER) { -- sd = tmp; -- break; -- } -- } -- -- if (!sd) -- return 0; -- -- for_each_cpu_mask(i, sd->span) { -- struct task_struct *smt_curr; -- struct rq *smt_rq; -- -- if (i == this_cpu) -- continue; -- -- smt_rq = cpu_rq(i); -- if (unlikely(!spin_trylock(&smt_rq->lock))) -- continue; -- -- smt_curr = smt_rq->curr; -- -- if (!smt_curr->mm) -- goto unlock; -- -- /* -- * If a user task with lower static priority than the -- * running task on the SMT sibling is trying to schedule, -- * delay it till there is proportionately less timeslice -- * left of the sibling task to prevent a lower priority -- * task from using an unfair proportion of the -- * physical cpu's resources. -ck -- */ -- if (rt_task(smt_curr)) { -- /* -- * With real time tasks we run non-rt tasks only -- * per_cpu_gain% of the time. -- */ -- if ((jiffies % DEF_TIMESLICE) > -- (sd->per_cpu_gain * DEF_TIMESLICE / 100)) -- ret = 1; -- } else { -- if (smt_curr->static_prio < p->static_prio && -- !TASK_PREEMPTS_CURR(p, smt_rq) && -- smt_slice(smt_curr, sd) > task_timeslice(p)) -- ret = 1; -- } --unlock: -- spin_unlock(&smt_rq->lock); -- } -- return ret; --} --#else --static inline void wake_sleeping_dependent(int this_cpu) --{ --} --static inline int --dependent_sleeper(int this_cpu, struct rq *this_rq, struct task_struct *p) --{ -- return 0; --} --#endif -- - #if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT) - - void fastcall add_preempt_count(int val) -@@ -3400,49 +2710,27 @@ EXPORT_SYMBOL(sub_preempt_count); - - #endif - --static inline int interactive_sleep(enum sleep_type sleep_type) --{ -- return (sleep_type == SLEEP_INTERACTIVE || -- sleep_type == SLEEP_INTERRUPTED); --} -- - /* -- * schedule() is the main scheduler function. -+ * Various schedule()-time debugging checks and statistics: - */ --asmlinkage void __sched schedule(void) -+static inline void schedule_debug(struct rq *rq, struct task_struct *prev) - { -- struct task_struct *prev, *next; -- struct prio_array *array; -- struct list_head *queue; -- unsigned long long now; -- unsigned long run_time; -- int cpu, idx, new_prio; -- long *switch_count; -- struct rq *rq; -- - /* - * Test if we are atomic. Since do_exit() needs to call into - * schedule() atomically, we ignore that path for now. - * Otherwise, whine if we are scheduling when we should not be. - */ -- if (unlikely(in_atomic() && !current->exit_state)) { -+ if (unlikely(in_atomic_preempt_off() && !prev->exit_state)) { - printk(KERN_ERR "BUG: scheduling while atomic: " - "%s/0x%08x/%d\n", -- current->comm, preempt_count(), current->pid); -- debug_show_held_locks(current); -+ prev->comm, preempt_count(), prev->pid); -+ debug_show_held_locks(prev); - if (irqs_disabled()) -- print_irqtrace_events(current); -+ print_irqtrace_events(prev); - dump_stack(); - } - profile_hit(SCHED_PROFILING, __builtin_return_address(0)); - --need_resched: -- preempt_disable(); -- prev = current; -- release_kernel_lock(prev); --need_resched_nonpreemptible: -- rq = this_rq(); -- - /* - * The idle thread is not allowed to schedule! - * Remove this check after it has been exercised a bit. -@@ -3453,19 +2741,45 @@ need_resched_nonpreemptible: - } - - schedstat_inc(rq, sched_cnt); -- now = sched_clock(); -- if (likely((long long)(now - prev->timestamp) < NS_MAX_SLEEP_AVG)) { -- run_time = now - prev->timestamp; -- if (unlikely((long long)(now - prev->timestamp) < 0)) -- run_time = 0; -- } else -- run_time = NS_MAX_SLEEP_AVG; -+} - -- /* -- * Tasks charged proportionately less run_time at high sleep_avg to -- * delay them losing their interactive status -- */ -- run_time /= (CURRENT_BONUS(prev) ? : 1); -+static inline struct task_struct * -+pick_next_task(struct rq *rq, struct task_struct *prev) -+{ -+ struct sched_class *class = sched_class_highest; -+ u64 now = __rq_clock(rq); -+ struct task_struct *p; -+ -+ prev->sched_class->put_prev_task(rq, prev, now); -+ -+ do { -+ p = class->pick_next_task(rq, now); -+ if (p) -+ return p; -+ class = class->next; -+ } while (class); -+ -+ return NULL; -+} -+ -+/* -+ * schedule() is the main scheduler function. -+ */ -+asmlinkage void __sched schedule(void) -+{ -+ struct task_struct *prev, *next; -+ long *switch_count; -+ struct rq *rq; -+ int cpu; -+ -+need_resched: -+ preempt_disable(); -+ prev = current; -+ release_kernel_lock(prev); -+need_resched_nonpreemptible: -+ rq = this_rq(); -+ -+ schedule_debug(rq, prev); - - spin_lock_irq(&rq->lock); - -@@ -3478,7 +2792,7 @@ need_resched_nonpreemptible: - else { - if (prev->state == TASK_UNINTERRUPTIBLE) - rq->nr_uninterruptible++; -- deactivate_task(prev, rq); -+ deactivate_task(rq, prev, 1); - } - } - -@@ -3486,68 +2800,25 @@ need_resched_nonpreemptible: - if (unlikely(!rq->nr_running)) { - idle_balance(cpu, rq); - if (!rq->nr_running) { -+ prev->sched_class->put_prev_task(rq, prev, -+ __rq_clock(rq)); - next = rq->idle; -- rq->expired_timestamp = 0; -- wake_sleeping_dependent(cpu); -+ schedstat_inc(rq, sched_goidle); - goto switch_tasks; - } - } - -- array = rq->active; -- if (unlikely(!array->nr_active)) { -- /* -- * Switch the active and expired arrays. -- */ -- schedstat_inc(rq, sched_switch); -- rq->active = rq->expired; -- rq->expired = array; -- array = rq->active; -- rq->expired_timestamp = 0; -- rq->best_expired_prio = MAX_PRIO; -- } -- -- idx = sched_find_first_bit(array->bitmap); -- queue = array->queue + idx; -- next = list_entry(queue->next, struct task_struct, run_list); -- -- if (!rt_task(next) && interactive_sleep(next->sleep_type)) { -- unsigned long long delta = now - next->timestamp; -- if (unlikely((long long)(now - next->timestamp) < 0)) -- delta = 0; -- -- if (next->sleep_type == SLEEP_INTERACTIVE) -- delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128; -- -- array = next->array; -- new_prio = recalc_task_prio(next, next->timestamp + delta); -- -- if (unlikely(next->prio != new_prio)) { -- dequeue_task(next, array); -- next->prio = new_prio; -- enqueue_task(next, array); -- } -- } -- next->sleep_type = SLEEP_NORMAL; -- if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next)) -- next = rq->idle; -+ next = pick_next_task(rq, prev); -+ next->nr_switches++; -+ - switch_tasks: -- if (next == rq->idle) -- schedstat_inc(rq, sched_goidle); - prefetch(next); - prefetch_stack(next); - clear_tsk_need_resched(prev); - rcu_qsctr_inc(task_cpu(prev)); - -- update_cpu_clock(prev, rq, now); -- -- prev->sleep_avg -= run_time; -- if ((long)prev->sleep_avg <= 0) -- prev->sleep_avg = 0; -- prev->timestamp = prev->last_ran = now; -- - sched_info_switch(prev, next); - if (likely(prev != next)) { -- next->timestamp = next->last_ran = now; - rq->nr_switches++; - rq->curr = next; - ++*switch_count; -@@ -3978,29 +3249,28 @@ EXPORT_SYMBOL(sleep_on_timeout); - */ - void rt_mutex_setprio(struct task_struct *p, int prio) - { -- struct prio_array *array; - unsigned long flags; -+ int oldprio, on_rq; - struct rq *rq; -- int oldprio; - - BUG_ON(prio < 0 || prio > MAX_PRIO); - - rq = task_rq_lock(p, &flags); - - oldprio = p->prio; -- array = p->array; -- if (array) -- dequeue_task(p, array); -+ on_rq = p->on_rq; -+ if (on_rq) -+ dequeue_task(rq, p, 0); -+ -+ if (rt_prio(prio)) -+ p->sched_class = &rt_sched_class; -+ else -+ p->sched_class = &fair_sched_class; -+ - p->prio = prio; - -- if (array) { -- /* -- * If changing to an RT priority then queue it -- * in the active array! -- */ -- if (rt_task(p)) -- array = rq->active; -- enqueue_task(p, array); -+ if (on_rq) { -+ enqueue_task(rq, p, 0); - /* - * Reschedule if we are currently running on this runqueue and - * our priority decreased, or if we are not currently running on -@@ -4009,8 +3279,9 @@ void rt_mutex_setprio(struct task_struct - if (task_running(rq, p)) { - if (p->prio > oldprio) - resched_task(rq->curr); -- } else if (TASK_PREEMPTS_CURR(p, rq)) -- resched_task(rq->curr); -+ } else { -+ check_preempt_curr(rq, p); -+ } - } - task_rq_unlock(rq, &flags); - } -@@ -4019,8 +3290,7 @@ void rt_mutex_setprio(struct task_struct - - void set_user_nice(struct task_struct *p, long nice) - { -- struct prio_array *array; -- int old_prio, delta; -+ int old_prio, delta, on_rq; - unsigned long flags; - struct rq *rq; - -@@ -4041,9 +3311,9 @@ void set_user_nice(struct task_struct *p - p->static_prio = NICE_TO_PRIO(nice); - goto out_unlock; - } -- array = p->array; -- if (array) { -- dequeue_task(p, array); -+ on_rq = p->on_rq; -+ if (on_rq) { -+ dequeue_task(rq, p, 0); - dec_raw_weighted_load(rq, p); - } - -@@ -4053,8 +3323,8 @@ void set_user_nice(struct task_struct *p - p->prio = effective_prio(p); - delta = p->prio - old_prio; - -- if (array) { -- enqueue_task(p, array); -+ if (on_rq) { -+ enqueue_task(rq, p, 0); - inc_raw_weighted_load(rq, p); - /* - * If the task increased its priority or is running and -@@ -4175,20 +3445,27 @@ static inline struct task_struct *find_p - } - - /* Actually do priority change: must hold rq lock. */ --static void __setscheduler(struct task_struct *p, int policy, int prio) -+static void -+__setscheduler(struct rq *rq, struct task_struct *p, int policy, int prio) - { -- BUG_ON(p->array); -+ BUG_ON(p->on_rq); - - p->policy = policy; -+ switch (p->policy) { -+ case SCHED_NORMAL: -+ case SCHED_BATCH: -+ p->sched_class = &fair_sched_class; -+ break; -+ case SCHED_FIFO: -+ case SCHED_RR: -+ p->sched_class = &rt_sched_class; -+ break; -+ } -+ - p->rt_priority = prio; - p->normal_prio = normal_prio(p); - /* we are holding p->pi_lock already */ - p->prio = rt_mutex_getprio(p); -- /* -- * SCHED_BATCH tasks are treated as perpetual CPU hogs: -- */ -- if (policy == SCHED_BATCH) -- p->sleep_avg = 0; - set_load_weight(p); - } - -@@ -4204,8 +3481,7 @@ static void __setscheduler(struct task_s - int sched_setscheduler(struct task_struct *p, int policy, - struct sched_param *param) - { -- int retval, oldprio, oldpolicy = -1; -- struct prio_array *array; -+ int retval, oldprio, oldpolicy = -1, on_rq; - unsigned long flags; - struct rq *rq; - -@@ -4279,13 +3555,13 @@ recheck: - spin_unlock_irqrestore(&p->pi_lock, flags); - goto recheck; - } -- array = p->array; -- if (array) -- deactivate_task(p, rq); -+ on_rq = p->on_rq; -+ if (on_rq) -+ deactivate_task(rq, p, 0); - oldprio = p->prio; -- __setscheduler(p, policy, param->sched_priority); -- if (array) { -- __activate_task(p, rq); -+ __setscheduler(rq, p, policy, param->sched_priority); -+ if (on_rq) { -+ activate_task(rq, p, 0); - /* - * Reschedule if we are currently running on this runqueue and - * our priority decreased, or if we are not currently running on -@@ -4294,8 +3570,9 @@ recheck: - if (task_running(rq, p)) { - if (p->prio > oldprio) - resched_task(rq->curr); -- } else if (TASK_PREEMPTS_CURR(p, rq)) -- resched_task(rq->curr); -+ } else { -+ check_preempt_curr(rq, p); -+ } - } - __task_rq_unlock(rq); - spin_unlock_irqrestore(&p->pi_lock, flags); -@@ -4558,50 +3835,66 @@ asmlinkage long sys_sched_getaffinity(pi - if (ret < 0) - return ret; - -- if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t))) -- return -EFAULT; -+ if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t))) -+ return -EFAULT; -+ -+ return sizeof(cpumask_t); -+} -+ -+/** -+ * sys_sched_yield - yield the current processor to other threads. -+ * -+ * This function yields the current CPU to other tasks. If there are no -+ * other threads running on this CPU then this function will return. -+ */ -+asmlinkage long sys_sched_yield(void) -+{ -+ struct rq *rq = this_rq_lock(); -+ -+ schedstat_inc(rq, yld_cnt); -+ if (rq->nr_running == 1) -+ schedstat_inc(rq, yld_act_empty); -+ else -+ current->sched_class->yield_task(rq, current, NULL); -+ -+ /* -+ * Since we are going to call schedule() anyway, there's -+ * no need to preempt or enable interrupts: -+ */ -+ __release(rq->lock); -+ spin_release(&rq->lock.dep_map, 1, _THIS_IP_); -+ _raw_spin_unlock(&rq->lock); -+ preempt_enable_no_resched(); -+ -+ schedule(); - -- return sizeof(cpumask_t); -+ return 0; - } - - /** -- * sys_sched_yield - yield the current processor to other threads. -+ * sys_sched_yield_to - yield the current processor to another thread - * -- * this function yields the current CPU by moving the calling thread -+ * This function yields the current CPU by moving the calling thread - * to the expired array. If there are no other threads running on this - * CPU then this function will return. - */ --asmlinkage long sys_sched_yield(void) -+asmlinkage long sys_sched_yield_to(pid_t pid) - { -- struct rq *rq = this_rq_lock(); -- struct prio_array *array = current->array, *target = rq->expired; -+ struct task_struct *p_to; -+ struct rq *rq; - -- schedstat_inc(rq, yld_cnt); -- /* -- * We implement yielding by moving the task into the expired -- * queue. -- * -- * (special rule: RT tasks will just roundrobin in the active -- * array.) -- */ -- if (rt_task(current)) -- target = rq->active; -+ rcu_read_lock(); -+ p_to = find_task_by_pid(pid); -+ if (!p_to) -+ goto out_unlock; - -- if (array->nr_active == 1) { -+ rq = this_rq_lock(); -+ -+ schedstat_inc(rq, yld_cnt); -+ if (rq->nr_running == 1) - schedstat_inc(rq, yld_act_empty); -- if (!rq->expired->nr_active) -- schedstat_inc(rq, yld_both_empty); -- } else if (!rq->expired->nr_active) -- schedstat_inc(rq, yld_exp_empty); -- -- if (array != target) { -- dequeue_task(current, array); -- enqueue_task(current, target); -- } else -- /* -- * requeue_task is cheaper so perform that if possible. -- */ -- requeue_task(current, array); -+ else -+ current->sched_class->yield_task(rq, current, p_to); - - /* - * Since we are going to call schedule() anyway, there's -@@ -4610,13 +3903,19 @@ asmlinkage long sys_sched_yield(void) - __release(rq->lock); - spin_release(&rq->lock.dep_map, 1, _THIS_IP_); - _raw_spin_unlock(&rq->lock); -+ rcu_read_unlock(); - preempt_enable_no_resched(); - - schedule(); - - return 0; -+ -+out_unlock: -+ rcu_read_unlock(); -+ return -ESRCH; - } - -+ - static void __cond_resched(void) - { - #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP -@@ -4812,7 +4111,7 @@ long sys_sched_rr_get_interval(pid_t pid - goto out_unlock; - - jiffies_to_timespec(p->policy == SCHED_FIFO ? -- 0 : task_timeslice(p), &t); -+ 0 : static_prio_timeslice(p->static_prio), &t); - read_unlock(&tasklist_lock); - retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0; - out_nounlock: -@@ -4915,7 +4214,7 @@ void show_state_filter(unsigned long sta - * console might take alot of time: - */ - touch_nmi_watchdog(); -- if (p->state & state_filter) -+ if (!state_filter || (p->state & state_filter)) - show_task(p); - } while_each_thread(g, p); - -@@ -4925,6 +4224,7 @@ void show_state_filter(unsigned long sta - */ - if (state_filter == -1) - debug_show_all_locks(); -+ sysrq_sched_debug_show(); - } - - /** -@@ -4940,11 +4240,10 @@ void __cpuinit init_idle(struct task_str - struct rq *rq = cpu_rq(cpu); - unsigned long flags; - -- idle->timestamp = sched_clock(); -- idle->sleep_avg = 0; -- idle->array = NULL; -+ __sched_fork(idle); -+ idle->exec_start = sched_clock(); -+ - idle->prio = idle->normal_prio = MAX_PRIO; -- idle->state = TASK_RUNNING; - idle->cpus_allowed = cpumask_of_cpu(cpu); - set_task_cpu(idle, cpu); - -@@ -5062,19 +4361,10 @@ static int __migrate_task(struct task_st - goto out; - - set_task_cpu(p, dest_cpu); -- if (p->array) { -- /* -- * Sync timestamp with rq_dest's before activating. -- * The same thing could be achieved by doing this step -- * afterwards, and pretending it was a local activate. -- * This way is cleaner and logically correct. -- */ -- p->timestamp = p->timestamp - rq_src->most_recent_timestamp -- + rq_dest->most_recent_timestamp; -- deactivate_task(p, rq_src); -- __activate_task(p, rq_dest); -- if (TASK_PREEMPTS_CURR(p, rq_dest)) -- resched_task(rq_dest->curr); -+ if (p->on_rq) { -+ deactivate_task(rq_src, p, 0); -+ activate_task(rq_dest, p, 0); -+ check_preempt_curr(rq_dest, p); - } - ret = 1; - out: -@@ -5246,10 +4536,10 @@ void sched_idle_next(void) - */ - spin_lock_irqsave(&rq->lock, flags); - -- __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1); -+ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1); - - /* Add idle task to the _front_ of its priority queue: */ -- __activate_idle_task(p, rq); -+ activate_idle_task(p, rq); - - spin_unlock_irqrestore(&rq->lock, flags); - } -@@ -5299,16 +4589,15 @@ static void migrate_dead(unsigned int de - static void migrate_dead_tasks(unsigned int dead_cpu) - { - struct rq *rq = cpu_rq(dead_cpu); -- unsigned int arr, i; -+ struct task_struct *next; - -- for (arr = 0; arr < 2; arr++) { -- for (i = 0; i < MAX_PRIO; i++) { -- struct list_head *list = &rq->arrays[arr].queue[i]; -- -- while (!list_empty(list)) -- migrate_dead(dead_cpu, list_entry(list->next, -- struct task_struct, run_list)); -- } -+ for (;;) { -+ if (!rq->nr_running) -+ break; -+ next = pick_next_task(rq, rq->curr); -+ if (!next) -+ break; -+ migrate_dead(dead_cpu, next); - } - } - #endif /* CONFIG_HOTPLUG_CPU */ -@@ -5334,7 +4623,7 @@ migration_call(struct notifier_block *nf - kthread_bind(p, cpu); - /* Must be high prio: stop_machine expects to yield to it. */ - rq = task_rq_lock(p, &flags); -- __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1); -+ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1); - task_rq_unlock(rq, &flags); - cpu_rq(cpu)->migration_thread = p; - break; -@@ -5362,9 +4651,9 @@ migration_call(struct notifier_block *nf - rq->migration_thread = NULL; - /* Idle task back to normal (off runqueue, low prio) */ - rq = task_rq_lock(rq->idle, &flags); -- deactivate_task(rq->idle, rq); -+ deactivate_task(rq, rq->idle, 0); - rq->idle->static_prio = MAX_PRIO; -- __setscheduler(rq->idle, SCHED_NORMAL, 0); -+ __setscheduler(rq, rq->idle, SCHED_NORMAL, 0); - migrate_dead_tasks(cpu); - task_rq_unlock(rq, &flags); - migrate_nr_uninterruptible(rq); -@@ -5665,483 +4954,6 @@ init_sched_build_groups(cpumask_t span, - - #define SD_NODES_PER_DOMAIN 16 - --/* -- * Self-tuning task migration cost measurement between source and target CPUs. -- * -- * This is done by measuring the cost of manipulating buffers of varying -- * sizes. For a given buffer-size here are the steps that are taken: -- * -- * 1) the source CPU reads+dirties a shared buffer -- * 2) the target CPU reads+dirties the same shared buffer -- * -- * We measure how long they take, in the following 4 scenarios: -- * -- * - source: CPU1, target: CPU2 | cost1 -- * - source: CPU2, target: CPU1 | cost2 -- * - source: CPU1, target: CPU1 | cost3 -- * - source: CPU2, target: CPU2 | cost4 -- * -- * We then calculate the cost3+cost4-cost1-cost2 difference - this is -- * the cost of migration. -- * -- * We then start off from a small buffer-size and iterate up to larger -- * buffer sizes, in 5% steps - measuring each buffer-size separately, and -- * doing a maximum search for the cost. (The maximum cost for a migration -- * normally occurs when the working set size is around the effective cache -- * size.) -- */ --#define SEARCH_SCOPE 2 --#define MIN_CACHE_SIZE (64*1024U) --#define DEFAULT_CACHE_SIZE (5*1024*1024U) --#define ITERATIONS 1 --#define SIZE_THRESH 130 --#define COST_THRESH 130 -- --/* -- * The migration cost is a function of 'domain distance'. Domain -- * distance is the number of steps a CPU has to iterate down its -- * domain tree to share a domain with the other CPU. The farther -- * two CPUs are from each other, the larger the distance gets. -- * -- * Note that we use the distance only to cache measurement results, -- * the distance value is not used numerically otherwise. When two -- * CPUs have the same distance it is assumed that the migration -- * cost is the same. (this is a simplification but quite practical) -- */ --#define MAX_DOMAIN_DISTANCE 32 -- --static unsigned long long migration_cost[MAX_DOMAIN_DISTANCE] = -- { [ 0 ... MAX_DOMAIN_DISTANCE-1 ] = --/* -- * Architectures may override the migration cost and thus avoid -- * boot-time calibration. Unit is nanoseconds. Mostly useful for -- * virtualized hardware: -- */ --#ifdef CONFIG_DEFAULT_MIGRATION_COST -- CONFIG_DEFAULT_MIGRATION_COST --#else -- -1LL --#endif --}; -- --/* -- * Allow override of migration cost - in units of microseconds. -- * E.g. migration_cost=1000,2000,3000 will set up a level-1 cost -- * of 1 msec, level-2 cost of 2 msecs and level3 cost of 3 msecs: -- */ --static int __init migration_cost_setup(char *str) --{ -- int ints[MAX_DOMAIN_DISTANCE+1], i; -- -- str = get_options(str, ARRAY_SIZE(ints), ints); -- -- printk("#ints: %d\n", ints[0]); -- for (i = 1; i <= ints[0]; i++) { -- migration_cost[i-1] = (unsigned long long)ints[i]*1000; -- printk("migration_cost[%d]: %Ld\n", i-1, migration_cost[i-1]); -- } -- return 1; --} -- --__setup ("migration_cost=", migration_cost_setup); -- --/* -- * Global multiplier (divisor) for migration-cutoff values, -- * in percentiles. E.g. use a value of 150 to get 1.5 times -- * longer cache-hot cutoff times. -- * -- * (We scale it from 100 to 128 to long long handling easier.) -- */ -- --#define MIGRATION_FACTOR_SCALE 128 -- --static unsigned int migration_factor = MIGRATION_FACTOR_SCALE; -- --static int __init setup_migration_factor(char *str) --{ -- get_option(&str, &migration_factor); -- migration_factor = migration_factor * MIGRATION_FACTOR_SCALE / 100; -- return 1; --} -- --__setup("migration_factor=", setup_migration_factor); -- --/* -- * Estimated distance of two CPUs, measured via the number of domains -- * we have to pass for the two CPUs to be in the same span: -- */ --static unsigned long domain_distance(int cpu1, int cpu2) --{ -- unsigned long distance = 0; -- struct sched_domain *sd; -- -- for_each_domain(cpu1, sd) { -- WARN_ON(!cpu_isset(cpu1, sd->span)); -- if (cpu_isset(cpu2, sd->span)) -- return distance; -- distance++; -- } -- if (distance >= MAX_DOMAIN_DISTANCE) { -- WARN_ON(1); -- distance = MAX_DOMAIN_DISTANCE-1; -- } -- -- return distance; --} -- --static unsigned int migration_debug; -- --static int __init setup_migration_debug(char *str) --{ -- get_option(&str, &migration_debug); -- return 1; --} -- --__setup("migration_debug=", setup_migration_debug); -- --/* -- * Maximum cache-size that the scheduler should try to measure. -- * Architectures with larger caches should tune this up during -- * bootup. Gets used in the domain-setup code (i.e. during SMP -- * bootup). -- */ --unsigned int max_cache_size; -- --static int __init setup_max_cache_size(char *str) --{ -- get_option(&str, &max_cache_size); -- return 1; --} -- --__setup("max_cache_size=", setup_max_cache_size); -- --/* -- * Dirty a big buffer in a hard-to-predict (for the L2 cache) way. This -- * is the operation that is timed, so we try to generate unpredictable -- * cachemisses that still end up filling the L2 cache: -- */ --static void touch_cache(void *__cache, unsigned long __size) --{ -- unsigned long size = __size / sizeof(long); -- unsigned long chunk1 = size / 3; -- unsigned long chunk2 = 2 * size / 3; -- unsigned long *cache = __cache; -- int i; -- -- for (i = 0; i < size/6; i += 8) { -- switch (i % 6) { -- case 0: cache[i]++; -- case 1: cache[size-1-i]++; -- case 2: cache[chunk1-i]++; -- case 3: cache[chunk1+i]++; -- case 4: cache[chunk2-i]++; -- case 5: cache[chunk2+i]++; -- } -- } --} -- --/* -- * Measure the cache-cost of one task migration. Returns in units of nsec. -- */ --static unsigned long long --measure_one(void *cache, unsigned long size, int source, int target) --{ -- cpumask_t mask, saved_mask; -- unsigned long long t0, t1, t2, t3, cost; -- -- saved_mask = current->cpus_allowed; -- -- /* -- * Flush source caches to RAM and invalidate them: -- */ -- sched_cacheflush(); -- -- /* -- * Migrate to the source CPU: -- */ -- mask = cpumask_of_cpu(source); -- set_cpus_allowed(current, mask); -- WARN_ON(smp_processor_id() != source); -- -- /* -- * Dirty the working set: -- */ -- t0 = sched_clock(); -- touch_cache(cache, size); -- t1 = sched_clock(); -- -- /* -- * Migrate to the target CPU, dirty the L2 cache and access -- * the shared buffer. (which represents the working set -- * of a migrated task.) -- */ -- mask = cpumask_of_cpu(target); -- set_cpus_allowed(current, mask); -- WARN_ON(smp_processor_id() != target); -- -- t2 = sched_clock(); -- touch_cache(cache, size); -- t3 = sched_clock(); -- -- cost = t1-t0 + t3-t2; -- -- if (migration_debug >= 2) -- printk("[%d->%d]: %8Ld %8Ld %8Ld => %10Ld.\n", -- source, target, t1-t0, t1-t0, t3-t2, cost); -- /* -- * Flush target caches to RAM and invalidate them: -- */ -- sched_cacheflush(); -- -- set_cpus_allowed(current, saved_mask); -- -- return cost; --} -- --/* -- * Measure a series of task migrations and return the average -- * result. Since this code runs early during bootup the system -- * is 'undisturbed' and the average latency makes sense. -- * -- * The algorithm in essence auto-detects the relevant cache-size, -- * so it will properly detect different cachesizes for different -- * cache-hierarchies, depending on how the CPUs are connected. -- * -- * Architectures can prime the upper limit of the search range via -- * max_cache_size, otherwise the search range defaults to 20MB...64K. -- */ --static unsigned long long --measure_cost(int cpu1, int cpu2, void *cache, unsigned int size) --{ -- unsigned long long cost1, cost2; -- int i; -- -- /* -- * Measure the migration cost of 'size' bytes, over an -- * average of 10 runs: -- * -- * (We perturb the cache size by a small (0..4k) -- * value to compensate size/alignment related artifacts. -- * We also subtract the cost of the operation done on -- * the same CPU.) -- */ -- cost1 = 0; -- -- /* -- * dry run, to make sure we start off cache-cold on cpu1, -- * and to get any vmalloc pagefaults in advance: -- */ -- measure_one(cache, size, cpu1, cpu2); -- for (i = 0; i < ITERATIONS; i++) -- cost1 += measure_one(cache, size - i * 1024, cpu1, cpu2); -- -- measure_one(cache, size, cpu2, cpu1); -- for (i = 0; i < ITERATIONS; i++) -- cost1 += measure_one(cache, size - i * 1024, cpu2, cpu1); -- -- /* -- * (We measure the non-migrating [cached] cost on both -- * cpu1 and cpu2, to handle CPUs with different speeds) -- */ -- cost2 = 0; -- -- measure_one(cache, size, cpu1, cpu1); -- for (i = 0; i < ITERATIONS; i++) -- cost2 += measure_one(cache, size - i * 1024, cpu1, cpu1); -- -- measure_one(cache, size, cpu2, cpu2); -- for (i = 0; i < ITERATIONS; i++) -- cost2 += measure_one(cache, size - i * 1024, cpu2, cpu2); -- -- /* -- * Get the per-iteration migration cost: -- */ -- do_div(cost1, 2 * ITERATIONS); -- do_div(cost2, 2 * ITERATIONS); -- -- return cost1 - cost2; --} -- --static unsigned long long measure_migration_cost(int cpu1, int cpu2) --{ -- unsigned long long max_cost = 0, fluct = 0, avg_fluct = 0; -- unsigned int max_size, size, size_found = 0; -- long long cost = 0, prev_cost; -- void *cache; -- -- /* -- * Search from max_cache_size*5 down to 64K - the real relevant -- * cachesize has to lie somewhere inbetween. -- */ -- if (max_cache_size) { -- max_size = max(max_cache_size * SEARCH_SCOPE, MIN_CACHE_SIZE); -- size = max(max_cache_size / SEARCH_SCOPE, MIN_CACHE_SIZE); -- } else { -- /* -- * Since we have no estimation about the relevant -- * search range -- */ -- max_size = DEFAULT_CACHE_SIZE * SEARCH_SCOPE; -- size = MIN_CACHE_SIZE; -- } -- -- if (!cpu_online(cpu1) || !cpu_online(cpu2)) { -- printk("cpu %d and %d not both online!\n", cpu1, cpu2); -- return 0; -- } -- -- /* -- * Allocate the working set: -- */ -- cache = vmalloc(max_size); -- if (!cache) { -- printk("could not vmalloc %d bytes for cache!\n", 2 * max_size); -- return 1000000; /* return 1 msec on very small boxen */ -- } -- -- while (size <= max_size) { -- prev_cost = cost; -- cost = measure_cost(cpu1, cpu2, cache, size); -- -- /* -- * Update the max: -- */ -- if (cost > 0) { -- if (max_cost < cost) { -- max_cost = cost; -- size_found = size; -- } -- } -- /* -- * Calculate average fluctuation, we use this to prevent -- * noise from triggering an early break out of the loop: -- */ -- fluct = abs(cost - prev_cost); -- avg_fluct = (avg_fluct + fluct)/2; -- -- if (migration_debug) -- printk("-> [%d][%d][%7d] %3ld.%ld [%3ld.%ld] (%ld): " -- "(%8Ld %8Ld)\n", -- cpu1, cpu2, size, -- (long)cost / 1000000, -- ((long)cost / 100000) % 10, -- (long)max_cost / 1000000, -- ((long)max_cost / 100000) % 10, -- domain_distance(cpu1, cpu2), -- cost, avg_fluct); -- -- /* -- * If we iterated at least 20% past the previous maximum, -- * and the cost has dropped by more than 20% already, -- * (taking fluctuations into account) then we assume to -- * have found the maximum and break out of the loop early: -- */ -- if (size_found && (size*100 > size_found*SIZE_THRESH)) -- if (cost+avg_fluct <= 0 || -- max_cost*100 > (cost+avg_fluct)*COST_THRESH) { -- -- if (migration_debug) -- printk("-> found max.\n"); -- break; -- } -- /* -- * Increase the cachesize in 10% steps: -- */ -- size = size * 10 / 9; -- } -- -- if (migration_debug) -- printk("[%d][%d] working set size found: %d, cost: %Ld\n", -- cpu1, cpu2, size_found, max_cost); -- -- vfree(cache); -- -- /* -- * A task is considered 'cache cold' if at least 2 times -- * the worst-case cost of migration has passed. -- * -- * (this limit is only listened to if the load-balancing -- * situation is 'nice' - if there is a large imbalance we -- * ignore it for the sake of CPU utilization and -- * processing fairness.) -- */ -- return 2 * max_cost * migration_factor / MIGRATION_FACTOR_SCALE; --} -- --static void calibrate_migration_costs(const cpumask_t *cpu_map) --{ -- int cpu1 = -1, cpu2 = -1, cpu, orig_cpu = raw_smp_processor_id(); -- unsigned long j0, j1, distance, max_distance = 0; -- struct sched_domain *sd; -- -- j0 = jiffies; -- -- /* -- * First pass - calculate the cacheflush times: -- */ -- for_each_cpu_mask(cpu1, *cpu_map) { -- for_each_cpu_mask(cpu2, *cpu_map) { -- if (cpu1 == cpu2) -- continue; -- distance = domain_distance(cpu1, cpu2); -- max_distance = max(max_distance, distance); -- /* -- * No result cached yet? -- */ -- if (migration_cost[distance] == -1LL) -- migration_cost[distance] = -- measure_migration_cost(cpu1, cpu2); -- } -- } -- /* -- * Second pass - update the sched domain hierarchy with -- * the new cache-hot-time estimations: -- */ -- for_each_cpu_mask(cpu, *cpu_map) { -- distance = 0; -- for_each_domain(cpu, sd) { -- sd->cache_hot_time = migration_cost[distance]; -- distance++; -- } -- } -- /* -- * Print the matrix: -- */ -- if (migration_debug) -- printk("migration: max_cache_size: %d, cpu: %d MHz:\n", -- max_cache_size, --#ifdef CONFIG_X86 -- cpu_khz/1000 --#else -- -1 --#endif -- ); -- if (system_state == SYSTEM_BOOTING && num_online_cpus() > 1) { -- printk("migration_cost="); -- for (distance = 0; distance <= max_distance; distance++) { -- if (distance) -- printk(","); -- printk("%ld", (long)migration_cost[distance] / 1000); -- } -- printk("\n"); -- } -- j1 = jiffies; -- if (migration_debug) -- printk("migration: %ld seconds\n", (j1-j0) / HZ); -- -- /* -- * Move back to the original CPU. NUMA-Q gets confused -- * if we migrate to another quad during bootup. -- */ -- if (raw_smp_processor_id() != orig_cpu) { -- cpumask_t mask = cpumask_of_cpu(orig_cpu), -- saved_mask = current->cpus_allowed; -- -- set_cpus_allowed(current, mask); -- set_cpus_allowed(current, saved_mask); -- } --} -- - #ifdef CONFIG_NUMA - - /** -@@ -6671,10 +5483,6 @@ static int build_sched_domains(const cpu - #endif - cpu_attach_domain(sd, i); - } -- /* -- * Tune cache-hot values: -- */ -- calibrate_migration_costs(cpu_map); - - return 0; - -@@ -6875,6 +5683,16 @@ void __init sched_init_smp(void) - /* Move init over to a non-isolated CPU */ - if (set_cpus_allowed(current, non_isolated_cpus) < 0) - BUG(); -+ /* -+ * Increase the granularity value when there are more CPUs, -+ * because with more CPUs the 'effective latency' as visible -+ * to users decreases. But the relationship is not linear, -+ * so pick a second-best guess by going with the log2 of the -+ * number of CPUs. -+ * -+ * This idea comes from the SD scheduler of Con Kolivas: -+ */ -+ sysctl_sched_granularity *= 1 + ilog2(num_online_cpus()); - } - #else - void __init sched_init_smp(void) -@@ -6894,7 +5712,14 @@ int in_sched_functions(unsigned long add - - void __init sched_init(void) - { -- int i, j, k; -+ int i, j; -+ -+ current->sched_class = &fair_sched_class; -+ /* -+ * Link up the scheduling class hierarchy: -+ */ -+ rt_sched_class.next = &fair_sched_class; -+ fair_sched_class.next = NULL; - - for_each_possible_cpu(i) { - struct prio_array *array; -@@ -6904,14 +5729,13 @@ void __init sched_init(void) - spin_lock_init(&rq->lock); - lockdep_set_class(&rq->lock, &rq->rq_lock_key); - rq->nr_running = 0; -- rq->active = rq->arrays; -- rq->expired = rq->arrays + 1; -- rq->best_expired_prio = MAX_PRIO; -+ rq->tasks_timeline = RB_ROOT; -+ rq->clock = rq->fair_clock = 1; - -+ for (j = 0; j < CPU_LOAD_IDX_MAX; j++) -+ rq->cpu_load[j] = 0; - #ifdef CONFIG_SMP - rq->sd = NULL; -- for (j = 1; j < 3; j++) -- rq->cpu_load[j] = 0; - rq->active_balance = 0; - rq->push_cpu = 0; - rq->cpu = i; -@@ -6920,15 +5744,13 @@ void __init sched_init(void) - #endif - atomic_set(&rq->nr_iowait, 0); - -- for (j = 0; j < 2; j++) { -- array = rq->arrays + j; -- for (k = 0; k < MAX_PRIO; k++) { -- INIT_LIST_HEAD(array->queue + k); -- __clear_bit(k, array->bitmap); -- } -- // delimiter for bitsearch -- __set_bit(MAX_PRIO, array->bitmap); -+ array = &rq->active; -+ for (j = 0; j < MAX_RT_PRIO; j++) { -+ INIT_LIST_HEAD(array->queue + j); -+ __clear_bit(j, array->bitmap); - } -+ /* delimiter for bitsearch: */ -+ __set_bit(MAX_RT_PRIO, array->bitmap); - } - - set_load_weight(&init_task); -@@ -6984,28 +5806,54 @@ EXPORT_SYMBOL(__might_sleep); - #ifdef CONFIG_MAGIC_SYSRQ - void normalize_rt_tasks(void) - { -- struct prio_array *array; - struct task_struct *p; - unsigned long flags; - struct rq *rq; -+ int on_rq; - - read_lock_irq(&tasklist_lock); - for_each_process(p) { -- if (!rt_task(p)) -+ p->fair_key = 0; -+ p->wait_runtime = 0; -+ p->wait_start_fair = 0; -+ p->wait_start = 0; -+ p->exec_start = 0; -+ p->sleep_start = 0; -+ p->block_start = 0; -+ task_rq(p)->fair_clock = 0; -+ task_rq(p)->clock = 0; -+ -+ if (!rt_task(p)) { -+ /* -+ * Renice negative nice level userspace -+ * tasks back to 0: -+ */ -+ if (TASK_NICE(p) < 0 && p->mm) -+ set_user_nice(p, 0); - continue; -+ } - - spin_lock_irqsave(&p->pi_lock, flags); - rq = __task_rq_lock(p); -+#ifdef CONFIG_SMP -+ /* -+ * Do not touch the migration thread: -+ */ -+ if (p == rq->migration_thread) -+ goto out_unlock; -+#endif - -- array = p->array; -- if (array) -- deactivate_task(p, task_rq(p)); -- __setscheduler(p, SCHED_NORMAL, 0); -- if (array) { -- __activate_task(p, task_rq(p)); -+ on_rq = p->on_rq; -+ if (on_rq) -+ deactivate_task(task_rq(p), p, 0); -+ __setscheduler(rq, p, SCHED_NORMAL, 0); -+ if (on_rq) { -+ activate_task(task_rq(p), p, 0); - resched_task(rq->curr); - } -- -+#ifdef CONFIG_SMP -+ out_unlock: -+#endif - __task_rq_unlock(rq); - spin_unlock_irqrestore(&p->pi_lock, flags); - } -Index: linux-cfs-2.6.20.8.q/kernel/sched_debug.c -=================================================================== ---- /dev/null -+++ linux-cfs-2.6.20.8.q/kernel/sched_debug.c -@@ -0,0 +1,161 @@ -+/* -+ * kernel/time/sched_debug.c -+ * -+ * Print the CFS rbtree -+ * -+ * Copyright(C) 2007, Red Hat, Inc., Ingo Molnar -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+typedef void (*print_fn_t)(struct seq_file *m, unsigned int *classes); -+ -+/* -+ * This allows printing both to /proc/sched_debug and -+ * to the console -+ */ -+#define SEQ_printf(m, x...) \ -+ do { \ -+ if (m) \ -+ seq_printf(m, x); \ -+ else \ -+ printk(x); \ -+ } while (0) -+ -+static void -+print_task(struct seq_file *m, struct rq *rq, struct task_struct *p, u64 now) -+{ -+ if (rq->curr == p) -+ SEQ_printf(m, "R"); -+ else -+ SEQ_printf(m, " "); -+ -+ SEQ_printf(m, "%14s %5d %15Ld %13Ld %13Ld %9Ld %5d " -+ "%15Ld %15Ld %15Ld\n", -+ p->comm, p->pid, -+ (long long)p->fair_key, (long long)p->fair_key - rq->fair_clock, -+ (long long)p->wait_runtime, -+ (long long)p->nr_switches, -+ p->prio, -+ (long long)p->wait_start_fair - rq->fair_clock, -+ (long long)p->sum_exec_runtime, -+ (long long)p->sum_wait_runtime); -+} -+ -+static void print_rq(struct seq_file *m, struct rq *rq, u64 now) -+{ -+ struct task_struct *p; -+ struct rb_node *curr; -+ -+ SEQ_printf(m, -+ "\nrunnable tasks:\n" -+ " task PID tree-key delta waiting" -+ " switches prio wstart-fair" -+ " sum-exec sum-wait\n" -+ "-----------------------------------------------------------------" -+ "--------------------------------" -+ "--------------------------------\n"); -+ -+ curr = first_fair(rq); -+ while (curr) { -+ p = rb_entry(curr, struct task_struct, run_node); -+ print_task(m, rq, p, now); -+ -+ curr = rb_next(curr); -+ } -+} -+ -+static void print_cpu(struct seq_file *m, int cpu, u64 now) -+{ -+ struct rq *rq = &per_cpu(runqueues, cpu); -+ -+ SEQ_printf(m, "\ncpu: %d\n", cpu); -+#define P(x) \ -+ SEQ_printf(m, " .%-22s: %Lu\n", #x, (unsigned long long)(rq->x)) -+ -+ P(nr_running); -+ P(raw_weighted_load); -+ P(nr_switches); -+ P(nr_load_updates); -+ P(nr_uninterruptible); -+ P(next_balance); -+ P(curr->pid); -+ P(clock); -+ P(prev_clock_raw); -+ P(clock_warps); -+ P(clock_unstable_events); -+ P(clock_max_delta); -+ rq->clock_max_delta = 0; -+ P(fair_clock); -+ P(prev_fair_clock); -+ P(exec_clock); -+ P(prev_exec_clock); -+ P(wait_runtime); -+ P(cpu_load[0]); -+ P(cpu_load[1]); -+ P(cpu_load[2]); -+ P(cpu_load[3]); -+ P(cpu_load[4]); -+#undef P -+ -+ print_rq(m, rq, now); -+} -+ -+static int sched_debug_show(struct seq_file *m, void *v) -+{ -+ u64 now = ktime_to_ns(ktime_get()); -+ int cpu; -+ -+ SEQ_printf(m, "Sched Debug Version: v0.02\n"); -+ SEQ_printf(m, "now at %Lu nsecs\n", (unsigned long long)now); -+ -+ for_each_online_cpu(cpu) -+ print_cpu(m, cpu, now); -+ -+ SEQ_printf(m, "\n"); -+ -+ return 0; -+} -+ -+void sysrq_sched_debug_show(void) -+{ -+ sched_debug_show(NULL, NULL); -+} -+ -+static int sched_debug_open(struct inode *inode, struct file *filp) -+{ -+ return single_open(filp, sched_debug_show, NULL); -+} -+ -+static struct file_operations sched_debug_fops = { -+ .open = sched_debug_open, -+ .read = seq_read, -+ .llseek = seq_lseek, -+ .release = seq_release, -+}; -+ -+static int __init init_sched_debug_procfs(void) -+{ -+ struct proc_dir_entry *pe; -+ -+ pe = create_proc_entry("sched_debug", 0644, NULL); -+ if (!pe) -+ return -ENOMEM; -+ -+ pe->proc_fops = &sched_debug_fops; -+ -+ return 0; -+} -+__initcall(init_sched_debug_procfs); -Index: linux-cfs-2.6.20.8.q/kernel/sched_fair.c -=================================================================== ---- /dev/null -+++ linux-cfs-2.6.20.8.q/kernel/sched_fair.c -@@ -0,0 +1,618 @@ -+/* -+ * Completely Fair Scheduling (CFS) Class (SCHED_NORMAL/SCHED_BATCH) -+ */ -+ -+/* -+ * Preemption granularity: -+ * (default: 2 msec, units: nanoseconds) -+ * -+ * NOTE: this granularity value is not the same as the concept of -+ * 'timeslice length' - timeslices in CFS will typically be somewhat -+ * larger than this value. (to see the precise effective timeslice -+ * length of your workload, run vmstat and monitor the context-switches -+ * field) -+ * -+ * On SMP systems the value of this is multiplied by the log2 of the -+ * number of CPUs. (i.e. factor 2x on 2-way systems, 3x on 4-way -+ * systems, 4x on 8-way systems, 5x on 16-way systems, etc.) -+ */ -+unsigned int sysctl_sched_granularity __read_mostly = 2000000; -+ -+unsigned int sysctl_sched_sleep_history_max __read_mostly = 2000000000; -+ -+unsigned int sysctl_sched_load_smoothing = 2; -+ -+/* -+ * Wake-up granularity. -+ * (default: 1 msec, units: nanoseconds) -+ * -+ * This option delays the preemption effects of decoupled workloads -+ * and reduces their over-scheduling. Synchronous workloads will still -+ * have immediate wakeup/sleep latencies. -+ */ -+unsigned int sysctl_sched_wakeup_granularity __read_mostly = 0; -+ -+ -+extern struct sched_class fair_sched_class; -+ -+/**************************************************************/ -+/* Scheduling class tree data structure manipulation methods: -+ */ -+ -+/* -+ * Enqueue a task into the rb-tree: -+ */ -+static inline void __enqueue_task_fair(struct rq *rq, struct task_struct *p) -+{ -+ struct rb_node **link = &rq->tasks_timeline.rb_node; -+ struct rb_node *parent = NULL; -+ struct task_struct *entry; -+ s64 key = p->fair_key; -+ int leftmost = 1; -+ -+ /* -+ * Find the right place in the rbtree: -+ */ -+ while (*link) { -+ parent = *link; -+ entry = rb_entry(parent, struct task_struct, run_node); -+ /* -+ * We dont care about collisions. Nodes with -+ * the same key stay together. -+ */ -+ if (key < entry->fair_key) { -+ link = &parent->rb_left; -+ } else { -+ link = &parent->rb_right; -+ leftmost = 0; -+ } -+ } -+ -+ /* -+ * Maintain a cache of leftmost tree entries (it is frequently -+ * used): -+ */ -+ if (leftmost) -+ rq->rb_leftmost = &p->run_node; -+ -+ rb_link_node(&p->run_node, parent, link); -+ rb_insert_color(&p->run_node, &rq->tasks_timeline); -+} -+ -+static inline void __dequeue_task_fair(struct rq *rq, struct task_struct *p) -+{ -+ if (rq->rb_leftmost == &p->run_node) -+ rq->rb_leftmost = NULL; -+ rb_erase(&p->run_node, &rq->tasks_timeline); -+} -+ -+static inline struct rb_node * first_fair(struct rq *rq) -+{ -+ if (rq->rb_leftmost) -+ return rq->rb_leftmost; -+ /* Cache the value returned by rb_first() */ -+ rq->rb_leftmost = rb_first(&rq->tasks_timeline); -+ return rq->rb_leftmost; -+} -+ -+static struct task_struct * __pick_next_task_fair(struct rq *rq) -+{ -+ return rb_entry(first_fair(rq), struct task_struct, run_node); -+} -+ -+/**************************************************************/ -+/* Scheduling class statistics methods: -+ */ -+ -+static inline u64 -+rescale_load(struct task_struct *p, u64 value) -+{ -+ int load_shift = p->load_shift; -+ -+ if (load_shift == SCHED_LOAD_SHIFT) -+ return value; -+ -+ return (value << load_shift) >> SCHED_LOAD_SHIFT; -+} -+ -+static u64 -+niced_granularity(struct rq *rq, struct task_struct *curr, -+ unsigned long granularity) -+{ -+ return rescale_load(curr, granularity); -+} -+ -+/* -+ * Update the current task's runtime statistics. Skip current tasks that -+ * are not in our scheduling class. -+ */ -+static inline void update_curr(struct rq *rq, u64 now) -+{ -+ u64 delta_exec, delta_fair, delta_mine; -+ struct task_struct *curr = rq->curr; -+ unsigned long load; -+ -+ if (curr->sched_class != &fair_sched_class || curr == rq->idle -+ || !curr->on_rq) -+ return; -+ /* -+ * Get the amount of time the current task was running -+ * since the last time we changed raw_weighted_load: -+ */ -+ delta_exec = now - curr->exec_start; -+ if (unlikely(delta_exec > curr->exec_max)) -+ curr->exec_max = delta_exec; -+ -+ if (sysctl_sched_load_smoothing) { -+ delta_fair = delta_exec << SCHED_LOAD_SHIFT; -+ do_div(delta_fair, rq->raw_weighted_load); -+ -+ load = rq->cpu_load[CPU_LOAD_IDX_MAX-1] + 1; -+ if (sysctl_sched_load_smoothing & 2) -+ load = max(load, rq->raw_weighted_load); -+ -+ delta_mine = delta_exec << curr->load_shift; -+ do_div(delta_mine, load); -+ } else { -+ delta_fair = delta_exec << SCHED_LOAD_SHIFT; -+ do_div(delta_fair, rq->raw_weighted_load); -+ -+ delta_mine = delta_exec << curr->load_shift; -+ do_div(delta_mine, rq->raw_weighted_load); -+ } -+ -+ curr->sum_exec_runtime += delta_exec; -+ curr->exec_start = now; -+ -+ rq->fair_clock += delta_fair; -+ rq->exec_clock += delta_exec; -+ -+ /* -+ * We executed delta_exec amount of time on the CPU, -+ * but we were only entitled to delta_mine amount of -+ * time during that period (if nr_running == 1 then -+ * the two values are equal): -+ */ -+ -+ /* -+ * Task already marked for preemption, do not burden -+ * it with the cost of not having left the CPU yet. -+ */ -+ if (unlikely(test_tsk_thread_flag(curr, TIF_NEED_RESCHED))) -+ goto out_nowait; -+ -+ curr->wait_runtime -= delta_exec - delta_mine; -+ if (unlikely(curr->wait_runtime < curr->min_wait_runtime)) -+ curr->min_wait_runtime = curr->wait_runtime; -+ -+ rq->wait_runtime -= delta_exec - delta_mine; -+out_nowait: -+ ; -+} -+ -+static inline void -+update_stats_wait_start(struct rq *rq, struct task_struct *p, u64 now) -+{ -+ p->wait_start_fair = rq->fair_clock; -+ p->wait_start = now; -+} -+ -+/* -+ * Task is being enqueued - update stats: -+ */ -+static inline void -+update_stats_enqueue(struct rq *rq, struct task_struct *p, u64 now) -+{ -+ s64 key; -+ -+ /* -+ * Update the fair clock. -+ */ -+ update_curr(rq, now); -+ -+ /* -+ * Are we enqueueing a waiting task? (for current tasks -+ * a dequeue/enqueue event is a NOP) -+ */ -+ if (p != rq->curr) -+ update_stats_wait_start(rq, p, now); -+ /* -+ * Update the key: -+ */ -+ key = rq->fair_clock; -+ -+ /* -+ * Optimize the common nice 0 case: -+ */ -+ if (likely(p->load_shift == SCHED_LOAD_SHIFT)) { -+ key -= p->wait_runtime; -+ } else { -+ unsigned int delta_bits; -+ -+ if (p->load_shift < SCHED_LOAD_SHIFT) { -+ /* plus-reniced tasks get helped: */ -+ delta_bits = SCHED_LOAD_SHIFT - p->load_shift; -+ key -= p->wait_runtime << delta_bits; -+ } else { -+ /* negative-reniced tasks get hurt: */ -+ delta_bits = p->load_shift - SCHED_LOAD_SHIFT; -+ key -= p->wait_runtime >> delta_bits; -+ } -+ } -+ -+ p->fair_key = key; -+} -+ -+/* -+ * Note: must be called with a freshly updated rq->fair_clock. -+ */ -+static inline void -+update_stats_wait_end(struct rq *rq, struct task_struct *p, u64 now) -+{ -+ u64 delta, fair_delta, delta_wait; -+ -+ delta_wait = now - p->wait_start; -+ if (unlikely(delta_wait > p->wait_max)) -+ p->wait_max = delta_wait; -+ -+ delta = rq->fair_clock - p->wait_start_fair; -+ fair_delta = rescale_load(p, delta); -+ -+ p->sum_wait_runtime += fair_delta; -+ rq->wait_runtime += fair_delta; -+ p->wait_runtime += fair_delta; -+ -+ p->wait_start_fair = 0; -+ p->wait_start = 0; -+} -+ -+static inline void -+update_stats_dequeue(struct rq *rq, struct task_struct *p, u64 now) -+{ -+ update_curr(rq, now); -+ /* -+ * Mark the end of the wait period if dequeueing a -+ * waiting task: -+ */ -+ if (p != rq->curr) -+ update_stats_wait_end(rq, p, now); -+} -+ -+/* -+ * We are picking a new current task - update its stats: -+ */ -+static inline void -+update_stats_curr_start(struct rq *rq, struct task_struct *p, u64 now) -+{ -+ /* -+ * We are starting a new run period: -+ */ -+ p->exec_start = now; -+} -+ -+/* -+ * We are descheduling a task - update its stats: -+ */ -+static inline void -+update_stats_curr_end(struct rq *rq, struct task_struct *p, u64 now) -+{ -+ update_curr(rq, now); -+ -+ p->exec_start = 0; -+} -+ -+/**************************************************************/ -+/* Scheduling class queueing methods: -+ */ -+ -+/* -+ * The enqueue_task method is called before nr_running is -+ * increased. Here we update the fair scheduling stats and -+ * then put the task into the rbtree: -+ */ -+static void -+enqueue_task_fair(struct rq *rq, struct task_struct *p, int wakeup, u64 now) -+{ -+ unsigned long max_delta = sysctl_sched_sleep_history_max, factor; -+ u64 delta = 0; -+ -+ if (wakeup) { -+ if (p->sleep_start) { -+ delta = now - p->sleep_start; -+ if ((s64)delta < 0) -+ delta = 0; -+ -+ if (unlikely(delta > p->sleep_max)) -+ p->sleep_max = delta; -+ -+ p->sleep_start = 0; -+ } -+ if (p->block_start) { -+ delta = now - p->block_start; -+ if ((s64)delta < 0) -+ delta = 0; -+ -+ if (unlikely(delta > p->block_max)) -+ p->block_max = delta; -+ -+ p->block_start = 0; -+ } -+ -+ /* -+ * We are after a wait period, decay the -+ * wait_runtime value: -+ */ -+ if (max_delta != -1 && max_delta != -2) { -+ if (delta < max_delta) { -+ factor = 1024 * (max_delta - -+ (unsigned long)delta) / max_delta; -+ p->wait_runtime *= (int)factor; -+ p->wait_runtime /= 1024; -+ } else { -+ p->wait_runtime = 0; -+ } -+ } -+ } -+ update_stats_enqueue(rq, p, now); -+ if (wakeup && max_delta == -2) -+ p->wait_runtime = 0; -+ __enqueue_task_fair(rq, p); -+} -+ -+/* -+ * The dequeue_task method is called before nr_running is -+ * decreased. We remove the task from the rbtree and -+ * update the fair scheduling stats: -+ */ -+static void -+dequeue_task_fair(struct rq *rq, struct task_struct *p, int sleep, u64 now) -+{ -+ update_stats_dequeue(rq, p, now); -+ if (sleep) { -+ if (p->state & TASK_INTERRUPTIBLE) -+ p->sleep_start = now; -+ if (p->state & TASK_UNINTERRUPTIBLE) -+ p->block_start = now; -+ } -+ __dequeue_task_fair(rq, p); -+} -+ -+/* -+ * sched_yield() support is very simple via the rbtree: we just -+ * dequeue the task and move it after the next task, which -+ * causes tasks to roundrobin. -+ */ -+static void -+yield_task_fair(struct rq *rq, struct task_struct *p, struct task_struct *p_to) -+{ -+ struct rb_node *curr, *next, *first; -+ struct task_struct *p_next; -+ s64 yield_key; -+ u64 now; -+ -+ /* -+ * yield-to support: if we are on the same runqueue then -+ * give half of our wait_runtime (if it's positive) to the other task: -+ */ -+ if (p_to && p->wait_runtime > 0) { -+ p_to->wait_runtime += p->wait_runtime >> 1; -+ p->wait_runtime >>= 1; -+ } -+ curr = &p->run_node; -+ first = first_fair(rq); -+ /* -+ * Move this task to the second place in the tree: -+ */ -+ if (unlikely(curr != first)) { -+ next = first; -+ } else { -+ next = rb_next(curr); -+ /* -+ * We were the last one already - nothing to do, return -+ * and reschedule: -+ */ -+ if (unlikely(!next)) -+ return; -+ } -+ -+ p_next = rb_entry(next, struct task_struct, run_node); -+ /* -+ * Minimally necessary key value to be the second in the tree: -+ */ -+ yield_key = p_next->fair_key + 1; -+ -+ now = __rq_clock(rq); -+ dequeue_task_fair(rq, p, 0, now); -+ p->on_rq = 0; -+ -+ /* -+ * Only update the key if we need to move more backwards -+ * than the minimally necessary position to be the second: -+ */ -+ if (p->fair_key < yield_key) -+ p->fair_key = yield_key; -+ -+ __enqueue_task_fair(rq, p); -+ p->on_rq = 1; -+} -+ -+/* -+ * Preempt the current task with a newly woken task if needed: -+ */ -+static inline void -+__check_preempt_curr_fair(struct rq *rq, struct task_struct *p, -+ struct task_struct *curr, unsigned long granularity) -+{ -+ s64 __delta = curr->fair_key - p->fair_key; -+ -+ /* -+ * Take scheduling granularity into account - do not -+ * preempt the current task unless the best task has -+ * a larger than sched_granularity fairness advantage: -+ */ -+ if (__delta > niced_granularity(rq, curr, granularity)) -+ resched_task(curr); -+} -+ -+/* -+ * Preempt the current task with a newly woken task if needed: -+ */ -+static void check_preempt_curr_fair(struct rq *rq, struct task_struct *p) -+{ -+ struct task_struct *curr = rq->curr; -+ -+ if ((curr == rq->idle) || rt_prio(p->prio)) { -+ resched_task(curr); -+ } else { -+ __check_preempt_curr_fair(rq, p, curr, -+ sysctl_sched_granularity); -+ } -+} -+ -+static struct task_struct * pick_next_task_fair(struct rq *rq, u64 now) -+{ -+ struct task_struct *p = __pick_next_task_fair(rq); -+ -+ /* -+ * Any task has to be enqueued before it get to execute on -+ * a CPU. So account for the time it spent waiting on the -+ * runqueue. (note, here we rely on pick_next_task() having -+ * done a put_prev_task_fair() shortly before this, which -+ * updated rq->fair_clock - used by update_stats_wait_end()) -+ */ -+ update_stats_wait_end(rq, p, now); -+ update_stats_curr_start(rq, p, now); -+ -+ return p; -+} -+ -+/* -+ * Account for a descheduled task: -+ */ -+static void put_prev_task_fair(struct rq *rq, struct task_struct *prev, u64 now) -+{ -+ if (prev == rq->idle) -+ return; -+ -+ update_stats_curr_end(rq, prev, now); -+ /* -+ * If the task is still waiting for the CPU (it just got -+ * preempted), start the wait period: -+ */ -+ if (prev->on_rq) -+ update_stats_wait_start(rq, prev, now); -+} -+ -+/**************************************************************/ -+/* Fair scheduling class load-balancing methods: -+ */ -+ -+/* -+ * Load-balancing iterator. Note: while the runqueue stays locked -+ * during the whole iteration, the current task might be -+ * dequeued so the iterator has to be dequeue-safe. Here we -+ * achieve that by always pre-iterating before returning -+ * the current task: -+ */ -+static struct task_struct * load_balance_start_fair(struct rq *rq) -+{ -+ struct rb_node *first = first_fair(rq); -+ struct task_struct *p; -+ -+ if (!first) -+ return NULL; -+ -+ p = rb_entry(first, struct task_struct, run_node); -+ -+ rq->rb_load_balance_curr = rb_next(first); -+ -+ return p; -+} -+ -+static struct task_struct * load_balance_next_fair(struct rq *rq) -+{ -+ struct rb_node *curr = rq->rb_load_balance_curr; -+ struct task_struct *p; -+ -+ if (!curr) -+ return NULL; -+ -+ p = rb_entry(curr, struct task_struct, run_node); -+ rq->rb_load_balance_curr = rb_next(curr); -+ -+ return p; -+} -+ -+/* -+ * scheduler tick hitting a task of our scheduling class: -+ */ -+static void task_tick_fair(struct rq *rq, struct task_struct *curr) -+{ -+ struct task_struct *next; -+ u64 now = __rq_clock(rq); -+ -+ /* -+ * Dequeue and enqueue the task to update its -+ * position within the tree: -+ */ -+ dequeue_task_fair(rq, curr, 0, now); -+ curr->on_rq = 0; -+ enqueue_task_fair(rq, curr, 0, now); -+ curr->on_rq = 1; -+ -+ /* -+ * Reschedule if another task tops the current one. -+ */ -+ next = __pick_next_task_fair(rq); -+ if (next == curr) -+ return; -+ -+ if ((curr == rq->idle) || (rt_prio(next->prio) && -+ (next->prio < curr->prio))) -+ resched_task(curr); -+ else -+ __check_preempt_curr_fair(rq, next, curr, -+ sysctl_sched_granularity); -+} -+ -+/* -+ * Share the fairness runtime between parent and child, thus the -+ * total amount of pressure for CPU stays equal - new tasks -+ * get a chance to run but frequent forkers are not allowed to -+ * monopolize the CPU. Note: the parent runqueue is locked, -+ * the child is not running yet. -+ */ -+static void task_new_fair(struct rq *rq, struct task_struct *p) -+{ -+ sched_info_queued(p); -+ update_stats_enqueue(rq, p, rq_clock(rq)); -+ /* -+ * Child runs first: we let it run before the parent -+ * until it reschedules once. We set up the key so that -+ * it will preempt the parent: -+ */ -+ p->fair_key = current->fair_key - niced_granularity(rq, rq->curr, -+ sysctl_sched_granularity) - 1; -+ __enqueue_task_fair(rq, p); -+ p->on_rq = 1; -+ inc_nr_running(p, rq); -+} -+ -+/* -+ * All the scheduling class methods: -+ */ -+struct sched_class fair_sched_class __read_mostly = { -+ .enqueue_task = enqueue_task_fair, -+ .dequeue_task = dequeue_task_fair, -+ .yield_task = yield_task_fair, -+ -+ .check_preempt_curr = check_preempt_curr_fair, -+ -+ .pick_next_task = pick_next_task_fair, -+ .put_prev_task = put_prev_task_fair, -+ -+ .load_balance_start = load_balance_start_fair, -+ .load_balance_next = load_balance_next_fair, -+ .task_tick = task_tick_fair, -+ .task_new = task_new_fair, -+}; -Index: linux-cfs-2.6.20.8.q/kernel/sched_rt.c -=================================================================== ---- /dev/null -+++ linux-cfs-2.6.20.8.q/kernel/sched_rt.c -@@ -0,0 +1,184 @@ -+/* -+ * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR -+ * policies) -+ */ -+ -+static void -+enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup, u64 now) -+{ -+ struct prio_array *array = &rq->active; -+ -+ list_add_tail(&p->run_list, array->queue + p->prio); -+ __set_bit(p->prio, array->bitmap); -+} -+ -+/* -+ * Adding/removing a task to/from a priority array: -+ */ -+static void -+dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep, u64 now) -+{ -+ struct prio_array *array = &rq->active; -+ -+ list_del(&p->run_list); -+ if (list_empty(array->queue + p->prio)) -+ __clear_bit(p->prio, array->bitmap); -+} -+ -+/* -+ * Put task to the end of the run list without the overhead of dequeue -+ * followed by enqueue. -+ */ -+static void requeue_task_rt(struct rq *rq, struct task_struct *p) -+{ -+ struct prio_array *array = &rq->active; -+ -+ list_move_tail(&p->run_list, array->queue + p->prio); -+} -+ -+static void -+yield_task_rt(struct rq *rq, struct task_struct *p, struct task_struct *p_to) -+{ -+ requeue_task_rt(rq, p); -+} -+ -+/* -+ * Preempt the current task with a newly woken task if needed: -+ */ -+static void check_preempt_curr_rt(struct rq *rq, struct task_struct *p) -+{ -+ if (p->prio < rq->curr->prio) -+ resched_task(rq->curr); -+} -+ -+static struct task_struct * pick_next_task_rt(struct rq *rq, u64 now) -+{ -+ struct prio_array *array = &rq->active; -+ struct list_head *queue; -+ int idx; -+ -+ idx = sched_find_first_bit(array->bitmap); -+ if (idx >= MAX_RT_PRIO) -+ return NULL; -+ -+ queue = array->queue + idx; -+ return list_entry(queue->next, struct task_struct, run_list); -+} -+ -+/* -+ * No accounting done when RT tasks are descheduled: -+ */ -+static void put_prev_task_rt(struct rq *rq, struct task_struct *p, u64 now) -+{ -+} -+ -+/* -+ * Load-balancing iterator. Note: while the runqueue stays locked -+ * during the whole iteration, the current task might be -+ * dequeued so the iterator has to be dequeue-safe. Here we -+ * achieve that by always pre-iterating before returning -+ * the current task: -+ */ -+static struct task_struct * load_balance_start_rt(struct rq *rq) -+{ -+ struct prio_array *array = &rq->active; -+ struct list_head *head, *curr; -+ struct task_struct *p; -+ int idx; -+ -+ idx = sched_find_first_bit(array->bitmap); -+ if (idx >= MAX_RT_PRIO) -+ return NULL; -+ -+ head = array->queue + idx; -+ curr = head->prev; -+ -+ p = list_entry(curr, struct task_struct, run_list); -+ -+ curr = curr->prev; -+ -+ rq->rt_load_balance_idx = idx; -+ rq->rt_load_balance_head = head; -+ rq->rt_load_balance_curr = curr; -+ -+ return p; -+} -+ -+static struct task_struct * load_balance_next_rt(struct rq *rq) -+{ -+ struct prio_array *array = &rq->active; -+ struct list_head *head, *curr; -+ struct task_struct *p; -+ int idx; -+ -+ idx = rq->rt_load_balance_idx; -+ head = rq->rt_load_balance_head; -+ curr = rq->rt_load_balance_curr; -+ -+ /* -+ * If we arrived back to the head again then -+ * iterate to the next queue (if any): -+ */ -+ if (unlikely(head == curr)) { -+ int next_idx = find_next_bit(array->bitmap, MAX_RT_PRIO, idx+1); -+ -+ if (next_idx >= MAX_RT_PRIO) -+ return NULL; -+ -+ idx = next_idx; -+ head = array->queue + idx; -+ curr = head->prev; -+ -+ rq->rt_load_balance_idx = idx; -+ rq->rt_load_balance_head = head; -+ } -+ -+ p = list_entry(curr, struct task_struct, run_list); -+ -+ curr = curr->prev; -+ -+ rq->rt_load_balance_curr = curr; -+ -+ return p; -+} -+ -+static void task_tick_rt(struct rq *rq, struct task_struct *p) -+{ -+ /* -+ * RR tasks need a special form of timeslice management. -+ * FIFO tasks have no timeslices. -+ */ -+ if ((p->policy == SCHED_RR) && !--p->time_slice) { -+ p->time_slice = static_prio_timeslice(p->static_prio); -+ set_tsk_need_resched(p); -+ -+ /* put it at the end of the queue: */ -+ requeue_task_rt(rq, p); -+ } -+} -+ -+/* -+ * No parent/child timeslice management necessary for RT tasks, -+ * just activate them: -+ */ -+static void task_new_rt(struct rq *rq, struct task_struct *p) -+{ -+ activate_task(rq, p, 1); -+} -+ -+static struct sched_class rt_sched_class __read_mostly = { -+ .enqueue_task = enqueue_task_rt, -+ .dequeue_task = dequeue_task_rt, -+ .yield_task = yield_task_rt, -+ -+ .check_preempt_curr = check_preempt_curr_rt, -+ -+ .pick_next_task = pick_next_task_rt, -+ .put_prev_task = put_prev_task_rt, -+ -+ .load_balance_start = load_balance_start_rt, -+ .load_balance_next = load_balance_next_rt, -+ -+ .task_tick = task_tick_rt, -+ .task_new = task_new_rt, -+}; -Index: linux-cfs-2.6.20.8.q/kernel/sched_stats.h -=================================================================== ---- /dev/null -+++ linux-cfs-2.6.20.8.q/kernel/sched_stats.h -@@ -0,0 +1,235 @@ -+ -+#ifdef CONFIG_SCHEDSTATS -+/* -+ * bump this up when changing the output format or the meaning of an existing -+ * format, so that tools can adapt (or abort) -+ */ -+#define SCHEDSTAT_VERSION 14 -+ -+static int show_schedstat(struct seq_file *seq, void *v) -+{ -+ int cpu; -+ -+ seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION); -+ seq_printf(seq, "timestamp %lu\n", jiffies); -+ for_each_online_cpu(cpu) { -+ struct rq *rq = cpu_rq(cpu); -+#ifdef CONFIG_SMP -+ struct sched_domain *sd; -+ int dcnt = 0; -+#endif -+ -+ /* runqueue-specific stats */ -+ seq_printf(seq, -+ "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", -+ cpu, rq->yld_both_empty, -+ rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt, -+ rq->sched_switch, rq->sched_cnt, rq->sched_goidle, -+ rq->ttwu_cnt, rq->ttwu_local, -+ rq->rq_sched_info.cpu_time, -+ rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt); -+ -+ seq_printf(seq, "\n"); -+ -+#ifdef CONFIG_SMP -+ /* domain-specific stats */ -+ preempt_disable(); -+ for_each_domain(cpu, sd) { -+ enum idle_type itype; -+ char mask_str[NR_CPUS]; -+ -+ cpumask_scnprintf(mask_str, NR_CPUS, sd->span); -+ seq_printf(seq, "domain%d %s", dcnt++, mask_str); -+ for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES; -+ itype++) { -+ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu " -+ "%lu", -+ sd->lb_cnt[itype], -+ sd->lb_balanced[itype], -+ sd->lb_failed[itype], -+ sd->lb_imbalance[itype], -+ sd->lb_gained[itype], -+ sd->lb_hot_gained[itype], -+ sd->lb_nobusyq[itype], -+ sd->lb_nobusyg[itype]); -+ } -+ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu" -+ " %lu %lu %lu\n", -+ sd->alb_cnt, sd->alb_failed, sd->alb_pushed, -+ sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed, -+ sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed, -+ sd->ttwu_wake_remote, sd->ttwu_move_affine, -+ sd->ttwu_move_balance); -+ } -+ preempt_enable(); -+#endif -+ } -+ return 0; -+} -+ -+static int schedstat_open(struct inode *inode, struct file *file) -+{ -+ unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32); -+ char *buf = kmalloc(size, GFP_KERNEL); -+ struct seq_file *m; -+ int res; -+ -+ if (!buf) -+ return -ENOMEM; -+ res = single_open(file, show_schedstat, NULL); -+ if (!res) { -+ m = file->private_data; -+ m->buf = buf; -+ m->size = size; -+ } else -+ kfree(buf); -+ return res; -+} -+ -+const struct file_operations proc_schedstat_operations = { -+ .open = schedstat_open, -+ .read = seq_read, -+ .llseek = seq_lseek, -+ .release = single_release, -+}; -+ -+/* -+ * Expects runqueue lock to be held for atomicity of update -+ */ -+static inline void -+rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) -+{ -+ if (rq) { -+ rq->rq_sched_info.run_delay += delta_jiffies; -+ rq->rq_sched_info.pcnt++; -+ } -+} -+ -+/* -+ * Expects runqueue lock to be held for atomicity of update -+ */ -+static inline void -+rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) -+{ -+ if (rq) -+ rq->rq_sched_info.cpu_time += delta_jiffies; -+} -+# define schedstat_inc(rq, field) do { (rq)->field++; } while (0) -+# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0) -+#else /* !CONFIG_SCHEDSTATS */ -+static inline void -+rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) -+{} -+static inline void -+rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) -+{} -+# define schedstat_inc(rq, field) do { } while (0) -+# define schedstat_add(rq, field, amt) do { } while (0) -+#endif -+ -+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) -+/* -+ * Called when a process is dequeued from the active array and given -+ * the cpu. We should note that with the exception of interactive -+ * tasks, the expired queue will become the active queue after the active -+ * queue is empty, without explicitly dequeuing and requeuing tasks in the -+ * expired queue. (Interactive tasks may be requeued directly to the -+ * active queue, thus delaying tasks in the expired queue from running; -+ * see scheduler_tick()). -+ * -+ * This function is only called from sched_info_arrive(), rather than -+ * dequeue_task(). Even though a task may be queued and dequeued multiple -+ * times as it is shuffled about, we're really interested in knowing how -+ * long it was from the *first* time it was queued to the time that it -+ * finally hit a cpu. -+ */ -+static inline void sched_info_dequeued(struct task_struct *t) -+{ -+ t->sched_info.last_queued = 0; -+} -+ -+/* -+ * Called when a task finally hits the cpu. We can now calculate how -+ * long it was waiting to run. We also note when it began so that we -+ * can keep stats on how long its timeslice is. -+ */ -+static void sched_info_arrive(struct task_struct *t) -+{ -+ unsigned long now = jiffies, delta_jiffies = 0; -+ -+ if (t->sched_info.last_queued) -+ delta_jiffies = now - t->sched_info.last_queued; -+ sched_info_dequeued(t); -+ t->sched_info.run_delay += delta_jiffies; -+ t->sched_info.last_arrival = now; -+ t->sched_info.pcnt++; -+ -+ rq_sched_info_arrive(task_rq(t), delta_jiffies); -+} -+ -+/* -+ * Called when a process is queued into either the active or expired -+ * array. The time is noted and later used to determine how long we -+ * had to wait for us to reach the cpu. Since the expired queue will -+ * become the active queue after active queue is empty, without dequeuing -+ * and requeuing any tasks, we are interested in queuing to either. It -+ * is unusual but not impossible for tasks to be dequeued and immediately -+ * requeued in the same or another array: this can happen in sched_yield(), -+ * set_user_nice(), and even load_balance() as it moves tasks from runqueue -+ * to runqueue. -+ * -+ * This function is only called from enqueue_task(), but also only updates -+ * the timestamp if it is already not set. It's assumed that -+ * sched_info_dequeued() will clear that stamp when appropriate. -+ */ -+static inline void sched_info_queued(struct task_struct *t) -+{ -+ if (unlikely(sched_info_on())) -+ if (!t->sched_info.last_queued) -+ t->sched_info.last_queued = jiffies; -+} -+ -+/* -+ * Called when a process ceases being the active-running process, either -+ * voluntarily or involuntarily. Now we can calculate how long we ran. -+ */ -+static inline void sched_info_depart(struct task_struct *t) -+{ -+ unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival; -+ -+ t->sched_info.cpu_time += delta_jiffies; -+ rq_sched_info_depart(task_rq(t), delta_jiffies); -+} -+ -+/* -+ * Called when tasks are switched involuntarily due, typically, to expiring -+ * their time slice. (This may also be called when switching to or from -+ * the idle task.) We are only called when prev != next. -+ */ -+static inline void -+__sched_info_switch(struct task_struct *prev, struct task_struct *next) -+{ -+ struct rq *rq = task_rq(prev); -+ -+ /* -+ * prev now departs the cpu. It's not interesting to record -+ * stats about how efficient we were at scheduling the idle -+ * process, however. -+ */ -+ if (prev != rq->idle) -+ sched_info_depart(prev); -+ -+ if (next != rq->idle) -+ sched_info_arrive(next); -+} -+static inline void -+sched_info_switch(struct task_struct *prev, struct task_struct *next) -+{ -+ if (unlikely(sched_info_on())) -+ __sched_info_switch(prev, next); -+} -+#else -+#define sched_info_queued(t) do { } while (0) -+#define sched_info_switch(t, next) do { } while (0) -+#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ -+ -Index: linux-cfs-2.6.20.8.q/kernel/sysctl.c -=================================================================== ---- linux-cfs-2.6.20.8.q.orig/kernel/sysctl.c -+++ linux-cfs-2.6.20.8.q/kernel/sysctl.c -@@ -320,6 +320,46 @@ static ctl_table kern_table[] = { - .strategy = &sysctl_uts_string, - }, - { -+ .ctl_name = CTL_UNNUMBERED, -+ .procname = "sched_granularity_ns", -+ .data = &sysctl_sched_granularity, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = &proc_dointvec, -+ }, -+ { -+ .ctl_name = CTL_UNNUMBERED, -+ .procname = "sched_wakeup_granularity_ns", -+ .data = &sysctl_sched_wakeup_granularity, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = &proc_dointvec, -+ }, -+ { -+ .ctl_name = CTL_UNNUMBERED, -+ .procname = "sched_sleep_history_max_ns", -+ .data = &sysctl_sched_sleep_history_max, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = &proc_dointvec, -+ }, -+ { -+ .ctl_name = CTL_UNNUMBERED, -+ .procname = "sched_child_runs_first", -+ .data = &sysctl_sched_child_runs_first, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = &proc_dointvec, -+ }, -+ { -+ .ctl_name = CTL_UNNUMBERED, -+ .procname = "sched_load_smoothing", -+ .data = &sysctl_sched_load_smoothing, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = &proc_dointvec, -+ }, -+ { - .ctl_name = KERN_PANIC, - .procname = "panic", - .data = &panic_timeout, diff --git a/packages/linux/linux-efika-2.6.20.20/.mtn2git_empty b/packages/linux/linux-efika-2.6.20.20/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-efika-2.6.20.20/sched-cfs-v9-v2.6.20.11.patch b/packages/linux/linux-efika-2.6.20.20/sched-cfs-v9-v2.6.20.11.patch new file mode 100644 index 0000000000..29071a99ac --- /dev/null +++ b/packages/linux/linux-efika-2.6.20.20/sched-cfs-v9-v2.6.20.11.patch @@ -0,0 +1,5590 @@ +This is the Complete Fair Scheduler (CFS) v9 patch for +linux 2.6.20.10 patch (rediffed cleanly against .11). + +http://people.redhat.com/mingo/cfs-scheduler/ + +Index: linux-cfs-2.6.20.8.q/Documentation/kernel-parameters.txt +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/Documentation/kernel-parameters.txt ++++ linux-cfs-2.6.20.8.q/Documentation/kernel-parameters.txt +@@ -914,49 +914,6 @@ and is between 256 and 4096 characters. + + mga= [HW,DRM] + +- migration_cost= +- [KNL,SMP] debug: override scheduler migration costs +- Format: ,,... +- This debugging option can be used to override the +- default scheduler migration cost matrix. The numbers +- are indexed by 'CPU domain distance'. +- E.g. migration_cost=1000,2000,3000 on an SMT NUMA +- box will set up an intra-core migration cost of +- 1 msec, an inter-core migration cost of 2 msecs, +- and an inter-node migration cost of 3 msecs. +- +- WARNING: using the wrong values here can break +- scheduler performance, so it's only for scheduler +- development purposes, not production environments. +- +- migration_debug= +- [KNL,SMP] migration cost auto-detect verbosity +- Format=<0|1|2> +- If a system's migration matrix reported at bootup +- seems erroneous then this option can be used to +- increase verbosity of the detection process. +- We default to 0 (no extra messages), 1 will print +- some more information, and 2 will be really +- verbose (probably only useful if you also have a +- serial console attached to the system). +- +- migration_factor= +- [KNL,SMP] multiply/divide migration costs by a factor +- Format= +- This debug option can be used to proportionally +- increase or decrease the auto-detected migration +- costs for all entries of the migration matrix. +- E.g. migration_factor=150 will increase migration +- costs by 50%. (and thus the scheduler will be less +- eager migrating cache-hot tasks) +- migration_factor=80 will decrease migration costs +- by 20%. (thus the scheduler will be more eager to +- migrate tasks) +- +- WARNING: using the wrong values here can break +- scheduler performance, so it's only for scheduler +- development purposes, not production environments. +- + mousedev.tap_time= + [MOUSE] Maximum time between finger touching and + leaving touchpad surface for touch to be considered +Index: linux-cfs-2.6.20.8.q/Documentation/sched-design-CFS.txt +=================================================================== +--- /dev/null ++++ linux-cfs-2.6.20.8.q/Documentation/sched-design-CFS.txt +@@ -0,0 +1,107 @@ ++[announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] ++ ++i'm pleased to announce the first release of the "Modular Scheduler Core ++and Completely Fair Scheduler [CFS]" patchset: ++ ++ http://redhat.com/~mingo/cfs-scheduler/ ++ ++This project is a complete rewrite of the Linux task scheduler. My goal ++is to address various feature requests and to fix deficiencies in the ++vanilla scheduler that were suggested/found in the past few years, both ++for desktop scheduling and for server scheduling workloads. ++ ++[ QuickStart: apply the patch, recompile, reboot. The new scheduler ++ will be active by default and all tasks will default to the ++ SCHED_NORMAL interactive scheduling class. ] ++ ++Highlights are: ++ ++ - the introduction of Scheduling Classes: an extensible hierarchy of ++ scheduler modules. These modules encapsulate scheduling policy ++ details and are handled by the scheduler core without the core ++ code assuming about them too much. ++ ++ - sched_fair.c implements the 'CFS desktop scheduler': it is a ++ replacement for the vanilla scheduler's SCHED_OTHER interactivity ++ code. ++ ++ i'd like to give credit to Con Kolivas for the general approach here: ++ he has proven via RSDL/SD that 'fair scheduling' is possible and that ++ it results in better desktop scheduling. Kudos Con! ++ ++ The CFS patch uses a completely different approach and implementation ++ from RSDL/SD. My goal was to make CFS's interactivity quality exceed ++ that of RSDL/SD, which is a high standard to meet :-) Testing ++ feedback is welcome to decide this one way or another. [ and, in any ++ case, all of SD's logic could be added via a kernel/sched_sd.c module ++ as well, if Con is interested in such an approach. ] ++ ++ CFS's design is quite radical: it does not use runqueues, it uses a ++ time-ordered rbtree to build a 'timeline' of future task execution, ++ and thus has no 'array switch' artifacts (by which both the vanilla ++ scheduler and RSDL/SD are affected). ++ ++ CFS uses nanosecond granularity accounting and does not rely on any ++ jiffies or other HZ detail. Thus the CFS scheduler has no notion of ++ 'timeslices' and has no heuristics whatsoever. There is only one ++ central tunable: ++ ++ /proc/sys/kernel/sched_granularity_ns ++ ++ which can be used to tune the scheduler from 'desktop' (low ++ latencies) to 'server' (good batching) workloads. It defaults to a ++ setting suitable for desktop workloads. SCHED_BATCH is handled by the ++ CFS scheduler module too. ++ ++ due to its design, the CFS scheduler is not prone to any of the ++ 'attacks' that exist today against the heuristics of the stock ++ scheduler: fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c all ++ work fine and do not impact interactivity and produce the expected ++ behavior. ++ ++ the CFS scheduler has a much stronger handling of nice levels and ++ SCHED_BATCH: both types of workloads should be isolated much more ++ agressively than under the vanilla scheduler. ++ ++ ( another rdetail: due to nanosec accounting and timeline sorting, ++ sched_yield() support is very simple under CFS, and in fact under ++ CFS sched_yield() behaves much better than under any other ++ scheduler i have tested so far. ) ++ ++ - sched_rt.c implements SCHED_FIFO and SCHED_RR semantics, in a simpler ++ way than the vanilla scheduler does. It uses 100 runqueues (for all ++ 100 RT priority levels, instead of 140 in the vanilla scheduler) ++ and it needs no expired array. ++ ++ - reworked/sanitized SMP load-balancing: the runqueue-walking ++ assumptions are gone from the load-balancing code now, and ++ iterators of the scheduling modules are used. The balancing code got ++ quite a bit simpler as a result. ++ ++the core scheduler got smaller by more than 700 lines: ++ ++ kernel/sched.c | 1454 ++++++++++++++++------------------------------------------------ ++ 1 file changed, 372 insertions(+), 1082 deletions(-) ++ ++and even adding all the scheduling modules, the total size impact is ++relatively small: ++ ++ 18 files changed, 1454 insertions(+), 1133 deletions(-) ++ ++most of the increase is due to extensive comments. The kernel size ++impact is in fact a small negative: ++ ++ text data bss dec hex filename ++ 23366 4001 24 27391 6aff kernel/sched.o.vanilla ++ 24159 2705 56 26920 6928 kernel/sched.o.CFS ++ ++(this is mainly due to the benefit of getting rid of the expired array ++and its data structure overhead.) ++ ++thanks go to Thomas Gleixner and Arjan van de Ven for review of this ++patchset. ++ ++as usual, any sort of feedback, bugreports, fixes and suggestions are ++more than welcome, ++ ++ Ingo +Index: linux-cfs-2.6.20.8.q/Makefile +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/Makefile ++++ linux-cfs-2.6.20.8.q/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 20 +-EXTRAVERSION = .11 ++EXTRAVERSION = .11-cfs-v9 + NAME = Homicidal Dwarf Hamster + + # *DOCUMENTATION* +Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/smpboot.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/smpboot.c ++++ linux-cfs-2.6.20.8.q/arch/i386/kernel/smpboot.c +@@ -1132,18 +1132,6 @@ exit: + } + #endif + +-static void smp_tune_scheduling(void) +-{ +- unsigned long cachesize; /* kB */ +- +- if (cpu_khz) { +- cachesize = boot_cpu_data.x86_cache_size; +- +- if (cachesize > 0) +- max_cache_size = cachesize * 1024; +- } +-} +- + /* + * Cycle through the processors sending APIC IPIs to boot each. + */ +@@ -1172,7 +1160,6 @@ static void __init smp_boot_cpus(unsigne + x86_cpu_to_apicid[0] = boot_cpu_physical_apicid; + + current_thread_info()->cpu = 0; +- smp_tune_scheduling(); + + set_cpu_sibling_map(0); + +Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/syscall_table.S +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/syscall_table.S ++++ linux-cfs-2.6.20.8.q/arch/i386/kernel/syscall_table.S +@@ -319,3 +319,4 @@ ENTRY(sys_call_table) + .long sys_move_pages + .long sys_getcpu + .long sys_epoll_pwait ++ .long sys_sched_yield_to /* 320 */ +Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/tsc.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/tsc.c ++++ linux-cfs-2.6.20.8.q/arch/i386/kernel/tsc.c +@@ -61,6 +61,8 @@ static inline int check_tsc_unstable(voi + + void mark_tsc_unstable(void) + { ++ sched_clock_unstable_event(); ++ + tsc_unstable = 1; + } + EXPORT_SYMBOL_GPL(mark_tsc_unstable); +@@ -107,13 +109,7 @@ unsigned long long sched_clock(void) + { + unsigned long long this_offset; + +- /* +- * in the NUMA case we dont use the TSC as they are not +- * synchronized across all CPUs. +- */ +-#ifndef CONFIG_NUMA +- if (!cpu_khz || check_tsc_unstable()) +-#endif ++ if (!cpu_khz || !cpu_has_tsc) + /* no locking but a rare wrong value is not a big deal */ + return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ); + +Index: linux-cfs-2.6.20.8.q/arch/ia64/kernel/setup.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/ia64/kernel/setup.c ++++ linux-cfs-2.6.20.8.q/arch/ia64/kernel/setup.c +@@ -773,7 +773,6 @@ static void __cpuinit + get_max_cacheline_size (void) + { + unsigned long line_size, max = 1; +- unsigned int cache_size = 0; + u64 l, levels, unique_caches; + pal_cache_config_info_t cci; + s64 status; +@@ -803,8 +802,6 @@ get_max_cacheline_size (void) + line_size = 1 << cci.pcci_line_size; + if (line_size > max) + max = line_size; +- if (cache_size < cci.pcci_cache_size) +- cache_size = cci.pcci_cache_size; + if (!cci.pcci_unified) { + status = ia64_pal_cache_config_info(l, + /* cache_type (instruction)= */ 1, +@@ -821,9 +818,6 @@ get_max_cacheline_size (void) + ia64_i_cache_stride_shift = cci.pcci_stride; + } + out: +-#ifdef CONFIG_SMP +- max_cache_size = max(max_cache_size, cache_size); +-#endif + if (max > ia64_max_cacheline_size) + ia64_max_cacheline_size = max; + } +Index: linux-cfs-2.6.20.8.q/arch/mips/kernel/smp.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/mips/kernel/smp.c ++++ linux-cfs-2.6.20.8.q/arch/mips/kernel/smp.c +@@ -245,7 +245,6 @@ void __init smp_prepare_cpus(unsigned in + { + init_new_context(current, &init_mm); + current_thread_info()->cpu = 0; +- smp_tune_scheduling(); + plat_prepare_cpus(max_cpus); + #ifndef CONFIG_HOTPLUG_CPU + cpu_present_map = cpu_possible_map; +Index: linux-cfs-2.6.20.8.q/arch/sparc/kernel/smp.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/sparc/kernel/smp.c ++++ linux-cfs-2.6.20.8.q/arch/sparc/kernel/smp.c +@@ -69,16 +69,6 @@ void __cpuinit smp_store_cpu_info(int id + cpu_data(id).prom_node = cpu_node; + cpu_data(id).mid = cpu_get_hwmid(cpu_node); + +- /* this is required to tune the scheduler correctly */ +- /* is it possible to have CPUs with different cache sizes? */ +- if (id == boot_cpu_id) { +- int cache_line,cache_nlines; +- cache_line = 0x20; +- cache_line = prom_getintdefault(cpu_node, "ecache-line-size", cache_line); +- cache_nlines = 0x8000; +- cache_nlines = prom_getintdefault(cpu_node, "ecache-nlines", cache_nlines); +- max_cache_size = cache_line * cache_nlines; +- } + if (cpu_data(id).mid < 0) + panic("No MID found for CPU%d at node 0x%08d", id, cpu_node); + } +Index: linux-cfs-2.6.20.8.q/arch/sparc64/kernel/smp.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/arch/sparc64/kernel/smp.c ++++ linux-cfs-2.6.20.8.q/arch/sparc64/kernel/smp.c +@@ -1293,41 +1293,6 @@ int setup_profiling_timer(unsigned int m + return 0; + } + +-static void __init smp_tune_scheduling(void) +-{ +- struct device_node *dp; +- int instance; +- unsigned int def, smallest = ~0U; +- +- def = ((tlb_type == hypervisor) ? +- (3 * 1024 * 1024) : +- (4 * 1024 * 1024)); +- +- instance = 0; +- while (!cpu_find_by_instance(instance, &dp, NULL)) { +- unsigned int val; +- +- val = of_getintprop_default(dp, "ecache-size", def); +- if (val < smallest) +- smallest = val; +- +- instance++; +- } +- +- /* Any value less than 256K is nonsense. */ +- if (smallest < (256U * 1024U)) +- smallest = 256 * 1024; +- +- max_cache_size = smallest; +- +- if (smallest < 1U * 1024U * 1024U) +- printk(KERN_INFO "Using max_cache_size of %uKB\n", +- smallest / 1024U); +- else +- printk(KERN_INFO "Using max_cache_size of %uMB\n", +- smallest / 1024U / 1024U); +-} +- + /* Constrain the number of cpus to max_cpus. */ + void __init smp_prepare_cpus(unsigned int max_cpus) + { +@@ -1363,7 +1328,6 @@ void __init smp_prepare_cpus(unsigned in + } + + smp_store_cpu_info(boot_cpu_id); +- smp_tune_scheduling(); + } + + /* Set this up early so that things like the scheduler can init +Index: linux-cfs-2.6.20.8.q/fs/proc/array.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/fs/proc/array.c ++++ linux-cfs-2.6.20.8.q/fs/proc/array.c +@@ -165,7 +165,6 @@ static inline char * task_state(struct t + rcu_read_lock(); + buffer += sprintf(buffer, + "State:\t%s\n" +- "SleepAVG:\t%lu%%\n" + "Tgid:\t%d\n" + "Pid:\t%d\n" + "PPid:\t%d\n" +@@ -173,9 +172,8 @@ static inline char * task_state(struct t + "Uid:\t%d\t%d\t%d\t%d\n" + "Gid:\t%d\t%d\t%d\t%d\n", + get_task_state(p), +- (p->sleep_avg/1024)*100/(1020000000/1024), +- p->tgid, p->pid, +- pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, ++ p->tgid, p->pid, ++ pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, + pid_alive(p) && p->ptrace ? rcu_dereference(p->parent)->pid : 0, + p->uid, p->euid, p->suid, p->fsuid, + p->gid, p->egid, p->sgid, p->fsgid); +@@ -312,6 +310,11 @@ int proc_pid_status(struct task_struct * + return buffer - orig; + } + ++int proc_pid_sched(struct task_struct *task, char *buffer) ++{ ++ return sched_print_task_state(task, buffer) - buffer; ++} ++ + static int do_task_stat(struct task_struct *task, char * buffer, int whole) + { + unsigned long vsize, eip, esp, wchan = ~0UL; +Index: linux-cfs-2.6.20.8.q/fs/proc/base.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/fs/proc/base.c ++++ linux-cfs-2.6.20.8.q/fs/proc/base.c +@@ -1839,6 +1839,7 @@ static struct pid_entry tgid_base_stuff[ + INF("environ", S_IRUSR, pid_environ), + INF("auxv", S_IRUSR, pid_auxv), + INF("status", S_IRUGO, pid_status), ++ INF("sched", S_IRUGO, pid_sched), + INF("cmdline", S_IRUGO, pid_cmdline), + INF("stat", S_IRUGO, tgid_stat), + INF("statm", S_IRUGO, pid_statm), +@@ -2121,6 +2122,7 @@ static struct pid_entry tid_base_stuff[] + INF("environ", S_IRUSR, pid_environ), + INF("auxv", S_IRUSR, pid_auxv), + INF("status", S_IRUGO, pid_status), ++ INF("sched", S_IRUGO, pid_sched), + INF("cmdline", S_IRUGO, pid_cmdline), + INF("stat", S_IRUGO, tid_stat), + INF("statm", S_IRUGO, pid_statm), +Index: linux-cfs-2.6.20.8.q/fs/proc/internal.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/fs/proc/internal.h ++++ linux-cfs-2.6.20.8.q/fs/proc/internal.h +@@ -36,6 +36,7 @@ extern int proc_exe_link(struct inode *, + extern int proc_tid_stat(struct task_struct *, char *); + extern int proc_tgid_stat(struct task_struct *, char *); + extern int proc_pid_status(struct task_struct *, char *); ++extern int proc_pid_sched(struct task_struct *, char *); + extern int proc_pid_statm(struct task_struct *, char *); + + extern struct file_operations proc_maps_operations; +Index: linux-cfs-2.6.20.8.q/include/asm-generic/bitops/sched.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-generic/bitops/sched.h ++++ linux-cfs-2.6.20.8.q/include/asm-generic/bitops/sched.h +@@ -6,28 +6,23 @@ + + /* + * Every architecture must define this function. It's the fastest +- * way of searching a 140-bit bitmap where the first 100 bits are +- * unlikely to be set. It's guaranteed that at least one of the 140 +- * bits is cleared. ++ * way of searching a 100-bit bitmap. It's guaranteed that at least ++ * one of the 100 bits is cleared. + */ + static inline int sched_find_first_bit(const unsigned long *b) + { + #if BITS_PER_LONG == 64 +- if (unlikely(b[0])) ++ if (b[0]) + return __ffs(b[0]); +- if (likely(b[1])) +- return __ffs(b[1]) + 64; +- return __ffs(b[2]) + 128; ++ return __ffs(b[1]) + 64; + #elif BITS_PER_LONG == 32 +- if (unlikely(b[0])) ++ if (b[0]) + return __ffs(b[0]); +- if (unlikely(b[1])) ++ if (b[1]) + return __ffs(b[1]) + 32; +- if (unlikely(b[2])) ++ if (b[2]) + return __ffs(b[2]) + 64; +- if (b[3]) +- return __ffs(b[3]) + 96; +- return __ffs(b[4]) + 128; ++ return __ffs(b[3]) + 96; + #else + #error BITS_PER_LONG not defined + #endif +Index: linux-cfs-2.6.20.8.q/include/asm-i386/topology.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-i386/topology.h ++++ linux-cfs-2.6.20.8.q/include/asm-i386/topology.h +@@ -85,7 +85,6 @@ static inline int node_to_first_cpu(int + .idle_idx = 1, \ + .newidle_idx = 2, \ + .wake_idx = 1, \ +- .per_cpu_gain = 100, \ + .flags = SD_LOAD_BALANCE \ + | SD_BALANCE_EXEC \ + | SD_BALANCE_FORK \ +Index: linux-cfs-2.6.20.8.q/include/asm-i386/unistd.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-i386/unistd.h ++++ linux-cfs-2.6.20.8.q/include/asm-i386/unistd.h +@@ -325,10 +325,11 @@ + #define __NR_move_pages 317 + #define __NR_getcpu 318 + #define __NR_epoll_pwait 319 ++#define __NR_sched_yield_to 320 + + #ifdef __KERNEL__ + +-#define NR_syscalls 320 ++#define NR_syscalls 321 + + #define __ARCH_WANT_IPC_PARSE_VERSION + #define __ARCH_WANT_OLD_READDIR +Index: linux-cfs-2.6.20.8.q/include/asm-ia64/topology.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-ia64/topology.h ++++ linux-cfs-2.6.20.8.q/include/asm-ia64/topology.h +@@ -65,7 +65,6 @@ void build_cpu_to_node_map(void); + .max_interval = 4, \ + .busy_factor = 64, \ + .imbalance_pct = 125, \ +- .per_cpu_gain = 100, \ + .cache_nice_tries = 2, \ + .busy_idx = 2, \ + .idle_idx = 1, \ +@@ -97,7 +96,6 @@ void build_cpu_to_node_map(void); + .newidle_idx = 0, /* unused */ \ + .wake_idx = 1, \ + .forkexec_idx = 1, \ +- .per_cpu_gain = 100, \ + .flags = SD_LOAD_BALANCE \ + | SD_BALANCE_EXEC \ + | SD_BALANCE_FORK \ +Index: linux-cfs-2.6.20.8.q/include/asm-mips/mach-ip27/topology.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-mips/mach-ip27/topology.h ++++ linux-cfs-2.6.20.8.q/include/asm-mips/mach-ip27/topology.h +@@ -28,7 +28,6 @@ extern unsigned char __node_distances[MA + .busy_factor = 32, \ + .imbalance_pct = 125, \ + .cache_nice_tries = 1, \ +- .per_cpu_gain = 100, \ + .flags = SD_LOAD_BALANCE \ + | SD_BALANCE_EXEC \ + | SD_WAKE_BALANCE, \ +Index: linux-cfs-2.6.20.8.q/include/asm-powerpc/topology.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-powerpc/topology.h ++++ linux-cfs-2.6.20.8.q/include/asm-powerpc/topology.h +@@ -57,7 +57,6 @@ static inline int pcibus_to_node(struct + .busy_factor = 32, \ + .imbalance_pct = 125, \ + .cache_nice_tries = 1, \ +- .per_cpu_gain = 100, \ + .busy_idx = 3, \ + .idle_idx = 1, \ + .newidle_idx = 2, \ +Index: linux-cfs-2.6.20.8.q/include/asm-x86_64/topology.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-x86_64/topology.h ++++ linux-cfs-2.6.20.8.q/include/asm-x86_64/topology.h +@@ -43,7 +43,6 @@ extern int __node_distance(int, int); + .newidle_idx = 0, \ + .wake_idx = 1, \ + .forkexec_idx = 1, \ +- .per_cpu_gain = 100, \ + .flags = SD_LOAD_BALANCE \ + | SD_BALANCE_FORK \ + | SD_BALANCE_EXEC \ +Index: linux-cfs-2.6.20.8.q/include/asm-x86_64/unistd.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/asm-x86_64/unistd.h ++++ linux-cfs-2.6.20.8.q/include/asm-x86_64/unistd.h +@@ -619,8 +619,10 @@ __SYSCALL(__NR_sync_file_range, sys_sync + __SYSCALL(__NR_vmsplice, sys_vmsplice) + #define __NR_move_pages 279 + __SYSCALL(__NR_move_pages, sys_move_pages) ++#define __NR_sched_yield_to 280 ++__SYSCALL(__NR_sched_yield_to, sys_sched_yield_to) + +-#define __NR_syscall_max __NR_move_pages ++#define __NR_syscall_max __NR_sched_yield_to + + #ifndef __NO_STUBS + #define __ARCH_WANT_OLD_READDIR +Index: linux-cfs-2.6.20.8.q/include/linux/hardirq.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/linux/hardirq.h ++++ linux-cfs-2.6.20.8.q/include/linux/hardirq.h +@@ -79,6 +79,19 @@ + #endif + + #ifdef CONFIG_PREEMPT ++# define PREEMPT_CHECK_OFFSET 1 ++#else ++# define PREEMPT_CHECK_OFFSET 0 ++#endif ++ ++/* ++ * Check whether we were atomic before we did preempt_disable(): ++ * (used by the scheduler) ++ */ ++#define in_atomic_preempt_off() \ ++ ((preempt_count() & ~PREEMPT_ACTIVE) != PREEMPT_CHECK_OFFSET) ++ ++#ifdef CONFIG_PREEMPT + # define preemptible() (preempt_count() == 0 && !irqs_disabled()) + # define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1) + #else +Index: linux-cfs-2.6.20.8.q/include/linux/ktime.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/linux/ktime.h ++++ linux-cfs-2.6.20.8.q/include/linux/ktime.h +@@ -274,4 +274,6 @@ extern void ktime_get_ts(struct timespec + /* Get the real (wall-) time in timespec format: */ + #define ktime_get_real_ts(ts) getnstimeofday(ts) + ++extern ktime_t ktime_get(void); ++ + #endif +Index: linux-cfs-2.6.20.8.q/include/linux/sched.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/linux/sched.h ++++ linux-cfs-2.6.20.8.q/include/linux/sched.h +@@ -2,7 +2,6 @@ + #define _LINUX_SCHED_H + + #include /* For AT_VECTOR_SIZE */ +- + /* + * cloning flags: + */ +@@ -37,6 +36,8 @@ + + #ifdef __KERNEL__ + ++#include /* For run_node */ ++ + struct sched_param { + int sched_priority; + }; +@@ -196,13 +197,13 @@ extern void init_idle(struct task_struct + extern cpumask_t nohz_cpu_mask; + + /* +- * Only dump TASK_* tasks. (-1 for all tasks) ++ * Only dump TASK_* tasks. (0 for all tasks) + */ + extern void show_state_filter(unsigned long state_filter); + + static inline void show_state(void) + { +- show_state_filter(-1); ++ show_state_filter(0); + } + + extern void show_regs(struct pt_regs *); +@@ -464,7 +465,7 @@ struct signal_struct { + * from jiffies_to_ns(utime + stime) if sched_clock uses something + * other than jiffies.) + */ +- unsigned long long sched_time; ++ unsigned long long sum_sched_runtime; + + /* + * We don't bother to synchronize most readers of this at all, +@@ -524,6 +525,7 @@ struct signal_struct { + #define MAX_RT_PRIO MAX_USER_RT_PRIO + + #define MAX_PRIO (MAX_RT_PRIO + 40) ++#define DEFAULT_PRIO (MAX_RT_PRIO + 20) + + #define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO) + #define rt_task(p) rt_prio((p)->prio) +@@ -635,7 +637,14 @@ enum idle_type + /* + * sched-domains (multiprocessor balancing) declarations: + */ +-#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */ ++ ++/* ++ * Increase resolution of nice-level calculations: ++ */ ++#define SCHED_LOAD_SHIFT 10 ++#define SCHED_LOAD_SCALE (1UL << SCHED_LOAD_SHIFT) ++ ++#define SCHED_LOAD_SCALE_FUZZ (SCHED_LOAD_SCALE >> 5) + + #ifdef CONFIG_SMP + #define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ +@@ -684,7 +693,6 @@ struct sched_domain { + unsigned int imbalance_pct; /* No balance until over watermark */ + unsigned long long cache_hot_time; /* Task considered cache hot (ns) */ + unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */ +- unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */ + unsigned int busy_idx; + unsigned int idle_idx; + unsigned int newidle_idx; +@@ -733,12 +741,6 @@ struct sched_domain { + extern int partition_sched_domains(cpumask_t *partition1, + cpumask_t *partition2); + +-/* +- * Maximum cache size the migration-costs auto-tuning code will +- * search from: +- */ +-extern unsigned int max_cache_size; +- + #endif /* CONFIG_SMP */ + + +@@ -789,14 +791,28 @@ struct mempolicy; + struct pipe_inode_info; + struct uts_namespace; + +-enum sleep_type { +- SLEEP_NORMAL, +- SLEEP_NONINTERACTIVE, +- SLEEP_INTERACTIVE, +- SLEEP_INTERRUPTED, +-}; ++struct rq; + +-struct prio_array; ++struct sched_class { ++ struct sched_class *next; ++ ++ void (*enqueue_task) (struct rq *rq, struct task_struct *p, ++ int wakeup, u64 now); ++ void (*dequeue_task) (struct rq *rq, struct task_struct *p, ++ int sleep, u64 now); ++ void (*yield_task) (struct rq *rq, struct task_struct *p, ++ struct task_struct *p_to); ++ ++ void (*check_preempt_curr) (struct rq *rq, struct task_struct *p); ++ ++ struct task_struct * (*pick_next_task) (struct rq *rq, u64 now); ++ void (*put_prev_task) (struct rq *rq, struct task_struct *p, u64 now); ++ ++ struct task_struct * (*load_balance_start) (struct rq *rq); ++ struct task_struct * (*load_balance_next) (struct rq *rq); ++ void (*task_tick) (struct rq *rq, struct task_struct *p); ++ void (*task_new) (struct rq *rq, struct task_struct *p); ++}; + + struct task_struct { + volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ +@@ -813,26 +829,45 @@ struct task_struct { + #endif + #endif + int load_weight; /* for niceness load balancing purposes */ ++ int load_shift; ++ + int prio, static_prio, normal_prio; ++ int on_rq; + struct list_head run_list; +- struct prio_array *array; ++ struct rb_node run_node; + + unsigned short ioprio; + #ifdef CONFIG_BLK_DEV_IO_TRACE + unsigned int btrace_seq; + #endif +- unsigned long sleep_avg; +- unsigned long long timestamp, last_ran; +- unsigned long long sched_time; /* sched_clock time spent running */ +- enum sleep_type sleep_type; ++ /* CFS scheduling class statistics fields: */ ++ u64 wait_start_fair; ++ u64 wait_start; ++ u64 exec_start; ++ u64 sleep_start; ++ u64 block_start; ++ u64 sleep_max; ++ u64 block_max; ++ u64 exec_max; ++ u64 wait_max; ++ u64 last_ran; ++ ++ s64 wait_runtime; ++ u64 sum_exec_runtime; ++ s64 fair_key; ++ s64 sum_wait_runtime; + + unsigned long policy; + cpumask_t cpus_allowed; +- unsigned int time_slice, first_time_slice; ++ unsigned int time_slice; ++ struct sched_class *sched_class; ++ ++ s64 min_wait_runtime; + + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + struct sched_info sched_info; + #endif ++ u64 nr_switches; + + struct list_head tasks; + /* +@@ -1195,8 +1230,9 @@ static inline int set_cpus_allowed(struc + #endif + + extern unsigned long long sched_clock(void); ++extern void sched_clock_unstable_event(void); + extern unsigned long long +-current_sched_time(const struct task_struct *current_task); ++current_sched_runtime(const struct task_struct *current_task); + + /* sched_exec is called by processes performing an exec */ + #ifdef CONFIG_SMP +@@ -1212,6 +1248,13 @@ static inline void idle_task_exit(void) + #endif + + extern void sched_idle_next(void); ++extern char * sched_print_task_state(struct task_struct *p, char *buffer); ++ ++extern unsigned int sysctl_sched_granularity; ++extern unsigned int sysctl_sched_wakeup_granularity; ++extern unsigned int sysctl_sched_sleep_history_max; ++extern unsigned int sysctl_sched_child_runs_first; ++extern unsigned int sysctl_sched_load_smoothing; + + #ifdef CONFIG_RT_MUTEXES + extern int rt_mutex_getprio(struct task_struct *p); +@@ -1290,8 +1333,7 @@ extern void FASTCALL(wake_up_new_task(st + #else + static inline void kick_process(struct task_struct *tsk) { } + #endif +-extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags)); +-extern void FASTCALL(sched_exit(struct task_struct * p)); ++extern void sched_fork(struct task_struct * p, int clone_flags); + + extern int in_group_p(gid_t); + extern int in_egroup_p(gid_t); +Index: linux-cfs-2.6.20.8.q/include/linux/topology.h +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/include/linux/topology.h ++++ linux-cfs-2.6.20.8.q/include/linux/topology.h +@@ -96,7 +96,6 @@ + .busy_factor = 64, \ + .imbalance_pct = 110, \ + .cache_nice_tries = 0, \ +- .per_cpu_gain = 25, \ + .busy_idx = 0, \ + .idle_idx = 0, \ + .newidle_idx = 1, \ +@@ -128,7 +127,6 @@ + .busy_factor = 64, \ + .imbalance_pct = 125, \ + .cache_nice_tries = 1, \ +- .per_cpu_gain = 100, \ + .busy_idx = 2, \ + .idle_idx = 1, \ + .newidle_idx = 2, \ +@@ -159,7 +157,6 @@ + .busy_factor = 64, \ + .imbalance_pct = 125, \ + .cache_nice_tries = 1, \ +- .per_cpu_gain = 100, \ + .busy_idx = 2, \ + .idle_idx = 1, \ + .newidle_idx = 2, \ +@@ -193,7 +190,6 @@ + .newidle_idx = 0, /* unused */ \ + .wake_idx = 0, /* unused */ \ + .forkexec_idx = 0, /* unused */ \ +- .per_cpu_gain = 100, \ + .flags = SD_LOAD_BALANCE \ + | SD_SERIALIZE, \ + .last_balance = jiffies, \ +Index: linux-cfs-2.6.20.8.q/init/main.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/init/main.c ++++ linux-cfs-2.6.20.8.q/init/main.c +@@ -422,7 +422,7 @@ static void noinline rest_init(void) + + /* + * The boot idle thread must execute schedule() +- * at least one to get things moving: ++ * at least once to get things moving: + */ + preempt_enable_no_resched(); + schedule(); +Index: linux-cfs-2.6.20.8.q/kernel/exit.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/kernel/exit.c ++++ linux-cfs-2.6.20.8.q/kernel/exit.c +@@ -112,7 +112,7 @@ static void __exit_signal(struct task_st + sig->maj_flt += tsk->maj_flt; + sig->nvcsw += tsk->nvcsw; + sig->nivcsw += tsk->nivcsw; +- sig->sched_time += tsk->sched_time; ++ sig->sum_sched_runtime += tsk->sum_exec_runtime; + sig = NULL; /* Marker for below. */ + } + +@@ -170,7 +170,6 @@ repeat: + zap_leader = (leader->exit_signal == -1); + } + +- sched_exit(p); + write_unlock_irq(&tasklist_lock); + proc_flush_task(p); + release_thread(p); +Index: linux-cfs-2.6.20.8.q/kernel/fork.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/kernel/fork.c ++++ linux-cfs-2.6.20.8.q/kernel/fork.c +@@ -874,7 +874,7 @@ static inline int copy_signal(unsigned l + sig->utime = sig->stime = sig->cutime = sig->cstime = cputime_zero; + sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0; + sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0; +- sig->sched_time = 0; ++ sig->sum_sched_runtime = 0; + INIT_LIST_HEAD(&sig->cpu_timers[0]); + INIT_LIST_HEAD(&sig->cpu_timers[1]); + INIT_LIST_HEAD(&sig->cpu_timers[2]); +@@ -1037,7 +1037,7 @@ static struct task_struct *copy_process( + + p->utime = cputime_zero; + p->stime = cputime_zero; +- p->sched_time = 0; ++ + p->rchar = 0; /* I/O counter: bytes read */ + p->wchar = 0; /* I/O counter: bytes written */ + p->syscr = 0; /* I/O counter: read syscalls */ +Index: linux-cfs-2.6.20.8.q/kernel/hrtimer.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/kernel/hrtimer.c ++++ linux-cfs-2.6.20.8.q/kernel/hrtimer.c +@@ -45,7 +45,7 @@ + * + * returns the time in ktime_t format + */ +-static ktime_t ktime_get(void) ++ktime_t ktime_get(void) + { + struct timespec now; + +Index: linux-cfs-2.6.20.8.q/kernel/posix-cpu-timers.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/kernel/posix-cpu-timers.c ++++ linux-cfs-2.6.20.8.q/kernel/posix-cpu-timers.c +@@ -161,7 +161,7 @@ static inline cputime_t virt_ticks(struc + } + static inline unsigned long long sched_ns(struct task_struct *p) + { +- return (p == current) ? current_sched_time(p) : p->sched_time; ++ return (p == current) ? current_sched_runtime(p) : p->sum_exec_runtime; + } + + int posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *tp) +@@ -246,10 +246,10 @@ static int cpu_clock_sample_group_locked + } while (t != p); + break; + case CPUCLOCK_SCHED: +- cpu->sched = p->signal->sched_time; ++ cpu->sched = p->signal->sum_sched_runtime; + /* Add in each other live thread. */ + while ((t = next_thread(t)) != p) { +- cpu->sched += t->sched_time; ++ cpu->sched += t->sum_exec_runtime; + } + cpu->sched += sched_ns(p); + break; +@@ -417,7 +417,7 @@ int posix_cpu_timer_del(struct k_itimer + */ + static void cleanup_timers(struct list_head *head, + cputime_t utime, cputime_t stime, +- unsigned long long sched_time) ++ unsigned long long sum_exec_runtime) + { + struct cpu_timer_list *timer, *next; + cputime_t ptime = cputime_add(utime, stime); +@@ -446,10 +446,10 @@ static void cleanup_timers(struct list_h + ++head; + list_for_each_entry_safe(timer, next, head, entry) { + list_del_init(&timer->entry); +- if (timer->expires.sched < sched_time) { ++ if (timer->expires.sched < sum_exec_runtime) { + timer->expires.sched = 0; + } else { +- timer->expires.sched -= sched_time; ++ timer->expires.sched -= sum_exec_runtime; + } + } + } +@@ -462,7 +462,7 @@ static void cleanup_timers(struct list_h + void posix_cpu_timers_exit(struct task_struct *tsk) + { + cleanup_timers(tsk->cpu_timers, +- tsk->utime, tsk->stime, tsk->sched_time); ++ tsk->utime, tsk->stime, tsk->sum_exec_runtime); + + } + void posix_cpu_timers_exit_group(struct task_struct *tsk) +@@ -470,7 +470,7 @@ void posix_cpu_timers_exit_group(struct + cleanup_timers(tsk->signal->cpu_timers, + cputime_add(tsk->utime, tsk->signal->utime), + cputime_add(tsk->stime, tsk->signal->stime), +- tsk->sched_time + tsk->signal->sched_time); ++ tsk->sum_exec_runtime + tsk->signal->sum_sched_runtime); + } + + +@@ -531,7 +531,7 @@ static void process_timer_rebalance(stru + nsleft = max_t(unsigned long long, nsleft, 1); + do { + if (likely(!(t->flags & PF_EXITING))) { +- ns = t->sched_time + nsleft; ++ ns = t->sum_exec_runtime + nsleft; + if (t->it_sched_expires == 0 || + t->it_sched_expires > ns) { + t->it_sched_expires = ns; +@@ -999,7 +999,7 @@ static void check_thread_timers(struct t + struct cpu_timer_list *t = list_entry(timers->next, + struct cpu_timer_list, + entry); +- if (!--maxfire || tsk->sched_time < t->expires.sched) { ++ if (!--maxfire || tsk->sum_exec_runtime < t->expires.sched) { + tsk->it_sched_expires = t->expires.sched; + break; + } +@@ -1019,7 +1019,7 @@ static void check_process_timers(struct + int maxfire; + struct signal_struct *const sig = tsk->signal; + cputime_t utime, stime, ptime, virt_expires, prof_expires; +- unsigned long long sched_time, sched_expires; ++ unsigned long long sum_sched_runtime, sched_expires; + struct task_struct *t; + struct list_head *timers = sig->cpu_timers; + +@@ -1039,12 +1039,12 @@ static void check_process_timers(struct + */ + utime = sig->utime; + stime = sig->stime; +- sched_time = sig->sched_time; ++ sum_sched_runtime = sig->sum_sched_runtime; + t = tsk; + do { + utime = cputime_add(utime, t->utime); + stime = cputime_add(stime, t->stime); +- sched_time += t->sched_time; ++ sum_sched_runtime += t->sum_exec_runtime; + t = next_thread(t); + } while (t != tsk); + ptime = cputime_add(utime, stime); +@@ -1085,7 +1085,7 @@ static void check_process_timers(struct + struct cpu_timer_list *t = list_entry(timers->next, + struct cpu_timer_list, + entry); +- if (!--maxfire || sched_time < t->expires.sched) { ++ if (!--maxfire || sum_sched_runtime < t->expires.sched) { + sched_expires = t->expires.sched; + break; + } +@@ -1177,7 +1177,7 @@ static void check_process_timers(struct + virt_left = cputime_sub(virt_expires, utime); + virt_left = cputime_div_non_zero(virt_left, nthreads); + if (sched_expires) { +- sched_left = sched_expires - sched_time; ++ sched_left = sched_expires - sum_sched_runtime; + do_div(sched_left, nthreads); + sched_left = max_t(unsigned long long, sched_left, 1); + } else { +@@ -1203,7 +1203,7 @@ static void check_process_timers(struct + t->it_virt_expires = ticks; + } + +- sched = t->sched_time + sched_left; ++ sched = t->sum_exec_runtime + sched_left; + if (sched_expires && (t->it_sched_expires == 0 || + t->it_sched_expires > sched)) { + t->it_sched_expires = sched; +@@ -1295,7 +1295,7 @@ void run_posix_cpu_timers(struct task_st + + if (UNEXPIRED(prof) && UNEXPIRED(virt) && + (tsk->it_sched_expires == 0 || +- tsk->sched_time < tsk->it_sched_expires)) ++ tsk->sum_exec_runtime < tsk->it_sched_expires)) + return; + + #undef UNEXPIRED +Index: linux-cfs-2.6.20.8.q/kernel/sched.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/kernel/sched.c ++++ linux-cfs-2.6.20.8.q/kernel/sched.c +@@ -89,110 +89,13 @@ + */ + #define MIN_TIMESLICE max(5 * HZ / 1000, 1) + #define DEF_TIMESLICE (100 * HZ / 1000) +-#define ON_RUNQUEUE_WEIGHT 30 +-#define CHILD_PENALTY 95 +-#define PARENT_PENALTY 100 +-#define EXIT_WEIGHT 3 +-#define PRIO_BONUS_RATIO 25 +-#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) +-#define INTERACTIVE_DELTA 2 +-#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS) +-#define STARVATION_LIMIT (MAX_SLEEP_AVG) +-#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG)) +- +-/* +- * If a task is 'interactive' then we reinsert it in the active +- * array after it has expired its current timeslice. (it will not +- * continue to run immediately, it will still roundrobin with +- * other interactive tasks.) +- * +- * This part scales the interactivity limit depending on niceness. +- * +- * We scale it linearly, offset by the INTERACTIVE_DELTA delta. +- * Here are a few examples of different nice levels: +- * +- * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0] +- * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0] +- * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0] +- * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0] +- * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0] +- * +- * (the X axis represents the possible -5 ... 0 ... +5 dynamic +- * priority range a task can explore, a value of '1' means the +- * task is rated interactive.) +- * +- * Ie. nice +19 tasks can never get 'interactive' enough to be +- * reinserted into the active array. And only heavily CPU-hog nice -20 +- * tasks will be expired. Default nice 0 tasks are somewhere between, +- * it takes some effort for them to get interactive, but it's not +- * too hard. +- */ +- +-#define CURRENT_BONUS(p) \ +- (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ +- MAX_SLEEP_AVG) +- +-#define GRANULARITY (10 * HZ / 1000 ? : 1) +- +-#ifdef CONFIG_SMP +-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ +- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \ +- num_online_cpus()) +-#else +-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ +- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1))) +-#endif +- +-#define SCALE(v1,v1_max,v2_max) \ +- (v1) * (v2_max) / (v1_max) +- +-#define DELTA(p) \ +- (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \ +- INTERACTIVE_DELTA) +- +-#define TASK_INTERACTIVE(p) \ +- ((p)->prio <= (p)->static_prio - DELTA(p)) +- +-#define INTERACTIVE_SLEEP(p) \ +- (JIFFIES_TO_NS(MAX_SLEEP_AVG * \ +- (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1)) +- +-#define TASK_PREEMPTS_CURR(p, rq) \ +- ((p)->prio < (rq)->curr->prio) +- +-#define SCALE_PRIO(x, prio) \ +- max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) +- +-static unsigned int static_prio_timeslice(int static_prio) +-{ +- if (static_prio < NICE_TO_PRIO(0)) +- return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); +- else +- return SCALE_PRIO(DEF_TIMESLICE, static_prio); +-} +- +-/* +- * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] +- * to time slice values: [800ms ... 100ms ... 5ms] +- * +- * The higher a thread's priority, the bigger timeslices +- * it gets during one round of execution. But even the lowest +- * priority thread gets MIN_TIMESLICE worth of execution time. +- */ +- +-static inline unsigned int task_timeslice(struct task_struct *p) +-{ +- return static_prio_timeslice(p->static_prio); +-} + + /* +- * These are the runqueue data structures: ++ * This is the priority-queue data structure of the RT scheduling class: + */ +- + struct prio_array { +- unsigned int nr_active; +- DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */ +- struct list_head queue[MAX_PRIO]; ++ DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */ ++ struct list_head queue[MAX_RT_PRIO]; + }; + + /* +@@ -209,12 +112,13 @@ struct rq { + * nr_running and cpu_load should be in the same cacheline because + * remote CPUs use both these fields when doing load calculation. + */ +- unsigned long nr_running; ++ long nr_running; + unsigned long raw_weighted_load; +-#ifdef CONFIG_SMP +- unsigned long cpu_load[3]; +-#endif +- unsigned long long nr_switches; ++ #define CPU_LOAD_IDX_MAX 5 ++ unsigned long cpu_load[CPU_LOAD_IDX_MAX]; ++ ++ u64 nr_switches; ++ unsigned long nr_load_updates; + + /* + * This is part of a global counter where only the total sum +@@ -224,14 +128,29 @@ struct rq { + */ + unsigned long nr_uninterruptible; + +- unsigned long expired_timestamp; +- /* Cached timestamp set by update_cpu_clock() */ +- unsigned long long most_recent_timestamp; + struct task_struct *curr, *idle; + unsigned long next_balance; + struct mm_struct *prev_mm; +- struct prio_array *active, *expired, arrays[2]; +- int best_expired_prio; ++ ++ u64 clock, prev_clock_raw; ++ s64 clock_max_delta; ++ u64 fair_clock, prev_fair_clock; ++ u64 exec_clock, prev_exec_clock; ++ u64 wait_runtime; ++ ++ unsigned int clock_warps; ++ unsigned int clock_unstable_events; ++ ++ struct sched_class *load_balance_class; ++ ++ struct prio_array active; ++ int rt_load_balance_idx; ++ struct list_head *rt_load_balance_head, *rt_load_balance_curr; ++ ++ struct rb_root tasks_timeline; ++ struct rb_node *rb_leftmost; ++ struct rb_node *rb_load_balance_curr; ++ + atomic_t nr_iowait; + + #ifdef CONFIG_SMP +@@ -268,7 +187,107 @@ struct rq { + struct lock_class_key rq_lock_key; + }; + +-static DEFINE_PER_CPU(struct rq, runqueues); ++static DEFINE_PER_CPU(struct rq, runqueues) ____cacheline_aligned_in_smp; ++ ++static inline void check_preempt_curr(struct rq *rq, struct task_struct *p) ++{ ++ rq->curr->sched_class->check_preempt_curr(rq, p); ++} ++ ++#define SCALE_PRIO(x, prio) \ ++ max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) ++ ++/* ++ * static_prio_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] ++ * to time slice values: [800ms ... 100ms ... 5ms] ++ */ ++static unsigned int static_prio_timeslice(int static_prio) ++{ ++ if (static_prio == NICE_TO_PRIO(19)) ++ return 1; ++ ++ if (static_prio < NICE_TO_PRIO(0)) ++ return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); ++ else ++ return SCALE_PRIO(DEF_TIMESLICE, static_prio); ++} ++ ++/* ++ * Print out various scheduling related per-task fields: ++ */ ++char * sched_print_task_state(struct task_struct *p, char *buffer) ++{ ++ struct rq *this_rq = &per_cpu(runqueues, raw_smp_processor_id()); ++ unsigned long long t0, t1; ++ ++#define P(F) \ ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", #F, (long long)p->F) ++ ++ P(wait_start); ++ P(wait_start_fair); ++ P(exec_start); ++ P(sleep_start); ++ P(block_start); ++ P(sleep_max); ++ P(block_max); ++ P(exec_max); ++ P(wait_max); ++ P(min_wait_runtime); ++ P(last_ran); ++ P(wait_runtime); ++ P(sum_exec_runtime); ++#undef P ++ ++ t0 = sched_clock(); ++ t1 = sched_clock(); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "clock-delta", ++ (long long)t1-t0); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-wait_runtime", ++ (long long)this_rq->wait_runtime); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-exec_clock", ++ (long long)this_rq->exec_clock); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-fair_clock", ++ (long long)this_rq->fair_clock); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-clock", ++ (long long)this_rq->clock); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-prev_clock_raw", ++ (long long)this_rq->prev_clock_raw); ++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-clock_max_delta", ++ (long long)this_rq->clock_max_delta); ++ buffer += sprintf(buffer, "%-25s:%20u\n", "rq-clock_warps", ++ this_rq->clock_warps); ++ buffer += sprintf(buffer, "%-25s:%20u\n", "rq-clock_unstable_events", ++ this_rq->clock_unstable_events); ++ return buffer; ++} ++ ++/* ++ * Per-runqueue clock, as finegrained as the platform can give us: ++ */ ++static inline unsigned long long __rq_clock(struct rq *rq) ++{ ++ u64 now = sched_clock(); ++ u64 clock = rq->clock; ++ u64 prev_raw = rq->prev_clock_raw; ++ s64 delta = now - prev_raw; ++ ++ /* ++ * Protect against sched_clock() occasionally going backwards: ++ */ ++ if (unlikely(delta < 0)) { ++ clock++; ++ rq->clock_warps++; ++ } else { ++ if (unlikely(delta > rq->clock_max_delta)) ++ rq->clock_max_delta = delta; ++ clock += delta; ++ } ++ ++ rq->prev_clock_raw = now; ++ rq->clock = clock; ++ ++ return clock; ++} + + static inline int cpu_of(struct rq *rq) + { +@@ -279,6 +298,16 @@ static inline int cpu_of(struct rq *rq) + #endif + } + ++static inline unsigned long long rq_clock(struct rq *rq) ++{ ++ int this_cpu = smp_processor_id(); ++ ++ if (this_cpu == cpu_of(rq)) ++ return __rq_clock(rq); ++ ++ return rq->clock; ++} ++ + /* + * The domain tree (rq->sd) is protected by RCU's quiescent state transition. + * See detach_destroy_domains: synchronize_sched for details. +@@ -423,134 +452,6 @@ static inline void task_rq_unlock(struct + spin_unlock_irqrestore(&rq->lock, *flags); + } + +-#ifdef CONFIG_SCHEDSTATS +-/* +- * bump this up when changing the output format or the meaning of an existing +- * format, so that tools can adapt (or abort) +- */ +-#define SCHEDSTAT_VERSION 14 +- +-static int show_schedstat(struct seq_file *seq, void *v) +-{ +- int cpu; +- +- seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION); +- seq_printf(seq, "timestamp %lu\n", jiffies); +- for_each_online_cpu(cpu) { +- struct rq *rq = cpu_rq(cpu); +-#ifdef CONFIG_SMP +- struct sched_domain *sd; +- int dcnt = 0; +-#endif +- +- /* runqueue-specific stats */ +- seq_printf(seq, +- "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", +- cpu, rq->yld_both_empty, +- rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt, +- rq->sched_switch, rq->sched_cnt, rq->sched_goidle, +- rq->ttwu_cnt, rq->ttwu_local, +- rq->rq_sched_info.cpu_time, +- rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt); +- +- seq_printf(seq, "\n"); +- +-#ifdef CONFIG_SMP +- /* domain-specific stats */ +- preempt_disable(); +- for_each_domain(cpu, sd) { +- enum idle_type itype; +- char mask_str[NR_CPUS]; +- +- cpumask_scnprintf(mask_str, NR_CPUS, sd->span); +- seq_printf(seq, "domain%d %s", dcnt++, mask_str); +- for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES; +- itype++) { +- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu " +- "%lu", +- sd->lb_cnt[itype], +- sd->lb_balanced[itype], +- sd->lb_failed[itype], +- sd->lb_imbalance[itype], +- sd->lb_gained[itype], +- sd->lb_hot_gained[itype], +- sd->lb_nobusyq[itype], +- sd->lb_nobusyg[itype]); +- } +- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu" +- " %lu %lu %lu\n", +- sd->alb_cnt, sd->alb_failed, sd->alb_pushed, +- sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed, +- sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed, +- sd->ttwu_wake_remote, sd->ttwu_move_affine, +- sd->ttwu_move_balance); +- } +- preempt_enable(); +-#endif +- } +- return 0; +-} +- +-static int schedstat_open(struct inode *inode, struct file *file) +-{ +- unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32); +- char *buf = kmalloc(size, GFP_KERNEL); +- struct seq_file *m; +- int res; +- +- if (!buf) +- return -ENOMEM; +- res = single_open(file, show_schedstat, NULL); +- if (!res) { +- m = file->private_data; +- m->buf = buf; +- m->size = size; +- } else +- kfree(buf); +- return res; +-} +- +-const struct file_operations proc_schedstat_operations = { +- .open = schedstat_open, +- .read = seq_read, +- .llseek = seq_lseek, +- .release = single_release, +-}; +- +-/* +- * Expects runqueue lock to be held for atomicity of update +- */ +-static inline void +-rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) +-{ +- if (rq) { +- rq->rq_sched_info.run_delay += delta_jiffies; +- rq->rq_sched_info.pcnt++; +- } +-} +- +-/* +- * Expects runqueue lock to be held for atomicity of update +- */ +-static inline void +-rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) +-{ +- if (rq) +- rq->rq_sched_info.cpu_time += delta_jiffies; +-} +-# define schedstat_inc(rq, field) do { (rq)->field++; } while (0) +-# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0) +-#else /* !CONFIG_SCHEDSTATS */ +-static inline void +-rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) +-{} +-static inline void +-rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) +-{} +-# define schedstat_inc(rq, field) do { } while (0) +-# define schedstat_add(rq, field, amt) do { } while (0) +-#endif +- + /* + * this_rq_lock - lock this runqueue and disable interrupts. + */ +@@ -566,178 +467,60 @@ static inline struct rq *this_rq_lock(vo + return rq; + } + +-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) +-/* +- * Called when a process is dequeued from the active array and given +- * the cpu. We should note that with the exception of interactive +- * tasks, the expired queue will become the active queue after the active +- * queue is empty, without explicitly dequeuing and requeuing tasks in the +- * expired queue. (Interactive tasks may be requeued directly to the +- * active queue, thus delaying tasks in the expired queue from running; +- * see scheduler_tick()). +- * +- * This function is only called from sched_info_arrive(), rather than +- * dequeue_task(). Even though a task may be queued and dequeued multiple +- * times as it is shuffled about, we're really interested in knowing how +- * long it was from the *first* time it was queued to the time that it +- * finally hit a cpu. +- */ +-static inline void sched_info_dequeued(struct task_struct *t) +-{ +- t->sched_info.last_queued = 0; +-} +- + /* +- * Called when a task finally hits the cpu. We can now calculate how +- * long it was waiting to run. We also note when it began so that we +- * can keep stats on how long its timeslice is. ++ * CPU frequency is/was unstable - start new by setting prev_clock_raw: + */ +-static void sched_info_arrive(struct task_struct *t) ++void sched_clock_unstable_event(void) + { +- unsigned long now = jiffies, delta_jiffies = 0; +- +- if (t->sched_info.last_queued) +- delta_jiffies = now - t->sched_info.last_queued; +- sched_info_dequeued(t); +- t->sched_info.run_delay += delta_jiffies; +- t->sched_info.last_arrival = now; +- t->sched_info.pcnt++; ++ unsigned long flags; ++ struct rq *rq; + +- rq_sched_info_arrive(task_rq(t), delta_jiffies); ++ rq = task_rq_lock(current, &flags); ++ rq->prev_clock_raw = sched_clock(); ++ rq->clock_unstable_events++; ++ task_rq_unlock(rq, &flags); + } + + /* +- * Called when a process is queued into either the active or expired +- * array. The time is noted and later used to determine how long we +- * had to wait for us to reach the cpu. Since the expired queue will +- * become the active queue after active queue is empty, without dequeuing +- * and requeuing any tasks, we are interested in queuing to either. It +- * is unusual but not impossible for tasks to be dequeued and immediately +- * requeued in the same or another array: this can happen in sched_yield(), +- * set_user_nice(), and even load_balance() as it moves tasks from runqueue +- * to runqueue. ++ * resched_task - mark a task 'to be rescheduled now'. + * +- * This function is only called from enqueue_task(), but also only updates +- * the timestamp if it is already not set. It's assumed that +- * sched_info_dequeued() will clear that stamp when appropriate. +- */ +-static inline void sched_info_queued(struct task_struct *t) +-{ +- if (unlikely(sched_info_on())) +- if (!t->sched_info.last_queued) +- t->sched_info.last_queued = jiffies; +-} +- +-/* +- * Called when a process ceases being the active-running process, either +- * voluntarily or involuntarily. Now we can calculate how long we ran. ++ * On UP this means the setting of the need_resched flag, on SMP it ++ * might also involve a cross-CPU call to trigger the scheduler on ++ * the target CPU. + */ +-static inline void sched_info_depart(struct task_struct *t) +-{ +- unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival; ++#ifdef CONFIG_SMP + +- t->sched_info.cpu_time += delta_jiffies; +- rq_sched_info_depart(task_rq(t), delta_jiffies); +-} ++#ifndef tsk_is_polling ++#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) ++#endif + +-/* +- * Called when tasks are switched involuntarily due, typically, to expiring +- * their time slice. (This may also be called when switching to or from +- * the idle task.) We are only called when prev != next. +- */ +-static inline void +-__sched_info_switch(struct task_struct *prev, struct task_struct *next) ++static void resched_task(struct task_struct *p) + { +- struct rq *rq = task_rq(prev); +- +- /* +- * prev now departs the cpu. It's not interesting to record +- * stats about how efficient we were at scheduling the idle +- * process, however. +- */ +- if (prev != rq->idle) +- sched_info_depart(prev); ++ int cpu; + +- if (next != rq->idle) +- sched_info_arrive(next); +-} +-static inline void +-sched_info_switch(struct task_struct *prev, struct task_struct *next) +-{ +- if (unlikely(sched_info_on())) +- __sched_info_switch(prev, next); +-} +-#else +-#define sched_info_queued(t) do { } while (0) +-#define sched_info_switch(t, next) do { } while (0) +-#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ ++ assert_spin_locked(&task_rq(p)->lock); + +-/* +- * Adding/removing a task to/from a priority array: +- */ +-static void dequeue_task(struct task_struct *p, struct prio_array *array) +-{ +- array->nr_active--; +- list_del(&p->run_list); +- if (list_empty(array->queue + p->prio)) +- __clear_bit(p->prio, array->bitmap); +-} ++ if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED))) ++ return; + +-static void enqueue_task(struct task_struct *p, struct prio_array *array) +-{ +- sched_info_queued(p); +- list_add_tail(&p->run_list, array->queue + p->prio); +- __set_bit(p->prio, array->bitmap); +- array->nr_active++; +- p->array = array; +-} ++ set_tsk_thread_flag(p, TIF_NEED_RESCHED); + +-/* +- * Put task to the end of the run list without the overhead of dequeue +- * followed by enqueue. +- */ +-static void requeue_task(struct task_struct *p, struct prio_array *array) +-{ +- list_move_tail(&p->run_list, array->queue + p->prio); +-} ++ cpu = task_cpu(p); ++ if (cpu == smp_processor_id()) ++ return; + +-static inline void +-enqueue_task_head(struct task_struct *p, struct prio_array *array) +-{ +- list_add(&p->run_list, array->queue + p->prio); +- __set_bit(p->prio, array->bitmap); +- array->nr_active++; +- p->array = array; ++ /* NEED_RESCHED must be visible before we test polling */ ++ smp_mb(); ++ if (!tsk_is_polling(p)) ++ smp_send_reschedule(cpu); + } +- +-/* +- * __normal_prio - return the priority that is based on the static +- * priority but is modified by bonuses/penalties. +- * +- * We scale the actual sleep average [0 .... MAX_SLEEP_AVG] +- * into the -5 ... 0 ... +5 bonus/penalty range. +- * +- * We use 25% of the full 0...39 priority range so that: +- * +- * 1) nice +19 interactive tasks do not preempt nice 0 CPU hogs. +- * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks. +- * +- * Both properties are important to certain workloads. +- */ +- +-static inline int __normal_prio(struct task_struct *p) ++#else ++static inline void resched_task(struct task_struct *p) + { +- int bonus, prio; +- +- bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; +- +- prio = p->static_prio - bonus; +- if (prio < MAX_RT_PRIO) +- prio = MAX_RT_PRIO; +- if (prio > MAX_PRIO-1) +- prio = MAX_PRIO-1; +- return prio; ++ assert_spin_locked(&task_rq(p)->lock); ++ set_tsk_need_resched(p); + } ++#endif + + /* + * To aid in avoiding the subversion of "niceness" due to uneven distribution +@@ -761,22 +544,33 @@ static inline int __normal_prio(struct t + #define RTPRIO_TO_LOAD_WEIGHT(rp) \ + (PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp)) + ++/* ++ * Nice levels are logarithmic. These are the load shifts assigned ++ * to nice levels, where a step of every 2 nice levels means a ++ * multiplicator of 2: ++ */ ++const int prio_to_load_shift[40] = { ++/* -20 */ 20, 19, 19, 18, 18, 17, 17, 16, 16, 15, ++/* -10 */ 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, ++/* 0 */ 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, ++/* 10 */ 5, 4, 4, 3, 3, 2, 2, 1, 1, 0 ++}; ++ ++static int get_load_shift(struct task_struct *p) ++{ ++ int prio = p->static_prio; ++ ++ if (rt_prio(prio) || p->policy == SCHED_BATCH) ++ return 0; ++ ++ return prio_to_load_shift[prio - MAX_RT_PRIO]; ++} ++ + static void set_load_weight(struct task_struct *p) + { +- if (has_rt_policy(p)) { +-#ifdef CONFIG_SMP +- if (p == task_rq(p)->migration_thread) +- /* +- * The migration thread does the actual balancing. +- * Giving its load any weight will skew balancing +- * adversely. +- */ +- p->load_weight = 0; +- else +-#endif +- p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority); +- } else +- p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio); ++ p->load_shift = get_load_shift(p); ++ p->load_weight = 1 << p->load_shift; ++ p->wait_runtime = 0; + } + + static inline void +@@ -803,6 +597,40 @@ static inline void dec_nr_running(struct + dec_raw_weighted_load(rq, p); + } + ++static void activate_task(struct rq *rq, struct task_struct *p, int wakeup); ++ ++#include "sched_stats.h" ++#include "sched_rt.c" ++#include "sched_fair.c" ++#include "sched_debug.c" ++ ++#define sched_class_highest (&rt_sched_class) ++ ++static void enqueue_task(struct rq *rq, struct task_struct *p, int wakeup) ++{ ++ u64 now = rq_clock(rq); ++ ++ sched_info_queued(p); ++ p->sched_class->enqueue_task(rq, p, wakeup, now); ++ p->on_rq = 1; ++} ++ ++static void dequeue_task(struct rq *rq, struct task_struct *p, int sleep) ++{ ++ u64 now = rq_clock(rq); ++ ++ p->sched_class->dequeue_task(rq, p, sleep, now); ++ p->on_rq = 0; ++} ++ ++/* ++ * __normal_prio - return the priority that is based on the static prio ++ */ ++static inline int __normal_prio(struct task_struct *p) ++{ ++ return p->static_prio; ++} ++ + /* + * Calculate the expected normal priority: i.e. priority + * without taking RT-inheritance into account. Might be +@@ -842,210 +670,31 @@ static int effective_prio(struct task_st + } + + /* +- * __activate_task - move a task to the runqueue. ++ * activate_task - move a task to the runqueue. + */ +-static void __activate_task(struct task_struct *p, struct rq *rq) ++static void activate_task(struct rq *rq, struct task_struct *p, int wakeup) + { +- struct prio_array *target = rq->active; +- +- if (batch_task(p)) +- target = rq->expired; +- enqueue_task(p, target); ++ enqueue_task(rq, p, wakeup); + inc_nr_running(p, rq); + } + + /* +- * __activate_idle_task - move idle task to the _front_ of runqueue. ++ * activate_idle_task - move idle task to the _front_ of runqueue. + */ +-static inline void __activate_idle_task(struct task_struct *p, struct rq *rq) ++static inline void activate_idle_task(struct task_struct *p, struct rq *rq) + { +- enqueue_task_head(p, rq->active); ++ enqueue_task(rq, p, 0); + inc_nr_running(p, rq); + } + + /* +- * Recalculate p->normal_prio and p->prio after having slept, +- * updating the sleep-average too: +- */ +-static int recalc_task_prio(struct task_struct *p, unsigned long long now) +-{ +- /* Caller must always ensure 'now >= p->timestamp' */ +- unsigned long sleep_time = now - p->timestamp; +- +- if (batch_task(p)) +- sleep_time = 0; +- +- if (likely(sleep_time > 0)) { +- /* +- * This ceiling is set to the lowest priority that would allow +- * a task to be reinserted into the active array on timeslice +- * completion. +- */ +- unsigned long ceiling = INTERACTIVE_SLEEP(p); +- +- if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) { +- /* +- * Prevents user tasks from achieving best priority +- * with one single large enough sleep. +- */ +- p->sleep_avg = ceiling; +- /* +- * Using INTERACTIVE_SLEEP() as a ceiling places a +- * nice(0) task 1ms sleep away from promotion, and +- * gives it 700ms to round-robin with no chance of +- * being demoted. This is more than generous, so +- * mark this sleep as non-interactive to prevent the +- * on-runqueue bonus logic from intervening should +- * this task not receive cpu immediately. +- */ +- p->sleep_type = SLEEP_NONINTERACTIVE; +- } else { +- /* +- * Tasks waking from uninterruptible sleep are +- * limited in their sleep_avg rise as they +- * are likely to be waiting on I/O +- */ +- if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) { +- if (p->sleep_avg >= ceiling) +- sleep_time = 0; +- else if (p->sleep_avg + sleep_time >= +- ceiling) { +- p->sleep_avg = ceiling; +- sleep_time = 0; +- } +- } +- +- /* +- * This code gives a bonus to interactive tasks. +- * +- * The boost works by updating the 'average sleep time' +- * value here, based on ->timestamp. The more time a +- * task spends sleeping, the higher the average gets - +- * and the higher the priority boost gets as well. +- */ +- p->sleep_avg += sleep_time; +- +- } +- if (p->sleep_avg > NS_MAX_SLEEP_AVG) +- p->sleep_avg = NS_MAX_SLEEP_AVG; +- } +- +- return effective_prio(p); +-} +- +-/* +- * activate_task - move a task to the runqueue and do priority recalculation +- * +- * Update all the scheduling statistics stuff. (sleep average +- * calculation, priority modifiers, etc.) +- */ +-static void activate_task(struct task_struct *p, struct rq *rq, int local) +-{ +- unsigned long long now; +- +- if (rt_task(p)) +- goto out; +- +- now = sched_clock(); +-#ifdef CONFIG_SMP +- if (!local) { +- /* Compensate for drifting sched_clock */ +- struct rq *this_rq = this_rq(); +- now = (now - this_rq->most_recent_timestamp) +- + rq->most_recent_timestamp; +- } +-#endif +- +- /* +- * Sleep time is in units of nanosecs, so shift by 20 to get a +- * milliseconds-range estimation of the amount of time that the task +- * spent sleeping: +- */ +- if (unlikely(prof_on == SLEEP_PROFILING)) { +- if (p->state == TASK_UNINTERRUPTIBLE) +- profile_hits(SLEEP_PROFILING, (void *)get_wchan(p), +- (now - p->timestamp) >> 20); +- } +- +- p->prio = recalc_task_prio(p, now); +- +- /* +- * This checks to make sure it's not an uninterruptible task +- * that is now waking up. +- */ +- if (p->sleep_type == SLEEP_NORMAL) { +- /* +- * Tasks which were woken up by interrupts (ie. hw events) +- * are most likely of interactive nature. So we give them +- * the credit of extending their sleep time to the period +- * of time they spend on the runqueue, waiting for execution +- * on a CPU, first time around: +- */ +- if (in_interrupt()) +- p->sleep_type = SLEEP_INTERRUPTED; +- else { +- /* +- * Normal first-time wakeups get a credit too for +- * on-runqueue time, but it will be weighted down: +- */ +- p->sleep_type = SLEEP_INTERACTIVE; +- } +- } +- p->timestamp = now; +-out: +- __activate_task(p, rq); +-} +- +-/* + * deactivate_task - remove a task from the runqueue. + */ +-static void deactivate_task(struct task_struct *p, struct rq *rq) ++static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep) + { ++ dequeue_task(rq, p, sleep); + dec_nr_running(p, rq); +- dequeue_task(p, p->array); +- p->array = NULL; +-} +- +-/* +- * resched_task - mark a task 'to be rescheduled now'. +- * +- * On UP this means the setting of the need_resched flag, on SMP it +- * might also involve a cross-CPU call to trigger the scheduler on +- * the target CPU. +- */ +-#ifdef CONFIG_SMP +- +-#ifndef tsk_is_polling +-#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG) +-#endif +- +-static void resched_task(struct task_struct *p) +-{ +- int cpu; +- +- assert_spin_locked(&task_rq(p)->lock); +- +- if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED))) +- return; +- +- set_tsk_thread_flag(p, TIF_NEED_RESCHED); +- +- cpu = task_cpu(p); +- if (cpu == smp_processor_id()) +- return; +- +- /* NEED_RESCHED must be visible before we test polling */ +- smp_mb(); +- if (!tsk_is_polling(p)) +- smp_send_reschedule(cpu); +-} +-#else +-static inline void resched_task(struct task_struct *p) +-{ +- assert_spin_locked(&task_rq(p)->lock); +- set_tsk_need_resched(p); + } +-#endif + + /** + * task_curr - is this task currently executing on a CPU? +@@ -1085,7 +734,7 @@ migrate_task(struct task_struct *p, int + * If the task is not on a runqueue (and not running), then + * it is sufficient to simply update the task's cpu field. + */ +- if (!p->array && !task_running(rq, p)) { ++ if (!p->on_rq && !task_running(rq, p)) { + set_task_cpu(p, dest_cpu); + return 0; + } +@@ -1116,7 +765,7 @@ void wait_task_inactive(struct task_stru + repeat: + rq = task_rq_lock(p, &flags); + /* Must be off runqueue entirely, not preempted. */ +- if (unlikely(p->array || task_running(rq, p))) { ++ if (unlikely(p->on_rq || task_running(rq, p))) { + /* If it's preempted, we yield. It could be a while. */ + preempted = !task_running(rq, p); + task_rq_unlock(rq, &flags); +@@ -1292,9 +941,9 @@ static int sched_balance_self(int cpu, i + struct sched_domain *tmp, *sd = NULL; + + for_each_domain(cpu, tmp) { +- /* +- * If power savings logic is enabled for a domain, stop there. +- */ ++ /* ++ * If power savings logic is enabled for a domain, stop there. ++ */ + if (tmp->flags & SD_POWERSAVINGS_BALANCE) + break; + if (tmp->flags & flag) +@@ -1412,7 +1061,7 @@ static int try_to_wake_up(struct task_st + if (!(old_state & state)) + goto out; + +- if (p->array) ++ if (p->on_rq) + goto out_running; + + cpu = task_cpu(p); +@@ -1505,7 +1154,7 @@ out_set_cpu: + old_state = p->state; + if (!(old_state & state)) + goto out; +- if (p->array) ++ if (p->on_rq) + goto out_running; + + this_cpu = smp_processor_id(); +@@ -1514,25 +1163,10 @@ out_set_cpu: + + out_activate: + #endif /* CONFIG_SMP */ +- if (old_state == TASK_UNINTERRUPTIBLE) { ++ if (old_state == TASK_UNINTERRUPTIBLE) + rq->nr_uninterruptible--; +- /* +- * Tasks on involuntary sleep don't earn +- * sleep_avg beyond just interactive state. +- */ +- p->sleep_type = SLEEP_NONINTERACTIVE; +- } else + +- /* +- * Tasks that have marked their sleep as noninteractive get +- * woken up with their sleep average not weighted in an +- * interactive way. +- */ +- if (old_state & TASK_NONINTERACTIVE) +- p->sleep_type = SLEEP_NONINTERACTIVE; +- +- +- activate_task(p, rq, cpu == this_cpu); ++ activate_task(rq, p, 1); + /* + * Sync wakeups (i.e. those types of wakeups where the waker + * has indicated that it will leave the CPU in short order) +@@ -1541,10 +1175,8 @@ out_activate: + * the waker guarantees that the freshly woken up task is going + * to be considered on this CPU.) + */ +- if (!sync || cpu != this_cpu) { +- if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); +- } ++ if (!sync || cpu != this_cpu) ++ check_preempt_curr(rq, p); + success = 1; + + out_running: +@@ -1567,19 +1199,35 @@ int fastcall wake_up_state(struct task_s + return try_to_wake_up(p, state, 0); + } + +-static void task_running_tick(struct rq *rq, struct task_struct *p); ++/* ++ * The task was running during this tick - call the class tick ++ * (to update the time slice counter and other statistics, etc.): ++ */ ++static void task_running_tick(struct rq *rq, struct task_struct *p) ++{ ++ spin_lock(&rq->lock); ++ p->sched_class->task_tick(rq, p); ++ spin_unlock(&rq->lock); ++} ++ + /* + * Perform scheduler related setup for a newly forked process p. + * p is forked by current. ++ * ++ * __sched_fork() is basic setup used by init_idle() too: + */ +-void fastcall sched_fork(struct task_struct *p, int clone_flags) ++static void __sched_fork(struct task_struct *p) + { +- int cpu = get_cpu(); ++ p->wait_start_fair = p->wait_start = p->exec_start = p->last_ran = 0; ++ p->sum_exec_runtime = p->wait_runtime = 0; ++ p->sum_wait_runtime = 0; ++ p->sleep_start = p->block_start = 0; ++ p->sleep_max = p->block_max = p->exec_max = p->wait_max = 0; + +-#ifdef CONFIG_SMP +- cpu = sched_balance_self(cpu, SD_BALANCE_FORK); +-#endif +- set_task_cpu(p, cpu); ++ INIT_LIST_HEAD(&p->run_list); ++ p->on_rq = 0; ++ p->nr_switches = 0; ++ p->min_wait_runtime = 0; + + /* + * We mark the process as running here, but have not actually +@@ -1588,16 +1236,29 @@ void fastcall sched_fork(struct task_str + * event cannot wake it up and insert it on the runqueue either. + */ + p->state = TASK_RUNNING; ++} ++ ++/* ++ * fork()/clone()-time setup: ++ */ ++void sched_fork(struct task_struct *p, int clone_flags) ++{ ++ int cpu = get_cpu(); ++ ++ __sched_fork(p); ++ ++#ifdef CONFIG_SMP ++ cpu = sched_balance_self(cpu, SD_BALANCE_FORK); ++#endif ++ set_task_cpu(p, cpu); + + /* + * Make sure we do not leak PI boosting priority to the child: + */ + p->prio = current->normal_prio; + +- INIT_LIST_HEAD(&p->run_list); +- p->array = NULL; + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) +- if (unlikely(sched_info_on())) ++ if (likely(sched_info_on())) + memset(&p->sched_info, 0, sizeof(p->sched_info)); + #endif + #if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW) +@@ -1607,34 +1268,16 @@ void fastcall sched_fork(struct task_str + /* Want to start with kernel preemption disabled. */ + task_thread_info(p)->preempt_count = 1; + #endif +- /* +- * Share the timeslice between parent and child, thus the +- * total amount of pending timeslices in the system doesn't change, +- * resulting in more scheduling fairness. +- */ +- local_irq_disable(); +- p->time_slice = (current->time_slice + 1) >> 1; +- /* +- * The remainder of the first timeslice might be recovered by +- * the parent if the child exits early enough. +- */ +- p->first_time_slice = 1; +- current->time_slice >>= 1; +- p->timestamp = sched_clock(); +- if (unlikely(!current->time_slice)) { +- /* +- * This case is rare, it happens when the parent has only +- * a single jiffy left from its timeslice. Taking the +- * runqueue lock is not a problem. +- */ +- current->time_slice = 1; +- task_running_tick(cpu_rq(cpu), current); +- } +- local_irq_enable(); + put_cpu(); + } + + /* ++ * After fork, child runs first. (default) If set to 0 then ++ * parent will (try to) run first. ++ */ ++unsigned int __read_mostly sysctl_sched_child_runs_first = 1; ++ ++/* + * wake_up_new_task - wake up a newly created task for the first time. + * + * This function will do some initial scheduler statistics housekeeping +@@ -1643,107 +1286,27 @@ void fastcall sched_fork(struct task_str + */ + void fastcall wake_up_new_task(struct task_struct *p, unsigned long clone_flags) + { +- struct rq *rq, *this_rq; + unsigned long flags; +- int this_cpu, cpu; ++ struct rq *rq; ++ int this_cpu; + + rq = task_rq_lock(p, &flags); + BUG_ON(p->state != TASK_RUNNING); +- this_cpu = smp_processor_id(); +- cpu = task_cpu(p); +- +- /* +- * We decrease the sleep average of forking parents +- * and children as well, to keep max-interactive tasks +- * from forking tasks that are max-interactive. The parent +- * (current) is done further down, under its lock. +- */ +- p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) * +- CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); ++ this_cpu = smp_processor_id(); /* parent's CPU */ + + p->prio = effective_prio(p); + +- if (likely(cpu == this_cpu)) { +- if (!(clone_flags & CLONE_VM)) { +- /* +- * The VM isn't cloned, so we're in a good position to +- * do child-runs-first in anticipation of an exec. This +- * usually avoids a lot of COW overhead. +- */ +- if (unlikely(!current->array)) +- __activate_task(p, rq); +- else { +- p->prio = current->prio; +- p->normal_prio = current->normal_prio; +- list_add_tail(&p->run_list, ¤t->run_list); +- p->array = current->array; +- p->array->nr_active++; +- inc_nr_running(p, rq); +- } +- set_need_resched(); +- } else +- /* Run child last */ +- __activate_task(p, rq); +- /* +- * We skip the following code due to cpu == this_cpu +- * +- * task_rq_unlock(rq, &flags); +- * this_rq = task_rq_lock(current, &flags); +- */ +- this_rq = rq; ++ if (!sysctl_sched_child_runs_first || (clone_flags & CLONE_VM) || ++ task_cpu(p) != this_cpu || !current->on_rq) { ++ activate_task(rq, p, 0); + } else { +- this_rq = cpu_rq(this_cpu); +- +- /* +- * Not the local CPU - must adjust timestamp. This should +- * get optimised away in the !CONFIG_SMP case. +- */ +- p->timestamp = (p->timestamp - this_rq->most_recent_timestamp) +- + rq->most_recent_timestamp; +- __activate_task(p, rq); +- if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); +- + /* +- * Parent and child are on different CPUs, now get the +- * parent runqueue to update the parent's ->sleep_avg: ++ * Let the scheduling class do new task startup ++ * management (if any): + */ +- task_rq_unlock(rq, &flags); +- this_rq = task_rq_lock(current, &flags); ++ p->sched_class->task_new(rq, p); + } +- current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) * +- PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); +- task_rq_unlock(this_rq, &flags); +-} +- +-/* +- * Potentially available exiting-child timeslices are +- * retrieved here - this way the parent does not get +- * penalized for creating too many threads. +- * +- * (this cannot be used to 'generate' timeslices +- * artificially, because any timeslice recovered here +- * was given away by the parent in the first place.) +- */ +-void fastcall sched_exit(struct task_struct *p) +-{ +- unsigned long flags; +- struct rq *rq; +- +- /* +- * If the child was a (relative-) CPU hog then decrease +- * the sleep_avg of the parent as well. +- */ +- rq = task_rq_lock(p->parent, &flags); +- if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) { +- p->parent->time_slice += p->time_slice; +- if (unlikely(p->parent->time_slice > task_timeslice(p))) +- p->parent->time_slice = task_timeslice(p); +- } +- if (p->sleep_avg < p->parent->sleep_avg) +- p->parent->sleep_avg = p->parent->sleep_avg / +- (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg / +- (EXIT_WEIGHT + 1); ++ check_preempt_curr(rq, p); + task_rq_unlock(rq, &flags); + } + +@@ -1941,17 +1504,56 @@ unsigned long nr_active(void) + return running + uninterruptible; + } + +-#ifdef CONFIG_SMP +- +-/* +- * Is this task likely cache-hot: +- */ +-static inline int +-task_hot(struct task_struct *p, unsigned long long now, struct sched_domain *sd) ++static void update_load_fair(struct rq *this_rq) + { +- return (long long)(now - p->last_ran) < (long long)sd->cache_hot_time; ++ unsigned long this_load, fair_delta, exec_delta, idle_delta; ++ unsigned int i, scale; ++ s64 fair_delta64, exec_delta64; ++ unsigned long tmp; ++ u64 tmp64; ++ ++ this_rq->nr_load_updates++; ++ ++ fair_delta64 = this_rq->fair_clock - this_rq->prev_fair_clock + 1; ++ this_rq->prev_fair_clock = this_rq->fair_clock; ++ WARN_ON_ONCE(fair_delta64 <= 0); ++ ++ exec_delta64 = this_rq->exec_clock - this_rq->prev_exec_clock + 1; ++ this_rq->prev_exec_clock = this_rq->exec_clock; ++ WARN_ON_ONCE(exec_delta64 <= 0); ++ ++ if (fair_delta64 > (s64)LONG_MAX) ++ fair_delta64 = (s64)LONG_MAX; ++ fair_delta = (unsigned long)fair_delta64; ++ ++ if (exec_delta64 > (s64)LONG_MAX) ++ exec_delta64 = (s64)LONG_MAX; ++ exec_delta = (unsigned long)exec_delta64; ++ if (exec_delta > TICK_NSEC) ++ exec_delta = TICK_NSEC; ++ ++ idle_delta = TICK_NSEC - exec_delta; ++ ++ tmp = (SCHED_LOAD_SCALE * exec_delta) / fair_delta; ++ tmp64 = (u64)tmp * (u64)exec_delta; ++ do_div(tmp64, TICK_NSEC); ++ this_load = (unsigned long)tmp64; ++ ++ /* Update our load: */ ++ for (i = 0, scale = 1; i < CPU_LOAD_IDX_MAX; i++, scale += scale) { ++ unsigned long old_load, new_load; ++ ++ /* scale is effectively 1 << i now, and >> i divides by scale */ ++ ++ old_load = this_rq->cpu_load[i]; ++ new_load = this_load; ++ ++ this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i; ++ } + } + ++#ifdef CONFIG_SMP ++ + /* + * double_rq_lock - safely lock two runqueues + * +@@ -2068,23 +1670,17 @@ void sched_exec(void) + * pull_task - move a task from a remote runqueue to the local runqueue. + * Both runqueues must be locked. + */ +-static void pull_task(struct rq *src_rq, struct prio_array *src_array, +- struct task_struct *p, struct rq *this_rq, +- struct prio_array *this_array, int this_cpu) ++static void pull_task(struct rq *src_rq, struct task_struct *p, ++ struct rq *this_rq, int this_cpu) + { +- dequeue_task(p, src_array); +- dec_nr_running(p, src_rq); ++ deactivate_task(src_rq, p, 0); + set_task_cpu(p, this_cpu); +- inc_nr_running(p, this_rq); +- enqueue_task(p, this_array); +- p->timestamp = (p->timestamp - src_rq->most_recent_timestamp) +- + this_rq->most_recent_timestamp; ++ activate_task(this_rq, p, 0); + /* + * Note that idle threads have a prio of MAX_PRIO, for this test + * to be always true for them. + */ +- if (TASK_PREEMPTS_CURR(p, this_rq)) +- resched_task(this_rq->curr); ++ check_preempt_curr(this_rq, p); + } + + /* +@@ -2109,25 +1705,59 @@ int can_migrate_task(struct task_struct + return 0; + + /* +- * Aggressive migration if: +- * 1) task is cache cold, or +- * 2) too many balance attempts have failed. ++ * Aggressive migration if too many balance attempts have failed: + */ +- +- if (sd->nr_balance_failed > sd->cache_nice_tries) { +-#ifdef CONFIG_SCHEDSTATS +- if (task_hot(p, rq->most_recent_timestamp, sd)) +- schedstat_inc(sd, lb_hot_gained[idle]); +-#endif ++ if (sd->nr_balance_failed > sd->cache_nice_tries) + return 1; +- } + +- if (task_hot(p, rq->most_recent_timestamp, sd)) +- return 0; + return 1; + } + +-#define rq_best_prio(rq) min((rq)->curr->prio, (rq)->best_expired_prio) ++/* ++ * Load-balancing iterator: iterate through the hieararchy of scheduling ++ * classes, starting with the highest-prio one: ++ */ ++ ++struct task_struct * load_balance_start(struct rq *rq) ++{ ++ struct sched_class *class = sched_class_highest; ++ struct task_struct *p; ++ ++ do { ++ p = class->load_balance_start(rq); ++ if (p) { ++ rq->load_balance_class = class; ++ return p; ++ } ++ class = class->next; ++ } while (class); ++ ++ return NULL; ++} ++ ++struct task_struct * load_balance_next(struct rq *rq) ++{ ++ struct sched_class *class = rq->load_balance_class; ++ struct task_struct *p; ++ ++ p = class->load_balance_next(rq); ++ if (p) ++ return p; ++ /* ++ * Pick up the next class (if any) and attempt to start ++ * the iterator there: ++ */ ++ while ((class = class->next)) { ++ p = class->load_balance_start(rq); ++ if (p) { ++ rq->load_balance_class = class; ++ return p; ++ } ++ } ++ return NULL; ++} ++ ++#define rq_best_prio(rq) (rq)->curr->prio + + /* + * move_tasks tries to move up to max_nr_move tasks and max_load_move weighted +@@ -2141,11 +1771,9 @@ static int move_tasks(struct rq *this_rq + struct sched_domain *sd, enum idle_type idle, + int *all_pinned) + { +- int idx, pulled = 0, pinned = 0, this_best_prio, best_prio, ++ int pulled = 0, pinned = 0, this_best_prio, best_prio, + best_prio_seen, skip_for_load; +- struct prio_array *array, *dst_array; +- struct list_head *head, *curr; +- struct task_struct *tmp; ++ struct task_struct *p; + long rem_load_move; + + if (max_nr_move == 0 || max_load_move == 0) +@@ -2165,76 +1793,41 @@ static int move_tasks(struct rq *this_rq + best_prio_seen = best_prio == busiest->curr->prio; + + /* +- * We first consider expired tasks. Those will likely not be +- * executed in the near future, and they are most likely to +- * be cache-cold, thus switching CPUs has the least effect +- * on them. +- */ +- if (busiest->expired->nr_active) { +- array = busiest->expired; +- dst_array = this_rq->expired; +- } else { +- array = busiest->active; +- dst_array = this_rq->active; +- } +- +-new_array: +- /* Start searching at priority 0: */ +- idx = 0; +-skip_bitmap: +- if (!idx) +- idx = sched_find_first_bit(array->bitmap); +- else +- idx = find_next_bit(array->bitmap, MAX_PRIO, idx); +- if (idx >= MAX_PRIO) { +- if (array == busiest->expired && busiest->active->nr_active) { +- array = busiest->active; +- dst_array = this_rq->active; +- goto new_array; +- } ++ * Start the load-balancing iterator: ++ */ ++ p = load_balance_start(busiest); ++next: ++ if (!p) + goto out; +- } +- +- head = array->queue + idx; +- curr = head->prev; +-skip_queue: +- tmp = list_entry(curr, struct task_struct, run_list); +- +- curr = curr->prev; +- + /* + * To help distribute high priority tasks accross CPUs we don't + * skip a task if it will be the highest priority task (i.e. smallest + * prio value) on its new queue regardless of its load weight + */ +- skip_for_load = tmp->load_weight > rem_load_move; +- if (skip_for_load && idx < this_best_prio) +- skip_for_load = !best_prio_seen && idx == best_prio; ++ skip_for_load = p->load_weight > rem_load_move; ++ if (skip_for_load && p->prio < this_best_prio) ++ skip_for_load = !best_prio_seen && p->prio == best_prio; + if (skip_for_load || +- !can_migrate_task(tmp, busiest, this_cpu, sd, idle, &pinned)) { ++ !can_migrate_task(p, busiest, this_cpu, sd, idle, &pinned)) { + +- best_prio_seen |= idx == best_prio; +- if (curr != head) +- goto skip_queue; +- idx++; +- goto skip_bitmap; ++ best_prio_seen |= p->prio == best_prio; ++ p = load_balance_next(busiest); ++ goto next; + } + +- pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu); ++ pull_task(busiest, p, this_rq, this_cpu); + pulled++; +- rem_load_move -= tmp->load_weight; ++ rem_load_move -= p->load_weight; + + /* + * We only want to steal up to the prescribed number of tasks + * and the prescribed amount of weighted load. + */ + if (pulled < max_nr_move && rem_load_move > 0) { +- if (idx < this_best_prio) +- this_best_prio = idx; +- if (curr != head) +- goto skip_queue; +- idx++; +- goto skip_bitmap; ++ if (p->prio < this_best_prio) ++ this_best_prio = p->prio; ++ p = load_balance_next(busiest); ++ goto next; + } + out: + /* +@@ -2360,8 +1953,8 @@ find_busiest_group(struct sched_domain * + * Busy processors will not participate in power savings + * balance. + */ +- if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE)) +- goto group_next; ++ if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE)) ++ goto group_next; + + /* + * If the local group is idle or completely loaded +@@ -2371,42 +1964,42 @@ find_busiest_group(struct sched_domain * + !this_nr_running)) + power_savings_balance = 0; + +- /* ++ /* + * If a group is already running at full capacity or idle, + * don't include that group in power savings calculations +- */ +- if (!power_savings_balance || sum_nr_running >= group_capacity ++ */ ++ if (!power_savings_balance || sum_nr_running >= group_capacity + || !sum_nr_running) +- goto group_next; ++ goto group_next; + +- /* ++ /* + * Calculate the group which has the least non-idle load. +- * This is the group from where we need to pick up the load +- * for saving power +- */ +- if ((sum_nr_running < min_nr_running) || +- (sum_nr_running == min_nr_running && ++ * This is the group from where we need to pick up the load ++ * for saving power ++ */ ++ if ((sum_nr_running < min_nr_running) || ++ (sum_nr_running == min_nr_running && + first_cpu(group->cpumask) < + first_cpu(group_min->cpumask))) { +- group_min = group; +- min_nr_running = sum_nr_running; ++ group_min = group; ++ min_nr_running = sum_nr_running; + min_load_per_task = sum_weighted_load / + sum_nr_running; +- } ++ } + +- /* ++ /* + * Calculate the group which is almost near its +- * capacity but still has some space to pick up some load +- * from other group and save more power +- */ +- if (sum_nr_running <= group_capacity - 1) { +- if (sum_nr_running > leader_nr_running || +- (sum_nr_running == leader_nr_running && +- first_cpu(group->cpumask) > +- first_cpu(group_leader->cpumask))) { +- group_leader = group; +- leader_nr_running = sum_nr_running; +- } ++ * capacity but still has some space to pick up some load ++ * from other group and save more power ++ */ ++ if (sum_nr_running <= group_capacity - 1) { ++ if (sum_nr_running > leader_nr_running || ++ (sum_nr_running == leader_nr_running && ++ first_cpu(group->cpumask) > ++ first_cpu(group_leader->cpumask))) { ++ group_leader = group; ++ leader_nr_running = sum_nr_running; ++ } + } + group_next: + #endif +@@ -2461,7 +2054,7 @@ group_next: + * a think about bumping its value to force at least one task to be + * moved + */ +- if (*imbalance < busiest_load_per_task) { ++ if (*imbalance + SCHED_LOAD_SCALE_FUZZ < busiest_load_per_task) { + unsigned long tmp, pwr_now, pwr_move; + unsigned int imbn; + +@@ -2475,7 +2068,8 @@ small_imbalance: + } else + this_load_per_task = SCHED_LOAD_SCALE; + +- if (max_load - this_load >= busiest_load_per_task * imbn) { ++ if (max_load - this_load + SCHED_LOAD_SCALE_FUZZ >= ++ busiest_load_per_task * imbn) { + *imbalance = busiest_load_per_task; + return busiest; + } +@@ -2884,30 +2478,6 @@ static void active_load_balance(struct r + spin_unlock(&target_rq->lock); + } + +-static void update_load(struct rq *this_rq) +-{ +- unsigned long this_load; +- int i, scale; +- +- this_load = this_rq->raw_weighted_load; +- +- /* Update our load: */ +- for (i = 0, scale = 1; i < 3; i++, scale <<= 1) { +- unsigned long old_load, new_load; +- +- old_load = this_rq->cpu_load[i]; +- new_load = this_load; +- /* +- * Round up the averaging division if load is increasing. This +- * prevents us from getting stuck on 9 if the load is 10, for +- * example. +- */ +- if (new_load > old_load) +- new_load += scale-1; +- this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) / scale; +- } +-} +- + /* + * run_rebalance_domains is triggered when needed from the scheduler tick. + * +@@ -2987,76 +2557,27 @@ static inline void idle_balance(int cpu, + } + #endif + +-static inline void wake_priority_sleeper(struct rq *rq) +-{ +-#ifdef CONFIG_SCHED_SMT +- if (!rq->nr_running) +- return; +- +- spin_lock(&rq->lock); +- /* +- * If an SMT sibling task has been put to sleep for priority +- * reasons reschedule the idle task to see if it can now run. +- */ +- if (rq->nr_running) +- resched_task(rq->idle); +- spin_unlock(&rq->lock); +-#endif +-} +- + DEFINE_PER_CPU(struct kernel_stat, kstat); + + EXPORT_PER_CPU_SYMBOL(kstat); + + /* +- * This is called on clock ticks and on context switches. +- * Bank in p->sched_time the ns elapsed since the last tick or switch. +- */ +-static inline void +-update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now) +-{ +- p->sched_time += now - p->last_ran; +- p->last_ran = rq->most_recent_timestamp = now; +-} +- +-/* +- * Return current->sched_time plus any more ns on the sched_clock ++ * Return current->sum_exec_runtime plus any more ns on the sched_clock + * that have not yet been banked. + */ +-unsigned long long current_sched_time(const struct task_struct *p) ++unsigned long long current_sched_runtime(const struct task_struct *p) + { + unsigned long long ns; + unsigned long flags; + + local_irq_save(flags); +- ns = p->sched_time + sched_clock() - p->last_ran; ++ ns = p->sum_exec_runtime + sched_clock() - p->last_ran; + local_irq_restore(flags); + + return ns; + } + + /* +- * We place interactive tasks back into the active array, if possible. +- * +- * To guarantee that this does not starve expired tasks we ignore the +- * interactivity of a task if the first expired task had to wait more +- * than a 'reasonable' amount of time. This deadline timeout is +- * load-dependent, as the frequency of array switched decreases with +- * increasing number of running tasks. We also ignore the interactivity +- * if a better static_prio task has expired: +- */ +-static inline int expired_starving(struct rq *rq) +-{ +- if (rq->curr->static_prio > rq->best_expired_prio) +- return 1; +- if (!STARVATION_LIMIT || !rq->expired_timestamp) +- return 0; +- if (jiffies - rq->expired_timestamp > STARVATION_LIMIT * rq->nr_running) +- return 1; +- return 0; +-} +- +-/* + * Account user cpu time to a process. + * @p: the process that the cpu time gets accounted to + * @hardirq_offset: the offset to subtract from hardirq_count() +@@ -3129,81 +2650,6 @@ void account_steal_time(struct task_stru + cpustat->steal = cputime64_add(cpustat->steal, tmp); + } + +-static void task_running_tick(struct rq *rq, struct task_struct *p) +-{ +- if (p->array != rq->active) { +- /* Task has expired but was not scheduled yet */ +- set_tsk_need_resched(p); +- return; +- } +- spin_lock(&rq->lock); +- /* +- * The task was running during this tick - update the +- * time slice counter. Note: we do not update a thread's +- * priority until it either goes to sleep or uses up its +- * timeslice. This makes it possible for interactive tasks +- * to use up their timeslices at their highest priority levels. +- */ +- if (rt_task(p)) { +- /* +- * RR tasks need a special form of timeslice management. +- * FIFO tasks have no timeslices. +- */ +- if ((p->policy == SCHED_RR) && !--p->time_slice) { +- p->time_slice = task_timeslice(p); +- p->first_time_slice = 0; +- set_tsk_need_resched(p); +- +- /* put it at the end of the queue: */ +- requeue_task(p, rq->active); +- } +- goto out_unlock; +- } +- if (!--p->time_slice) { +- dequeue_task(p, rq->active); +- set_tsk_need_resched(p); +- p->prio = effective_prio(p); +- p->time_slice = task_timeslice(p); +- p->first_time_slice = 0; +- +- if (!rq->expired_timestamp) +- rq->expired_timestamp = jiffies; +- if (!TASK_INTERACTIVE(p) || expired_starving(rq)) { +- enqueue_task(p, rq->expired); +- if (p->static_prio < rq->best_expired_prio) +- rq->best_expired_prio = p->static_prio; +- } else +- enqueue_task(p, rq->active); +- } else { +- /* +- * Prevent a too long timeslice allowing a task to monopolize +- * the CPU. We do this by splitting up the timeslice into +- * smaller pieces. +- * +- * Note: this does not mean the task's timeslices expire or +- * get lost in any way, they just might be preempted by +- * another task of equal priority. (one with higher +- * priority would have preempted this task already.) We +- * requeue this task to the end of the list on this priority +- * level, which is in essence a round-robin of tasks with +- * equal priority. +- * +- * This only applies to tasks in the interactive +- * delta range with at least TIMESLICE_GRANULARITY to requeue. +- */ +- if (TASK_INTERACTIVE(p) && !((task_timeslice(p) - +- p->time_slice) % TIMESLICE_GRANULARITY(p)) && +- (p->time_slice >= TIMESLICE_GRANULARITY(p)) && +- (p->array == rq->active)) { +- +- requeue_task(p, rq->active); +- set_tsk_need_resched(p); +- } +- } +-out_unlock: +- spin_unlock(&rq->lock); +-} +- + /* + * This function gets called by the timer code, with HZ frequency. + * We call it with interrupts disabled. +@@ -3213,155 +2659,19 @@ out_unlock: + */ + void scheduler_tick(void) + { +- unsigned long long now = sched_clock(); + struct task_struct *p = current; + int cpu = smp_processor_id(); + struct rq *rq = cpu_rq(cpu); + +- update_cpu_clock(p, rq, now); +- +- if (p == rq->idle) +- /* Task on the idle queue */ +- wake_priority_sleeper(rq); +- else ++ if (p != rq->idle) + task_running_tick(rq, p); ++ update_load_fair(rq); + #ifdef CONFIG_SMP +- update_load(rq); + if (time_after_eq(jiffies, rq->next_balance)) + raise_softirq(SCHED_SOFTIRQ); + #endif + } + +-#ifdef CONFIG_SCHED_SMT +-static inline void wakeup_busy_runqueue(struct rq *rq) +-{ +- /* If an SMT runqueue is sleeping due to priority reasons wake it up */ +- if (rq->curr == rq->idle && rq->nr_running) +- resched_task(rq->idle); +-} +- +-/* +- * Called with interrupt disabled and this_rq's runqueue locked. +- */ +-static void wake_sleeping_dependent(int this_cpu) +-{ +- struct sched_domain *tmp, *sd = NULL; +- int i; +- +- for_each_domain(this_cpu, tmp) { +- if (tmp->flags & SD_SHARE_CPUPOWER) { +- sd = tmp; +- break; +- } +- } +- +- if (!sd) +- return; +- +- for_each_cpu_mask(i, sd->span) { +- struct rq *smt_rq = cpu_rq(i); +- +- if (i == this_cpu) +- continue; +- if (unlikely(!spin_trylock(&smt_rq->lock))) +- continue; +- +- wakeup_busy_runqueue(smt_rq); +- spin_unlock(&smt_rq->lock); +- } +-} +- +-/* +- * number of 'lost' timeslices this task wont be able to fully +- * utilize, if another task runs on a sibling. This models the +- * slowdown effect of other tasks running on siblings: +- */ +-static inline unsigned long +-smt_slice(struct task_struct *p, struct sched_domain *sd) +-{ +- return p->time_slice * (100 - sd->per_cpu_gain) / 100; +-} +- +-/* +- * To minimise lock contention and not have to drop this_rq's runlock we only +- * trylock the sibling runqueues and bypass those runqueues if we fail to +- * acquire their lock. As we only trylock the normal locking order does not +- * need to be obeyed. +- */ +-static int +-dependent_sleeper(int this_cpu, struct rq *this_rq, struct task_struct *p) +-{ +- struct sched_domain *tmp, *sd = NULL; +- int ret = 0, i; +- +- /* kernel/rt threads do not participate in dependent sleeping */ +- if (!p->mm || rt_task(p)) +- return 0; +- +- for_each_domain(this_cpu, tmp) { +- if (tmp->flags & SD_SHARE_CPUPOWER) { +- sd = tmp; +- break; +- } +- } +- +- if (!sd) +- return 0; +- +- for_each_cpu_mask(i, sd->span) { +- struct task_struct *smt_curr; +- struct rq *smt_rq; +- +- if (i == this_cpu) +- continue; +- +- smt_rq = cpu_rq(i); +- if (unlikely(!spin_trylock(&smt_rq->lock))) +- continue; +- +- smt_curr = smt_rq->curr; +- +- if (!smt_curr->mm) +- goto unlock; +- +- /* +- * If a user task with lower static priority than the +- * running task on the SMT sibling is trying to schedule, +- * delay it till there is proportionately less timeslice +- * left of the sibling task to prevent a lower priority +- * task from using an unfair proportion of the +- * physical cpu's resources. -ck +- */ +- if (rt_task(smt_curr)) { +- /* +- * With real time tasks we run non-rt tasks only +- * per_cpu_gain% of the time. +- */ +- if ((jiffies % DEF_TIMESLICE) > +- (sd->per_cpu_gain * DEF_TIMESLICE / 100)) +- ret = 1; +- } else { +- if (smt_curr->static_prio < p->static_prio && +- !TASK_PREEMPTS_CURR(p, smt_rq) && +- smt_slice(smt_curr, sd) > task_timeslice(p)) +- ret = 1; +- } +-unlock: +- spin_unlock(&smt_rq->lock); +- } +- return ret; +-} +-#else +-static inline void wake_sleeping_dependent(int this_cpu) +-{ +-} +-static inline int +-dependent_sleeper(int this_cpu, struct rq *this_rq, struct task_struct *p) +-{ +- return 0; +-} +-#endif +- + #if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT) + + void fastcall add_preempt_count(int val) +@@ -3400,49 +2710,27 @@ EXPORT_SYMBOL(sub_preempt_count); + + #endif + +-static inline int interactive_sleep(enum sleep_type sleep_type) +-{ +- return (sleep_type == SLEEP_INTERACTIVE || +- sleep_type == SLEEP_INTERRUPTED); +-} +- + /* +- * schedule() is the main scheduler function. ++ * Various schedule()-time debugging checks and statistics: + */ +-asmlinkage void __sched schedule(void) ++static inline void schedule_debug(struct rq *rq, struct task_struct *prev) + { +- struct task_struct *prev, *next; +- struct prio_array *array; +- struct list_head *queue; +- unsigned long long now; +- unsigned long run_time; +- int cpu, idx, new_prio; +- long *switch_count; +- struct rq *rq; +- + /* + * Test if we are atomic. Since do_exit() needs to call into + * schedule() atomically, we ignore that path for now. + * Otherwise, whine if we are scheduling when we should not be. + */ +- if (unlikely(in_atomic() && !current->exit_state)) { ++ if (unlikely(in_atomic_preempt_off() && !prev->exit_state)) { + printk(KERN_ERR "BUG: scheduling while atomic: " + "%s/0x%08x/%d\n", +- current->comm, preempt_count(), current->pid); +- debug_show_held_locks(current); ++ prev->comm, preempt_count(), prev->pid); ++ debug_show_held_locks(prev); + if (irqs_disabled()) +- print_irqtrace_events(current); ++ print_irqtrace_events(prev); + dump_stack(); + } + profile_hit(SCHED_PROFILING, __builtin_return_address(0)); + +-need_resched: +- preempt_disable(); +- prev = current; +- release_kernel_lock(prev); +-need_resched_nonpreemptible: +- rq = this_rq(); +- + /* + * The idle thread is not allowed to schedule! + * Remove this check after it has been exercised a bit. +@@ -3453,19 +2741,45 @@ need_resched_nonpreemptible: + } + + schedstat_inc(rq, sched_cnt); +- now = sched_clock(); +- if (likely((long long)(now - prev->timestamp) < NS_MAX_SLEEP_AVG)) { +- run_time = now - prev->timestamp; +- if (unlikely((long long)(now - prev->timestamp) < 0)) +- run_time = 0; +- } else +- run_time = NS_MAX_SLEEP_AVG; ++} + +- /* +- * Tasks charged proportionately less run_time at high sleep_avg to +- * delay them losing their interactive status +- */ +- run_time /= (CURRENT_BONUS(prev) ? : 1); ++static inline struct task_struct * ++pick_next_task(struct rq *rq, struct task_struct *prev) ++{ ++ struct sched_class *class = sched_class_highest; ++ u64 now = __rq_clock(rq); ++ struct task_struct *p; ++ ++ prev->sched_class->put_prev_task(rq, prev, now); ++ ++ do { ++ p = class->pick_next_task(rq, now); ++ if (p) ++ return p; ++ class = class->next; ++ } while (class); ++ ++ return NULL; ++} ++ ++/* ++ * schedule() is the main scheduler function. ++ */ ++asmlinkage void __sched schedule(void) ++{ ++ struct task_struct *prev, *next; ++ long *switch_count; ++ struct rq *rq; ++ int cpu; ++ ++need_resched: ++ preempt_disable(); ++ prev = current; ++ release_kernel_lock(prev); ++need_resched_nonpreemptible: ++ rq = this_rq(); ++ ++ schedule_debug(rq, prev); + + spin_lock_irq(&rq->lock); + +@@ -3478,7 +2792,7 @@ need_resched_nonpreemptible: + else { + if (prev->state == TASK_UNINTERRUPTIBLE) + rq->nr_uninterruptible++; +- deactivate_task(prev, rq); ++ deactivate_task(rq, prev, 1); + } + } + +@@ -3486,68 +2800,25 @@ need_resched_nonpreemptible: + if (unlikely(!rq->nr_running)) { + idle_balance(cpu, rq); + if (!rq->nr_running) { ++ prev->sched_class->put_prev_task(rq, prev, ++ __rq_clock(rq)); + next = rq->idle; +- rq->expired_timestamp = 0; +- wake_sleeping_dependent(cpu); ++ schedstat_inc(rq, sched_goidle); + goto switch_tasks; + } + } + +- array = rq->active; +- if (unlikely(!array->nr_active)) { +- /* +- * Switch the active and expired arrays. +- */ +- schedstat_inc(rq, sched_switch); +- rq->active = rq->expired; +- rq->expired = array; +- array = rq->active; +- rq->expired_timestamp = 0; +- rq->best_expired_prio = MAX_PRIO; +- } +- +- idx = sched_find_first_bit(array->bitmap); +- queue = array->queue + idx; +- next = list_entry(queue->next, struct task_struct, run_list); +- +- if (!rt_task(next) && interactive_sleep(next->sleep_type)) { +- unsigned long long delta = now - next->timestamp; +- if (unlikely((long long)(now - next->timestamp) < 0)) +- delta = 0; +- +- if (next->sleep_type == SLEEP_INTERACTIVE) +- delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128; +- +- array = next->array; +- new_prio = recalc_task_prio(next, next->timestamp + delta); +- +- if (unlikely(next->prio != new_prio)) { +- dequeue_task(next, array); +- next->prio = new_prio; +- enqueue_task(next, array); +- } +- } +- next->sleep_type = SLEEP_NORMAL; +- if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next)) +- next = rq->idle; ++ next = pick_next_task(rq, prev); ++ next->nr_switches++; ++ + switch_tasks: +- if (next == rq->idle) +- schedstat_inc(rq, sched_goidle); + prefetch(next); + prefetch_stack(next); + clear_tsk_need_resched(prev); + rcu_qsctr_inc(task_cpu(prev)); + +- update_cpu_clock(prev, rq, now); +- +- prev->sleep_avg -= run_time; +- if ((long)prev->sleep_avg <= 0) +- prev->sleep_avg = 0; +- prev->timestamp = prev->last_ran = now; +- + sched_info_switch(prev, next); + if (likely(prev != next)) { +- next->timestamp = next->last_ran = now; + rq->nr_switches++; + rq->curr = next; + ++*switch_count; +@@ -3978,29 +3249,28 @@ EXPORT_SYMBOL(sleep_on_timeout); + */ + void rt_mutex_setprio(struct task_struct *p, int prio) + { +- struct prio_array *array; + unsigned long flags; ++ int oldprio, on_rq; + struct rq *rq; +- int oldprio; + + BUG_ON(prio < 0 || prio > MAX_PRIO); + + rq = task_rq_lock(p, &flags); + + oldprio = p->prio; +- array = p->array; +- if (array) +- dequeue_task(p, array); ++ on_rq = p->on_rq; ++ if (on_rq) ++ dequeue_task(rq, p, 0); ++ ++ if (rt_prio(prio)) ++ p->sched_class = &rt_sched_class; ++ else ++ p->sched_class = &fair_sched_class; ++ + p->prio = prio; + +- if (array) { +- /* +- * If changing to an RT priority then queue it +- * in the active array! +- */ +- if (rt_task(p)) +- array = rq->active; +- enqueue_task(p, array); ++ if (on_rq) { ++ enqueue_task(rq, p, 0); + /* + * Reschedule if we are currently running on this runqueue and + * our priority decreased, or if we are not currently running on +@@ -4009,8 +3279,9 @@ void rt_mutex_setprio(struct task_struct + if (task_running(rq, p)) { + if (p->prio > oldprio) + resched_task(rq->curr); +- } else if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ } else { ++ check_preempt_curr(rq, p); ++ } + } + task_rq_unlock(rq, &flags); + } +@@ -4019,8 +3290,7 @@ void rt_mutex_setprio(struct task_struct + + void set_user_nice(struct task_struct *p, long nice) + { +- struct prio_array *array; +- int old_prio, delta; ++ int old_prio, delta, on_rq; + unsigned long flags; + struct rq *rq; + +@@ -4041,9 +3311,9 @@ void set_user_nice(struct task_struct *p + p->static_prio = NICE_TO_PRIO(nice); + goto out_unlock; + } +- array = p->array; +- if (array) { +- dequeue_task(p, array); ++ on_rq = p->on_rq; ++ if (on_rq) { ++ dequeue_task(rq, p, 0); + dec_raw_weighted_load(rq, p); + } + +@@ -4053,8 +3323,8 @@ void set_user_nice(struct task_struct *p + p->prio = effective_prio(p); + delta = p->prio - old_prio; + +- if (array) { +- enqueue_task(p, array); ++ if (on_rq) { ++ enqueue_task(rq, p, 0); + inc_raw_weighted_load(rq, p); + /* + * If the task increased its priority or is running and +@@ -4175,20 +3445,27 @@ static inline struct task_struct *find_p + } + + /* Actually do priority change: must hold rq lock. */ +-static void __setscheduler(struct task_struct *p, int policy, int prio) ++static void ++__setscheduler(struct rq *rq, struct task_struct *p, int policy, int prio) + { +- BUG_ON(p->array); ++ BUG_ON(p->on_rq); + + p->policy = policy; ++ switch (p->policy) { ++ case SCHED_NORMAL: ++ case SCHED_BATCH: ++ p->sched_class = &fair_sched_class; ++ break; ++ case SCHED_FIFO: ++ case SCHED_RR: ++ p->sched_class = &rt_sched_class; ++ break; ++ } ++ + p->rt_priority = prio; + p->normal_prio = normal_prio(p); + /* we are holding p->pi_lock already */ + p->prio = rt_mutex_getprio(p); +- /* +- * SCHED_BATCH tasks are treated as perpetual CPU hogs: +- */ +- if (policy == SCHED_BATCH) +- p->sleep_avg = 0; + set_load_weight(p); + } + +@@ -4204,8 +3481,7 @@ static void __setscheduler(struct task_s + int sched_setscheduler(struct task_struct *p, int policy, + struct sched_param *param) + { +- int retval, oldprio, oldpolicy = -1; +- struct prio_array *array; ++ int retval, oldprio, oldpolicy = -1, on_rq; + unsigned long flags; + struct rq *rq; + +@@ -4279,13 +3555,13 @@ recheck: + spin_unlock_irqrestore(&p->pi_lock, flags); + goto recheck; + } +- array = p->array; +- if (array) +- deactivate_task(p, rq); ++ on_rq = p->on_rq; ++ if (on_rq) ++ deactivate_task(rq, p, 0); + oldprio = p->prio; +- __setscheduler(p, policy, param->sched_priority); +- if (array) { +- __activate_task(p, rq); ++ __setscheduler(rq, p, policy, param->sched_priority); ++ if (on_rq) { ++ activate_task(rq, p, 0); + /* + * Reschedule if we are currently running on this runqueue and + * our priority decreased, or if we are not currently running on +@@ -4294,8 +3570,9 @@ recheck: + if (task_running(rq, p)) { + if (p->prio > oldprio) + resched_task(rq->curr); +- } else if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ } else { ++ check_preempt_curr(rq, p); ++ } + } + __task_rq_unlock(rq); + spin_unlock_irqrestore(&p->pi_lock, flags); +@@ -4558,50 +3835,66 @@ asmlinkage long sys_sched_getaffinity(pi + if (ret < 0) + return ret; + +- if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t))) +- return -EFAULT; ++ if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t))) ++ return -EFAULT; ++ ++ return sizeof(cpumask_t); ++} ++ ++/** ++ * sys_sched_yield - yield the current processor to other threads. ++ * ++ * This function yields the current CPU to other tasks. If there are no ++ * other threads running on this CPU then this function will return. ++ */ ++asmlinkage long sys_sched_yield(void) ++{ ++ struct rq *rq = this_rq_lock(); ++ ++ schedstat_inc(rq, yld_cnt); ++ if (rq->nr_running == 1) ++ schedstat_inc(rq, yld_act_empty); ++ else ++ current->sched_class->yield_task(rq, current, NULL); ++ ++ /* ++ * Since we are going to call schedule() anyway, there's ++ * no need to preempt or enable interrupts: ++ */ ++ __release(rq->lock); ++ spin_release(&rq->lock.dep_map, 1, _THIS_IP_); ++ _raw_spin_unlock(&rq->lock); ++ preempt_enable_no_resched(); ++ ++ schedule(); + +- return sizeof(cpumask_t); ++ return 0; + } + + /** +- * sys_sched_yield - yield the current processor to other threads. ++ * sys_sched_yield_to - yield the current processor to another thread + * +- * this function yields the current CPU by moving the calling thread ++ * This function yields the current CPU by moving the calling thread + * to the expired array. If there are no other threads running on this + * CPU then this function will return. + */ +-asmlinkage long sys_sched_yield(void) ++asmlinkage long sys_sched_yield_to(pid_t pid) + { +- struct rq *rq = this_rq_lock(); +- struct prio_array *array = current->array, *target = rq->expired; ++ struct task_struct *p_to; ++ struct rq *rq; + +- schedstat_inc(rq, yld_cnt); +- /* +- * We implement yielding by moving the task into the expired +- * queue. +- * +- * (special rule: RT tasks will just roundrobin in the active +- * array.) +- */ +- if (rt_task(current)) +- target = rq->active; ++ rcu_read_lock(); ++ p_to = find_task_by_pid(pid); ++ if (!p_to) ++ goto out_unlock; + +- if (array->nr_active == 1) { ++ rq = this_rq_lock(); ++ ++ schedstat_inc(rq, yld_cnt); ++ if (rq->nr_running == 1) + schedstat_inc(rq, yld_act_empty); +- if (!rq->expired->nr_active) +- schedstat_inc(rq, yld_both_empty); +- } else if (!rq->expired->nr_active) +- schedstat_inc(rq, yld_exp_empty); +- +- if (array != target) { +- dequeue_task(current, array); +- enqueue_task(current, target); +- } else +- /* +- * requeue_task is cheaper so perform that if possible. +- */ +- requeue_task(current, array); ++ else ++ current->sched_class->yield_task(rq, current, p_to); + + /* + * Since we are going to call schedule() anyway, there's +@@ -4610,13 +3903,19 @@ asmlinkage long sys_sched_yield(void) + __release(rq->lock); + spin_release(&rq->lock.dep_map, 1, _THIS_IP_); + _raw_spin_unlock(&rq->lock); ++ rcu_read_unlock(); + preempt_enable_no_resched(); + + schedule(); + + return 0; ++ ++out_unlock: ++ rcu_read_unlock(); ++ return -ESRCH; + } + ++ + static void __cond_resched(void) + { + #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP +@@ -4812,7 +4111,7 @@ long sys_sched_rr_get_interval(pid_t pid + goto out_unlock; + + jiffies_to_timespec(p->policy == SCHED_FIFO ? +- 0 : task_timeslice(p), &t); ++ 0 : static_prio_timeslice(p->static_prio), &t); + read_unlock(&tasklist_lock); + retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0; + out_nounlock: +@@ -4915,7 +4214,7 @@ void show_state_filter(unsigned long sta + * console might take alot of time: + */ + touch_nmi_watchdog(); +- if (p->state & state_filter) ++ if (!state_filter || (p->state & state_filter)) + show_task(p); + } while_each_thread(g, p); + +@@ -4925,6 +4224,7 @@ void show_state_filter(unsigned long sta + */ + if (state_filter == -1) + debug_show_all_locks(); ++ sysrq_sched_debug_show(); + } + + /** +@@ -4940,11 +4240,10 @@ void __cpuinit init_idle(struct task_str + struct rq *rq = cpu_rq(cpu); + unsigned long flags; + +- idle->timestamp = sched_clock(); +- idle->sleep_avg = 0; +- idle->array = NULL; ++ __sched_fork(idle); ++ idle->exec_start = sched_clock(); ++ + idle->prio = idle->normal_prio = MAX_PRIO; +- idle->state = TASK_RUNNING; + idle->cpus_allowed = cpumask_of_cpu(cpu); + set_task_cpu(idle, cpu); + +@@ -5062,19 +4361,10 @@ static int __migrate_task(struct task_st + goto out; + + set_task_cpu(p, dest_cpu); +- if (p->array) { +- /* +- * Sync timestamp with rq_dest's before activating. +- * The same thing could be achieved by doing this step +- * afterwards, and pretending it was a local activate. +- * This way is cleaner and logically correct. +- */ +- p->timestamp = p->timestamp - rq_src->most_recent_timestamp +- + rq_dest->most_recent_timestamp; +- deactivate_task(p, rq_src); +- __activate_task(p, rq_dest); +- if (TASK_PREEMPTS_CURR(p, rq_dest)) +- resched_task(rq_dest->curr); ++ if (p->on_rq) { ++ deactivate_task(rq_src, p, 0); ++ activate_task(rq_dest, p, 0); ++ check_preempt_curr(rq_dest, p); + } + ret = 1; + out: +@@ -5246,10 +4536,10 @@ void sched_idle_next(void) + */ + spin_lock_irqsave(&rq->lock, flags); + +- __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1); ++ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1); + + /* Add idle task to the _front_ of its priority queue: */ +- __activate_idle_task(p, rq); ++ activate_idle_task(p, rq); + + spin_unlock_irqrestore(&rq->lock, flags); + } +@@ -5299,16 +4589,15 @@ static void migrate_dead(unsigned int de + static void migrate_dead_tasks(unsigned int dead_cpu) + { + struct rq *rq = cpu_rq(dead_cpu); +- unsigned int arr, i; ++ struct task_struct *next; + +- for (arr = 0; arr < 2; arr++) { +- for (i = 0; i < MAX_PRIO; i++) { +- struct list_head *list = &rq->arrays[arr].queue[i]; +- +- while (!list_empty(list)) +- migrate_dead(dead_cpu, list_entry(list->next, +- struct task_struct, run_list)); +- } ++ for (;;) { ++ if (!rq->nr_running) ++ break; ++ next = pick_next_task(rq, rq->curr); ++ if (!next) ++ break; ++ migrate_dead(dead_cpu, next); + } + } + #endif /* CONFIG_HOTPLUG_CPU */ +@@ -5334,7 +4623,7 @@ migration_call(struct notifier_block *nf + kthread_bind(p, cpu); + /* Must be high prio: stop_machine expects to yield to it. */ + rq = task_rq_lock(p, &flags); +- __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1); ++ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1); + task_rq_unlock(rq, &flags); + cpu_rq(cpu)->migration_thread = p; + break; +@@ -5362,9 +4651,9 @@ migration_call(struct notifier_block *nf + rq->migration_thread = NULL; + /* Idle task back to normal (off runqueue, low prio) */ + rq = task_rq_lock(rq->idle, &flags); +- deactivate_task(rq->idle, rq); ++ deactivate_task(rq, rq->idle, 0); + rq->idle->static_prio = MAX_PRIO; +- __setscheduler(rq->idle, SCHED_NORMAL, 0); ++ __setscheduler(rq, rq->idle, SCHED_NORMAL, 0); + migrate_dead_tasks(cpu); + task_rq_unlock(rq, &flags); + migrate_nr_uninterruptible(rq); +@@ -5665,483 +4954,6 @@ init_sched_build_groups(cpumask_t span, + + #define SD_NODES_PER_DOMAIN 16 + +-/* +- * Self-tuning task migration cost measurement between source and target CPUs. +- * +- * This is done by measuring the cost of manipulating buffers of varying +- * sizes. For a given buffer-size here are the steps that are taken: +- * +- * 1) the source CPU reads+dirties a shared buffer +- * 2) the target CPU reads+dirties the same shared buffer +- * +- * We measure how long they take, in the following 4 scenarios: +- * +- * - source: CPU1, target: CPU2 | cost1 +- * - source: CPU2, target: CPU1 | cost2 +- * - source: CPU1, target: CPU1 | cost3 +- * - source: CPU2, target: CPU2 | cost4 +- * +- * We then calculate the cost3+cost4-cost1-cost2 difference - this is +- * the cost of migration. +- * +- * We then start off from a small buffer-size and iterate up to larger +- * buffer sizes, in 5% steps - measuring each buffer-size separately, and +- * doing a maximum search for the cost. (The maximum cost for a migration +- * normally occurs when the working set size is around the effective cache +- * size.) +- */ +-#define SEARCH_SCOPE 2 +-#define MIN_CACHE_SIZE (64*1024U) +-#define DEFAULT_CACHE_SIZE (5*1024*1024U) +-#define ITERATIONS 1 +-#define SIZE_THRESH 130 +-#define COST_THRESH 130 +- +-/* +- * The migration cost is a function of 'domain distance'. Domain +- * distance is the number of steps a CPU has to iterate down its +- * domain tree to share a domain with the other CPU. The farther +- * two CPUs are from each other, the larger the distance gets. +- * +- * Note that we use the distance only to cache measurement results, +- * the distance value is not used numerically otherwise. When two +- * CPUs have the same distance it is assumed that the migration +- * cost is the same. (this is a simplification but quite practical) +- */ +-#define MAX_DOMAIN_DISTANCE 32 +- +-static unsigned long long migration_cost[MAX_DOMAIN_DISTANCE] = +- { [ 0 ... MAX_DOMAIN_DISTANCE-1 ] = +-/* +- * Architectures may override the migration cost and thus avoid +- * boot-time calibration. Unit is nanoseconds. Mostly useful for +- * virtualized hardware: +- */ +-#ifdef CONFIG_DEFAULT_MIGRATION_COST +- CONFIG_DEFAULT_MIGRATION_COST +-#else +- -1LL +-#endif +-}; +- +-/* +- * Allow override of migration cost - in units of microseconds. +- * E.g. migration_cost=1000,2000,3000 will set up a level-1 cost +- * of 1 msec, level-2 cost of 2 msecs and level3 cost of 3 msecs: +- */ +-static int __init migration_cost_setup(char *str) +-{ +- int ints[MAX_DOMAIN_DISTANCE+1], i; +- +- str = get_options(str, ARRAY_SIZE(ints), ints); +- +- printk("#ints: %d\n", ints[0]); +- for (i = 1; i <= ints[0]; i++) { +- migration_cost[i-1] = (unsigned long long)ints[i]*1000; +- printk("migration_cost[%d]: %Ld\n", i-1, migration_cost[i-1]); +- } +- return 1; +-} +- +-__setup ("migration_cost=", migration_cost_setup); +- +-/* +- * Global multiplier (divisor) for migration-cutoff values, +- * in percentiles. E.g. use a value of 150 to get 1.5 times +- * longer cache-hot cutoff times. +- * +- * (We scale it from 100 to 128 to long long handling easier.) +- */ +- +-#define MIGRATION_FACTOR_SCALE 128 +- +-static unsigned int migration_factor = MIGRATION_FACTOR_SCALE; +- +-static int __init setup_migration_factor(char *str) +-{ +- get_option(&str, &migration_factor); +- migration_factor = migration_factor * MIGRATION_FACTOR_SCALE / 100; +- return 1; +-} +- +-__setup("migration_factor=", setup_migration_factor); +- +-/* +- * Estimated distance of two CPUs, measured via the number of domains +- * we have to pass for the two CPUs to be in the same span: +- */ +-static unsigned long domain_distance(int cpu1, int cpu2) +-{ +- unsigned long distance = 0; +- struct sched_domain *sd; +- +- for_each_domain(cpu1, sd) { +- WARN_ON(!cpu_isset(cpu1, sd->span)); +- if (cpu_isset(cpu2, sd->span)) +- return distance; +- distance++; +- } +- if (distance >= MAX_DOMAIN_DISTANCE) { +- WARN_ON(1); +- distance = MAX_DOMAIN_DISTANCE-1; +- } +- +- return distance; +-} +- +-static unsigned int migration_debug; +- +-static int __init setup_migration_debug(char *str) +-{ +- get_option(&str, &migration_debug); +- return 1; +-} +- +-__setup("migration_debug=", setup_migration_debug); +- +-/* +- * Maximum cache-size that the scheduler should try to measure. +- * Architectures with larger caches should tune this up during +- * bootup. Gets used in the domain-setup code (i.e. during SMP +- * bootup). +- */ +-unsigned int max_cache_size; +- +-static int __init setup_max_cache_size(char *str) +-{ +- get_option(&str, &max_cache_size); +- return 1; +-} +- +-__setup("max_cache_size=", setup_max_cache_size); +- +-/* +- * Dirty a big buffer in a hard-to-predict (for the L2 cache) way. This +- * is the operation that is timed, so we try to generate unpredictable +- * cachemisses that still end up filling the L2 cache: +- */ +-static void touch_cache(void *__cache, unsigned long __size) +-{ +- unsigned long size = __size / sizeof(long); +- unsigned long chunk1 = size / 3; +- unsigned long chunk2 = 2 * size / 3; +- unsigned long *cache = __cache; +- int i; +- +- for (i = 0; i < size/6; i += 8) { +- switch (i % 6) { +- case 0: cache[i]++; +- case 1: cache[size-1-i]++; +- case 2: cache[chunk1-i]++; +- case 3: cache[chunk1+i]++; +- case 4: cache[chunk2-i]++; +- case 5: cache[chunk2+i]++; +- } +- } +-} +- +-/* +- * Measure the cache-cost of one task migration. Returns in units of nsec. +- */ +-static unsigned long long +-measure_one(void *cache, unsigned long size, int source, int target) +-{ +- cpumask_t mask, saved_mask; +- unsigned long long t0, t1, t2, t3, cost; +- +- saved_mask = current->cpus_allowed; +- +- /* +- * Flush source caches to RAM and invalidate them: +- */ +- sched_cacheflush(); +- +- /* +- * Migrate to the source CPU: +- */ +- mask = cpumask_of_cpu(source); +- set_cpus_allowed(current, mask); +- WARN_ON(smp_processor_id() != source); +- +- /* +- * Dirty the working set: +- */ +- t0 = sched_clock(); +- touch_cache(cache, size); +- t1 = sched_clock(); +- +- /* +- * Migrate to the target CPU, dirty the L2 cache and access +- * the shared buffer. (which represents the working set +- * of a migrated task.) +- */ +- mask = cpumask_of_cpu(target); +- set_cpus_allowed(current, mask); +- WARN_ON(smp_processor_id() != target); +- +- t2 = sched_clock(); +- touch_cache(cache, size); +- t3 = sched_clock(); +- +- cost = t1-t0 + t3-t2; +- +- if (migration_debug >= 2) +- printk("[%d->%d]: %8Ld %8Ld %8Ld => %10Ld.\n", +- source, target, t1-t0, t1-t0, t3-t2, cost); +- /* +- * Flush target caches to RAM and invalidate them: +- */ +- sched_cacheflush(); +- +- set_cpus_allowed(current, saved_mask); +- +- return cost; +-} +- +-/* +- * Measure a series of task migrations and return the average +- * result. Since this code runs early during bootup the system +- * is 'undisturbed' and the average latency makes sense. +- * +- * The algorithm in essence auto-detects the relevant cache-size, +- * so it will properly detect different cachesizes for different +- * cache-hierarchies, depending on how the CPUs are connected. +- * +- * Architectures can prime the upper limit of the search range via +- * max_cache_size, otherwise the search range defaults to 20MB...64K. +- */ +-static unsigned long long +-measure_cost(int cpu1, int cpu2, void *cache, unsigned int size) +-{ +- unsigned long long cost1, cost2; +- int i; +- +- /* +- * Measure the migration cost of 'size' bytes, over an +- * average of 10 runs: +- * +- * (We perturb the cache size by a small (0..4k) +- * value to compensate size/alignment related artifacts. +- * We also subtract the cost of the operation done on +- * the same CPU.) +- */ +- cost1 = 0; +- +- /* +- * dry run, to make sure we start off cache-cold on cpu1, +- * and to get any vmalloc pagefaults in advance: +- */ +- measure_one(cache, size, cpu1, cpu2); +- for (i = 0; i < ITERATIONS; i++) +- cost1 += measure_one(cache, size - i * 1024, cpu1, cpu2); +- +- measure_one(cache, size, cpu2, cpu1); +- for (i = 0; i < ITERATIONS; i++) +- cost1 += measure_one(cache, size - i * 1024, cpu2, cpu1); +- +- /* +- * (We measure the non-migrating [cached] cost on both +- * cpu1 and cpu2, to handle CPUs with different speeds) +- */ +- cost2 = 0; +- +- measure_one(cache, size, cpu1, cpu1); +- for (i = 0; i < ITERATIONS; i++) +- cost2 += measure_one(cache, size - i * 1024, cpu1, cpu1); +- +- measure_one(cache, size, cpu2, cpu2); +- for (i = 0; i < ITERATIONS; i++) +- cost2 += measure_one(cache, size - i * 1024, cpu2, cpu2); +- +- /* +- * Get the per-iteration migration cost: +- */ +- do_div(cost1, 2 * ITERATIONS); +- do_div(cost2, 2 * ITERATIONS); +- +- return cost1 - cost2; +-} +- +-static unsigned long long measure_migration_cost(int cpu1, int cpu2) +-{ +- unsigned long long max_cost = 0, fluct = 0, avg_fluct = 0; +- unsigned int max_size, size, size_found = 0; +- long long cost = 0, prev_cost; +- void *cache; +- +- /* +- * Search from max_cache_size*5 down to 64K - the real relevant +- * cachesize has to lie somewhere inbetween. +- */ +- if (max_cache_size) { +- max_size = max(max_cache_size * SEARCH_SCOPE, MIN_CACHE_SIZE); +- size = max(max_cache_size / SEARCH_SCOPE, MIN_CACHE_SIZE); +- } else { +- /* +- * Since we have no estimation about the relevant +- * search range +- */ +- max_size = DEFAULT_CACHE_SIZE * SEARCH_SCOPE; +- size = MIN_CACHE_SIZE; +- } +- +- if (!cpu_online(cpu1) || !cpu_online(cpu2)) { +- printk("cpu %d and %d not both online!\n", cpu1, cpu2); +- return 0; +- } +- +- /* +- * Allocate the working set: +- */ +- cache = vmalloc(max_size); +- if (!cache) { +- printk("could not vmalloc %d bytes for cache!\n", 2 * max_size); +- return 1000000; /* return 1 msec on very small boxen */ +- } +- +- while (size <= max_size) { +- prev_cost = cost; +- cost = measure_cost(cpu1, cpu2, cache, size); +- +- /* +- * Update the max: +- */ +- if (cost > 0) { +- if (max_cost < cost) { +- max_cost = cost; +- size_found = size; +- } +- } +- /* +- * Calculate average fluctuation, we use this to prevent +- * noise from triggering an early break out of the loop: +- */ +- fluct = abs(cost - prev_cost); +- avg_fluct = (avg_fluct + fluct)/2; +- +- if (migration_debug) +- printk("-> [%d][%d][%7d] %3ld.%ld [%3ld.%ld] (%ld): " +- "(%8Ld %8Ld)\n", +- cpu1, cpu2, size, +- (long)cost / 1000000, +- ((long)cost / 100000) % 10, +- (long)max_cost / 1000000, +- ((long)max_cost / 100000) % 10, +- domain_distance(cpu1, cpu2), +- cost, avg_fluct); +- +- /* +- * If we iterated at least 20% past the previous maximum, +- * and the cost has dropped by more than 20% already, +- * (taking fluctuations into account) then we assume to +- * have found the maximum and break out of the loop early: +- */ +- if (size_found && (size*100 > size_found*SIZE_THRESH)) +- if (cost+avg_fluct <= 0 || +- max_cost*100 > (cost+avg_fluct)*COST_THRESH) { +- +- if (migration_debug) +- printk("-> found max.\n"); +- break; +- } +- /* +- * Increase the cachesize in 10% steps: +- */ +- size = size * 10 / 9; +- } +- +- if (migration_debug) +- printk("[%d][%d] working set size found: %d, cost: %Ld\n", +- cpu1, cpu2, size_found, max_cost); +- +- vfree(cache); +- +- /* +- * A task is considered 'cache cold' if at least 2 times +- * the worst-case cost of migration has passed. +- * +- * (this limit is only listened to if the load-balancing +- * situation is 'nice' - if there is a large imbalance we +- * ignore it for the sake of CPU utilization and +- * processing fairness.) +- */ +- return 2 * max_cost * migration_factor / MIGRATION_FACTOR_SCALE; +-} +- +-static void calibrate_migration_costs(const cpumask_t *cpu_map) +-{ +- int cpu1 = -1, cpu2 = -1, cpu, orig_cpu = raw_smp_processor_id(); +- unsigned long j0, j1, distance, max_distance = 0; +- struct sched_domain *sd; +- +- j0 = jiffies; +- +- /* +- * First pass - calculate the cacheflush times: +- */ +- for_each_cpu_mask(cpu1, *cpu_map) { +- for_each_cpu_mask(cpu2, *cpu_map) { +- if (cpu1 == cpu2) +- continue; +- distance = domain_distance(cpu1, cpu2); +- max_distance = max(max_distance, distance); +- /* +- * No result cached yet? +- */ +- if (migration_cost[distance] == -1LL) +- migration_cost[distance] = +- measure_migration_cost(cpu1, cpu2); +- } +- } +- /* +- * Second pass - update the sched domain hierarchy with +- * the new cache-hot-time estimations: +- */ +- for_each_cpu_mask(cpu, *cpu_map) { +- distance = 0; +- for_each_domain(cpu, sd) { +- sd->cache_hot_time = migration_cost[distance]; +- distance++; +- } +- } +- /* +- * Print the matrix: +- */ +- if (migration_debug) +- printk("migration: max_cache_size: %d, cpu: %d MHz:\n", +- max_cache_size, +-#ifdef CONFIG_X86 +- cpu_khz/1000 +-#else +- -1 +-#endif +- ); +- if (system_state == SYSTEM_BOOTING && num_online_cpus() > 1) { +- printk("migration_cost="); +- for (distance = 0; distance <= max_distance; distance++) { +- if (distance) +- printk(","); +- printk("%ld", (long)migration_cost[distance] / 1000); +- } +- printk("\n"); +- } +- j1 = jiffies; +- if (migration_debug) +- printk("migration: %ld seconds\n", (j1-j0) / HZ); +- +- /* +- * Move back to the original CPU. NUMA-Q gets confused +- * if we migrate to another quad during bootup. +- */ +- if (raw_smp_processor_id() != orig_cpu) { +- cpumask_t mask = cpumask_of_cpu(orig_cpu), +- saved_mask = current->cpus_allowed; +- +- set_cpus_allowed(current, mask); +- set_cpus_allowed(current, saved_mask); +- } +-} +- + #ifdef CONFIG_NUMA + + /** +@@ -6671,10 +5483,6 @@ static int build_sched_domains(const cpu + #endif + cpu_attach_domain(sd, i); + } +- /* +- * Tune cache-hot values: +- */ +- calibrate_migration_costs(cpu_map); + + return 0; + +@@ -6875,6 +5683,16 @@ void __init sched_init_smp(void) + /* Move init over to a non-isolated CPU */ + if (set_cpus_allowed(current, non_isolated_cpus) < 0) + BUG(); ++ /* ++ * Increase the granularity value when there are more CPUs, ++ * because with more CPUs the 'effective latency' as visible ++ * to users decreases. But the relationship is not linear, ++ * so pick a second-best guess by going with the log2 of the ++ * number of CPUs. ++ * ++ * This idea comes from the SD scheduler of Con Kolivas: ++ */ ++ sysctl_sched_granularity *= 1 + ilog2(num_online_cpus()); + } + #else + void __init sched_init_smp(void) +@@ -6894,7 +5712,14 @@ int in_sched_functions(unsigned long add + + void __init sched_init(void) + { +- int i, j, k; ++ int i, j; ++ ++ current->sched_class = &fair_sched_class; ++ /* ++ * Link up the scheduling class hierarchy: ++ */ ++ rt_sched_class.next = &fair_sched_class; ++ fair_sched_class.next = NULL; + + for_each_possible_cpu(i) { + struct prio_array *array; +@@ -6904,14 +5729,13 @@ void __init sched_init(void) + spin_lock_init(&rq->lock); + lockdep_set_class(&rq->lock, &rq->rq_lock_key); + rq->nr_running = 0; +- rq->active = rq->arrays; +- rq->expired = rq->arrays + 1; +- rq->best_expired_prio = MAX_PRIO; ++ rq->tasks_timeline = RB_ROOT; ++ rq->clock = rq->fair_clock = 1; + ++ for (j = 0; j < CPU_LOAD_IDX_MAX; j++) ++ rq->cpu_load[j] = 0; + #ifdef CONFIG_SMP + rq->sd = NULL; +- for (j = 1; j < 3; j++) +- rq->cpu_load[j] = 0; + rq->active_balance = 0; + rq->push_cpu = 0; + rq->cpu = i; +@@ -6920,15 +5744,13 @@ void __init sched_init(void) + #endif + atomic_set(&rq->nr_iowait, 0); + +- for (j = 0; j < 2; j++) { +- array = rq->arrays + j; +- for (k = 0; k < MAX_PRIO; k++) { +- INIT_LIST_HEAD(array->queue + k); +- __clear_bit(k, array->bitmap); +- } +- // delimiter for bitsearch +- __set_bit(MAX_PRIO, array->bitmap); ++ array = &rq->active; ++ for (j = 0; j < MAX_RT_PRIO; j++) { ++ INIT_LIST_HEAD(array->queue + j); ++ __clear_bit(j, array->bitmap); + } ++ /* delimiter for bitsearch: */ ++ __set_bit(MAX_RT_PRIO, array->bitmap); + } + + set_load_weight(&init_task); +@@ -6984,28 +5806,54 @@ EXPORT_SYMBOL(__might_sleep); + #ifdef CONFIG_MAGIC_SYSRQ + void normalize_rt_tasks(void) + { +- struct prio_array *array; + struct task_struct *p; + unsigned long flags; + struct rq *rq; ++ int on_rq; + + read_lock_irq(&tasklist_lock); + for_each_process(p) { +- if (!rt_task(p)) ++ p->fair_key = 0; ++ p->wait_runtime = 0; ++ p->wait_start_fair = 0; ++ p->wait_start = 0; ++ p->exec_start = 0; ++ p->sleep_start = 0; ++ p->block_start = 0; ++ task_rq(p)->fair_clock = 0; ++ task_rq(p)->clock = 0; ++ ++ if (!rt_task(p)) { ++ /* ++ * Renice negative nice level userspace ++ * tasks back to 0: ++ */ ++ if (TASK_NICE(p) < 0 && p->mm) ++ set_user_nice(p, 0); + continue; ++ } + + spin_lock_irqsave(&p->pi_lock, flags); + rq = __task_rq_lock(p); ++#ifdef CONFIG_SMP ++ /* ++ * Do not touch the migration thread: ++ */ ++ if (p == rq->migration_thread) ++ goto out_unlock; ++#endif + +- array = p->array; +- if (array) +- deactivate_task(p, task_rq(p)); +- __setscheduler(p, SCHED_NORMAL, 0); +- if (array) { +- __activate_task(p, task_rq(p)); ++ on_rq = p->on_rq; ++ if (on_rq) ++ deactivate_task(task_rq(p), p, 0); ++ __setscheduler(rq, p, SCHED_NORMAL, 0); ++ if (on_rq) { ++ activate_task(task_rq(p), p, 0); + resched_task(rq->curr); + } +- ++#ifdef CONFIG_SMP ++ out_unlock: ++#endif + __task_rq_unlock(rq); + spin_unlock_irqrestore(&p->pi_lock, flags); + } +Index: linux-cfs-2.6.20.8.q/kernel/sched_debug.c +=================================================================== +--- /dev/null ++++ linux-cfs-2.6.20.8.q/kernel/sched_debug.c +@@ -0,0 +1,161 @@ ++/* ++ * kernel/time/sched_debug.c ++ * ++ * Print the CFS rbtree ++ * ++ * Copyright(C) 2007, Red Hat, Inc., Ingo Molnar ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++typedef void (*print_fn_t)(struct seq_file *m, unsigned int *classes); ++ ++/* ++ * This allows printing both to /proc/sched_debug and ++ * to the console ++ */ ++#define SEQ_printf(m, x...) \ ++ do { \ ++ if (m) \ ++ seq_printf(m, x); \ ++ else \ ++ printk(x); \ ++ } while (0) ++ ++static void ++print_task(struct seq_file *m, struct rq *rq, struct task_struct *p, u64 now) ++{ ++ if (rq->curr == p) ++ SEQ_printf(m, "R"); ++ else ++ SEQ_printf(m, " "); ++ ++ SEQ_printf(m, "%14s %5d %15Ld %13Ld %13Ld %9Ld %5d " ++ "%15Ld %15Ld %15Ld\n", ++ p->comm, p->pid, ++ (long long)p->fair_key, (long long)p->fair_key - rq->fair_clock, ++ (long long)p->wait_runtime, ++ (long long)p->nr_switches, ++ p->prio, ++ (long long)p->wait_start_fair - rq->fair_clock, ++ (long long)p->sum_exec_runtime, ++ (long long)p->sum_wait_runtime); ++} ++ ++static void print_rq(struct seq_file *m, struct rq *rq, u64 now) ++{ ++ struct task_struct *p; ++ struct rb_node *curr; ++ ++ SEQ_printf(m, ++ "\nrunnable tasks:\n" ++ " task PID tree-key delta waiting" ++ " switches prio wstart-fair" ++ " sum-exec sum-wait\n" ++ "-----------------------------------------------------------------" ++ "--------------------------------" ++ "--------------------------------\n"); ++ ++ curr = first_fair(rq); ++ while (curr) { ++ p = rb_entry(curr, struct task_struct, run_node); ++ print_task(m, rq, p, now); ++ ++ curr = rb_next(curr); ++ } ++} ++ ++static void print_cpu(struct seq_file *m, int cpu, u64 now) ++{ ++ struct rq *rq = &per_cpu(runqueues, cpu); ++ ++ SEQ_printf(m, "\ncpu: %d\n", cpu); ++#define P(x) \ ++ SEQ_printf(m, " .%-22s: %Lu\n", #x, (unsigned long long)(rq->x)) ++ ++ P(nr_running); ++ P(raw_weighted_load); ++ P(nr_switches); ++ P(nr_load_updates); ++ P(nr_uninterruptible); ++ P(next_balance); ++ P(curr->pid); ++ P(clock); ++ P(prev_clock_raw); ++ P(clock_warps); ++ P(clock_unstable_events); ++ P(clock_max_delta); ++ rq->clock_max_delta = 0; ++ P(fair_clock); ++ P(prev_fair_clock); ++ P(exec_clock); ++ P(prev_exec_clock); ++ P(wait_runtime); ++ P(cpu_load[0]); ++ P(cpu_load[1]); ++ P(cpu_load[2]); ++ P(cpu_load[3]); ++ P(cpu_load[4]); ++#undef P ++ ++ print_rq(m, rq, now); ++} ++ ++static int sched_debug_show(struct seq_file *m, void *v) ++{ ++ u64 now = ktime_to_ns(ktime_get()); ++ int cpu; ++ ++ SEQ_printf(m, "Sched Debug Version: v0.02\n"); ++ SEQ_printf(m, "now at %Lu nsecs\n", (unsigned long long)now); ++ ++ for_each_online_cpu(cpu) ++ print_cpu(m, cpu, now); ++ ++ SEQ_printf(m, "\n"); ++ ++ return 0; ++} ++ ++void sysrq_sched_debug_show(void) ++{ ++ sched_debug_show(NULL, NULL); ++} ++ ++static int sched_debug_open(struct inode *inode, struct file *filp) ++{ ++ return single_open(filp, sched_debug_show, NULL); ++} ++ ++static struct file_operations sched_debug_fops = { ++ .open = sched_debug_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++ ++static int __init init_sched_debug_procfs(void) ++{ ++ struct proc_dir_entry *pe; ++ ++ pe = create_proc_entry("sched_debug", 0644, NULL); ++ if (!pe) ++ return -ENOMEM; ++ ++ pe->proc_fops = &sched_debug_fops; ++ ++ return 0; ++} ++__initcall(init_sched_debug_procfs); +Index: linux-cfs-2.6.20.8.q/kernel/sched_fair.c +=================================================================== +--- /dev/null ++++ linux-cfs-2.6.20.8.q/kernel/sched_fair.c +@@ -0,0 +1,618 @@ ++/* ++ * Completely Fair Scheduling (CFS) Class (SCHED_NORMAL/SCHED_BATCH) ++ */ ++ ++/* ++ * Preemption granularity: ++ * (default: 2 msec, units: nanoseconds) ++ * ++ * NOTE: this granularity value is not the same as the concept of ++ * 'timeslice length' - timeslices in CFS will typically be somewhat ++ * larger than this value. (to see the precise effective timeslice ++ * length of your workload, run vmstat and monitor the context-switches ++ * field) ++ * ++ * On SMP systems the value of this is multiplied by the log2 of the ++ * number of CPUs. (i.e. factor 2x on 2-way systems, 3x on 4-way ++ * systems, 4x on 8-way systems, 5x on 16-way systems, etc.) ++ */ ++unsigned int sysctl_sched_granularity __read_mostly = 2000000; ++ ++unsigned int sysctl_sched_sleep_history_max __read_mostly = 2000000000; ++ ++unsigned int sysctl_sched_load_smoothing = 2; ++ ++/* ++ * Wake-up granularity. ++ * (default: 1 msec, units: nanoseconds) ++ * ++ * This option delays the preemption effects of decoupled workloads ++ * and reduces their over-scheduling. Synchronous workloads will still ++ * have immediate wakeup/sleep latencies. ++ */ ++unsigned int sysctl_sched_wakeup_granularity __read_mostly = 0; ++ ++ ++extern struct sched_class fair_sched_class; ++ ++/**************************************************************/ ++/* Scheduling class tree data structure manipulation methods: ++ */ ++ ++/* ++ * Enqueue a task into the rb-tree: ++ */ ++static inline void __enqueue_task_fair(struct rq *rq, struct task_struct *p) ++{ ++ struct rb_node **link = &rq->tasks_timeline.rb_node; ++ struct rb_node *parent = NULL; ++ struct task_struct *entry; ++ s64 key = p->fair_key; ++ int leftmost = 1; ++ ++ /* ++ * Find the right place in the rbtree: ++ */ ++ while (*link) { ++ parent = *link; ++ entry = rb_entry(parent, struct task_struct, run_node); ++ /* ++ * We dont care about collisions. Nodes with ++ * the same key stay together. ++ */ ++ if (key < entry->fair_key) { ++ link = &parent->rb_left; ++ } else { ++ link = &parent->rb_right; ++ leftmost = 0; ++ } ++ } ++ ++ /* ++ * Maintain a cache of leftmost tree entries (it is frequently ++ * used): ++ */ ++ if (leftmost) ++ rq->rb_leftmost = &p->run_node; ++ ++ rb_link_node(&p->run_node, parent, link); ++ rb_insert_color(&p->run_node, &rq->tasks_timeline); ++} ++ ++static inline void __dequeue_task_fair(struct rq *rq, struct task_struct *p) ++{ ++ if (rq->rb_leftmost == &p->run_node) ++ rq->rb_leftmost = NULL; ++ rb_erase(&p->run_node, &rq->tasks_timeline); ++} ++ ++static inline struct rb_node * first_fair(struct rq *rq) ++{ ++ if (rq->rb_leftmost) ++ return rq->rb_leftmost; ++ /* Cache the value returned by rb_first() */ ++ rq->rb_leftmost = rb_first(&rq->tasks_timeline); ++ return rq->rb_leftmost; ++} ++ ++static struct task_struct * __pick_next_task_fair(struct rq *rq) ++{ ++ return rb_entry(first_fair(rq), struct task_struct, run_node); ++} ++ ++/**************************************************************/ ++/* Scheduling class statistics methods: ++ */ ++ ++static inline u64 ++rescale_load(struct task_struct *p, u64 value) ++{ ++ int load_shift = p->load_shift; ++ ++ if (load_shift == SCHED_LOAD_SHIFT) ++ return value; ++ ++ return (value << load_shift) >> SCHED_LOAD_SHIFT; ++} ++ ++static u64 ++niced_granularity(struct rq *rq, struct task_struct *curr, ++ unsigned long granularity) ++{ ++ return rescale_load(curr, granularity); ++} ++ ++/* ++ * Update the current task's runtime statistics. Skip current tasks that ++ * are not in our scheduling class. ++ */ ++static inline void update_curr(struct rq *rq, u64 now) ++{ ++ u64 delta_exec, delta_fair, delta_mine; ++ struct task_struct *curr = rq->curr; ++ unsigned long load; ++ ++ if (curr->sched_class != &fair_sched_class || curr == rq->idle ++ || !curr->on_rq) ++ return; ++ /* ++ * Get the amount of time the current task was running ++ * since the last time we changed raw_weighted_load: ++ */ ++ delta_exec = now - curr->exec_start; ++ if (unlikely(delta_exec > curr->exec_max)) ++ curr->exec_max = delta_exec; ++ ++ if (sysctl_sched_load_smoothing) { ++ delta_fair = delta_exec << SCHED_LOAD_SHIFT; ++ do_div(delta_fair, rq->raw_weighted_load); ++ ++ load = rq->cpu_load[CPU_LOAD_IDX_MAX-1] + 1; ++ if (sysctl_sched_load_smoothing & 2) ++ load = max(load, rq->raw_weighted_load); ++ ++ delta_mine = delta_exec << curr->load_shift; ++ do_div(delta_mine, load); ++ } else { ++ delta_fair = delta_exec << SCHED_LOAD_SHIFT; ++ do_div(delta_fair, rq->raw_weighted_load); ++ ++ delta_mine = delta_exec << curr->load_shift; ++ do_div(delta_mine, rq->raw_weighted_load); ++ } ++ ++ curr->sum_exec_runtime += delta_exec; ++ curr->exec_start = now; ++ ++ rq->fair_clock += delta_fair; ++ rq->exec_clock += delta_exec; ++ ++ /* ++ * We executed delta_exec amount of time on the CPU, ++ * but we were only entitled to delta_mine amount of ++ * time during that period (if nr_running == 1 then ++ * the two values are equal): ++ */ ++ ++ /* ++ * Task already marked for preemption, do not burden ++ * it with the cost of not having left the CPU yet. ++ */ ++ if (unlikely(test_tsk_thread_flag(curr, TIF_NEED_RESCHED))) ++ goto out_nowait; ++ ++ curr->wait_runtime -= delta_exec - delta_mine; ++ if (unlikely(curr->wait_runtime < curr->min_wait_runtime)) ++ curr->min_wait_runtime = curr->wait_runtime; ++ ++ rq->wait_runtime -= delta_exec - delta_mine; ++out_nowait: ++ ; ++} ++ ++static inline void ++update_stats_wait_start(struct rq *rq, struct task_struct *p, u64 now) ++{ ++ p->wait_start_fair = rq->fair_clock; ++ p->wait_start = now; ++} ++ ++/* ++ * Task is being enqueued - update stats: ++ */ ++static inline void ++update_stats_enqueue(struct rq *rq, struct task_struct *p, u64 now) ++{ ++ s64 key; ++ ++ /* ++ * Update the fair clock. ++ */ ++ update_curr(rq, now); ++ ++ /* ++ * Are we enqueueing a waiting task? (for current tasks ++ * a dequeue/enqueue event is a NOP) ++ */ ++ if (p != rq->curr) ++ update_stats_wait_start(rq, p, now); ++ /* ++ * Update the key: ++ */ ++ key = rq->fair_clock; ++ ++ /* ++ * Optimize the common nice 0 case: ++ */ ++ if (likely(p->load_shift == SCHED_LOAD_SHIFT)) { ++ key -= p->wait_runtime; ++ } else { ++ unsigned int delta_bits; ++ ++ if (p->load_shift < SCHED_LOAD_SHIFT) { ++ /* plus-reniced tasks get helped: */ ++ delta_bits = SCHED_LOAD_SHIFT - p->load_shift; ++ key -= p->wait_runtime << delta_bits; ++ } else { ++ /* negative-reniced tasks get hurt: */ ++ delta_bits = p->load_shift - SCHED_LOAD_SHIFT; ++ key -= p->wait_runtime >> delta_bits; ++ } ++ } ++ ++ p->fair_key = key; ++} ++ ++/* ++ * Note: must be called with a freshly updated rq->fair_clock. ++ */ ++static inline void ++update_stats_wait_end(struct rq *rq, struct task_struct *p, u64 now) ++{ ++ u64 delta, fair_delta, delta_wait; ++ ++ delta_wait = now - p->wait_start; ++ if (unlikely(delta_wait > p->wait_max)) ++ p->wait_max = delta_wait; ++ ++ delta = rq->fair_clock - p->wait_start_fair; ++ fair_delta = rescale_load(p, delta); ++ ++ p->sum_wait_runtime += fair_delta; ++ rq->wait_runtime += fair_delta; ++ p->wait_runtime += fair_delta; ++ ++ p->wait_start_fair = 0; ++ p->wait_start = 0; ++} ++ ++static inline void ++update_stats_dequeue(struct rq *rq, struct task_struct *p, u64 now) ++{ ++ update_curr(rq, now); ++ /* ++ * Mark the end of the wait period if dequeueing a ++ * waiting task: ++ */ ++ if (p != rq->curr) ++ update_stats_wait_end(rq, p, now); ++} ++ ++/* ++ * We are picking a new current task - update its stats: ++ */ ++static inline void ++update_stats_curr_start(struct rq *rq, struct task_struct *p, u64 now) ++{ ++ /* ++ * We are starting a new run period: ++ */ ++ p->exec_start = now; ++} ++ ++/* ++ * We are descheduling a task - update its stats: ++ */ ++static inline void ++update_stats_curr_end(struct rq *rq, struct task_struct *p, u64 now) ++{ ++ update_curr(rq, now); ++ ++ p->exec_start = 0; ++} ++ ++/**************************************************************/ ++/* Scheduling class queueing methods: ++ */ ++ ++/* ++ * The enqueue_task method is called before nr_running is ++ * increased. Here we update the fair scheduling stats and ++ * then put the task into the rbtree: ++ */ ++static void ++enqueue_task_fair(struct rq *rq, struct task_struct *p, int wakeup, u64 now) ++{ ++ unsigned long max_delta = sysctl_sched_sleep_history_max, factor; ++ u64 delta = 0; ++ ++ if (wakeup) { ++ if (p->sleep_start) { ++ delta = now - p->sleep_start; ++ if ((s64)delta < 0) ++ delta = 0; ++ ++ if (unlikely(delta > p->sleep_max)) ++ p->sleep_max = delta; ++ ++ p->sleep_start = 0; ++ } ++ if (p->block_start) { ++ delta = now - p->block_start; ++ if ((s64)delta < 0) ++ delta = 0; ++ ++ if (unlikely(delta > p->block_max)) ++ p->block_max = delta; ++ ++ p->block_start = 0; ++ } ++ ++ /* ++ * We are after a wait period, decay the ++ * wait_runtime value: ++ */ ++ if (max_delta != -1 && max_delta != -2) { ++ if (delta < max_delta) { ++ factor = 1024 * (max_delta - ++ (unsigned long)delta) / max_delta; ++ p->wait_runtime *= (int)factor; ++ p->wait_runtime /= 1024; ++ } else { ++ p->wait_runtime = 0; ++ } ++ } ++ } ++ update_stats_enqueue(rq, p, now); ++ if (wakeup && max_delta == -2) ++ p->wait_runtime = 0; ++ __enqueue_task_fair(rq, p); ++} ++ ++/* ++ * The dequeue_task method is called before nr_running is ++ * decreased. We remove the task from the rbtree and ++ * update the fair scheduling stats: ++ */ ++static void ++dequeue_task_fair(struct rq *rq, struct task_struct *p, int sleep, u64 now) ++{ ++ update_stats_dequeue(rq, p, now); ++ if (sleep) { ++ if (p->state & TASK_INTERRUPTIBLE) ++ p->sleep_start = now; ++ if (p->state & TASK_UNINTERRUPTIBLE) ++ p->block_start = now; ++ } ++ __dequeue_task_fair(rq, p); ++} ++ ++/* ++ * sched_yield() support is very simple via the rbtree: we just ++ * dequeue the task and move it after the next task, which ++ * causes tasks to roundrobin. ++ */ ++static void ++yield_task_fair(struct rq *rq, struct task_struct *p, struct task_struct *p_to) ++{ ++ struct rb_node *curr, *next, *first; ++ struct task_struct *p_next; ++ s64 yield_key; ++ u64 now; ++ ++ /* ++ * yield-to support: if we are on the same runqueue then ++ * give half of our wait_runtime (if it's positive) to the other task: ++ */ ++ if (p_to && p->wait_runtime > 0) { ++ p_to->wait_runtime += p->wait_runtime >> 1; ++ p->wait_runtime >>= 1; ++ } ++ curr = &p->run_node; ++ first = first_fair(rq); ++ /* ++ * Move this task to the second place in the tree: ++ */ ++ if (unlikely(curr != first)) { ++ next = first; ++ } else { ++ next = rb_next(curr); ++ /* ++ * We were the last one already - nothing to do, return ++ * and reschedule: ++ */ ++ if (unlikely(!next)) ++ return; ++ } ++ ++ p_next = rb_entry(next, struct task_struct, run_node); ++ /* ++ * Minimally necessary key value to be the second in the tree: ++ */ ++ yield_key = p_next->fair_key + 1; ++ ++ now = __rq_clock(rq); ++ dequeue_task_fair(rq, p, 0, now); ++ p->on_rq = 0; ++ ++ /* ++ * Only update the key if we need to move more backwards ++ * than the minimally necessary position to be the second: ++ */ ++ if (p->fair_key < yield_key) ++ p->fair_key = yield_key; ++ ++ __enqueue_task_fair(rq, p); ++ p->on_rq = 1; ++} ++ ++/* ++ * Preempt the current task with a newly woken task if needed: ++ */ ++static inline void ++__check_preempt_curr_fair(struct rq *rq, struct task_struct *p, ++ struct task_struct *curr, unsigned long granularity) ++{ ++ s64 __delta = curr->fair_key - p->fair_key; ++ ++ /* ++ * Take scheduling granularity into account - do not ++ * preempt the current task unless the best task has ++ * a larger than sched_granularity fairness advantage: ++ */ ++ if (__delta > niced_granularity(rq, curr, granularity)) ++ resched_task(curr); ++} ++ ++/* ++ * Preempt the current task with a newly woken task if needed: ++ */ ++static void check_preempt_curr_fair(struct rq *rq, struct task_struct *p) ++{ ++ struct task_struct *curr = rq->curr; ++ ++ if ((curr == rq->idle) || rt_prio(p->prio)) { ++ resched_task(curr); ++ } else { ++ __check_preempt_curr_fair(rq, p, curr, ++ sysctl_sched_granularity); ++ } ++} ++ ++static struct task_struct * pick_next_task_fair(struct rq *rq, u64 now) ++{ ++ struct task_struct *p = __pick_next_task_fair(rq); ++ ++ /* ++ * Any task has to be enqueued before it get to execute on ++ * a CPU. So account for the time it spent waiting on the ++ * runqueue. (note, here we rely on pick_next_task() having ++ * done a put_prev_task_fair() shortly before this, which ++ * updated rq->fair_clock - used by update_stats_wait_end()) ++ */ ++ update_stats_wait_end(rq, p, now); ++ update_stats_curr_start(rq, p, now); ++ ++ return p; ++} ++ ++/* ++ * Account for a descheduled task: ++ */ ++static void put_prev_task_fair(struct rq *rq, struct task_struct *prev, u64 now) ++{ ++ if (prev == rq->idle) ++ return; ++ ++ update_stats_curr_end(rq, prev, now); ++ /* ++ * If the task is still waiting for the CPU (it just got ++ * preempted), start the wait period: ++ */ ++ if (prev->on_rq) ++ update_stats_wait_start(rq, prev, now); ++} ++ ++/**************************************************************/ ++/* Fair scheduling class load-balancing methods: ++ */ ++ ++/* ++ * Load-balancing iterator. Note: while the runqueue stays locked ++ * during the whole iteration, the current task might be ++ * dequeued so the iterator has to be dequeue-safe. Here we ++ * achieve that by always pre-iterating before returning ++ * the current task: ++ */ ++static struct task_struct * load_balance_start_fair(struct rq *rq) ++{ ++ struct rb_node *first = first_fair(rq); ++ struct task_struct *p; ++ ++ if (!first) ++ return NULL; ++ ++ p = rb_entry(first, struct task_struct, run_node); ++ ++ rq->rb_load_balance_curr = rb_next(first); ++ ++ return p; ++} ++ ++static struct task_struct * load_balance_next_fair(struct rq *rq) ++{ ++ struct rb_node *curr = rq->rb_load_balance_curr; ++ struct task_struct *p; ++ ++ if (!curr) ++ return NULL; ++ ++ p = rb_entry(curr, struct task_struct, run_node); ++ rq->rb_load_balance_curr = rb_next(curr); ++ ++ return p; ++} ++ ++/* ++ * scheduler tick hitting a task of our scheduling class: ++ */ ++static void task_tick_fair(struct rq *rq, struct task_struct *curr) ++{ ++ struct task_struct *next; ++ u64 now = __rq_clock(rq); ++ ++ /* ++ * Dequeue and enqueue the task to update its ++ * position within the tree: ++ */ ++ dequeue_task_fair(rq, curr, 0, now); ++ curr->on_rq = 0; ++ enqueue_task_fair(rq, curr, 0, now); ++ curr->on_rq = 1; ++ ++ /* ++ * Reschedule if another task tops the current one. ++ */ ++ next = __pick_next_task_fair(rq); ++ if (next == curr) ++ return; ++ ++ if ((curr == rq->idle) || (rt_prio(next->prio) && ++ (next->prio < curr->prio))) ++ resched_task(curr); ++ else ++ __check_preempt_curr_fair(rq, next, curr, ++ sysctl_sched_granularity); ++} ++ ++/* ++ * Share the fairness runtime between parent and child, thus the ++ * total amount of pressure for CPU stays equal - new tasks ++ * get a chance to run but frequent forkers are not allowed to ++ * monopolize the CPU. Note: the parent runqueue is locked, ++ * the child is not running yet. ++ */ ++static void task_new_fair(struct rq *rq, struct task_struct *p) ++{ ++ sched_info_queued(p); ++ update_stats_enqueue(rq, p, rq_clock(rq)); ++ /* ++ * Child runs first: we let it run before the parent ++ * until it reschedules once. We set up the key so that ++ * it will preempt the parent: ++ */ ++ p->fair_key = current->fair_key - niced_granularity(rq, rq->curr, ++ sysctl_sched_granularity) - 1; ++ __enqueue_task_fair(rq, p); ++ p->on_rq = 1; ++ inc_nr_running(p, rq); ++} ++ ++/* ++ * All the scheduling class methods: ++ */ ++struct sched_class fair_sched_class __read_mostly = { ++ .enqueue_task = enqueue_task_fair, ++ .dequeue_task = dequeue_task_fair, ++ .yield_task = yield_task_fair, ++ ++ .check_preempt_curr = check_preempt_curr_fair, ++ ++ .pick_next_task = pick_next_task_fair, ++ .put_prev_task = put_prev_task_fair, ++ ++ .load_balance_start = load_balance_start_fair, ++ .load_balance_next = load_balance_next_fair, ++ .task_tick = task_tick_fair, ++ .task_new = task_new_fair, ++}; +Index: linux-cfs-2.6.20.8.q/kernel/sched_rt.c +=================================================================== +--- /dev/null ++++ linux-cfs-2.6.20.8.q/kernel/sched_rt.c +@@ -0,0 +1,184 @@ ++/* ++ * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR ++ * policies) ++ */ ++ ++static void ++enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup, u64 now) ++{ ++ struct prio_array *array = &rq->active; ++ ++ list_add_tail(&p->run_list, array->queue + p->prio); ++ __set_bit(p->prio, array->bitmap); ++} ++ ++/* ++ * Adding/removing a task to/from a priority array: ++ */ ++static void ++dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep, u64 now) ++{ ++ struct prio_array *array = &rq->active; ++ ++ list_del(&p->run_list); ++ if (list_empty(array->queue + p->prio)) ++ __clear_bit(p->prio, array->bitmap); ++} ++ ++/* ++ * Put task to the end of the run list without the overhead of dequeue ++ * followed by enqueue. ++ */ ++static void requeue_task_rt(struct rq *rq, struct task_struct *p) ++{ ++ struct prio_array *array = &rq->active; ++ ++ list_move_tail(&p->run_list, array->queue + p->prio); ++} ++ ++static void ++yield_task_rt(struct rq *rq, struct task_struct *p, struct task_struct *p_to) ++{ ++ requeue_task_rt(rq, p); ++} ++ ++/* ++ * Preempt the current task with a newly woken task if needed: ++ */ ++static void check_preempt_curr_rt(struct rq *rq, struct task_struct *p) ++{ ++ if (p->prio < rq->curr->prio) ++ resched_task(rq->curr); ++} ++ ++static struct task_struct * pick_next_task_rt(struct rq *rq, u64 now) ++{ ++ struct prio_array *array = &rq->active; ++ struct list_head *queue; ++ int idx; ++ ++ idx = sched_find_first_bit(array->bitmap); ++ if (idx >= MAX_RT_PRIO) ++ return NULL; ++ ++ queue = array->queue + idx; ++ return list_entry(queue->next, struct task_struct, run_list); ++} ++ ++/* ++ * No accounting done when RT tasks are descheduled: ++ */ ++static void put_prev_task_rt(struct rq *rq, struct task_struct *p, u64 now) ++{ ++} ++ ++/* ++ * Load-balancing iterator. Note: while the runqueue stays locked ++ * during the whole iteration, the current task might be ++ * dequeued so the iterator has to be dequeue-safe. Here we ++ * achieve that by always pre-iterating before returning ++ * the current task: ++ */ ++static struct task_struct * load_balance_start_rt(struct rq *rq) ++{ ++ struct prio_array *array = &rq->active; ++ struct list_head *head, *curr; ++ struct task_struct *p; ++ int idx; ++ ++ idx = sched_find_first_bit(array->bitmap); ++ if (idx >= MAX_RT_PRIO) ++ return NULL; ++ ++ head = array->queue + idx; ++ curr = head->prev; ++ ++ p = list_entry(curr, struct task_struct, run_list); ++ ++ curr = curr->prev; ++ ++ rq->rt_load_balance_idx = idx; ++ rq->rt_load_balance_head = head; ++ rq->rt_load_balance_curr = curr; ++ ++ return p; ++} ++ ++static struct task_struct * load_balance_next_rt(struct rq *rq) ++{ ++ struct prio_array *array = &rq->active; ++ struct list_head *head, *curr; ++ struct task_struct *p; ++ int idx; ++ ++ idx = rq->rt_load_balance_idx; ++ head = rq->rt_load_balance_head; ++ curr = rq->rt_load_balance_curr; ++ ++ /* ++ * If we arrived back to the head again then ++ * iterate to the next queue (if any): ++ */ ++ if (unlikely(head == curr)) { ++ int next_idx = find_next_bit(array->bitmap, MAX_RT_PRIO, idx+1); ++ ++ if (next_idx >= MAX_RT_PRIO) ++ return NULL; ++ ++ idx = next_idx; ++ head = array->queue + idx; ++ curr = head->prev; ++ ++ rq->rt_load_balance_idx = idx; ++ rq->rt_load_balance_head = head; ++ } ++ ++ p = list_entry(curr, struct task_struct, run_list); ++ ++ curr = curr->prev; ++ ++ rq->rt_load_balance_curr = curr; ++ ++ return p; ++} ++ ++static void task_tick_rt(struct rq *rq, struct task_struct *p) ++{ ++ /* ++ * RR tasks need a special form of timeslice management. ++ * FIFO tasks have no timeslices. ++ */ ++ if ((p->policy == SCHED_RR) && !--p->time_slice) { ++ p->time_slice = static_prio_timeslice(p->static_prio); ++ set_tsk_need_resched(p); ++ ++ /* put it at the end of the queue: */ ++ requeue_task_rt(rq, p); ++ } ++} ++ ++/* ++ * No parent/child timeslice management necessary for RT tasks, ++ * just activate them: ++ */ ++static void task_new_rt(struct rq *rq, struct task_struct *p) ++{ ++ activate_task(rq, p, 1); ++} ++ ++static struct sched_class rt_sched_class __read_mostly = { ++ .enqueue_task = enqueue_task_rt, ++ .dequeue_task = dequeue_task_rt, ++ .yield_task = yield_task_rt, ++ ++ .check_preempt_curr = check_preempt_curr_rt, ++ ++ .pick_next_task = pick_next_task_rt, ++ .put_prev_task = put_prev_task_rt, ++ ++ .load_balance_start = load_balance_start_rt, ++ .load_balance_next = load_balance_next_rt, ++ ++ .task_tick = task_tick_rt, ++ .task_new = task_new_rt, ++}; +Index: linux-cfs-2.6.20.8.q/kernel/sched_stats.h +=================================================================== +--- /dev/null ++++ linux-cfs-2.6.20.8.q/kernel/sched_stats.h +@@ -0,0 +1,235 @@ ++ ++#ifdef CONFIG_SCHEDSTATS ++/* ++ * bump this up when changing the output format or the meaning of an existing ++ * format, so that tools can adapt (or abort) ++ */ ++#define SCHEDSTAT_VERSION 14 ++ ++static int show_schedstat(struct seq_file *seq, void *v) ++{ ++ int cpu; ++ ++ seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION); ++ seq_printf(seq, "timestamp %lu\n", jiffies); ++ for_each_online_cpu(cpu) { ++ struct rq *rq = cpu_rq(cpu); ++#ifdef CONFIG_SMP ++ struct sched_domain *sd; ++ int dcnt = 0; ++#endif ++ ++ /* runqueue-specific stats */ ++ seq_printf(seq, ++ "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", ++ cpu, rq->yld_both_empty, ++ rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt, ++ rq->sched_switch, rq->sched_cnt, rq->sched_goidle, ++ rq->ttwu_cnt, rq->ttwu_local, ++ rq->rq_sched_info.cpu_time, ++ rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt); ++ ++ seq_printf(seq, "\n"); ++ ++#ifdef CONFIG_SMP ++ /* domain-specific stats */ ++ preempt_disable(); ++ for_each_domain(cpu, sd) { ++ enum idle_type itype; ++ char mask_str[NR_CPUS]; ++ ++ cpumask_scnprintf(mask_str, NR_CPUS, sd->span); ++ seq_printf(seq, "domain%d %s", dcnt++, mask_str); ++ for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES; ++ itype++) { ++ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu " ++ "%lu", ++ sd->lb_cnt[itype], ++ sd->lb_balanced[itype], ++ sd->lb_failed[itype], ++ sd->lb_imbalance[itype], ++ sd->lb_gained[itype], ++ sd->lb_hot_gained[itype], ++ sd->lb_nobusyq[itype], ++ sd->lb_nobusyg[itype]); ++ } ++ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu" ++ " %lu %lu %lu\n", ++ sd->alb_cnt, sd->alb_failed, sd->alb_pushed, ++ sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed, ++ sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed, ++ sd->ttwu_wake_remote, sd->ttwu_move_affine, ++ sd->ttwu_move_balance); ++ } ++ preempt_enable(); ++#endif ++ } ++ return 0; ++} ++ ++static int schedstat_open(struct inode *inode, struct file *file) ++{ ++ unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32); ++ char *buf = kmalloc(size, GFP_KERNEL); ++ struct seq_file *m; ++ int res; ++ ++ if (!buf) ++ return -ENOMEM; ++ res = single_open(file, show_schedstat, NULL); ++ if (!res) { ++ m = file->private_data; ++ m->buf = buf; ++ m->size = size; ++ } else ++ kfree(buf); ++ return res; ++} ++ ++const struct file_operations proc_schedstat_operations = { ++ .open = schedstat_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++}; ++ ++/* ++ * Expects runqueue lock to be held for atomicity of update ++ */ ++static inline void ++rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) ++{ ++ if (rq) { ++ rq->rq_sched_info.run_delay += delta_jiffies; ++ rq->rq_sched_info.pcnt++; ++ } ++} ++ ++/* ++ * Expects runqueue lock to be held for atomicity of update ++ */ ++static inline void ++rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) ++{ ++ if (rq) ++ rq->rq_sched_info.cpu_time += delta_jiffies; ++} ++# define schedstat_inc(rq, field) do { (rq)->field++; } while (0) ++# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0) ++#else /* !CONFIG_SCHEDSTATS */ ++static inline void ++rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies) ++{} ++static inline void ++rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies) ++{} ++# define schedstat_inc(rq, field) do { } while (0) ++# define schedstat_add(rq, field, amt) do { } while (0) ++#endif ++ ++#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) ++/* ++ * Called when a process is dequeued from the active array and given ++ * the cpu. We should note that with the exception of interactive ++ * tasks, the expired queue will become the active queue after the active ++ * queue is empty, without explicitly dequeuing and requeuing tasks in the ++ * expired queue. (Interactive tasks may be requeued directly to the ++ * active queue, thus delaying tasks in the expired queue from running; ++ * see scheduler_tick()). ++ * ++ * This function is only called from sched_info_arrive(), rather than ++ * dequeue_task(). Even though a task may be queued and dequeued multiple ++ * times as it is shuffled about, we're really interested in knowing how ++ * long it was from the *first* time it was queued to the time that it ++ * finally hit a cpu. ++ */ ++static inline void sched_info_dequeued(struct task_struct *t) ++{ ++ t->sched_info.last_queued = 0; ++} ++ ++/* ++ * Called when a task finally hits the cpu. We can now calculate how ++ * long it was waiting to run. We also note when it began so that we ++ * can keep stats on how long its timeslice is. ++ */ ++static void sched_info_arrive(struct task_struct *t) ++{ ++ unsigned long now = jiffies, delta_jiffies = 0; ++ ++ if (t->sched_info.last_queued) ++ delta_jiffies = now - t->sched_info.last_queued; ++ sched_info_dequeued(t); ++ t->sched_info.run_delay += delta_jiffies; ++ t->sched_info.last_arrival = now; ++ t->sched_info.pcnt++; ++ ++ rq_sched_info_arrive(task_rq(t), delta_jiffies); ++} ++ ++/* ++ * Called when a process is queued into either the active or expired ++ * array. The time is noted and later used to determine how long we ++ * had to wait for us to reach the cpu. Since the expired queue will ++ * become the active queue after active queue is empty, without dequeuing ++ * and requeuing any tasks, we are interested in queuing to either. It ++ * is unusual but not impossible for tasks to be dequeued and immediately ++ * requeued in the same or another array: this can happen in sched_yield(), ++ * set_user_nice(), and even load_balance() as it moves tasks from runqueue ++ * to runqueue. ++ * ++ * This function is only called from enqueue_task(), but also only updates ++ * the timestamp if it is already not set. It's assumed that ++ * sched_info_dequeued() will clear that stamp when appropriate. ++ */ ++static inline void sched_info_queued(struct task_struct *t) ++{ ++ if (unlikely(sched_info_on())) ++ if (!t->sched_info.last_queued) ++ t->sched_info.last_queued = jiffies; ++} ++ ++/* ++ * Called when a process ceases being the active-running process, either ++ * voluntarily or involuntarily. Now we can calculate how long we ran. ++ */ ++static inline void sched_info_depart(struct task_struct *t) ++{ ++ unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival; ++ ++ t->sched_info.cpu_time += delta_jiffies; ++ rq_sched_info_depart(task_rq(t), delta_jiffies); ++} ++ ++/* ++ * Called when tasks are switched involuntarily due, typically, to expiring ++ * their time slice. (This may also be called when switching to or from ++ * the idle task.) We are only called when prev != next. ++ */ ++static inline void ++__sched_info_switch(struct task_struct *prev, struct task_struct *next) ++{ ++ struct rq *rq = task_rq(prev); ++ ++ /* ++ * prev now departs the cpu. It's not interesting to record ++ * stats about how efficient we were at scheduling the idle ++ * process, however. ++ */ ++ if (prev != rq->idle) ++ sched_info_depart(prev); ++ ++ if (next != rq->idle) ++ sched_info_arrive(next); ++} ++static inline void ++sched_info_switch(struct task_struct *prev, struct task_struct *next) ++{ ++ if (unlikely(sched_info_on())) ++ __sched_info_switch(prev, next); ++} ++#else ++#define sched_info_queued(t) do { } while (0) ++#define sched_info_switch(t, next) do { } while (0) ++#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ ++ +Index: linux-cfs-2.6.20.8.q/kernel/sysctl.c +=================================================================== +--- linux-cfs-2.6.20.8.q.orig/kernel/sysctl.c ++++ linux-cfs-2.6.20.8.q/kernel/sysctl.c +@@ -320,6 +320,46 @@ static ctl_table kern_table[] = { + .strategy = &sysctl_uts_string, + }, + { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "sched_granularity_ns", ++ .data = &sysctl_sched_granularity, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "sched_wakeup_granularity_ns", ++ .data = &sysctl_sched_wakeup_granularity, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "sched_sleep_history_max_ns", ++ .data = &sysctl_sched_sleep_history_max, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "sched_child_runs_first", ++ .data = &sysctl_sched_child_runs_first, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "sched_load_smoothing", ++ .data = &sysctl_sched_load_smoothing, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { + .ctl_name = KERN_PANIC, + .procname = "panic", + .data = &panic_timeout, diff --git a/packages/linux/linux-efika-2.6.20.20/weaken-div64_32-symbol.patch b/packages/linux/linux-efika-2.6.20.20/weaken-div64_32-symbol.patch new file mode 100644 index 0000000000..bd6fb98f61 --- /dev/null +++ b/packages/linux/linux-efika-2.6.20.20/weaken-div64_32-symbol.patch @@ -0,0 +1,23 @@ +2.6.20.20 with CFS fails to compile for powerpc, because this arch already has +its assembly-optimized __div64_32() implementation, so linking fails due to +two symbols. + +The same issue appeared on the s390 arch, so this patch is inspired by it. + +http://lkml.org/lkml/2007/4/11/24 + +Leon 'likewise' Woestenberg + +Index: linux-2.6.20/lib/div64.c +=================================================================== +--- linux-2.6.20.orig/lib/div64.c 2007-10-07 16:19:38.000000000 +0200 ++++ linux-2.6.20/lib/div64.c 2007-10-07 16:20:15.000000000 +0200 +@@ -23,7 +23,7 @@ + /* Not needed on 64bit architectures */ + #if BITS_PER_LONG == 32 + +-uint32_t __div64_32(uint64_t *n, uint32_t base) ++uint32_t __attribute__((weak)) __div64_32(uint64_t *n, uint32_t base) + { + uint64_t rem = *n; + uint64_t b = base; diff --git a/packages/linux/linux-efika-2.6.20/defconfig b/packages/linux/linux-efika-2.6.20/defconfig index d2251d41f1..c68d7f1d1c 100644 --- a/packages/linux/linux-efika-2.6.20/defconfig +++ b/packages/linux/linux-efika-2.6.20/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.20.11-cfs-v9 -# Sun Oct 7 12:21:03 2007 +# Linux kernel version: 2.6.20.20-cfs-v22 +# Sun Oct 7 15:39:14 2007 # # CONFIG_PPC64 is not set CONFIG_PPC32=y @@ -53,6 +53,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 # @@ -69,6 +70,8 @@ CONFIG_POSIX_MQUEUE=y # CONFIG_UTS_NS is not set # CONFIG_AUDIT is not set # CONFIG_IKCONFIG is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_INITRAMFS_SOURCE="" @@ -165,9 +168,10 @@ CONFIG_USE_MDIO=y # CONFIG_HZ_300 is not set CONFIG_HZ_1000=y CONFIG_HZ=1000 -CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set -# CONFIG_PREEMPT is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_BKL=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_MISC=y CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y @@ -186,8 +190,13 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_PROC_DEVICETREE=y CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE="console=ttyS0,9600 console=ttyPSC0,115200" -# CONFIG_PM is not set -CONFIG_SECCOMP=y +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +CONFIG_PM_DEBUG=y +# CONFIG_DISABLE_CONSOLE_SUSPEND is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +# CONFIG_SOFTWARE_SUSPEND is not set +# CONFIG_SECCOMP is not set CONFIG_ISA_DMA_API=y # @@ -1248,6 +1257,7 @@ CONFIG_USB=y CONFIG_USB_DEVICEFS=y CONFIG_USB_BANDWIDTH=y CONFIG_USB_DYNAMIC_MINORS=y +# CONFIG_USB_SUSPEND is not set # CONFIG_USB_OTG is not set # @@ -1291,7 +1301,6 @@ CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_STORAGE_ALAUDA is not set -# CONFIG_USB_STORAGE_ONETOUCH is not set # CONFIG_USB_STORAGE_KARMA is not set # CONFIG_USB_LIBUSUAL is not set diff --git a/packages/linux/linux-efika_2.6.20.11.bb b/packages/linux/linux-efika_2.6.20.11.bb deleted file mode 100644 index 2113b27be9..0000000000 --- a/packages/linux/linux-efika_2.6.20.11.bb +++ /dev/null @@ -1,85 +0,0 @@ -DESCRIPTION = "Linux Kernel for the EFIKA dev platform" -SECTION = "kernel" -LICENSE = "GPL" -PR = "r0" - -COMPATIBLE_MACHINE = "efika" - -FILESPATH = "${FILE_DIRNAME}/linux-efika-${PV}:${FILE_DIRNAME}/linux-efika-2.6.20" - -SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \ - file://0001-powerpc-serial-Dispose-irq-mapping-when-done-in-mpc52xx_serial.c.txt;p=1;patch=1 \ - file://0003-powerpc-Add-device-tree-fixups-for-the-EFIKA.txt;p=1;patch=1 \ - file://0004-powerpc-Use-common-52xx-of_platform-probe-code-for-EFIKA.txt;p=1;patch=1 \ - file://0005-powerpc-Restore-proper-link-order-in-platform.txt;p=1;patch=1 \ - file://0006-Rework-the-OHCI-quirk-mecanism-as-suggested-by-David.txt;p=1;patch=1 \ - file://0007-Implement-support-for-split-endian-OHCI.txt;p=1;patch=1 \ - file://0008-ohci-Rework-bus-glue-integration-to-allow-several-at-once.txt;p=1;patch=1 \ - file://0009-ohci-Add-support-for-OHCI-controller-on-the-of_platform-bus.txt;p=1;patch=1 \ - file://0010-libata-Add-support-for-the-MPC52xx-ATA-controller.txt;p=1;patch=1 \ - file://0011-ohci-Whitespace-and-typo-fix-in-ohci-ppc-of.c.txt;p=1;patch=1 \ - file://0012-ata-Fix-pata_mpc52xx.c-compatible-list.txt;p=1;patch=1 \ - file://0013-powerpc-serial-Fix-mpc52xx_uart.c-compatible-list.txt;p=1;patch=1 \ - file://0014-powerpc-Small-cleanup-of-EFIKA-platform.txt;p=1;patch=1 \ - file://0015-powerpc-Add-a-unified-uevent-handler-for-bus-based-on-of_device.txt;p=1;patch=1 \ - file://0016-macintosh-Use-the-new-of_device-common-uevent-handler.txt;p=1;patch=1 \ - file://0017-powerpc-Add-uevent-handler-for-of_platform_bus.txt;p=1;patch=1 \ - file://0018-powerpc-Add-uevent-handler-for-ibmebus.txt;p=1;patch=1 \ - file://0019-MPC5200-Bestcomm-platform-driver.txt;p=1;patch=1 \ - file://0020-Fec-MPC5200-eth-driver.txt;p=1;patch=1 \ - file://0021-POWERPC-Copy-bestcomm-support-files-into-arch-powerpc.txt;p=1;patch=1 \ - file://0022-MPC52xx-PCI-now-working-on-lite5200.-ugly-but-working.txt;p=1;patch=1 \ - file://0023-POWERPC-Make-FEC-work-on-the-lite5200.txt;p=1;patch=1 \ - file://0024-Add-missing-function-prototype.txt;p=1;patch=1 \ - file://0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt;p=1;patch=1 \ - file://0026-POWERPC-Cleanup-mpc52xx-PCI-support.txt;p=1;patch=1 \ - file://0027-POWERPC-Change-name-of-mpc52xx-pci-support-file-in-Makefile.txt;p=1;patch=1 \ - file://0028-POWERPC-Change-link-order-so-mpc52xx-fec-always-shows-up-as-eth0.txt;p=1;patch=1 \ - file://0029-POWERPC-Fixup-pr_print-format-for-mpc52xx-pci-support.txt;p=1;patch=1 \ - file://0030-POWERPC-Add-mpc52xx-lite5200-PCI-support.txt;p=1;patch=1 \ - file://0031-sound-Add-support-for-the-MPC52xx-PSC-AC97-Link.txt;p=1;patch=1 \ - file://0032-POWERPC-EFIKA-Adds-missing-interrupts-from-bestcomm-node.txt;p=1;patch=1 \ - file://0033-EFIKA-fullduplex-prpl_aln.txt;p=1;patch=1 \ - file://v4l.diff;p=1;patch=1 \ - http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.11.bz2;p=1;patch=1 \ - file://sched-cfs-v9-v2.6.20.11.patch;p=1;patch=1 \ - file://defconfig \ - " - - -S = "${WORKDIR}/linux-2.6.20" - -inherit kernel - -export ARCH="powerpc" - - -do_configure() { - install -m 644 ${WORKDIR}/defconfig ${S}/.config - make ARCH=${ARCH} oldconfig -} - -do_stage_append () { -#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split - - install -d ${STAGING_KERNEL_DIR}/arch/ - cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/ - cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/ - - install -d ${STAGING_KERNEL_DIR}/include/asm - cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/ - cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/ -} - - - -do_deploy() { - install -d ${DEPLOY_DIR_IMAGE} - install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME} -} - -do_deploy[dirs] = "${S}" - -addtask deploy before do_build after do_compile - - diff --git a/packages/linux/linux-efika_2.6.20.20.bb b/packages/linux/linux-efika_2.6.20.20.bb new file mode 100644 index 0000000000..b8877fa5c3 --- /dev/null +++ b/packages/linux/linux-efika_2.6.20.20.bb @@ -0,0 +1,83 @@ +DESCRIPTION = "Linux Kernel for the EFIKA dev platform" +SECTION = "kernel" +LICENSE = "GPL" +PR = "r0" + +COMPATIBLE_MACHINE = "efika" + +FILESPATH = "${FILE_DIRNAME}/linux-efika-${PV}:${FILE_DIRNAME}/linux-efika-2.6.20" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \ + file://0001-powerpc-serial-Dispose-irq-mapping-when-done-in-mpc52xx_serial.c.txt;p=1;patch=1 \ + file://0003-powerpc-Add-device-tree-fixups-for-the-EFIKA.txt;p=1;patch=1 \ + file://0004-powerpc-Use-common-52xx-of_platform-probe-code-for-EFIKA.txt;p=1;patch=1 \ + file://0005-powerpc-Restore-proper-link-order-in-platform.txt;p=1;patch=1 \ + file://0006-Rework-the-OHCI-quirk-mecanism-as-suggested-by-David.txt;p=1;patch=1 \ + file://0007-Implement-support-for-split-endian-OHCI.txt;p=1;patch=1 \ + file://0008-ohci-Rework-bus-glue-integration-to-allow-several-at-once.txt;p=1;patch=1 \ + file://0009-ohci-Add-support-for-OHCI-controller-on-the-of_platform-bus.txt;p=1;patch=1 \ + file://0010-libata-Add-support-for-the-MPC52xx-ATA-controller.txt;p=1;patch=1 \ + file://0011-ohci-Whitespace-and-typo-fix-in-ohci-ppc-of.c.txt;p=1;patch=1 \ + file://0012-ata-Fix-pata_mpc52xx.c-compatible-list.txt;p=1;patch=1 \ + file://0013-powerpc-serial-Fix-mpc52xx_uart.c-compatible-list.txt;p=1;patch=1 \ + file://0014-powerpc-Small-cleanup-of-EFIKA-platform.txt;p=1;patch=1 \ + file://0015-powerpc-Add-a-unified-uevent-handler-for-bus-based-on-of_device.txt;p=1;patch=1 \ + file://0016-macintosh-Use-the-new-of_device-common-uevent-handler.txt;p=1;patch=1 \ + file://0017-powerpc-Add-uevent-handler-for-of_platform_bus.txt;p=1;patch=1 \ + file://0018-powerpc-Add-uevent-handler-for-ibmebus.txt;p=1;patch=1 \ + file://0019-MPC5200-Bestcomm-platform-driver.txt;p=1;patch=1 \ + file://0020-Fec-MPC5200-eth-driver.txt;p=1;patch=1 \ + file://0021-POWERPC-Copy-bestcomm-support-files-into-arch-powerpc.txt;p=1;patch=1 \ + file://0022-MPC52xx-PCI-now-working-on-lite5200.-ugly-but-working.txt;p=1;patch=1 \ + file://0023-POWERPC-Make-FEC-work-on-the-lite5200.txt;p=1;patch=1 \ + file://0024-Add-missing-function-prototype.txt;p=1;patch=1 \ + file://0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt;p=1;patch=1 \ + file://0026-POWERPC-Cleanup-mpc52xx-PCI-support.txt;p=1;patch=1 \ + file://0027-POWERPC-Change-name-of-mpc52xx-pci-support-file-in-Makefile.txt;p=1;patch=1 \ + file://0028-POWERPC-Change-link-order-so-mpc52xx-fec-always-shows-up-as-eth0.txt;p=1;patch=1 \ + file://0029-POWERPC-Fixup-pr_print-format-for-mpc52xx-pci-support.txt;p=1;patch=1 \ + file://0030-POWERPC-Add-mpc52xx-lite5200-PCI-support.txt;p=1;patch=1 \ + file://0031-sound-Add-support-for-the-MPC52xx-PSC-AC97-Link.txt;p=1;patch=1 \ + file://0032-POWERPC-EFIKA-Adds-missing-interrupts-from-bestcomm-node.txt;p=1;patch=1 \ + file://0033-EFIKA-fullduplex-prpl_aln.txt;p=1;patch=1 \ + file://v4l.diff;p=1;patch=1 \ + http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.20.bz2;p=1;patch=1 \ + http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.20.20-v22.patch;p=1;patch=1 \ + file://weaken-div64_32-symbol.patch;patch=1 \ + file://defconfig \ + " + +S = "${WORKDIR}/linux-2.6.20" + +inherit kernel + +export ARCH="powerpc" + + +do_configure() { + install -m 644 ${WORKDIR}/defconfig ${S}/.config + make ARCH=${ARCH} oldconfig +} + +do_stage_append () { +#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split + + install -d ${STAGING_KERNEL_DIR}/arch/ + cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/ + cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/ + + install -d ${STAGING_KERNEL_DIR}/include/asm + cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/ + cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/ +} + +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME} +} + +do_deploy[dirs] = "${S}" + +addtask deploy before do_build after do_compile + + -- cgit v1.2.3 From 2b2b2ef43218710827553015b07b68e7a0e7e49e Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 7 Oct 2007 16:24:05 +0000 Subject: libw100/libw100_svn.bb : make this the default as we need it for mplayer. Also lock down using SRCREV --- conf/distro/include/sane-srcrevs.inc | 1 + packages/libw100/libw100_svn.bb | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 008881ed99..705d276ba3 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -100,4 +100,5 @@ SRCREV_pn-xoo ?= "1623" SRCREV_pn-mplayer ?= "24587" SRCREV_pn-networkmanager ?= "2887" SRCREV_pn-networkmanager-applet ?= "200" +SRCREV_pn-libw100 ?= "47" diff --git a/packages/libw100/libw100_svn.bb b/packages/libw100/libw100_svn.bb index f8d5544625..4f33c625ca 100644 --- a/packages/libw100/libw100_svn.bb +++ b/packages/libw100/libw100_svn.bb @@ -1,11 +1,9 @@ DESCRIPTION = "Acceleration library for ATI imageon chipsets (w100 and w3220)" LICENSE = "GPLv2" -PV = "0.0.2+svn${SRCDATE}" +PV = "0.0.2+svn${SRCREV}" SRC_URI = "svn://libw100.svn.sourceforge.net/svnroot/libw100;module=trunk;proto=https" -DEFAULT_PREFERENCE = "-1" - S = "${WORKDIR}/trunk" inherit autotools pkgconfig -- cgit v1.2.3 From e5597c3e190b3e7f45b8550cd817a628e426378d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Sun, 7 Oct 2007 16:27:16 +0000 Subject: linux-openmoko-devel: Upgrade to 2.6.23-rc9 --- packages/linux/linux-openmoko-devel/defconfig | 1822 -------------------- .../linux-openmoko-devel/defconfig-2.6.23-rc9 | 1805 +++++++++++++++++++ .../linux/linux-openmoko-devel_svn+2.6.23-rc9.bb | 78 + packages/linux/linux-openmoko-devel_svn.bb | 72 - 4 files changed, 1883 insertions(+), 1894 deletions(-) delete mode 100644 packages/linux/linux-openmoko-devel/defconfig create mode 100644 packages/linux/linux-openmoko-devel/defconfig-2.6.23-rc9 create mode 100644 packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb delete mode 100644 packages/linux/linux-openmoko-devel_svn.bb diff --git a/packages/linux/linux-openmoko-devel/defconfig b/packages/linux/linux-openmoko-devel/defconfig deleted file mode 100644 index f7274016c8..0000000000 --- a/packages/linux/linux-openmoko-devel/defconfig +++ /dev/null @@ -1,1822 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.22.1 -# Thu Jul 26 22:01:38 2007 -# -CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y -# CONFIG_GENERIC_TIME is not set -# CONFIG_GENERIC_CLOCKEVENTS is not set -CONFIG_MMU=y -CONFIG_NO_IOPORT=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y -CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="-moko11" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -# CONFIG_IPC_NS is not set -CONFIG_SYSVIPC_SYSCTL=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_TASKSTATS is not set -# CONFIG_UTS_NS is not set -# CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -# CONFIG_EMBEDDED is not set -CONFIG_UID16=y -CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=m -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=m -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -CONFIG_ARCH_S3C2410=y -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_PLAT_S3C24XX=y -CONFIG_CPU_S3C244X=y -# CONFIG_S3C2410_BOOT_WATCHDOG is not set -CONFIG_S3C2410_BOOT_ERROR_RESET=y -CONFIG_S3C2410_PM_DEBUG=y -# CONFIG_S3C2410_PM_CHECK is not set -CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 -CONFIG_S3C2410_DMA=y -# CONFIG_S3C2410_DMA_DEBUG is not set -CONFIG_MACH_SMDK=y - -# -# S3C2400 Machines -# -CONFIG_CPU_S3C2410=y -CONFIG_CPU_S3C2410_DMA=y -CONFIG_S3C2410_PM=y -CONFIG_S3C2410_GPIO=y -CONFIG_S3C2410_CLOCK=y - -# -# S3C2410 Machines -# -# CONFIG_ARCH_SMDK2410 is not set -# CONFIG_ARCH_H1940 is not set -# CONFIG_MACH_N30 is not set -# CONFIG_ARCH_BAST is not set -# CONFIG_MACH_OTOM is not set -# CONFIG_MACH_AML_M5900 is not set -# CONFIG_MACH_VR1000 is not set -CONFIG_MACH_QT2410=y -CONFIG_MACH_NEO1973_GTA01=y - -# -# S3C2412 Machines -# -# CONFIG_MACH_SMDK2413 is not set -# CONFIG_MACH_SMDK2412 is not set -# CONFIG_MACH_VSTMS is not set -CONFIG_CPU_S3C2440=y -CONFIG_S3C2440_DMA=y - -# -# S3C2440 Machines -# -# CONFIG_MACH_ANUBIS is not set -# CONFIG_MACH_OSIRIS is not set -# CONFIG_MACH_RX3715 is not set -CONFIG_ARCH_S3C2440=y -# CONFIG_MACH_NEXCODER_2440 is not set -CONFIG_SMDK2440_CPU2440=y -CONFIG_MACH_HXD8=y -CONFIG_MACH_NEO1973_GTA02=y - -# -# S3C2442 Machines -# -# CONFIG_SMDK2440_CPU2442 is not set - -# -# S3C2443 Machines -# -# CONFIG_MACH_SMDK2443 is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_ARM920T=y -CONFIG_CPU_32v4T=y -CONFIG_CPU_ABRT_EV4T=y -CONFIG_CPU_CACHE_V4WT=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_COPY_V4WB=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_WRITETHROUGH is not set -# CONFIG_OUTER_CACHE is not set - -# -# Bus support -# -# CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -CONFIG_PREEMPT=y -CONFIG_NO_IDLE_HZ=y -CONFIG_HZ=200 -# CONFIG_AEABI is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off" -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set - -# -# Power management options -# -CONFIG_PM=y -CONFIG_PM_LEGACY=y -CONFIG_PM_DEBUG=y -CONFIG_DISABLE_CONSOLE_SUSPEND=y -# CONFIG_PM_SYSFS_DEPRECATED is not set -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=m -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -CONFIG_XFRM_MIGRATE=y -CONFIG_NET_KEY=m -CONFIG_NET_KEY_MIGRATE=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_ASK_IP_FIB_HASH=y -# CONFIG_IP_FIB_TRIE is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_VERBOSE is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE=m -# CONFIG_NET_IPGRE_BROADCAST is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -CONFIG_TCP_MD5SIG=y -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -# CONFIG_NF_CONNTRACK_AMANDA is not set -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -# CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -# CONFIG_IP_NF_MATCH_RECENT is not set -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -# CONFIG_NF_NAT_AMANDA is not set -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -# CONFIG_IP_NF_RAW is not set -# CONFIG_IP_NF_ARPTABLES is not set - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -# CONFIG_IP6_NF_RAW is not set - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -CONFIG_BRIDGE=y -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -CONFIG_LLC=y -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -CONFIG_NET_SCHED=y -CONFIG_NET_SCH_FIFO=y - -# -# Queueing/Scheduling -# -CONFIG_NET_SCH_CBQ=m -CONFIG_NET_SCH_HTB=m -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_PRIO=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_INGRESS=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -# CONFIG_NET_EMATCH is not set -# CONFIG_NET_CLS_ACT is not set -# CONFIG_NET_CLS_POLICE is not set -# CONFIG_NET_CLS_IND is not set -CONFIG_NET_ESTIMATOR=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -# CONFIG_BT_HCIUART is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set -CONFIG_FIB_RULES=y - -# -# Wireless -# -# CONFIG_CFG80211 is not set -# CONFIG_WIRELESS_EXT is not set -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_SYS_HYPERVISOR is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_VERIFY_WRITE=y -# CONFIG_MTD_NAND_ECC_SMC is not set -# CONFIG_MTD_NAND_MUSEUM_IDS is not set -CONFIG_MTD_NAND_IDS=y -CONFIG_MTD_NAND_S3C2410=y -CONFIG_MTD_NAND_S3C2410_BBT=y -# CONFIG_MTD_NAND_S3C2410_DEBUG is not set -CONFIG_MTD_NAND_S3C2410_HWECC=y -CONFIG_MTD_NAND_S3C2410_CLKSTOP=y -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_NANDSIM is not set -# CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# -# CONFIG_PNPACPI is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_UB=m -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=m -# CONFIG_CHR_DEV_ST is not set -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -CONFIG_SCSI_SCAN_ASYNC=y -CONFIG_SCSI_WAIT_SCAN=m - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -# CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set - -# -# SCSI low-level drivers -# -# CONFIG_ISCSI_TCP is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_ATA is not set - -# -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -# CONFIG_BLK_DEV_MD is not set -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -CONFIG_DM_CRYPT=m -CONFIG_DM_SNAPSHOT=m -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=m -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set -CONFIG_NET_PCI=y -CONFIG_CS89x0=m -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=y -CONFIG_INPUT_EVBUG=m - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_KEYBOARD_GPIO=m -CONFIG_KEYBOARD_GTA01=y -CONFIG_KEYBOARD_QT2410=y -CONFIG_INPUT_MOUSE=y -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_APPLETOUCH is not set -# CONFIG_MOUSE_VSXXXAA is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -CONFIG_TOUCHSCREEN_S3C2410=y -# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -# CONFIG_INPUT_MISC is not set - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_RAW is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_NR_TTY_DEVICES=4 -CONFIG_HW_CONSOLE=y -CONFIG_VT_HW_CONSOLE_BINDING=y -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_S3C2410=y -CONFIG_SERIAL_S3C2410_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_S3C2410_WATCHDOG=m - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -# CONFIG_HW_RANDOM is not set -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set -# CONFIG_TS0710_MUX is not set -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -CONFIG_I2C_S3C2410=y -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_SENSORS_EEPROM is not set -CONFIG_SENSORS_PCF50606=y -CONFIG_SENSORS_PCF50633=y -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -CONFIG_SENSORS_TSL256X=m -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -CONFIG_SPI_BITBANG=y -CONFIG_SPI_S3C24XX=y -CONFIG_SPI_S3C24XX_GPIO=y - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -CONFIG_SPI_SLAVE_JBT6K74=y - -# -# Dallas's 1-wire bus -# -# CONFIG_W1 is not set -CONFIG_HWMON=y -# CONFIG_HWMON_VID is not set -# CONFIG_SENSORS_ABITUGURU is not set -# CONFIG_SENSORS_AD7418 is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ASB100 is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_FSCHER is not set -# CONFIG_SENSORS_FSCPOS is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM70 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_MAX6650 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_W83781D is not set -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Misc devices -# - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set - -# -# LED devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_S3C24XX=m -CONFIG_LEDS_GTA01=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -CONFIG_DAB=y -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_LCD_CLASS_DEVICE=y -CONFIG_BACKLIGHT_GTA01=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_S3C2410=y -# CONFIG_FB_S3C2410_DEBUG is not set -CONFIG_GLAMO=y -CONFIG_FB_GLAMO=y -CONFIG_GLAMO_SPI_GPIO=y -CONFIG_FB_GLAMO_SPI=y -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -CONFIG_FONT_6x11=y -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -# CONFIG_FONT_MINI_4x6 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -# CONFIG_LOGO_LINUX_CLUT224 is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=y -CONFIG_SND_S3C24XX_SOC=m -CONFIG_SND_S3C24XX_SOC_I2S=m -CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_WM8753=m - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# HID Devices -# -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -# CONFIG_USB_HIDDEV is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -CONFIG_USB_DEVICE_CLASS=y -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_SUSPEND is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD is not set - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=m -# CONFIG_USB_STORAGE_DEBUG is not set -CONFIG_USB_STORAGE_DATAFAB=y -CONFIG_USB_STORAGE_FREECOM=y -CONFIG_USB_STORAGE_DPCM=y -CONFIG_USB_STORAGE_USBAT=y -CONFIG_USB_STORAGE_SDDR09=y -CONFIG_USB_STORAGE_SDDR55=y -CONFIG_USB_STORAGE_JUMPSHOT=y -CONFIG_USB_STORAGE_ALAUDA=y -CONFIG_USB_STORAGE_KARMA=y -CONFIG_USB_LIBUSUAL=y - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -CONFIG_USB_MON=y - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -CONFIG_USB_SERIAL_AIRPRIME=m -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP2101=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -CONFIG_USB_SERIAL_HP4X=m -CONFIG_USB_SERIAL_SAFE=m -CONFIG_USB_SERIAL_SAFE_PADDED=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG is not set -CONFIG_USB_EZUSB=y - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -CONFIG_USB_BERRY_CHARGE=m -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -CONFIG_USB_TRANCEVIBRATOR=m -CONFIG_USB_IOWARRIOR=m -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -CONFIG_USB_GADGET_S3C2410=y -CONFIG_USB_S3C2410=y -# CONFIG_USB_S3C2410_DEBUG is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_UNSAFE_RESUME=y - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y - -# -# MMC/SD Host Controller Drivers -# -CONFIG_MMC_S3C=y - -# -# Real Time Clock -# -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_DEBUG=y - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -# CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_X1205 is not set -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF8583 is not set - -# -# SPI RTC drivers -# -# CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# on-CPU RTC drivers -# -CONFIG_RTC_DRV_S3C=m - -# -# File systems -# -CONFIG_EXT2_FS=m -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=y -# CONFIG_JBD_DEBUG is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -CONFIG_ROMFS_FS=y -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -CONFIG_CONFIGFS_FS=m - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_YAFFS_FS=y -CONFIG_YAFFS_YAFFS1=y -# CONFIG_YAFFS_DOES_ECC is not set -CONFIG_YAFFS_YAFFS2=y -CONFIG_YAFFS_AUTO_YAFFS2=y -# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set -CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10 -# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set -# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set -CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -CONFIG_JFFS2_SUMMARY=y -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -CONFIG_NFS_V4=y -# CONFIG_NFS_DIRECTIO is not set -CONFIG_NFSD=m -CONFIG_NFSD_V3=y -# CONFIG_NFSD_V3_ACL is not set -CONFIG_NFSD_V4=y -CONFIG_NFSD_TCP=y -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -# CONFIG_SUNRPC_BIND34 is not set -CONFIG_RPCSEC_GSS_KRB5=y -# CONFIG_RPCSEC_GSS_SPKM3 is not set -# CONFIG_SMB_FS is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -CONFIG_CIFS_WEAK_PW_HASH=y -# CONFIG_CIFS_XATTR is not set -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -CONFIG_NLS_CODEPAGE_850=m -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -# CONFIG_DLM is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -CONFIG_DETECT_SOFTLOCKUP=y -# CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set -# CONFIG_DEBUG_SLAB is not set -CONFIG_DEBUG_PREEMPT=y -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_RT_MUTEX_TESTER is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_LIST is not set -CONFIG_FRAME_POINTER=y -CONFIG_FORCED_INLINING=y -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_FAULT_INJECTION is not set -# CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_ICEDCC is not set -CONFIG_DEBUG_S3C2410_PORT=y -CONFIG_DEBUG_S3C2410_UART=0 - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA256=m -CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_GF128MUL=m -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_LRW=m -# CONFIG_CRYPTO_CRYPTD is not set -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_TEST=m - -# -# Hardware crypto devices -# - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-openmoko-devel/defconfig-2.6.23-rc9 b/packages/linux/linux-openmoko-devel/defconfig-2.6.23-rc9 new file mode 100644 index 0000000000..fe5b967709 --- /dev/null +++ b/packages/linux/linux-openmoko-devel/defconfig-2.6.23-rc9 @@ -0,0 +1,1805 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23-rc9 +# Sun Oct 7 15:39:12 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +# CONFIG_GENERIC_TIME is not set +# CONFIG_GENERIC_CLOCKEVENTS is not set +CONFIG_MMU=y +CONFIG_NO_IOPORT=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-moko11" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_S3C2410=y +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_PLAT_S3C24XX=y +CONFIG_CPU_S3C244X=y +CONFIG_S3C2410_DMA=y +# CONFIG_S3C2410_DMA_DEBUG is not set +CONFIG_MACH_SMDK=y +CONFIG_PLAT_S3C=y +CONFIG_CPU_LLSERIAL_S3C2410=y +CONFIG_CPU_LLSERIAL_S3C2440=y + +# +# Boot options +# +# CONFIG_S3C_BOOT_WATCHDOG is not set +# CONFIG_S3C_BOOT_ERROR_RESET is not set + +# +# Power management +# +CONFIG_S3C2410_PM_DEBUG=y +# CONFIG_S3C2410_PM_CHECK is not set +CONFIG_S3C_LOWLEVEL_UART_PORT=0 + +# +# S3C2400 Machines +# +CONFIG_CPU_S3C2410=y +CONFIG_CPU_S3C2410_DMA=y +CONFIG_S3C2410_PM=y +CONFIG_S3C2410_GPIO=y +CONFIG_S3C2410_CLOCK=y + +# +# S3C2410 Machines +# +# CONFIG_ARCH_SMDK2410 is not set +# CONFIG_ARCH_H1940 is not set +# CONFIG_MACH_N30 is not set +# CONFIG_ARCH_BAST is not set +# CONFIG_MACH_OTOM is not set +# CONFIG_MACH_AML_M5900 is not set +# CONFIG_MACH_VR1000 is not set +CONFIG_MACH_QT2410=y +CONFIG_MACH_NEO1973_GTA01=y + +# +# S3C2412 Machines +# +# CONFIG_MACH_SMDK2413 is not set +# CONFIG_MACH_SMDK2412 is not set +# CONFIG_MACH_VSTMS is not set +CONFIG_CPU_S3C2440=y +CONFIG_S3C2440_DMA=y + +# +# S3C2440 Machines +# +# CONFIG_MACH_ANUBIS is not set +# CONFIG_MACH_OSIRIS is not set +# CONFIG_MACH_RX3715 is not set +CONFIG_ARCH_S3C2440=y +# CONFIG_MACH_NEXCODER_2440 is not set +CONFIG_SMDK2440_CPU2440=y +CONFIG_MACH_HXD8=y +CONFIG_MACH_NEO1973_GTA02=y + +# +# S3C2442 Machines +# +# CONFIG_SMDK2440_CPU2442 is not set + +# +# S3C2443 Machines +# +# CONFIG_MACH_SMDK2443 is not set + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM920T=y +CONFIG_CPU_32v4T=y +CONFIG_CPU_ABRT_EV4T=y +CONFIG_CPU_CACHE_V4WT=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_OUTER_CACHE is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=200 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="unused -- bootloader passes ATAG list" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +CONFIG_PM_DEBUG=y +# CONFIG_PM_VERBOSE is not set +CONFIG_DISABLE_CONSOLE_SUSPEND=y +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +CONFIG_NET_KEY=m +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_ASK_IP_FIB_HASH=y +# CONFIG_IP_FIB_TRIE is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_MULTIPLE_TABLES=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +# CONFIG_NET_IPGRE_BROADCAST is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_MD5SIG=y +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +# CONFIG_NF_CT_PROTO_UDPLITE is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +# CONFIG_IP_NF_MATCH_RECENT is not set +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +# CONFIG_NF_NAT_AMANDA is not set +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_ARPTABLES is not set + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +# CONFIG_IP6_NF_RAW is not set + +# +# Bridge: Netfilter Configuration +# +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=y +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=y +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +# CONFIG_NET_EMATCH is not set +# CONFIG_NET_CLS_ACT is not set +# CONFIG_NET_CLS_POLICE is not set +# CONFIG_NET_CLS_IND is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +# CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +CONFIG_MTD_NAND_S3C2410=y +CONFIG_MTD_NAND_S3C2410_BBT=y +# CONFIG_MTD_NAND_S3C2410_DEBUG is not set +CONFIG_MTD_NAND_S3C2410_HWECC=y +CONFIG_MTD_NAND_S3C2410_CLKSTOP=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_UB=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +CONFIG_NET_PCI=y +CONFIG_CS89x0=m +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_EVBUG=m + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_GTA01=y +CONFIG_KEYBOARD_QT2410=y +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +CONFIG_TOUCHSCREEN_S3C2410=y +# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_NR_TTY_DEVICES=4 +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_S3C2410=y +CONFIG_SERIAL_S3C2410_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_S3C2410_WATCHDOG=m + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TS0710_MUX is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +CONFIG_I2C_S3C2410=y +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +CONFIG_SENSORS_PCF50606=y +CONFIG_SENSORS_PCF50633=y +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +CONFIG_SENSORS_TSL256X=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=y +CONFIG_SPI_S3C24XX=y +CONFIG_SPI_S3C24XX_GPIO=y + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +CONFIG_SPI_SLAVE_JBT6K74=y +# CONFIG_W1 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_S3C24XX=m +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_GTA01=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_S3C2410=y +# CONFIG_FB_S3C2410_DEBUG is not set +CONFIG_GLAMO=y +CONFIG_FB_GLAMO=y +CONFIG_GLAMO_SPI_GPIO=y +CONFIG_FB_GLAMO_SPI=y +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +CONFIG_FONT_6x11=y +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_LOGO_OPENMOKO_CLUT224 is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=y +CONFIG_SND_S3C24XX_SOC=y +CONFIG_SND_S3C24XX_SOC_I2S=y +CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_WM8753=y + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_DPCM=y +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_KARMA=y +CONFIG_USB_LIBUSUAL=y + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_AIRPRIME=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP2101=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +CONFIG_USB_BERRY_CHARGE=m +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +CONFIG_USB_GADGET_S3C2410=y +CONFIG_USB_S3C2410=y +# CONFIG_USB_S3C2410_DEBUG is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_S3C=y +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_DEBUG=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_S3C=m + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=m +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +CONFIG_CONFIGFS_FS=m + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_YAFFS_FS=y +CONFIG_YAFFS_YAFFS1=y +# CONFIG_YAFFS_9BYTE_TAGS is not set +# CONFIG_YAFFS_DOES_ECC is not set +CONFIG_YAFFS_YAFFS2=y +CONFIG_YAFFS_AUTO_YAFFS2=y +# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set +CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10 +# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set +# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set +CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=y +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_SQUASHFS_VMALLOC is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=m +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set +# CONFIG_DEBUG_S3C_PORT is not set +CONFIG_DEBUG_S3C_UART=0 + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb b/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb new file mode 100644 index 0000000000..f7ccbd8fc5 --- /dev/null +++ b/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb @@ -0,0 +1,78 @@ +require linux.inc + +DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" +VANILLA_VERSION = "2.6.22" +KERNEL_VERSION = "2.6.23-rc9" +KERNEL_RELEASE = "2.6.23-rc9" +PV = "${KERNEL_RELEASE}-moko11+svnr${SRCREV}" +PR = "r2" + +KERNEL_IMAGETYPE = "uImage" +UBOOT_ENTRYPOINT = "30008000" + +############################################################## +# source and patches +# +SRCREV_FORMAT = "patches" +SRCREV = "3101" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \ + ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-${KERNEL_VERSION}.bz2 \ + svn://svn.openmoko.org/branches/src/target/kernel/2.6.23.x;module=patches;proto=http;name=patches \ + file://squashfs-2.6.23.patch;patch=1 \ + file://fix-EVIOCGRAB-semantics-2.6.22.5.patch;patch=1 \ +# file://printascii.patch;patch=1 \ + file://defconfig-2.6.23-rc9 \ + file://logo_linux_clut224.ppm" +S = "${WORKDIR}/linux-${VANILLA_VERSION}" + +############################################################## +# kernel image resides on a seperate flash partition (for now) +# +FILES_kernel-image = "" +ALLOW_EMPTY = "1" + +COMPATIBLE_HOST = "arm.*-linux" +COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' + +CMDLINE = "unused -- bootloader passes ATAG list" + +############################################################### +# module configs specific to this kernel +# + +# usb +module_autoload_ohci-hcd = "ohci-hcd" +module_autoload_hci_usb = "hci_usb" +module_autoload_g_ether = "g_ether" +# audio +module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" +# sd/mmc +module_autoload_s3cmci = "s3cmci" + +do_prepatch() { + cd ${S} && patch -p1 < ${WORKDIR}/patch-${KERNEL_VERSION} + mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av + mv patches patches.openmoko + mv .pc .pc.old + mv ${WORKDIR}/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig +} + +addtask prepatch after do_unpack before do_patch + +############################################################### +# put into deploy directory and append u-boot header +# +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}.bin + tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib + ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin + rm -f linux.bin.gz + gzip -9 linux.bin + ${STAGING_BINDIR_NATIVE}/uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "OpenMoko Kernel Image Neo1973" \ + -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin + ln -sf ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}-latest.bin + rm -f linux.bin.gz +} + diff --git a/packages/linux/linux-openmoko-devel_svn.bb b/packages/linux/linux-openmoko-devel_svn.bb deleted file mode 100644 index 6fae5da9ef..0000000000 --- a/packages/linux/linux-openmoko-devel_svn.bb +++ /dev/null @@ -1,72 +0,0 @@ -DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" -VANILLA_VERSION = "2.6.22.5" -PV = "${VANILLA_VERSION}-moko11+svnr${SRCREV}" -PR = "r1" - -KERNEL_IMAGETYPE = "uImage" -UBOOT_ENTRYPOINT = "30008000" - -require linux.inc - -############################################################## -# source and patches -# -SRCREV_FORMAT = "patches" - -SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \ - svn://svn.openmoko.org/trunk/src/target/kernel;module=patches;proto=http;name=patches \ - file://squashfs.patch;patch=1 \ - file://fix-EVIOCGRAB-semantics-2.6.22.5.patch;patch=1 \ -# file://printascii.patch;patch=1 \ - file://defconfig \ - file://logo_linux_clut224.ppm" -S = "${WORKDIR}/linux-${VANILLA_VERSION}" - -############################################################## -# kernel image resides on a seperate flash partition (for now) -# -FILES_kernel-image = "" -ALLOW_EMPTY = "1" - -COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' - -CMDLINE = "unused -- bootloader passes ATAG list" - -############################################################### -# module configs specific to this kernel -# - -# usb -module_autoload_ohci-hcd = "ohci-hcd" -module_autoload_hci_usb = "hci_usb" -module_autoload_g_ether = "g_ether" -# audio -module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" -# sd/mmc -module_autoload_s3cmci = "s3cmci" - -do_prepatch() { - mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av - mv patches patches.openmoko - mv .pc .pc.old -} - -addtask prepatch after do_unpack before do_patch - -############################################################### -# put into deploy directory and append u-boot header -# -do_deploy() { - install -d ${DEPLOY_DIR_IMAGE} - install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}.bin - tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib - ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin - rm -f linux.bin.gz - gzip -9 linux.bin - ${STAGING_BINDIR_NATIVE}/uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "OpenMoko Kernel Image Neo1973" \ - -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin - ln -sf ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}-latest.bin - rm -f linux.bin.gz -} - -- cgit v1.2.3 From dbe39ee6633e8f0660a3c347b79482069834ca78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Sun, 7 Oct 2007 17:06:03 +0000 Subject: linux-openmoko-devel: correct versioning mistake (thanks, koen!) --- packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb b/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb index f7ccbd8fc5..2c0e566050 100644 --- a/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb +++ b/packages/linux/linux-openmoko-devel_svn+2.6.23-rc9.bb @@ -4,7 +4,7 @@ DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ VANILLA_VERSION = "2.6.22" KERNEL_VERSION = "2.6.23-rc9" KERNEL_RELEASE = "2.6.23-rc9" -PV = "${KERNEL_RELEASE}-moko11+svnr${SRCREV}" +PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}-moko11+svnr${SRCREV}" PR = "r2" KERNEL_IMAGETYPE = "uImage" -- cgit v1.2.3 From b7a0319b872d44e9ed44be54265da2c6807c4dd6 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 7 Oct 2007 17:18:01 +0000 Subject: packages/mplayer/mplayer_svn.bb : update the c7x0 and hx4700 w100 support so they can play with accellerate stuff without having to have x11 installed. Also added check for machine feature x86 to turn on runtime cpu detection so x86 machines with SSE work. Marcin time for you to add it to your favourite toys. --- packages/mplayer/mplayer_svn.bb | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/mplayer/mplayer_svn.bb b/packages/mplayer/mplayer_svn.bb index bd2bc96b52..4d9c744e79 100644 --- a/packages/mplayer/mplayer_svn.bb +++ b/packages/mplayer/mplayer_svn.bb @@ -3,6 +3,9 @@ SECTION = "multimedia" PRIORITY = "optional" HOMEPAGE = "http://www.mplayerhq.hu/" DEPENDS = "virtual/libsdl xsp libmad zlib libpng jpeg liba52 freetype fontconfig alsa-lib lzo ncurses lame libxv virtual/libx11" +DEPENDS_append_c7x0 = " libw100 " +DEPENDS_append_hx4700 = " libw100 " + RDEPENDS = "mplayer-common" LICENSE = "GPL" SRC_URI = "svn://svn.mplayerhq.hu/mplayer;module=trunk \ @@ -28,14 +31,16 @@ SRC_URI = "svn://svn.mplayerhq.hu/mplayer;module=trunk \ # discovers this is more general than please make this more general # ie. for all armv4 machines. SRC_URI_append_collie = "file://disable-executable-stack-test.patch;patch=1" -PACKAGE_ARCH_mplayer_collie = "collie" -PACKAGE_ARCH_mencoder_collie = "collie" + +PACKAGE_ARCH_collie = "collie" +PACKAGE_ARCH_c7x0 = "c7x0" +PACKAGE_ARCH_hx4700 = "hx4700" RCONFLICTS_${PN} = "mplayer-atty" RREPLACES_${PN} = "mplayer-atty" PV = "0.0+1.0rc1+svnr${SRCREV}" -PR = "r3" +PR = "r4" DEFAULT_PREFERENCE = "-1" PARALLEL_MAKE = "" @@ -165,13 +170,12 @@ EXTRA_OECONF = " \ --disable-win32waveout \ --enable-select \ \ - --disable-runtime-cpudetection \ " EXTRA_OECONF_append_arm = " --disable-decoder=vorbis_decoder \ --disable-encoder=vorbis_encoder" - -EXTRA_OECONF_append_progear = " --disable-sse --disable-3dnow --disable-mmxext --disable-sse2" +EXTRA_OECONF_append_c7x0 = " --enable-imageon " +EXTRA_OECONF_append_hx4700 = " --enable-imageon " #build with support for the iwmmxt instruction and pxa270fb overlay support (pxa270 and up) #not every iwmmxt machine has the lcd connected to pxafb, but building the module doesn't hurt @@ -182,6 +186,7 @@ MY_TARGET_CC_ARCH := "${TARGET_CC_ARCH}" TARGET_CC_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', '-march=iwmmxt -mtune=iwmmxt', '${MY_TARGET_CC_ARCH}',d)}" EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'iwmmxt', '--enable-pxa --enable-iwmmxt', '',d)} " +EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'x86', '--enable-runtime-cpudetection', '',d)} " do_configure() { cp ${WORKDIR}/vo_w100.c ${S}/libvo -- cgit v1.2.3 From 609eabf6ac2227cb5a05b49a9c7cf6b91c7b43c2 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 7 Oct 2007 17:35:31 +0000 Subject: glib-2.0-2.14.0: fix inline warnings with gcc 4.2 in gutils.h --- .../glib-2.0/glib-2.0-2.14.0/gcc-4.2-inline-fix.patch | 17 +++++++++++++++++ packages/glib-2.0/glib-2.0_2.14.0.bb | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 packages/glib-2.0/glib-2.0-2.14.0/gcc-4.2-inline-fix.patch diff --git a/packages/glib-2.0/glib-2.0-2.14.0/gcc-4.2-inline-fix.patch b/packages/glib-2.0/glib-2.0-2.14.0/gcc-4.2-inline-fix.patch new file mode 100644 index 0000000000..ea2b41e900 --- /dev/null +++ b/packages/glib-2.0/glib-2.0-2.14.0/gcc-4.2-inline-fix.patch @@ -0,0 +1,17 @@ +Index: glib-2.12.9/glib/gutils.h +=================================================================== +--- glib-2.12.9.orig/glib/gutils.h 2007-10-07 19:13:53.000000000 +0200 ++++ glib-2.12.9/glib/gutils.h 2007-10-07 19:15:04.000000000 +0200 +@@ -97,7 +97,11 @@ + # define G_INLINE_FUNC + # undef G_CAN_INLINE + #elif defined (__GNUC__) +-# define G_INLINE_FUNC extern inline ++# if defined (__GNUC_GNU_INLINE__) ++# define G_INLINE_FUNC extern __attribute__((gnu_inline)) inline ++# else ++# define G_INLINE_FUNC extern inline ++# endif + #elif defined (G_CAN_INLINE) + # define G_INLINE_FUNC static inline + #else /* can't inline */ diff --git a/packages/glib-2.0/glib-2.0_2.14.0.bb b/packages/glib-2.0/glib-2.0_2.14.0.bb index 995efbd119..e4318cd1f0 100644 --- a/packages/glib-2.0/glib-2.0_2.14.0.bb +++ b/packages/glib-2.0/glib-2.0_2.14.0.bb @@ -2,4 +2,5 @@ require glib.inc SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-${PV}.tar.bz2 \ file://glibconfig-sysdefs.h \ - file://configure-libtool.patch;patch=1" + file://configure-libtool.patch;patch=1 \ + file://gcc-4.2-inline-fix.patch;patch=1" -- cgit v1.2.3 From 096061d2395d5ca861d542c599c18741d79a41c9 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Sun, 7 Oct 2007 17:36:13 +0000 Subject: glib-2.0: add 2.14.1 --- packages/glib-2.0/glib-2.0-2.14.1/.mtn2git_empty | 0 .../glib-2.0-2.14.1/configure-libtool.patch | 29 ++++++++++++++++++++++ .../glib-2.0-2.14.1/gcc-4.2-inline-fix.patch | 17 +++++++++++++ packages/glib-2.0/glib-2.0_2.14.1.bb | 6 +++++ 4 files changed, 52 insertions(+) create mode 100644 packages/glib-2.0/glib-2.0-2.14.1/.mtn2git_empty create mode 100644 packages/glib-2.0/glib-2.0-2.14.1/configure-libtool.patch create mode 100644 packages/glib-2.0/glib-2.0-2.14.1/gcc-4.2-inline-fix.patch create mode 100644 packages/glib-2.0/glib-2.0_2.14.1.bb diff --git a/packages/glib-2.0/glib-2.0-2.14.1/.mtn2git_empty b/packages/glib-2.0/glib-2.0-2.14.1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/glib-2.0/glib-2.0-2.14.1/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.14.1/configure-libtool.patch new file mode 100644 index 0000000000..a52327c8c9 --- /dev/null +++ b/packages/glib-2.0/glib-2.0-2.14.1/configure-libtool.patch @@ -0,0 +1,29 @@ +--- glib-2.12.10/configure.in.orig 2006-06-05 13:34:08.000000000 +0100 ++++ glib-2.12.10/configure.in 2006-06-05 13:34:36.000000000 +0100 +@@ -1174,7 +1174,7 @@ + G_MODULE_LDFLAGS= + else + export SED +- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` ++ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` + fi + dnl G_MODULE_IMPL= don't reset, so cmd-line can override + G_MODULE_NEED_USCORE=0 +@@ -1265,7 +1265,7 @@ + LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS" + dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness + echo "void glib_plugin_test(void) { }" > plugin.c +- ${SHELL} ./libtool --mode=compile ${CC} -shared \ ++ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \ + -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null + AC_CACHE_CHECK([for RTLD_GLOBAL brokenness], + glib_cv_rtldglobal_broken,[ +@@ -1339,7 +1339,7 @@ + + AC_MSG_CHECKING(for the suffix of shared libraries) + export SED +-shrext_cmds=`./libtool --config | grep '^shrext_cmds='` ++shrext_cmds=`./$host_alias-libtool --config | grep '^shrext_cmds='` + eval $shrext_cmds + module=yes eval std_shrext=$shrext_cmds + # chop the initial dot diff --git a/packages/glib-2.0/glib-2.0-2.14.1/gcc-4.2-inline-fix.patch b/packages/glib-2.0/glib-2.0-2.14.1/gcc-4.2-inline-fix.patch new file mode 100644 index 0000000000..ea2b41e900 --- /dev/null +++ b/packages/glib-2.0/glib-2.0-2.14.1/gcc-4.2-inline-fix.patch @@ -0,0 +1,17 @@ +Index: glib-2.12.9/glib/gutils.h +=================================================================== +--- glib-2.12.9.orig/glib/gutils.h 2007-10-07 19:13:53.000000000 +0200 ++++ glib-2.12.9/glib/gutils.h 2007-10-07 19:15:04.000000000 +0200 +@@ -97,7 +97,11 @@ + # define G_INLINE_FUNC + # undef G_CAN_INLINE + #elif defined (__GNUC__) +-# define G_INLINE_FUNC extern inline ++# if defined (__GNUC_GNU_INLINE__) ++# define G_INLINE_FUNC extern __attribute__((gnu_inline)) inline ++# else ++# define G_INLINE_FUNC extern inline ++# endif + #elif defined (G_CAN_INLINE) + # define G_INLINE_FUNC static inline + #else /* can't inline */ diff --git a/packages/glib-2.0/glib-2.0_2.14.1.bb b/packages/glib-2.0/glib-2.0_2.14.1.bb new file mode 100644 index 0000000000..e4318cd1f0 --- /dev/null +++ b/packages/glib-2.0/glib-2.0_2.14.1.bb @@ -0,0 +1,6 @@ +require glib.inc + +SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-${PV}.tar.bz2 \ + file://glibconfig-sysdefs.h \ + file://configure-libtool.patch;patch=1 \ + file://gcc-4.2-inline-fix.patch;patch=1" -- cgit v1.2.3 From 6f5e67843c881c0e3839b73a663c469c7ef9603a Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sun, 7 Oct 2007 17:45:53 +0000 Subject: lmsensors-apps: added missing patch --- packages/lm_sensors/files/prefix-fix.patch | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 packages/lm_sensors/files/prefix-fix.patch diff --git a/packages/lm_sensors/files/prefix-fix.patch b/packages/lm_sensors/files/prefix-fix.patch new file mode 100644 index 0000000000..66ec55c150 --- /dev/null +++ b/packages/lm_sensors/files/prefix-fix.patch @@ -0,0 +1,14 @@ +Index: lm_sensors-2.10.1/Makefile +=================================================================== +--- lm_sensors-2.10.1.orig/Makefile 2007-10-07 19:22:51.000000000 +0200 ++++ lm_sensors-2.10.1/Makefile 2007-10-07 19:23:13.000000000 +0200 +@@ -74,9 +74,6 @@ + # everything, set DESTDIR to the extra prefix. + DESTDIR := + +-# This is the prefix that will be used for almost all directories below. +-PREFIX := /usr/local +- + # Your C compiler + CC := gcc + -- cgit v1.2.3 From 9156fc13516db49e349c2ce8421484e618f1457d Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sun, 7 Oct 2007 17:46:24 +0000 Subject: lmsensors-apps: ugly fix to get it properly packaged --- packages/lm_sensors/lmsensors-apps_2.10.1.bb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/lm_sensors/lmsensors-apps_2.10.1.bb b/packages/lm_sensors/lmsensors-apps_2.10.1.bb index 84fe358647..ce188beb64 100644 --- a/packages/lm_sensors/lmsensors-apps_2.10.1.bb +++ b/packages/lm_sensors/lmsensors-apps_2.10.1.bb @@ -5,22 +5,26 @@ LICENSE = "GPL" PR = "r2" SRC_URI = "http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-${PV}.tar.gz \ - file://iconv.patch;patch=1 \ file://prefix-fix.patch;patch=1 \ file://add-sysfs-ldflags.patch;patch=1" +SRC_URI_append_uclibc = "file://iconv.patch;patch=1" + S = "${WORKDIR}/lm_sensors-${PV}" do_compile() { - oe_runmake LINUX=${STAGING_KERNEL_DIR} EXLDFLAGS="${LDFLAGS}" user PROG_EXTRA=sensors PREFIX=${prefix} + oe_runmake LINUX=${STAGING_KERNEL_DIR} EXLDFLAGS="${LDFLAGS}" user PROG_EXTRA=sensors } do_install() { oe_runmake user_install DESTDIR=${D} - # backward compatibility with older OE packages - mv ${D}${sbindir}/* ${D}${bindir} + install -d ${D}/.usr + mv ${D}/* ${D}/.usr + mv ${D}/.usr ${D}/usr + install -d ${D}${sysconfdir} + mv ${D}/usr/etc/sensors.conf ${D}${sysconfdir} # move manuals into proper place install -d ${D}${mandir} rm -rf ${D}${mandir}/* @@ -28,7 +32,7 @@ do_install() { # remove perl or bash scripts rm ${D}${bindir}/*.pl ${D}${bindir}/ddcmon - rm ${D}${bindir}/fancontrol ${D}${bindir}/pwmconfig ${D}${bindir}/sensors-detect + rm ${D}${sbindir}/fancontrol* ${D}${sbindir}/pwmconfig ${D}${sbindir}/sensors-detect rm ${D}${mandir}/man8/fancontrol.8 ${D}${mandir}/man8/pwmconfig.8 ${D}${mandir}/man8/sensors-detect.8 } -- cgit v1.2.3 From e307ea2a862bd308504b3f18fb688423b9a87215 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sun, 7 Oct 2007 18:06:42 +0000 Subject: x86 machines: added 'x86' MACHINE_FEATURE to limit amount of overrides needed when package need x86 special options - look at mplayer as example --- conf/machine/alix.conf | 2 +- conf/machine/epia.conf | 2 +- conf/machine/guinness.conf | 2 +- conf/machine/i586-generic.conf | 2 +- conf/machine/i686-generic.conf | 2 +- conf/machine/netvista.conf | 2 +- conf/machine/progear.conf | 2 +- conf/machine/qemux86.conf | 2 ++ conf/machine/wrap.conf | 2 +- conf/machine/x86-32-nocona.conf | 2 +- conf/machine/x86-prescott.conf | 2 +- conf/machine/x86.conf | 2 +- 12 files changed, 13 insertions(+), 11 deletions(-) diff --git a/conf/machine/alix.conf b/conf/machine/alix.conf index 29af29a3b8..3d83300963 100644 --- a/conf/machine/alix.conf +++ b/conf/machine/alix.conf @@ -15,7 +15,7 @@ OLDEST_KERNEL = "2.6.17" GLIBC_ADDONS = "nptl" GLIBC_EXTRA_OECONF = "--with-tls" -MACHINE_FEATURES = "kernel26 usbhost ext2 pci screen alsa acpi" +MACHINE_FEATURES = "kernel26 usbhost ext2 pci screen alsa acpi x86" require conf/machine/include/tune-geodelx.conf diff --git a/conf/machine/epia.conf b/conf/machine/epia.conf index 0750e4d646..69d5e66171 100644 --- a/conf/machine/epia.conf +++ b/conf/machine/epia.conf @@ -12,7 +12,7 @@ GLIBC_EXTRA_OECONF = "--with-tls" IMAGE_FSTYPES = "ext2.gz" -MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2" +MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2 x86" MACHINE_TASK_PROVIDER = "task-base" require conf/machine/include/tune-c3.inc diff --git a/conf/machine/guinness.conf b/conf/machine/guinness.conf index 626e755b1f..f17451556f 100644 --- a/conf/machine/guinness.conf +++ b/conf/machine/guinness.conf @@ -17,7 +17,7 @@ OLDEST_KERNEL = "2.6.17" GLIBC_ADDONS = "nptl" GLIBC_EXTRA_OECONF = "--with-tls" -MACHINE_FEATURES = "kernel26 usbhost ext2 pci acpi screen" +MACHINE_FEATURES = "kernel26 usbhost ext2 pci acpi screen x86" #require conf/machine/include/tune-athlonmp.inc diff --git a/conf/machine/i586-generic.conf b/conf/machine/i586-generic.conf index 0ef522441b..53e088da1c 100644 --- a/conf/machine/i586-generic.conf +++ b/conf/machine/i586-generic.conf @@ -19,7 +19,7 @@ GLIBC_EXTRA_OECONF = "--with-tls" IMAGE_FSTYPES = "ext2.gz" -MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2" +MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2 x86" MACHINE_EXTRA_RRECOMMENDS = " kernel-modules" MACHINE_TASK_PROVIDER = "task-base" diff --git a/conf/machine/i686-generic.conf b/conf/machine/i686-generic.conf index 8ff87553ba..b8e73f3085 100644 --- a/conf/machine/i686-generic.conf +++ b/conf/machine/i686-generic.conf @@ -18,7 +18,7 @@ GLIBC_EXTRA_OECONF = "--with-tls" IMAGE_FSTYPES = "ext2.gz" -MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2" +MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2 x86" MACHINE_EXTRA_RRECOMMENDS = " kernel-modules" MACHINE_TASK_PROVIDER = "task-base" diff --git a/conf/machine/netvista.conf b/conf/machine/netvista.conf index 8d6cd2d220..3ee97a447e 100644 --- a/conf/machine/netvista.conf +++ b/conf/machine/netvista.conf @@ -15,7 +15,7 @@ KERNEL_IMAGETYPE = "bzImage" # BOOTSTRAP_EXTRA_RDEPENDS = "kernel pciutils udev kernel-modules" MACHINE_EXTRA_RRECOMMENDS = " kernel-modules" -MACHINE_FEATURES = "kernel26 pci usbhost ext2 screen keyboard irda apm alsa" +MACHINE_FEATURES = "kernel26 pci usbhost ext2 screen keyboard irda apm alsa x86" ROOT_FLASH_SIZE = "64" GUI_MACHINE_CLASS = "bigscreen" diff --git a/conf/machine/progear.conf b/conf/machine/progear.conf index ffa7dad468..2a8c009b10 100644 --- a/conf/machine/progear.conf +++ b/conf/machine/progear.conf @@ -15,7 +15,7 @@ OLDEST_KERNEL = "2.6.17" GLIBC_ADDONS = "nptl" GLIBC_EXTRA_OECONF = "--with-tls" -MACHINE_FEATURES = "kernel26 usbhost ext2 pci pcmcia screen alsa irda acpi screen touchscreen" +MACHINE_FEATURES = "kernel26 usbhost ext2 pci pcmcia screen alsa irda acpi screen touchscreen x86" IMAGE_FSTYPES = "tar.gz" diff --git a/conf/machine/qemux86.conf b/conf/machine/qemux86.conf index 2378a9990e..fe811ba54e 100644 --- a/conf/machine/qemux86.conf +++ b/conf/machine/qemux86.conf @@ -7,6 +7,8 @@ PACKAGE_EXTRA_ARCHS = "x86" require conf/machine/include/qemu.inc +MACHINE_FEATURES += "x86" + KERNEL_IMAGETYPE = "bzImage" SERIAL_CONSOLE = "115200 ttyS0" diff --git a/conf/machine/wrap.conf b/conf/machine/wrap.conf index d73c80214c..92720043f2 100644 --- a/conf/machine/wrap.conf +++ b/conf/machine/wrap.conf @@ -22,7 +22,7 @@ USE_DEVFS = "0" IMAGE_FSTYPE ?= "tar.gz" # Things to include in the fs image -MACHINE_FEATURES = "kernel26 pci ext2" +MACHINE_FEATURES = "kernel26 pci ext2 x86" # The kernel and grub need to installed to boot from flash MACHINE_EXTRA_RDEPENDS = "kernel grub" diff --git a/conf/machine/x86-32-nocona.conf b/conf/machine/x86-32-nocona.conf index ad5badf84a..e52454ed52 100644 --- a/conf/machine/x86-32-nocona.conf +++ b/conf/machine/x86-32-nocona.conf @@ -17,7 +17,7 @@ GLIBC_EXTRA_OECONF = "--with-tls" IMAGE_FSTYPES = "ext2.gz" -MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2" +MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2 x86" MACHINE_EXTRA_RRECOMMENDS = " kernel-modules" MACHINE_TASK_PROVIDER = "task-base" diff --git a/conf/machine/x86-prescott.conf b/conf/machine/x86-prescott.conf index b4021a6496..bd96c387b6 100644 --- a/conf/machine/x86-prescott.conf +++ b/conf/machine/x86-prescott.conf @@ -16,7 +16,7 @@ GLIBC_EXTRA_OECONF = "--with-tls" IMAGE_FSTYPES = "ext2.gz" -MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2" +MACHINE_FEATURES = "kernel26 screen keyboard pci ushbost acpi ext2 x86" MACHINE_EXTRA_RRECOMMENDS = " kernel-modules" MACHINE_TASK_PROVIDER = "task-base" diff --git a/conf/machine/x86.conf b/conf/machine/x86.conf index 51757e950c..c35e7ad389 100644 --- a/conf/machine/x86.conf +++ b/conf/machine/x86.conf @@ -13,7 +13,7 @@ KERNEL_IMAGETYPE = "bzImage" # BOOTSTRAP_EXTRA_RDEPENDS = "kernel pciutils udev kernel-modules" MACHINE_EXTRA_RRECOMMENDS = " kernel-modules" -MACHINE_FEATURES = "kernel26 pci usbhost ext2 screen" +MACHINE_FEATURES = "kernel26 pci usbhost ext2 screen x86" udevdir = "/dev" OLDEST_KERNEL = "2.6.17" -- cgit v1.2.3 From e586b831d4c5c70b0e25c99f79c54bfe15360e12 Mon Sep 17 00:00:00 2001 From: Graeme Gregory Date: Sun, 7 Oct 2007 18:23:22 +0000 Subject: mplayer/mplayer_svn.bb : fix pxa_configure.patch to not disable imageon driver. --- packages/mplayer/files/pxa_configure.patch | 4 ++-- packages/mplayer/mplayer_svn.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mplayer/files/pxa_configure.patch b/packages/mplayer/files/pxa_configure.patch index 85530b77c5..94d41d13cc 100644 --- a/packages/mplayer/files/pxa_configure.patch +++ b/packages/mplayer/files/pxa_configure.patch @@ -25,11 +25,11 @@ Index: MPlayer-1.0rc1/configure +echocheck "PXA27x Overlay Support" +if test "$_pxa" = yes ; then -+ _def_imageon='#define HAVE_PXA 1' ++ _def_pxa='#define HAVE_PXA 1' + _vosrc="$_vosrc vo_pxa.c" + _vomodules="pxa $_vomodules" +else -+ _def_imageon='#undef HAVE_IMAGEON' ++ _def_pxa='#undef HAVE_IMAGEON' + _novomodules="pxa $_novomodules" +fi +echores "$_pxa" diff --git a/packages/mplayer/mplayer_svn.bb b/packages/mplayer/mplayer_svn.bb index 4d9c744e79..e481247970 100644 --- a/packages/mplayer/mplayer_svn.bb +++ b/packages/mplayer/mplayer_svn.bb @@ -40,7 +40,7 @@ RCONFLICTS_${PN} = "mplayer-atty" RREPLACES_${PN} = "mplayer-atty" PV = "0.0+1.0rc1+svnr${SRCREV}" -PR = "r4" +PR = "r5" DEFAULT_PREFERENCE = "-1" PARALLEL_MAKE = "" -- cgit v1.2.3 From e3a5b67ddac4e60d9d298e31b130406830b646fd Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Sun, 7 Oct 2007 18:26:48 +0000 Subject: linux 2.6.22: merge cm-x270 kernel (from compulab-pxa270 recipe) --- .../linux/compulab-pxa270-2.6.22/.mtn2git_empty | 0 .../0001-cm-x270-base2.patch | 2850 -------------------- .../0002-cm-x270-match-type.patch | 25 - .../compulab-pxa270-2.6.22/0003-cm-x270-ide.patch | 186 -- .../0004-cm-x270-it8152.patch | 496 ---- .../0005-cm-x270-pcmcia.patch | 228 -- .../compulab-pxa270-2.6.22/0006-ramdisk_load.patch | 80 - .../0007-mmcsd_large_cards-r0.patch | 36 - .../0008-cm-x270-nand-simplify-name.patch | 25 - .../compulab-pxa270-2.6.22/0009-cursor-fix.patch | 43 - packages/linux/compulab-pxa270-2.6.22/defconfig | 1234 --------- packages/linux/compulab-pxa270_2.6.22.bb | 67 - packages/linux/linux-2.6.22/.mtn2git_empty | 0 packages/linux/linux-2.6.22/cm-x270/.mtn2git_empty | 0 .../linux-2.6.22/cm-x270/0001-cm-x270-base2.patch | 2850 ++++++++++++++++++++ .../cm-x270/0002-cm-x270-match-type.patch | 25 + .../linux-2.6.22/cm-x270/0003-cm-x270-ide.patch | 186 ++ .../linux-2.6.22/cm-x270/0004-cm-x270-it8152.patch | 496 ++++ .../linux-2.6.22/cm-x270/0005-cm-x270-pcmcia.patch | 228 ++ .../linux-2.6.22/cm-x270/0006-ramdisk_load.patch | 80 + .../cm-x270/0007-mmcsd_large_cards-r0.patch | 36 + .../cm-x270/0008-cm-x270-nand-simplify-name.patch | 25 + .../linux-2.6.22/cm-x270/0009-cursor-fix.patch | 43 + packages/linux/linux-2.6.22/cm-x270/defconfig | 1234 +++++++++ packages/linux/linux_2.6.22.bb | 43 + 25 files changed, 5246 insertions(+), 5270 deletions(-) delete mode 100644 packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0002-cm-x270-match-type.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0003-cm-x270-ide.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0004-cm-x270-it8152.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0005-cm-x270-pcmcia.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0006-ramdisk_load.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0007-mmcsd_large_cards-r0.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0008-cm-x270-nand-simplify-name.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/0009-cursor-fix.patch delete mode 100644 packages/linux/compulab-pxa270-2.6.22/defconfig delete mode 100644 packages/linux/compulab-pxa270_2.6.22.bb create mode 100644 packages/linux/linux-2.6.22/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.22/cm-x270/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.22/cm-x270/0001-cm-x270-base2.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0002-cm-x270-match-type.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0003-cm-x270-ide.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0004-cm-x270-it8152.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0005-cm-x270-pcmcia.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0006-ramdisk_load.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0007-mmcsd_large_cards-r0.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0008-cm-x270-nand-simplify-name.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/0009-cursor-fix.patch create mode 100644 packages/linux/linux-2.6.22/cm-x270/defconfig diff --git a/packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty b/packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch b/packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch deleted file mode 100644 index 9a635c5cbc..0000000000 --- a/packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch +++ /dev/null @@ -1,2850 +0,0 @@ -From 0db989f536f29c343bb4e42dc0b34d892d86de60 Mon Sep 17 00:00:00 2001 -From: Cliff Brake -Date: Fri, 20 Jul 2007 18:55:59 -0400 -Subject: [PATCH] cm-x270-base2 - ---- - arch/arm/Kconfig | 8 +- - arch/arm/configs/cm_x270_defconfig | 1567 +++++++++++++++++++++++++++++++++++ - arch/arm/mach-pxa/Kconfig | 5 + - arch/arm/mach-pxa/Makefile | 7 + - arch/arm/mach-pxa/cm-x270.c | 821 ++++++++++++++++++ - drivers/leds/Kconfig | 6 + - drivers/leds/Makefile | 1 + - drivers/leds/leds-cm-x270.c | 126 +++ - drivers/net/Kconfig | 8 + - drivers/net/dm9000.c | 6 + - include/asm-arm/arch-pxa/cm-x270.h | 71 ++ - include/asm-arm/arch-pxa/hardware.h | 11 + - include/asm-arm/arch-pxa/irqs.h | 20 + - include/asm-arm/memory.h | 10 + - 14 files changed, 2666 insertions(+), 1 deletions(-) - create mode 100644 arch/arm/configs/cm_x270_defconfig - create mode 100644 arch/arm/mach-pxa/cm-x270.c - create mode 100644 drivers/leds/leds-cm-x270.c - create mode 100644 include/asm-arm/arch-pxa/cm-x270.h - -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 50d9f3e..dec0a27 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -519,7 +519,7 @@ config ISA_DMA_API - bool - - config PCI -- bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 -+ bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE - help - Find out whether you have a PCI motherboard. PCI is the name of a - bus system, i.e. the way the CPU talks to the other stuff inside -@@ -537,6 +537,12 @@ config PCI_HOST_VIA82C505 - depends on PCI && ARCH_SHARK - default y - -+config PCI_HOST_ITE8152 -+ bool -+ depends on PCI && MACH_ARMCORE -+ default y -+ select DMABOUNCE -+ - source "drivers/pci/Kconfig" - - source "drivers/pcmcia/Kconfig" -diff --git a/arch/arm/configs/cm_x270_defconfig b/arch/arm/configs/cm_x270_defconfig -new file mode 100644 -index 0000000..f728363 ---- /dev/null -+++ b/arch/arm/configs/cm_x270_defconfig -@@ -0,0 +1,1567 @@ -+# -+# Automatically generated make config: don't edit -+# Linux kernel version: 2.6.21-rc4 -+# Wed Apr 4 16:42:03 2007 -+# -+CONFIG_ARM=y -+CONFIG_SYS_SUPPORTS_APM_EMULATION=y -+CONFIG_GENERIC_GPIO=y -+CONFIG_GENERIC_TIME=y -+CONFIG_MMU=y -+# CONFIG_NO_IOPORT is not set -+CONFIG_GENERIC_HARDIRQS=y -+CONFIG_TRACE_IRQFLAGS_SUPPORT=y -+CONFIG_HARDIRQS_SW_RESEND=y -+CONFIG_GENERIC_IRQ_PROBE=y -+CONFIG_RWSEM_GENERIC_SPINLOCK=y -+# CONFIG_ARCH_HAS_ILOG2_U32 is not set -+# CONFIG_ARCH_HAS_ILOG2_U64 is not set -+CONFIG_GENERIC_HWEIGHT=y -+CONFIG_GENERIC_CALIBRATE_DELAY=y -+CONFIG_ZONE_DMA=y -+CONFIG_ARCH_MTD_XIP=y -+CONFIG_VECTORS_BASE=0xffff0000 -+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -+ -+# -+# Code maturity level options -+# -+CONFIG_EXPERIMENTAL=y -+CONFIG_BROKEN_ON_SMP=y -+CONFIG_INIT_ENV_ARG_LIMIT=32 -+ -+# -+# General setup -+# -+CONFIG_LOCALVERSION="" -+# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_SWAP=y -+CONFIG_SYSVIPC=y -+# CONFIG_IPC_NS is not set -+CONFIG_SYSVIPC_SYSCTL=y -+# CONFIG_POSIX_MQUEUE is not set -+# CONFIG_BSD_PROCESS_ACCT is not set -+# CONFIG_TASKSTATS is not set -+# CONFIG_UTS_NS is not set -+# CONFIG_AUDIT is not set -+CONFIG_IKCONFIG=y -+CONFIG_IKCONFIG_PROC=y -+CONFIG_SYSFS_DEPRECATED=y -+# CONFIG_RELAY is not set -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="" -+CONFIG_CC_OPTIMIZE_FOR_SIZE=y -+CONFIG_SYSCTL=y -+CONFIG_EMBEDDED=y -+CONFIG_UID16=y -+CONFIG_SYSCTL_SYSCALL=y -+CONFIG_KALLSYMS=y -+# CONFIG_KALLSYMS_ALL is not set -+# CONFIG_KALLSYMS_EXTRA_PASS is not set -+CONFIG_HOTPLUG=y -+CONFIG_PRINTK=y -+CONFIG_BUG=y -+CONFIG_ELF_CORE=y -+CONFIG_BASE_FULL=y -+CONFIG_FUTEX=y -+CONFIG_EPOLL=y -+CONFIG_SHMEM=y -+CONFIG_SLAB=y -+CONFIG_VM_EVENT_COUNTERS=y -+CONFIG_RT_MUTEXES=y -+# CONFIG_TINY_SHMEM is not set -+CONFIG_BASE_SMALL=0 -+# CONFIG_SLOB is not set -+ -+# -+# Loadable module support -+# -+CONFIG_MODULES=y -+CONFIG_MODULE_UNLOAD=y -+CONFIG_MODULE_FORCE_UNLOAD=y -+# CONFIG_MODVERSIONS is not set -+# CONFIG_MODULE_SRCVERSION_ALL is not set -+CONFIG_KMOD=y -+ -+# -+# Block layer -+# -+CONFIG_BLOCK=y -+# CONFIG_LBD is not set -+# CONFIG_BLK_DEV_IO_TRACE is not set -+# CONFIG_LSF is not set -+ -+# -+# IO Schedulers -+# -+CONFIG_IOSCHED_NOOP=y -+CONFIG_IOSCHED_AS=y -+CONFIG_IOSCHED_DEADLINE=y -+CONFIG_IOSCHED_CFQ=y -+CONFIG_DEFAULT_AS=y -+# CONFIG_DEFAULT_DEADLINE is not set -+# CONFIG_DEFAULT_CFQ is not set -+# CONFIG_DEFAULT_NOOP is not set -+CONFIG_DEFAULT_IOSCHED="anticipatory" -+ -+# -+# System Type -+# -+# CONFIG_ARCH_AAEC2000 is not set -+# CONFIG_ARCH_INTEGRATOR is not set -+# CONFIG_ARCH_REALVIEW is not set -+# CONFIG_ARCH_VERSATILE is not set -+# CONFIG_ARCH_AT91 is not set -+# CONFIG_ARCH_CLPS7500 is not set -+# CONFIG_ARCH_CLPS711X is not set -+# CONFIG_ARCH_CO285 is not set -+# CONFIG_ARCH_EBSA110 is not set -+# CONFIG_ARCH_EP93XX is not set -+# CONFIG_ARCH_FOOTBRIDGE is not set -+# CONFIG_ARCH_NETX is not set -+# CONFIG_ARCH_H720X is not set -+# CONFIG_ARCH_IMX is not set -+# CONFIG_ARCH_IOP32X is not set -+# CONFIG_ARCH_IOP33X is not set -+# CONFIG_ARCH_IOP13XX is not set -+# CONFIG_ARCH_IXP4XX is not set -+# CONFIG_ARCH_IXP2000 is not set -+# CONFIG_ARCH_IXP23XX is not set -+# CONFIG_ARCH_L7200 is not set -+# CONFIG_ARCH_NS9XXX is not set -+# CONFIG_ARCH_PNX4008 is not set -+CONFIG_ARCH_PXA=y -+# CONFIG_ARCH_RPC is not set -+# CONFIG_ARCH_SA1100 is not set -+# CONFIG_ARCH_S3C2410 is not set -+# CONFIG_ARCH_SHARK is not set -+# CONFIG_ARCH_LH7A40X is not set -+# CONFIG_ARCH_OMAP is not set -+CONFIG_DMABOUNCE=y -+ -+# -+# Intel PXA2xx Implementations -+# -+# CONFIG_ARCH_LUBBOCK is not set -+# CONFIG_MACH_LOGICPD_PXA270 is not set -+# CONFIG_MACH_MAINSTONE is not set -+# CONFIG_ARCH_PXA_IDP is not set -+# CONFIG_PXA_SHARPSL is not set -+# CONFIG_MACH_TRIZEPS4 is not set -+CONFIG_MACH_ARMCORE=y -+CONFIG_PXA27x=y -+ -+# -+# Processor Type -+# -+CONFIG_CPU_32=y -+CONFIG_CPU_XSCALE=y -+CONFIG_CPU_32v5=y -+CONFIG_CPU_ABRT_EV5T=y -+CONFIG_CPU_CACHE_VIVT=y -+CONFIG_CPU_TLB_V4WBI=y -+CONFIG_CPU_CP15=y -+CONFIG_CPU_CP15_MMU=y -+ -+# -+# Processor Features -+# -+CONFIG_ARM_THUMB=y -+# CONFIG_CPU_DCACHE_DISABLE is not set -+# CONFIG_OUTER_CACHE is not set -+CONFIG_IWMMXT=y -+CONFIG_XSCALE_PMU=y -+ -+# -+# Bus support -+# -+CONFIG_PCI=y -+CONFIG_PCI_HOST_ITE8152=y -+# CONFIG_PCI_DEBUG is not set -+ -+# -+# PCCARD (PCMCIA/CardBus) support -+# -+CONFIG_PCCARD=y -+# CONFIG_PCMCIA_DEBUG is not set -+CONFIG_PCMCIA=m -+# CONFIG_PCMCIA_LOAD_CIS is not set -+CONFIG_PCMCIA_IOCTL=y -+CONFIG_CARDBUS=y -+ -+# -+# PC-card bridges -+# -+# CONFIG_YENTA is not set -+# CONFIG_PD6729 is not set -+# CONFIG_I82092 is not set -+CONFIG_PCMCIA_PXA2XX=m -+ -+# -+# Kernel Features -+# -+# CONFIG_PREEMPT is not set -+# CONFIG_NO_IDLE_HZ is not set -+CONFIG_HZ=100 -+# CONFIG_AEABI is not set -+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -+CONFIG_SELECT_MEMORY_MODEL=y -+CONFIG_FLATMEM_MANUAL=y -+# CONFIG_DISCONTIGMEM_MANUAL is not set -+# CONFIG_SPARSEMEM_MANUAL is not set -+CONFIG_FLATMEM=y -+CONFIG_FLAT_NODE_MEM_MAP=y -+# CONFIG_SPARSEMEM_STATIC is not set -+CONFIG_SPLIT_PTLOCK_CPUS=4096 -+# CONFIG_RESOURCES_64BIT is not set -+CONFIG_ZONE_DMA_FLAG=1 -+CONFIG_ALIGNMENT_TRAP=y -+ -+# -+# Boot options -+# -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CMDLINE="" -+# CONFIG_XIP_KERNEL is not set -+# CONFIG_KEXEC is not set -+ -+# -+# Floating point emulation -+# -+ -+# -+# At least one emulation must be selected -+# -+CONFIG_FPE_NWFPE=y -+# CONFIG_FPE_NWFPE_XP is not set -+# CONFIG_FPE_FASTFPE is not set -+ -+# -+# Userspace binary formats -+# -+CONFIG_BINFMT_ELF=y -+# CONFIG_BINFMT_AOUT is not set -+# CONFIG_BINFMT_MISC is not set -+# CONFIG_ARTHUR is not set -+ -+# -+# Power management options -+# -+CONFIG_PM=y -+# CONFIG_PM_LEGACY is not set -+# CONFIG_PM_DEBUG is not set -+# CONFIG_PM_SYSFS_DEPRECATED is not set -+# CONFIG_APM_EMULATION is not set -+ -+# -+# Networking -+# -+CONFIG_NET=y -+ -+# -+# Networking options -+# -+# CONFIG_NETDEBUG is not set -+CONFIG_PACKET=y -+# CONFIG_PACKET_MMAP is not set -+CONFIG_UNIX=y -+CONFIG_XFRM=y -+# CONFIG_XFRM_USER is not set -+# CONFIG_XFRM_SUB_POLICY is not set -+# CONFIG_XFRM_MIGRATE is not set -+# CONFIG_NET_KEY is not set -+CONFIG_INET=y -+# CONFIG_IP_MULTICAST is not set -+# CONFIG_IP_ADVANCED_ROUTER is not set -+CONFIG_IP_FIB_HASH=y -+CONFIG_IP_PNP=y -+CONFIG_IP_PNP_DHCP=y -+CONFIG_IP_PNP_BOOTP=y -+# CONFIG_IP_PNP_RARP is not set -+# CONFIG_NET_IPIP is not set -+# CONFIG_NET_IPGRE is not set -+# CONFIG_ARPD is not set -+# CONFIG_SYN_COOKIES is not set -+# CONFIG_INET_AH is not set -+# CONFIG_INET_ESP is not set -+# CONFIG_INET_IPCOMP is not set -+# CONFIG_INET_XFRM_TUNNEL is not set -+# CONFIG_INET_TUNNEL is not set -+CONFIG_INET_XFRM_MODE_TRANSPORT=y -+CONFIG_INET_XFRM_MODE_TUNNEL=y -+CONFIG_INET_XFRM_MODE_BEET=y -+CONFIG_INET_DIAG=y -+CONFIG_INET_TCP_DIAG=y -+# CONFIG_TCP_CONG_ADVANCED is not set -+CONFIG_TCP_CONG_CUBIC=y -+CONFIG_DEFAULT_TCP_CONG="cubic" -+# CONFIG_TCP_MD5SIG is not set -+# CONFIG_IPV6 is not set -+# CONFIG_INET6_XFRM_TUNNEL is not set -+# CONFIG_INET6_TUNNEL is not set -+# CONFIG_NETWORK_SECMARK is not set -+# CONFIG_NETFILTER is not set -+ -+# -+# DCCP Configuration (EXPERIMENTAL) -+# -+# CONFIG_IP_DCCP is not set -+ -+# -+# SCTP Configuration (EXPERIMENTAL) -+# -+# CONFIG_IP_SCTP is not set -+ -+# -+# TIPC Configuration (EXPERIMENTAL) -+# -+# CONFIG_TIPC is not set -+# CONFIG_ATM is not set -+# CONFIG_BRIDGE is not set -+# CONFIG_VLAN_8021Q is not set -+# CONFIG_DECNET is not set -+# CONFIG_LLC2 is not set -+# CONFIG_IPX is not set -+# CONFIG_ATALK is not set -+# CONFIG_X25 is not set -+# CONFIG_LAPB is not set -+# CONFIG_ECONET is not set -+# CONFIG_WAN_ROUTER is not set -+ -+# -+# QoS and/or fair queueing -+# -+# CONFIG_NET_SCHED is not set -+ -+# -+# Network testing -+# -+# CONFIG_NET_PKTGEN is not set -+# CONFIG_HAMRADIO is not set -+# CONFIG_IRDA is not set -+# CONFIG_BT is not set -+CONFIG_IEEE80211=m -+# CONFIG_IEEE80211_DEBUG is not set -+CONFIG_IEEE80211_CRYPT_WEP=m -+CONFIG_IEEE80211_CRYPT_CCMP=m -+# CONFIG_IEEE80211_CRYPT_TKIP is not set -+# CONFIG_IEEE80211_SOFTMAC is not set -+CONFIG_WIRELESS_EXT=y -+ -+# -+# Device Drivers -+# -+ -+# -+# Generic Driver Options -+# -+CONFIG_STANDALONE=y -+CONFIG_PREVENT_FIRMWARE_BUILD=y -+CONFIG_FW_LOADER=y -+# CONFIG_DEBUG_DRIVER is not set -+# CONFIG_DEBUG_DEVRES is not set -+# CONFIG_SYS_HYPERVISOR is not set -+ -+# -+# Connector - unified userspace <-> kernelspace linker -+# -+# CONFIG_CONNECTOR is not set -+ -+# -+# Memory Technology Devices (MTD) -+# -+CONFIG_MTD=m -+# CONFIG_MTD_DEBUG is not set -+# CONFIG_MTD_CONCAT is not set -+CONFIG_MTD_PARTITIONS=y -+# CONFIG_MTD_REDBOOT_PARTS is not set -+# CONFIG_MTD_AFS_PARTS is not set -+ -+# -+# User Modules And Translation Layers -+# -+CONFIG_MTD_CHAR=m -+CONFIG_MTD_BLKDEVS=m -+CONFIG_MTD_BLOCK=m -+# CONFIG_MTD_BLOCK_RO is not set -+# CONFIG_FTL is not set -+# CONFIG_NFTL is not set -+# CONFIG_INFTL is not set -+# CONFIG_RFD_FTL is not set -+# CONFIG_SSFDC is not set -+ -+# -+# RAM/ROM/Flash chip drivers -+# -+# CONFIG_MTD_CFI is not set -+# CONFIG_MTD_JEDECPROBE is not set -+CONFIG_MTD_MAP_BANK_WIDTH_1=y -+CONFIG_MTD_MAP_BANK_WIDTH_2=y -+CONFIG_MTD_MAP_BANK_WIDTH_4=y -+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -+CONFIG_MTD_CFI_I1=y -+CONFIG_MTD_CFI_I2=y -+# CONFIG_MTD_CFI_I4 is not set -+# CONFIG_MTD_CFI_I8 is not set -+# CONFIG_MTD_RAM is not set -+# CONFIG_MTD_ROM is not set -+# CONFIG_MTD_ABSENT is not set -+# CONFIG_MTD_OBSOLETE_CHIPS is not set -+ -+# -+# Mapping drivers for chip access -+# -+# CONFIG_MTD_COMPLEX_MAPPINGS is not set -+# CONFIG_MTD_SHARP_SL is not set -+# CONFIG_MTD_PLATRAM is not set -+ -+# -+# Self-contained MTD device drivers -+# -+# CONFIG_MTD_PMC551 is not set -+# CONFIG_MTD_SLRAM is not set -+# CONFIG_MTD_PHRAM is not set -+# CONFIG_MTD_MTDRAM is not set -+# CONFIG_MTD_BLOCK2MTD is not set -+ -+# -+# Disk-On-Chip Device Drivers -+# -+# CONFIG_MTD_DOC2000 is not set -+# CONFIG_MTD_DOC2001 is not set -+# CONFIG_MTD_DOC2001PLUS is not set -+ -+# -+# NAND Flash Device Drivers -+# -+CONFIG_MTD_NAND=m -+# CONFIG_MTD_NAND_VERIFY_WRITE is not set -+# CONFIG_MTD_NAND_ECC_SMC is not set -+# CONFIG_MTD_NAND_H1900 is not set -+CONFIG_MTD_NAND_IDS=m -+# CONFIG_MTD_NAND_DISKONCHIP is not set -+# CONFIG_MTD_NAND_SHARPSL is not set -+# CONFIG_MTD_NAND_CAFE is not set -+CONFIG_MTD_NAND_CM_X270=m -+# CONFIG_MTD_NAND_NANDSIM is not set -+ -+# -+# OneNAND Flash Device Drivers -+# -+# CONFIG_MTD_ONENAND is not set -+ -+# -+# Parallel port support -+# -+# CONFIG_PARPORT is not set -+ -+# -+# Plug and Play support -+# -+# CONFIG_PNPACPI is not set -+ -+# -+# Block devices -+# -+# CONFIG_BLK_CPQ_DA is not set -+# CONFIG_BLK_CPQ_CISS_DA is not set -+# CONFIG_BLK_DEV_DAC960 is not set -+# CONFIG_BLK_DEV_UMEM is not set -+# CONFIG_BLK_DEV_COW_COMMON is not set -+CONFIG_BLK_DEV_LOOP=y -+# CONFIG_BLK_DEV_CRYPTOLOOP is not set -+# CONFIG_BLK_DEV_NBD is not set -+# CONFIG_BLK_DEV_SX8 is not set -+# CONFIG_BLK_DEV_UB is not set -+CONFIG_BLK_DEV_RAM=y -+CONFIG_BLK_DEV_RAM_COUNT=16 -+CONFIG_BLK_DEV_RAM_SIZE=12000 -+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -+# CONFIG_CDROM_PKTCDVD is not set -+# CONFIG_ATA_OVER_ETH is not set -+ -+# -+# ATA/ATAPI/MFM/RLL support -+# -+CONFIG_IDE=m -+CONFIG_IDE_MAX_HWIFS=4 -+CONFIG_BLK_DEV_IDE=m -+ -+# -+# Please see Documentation/ide.txt for help/info on IDE drives -+# -+# CONFIG_BLK_DEV_IDE_SATA is not set -+CONFIG_BLK_DEV_IDEDISK=m -+# CONFIG_IDEDISK_MULTI_MODE is not set -+CONFIG_BLK_DEV_IDECS=m -+# CONFIG_BLK_DEV_DELKIN is not set -+CONFIG_BLK_DEV_IDECD=m -+# CONFIG_BLK_DEV_IDETAPE is not set -+# CONFIG_BLK_DEV_IDEFLOPPY is not set -+# CONFIG_BLK_DEV_IDESCSI is not set -+# CONFIG_IDE_TASK_IOCTL is not set -+ -+# -+# IDE chipset support/bugfixes -+# -+# CONFIG_IDE_GENERIC is not set -+# CONFIG_BLK_DEV_IDEPCI is not set -+# CONFIG_IDE_ARM is not set -+CONFIG_BLK_DEV_IDE_CM_X270=m -+# CONFIG_BLK_DEV_IDEDMA is not set -+# CONFIG_BLK_DEV_HD is not set -+ -+# -+# SCSI device support -+# -+# CONFIG_RAID_ATTRS is not set -+CONFIG_SCSI=y -+# CONFIG_SCSI_TGT is not set -+# CONFIG_SCSI_NETLINK is not set -+# CONFIG_SCSI_PROC_FS is not set -+ -+# -+# SCSI support type (disk, tape, CD-ROM) -+# -+CONFIG_BLK_DEV_SD=y -+# CONFIG_CHR_DEV_ST is not set -+# CONFIG_CHR_DEV_OSST is not set -+# CONFIG_BLK_DEV_SR is not set -+# CONFIG_CHR_DEV_SG is not set -+# CONFIG_CHR_DEV_SCH is not set -+ -+# -+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -+# -+# CONFIG_SCSI_MULTI_LUN is not set -+# CONFIG_SCSI_CONSTANTS is not set -+# CONFIG_SCSI_LOGGING is not set -+# CONFIG_SCSI_SCAN_ASYNC is not set -+ -+# -+# SCSI Transports -+# -+# CONFIG_SCSI_SPI_ATTRS is not set -+# CONFIG_SCSI_FC_ATTRS is not set -+# CONFIG_SCSI_ISCSI_ATTRS is not set -+# CONFIG_SCSI_SAS_ATTRS is not set -+# CONFIG_SCSI_SAS_LIBSAS is not set -+ -+# -+# SCSI low-level drivers -+# -+# CONFIG_ISCSI_TCP is not set -+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -+# CONFIG_SCSI_3W_9XXX is not set -+# CONFIG_SCSI_ACARD is not set -+# CONFIG_SCSI_AACRAID is not set -+# CONFIG_SCSI_AIC7XXX is not set -+# CONFIG_SCSI_AIC7XXX_OLD is not set -+# CONFIG_SCSI_AIC79XX is not set -+# CONFIG_SCSI_AIC94XX is not set -+# CONFIG_SCSI_DPT_I2O is not set -+# CONFIG_SCSI_ARCMSR is not set -+# CONFIG_MEGARAID_NEWGEN is not set -+# CONFIG_MEGARAID_LEGACY is not set -+# CONFIG_MEGARAID_SAS is not set -+# CONFIG_SCSI_HPTIOP is not set -+# CONFIG_SCSI_DMX3191D is not set -+# CONFIG_SCSI_FUTURE_DOMAIN is not set -+# CONFIG_SCSI_IPS is not set -+# CONFIG_SCSI_INITIO is not set -+# CONFIG_SCSI_INIA100 is not set -+# CONFIG_SCSI_STEX is not set -+# CONFIG_SCSI_SYM53C8XX_2 is not set -+# CONFIG_SCSI_QLOGIC_1280 is not set -+# CONFIG_SCSI_QLA_FC is not set -+# CONFIG_SCSI_QLA_ISCSI is not set -+# CONFIG_SCSI_LPFC is not set -+# CONFIG_SCSI_DC395x is not set -+# CONFIG_SCSI_DC390T is not set -+# CONFIG_SCSI_NSP32 is not set -+# CONFIG_SCSI_DEBUG is not set -+# CONFIG_SCSI_SRP is not set -+ -+# -+# PCMCIA SCSI adapter support -+# -+# CONFIG_PCMCIA_AHA152X is not set -+# CONFIG_PCMCIA_FDOMAIN is not set -+# CONFIG_PCMCIA_NINJA_SCSI is not set -+# CONFIG_PCMCIA_QLOGIC is not set -+# CONFIG_PCMCIA_SYM53C500 is not set -+ -+# -+# Serial ATA (prod) and Parallel ATA (experimental) drivers -+# -+# CONFIG_ATA is not set -+ -+# -+# Multi-device support (RAID and LVM) -+# -+# CONFIG_MD is not set -+ -+# -+# Fusion MPT device support -+# -+# CONFIG_FUSION is not set -+# CONFIG_FUSION_SPI is not set -+# CONFIG_FUSION_FC is not set -+# CONFIG_FUSION_SAS is not set -+ -+# -+# IEEE 1394 (FireWire) support -+# -+# CONFIG_IEEE1394 is not set -+ -+# -+# I2O device support -+# -+# CONFIG_I2O is not set -+ -+# -+# Network device support -+# -+CONFIG_NETDEVICES=y -+# CONFIG_DUMMY is not set -+# CONFIG_BONDING is not set -+# CONFIG_EQUALIZER is not set -+# CONFIG_TUN is not set -+ -+# -+# ARCnet devices -+# -+# CONFIG_ARCNET is not set -+ -+# -+# PHY device support -+# -+# CONFIG_PHYLIB is not set -+ -+# -+# Ethernet (10 or 100Mbit) -+# -+CONFIG_NET_ETHERNET=y -+CONFIG_MII=y -+# CONFIG_HAPPYMEAL is not set -+# CONFIG_SUNGEM is not set -+# CONFIG_CASSINI is not set -+# CONFIG_NET_VENDOR_3COM is not set -+# CONFIG_SMC91X is not set -+CONFIG_DM9000=y -+CONFIG_DM9000_NOEPROM=y -+# CONFIG_SMC911X is not set -+ -+# -+# Tulip family network device support -+# -+# CONFIG_NET_TULIP is not set -+# CONFIG_HP100 is not set -+CONFIG_NET_PCI=y -+# CONFIG_PCNET32 is not set -+# CONFIG_AMD8111_ETH is not set -+# CONFIG_ADAPTEC_STARFIRE is not set -+# CONFIG_B44 is not set -+# CONFIG_FORCEDETH is not set -+# CONFIG_DGRS is not set -+# CONFIG_EEPRO100 is not set -+# CONFIG_E100 is not set -+# CONFIG_FEALNX is not set -+# CONFIG_NATSEMI is not set -+# CONFIG_NE2K_PCI is not set -+# CONFIG_8139CP is not set -+CONFIG_8139TOO=m -+# CONFIG_8139TOO_PIO is not set -+# CONFIG_8139TOO_TUNE_TWISTER is not set -+# CONFIG_8139TOO_8129 is not set -+# CONFIG_8139_OLD_RX_RESET is not set -+# CONFIG_SIS900 is not set -+# CONFIG_EPIC100 is not set -+# CONFIG_SUNDANCE is not set -+# CONFIG_TLAN is not set -+# CONFIG_VIA_RHINE is not set -+# CONFIG_SC92031 is not set -+ -+# -+# Ethernet (1000 Mbit) -+# -+# CONFIG_ACENIC is not set -+# CONFIG_DL2K is not set -+# CONFIG_E1000 is not set -+# CONFIG_NS83820 is not set -+# CONFIG_HAMACHI is not set -+# CONFIG_YELLOWFIN is not set -+# CONFIG_R8169 is not set -+# CONFIG_SIS190 is not set -+# CONFIG_SKGE is not set -+# CONFIG_SKY2 is not set -+# CONFIG_SK98LIN is not set -+# CONFIG_VIA_VELOCITY is not set -+# CONFIG_TIGON3 is not set -+# CONFIG_BNX2 is not set -+# CONFIG_QLA3XXX is not set -+# CONFIG_ATL1 is not set -+ -+# -+# Ethernet (10000 Mbit) -+# -+# CONFIG_CHELSIO_T1 is not set -+# CONFIG_CHELSIO_T3 is not set -+# CONFIG_IXGB is not set -+# CONFIG_S2IO is not set -+# CONFIG_MYRI10GE is not set -+# CONFIG_NETXEN_NIC is not set -+ -+# -+# Token Ring devices -+# -+# CONFIG_TR is not set -+ -+# -+# Wireless LAN (non-hamradio) -+# -+CONFIG_NET_RADIO=y -+# CONFIG_NET_WIRELESS_RTNETLINK is not set -+ -+# -+# Obsolete Wireless cards support (pre-802.11) -+# -+# CONFIG_STRIP is not set -+# CONFIG_PCMCIA_WAVELAN is not set -+# CONFIG_PCMCIA_NETWAVE is not set -+ -+# -+# Wireless 802.11 Frequency Hopping cards support -+# -+# CONFIG_PCMCIA_RAYCS is not set -+ -+# -+# Wireless 802.11b ISA/PCI cards support -+# -+# CONFIG_IPW2100 is not set -+# CONFIG_IPW2200 is not set -+# CONFIG_HERMES is not set -+# CONFIG_ATMEL is not set -+ -+# -+# Wireless 802.11b Pcmcia/Cardbus cards support -+# -+# CONFIG_AIRO_CS is not set -+# CONFIG_PCMCIA_WL3501 is not set -+ -+# -+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support -+# -+# CONFIG_PRISM54 is not set -+# CONFIG_USB_ZD1201 is not set -+# CONFIG_HOSTAP is not set -+CONFIG_NET_WIRELESS=y -+ -+# -+# PCMCIA network device support -+# -+CONFIG_NET_PCMCIA=y -+# CONFIG_PCMCIA_3C589 is not set -+# CONFIG_PCMCIA_3C574 is not set -+# CONFIG_PCMCIA_FMVJ18X is not set -+CONFIG_PCMCIA_PCNET=m -+# CONFIG_PCMCIA_NMCLAN is not set -+# CONFIG_PCMCIA_SMC91C92 is not set -+# CONFIG_PCMCIA_XIRC2PS is not set -+# CONFIG_PCMCIA_AXNET is not set -+ -+# -+# Wan interfaces -+# -+# CONFIG_WAN is not set -+# CONFIG_FDDI is not set -+# CONFIG_HIPPI is not set -+# CONFIG_PPP is not set -+# CONFIG_SLIP is not set -+# CONFIG_NET_FC is not set -+# CONFIG_SHAPER is not set -+# CONFIG_NETCONSOLE is not set -+# CONFIG_NETPOLL is not set -+# CONFIG_NET_POLL_CONTROLLER is not set -+ -+# -+# ISDN subsystem -+# -+# CONFIG_ISDN is not set -+ -+# -+# Input device support -+# -+CONFIG_INPUT=y -+# CONFIG_INPUT_FF_MEMLESS is not set -+ -+# -+# Userland interfaces -+# -+# CONFIG_INPUT_MOUSEDEV is not set -+# CONFIG_INPUT_JOYDEV is not set -+# CONFIG_INPUT_TSDEV is not set -+CONFIG_INPUT_EVDEV=y -+# CONFIG_INPUT_EVBUG is not set -+ -+# -+# Input Device Drivers -+# -+# CONFIG_INPUT_KEYBOARD is not set -+# CONFIG_INPUT_MOUSE is not set -+# CONFIG_INPUT_JOYSTICK is not set -+CONFIG_INPUT_TOUCHSCREEN=y -+# CONFIG_TOUCHSCREEN_GUNZE is not set -+# CONFIG_TOUCHSCREEN_ELO is not set -+# CONFIG_TOUCHSCREEN_MTOUCH is not set -+# CONFIG_TOUCHSCREEN_MK712 is not set -+# CONFIG_TOUCHSCREEN_PENMOUNT is not set -+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -+CONFIG_TOUCHSCREEN_UCB1400=m -+# CONFIG_INPUT_MISC is not set -+ -+# -+# Hardware I/O ports -+# -+# CONFIG_SERIO is not set -+# CONFIG_GAMEPORT is not set -+ -+# -+# Character devices -+# -+CONFIG_VT=y -+CONFIG_VT_CONSOLE=y -+CONFIG_HW_CONSOLE=y -+# CONFIG_VT_HW_CONSOLE_BINDING is not set -+# CONFIG_SERIAL_NONSTANDARD is not set -+ -+# -+# Serial drivers -+# -+# CONFIG_SERIAL_8250 is not set -+ -+# -+# Non-8250 serial port support -+# -+CONFIG_SERIAL_PXA=y -+CONFIG_SERIAL_PXA_CONSOLE=y -+CONFIG_SERIAL_CORE=y -+CONFIG_SERIAL_CORE_CONSOLE=y -+# CONFIG_SERIAL_JSM is not set -+CONFIG_UNIX98_PTYS=y -+CONFIG_LEGACY_PTYS=y -+CONFIG_LEGACY_PTY_COUNT=256 -+ -+# -+# IPMI -+# -+# CONFIG_IPMI_HANDLER is not set -+ -+# -+# Watchdog Cards -+# -+# CONFIG_WATCHDOG is not set -+CONFIG_HW_RANDOM=m -+# CONFIG_NVRAM is not set -+# CONFIG_DTLK is not set -+# CONFIG_R3964 is not set -+# CONFIG_APPLICOM is not set -+# CONFIG_DRM is not set -+ -+# -+# PCMCIA character devices -+# -+# CONFIG_SYNCLINK_CS is not set -+# CONFIG_CARDMAN_4000 is not set -+# CONFIG_CARDMAN_4040 is not set -+# CONFIG_RAW_DRIVER is not set -+ -+# -+# TPM devices -+# -+# CONFIG_TCG_TPM is not set -+ -+# -+# I2C support -+# -+# CONFIG_I2C is not set -+ -+# -+# SPI support -+# -+# CONFIG_SPI is not set -+# CONFIG_SPI_MASTER is not set -+ -+# -+# Dallas's 1-wire bus -+# -+# CONFIG_W1 is not set -+ -+# -+# Hardware Monitoring support -+# -+# CONFIG_HWMON is not set -+# CONFIG_HWMON_VID is not set -+ -+# -+# Misc devices -+# -+# CONFIG_SGI_IOC4 is not set -+# CONFIG_TIFM_CORE is not set -+ -+# -+# Multifunction device drivers -+# -+# CONFIG_MFD_SM501 is not set -+ -+# -+# LED devices -+# -+CONFIG_NEW_LEDS=y -+CONFIG_LEDS_CLASS=y -+ -+# -+# LED drivers -+# -+CONFIG_LEDS_CM_X270=y -+ -+# -+# LED Triggers -+# -+CONFIG_LEDS_TRIGGERS=y -+# CONFIG_LEDS_TRIGGER_TIMER is not set -+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set -+CONFIG_LEDS_TRIGGER_HEARTBEAT=y -+ -+# -+# Multimedia devices -+# -+# CONFIG_VIDEO_DEV is not set -+ -+# -+# Digital Video Broadcasting Devices -+# -+# CONFIG_DVB is not set -+# CONFIG_USB_DABUSB is not set -+ -+# -+# Graphics support -+# -+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set -+CONFIG_FB=y -+# CONFIG_FIRMWARE_EDID is not set -+# CONFIG_FB_DDC is not set -+CONFIG_FB_CFB_FILLRECT=y -+CONFIG_FB_CFB_COPYAREA=y -+CONFIG_FB_CFB_IMAGEBLIT=y -+# CONFIG_FB_SVGALIB is not set -+# CONFIG_FB_MACMODES is not set -+# CONFIG_FB_BACKLIGHT is not set -+# CONFIG_FB_MODE_HELPERS is not set -+# CONFIG_FB_TILEBLITTING is not set -+ -+# -+# Frambuffer hardware drivers -+# -+# CONFIG_FB_CIRRUS is not set -+# CONFIG_FB_PM2 is not set -+# CONFIG_FB_CYBER2000 is not set -+# CONFIG_FB_ASILIANT is not set -+# CONFIG_FB_IMSTT is not set -+# CONFIG_FB_S1D13XXX is not set -+# CONFIG_FB_NVIDIA is not set -+# CONFIG_FB_RIVA is not set -+# CONFIG_FB_MATROX is not set -+# CONFIG_FB_RADEON is not set -+# CONFIG_FB_ATY128 is not set -+# CONFIG_FB_ATY is not set -+# CONFIG_FB_S3 is not set -+# CONFIG_FB_SAVAGE is not set -+# CONFIG_FB_SIS is not set -+# CONFIG_FB_NEOMAGIC is not set -+# CONFIG_FB_KYRO is not set -+# CONFIG_FB_3DFX is not set -+# CONFIG_FB_VOODOO1 is not set -+# CONFIG_FB_TRIDENT is not set -+CONFIG_FB_PXA=y -+# CONFIG_FB_PXA_PARAMETERS is not set -+CONFIG_FB_MBX=m -+# CONFIG_FB_VIRTUAL is not set -+ -+# -+# Console display driver support -+# -+# CONFIG_VGA_CONSOLE is not set -+CONFIG_DUMMY_CONSOLE=y -+CONFIG_FRAMEBUFFER_CONSOLE=y -+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -+# CONFIG_FONTS is not set -+CONFIG_FONT_8x8=y -+CONFIG_FONT_8x16=y -+ -+# -+# Logo configuration -+# -+CONFIG_LOGO=y -+CONFIG_LOGO_LINUX_MONO=y -+CONFIG_LOGO_LINUX_VGA16=y -+CONFIG_LOGO_LINUX_CLUT224=y -+ -+# -+# Sound -+# -+CONFIG_SOUND=m -+ -+# -+# Advanced Linux Sound Architecture -+# -+CONFIG_SND=m -+CONFIG_SND_TIMER=m -+CONFIG_SND_PCM=m -+# CONFIG_SND_SEQUENCER is not set -+CONFIG_SND_OSSEMUL=y -+CONFIG_SND_MIXER_OSS=m -+CONFIG_SND_PCM_OSS=m -+CONFIG_SND_PCM_OSS_PLUGINS=y -+# CONFIG_SND_DYNAMIC_MINORS is not set -+CONFIG_SND_SUPPORT_OLD_API=y -+CONFIG_SND_VERBOSE_PROCFS=y -+# CONFIG_SND_VERBOSE_PRINTK is not set -+# CONFIG_SND_DEBUG is not set -+ -+# -+# Generic devices -+# -+CONFIG_SND_AC97_CODEC=m -+# CONFIG_SND_DUMMY is not set -+# CONFIG_SND_MTPAV is not set -+# CONFIG_SND_SERIAL_U16550 is not set -+# CONFIG_SND_MPU401 is not set -+ -+# -+# PCI devices -+# -+# CONFIG_SND_AD1889 is not set -+# CONFIG_SND_ALS300 is not set -+# CONFIG_SND_ALI5451 is not set -+# CONFIG_SND_ATIIXP is not set -+# CONFIG_SND_ATIIXP_MODEM is not set -+# CONFIG_SND_AU8810 is not set -+# CONFIG_SND_AU8820 is not set -+# CONFIG_SND_AU8830 is not set -+# CONFIG_SND_AZT3328 is not set -+# CONFIG_SND_BT87X is not set -+# CONFIG_SND_CA0106 is not set -+# CONFIG_SND_CMIPCI is not set -+# CONFIG_SND_CS4281 is not set -+# CONFIG_SND_CS46XX is not set -+# CONFIG_SND_DARLA20 is not set -+# CONFIG_SND_GINA20 is not set -+# CONFIG_SND_LAYLA20 is not set -+# CONFIG_SND_DARLA24 is not set -+# CONFIG_SND_GINA24 is not set -+# CONFIG_SND_LAYLA24 is not set -+# CONFIG_SND_MONA is not set -+# CONFIG_SND_MIA is not set -+# CONFIG_SND_ECHO3G is not set -+# CONFIG_SND_INDIGO is not set -+# CONFIG_SND_INDIGOIO is not set -+# CONFIG_SND_INDIGODJ is not set -+# CONFIG_SND_EMU10K1 is not set -+# CONFIG_SND_EMU10K1X is not set -+# CONFIG_SND_ENS1370 is not set -+# CONFIG_SND_ENS1371 is not set -+# CONFIG_SND_ES1938 is not set -+# CONFIG_SND_ES1968 is not set -+# CONFIG_SND_FM801 is not set -+# CONFIG_SND_HDA_INTEL is not set -+# CONFIG_SND_HDSP is not set -+# CONFIG_SND_HDSPM is not set -+# CONFIG_SND_ICE1712 is not set -+# CONFIG_SND_ICE1724 is not set -+# CONFIG_SND_INTEL8X0 is not set -+# CONFIG_SND_INTEL8X0M is not set -+# CONFIG_SND_KORG1212 is not set -+# CONFIG_SND_MAESTRO3 is not set -+# CONFIG_SND_MIXART is not set -+# CONFIG_SND_NM256 is not set -+# CONFIG_SND_PCXHR is not set -+# CONFIG_SND_RIPTIDE is not set -+# CONFIG_SND_RME32 is not set -+# CONFIG_SND_RME96 is not set -+# CONFIG_SND_RME9652 is not set -+# CONFIG_SND_SONICVIBES is not set -+# CONFIG_SND_TRIDENT is not set -+# CONFIG_SND_VIA82XX is not set -+# CONFIG_SND_VIA82XX_MODEM is not set -+# CONFIG_SND_VX222 is not set -+# CONFIG_SND_YMFPCI is not set -+# CONFIG_SND_AC97_POWER_SAVE is not set -+ -+# -+# ALSA ARM devices -+# -+CONFIG_SND_PXA2XX_PCM=m -+CONFIG_SND_PXA2XX_AC97=m -+ -+# -+# USB devices -+# -+# CONFIG_SND_USB_AUDIO is not set -+ -+# -+# PCMCIA devices -+# -+# CONFIG_SND_VXPOCKET is not set -+# CONFIG_SND_PDAUDIOCF is not set -+ -+# -+# SoC audio support -+# -+# CONFIG_SND_SOC is not set -+ -+# -+# Open Sound System -+# -+# CONFIG_SOUND_PRIME is not set -+CONFIG_AC97_BUS=m -+ -+# -+# HID Devices -+# -+CONFIG_HID=y -+# CONFIG_HID_DEBUG is not set -+ -+# -+# USB support -+# -+CONFIG_USB_ARCH_HAS_HCD=y -+CONFIG_USB_ARCH_HAS_OHCI=y -+CONFIG_USB_ARCH_HAS_EHCI=y -+CONFIG_USB=y -+# CONFIG_USB_DEBUG is not set -+ -+# -+# Miscellaneous USB options -+# -+CONFIG_USB_DEVICEFS=y -+# CONFIG_USB_DYNAMIC_MINORS is not set -+# CONFIG_USB_SUSPEND is not set -+# CONFIG_USB_OTG is not set -+ -+# -+# USB Host Controller Drivers -+# -+# CONFIG_USB_EHCI_HCD is not set -+# CONFIG_USB_ISP116X_HCD is not set -+CONFIG_USB_OHCI_HCD=y -+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -+CONFIG_USB_OHCI_LITTLE_ENDIAN=y -+# CONFIG_USB_UHCI_HCD is not set -+# CONFIG_USB_SL811_HCD is not set -+ -+# -+# USB Device Class drivers -+# -+# CONFIG_USB_ACM is not set -+# CONFIG_USB_PRINTER is not set -+ -+# -+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -+# -+ -+# -+# may also be needed; see USB_STORAGE Help for more information -+# -+CONFIG_USB_STORAGE=y -+# CONFIG_USB_STORAGE_DEBUG is not set -+# CONFIG_USB_STORAGE_DATAFAB is not set -+# CONFIG_USB_STORAGE_FREECOM is not set -+# CONFIG_USB_STORAGE_DPCM is not set -+# CONFIG_USB_STORAGE_USBAT is not set -+# CONFIG_USB_STORAGE_SDDR09 is not set -+# CONFIG_USB_STORAGE_SDDR55 is not set -+# CONFIG_USB_STORAGE_JUMPSHOT is not set -+# CONFIG_USB_STORAGE_ALAUDA is not set -+# CONFIG_USB_STORAGE_KARMA is not set -+# CONFIG_USB_LIBUSUAL is not set -+ -+# -+# USB Input Devices -+# -+CONFIG_USB_HID=y -+# CONFIG_USB_HIDINPUT_POWERBOOK is not set -+# CONFIG_HID_FF is not set -+# CONFIG_USB_HIDDEV is not set -+# CONFIG_USB_AIPTEK is not set -+# CONFIG_USB_WACOM is not set -+# CONFIG_USB_ACECAD is not set -+# CONFIG_USB_KBTAB is not set -+# CONFIG_USB_POWERMATE is not set -+# CONFIG_USB_TOUCHSCREEN is not set -+# CONFIG_USB_YEALINK is not set -+# CONFIG_USB_XPAD is not set -+# CONFIG_USB_ATI_REMOTE is not set -+# CONFIG_USB_ATI_REMOTE2 is not set -+# CONFIG_USB_KEYSPAN_REMOTE is not set -+# CONFIG_USB_APPLETOUCH is not set -+# CONFIG_USB_GTCO is not set -+ -+# -+# USB Imaging devices -+# -+# CONFIG_USB_MDC800 is not set -+# CONFIG_USB_MICROTEK is not set -+ -+# -+# USB Network Adapters -+# -+# CONFIG_USB_CATC is not set -+# CONFIG_USB_KAWETH is not set -+# CONFIG_USB_PEGASUS is not set -+# CONFIG_USB_RTL8150 is not set -+# CONFIG_USB_USBNET_MII is not set -+# CONFIG_USB_USBNET is not set -+CONFIG_USB_MON=y -+ -+# -+# USB port drivers -+# -+ -+# -+# USB Serial Converter support -+# -+# CONFIG_USB_SERIAL is not set -+ -+# -+# USB Miscellaneous drivers -+# -+# CONFIG_USB_EMI62 is not set -+# CONFIG_USB_EMI26 is not set -+# CONFIG_USB_ADUTUX is not set -+# CONFIG_USB_AUERSWALD is not set -+# CONFIG_USB_RIO500 is not set -+# CONFIG_USB_LEGOTOWER is not set -+# CONFIG_USB_LCD is not set -+# CONFIG_USB_BERRY_CHARGE is not set -+# CONFIG_USB_LED is not set -+# CONFIG_USB_CYPRESS_CY7C63 is not set -+# CONFIG_USB_CYTHERM is not set -+# CONFIG_USB_PHIDGET is not set -+# CONFIG_USB_IDMOUSE is not set -+# CONFIG_USB_FTDI_ELAN is not set -+# CONFIG_USB_APPLEDISPLAY is not set -+# CONFIG_USB_LD is not set -+# CONFIG_USB_TRANCEVIBRATOR is not set -+# CONFIG_USB_IOWARRIOR is not set -+# CONFIG_USB_TEST is not set -+ -+# -+# USB DSL modem support -+# -+ -+# -+# USB Gadget Support -+# -+# CONFIG_USB_GADGET is not set -+ -+# -+# MMC/SD Card support -+# -+CONFIG_MMC=m -+# CONFIG_MMC_DEBUG is not set -+CONFIG_MMC_BLOCK=m -+CONFIG_MMC_PXA=m -+# CONFIG_MMC_SDHCI is not set -+# CONFIG_MMC_TIFM_SD is not set -+ -+# -+# Real Time Clock -+# -+CONFIG_RTC_LIB=y -+CONFIG_RTC_CLASS=y -+CONFIG_RTC_HCTOSYS=y -+CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -+# CONFIG_RTC_DEBUG is not set -+ -+# -+# RTC interfaces -+# -+CONFIG_RTC_INTF_SYSFS=y -+CONFIG_RTC_INTF_PROC=y -+CONFIG_RTC_INTF_DEV=y -+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -+ -+# -+# RTC drivers -+# -+# CONFIG_RTC_DRV_CMOS is not set -+# CONFIG_RTC_DRV_DS1553 is not set -+# CONFIG_RTC_DRV_DS1742 is not set -+# CONFIG_RTC_DRV_M48T86 is not set -+CONFIG_RTC_DRV_SA1100=y -+# CONFIG_RTC_DRV_TEST is not set -+CONFIG_RTC_DRV_V3020=y -+ -+# -+# File systems -+# -+CONFIG_EXT2_FS=y -+# CONFIG_EXT2_FS_XATTR is not set -+# CONFIG_EXT2_FS_XIP is not set -+CONFIG_EXT3_FS=y -+CONFIG_EXT3_FS_XATTR=y -+# CONFIG_EXT3_FS_POSIX_ACL is not set -+# CONFIG_EXT3_FS_SECURITY is not set -+# CONFIG_EXT4DEV_FS is not set -+CONFIG_JBD=y -+# CONFIG_JBD_DEBUG is not set -+CONFIG_FS_MBCACHE=y -+# CONFIG_REISERFS_FS is not set -+# CONFIG_JFS_FS is not set -+# CONFIG_FS_POSIX_ACL is not set -+# CONFIG_XFS_FS is not set -+# CONFIG_GFS2_FS is not set -+# CONFIG_OCFS2_FS is not set -+# CONFIG_MINIX_FS is not set -+# CONFIG_ROMFS_FS is not set -+CONFIG_INOTIFY=y -+CONFIG_INOTIFY_USER=y -+# CONFIG_QUOTA is not set -+CONFIG_DNOTIFY=y -+# CONFIG_AUTOFS_FS is not set -+# CONFIG_AUTOFS4_FS is not set -+# CONFIG_FUSE_FS is not set -+ -+# -+# CD-ROM/DVD Filesystems -+# -+# CONFIG_ISO9660_FS is not set -+# CONFIG_UDF_FS is not set -+ -+# -+# DOS/FAT/NT Filesystems -+# -+CONFIG_FAT_FS=y -+CONFIG_MSDOS_FS=y -+CONFIG_VFAT_FS=y -+CONFIG_FAT_DEFAULT_CODEPAGE=437 -+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -+# CONFIG_NTFS_FS is not set -+ -+# -+# Pseudo filesystems -+# -+CONFIG_PROC_FS=y -+CONFIG_PROC_SYSCTL=y -+CONFIG_SYSFS=y -+CONFIG_TMPFS=y -+# CONFIG_TMPFS_POSIX_ACL is not set -+# CONFIG_HUGETLB_PAGE is not set -+CONFIG_RAMFS=y -+# CONFIG_CONFIGFS_FS is not set -+ -+# -+# Miscellaneous filesystems -+# -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_HFS_FS is not set -+# CONFIG_HFSPLUS_FS is not set -+# CONFIG_BEFS_FS is not set -+# CONFIG_BFS_FS is not set -+# CONFIG_EFS_FS is not set -+# CONFIG_JFFS2_FS is not set -+# CONFIG_CRAMFS is not set -+# CONFIG_VXFS_FS is not set -+# CONFIG_HPFS_FS is not set -+# CONFIG_QNX4FS_FS is not set -+# CONFIG_SYSV_FS is not set -+# CONFIG_UFS_FS is not set -+ -+# -+# Network File Systems -+# -+CONFIG_NFS_FS=y -+CONFIG_NFS_V3=y -+# CONFIG_NFS_V3_ACL is not set -+# CONFIG_NFS_V4 is not set -+# CONFIG_NFS_DIRECTIO is not set -+# CONFIG_NFSD is not set -+CONFIG_ROOT_NFS=y -+CONFIG_LOCKD=y -+CONFIG_LOCKD_V4=y -+CONFIG_NFS_COMMON=y -+CONFIG_SUNRPC=y -+# CONFIG_RPCSEC_GSS_KRB5 is not set -+# CONFIG_RPCSEC_GSS_SPKM3 is not set -+CONFIG_SMB_FS=y -+# CONFIG_SMB_NLS_DEFAULT is not set -+# CONFIG_CIFS is not set -+# CONFIG_NCP_FS is not set -+# CONFIG_CODA_FS is not set -+# CONFIG_AFS_FS is not set -+# CONFIG_9P_FS is not set -+ -+# -+# Partition Types -+# -+# CONFIG_PARTITION_ADVANCED is not set -+CONFIG_MSDOS_PARTITION=y -+ -+# -+# Native Language Support -+# -+CONFIG_NLS=y -+CONFIG_NLS_DEFAULT="iso8859-1" -+CONFIG_NLS_CODEPAGE_437=y -+# CONFIG_NLS_CODEPAGE_737 is not set -+# CONFIG_NLS_CODEPAGE_775 is not set -+# CONFIG_NLS_CODEPAGE_850 is not set -+# CONFIG_NLS_CODEPAGE_852 is not set -+# CONFIG_NLS_CODEPAGE_855 is not set -+# CONFIG_NLS_CODEPAGE_857 is not set -+# CONFIG_NLS_CODEPAGE_860 is not set -+# CONFIG_NLS_CODEPAGE_861 is not set -+# CONFIG_NLS_CODEPAGE_862 is not set -+# CONFIG_NLS_CODEPAGE_863 is not set -+# CONFIG_NLS_CODEPAGE_864 is not set -+# CONFIG_NLS_CODEPAGE_865 is not set -+# CONFIG_NLS_CODEPAGE_866 is not set -+# CONFIG_NLS_CODEPAGE_869 is not set -+# CONFIG_NLS_CODEPAGE_936 is not set -+# CONFIG_NLS_CODEPAGE_950 is not set -+# CONFIG_NLS_CODEPAGE_932 is not set -+# CONFIG_NLS_CODEPAGE_949 is not set -+# CONFIG_NLS_CODEPAGE_874 is not set -+# CONFIG_NLS_ISO8859_8 is not set -+# CONFIG_NLS_CODEPAGE_1250 is not set -+# CONFIG_NLS_CODEPAGE_1251 is not set -+# CONFIG_NLS_ASCII is not set -+CONFIG_NLS_ISO8859_1=y -+# CONFIG_NLS_ISO8859_2 is not set -+# CONFIG_NLS_ISO8859_3 is not set -+# CONFIG_NLS_ISO8859_4 is not set -+# CONFIG_NLS_ISO8859_5 is not set -+# CONFIG_NLS_ISO8859_6 is not set -+# CONFIG_NLS_ISO8859_7 is not set -+# CONFIG_NLS_ISO8859_9 is not set -+# CONFIG_NLS_ISO8859_13 is not set -+# CONFIG_NLS_ISO8859_14 is not set -+# CONFIG_NLS_ISO8859_15 is not set -+# CONFIG_NLS_KOI8_R is not set -+# CONFIG_NLS_KOI8_U is not set -+# CONFIG_NLS_UTF8 is not set -+ -+# -+# Distributed Lock Manager -+# -+# CONFIG_DLM is not set -+ -+# -+# Profiling support -+# -+# CONFIG_PROFILING is not set -+ -+# -+# Kernel hacking -+# -+# CONFIG_PRINTK_TIME is not set -+CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_MAGIC_SYSRQ=y -+# CONFIG_UNUSED_SYMBOLS is not set -+# CONFIG_DEBUG_FS is not set -+# CONFIG_HEADERS_CHECK is not set -+CONFIG_DEBUG_KERNEL=y -+# CONFIG_DEBUG_SHIRQ is not set -+CONFIG_LOG_BUF_SHIFT=17 -+# CONFIG_DETECT_SOFTLOCKUP is not set -+# CONFIG_SCHEDSTATS is not set -+# CONFIG_TIMER_STATS is not set -+# CONFIG_DEBUG_SLAB is not set -+# CONFIG_DEBUG_RT_MUTEXES is not set -+# CONFIG_RT_MUTEX_TESTER is not set -+# CONFIG_DEBUG_SPINLOCK is not set -+# CONFIG_DEBUG_MUTEXES is not set -+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -+# CONFIG_DEBUG_KOBJECT is not set -+# CONFIG_DEBUG_BUGVERBOSE is not set -+CONFIG_DEBUG_INFO=y -+# CONFIG_DEBUG_VM is not set -+# CONFIG_DEBUG_LIST is not set -+CONFIG_FRAME_POINTER=y -+CONFIG_FORCED_INLINING=y -+# CONFIG_RCU_TORTURE_TEST is not set -+# CONFIG_FAULT_INJECTION is not set -+CONFIG_DEBUG_USER=y -+CONFIG_DEBUG_ERRORS=y -+CONFIG_DEBUG_LL=y -+# CONFIG_DEBUG_ICEDCC is not set -+ -+# -+# Security options -+# -+# CONFIG_KEYS is not set -+# CONFIG_SECURITY is not set -+ -+# -+# Cryptographic options -+# -+CONFIG_CRYPTO=y -+CONFIG_CRYPTO_ALGAPI=m -+CONFIG_CRYPTO_BLKCIPHER=m -+CONFIG_CRYPTO_MANAGER=m -+# CONFIG_CRYPTO_HMAC is not set -+# CONFIG_CRYPTO_XCBC is not set -+# CONFIG_CRYPTO_NULL is not set -+# CONFIG_CRYPTO_MD4 is not set -+# CONFIG_CRYPTO_MD5 is not set -+# CONFIG_CRYPTO_SHA1 is not set -+# CONFIG_CRYPTO_SHA256 is not set -+# CONFIG_CRYPTO_SHA512 is not set -+# CONFIG_CRYPTO_WP512 is not set -+# CONFIG_CRYPTO_TGR192 is not set -+# CONFIG_CRYPTO_GF128MUL is not set -+CONFIG_CRYPTO_ECB=m -+CONFIG_CRYPTO_CBC=m -+CONFIG_CRYPTO_PCBC=m -+# CONFIG_CRYPTO_LRW is not set -+# CONFIG_CRYPTO_DES is not set -+# CONFIG_CRYPTO_FCRYPT is not set -+# CONFIG_CRYPTO_BLOWFISH is not set -+# CONFIG_CRYPTO_TWOFISH is not set -+# CONFIG_CRYPTO_SERPENT is not set -+CONFIG_CRYPTO_AES=m -+# CONFIG_CRYPTO_CAST5 is not set -+# CONFIG_CRYPTO_CAST6 is not set -+# CONFIG_CRYPTO_TEA is not set -+CONFIG_CRYPTO_ARC4=m -+# CONFIG_CRYPTO_KHAZAD is not set -+# CONFIG_CRYPTO_ANUBIS is not set -+# CONFIG_CRYPTO_DEFLATE is not set -+# CONFIG_CRYPTO_MICHAEL_MIC is not set -+# CONFIG_CRYPTO_CRC32C is not set -+# CONFIG_CRYPTO_CAMELLIA is not set -+# CONFIG_CRYPTO_TEST is not set -+ -+# -+# Hardware crypto devices -+# -+ -+# -+# Library routines -+# -+CONFIG_BITREVERSE=y -+# CONFIG_CRC_CCITT is not set -+# CONFIG_CRC16 is not set -+CONFIG_CRC32=y -+# CONFIG_LIBCRC32C is not set -+CONFIG_PLIST=y -+CONFIG_HAS_IOMEM=y -+CONFIG_HAS_IOPORT=y -diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig -index 5c0a100..e1cd439 100644 ---- a/arch/arm/mach-pxa/Kconfig -+++ b/arch/arm/mach-pxa/Kconfig -@@ -37,6 +37,11 @@ config MACH_TRIZEPS4 - bool "Keith und Koep Trizeps4 DIMM-Module" - select PXA27x - -+config MACH_ARMCORE -+ bool "CompuLab CM-X270 modules" -+ select PXA27x -+ select IWMMXT -+ - endchoice - - if PXA_SHARPSL -diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile -index 9093eb1..2a110f8 100644 ---- a/arch/arm/mach-pxa/Makefile -+++ b/arch/arm/mach-pxa/Makefile -@@ -18,6 +18,7 @@ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o sp - obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o - obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o - obj-$(CONFIG_MACH_TOSA) += tosa.o -+obj-$(CONFIG_MACH_ARMCORE) += cm-x270.o - - # Support for blinky lights - led-y := leds.o -@@ -25,6 +26,8 @@ led-$(CONFIG_ARCH_LUBBOCK) += leds-lubbock.o - led-$(CONFIG_MACH_MAINSTONE) += leds-mainstone.o - led-$(CONFIG_ARCH_PXA_IDP) += leds-idp.o - led-$(CONFIG_MACH_TRIZEPS4) += leds-trizeps4.o -+# FIXME: use driver/leds instead -+led-$(CONFIG_MACH_ARMCORE) += leds-cm-x270.o - - obj-$(CONFIG_LEDS) += $(led-y) - -@@ -35,3 +38,7 @@ obj-$(CONFIG_PXA_SSP) += ssp.o - ifeq ($(CONFIG_PXA27x),y) - obj-$(CONFIG_PM) += standby.o - endif -+ -+ifeq ($(CONFIG_PCI),y) -+obj-$(CONFIG_MACH_ARMCORE) += cm-x270-pci.o -+endif -diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c -new file mode 100644 -index 0000000..88b080d ---- /dev/null -+++ b/arch/arm/mach-pxa/cm-x270.c -@@ -0,0 +1,821 @@ -+/* -+ * linux/arch/arm/mach-pxa/cm-x270.c -+ * -+ * Copyright (C) 2007 CompuLab, Ltd. -+ * Mike Rapoport -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include