text:
/* $DHD: intelfb/intelfbdrv.c,v 1.20 2003/06/27 15:17:40 dawes Exp $ */

/*
 * Changes:
 *    01/2003 - Initial driver (0.1.0), no mode switching, no acceleration.
 *		This initial version is a basic core that works a lot like
 *		the vesafb driver.  It must be built-in to the kernel,
 *		and the initial video mode must be set with vga=XXX at
 *		boot time.  (David Dawes)
 *
 *    01/2003 - Version 0.2.0: Mode switching added, colormap support
 *		implemented, Y panning, and soft screen blanking implemented.
 *		No acceleration yet.  (David Dawes)
 *
 *    01/2003 - Version 0.3.0: fbcon acceleration support added.  Module
 *		option handling added.  (David Dawes)
 *
 *    01/2003 - Version 0.4.0: fbcon HW cursor support added.  (David Dawes)
 *
 *    01/2003 - Version 0.4.1: Add auto-generation of built-in modes.
 *		(David Dawes)
 *
 *    02/2003 - Version 0.4.2: Add check for active non-CRT devices, and
 *		mode validation checks.  (David Dawes)
 *
 *    02/2003 - Version 0.4.3: Check when the VC is in graphics mode so that
 *		acceleration is disabled while an XFree86 server is running.
 *		(David Dawes)
 *
 *    02/2003 - Version 0.4.4: Monitor DPMS support.  (David Dawes)
 *
 *    02/2003 - Version 0.4.5: Basic XFree86 + fbdev working.  (David Dawes)
 *
 *    02/2003 - Version 0.5.0: Modify to work with the 2.5.32 kernel as well
 *		as 2.4.x kernels.  (David Dawes)
 *
 *    02/2003 - Version 0.6.0: Split out HW-specifics into a separate file.
 *		(David Dawes)
 *
 *    02/2003 - Version 0.7.0: Test on 852GM/855GM.  Acceleration and HW
 *		cursor are disabled on this platform.  (David Dawes)
 *
 *    02/2003 - Version 0.7.1: Test on 845G.  Acceleration is disabled
 *		on this platform.  (David Dawes)
 *
 *    02/2003 - Version 0.7.2: Test on 830M.  Acceleration and HW
 *		cursor are disabled on this platform.  (David Dawes)
 *
 *    02/2003 - Version 0.7.3: Fix 8-bit modes for mobile platforms
 *		(David Dawes)
 *
 *    02/2003 - Version 0.7.4: Add checks for FB and FBCON_HAS_CFB* configured
 *		in the kernel, and add mode bpp verification and default
 *		bpp selection based on which FBCON_HAS_CFB* are configured.
 *		(David Dawes)
 *
 *    02/2003 - Version 0.7.5: Add basic package/install scripts based on the
 *		DRI packaging scripts.  (David Dawes)
 *
 *    04/2003 - Version 0.7.6: Fix typo that affects builds with SMP-enabled
 *		kernels.  (David Dawes, reported by Anupam).
 *
 *    06/2003 - Version 0.7.7:
 *              Fix Makefile.kernel build problem (Tsutomu Yasuda).
 *		Fix mis-placed #endif (2.4.21 kernel).
 *
 *    09/2004 - Version 0.9.0 - by Sylvain Meyer
 *              Port to linux 2.6 kernel fbdev
 *              Fix HW accel and HW cursor on i845G
 *              Use of agpgart for fb memory reservation
 *              Add mtrr support
 *
 *    10/2004 - Version 0.9.1
 *              Use module_param instead of old MODULE_PARM
 *              Some cleanup
 *
 *    11/2004 - Version 0.9.2
 *              Add vram option to reserve more memory than stolen by BIOS
 *              Fix intelfbhw_pan_display typo
 *              Add __initdata annotations
 *
 *    04/2008 - Version 0.9.5
 *              Add support for 965G/965GM. (Maik Broemme <mbroemme@plusserver.de>)
 *
 *    08/2008 - Version 0.9.6
 *              Add support for 945GME. (Phil Endecott <spam_from_intelfb@chezphil.org>)
 */

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/fb.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/vmalloc.h>
#include <linux/pagemap.h>
#include <linux/screen_info.h>

#include <asm/io.h>

#ifdef CONFIG_MTRR
#include <asm/mtrr.h>
#endif

#include "intelfb.h"
#include "intelfbhw.h"
#include "../edid.h"

static void __devinit get_initial_mode(struct intelfb_info *dinfo);
static void update_dinfo(struct intelfb_info *dinfo,
			 struct fb_var_screeninfo *var);
static int intelfb_open(struct fb_info *info, int user);
static int intelfb_release(struct fb_info *info, int user);
static int intelfb_check_var(struct fb_var_screeninfo *var,
			     struct fb_info *info);
static int intelfb_set_par(struct fb_info *info);
static int intelfb_setcolreg(unsigned regno, unsigned red, unsigned green,
			     unsigned blue, unsigned transp,
			     struct fb_info *info);

static int intelfb_blank(int blank, struct fb_info *info);
static int intelfb_pan_display(struct fb_var_screeninfo *var,
			       struct fb_info *info);

static void intelfb_fillrect(struct fb_info *info,
			     const struct fb_fillrect *rect);
static void intelfb_copyarea(struct fb_info *info,
			     const struct fb_copyarea *region);
static void intelfb_imageblit(struct fb_info *info,
			      const struct fb_image *image);
static int intelfb_cursor(struct fb_info *info,
			   struct fb_cursor *cursor);

static int intelfb_sync(struct fb_info *info);

static int intelfb_ioctl(struct fb_info *info,
			 unsigned int cmd, unsigned long arg);

static int __devinit intelfb_pci_register(struct pci_dev *pdev,
					  const struct pci_device_id *ent);
static void __devexit intelfb_pci_unregister(struct pci_dev *pdev);
static int __devinit intelfb_set_fbinfo(struct intelfb_info *dinfo);

/*
 * Limiting the class to PCI_CLASS_DISPLAY_VGA prevents function 1 of the
 * mobile chipsets from being registered.
 */
#if DETECT_VGA_CLASS_ONLY
#define INTELFB_CLASS_MASK ~0 << 8
#else
#define INTELFB_CLASS_MASK 0
#endif

static struct pci_device_id intelfb_pci_table[] __devinitdata = {
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_830M, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_830M },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_865G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_865G },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_854, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_854 },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915G },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945GM },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945GME, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945GME },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_965G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_965G },
	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_965GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_965GM },
	{ 0, }
};

/* Global data */
static int num_registered = 0;

/* fb ops */
static struct fb_ops intel_fb_ops = {
	.owner =		THIS_MODULE,
	.fb_open =              intelfb_open,
	.fb_release =           intelfb_release,
	.fb_check_var =         intelfb_check_var,
	.fb_set_par =           intelfb_set_par,
	.fb_setcolreg =		intelfb_setcolreg,
	.fb_blank =		intelfb_blank,
	.fb_pan_display =       intelfb_pan_display,
	.fb_fillrect  =         intelfb_fillrect,
	.fb_copyarea  =         intelfb_copyarea,
	.fb_imageblit =         intelfb_imageblit,
	.fb_cursor =            intelfb_cursor,
	.fb_sync =              intelfb_sync,
	.fb_ioctl =		intelfb_ioctl
};

/* PCI driver module table */
static struct pci_driver intelfb_driver = {
	.name =		"intelfb",
	.id_table =	intelfb_pci_table,
	.probe =	intelfb_pci_register,
	.remove =	__devexit_p(intelfb_pci_unregister)
};

/* Module description/parameters */
MODULE_AUTHOR("David Dawes <dawes@tungstengraphics.com>, "
	      "Sylvain Meyer <sylvain.meyer@worldonline.fr>");
MODULE_DESCRIPTION("Framebuffer driver for Intel(R) " SUPPORTED_CHIPSETS
		   " chipsets");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DEVICE_TABLE(pci, intelfb_pci_table);

static int accel        = 1;
static int vram         = 4;
static int hwcursor     = 0;
static int mtrr         = 1;
static int fixed        = 0;
static int noinit       = 0;
static int noregister   = 0;
static int probeonly    = 0;
static int idonly       = 0;
static int bailearly    = 0;
static int voffset	= 48;
static char *mode       = NULL;

module_param(accel, bool, S_IRUGO);
MODULE_PARM_DESC(accel, "Enable hardware acceleration");
module_param(vram, int, S_IRUGO);
MODULE_PARM_DESC(vram, "System RAM to allocate to framebuffer in MiB");
module_param(voffset, int, S_IRUGO);
MODULE_PARM_DESC(voffset, "Offset of framebuffer in MiB");
module_param(hwcursor, bool, S_IRUGO);
MODULE_PARM_DESC(hwcursor, "Enable HW cursor");
module_param(mtrr, bool, S_IRUGO);
MODULE_PARM_DESC(mtrr, "Enable MTRR support");
module_param(fixed, bool, S_IRUGO);
MODULE_PARM_DESC(fixed, "Disable mode switching");
module_param(noinit, bool, 0);
MODULE_PARM_DESC(noinit, "Don't initialise graphics mode when loading");
module_param(noregister, bool, 0);
MODULE_PARM_DESC(noregister, "Don't register, just probe and exit (debug)");
module_param(probeonly, bool, 0);
MODULE_PARM_DESC(probeonly, "Do a minimal probe (debug)");
module_param(idonly, bool, 0);
MODULE_PARM_DESC(idonly, "Just identify without doing anything else (debug)");
module_param(bailearly, bool, 0);
MODULE_PARM_DESC(bailearly, "Bail out early, depending on value (debug)");
module_param(mode, charp, S_IRUGO);
MODULE_PARM_DESC(mode,
		 "Initial video mode \"<xres>x<yres>[-<depth>][@<refresh>]\"");

#ifndef MODULE
#define OPT_EQUAL(opt, name) (!strncmp(opt, name, strlen(name)))
#define OPT_INTVAL(opt, name) simple_strtoul(opt + strlen(name) + 1, NULL, 0)
#define OPT_STRVAL(opt, name) (opt + strlen(name))

static __inline__ char * get_opt_string(const char *this_opt, const char *name)
{
	const char *p;
	int i;
	char *ret;

	p = OPT_STRVAL(this_opt, name);
	i = 0;
	while (p[i] && p[i] != ' ' && p[i] != ',')
		i++;
	ret = kmalloc(i + 1, GFP_KERNEL);
	if (ret) {
		strncpy(ret, p, i);
		ret[i] = '\0';
	}
	return ret;
}

static __inline__ int get_opt_int(const char *this_opt, const char *name,
				  int *ret)
{
	if (!ret)
		return 0;

	if (!OPT_EQUAL(this_opt, name))
		return 0;

	*ret = OPT_INTVAL(this_opt, name);
	return 1;
}

static __inline__ int get_opt_bool(const char *this_opt, const char *name,
				   int *ret)
{
	if (!ret)
		return 0;

	if (OPT_EQUAL(this_opt, name)) {
		if (this_opt[strlen(name)] == '=')
			*ret = simple_strtoul(this_opt + strlen(name) + 1,
					      NULL, 0);
		else
			*ret = 1;
	} else {
		if (OPT_EQUAL(this_opt, "no") && OPT_EQUAL(this_opt + 2, name))
			*ret = 0;
		else
			return 0;
	}
	return 1;
}

static int __init intelfb_setup(char *options)
{
	char *this_opt;

	DBG_MSG("intelfb_setup\n");

	if (!options || !*options) {
		DBG_MSG("no options\n");
		return 0;
	} else
		DBG_MSG("options: %s\n", options);

	/*
	 * These are the built-in options analogous to the module parameters
	 * defined above.
	 *
	 * The syntax is:
	 *
	 *    video=intelfb:[mode][,<param>=<val>] ...
	 *
	 * e.g.,
	 *
	 *    video=intelfb:1024x768-16@75,accel=0
	 */

	while ((this_opt = strsep(&options, ","))) {
		if (!*this_opt)
			continue;
		if (get_opt_bool(this_opt, "accel", &accel))
			;
		else if (get_opt_int(this_opt, "vram", &vram))
			;
		else if (get_opt_bool(this_opt, "hwcursor", &hwcursor))
			;
		else if (get_opt_bool(this_opt, "mtrr", &mtrr))
			;
		else if (get_opt_bool(this_opt, "fixed", &fixed))
			;
		else if (get_opt_bool(this_opt, "init", &noinit))
			noinit = !noinit;
		else if (OPT_EQUAL(this_opt, "mode="))
			mode = get_opt_string(this_opt, "mode=");
		else
			mode = this_opt;
	}

	return 0;
}

#endif

static int __init intelfb_init(void)
{
#ifndef MODULE
	char *option = NULL;
#endif

	DBG_MSG("intelfb_init\n");

	INF_MSG("Framebuffer driver for "
		"Intel(R) " SUPPORTED_CHIPSETS " chipsets\n");
	INF_MSG("Version " INTELFB_VERSION "\n");

	if (idonly)
		return -ENODEV;

#ifndef MODULE
	if (fb_get_options("intelfb", &option))
		return -ENODEV;
	intelfb_setup(option);
#endif

	return pci_register_driver(&intelfb_driver);
}

static void __exit intelfb_exit(void)
{
	DBG_MSG("intelfb_exit\n");
	pci_unregister_driver(&intelfb_driver);
}

module_init(intelfb_init);
module_exit(intelfb_exit);

/***************************************************************
 *                     mtrr support functions                  *
 ***************************************************************/

#ifdef CONFIG_MTRR
static inline void __devinit set_mtrr(struct intelfb_info *dinfo)
{
	dinfo->mtrr_reg = mtrr_add(dinfo->aperture.physical,
				   dinfo->aperture.size, MTRR_TYPE_WRCOMB, 1);
	if (dinfo->mtrr_reg < 0) {
		ERR_MSG("unable to set MTRR\n");
		return;
	}
	dinfo->has_mtrr = 1;
}
static inline void unset_mtrr(struct intelfb_info *dinfo)
{
	if (dinfo->has_mtrr)
		mtrr_del(dinfo->mtrr_reg, dinfo->aperture.physical,
			 dinfo->aperture.size);
}
#else
#define set_mtrr(x) WRN_MSG("MTRR is disabled in the kernel\n")

#define unset_mtrr(x) do { } while (0)
#endif /* CONFIG_MTRR */

/***************************************************************
 *                        driver init / cleanup                *
 ***************************************************************/

static void cleanup(struct intelfb_info *dinfo)
{
	DBG_MSG("cleanup\n");

	if (!dinfo)
		return;

	intelfbhw_disable_irq(dinfo);

	fb_dealloc_cmap(&dinfo->info->cmap);
	kfree(dinfo->info->pixmap.addr);

	if (dinfo->registered)
		unregister_framebuffer(dinfo->info);

	unset_mtrr(dinfo);

	if (dinfo->fbmem_gart && dinfo->gtt_fb_mem) {
		agp_unbind_memory(dinfo->gtt_fb_mem);
		agp_free_memory(dinfo->gtt_fb_mem);
	}
	if (dinfo->gtt_cursor_mem) {
		agp_unbind_memory(dinfo->gtt_cursor_mem);
		agp_free_memory(dinfo->gtt_cursor_mem);
	}
	if (dinfo->gtt_ring_mem) {
		agp_unbind_memory(dinfo->gtt_ring_mem);
		agp_free_memory(dinfo->gtt_ring_mem);
	}

#ifdef CONFIG_FB_INTEL_I2C
	/* un-register I2C bus */
	intelfb_delete_i2c_busses(dinfo);
#endif

	if (dinfo->mmio_base)
		iounmap((void __iomem *)dinfo->mmio_base);
	if (dinfo->aperture.virtual)
		iounmap((void __iomem *)dinfo->aperture.virtual);

	if (dinfo->flag & INTELFB_MMIO_ACQUIRED)
		release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
	if (dinfo->flag & INTELFB_FB_ACQUIRED)
		release_mem_region(dinfo->aperture.physical,
				   dinfo->aperture.size);
	framebuffer_release(dinfo->info);
}

#define bailout(dinfo) do {						\
	DBG_MSG("bailout\n");						\
	cleanup(dinfo);							\
	INF_MSG("Not going to register framebuffer, exiting...\n");	\
	return -ENODEV;							\
} while (0)

static int __devinit intelfb_pci_register(struct pci_dev *pdev,
					  const struct pci_device_id *ent)
{
	struct fb_info *info;
	struct intelfb_info *dinfo;
	int i, err, dvo;
	int aperture_size, stolen_size;
	struct agp_kern_info gtt_info;
	int agp_memtype;
	const char *s;
	struct agp_bridge_data *bridge;
	int aperture_bar = 0;
	int mmio_bar = 1;
	int offset;

	DBG_MSG("intelfb_pci_register\n");

	num_registered++;
	if (num_registered != 1) {
		ERR_MSG("Attempted to register %d devices "
			"(should be only 1).\n", num_registered);
		return -ENODEV;
	}

	info = framebuffer_alloc(sizeof(struct intelfb_info), &pdev->dev);
	if (!info) {
		ERR_MSG("Could not allocate memory for intelfb_info.\n");
		return -ENODEV;
	}
	if (fb_alloc_cmap(&info->cmap, 256, 1) < 0) {
		ERR_MSG("Could not allocate cmap for intelfb_info.\n");
		goto err_out_cmap;
		return -ENODEV;
	}

	dinfo = info->par;
	dinfo->info  = info;
	dinfo->fbops = &intel_fb_ops;
	dinfo->pdev  = pdev;

	/* Reserve pixmap space. */
	info->pixmap.addr = kzalloc(64 * 1024, GFP_KERNEL);
	if (info->pixmap.addr == NULL) {
		ERR_MSG("Cannot reserve pixmap memory.\n");
		goto err_out_pixmap;
	}

	/* set early this option because it could be changed by tv encoder
	   driver */
	dinfo->fixed_mode = fixed;

	/* Enable device. */
	if ((err = pci_enable_device(pdev))) {
		ERR_MSG("Cannot enable device.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	/* Set base addresses. */
	if ((ent->device == PCI_DEVICE_ID_INTEL_915G) ||
	    (ent->device == PCI_DEVICE_ID_INTEL_915GM) ||
	    (ent->device == PCI_DEVICE_ID_INTEL_945G)  ||
	    (ent->device == PCI_DEVICE_ID_INTEL_945GM) ||
	    (ent->device == PCI_DEVICE_ID_INTEL_945GME) ||
	    (ent->device == PCI_DEVICE_ID_INTEL_965G) ||
	    (ent->device == PCI_DEVICE_ID_INTEL_965GM)) {

		aperture_bar = 2;
		mmio_bar = 0;
	}
	dinfo->aperture.physical = pci_resource_start(pdev, aperture_bar);
	dinfo->aperture.size     = pci_resource_len(pdev, aperture_bar);
	dinfo->mmio_base_phys    = pci_resource_start(pdev, mmio_bar);
	DBG_MSG("fb aperture: 0x%llx/0x%llx, MMIO region: 0x%llx/0x%llx\n",
		(unsigned long long)pci_resource_start(pdev, aperture_bar),
		(unsigned long long)pci_resource_len(pdev, aperture_bar),
		(unsigned long long)pci_resource_start(pdev, mmio_bar),
		(unsigned long long)pci_resource_len(pdev, mmio_bar));

	/* Reserve the fb and MMIO regions */
	if (!request_mem_region(dinfo->aperture.physical, dinfo->aperture.size,
				INTELFB_MODULE_NAME)) {
		ERR_MSG("Cannot reserve FB region.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	dinfo->flag |= INTELFB_FB_ACQUIRED;

	if (!request_mem_region(dinfo->mmio_base_phys,
				INTEL_REG_SIZE,
				INTELFB_MODULE_NAME)) {
		ERR_MSG("Cannot reserve MMIO region.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	dinfo->flag |= INTELFB_MMIO_ACQUIRED;

	/* Get the chipset info. */
	dinfo->pci_chipset = pdev->device;

	if (intelfbhw_get_chipset(pdev, dinfo)) {
		cleanup(dinfo);
		return -ENODEV;
	}

	if (intelfbhw_get_memory(pdev, &aperture_size,&stolen_size)) {
		cleanup(dinfo);
		return -ENODEV;
	}

	INF_MSG("%02x:%02x.%d: %s, aperture size %dMB, "
		"stolen memory %dkB\n",
		pdev->bus->number, PCI_SLOT(pdev->devfn),
		PCI_FUNC(pdev->devfn), dinfo->name,
		BtoMB(aperture_size), BtoKB(stolen_size));

	/* Set these from the options. */
	dinfo->accel    = accel;
	dinfo->hwcursor = hwcursor;

	if (NOACCEL_CHIPSET(dinfo) && dinfo->accel == 1) {
		INF_MSG("Acceleration is not supported for the %s chipset.\n",
			dinfo->name);
		dinfo->accel = 0;
	}

	/* Framebuffer parameters - Use all the stolen memory if >= vram */
	if (ROUND_UP_TO_PAGE(stolen_size) >= MB(vram)) {
		dinfo->fb.size = ROUND_UP_TO_PAGE(stolen_size);
		dinfo->fbmem_gart = 0;
	} else {
		dinfo->fb.size =  MB(vram);
		dinfo->fbmem_gart = 1;
	}

	/* Allocate space for the ring buffer and HW cursor if enabled. */
	if (dinfo->accel) {
		dinfo->ring.size = RINGBUFFER_SIZE;
		dinfo->ring_tail_mask = dinfo->ring.size - 1;
	}
	if (dinfo->hwcursor)
		dinfo->cursor.size = HW_CURSOR_SIZE;

	/* Use agpgart to manage the GATT */
	if (!(bridge = agp_backend_acquire(pdev))) {
		ERR_MSG("cannot acquire agp\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	/* get the current gatt info */
	if (agp_copy_info(bridge, &gtt_info)) {
		ERR_MSG("cannot get agp info\n");
		agp_backend_release(bridge);
		cleanup(dinfo);
		return -ENODEV;
	}

	if (MB(voffset) < stolen_size)
		offset = (stolen_size >> 12);
	else
		offset = ROUND_UP_TO_PAGE(MB(voffset))/GTT_PAGE_SIZE;

	/* set the mem offsets - set them after the already used pages */
	if (dinfo->accel)
		dinfo->ring.offset = offset + gtt_info.current_memory;
	if (dinfo->hwcursor)
		dinfo->cursor.offset = offset +
			+ gtt_info.current_memory + (dinfo->ring.size >> 12);
	if (dinfo->fbmem_gart)
		dinfo->fb.offset = offset +
			+ gtt_info.current_memory + (dinfo->ring.size >> 12)
			+ (dinfo->cursor.size >> 12);

	/* Allocate memories (which aren't stolen) */
	/* Map the fb and MMIO regions */
	/* ioremap only up to the end of used aperture */
	dinfo->aperture.virtual = (u8 __iomem *)ioremap_nocache
		(dinfo->aperture.physical, ((offset + dinfo->fb.offset) << 12)
		 + dinfo->fb.size);
	if (!dinfo->aperture.virtual) {
		ERR_MSG("Cannot remap FB region.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	dinfo->mmio_base =
		(u8 __iomem *)ioremap_nocache(dinfo->mmio_base_phys,
					      INTEL_REG_SIZE);
	if (!dinfo->mmio_base) {
		ERR_MSG("Cannot remap MMIO region.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	if (dinfo->accel) {
		if (!(dinfo->gtt_ring_mem =
		      agp_allocate_memory(bridge, dinfo->ring.size >> 12,
					  AGP_NORMAL_MEMORY))) {
			ERR_MSG("cannot allocate ring buffer memory\n");
			agp_backend_release(bridge);
			cleanup(dinfo);
			return -ENOMEM;
		}
		if (agp_bind_memory(dinfo->gtt_ring_mem,
				    dinfo->ring.offset)) {
			ERR_MSG("cannot bind ring buffer memory\n");
			agp_backend_release(bridge);
			cleanup(dinfo);
			return -EBUSY;
		}
		dinfo->ring.physical = dinfo->aperture.physical
			+ (dinfo->ring.offset << 12);
		dinfo->ring.virtual  = dinfo->aperture.virtual
			+ (dinfo->ring.offset << 12);
		dinfo->ring_head = 0;
	}
	if (dinfo->hwcursor) {
		agp_memtype = dinfo->mobile ? AGP_PHYSICAL_MEMORY
			: AGP_NORMAL_MEMORY;
		if (!(dinfo->gtt_cursor_mem =
		      agp_allocate_memory(bridge, dinfo->cursor.size >> 12,
					  agp_memtype))) {
			ERR_MSG("cannot allocate cursor memory\n");
			agp_backend_release(bridge);
			cleanup(dinfo);
			return -ENOMEM;
		}
		if (agp_bind_memory(dinfo->gtt_cursor_mem,
				    dinfo->cursor.offset)) {
			ERR_MSG("cannot bind cursor memory\n");
			agp_backend_release(bridge);
			cleanup(dinfo);
			return -EBUSY;
		}
		if (dinfo->mobile)
			dinfo->cursor.physical
				= dinfo->gtt_cursor_mem->physical;
		else
			dinfo->cursor.physical = dinfo->aperture.physical
				+ (dinfo->cursor.offset << 12);
		dinfo->cursor.virtual = dinfo->aperture.virtual
			+ (dinfo->cursor.offset << 12);
	}
	if (dinfo->fbmem_gart) {
		if (!(dinfo->gtt_fb_mem =
		      agp_allocate_memory(bridge, dinfo->fb.size >> 12,
					  AGP_NORMAL_MEMORY))) {
			WRN_MSG("cannot allocate framebuffer memory - use "
				"the stolen one\n");
			dinfo->fbmem_gart = 0;
		}
		if (agp_bind_memory(dinfo->gtt_fb_mem,
				    dinfo->fb.offset)) {
			WRN_MSG("cannot bind framebuffer memory - use "
				"the stolen one\n");
			dinfo->fbmem_gart = 0;
		}
	}

	/* update framebuffer memory parameters */
	if (!dinfo->fbmem_gart)
		dinfo->fb.offset = 0;   /* starts at offset 0 */
	dinfo->fb.physical = dinfo->aperture.physical
		+ (dinfo->fb.offset << 12);
	dinfo->fb.virtual = dinfo->aperture.virtual + (dinfo->fb.offset << 12);
	dinfo->fb_start = dinfo->fb.offset << 12;

	/* release agpgart */
	agp_backend_release(bridge);

	if (mtrr)
		set_mtrr(dinfo);

	DBG_MSG("fb: 0x%x(+ 0x%x)/0x%x (0x%p)\n",
		dinfo->fb.physical, dinfo->fb.offset, dinfo->fb.size,
		dinfo->fb.virtual);
	DBG_MSG("MMIO: 0x%x/0x%x (0x%p)\n",
		dinfo->mmio_base_phys, INTEL_REG_SIZE,
		dinfo->mmio_base);
	DBG_MSG("ring buffer: 0x%x/0x%x (0x%p)\n",
		dinfo->ring.physical, dinfo->ring.size,
		dinfo->ring.virtual);
	DBG_MSG("HW cursor: 0x%x/0x%x (0x%p) (offset 0x%x) (phys 0x%x)\n",
		dinfo->cursor.physical, dinfo->cursor.size,
		dinfo->cursor.virtual, dinfo->cursor.offset,
		dinfo->cursor.physical);

	DBG_MSG("options: vram = %d, accel = %d, hwcursor = %d, fixed = %d, "
		"noinit = %d\n", vram, accel, hwcursor, fixed, noinit);
	DBG_MSG("options: mode = \"%s\"\n", mode ? mode : "");

	if (probeonly)
		bailout(dinfo);

	/*
	 * Check if the LVDS port or any DVO ports are enabled.  If so,
	 * don't allow mode switching
	 */
	dvo = intelfbhw_check_non_crt(dinfo);
	if (dvo) {
		dinfo->fixed_mode = 1;
		WRN_MSG("Non-CRT device is enabled ( ");
		i = 0;
		while (dvo) {
			if (dvo & 1) {
				s = intelfbhw_dvo_to_string(1 << i);
				if (s)
					printk("%s ", s);
			}
			dvo >>= 1;
			++i;
		}
		printk(").  Disabling mode switching.\n");
	}

	if (bailearly == 1)
		bailout(dinfo);

	if (FIXED_MODE(dinfo) &&
	    screen_info.orig_video_isVGA != VIDEO_TYPE_VLFB) {
		ERR_MSG("Video mode must be programmed at boot time.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	if (bailearly == 2)
		bailout(dinfo);

	/* Initialise dinfo and related data. */
	/* If an initial mode was programmed at boot time, get its details. */
	if (screen_info.orig_video_isVGA == VIDEO_TYPE_VLFB)
		get_initial_mode(dinfo);

	if (bailearly == 3)
		bailout(dinfo);

	if (FIXED_MODE(dinfo))	/* remap fb address */
		update_dinfo(dinfo, &dinfo->initial_var);

	if (bailearly == 4)
		bailout(dinfo);

	if (intelfb_set_fbinfo(dinfo)) {
		cleanup(dinfo);
		return -ENODEV;
	}

	if (bailearly == 5)
		bailout(dinfo);

#ifdef CONFIG_FB_INTEL_I2C
	/* register I2C bus */
	intelfb_create_i2c_busses(dinfo);
#endif

	if (bailearly == 6)
		bailout(dinfo);

	pci_set_drvdata(pdev, dinfo);

	/* Save the initial register state. */
	i = intelfbhw_read_hw_state(dinfo, &dinfo->save_state,
				    bailearly > 6 ? bailearly - 6 : 0);
	if (i != 0) {
		DBG_MSG("intelfbhw_read_hw_state returned %d\n", i);
		bailout(dinfo);
	}

	intelfbhw_print_hw_state(dinfo, &dinfo->save_state);

	if (bailearly == 18)
		bailout(dinfo);

	/* Cursor initialisation */
	if (dinfo->hwcursor) {
		intelfbhw_cursor_init(dinfo);
		intelfbhw_cursor_reset(dinfo);
	}

	if (bailearly == 19)
		bailout(dinfo);

	/* 2d acceleration init */
	if (dinfo->accel)
		intelfbhw_2d_start(dinfo);

	if (bailearly == 20)
		bailout(dinfo);

	if (noregister)
		bailout(dinfo);

	if (register_framebuffer(dinfo->info) < 0) {
		ERR_MSG("Cannot register framebuffer.\n");
		cleanup(dinfo);
		return -ENODEV;
	}

	dinfo->registered = 1;
	dinfo->open = 0;

	init_waitqueue_head(&dinfo->vsync.wait);
	spin_lock_init(&dinfo->int_lock);
	dinfo->irq_flags = 0;
	dinfo->vsync.pan_display = 0;
	dinfo->vsync.pan_offset = 0;

	return 0;

err_out_pixmap:
	fb_dealloc_cmap(&info->cmap);
err_out_cmap:
	framebuffer_release(info);
	return -ENODEV;
}

static void __devexit
intelfb_pci_unregister(struct pci_dev *pdev)
{
	struct intelfb_info *dinfo = pci_get_drvdata(pdev);

	DBG_MSG("intelfb_pci_unregister\n");

	if (!dinfo)
		return;

	cleanup(dinfo);

	pci_set_drvdata(pdev, NULL);
}

/***************************************************************
 *                       helper functions                      *
 ***************************************************************/

int __inline__ intelfb_var_to_depth(const struct fb_var_screeninfo *var)
{
	DBG_MSG("intelfb_var_to_depth: bpp: %d, green.length is %d\n",
		var->bits_per_pixel, var->green.length);

	switch (var->bits_per_pixel) {
	case 16:
		return (var->green.length == 6) ? 16 : 15;
	case 32:
		return 24;
	default:
		return var->bits_per_pixel;
	}
}

static __inline__ int var_to_refresh(const struct fb_var_screeninfo *var)
{
	int xtot = var->xres + var->left_margin + var->right_margin +
		   var->hsync_len;
	int ytot = var->yres + var->upper_margin + var->lower_margin +
		   var->vsync_len;

	return (1000000000 / var->pixclock * 1000 + 500) / xtot / ytot;
}

/***************************************************************
 *                Various intialisation functions              *
 ***************************************************************/

static void __devinit get_initial_mode(struct intelfb_info *dinfo)
{
	struct fb_var_screeninfo *var;
	int xtot, ytot;

	DBG_MSG("get_initial_mode\n");

	dinfo->initial_vga = 1;
	dinfo->initial_fb_base = screen_info.lfb_base;
	dinfo->initial_video_ram = screen_info.lfb_size * KB(64);
	dinfo->initial_pitch = screen_info.lfb_linelength;

	var = &dinfo->initial_var;
	memset(var, 0, sizeof(*var));
	var->xres = screen_info.lfb_width;
	var->yres = screen_info.lfb_height;
	var->bits_per_pixel = screen_info.lfb_depth;
	switch (screen_info.lfb_depth) {
	case 15:
		var->bits_per_pixel = 16;
		break;
	case 24:
		var->bits_per_pixel = 32;
		break;
	}

	DBG_MSG("Initial info: FB is 0x%x/0x%x (%d kByte)\n",
		dinfo->initial_fb_base, dinfo->initial_video_ram,
		BtoKB(dinfo->initial_video_ram));

	DBG_MSG("Initial info: mode is %dx%d-%d (%d)\n",
		var->xres, var->yres, var->bits_per_pixel,
		dinfo->initial_pitch);

	/* Dummy timing values (assume 60Hz) */
	var->left_margin = (var->xres / 8) & 0xf8;
	var->right_margin = 32;
	var->upper_margin = 16;
	var->lower_margin = 4;
	var->hsync_len = (var->xres / 8) & 0xf8;
	var->vsync_len = 4;

	xtot = var->xres + var->left_margin +
		var->right_margin + var->hsync_len;
	ytot = var->yres + var->upper_margin +
		var->lower_margin + var->vsync_len;
	var->pixclock = 10000000 / xtot * 1000 / ytot * 100 / 60;

	var->height = -1;
	var->width = -1;

	if (var->bits_per_pixel > 8) {
		var->red.offset = screen_info.red_pos;
		var->red.length = screen_info.red_size;
		var->green.offset = screen_info.green_pos;
		var->green.length = screen_info.green_size;
		var->blue.offset = screen_info.blue_pos;
		var->blue.length = screen_info.blue_size;
		var->transp.offset = screen_info.rsvd_pos;
		var->transp.length = screen_info.rsvd_size;
	} else {
		var->red.length = 8;
		var->green.length = 8;
		var->blue.length = 8;
	}
}

static int __devinit intelfb_init_var(struct intelfb_info *dinfo)
{
	struct fb_var_screeninfo *var;
	int msrc = 0;

	DBG_MSG("intelfb_init_var\n");

	var = &dinfo->info->var;
	if (FIXED_MODE(dinfo)) {
	        memcpy(var, &dinfo->initial_var,
		       sizeof(struct fb_var_screeninfo));
		msrc = 5;
	} else {
		const u8 *edid_s = fb_firmware_edid(&dinfo->pdev->dev);
		u8 *edid_d = NULL;

		if (edid_s) {
			edid_d = kmemdup(edid_s, EDID_LENGTH, GFP_KERNEL);

			if (edid_d) {
				fb_edid_to_monspecs(edid_d,
						    &dinfo->info->monspecs);
				kfree(edid_d);
			}
		}

		if (mode) {
			printk("intelfb: Looking for mode in private "
			       "database\n");
			msrc = fb_find_mode(var, dinfo->info, mode,
					    dinfo->info->monspecs.modedb,
					    dinfo->info->monspecs.modedb_len,
					    NULL, 0);

			if (msrc && msrc > 1) {
				printk("intelfb: No mode in private database, "
				       "intelfb: looking for mode in global "
				       "database ");
				msrc = fb_find_mode(var, dinfo->info, mode,
						    NULL, 0, NULL, 0);

				if (msrc)
					msrc |= 8;
			}

		}

		if (!msrc)
			msrc = fb_find_mode(var, dinfo->info, PREFERRED_MODE,
					    NULL, 0, NULL, 0);
	}

	if (!msrc) {
		ERR_MSG("Cannot find a suitable video mode.\n");
		return 1;
	}

	INF_MSG("Initial video mode is %dx%d-%d@%d.\n", var->xres, var->yres,
		var->bits_per_pixel, var_to_refresh(var));

	DBG_MSG("Initial video mode is from %d.\n", msrc);

#if ALLOCATE_FOR_PANNING
	/* Allow use of half of the video ram for panning */
	var->xres_virtual = var->xres;
	var->yres_virtual =
		dinfo->fb.size / 2 / (var->bits_per_pixel * var->xres);
	if (var->yres_virtual < var->yres)
		var->yres_virtual = var->yres;
#else
	var->yres_virtual = var->yres;
#endif

	if (dinfo->accel)
		var->accel_flags |= FB_ACCELF_TEXT;
	else
		var->accel_flags &= ~FB_ACCELF_TEXT;

	return 0;
}

static int __devinit intelfb_set_fbinfo(struct intelfb_info *dinfo)
{
	struct fb_info *info = dinfo->info;

	DBG_MSG("intelfb_set_fbinfo\n");

	info->flags = FBINFO_FLAG_DEFAULT;
	info->fbops = &intel_fb_ops;
	info->pseudo_palette = dinfo->pseudo_palette;

	info->pixmap.size = 64*1024;
	info->pixmap.buf_align = 8;
	info->pixmap.access_align = 32;
	info->pixmap.flags = FB_PIXMAP_SYSTEM;

	if (intelfb_init_var(dinfo))
		return 1;

	info->pixmap.scan_align = 1;
	strcpy(info->fix.id, dinfo->name);
	info->fix.smem_start = dinfo->fb.physical;
	info->fix.smem_len = dinfo->fb.size;
	info->fix.type = FB_TYPE_PACKED_PIXELS;
	info->fix.type_aux = 0;
	info->fix.xpanstep = 8;
	info->fix.ypanstep = 1;
	info->fix.ywrapstep = 0;
	info->fix.mmio_start = dinfo->mmio_base_phys;
	info->fix.mmio_len = INTEL_REG_SIZE;
	info->fix.accel = FB_ACCEL_I830;
	update_dinfo(dinfo, &info->var);

	return 0;
}

/* Update dinfo to match the active video mode. */
static void update_dinfo(struct intelfb_info *dinfo,
			 struct fb_var_screeninfo *var)
{
	DBG_MSG("update_dinfo\n");

	dinfo->bpp = var->bits_per_pixel;
	dinfo->depth = intelfb_var_to_depth(var);
	dinfo->xres = var->xres;
	dinfo->yres = var->xres;
	dinfo->pixclock = var->pixclock;

	dinfo->info->fix.visual = dinfo->visual;
	dinfo->info->fix.line_length = dinfo->pitch;

	switch (dinfo->bpp) {
	case 8:
		dinfo->visual = FB_VISUAL_PSEUDOCOLOR;
		dinfo->pitch = var->xres_virtual;
		break;
	case 16:
		dinfo->visual = FB_VISUAL_TRUECOLOR;
		dinfo->pitch = var->xres_virtual * 2;
		break;
	case 32:
		dinfo->visual = FB_VISUAL_TRUECOLOR;
		dinfo->pitch = var->xres_virtual * 4;
		break;
	}

	/* Make sure the line length is a aligned correctly. */
	if (IS_I9XX(dinfo))
		dinfo->pitch = ROUND_UP_TO(dinfo->pitch, STRIDE_ALIGNMENT_I9XX);
	else
		dinfo->pitch = ROUND_UP_TO(dinfo->pitch, STRIDE_ALIGNMENT);

	if (FIXED_MODE(dinfo))
		dinfo->pitch = dinfo->initial_pitch;

	dinfo->info->screen_base = (char __iomem *)dinfo->fb.virtual;
	dinfo->info->fix.line_length = dinfo->pitch;
	dinfo->info->fix.visual = dinfo->visual;
}

/* fbops functions */

/***************************************************************
 *                       fbdev interface                       *
 ***************************************************************/

static int intelfb_open(struct fb_info *info, int user)
{
	struct intelfb_info *dinfo = GET_DINFO(info);

	if (user)
		dinfo->open++;

	return 0;
}

static int intelfb_release(struct fb_info *info, int user)
{
	struct intelfb_info *dinfo = GET_DINFO(info);

	if (user) {
		dinfo->open--;
		msleep(1);
		if (!dinfo->open)
			intelfbhw_disable_irq(dinfo);
	}

	return 0;
}

static int intelfb_check_var(struct fb_var_screeninfo *var,
			     struct fb_info *info)
{
	int change_var = 0;
	struct fb_var_screeninfo v;
	struct intelfb_info *dinfo;
	static int first = 1;
	int i;
	/* Good pitches to allow tiling.  Don't care about pitches < 1024. */
	static const int pitches[] = {
		128 * 8,
		128 * 16,
		128 * 32,
		128 * 64,
		0
	};

	DBG_MSG("intelfb_check_var: accel_flags is %d\n", var->accel_flags);

	dinfo = GET_DINFO(info);

	/* update the pitch */
	if (intelfbhw_validate_mode(dinfo, var) != 0)
		return -EINVAL;

	v = *var;

	for (i = 0; pitches[i] != 0; i++) {
		if (pitches[i] >= v.xres_virtual) {
			v.xres_virtual = pitches[i];
			break;
		}
	}

	/* Check for a supported bpp. */
	if (v.bits_per_pixel <= 8)
		v.bits_per_pixel = 8;
	else if (v.bits_per_pixel <= 16) {
		if (v.bits_per_pixel == 16)
			v.green.length = 6;
		v.bits_per_pixel = 16;
	} else if (v.bits_per_pixel <= 32)
		v.bits_per_pixel = 32;
	else
		return -EINVAL;

	change_var = ((info->var.xres != var->xres) ||
		      (info->var.yres != var->yres) ||
		      (info->var.xres_virtual != var->xres_virtual) ||
		      (info->var.yres_virtual != var->yres_virtual) ||
		      (info->var.bits_per_pixel != var->bits_per_pixel) ||
		      memcmp(&info->var.red, &var->red, sizeof(var->red)) ||
		      memcmp(&info->var.green, &var->green,
			     sizeof(var->green)) ||
		      memcmp(&info->var.blue, &var->blue, sizeof(var->blue)));

	if (FIXED_MODE(dinfo) &&
	    (change_var ||
	     var->yres_virtual > dinfo->initial_var.yres_virtual ||
	     var->yres_virtual < dinfo->initial_var.yres ||
	     var->xoffset || var->nonstd)) {
		if (first) {
			ERR_MSG("Changing the video mode is not supported.\n");
			first = 0;
		}
		return -EINVAL;
	}

	switch (intelfb_var_to_depth(&v)) {
	case 8:
		v.red.offset = v.green.offset = v.blue.offset = 0;
		v.red.length = v.green.length = v.blue.length = 8;
		v.transp.offset = v.transp.length = 0;
		break;
	case 15:
		v.red.offset = 10;
		v.green.offset = 5;
		v.blue.offset = 0;
		v.red.length = v.green.length = v.blue.length = 5;
		v.transp.offset = v.transp.length = 0;
		break;
	case 16:
		v.red.offset = 11;
		v.green.offset = 5;
		v.blue.offset = 0;
		v.red.length = 5;
		v.green.length = 6;
		v.blue.length = 5;
		v.transp.offset = v.transp.length = 0;
		break;
	case 24:
		v.red.offset = 16;
		v.green.offset = 8;
		v.blue.offset = 0;
		v.red.length = v.green.length = v.blue.length = 8;
		v.transp.offset = v.transp.length = 0;
		break;
	case 32:
		v.red.offset = 16;
		v.green.offset = 8;
		v.blue.offset = 0;
		v.red.length = v.green.length = v.blue.length = 8;
		v.transp.offset = 24;
		v.transp.length = 8;
		break;
	}

	if (v.xoffset < 0)
		v.xoffset = 0;
	if (v.yoffset < 0)
		v.yoffset = 0;

	if (v.xoffset > v.xres_virtual - v.xres)
		v.xoffset = v.xres_virtual - v.xres;
	if (v.yoffset > v.yres_virtual - v.yres)
		v.yoffset = v.yres_virtual - v.yres;

	v.red.msb_right = v.green.msb_right = v.blue.msb_right =
			  v.transp.msb_right = 0;

        *var = v;

	return 0;
}

static int intelfb_set_par(struct fb_info *info)
{
	struct intelfb_hwstate *hw;
        struct intelfb_info *dinfo = GET_DINFO(info);

	if (FIXED_MODE(dinfo)) {
		ERR_MSG("Changing the video mode is not supported.\n");
		return -EINVAL;
	}

	hw = kmalloc(sizeof(*hw), GFP_ATOMIC);
	if (!hw)
		return -ENOMEM;

	DBG_MSG("intelfb_set_par (%dx%d-%d)\n", info->var.xres,
		info->var.yres, info->var.bits_per_pixel);

	/*
	 * Disable VCO prior to timing register change.
	 */
	OUTREG(DPLL_A, INREG(DPLL_A) & ~DPLL_VCO_ENABLE);

	intelfb_blank(FB_BLANK_POWERDOWN, info);

	if (ACCEL(dinfo, info))
		intelfbhw_2d_stop(dinfo);

	memcpy(hw, &dinfo->save_state, sizeof(*hw));
	if (intelfbhw_mode_to_hw(dinfo, hw, &info->var))
		goto invalid_mode;
	if (intelfbhw_program_mode(dinfo, hw, 0))
		goto invalid_mode;

#if REGDUMP > 0
	intelfbhw_read_hw_state(dinfo, hw, 0);
	intelfbhw_print_hw_state(dinfo, hw);
#endif

	update_dinfo(dinfo, &info->var);

	if (ACCEL(dinfo, info))
		intelfbhw_2d_start(dinfo);

	intelfb_pan_display(&info->var, info);

	intelfb_blank(FB_BLANK_UNBLANK, info);

	if (ACCEL(dinfo, info)) {
		info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |
		FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT |
		FBINFO_HWACCEL_IMAGEBLIT;
	} else
		info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;

	kfree(hw);
	return 0;
invalid_mode:
	kfree(hw);
	return -EINVAL;
}

static int intelfb_setcolreg(unsigned regno, unsigned red, unsigned green,
			     unsigned blue, unsigned transp,
			     struct fb_info *info)
{
	struct intelfb_info *dinfo = GET_DINFO(info);

#if VERBOSE > 0
	DBG_MSG("intelfb_setcolreg: regno %d, depth %d\n", regno, dinfo->depth);
#endif

	if (regno > 255)
		return 1;

	if (dinfo->depth == 8) {
		red >>= 8;
		green >>= 8;
		blue >>= 8;

		intelfbhw_setcolreg(dinfo, regno, red, green, blue,
				    transp);
	}

	if (regno < 16) {
		switch (dinfo->depth) {
		case 15:
			dinfo->pseudo_palette[regno] = ((red & 0xf800) >>  1) |
				((green & 0xf800) >>  6) |
				((blue & 0xf800) >> 11);
			break;
		case 16:
			dinfo->pseudo_palette[regno] = (red & 0xf800) |
				((green & 0xfc00) >>  5) |
				((blue  & 0xf800) >> 11);
			break;
		case 24:
			dinfo->pseudo_palette[regno] = ((red & 0xff00) << 8) |
				(green & 0xff00) |
				((blue  & 0xff00) >> 8);
			break;
		}
	}

	return 0;
}

static int intelfb_blank(int blank, struct fb_info *info)
{
	intelfbhw_do_blank(blank, info);
	return 0;
}

static int intelfb_pan_display(struct fb_var_screeninfo *var,
			       struct fb_info *info)
{
	intelfbhw_pan_display(var, info);
	return 0;
}

/* When/if we have our own ioctls. */
static int intelfb_ioctl(struct fb_info *info, unsigned int cmd,
			 unsigned long arg)
{
	int retval = 0;
	struct intelfb_info *dinfo = GET_DINFO(info);
	u32 pipe = 0;

	switch (cmd) {
		case FBIO_WAITFORVSYNC:
			if (get_user(pipe, (__u32 __user *)arg))
				return -EFAULT;

			retval = intelfbhw_wait_for_vsync(dinfo, pipe);
			break;
		default:
			break;
	}

	return retval;
}

static void intelfb_fillrect (struct fb_info *info,
			      const struct fb_fillrect *rect)
{
        struct intelfb_info *dinfo = GET_DINFO(info);
	u32 rop, color;

#if VERBOSE > 0
	DBG_MSG("intelfb_fillrect\n");
#endif

	if (!ACCEL(dinfo, info) || dinfo->depth == 4) {
		cfb_fillrect(info, rect);
		return;
	}

	if (rect->rop == ROP_COPY)
		rop = PAT_ROP_GXCOPY;
	else /* ROP_XOR */
		rop = PAT_ROP_GXXOR;

	if (dinfo->depth != 8)
		color = dinfo->pseudo_palette[rect->color];
	else
		color = rect->color;

	intelfbhw_do_fillrect(dinfo, rect->dx, rect->dy,
			      rect->width, rect->height, color,
			      dinfo->pitch, info->var.bits_per_pixel,
			      rop);
}

static void intelfb_copyarea(struct fb_info *info,
			     const struct fb_copyarea *region)
{
        struct intelfb_info *dinfo = GET_DINFO(info);

#if VERBOSE > 0
	DBG_MSG("intelfb_copyarea\n");
#endif

	if (!ACCEL(dinfo, info) || dinfo->depth == 4) {
		cfb_copyarea(info, region);
		return;
	}

	intelfbhw_do_bitblt(dinfo, region->sx, region->sy, region->dx,
			    region->dy, region->width, region->height,
			    dinfo->pitch, info->var.bits_per_pixel);
}

static void intelfb_imageblit(struct fb_info *info,
			      const struct fb_image *image)
{
        struct intelfb_info *dinfo = GET_DINFO(info);
	u32 fgcolor, bgcolor;

#if VERBOSE > 0
	DBG_MSG("intelfb_imageblit\n");
#endif

	if (!ACCEL(dinfo, info) || dinfo->depth == 4
	    || image->depth != 1) {
		cfb_imageblit(info, image);
		return;
	}

	if (dinfo->depth != 8) {
		fgcolor = dinfo->pseudo_palette[image->fg_color];
		bgcolor = dinfo->pseudo_palette[image->bg_color];
	} else {
		fgcolor = image->fg_color;
		bgcolor = image->bg_color;
	}

	if (!intelfbhw_do_drawglyph(dinfo, fgcolor, bgcolor, image->width,
				    image->height, image->data,
				    image->dx, image->dy,
				    dinfo->pitch, info->var.bits_per_pixel)) {
		cfb_imageblit(info, image);
		return;
	}
}

static int intelfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
{
        struct intelfb_info *dinfo = GET_DINFO(info);
	u32 physical;
#if VERBOSE > 0
	DBG_MSG("intelfb_cursor\n");
#endif

	if (!dinfo->hwcursor)
		return -ENODEV;

	intelfbhw_cursor_hide(dinfo);

	/* If XFree killed the cursor - restore it */
	physical = (dinfo->mobile || IS_I9XX(dinfo)) ? dinfo->cursor.physical :
		   (dinfo->cursor.offset << 12);

	if (INREG(CURSOR_A_BASEADDR) != physical) {
		u32 fg, bg;

		DBG_MSG("the cursor was killed - restore it !!\n");
		DBG_MSG("size %d, %d   pos %d, %d\n",
			cursor->image.width, cursor->image.height,
			cursor->image.dx, cursor->image.dy);

		intelfbhw_cursor_init(dinfo);
		intelfbhw_cursor_reset(dinfo);
		intelfbhw_cursor_setpos(dinfo, cursor->image.dx,
					cursor->image.dy);

		if (dinfo->depth != 8) {
			fg =dinfo->pseudo_palette[cursor->image.fg_color];
			bg =dinfo->pseudo_palette[cursor->image.bg_color];
		} else {
			fg = cursor->image.fg_color;
			bg = cursor->image.bg_color;
		}
		intelfbhw_cursor_setcolor(dinfo, bg, fg);
		intelfbhw_cursor_load(dinfo, cursor->image.width,
				      cursor->image.height,
				      dinfo->cursor_src);

		if (cursor->enable)
			intelfbhw_cursor_show(dinfo);
		return 0;
	}

	if (cursor->set & FB_CUR_SETPOS) {
		u32 dx, dy;

		dx = cursor->image.dx - info->var.xoffset;
		dy = cursor->image.dy - info->var.yoffset;

		intelfbhw_cursor_setpos(dinfo, dx, dy);
	}

	if (cursor->set & FB_CUR_SETSIZE) {
		if (cursor->image.width > 64 || cursor->image.height > 64)
			return -ENXIO;

		intelfbhw_cursor_reset(dinfo);
	}

	if (cursor->set & FB_CUR_SETCMAP) {
		u32 fg, bg;

		if (dinfo->depth != 8) {
			fg = dinfo->pseudo_palette[cursor->image.fg_color];
			bg = dinfo->pseudo_palette[cursor->image.bg_color];
		} else {
			fg = cursor->image.fg_color;
			bg = cursor->image.bg_color;
		}

		intelfbhw_cursor_setcolor(dinfo, bg, fg);
	}

	if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) {
		u32 s_pitch = (ROUND_UP_TO(cursor->image.width, 8) / 8);
		u32 size = s_pitch * cursor->image.height;
		u8 *dat = (u8 *) cursor->image.data;
		u8 *msk = (u8 *) cursor->mask;
		u8 src[64];
		u32 i;

		if (cursor->image.depth != 1)
			return -ENXIO;

		switch (cursor->rop) {
		case ROP_XOR:
			for (i = 0; i < size; i++)
				src[i] = dat[i] ^ msk[i];
			break;
		case ROP_COPY:
		default:
			for (i = 0; i < size; i++)
				src[i] = dat[i] & msk[i];
			break;
		}

		/* save the bitmap to restore it when XFree will
		   make the cursor dirty */
		memcpy(dinfo->cursor_src, src, size);

		intelfbhw_cursor_load(dinfo, cursor->image.width,
				      cursor->image.height, src);
	}

	if (cursor->enable)
		intelfbhw_cursor_show(dinfo);

	return 0;
}

static int intelfb_sync(struct fb_info *info)
{
        struct intelfb_info *dinfo = GET_DINFO(info);

#if VERBOSE > 0
	DBG_MSG("intelfb_sync\n");
#endif

	if (dinfo->ring_lockup)
		return 0;

	intelfbhw_do_sync(dinfo);
	return 0;
}

redpajama_set_name: RedPajamaGithub


transavia.com Selects Accenture and Mirabeau to Deliver new E-commerce Services as the Carrier Aims to Become a "Digital Airline"
Amsterdam; Oct. 14, 2013 – Airline company transavia.com today announced that it has signed contracts with Accenture (NYSE: ACN) and Mirabeau to help upgrade its online capabilities. The three organizations are collaborating to improve the airline's online booking and travel-related services. The contracts also grant preferred supplier status for providing services in other areas of transavia.com. Financial details were not disclosed.
As a subsidiary of KLM Royal Dutch Airlines, transavia.com provides flights to 100 destinations throughout Europe, the Middle East and North Africa. transavia.com intends to transform its e-commerce environment in line with its strategy to provide customers with a better online experience. It will offer a range of ancillary services through its web and mobile channels, and will expand the online services to those passengers who have booked through a tour operator.
Under the agreement, Accenture is transavia.com's preferred provider for delivering the online vision for transavia.com, leveraging the new e-commerce solution Navitaire dotREZ. The Navitaire dotREZ web platform allows companies to service passengers online through multiple distribution channels including web, mobile, native applications as well as social media.
Mirabeau will implement transavia.com's online strategy, customer experience and sales activity through the Sitecore platform. In the process, Mirabeau will define an entirely new digital identity for transavia.com and translate that identity across diverse digital touch points such as web, tablet and mobile. Mirabeau also is responsible for providing the managed services that operate and maintain the new platform.
Navitaire is a wholly-owned subsidiary of Accenture and transavia.com is currently a user of the Navitaire New Skies reservation system. This new agreement is the most recent example of Accenture's work in supporting air carriers that are making the transition into a "digital airline" operation.
transavia.com, a member of the AIR FRANCE KLM Group, provides scheduled service and charter flights to 100 destinations, primarily in the Mediterranean area and popular winter sports destinations. transavia.com distinguishes itself through its 'low fare with care' policy and offers an attractive basic price with additional (paid) products and services. In the Netherlands, the airline flies from the national airport of Amsterdam Airport Schiphol, as well as the regional airports of Rotterdam The Hague Airport, Eindhoven Airport and Groningen Airport Eelde. transavia.com also operates from Paris through Transavia France. Nearly 90% of airline tickets are sold through the website, which receives more than 1.5 million unique visitors monthly, making this low-cost airline one of the largest online shops in the Netherlands.
During the annual Feather Awards (Verenuitreiking) in 2013, transavia.com was chosen Best Low-Cost and Best Charter Airline by the Dutch travel sector for the fifth time in a row.
Navitaire (www.navitaire.com ) delivers industry-leading technology services supporting growth, profitability and innovation to more than 50 airlines worldwide, including many of the world's most successful airlines. Navitaire offers a full suite of proven solutions focused on revenue generation and streamlining costs in the areas of reservations, ancillary sales, distribution, revenue management, revenue accounting and business intelligence. A wholly owned subsidiary of Accenture, Navitaire has offices in North America, Europe, Asia and Australia.
Mirabeau is a Netherlands-based agency, leading in web- and mobile application development. Mirabeau creates and implements the digital marketing strategy for a number of large enterprises and brands in the Netherlands. We combine our knowledge of Design, Technology and Marketing to create powerful solutions for our clients, with whom we maintain long-term and meaningful relationships. Mirabeau focuses on digital business applications for clients like ING, MoneYou, Air France-KLM, AEGON and Nationale-Nederlanden.


Are you looking to break into the Digital Marketing industry – and get paid to learn skills that can guarantee you earning potential for an entire career? Then, look no further, because WrightIMC is looking for its next SEO Rockstar intern.
Our philosophy is to promote from within, which is why most of our fulltime team members were hired originally as paid interns. We train interns (we like to think of them as full-time job candidates) on WrightIMC's approach to holistic online marketing. As an intern, we expect you to be a part of the team. You won't be making coffee runs or taking lunch orders. You'll be given real work with real deadlines.
Because we promote from within when possible, our intern program is designed to better your skills and knowledge of the field. Each intern has the option of getting Google Analytics and Google AdWords certified at the company's expense – a benefit to you, the company, and the client. We also require each team member (including interns) to become a Subject Matter Expert (SME), which is a team member who wants to have advanced or specialized knowledge in a specialized area of our industry. SMEs are given the opportunity to use company resources to go to conferences and/or purchase any learning material needed to know more about their designated subject matter.
As a team member of WrightIMC, you will have access to local networking events such as DFWSEM, DFWIMA, and SMCDallas. You will also have access to any special events that WrightIMC covers should you want to volunteer.
So, what are we looking for in an internship candidate?
We can teach you 60% of what you need to know, but we expect you to spend time researching and learning the remaining 40% of the trade in Internet marketing. This means time researching, practicing and reading during your free time. For the right person that is a pleasure, rather than a chore. If you already have a lot of SEO/SEM experience, you must also have an open mind. We have our own process that may be different than what you learned somewhere else. And, it works well, so we expect our employees to follow it.
This is a paid position and is based in our offices in Plano, Texas. We will not consider candidates who need to work from home or other geographical locations. Fill out the application below to apply. Follow the atmosphere on Twitter at @WrightIMC!


Wrap the outside of pan with 2 layers of heavy duty foil, covering the bottom and extending up sides.
Place caramels and milk in small microwavable bowl. Microwave on HIGH 3 minutes or until caramels are completely melted, stirring after each minute. Pour ½ of the caramel mixture into crust. Refrigerate 10 minutes. Cover and reserve remaining caramel mixture in refrigerator for later use.
Place 8 oz of cream cheese, 1/3 cup sugar and ¼ cup cornstarch in large bowl, beat at low speed until creamy, scraping occasionally.
Beat in 3-8oz. packages cream cheese.
Add ¾ cup heavy whipping cream and beat just to blend.
Pour over caramel mixture in crust.
Place pan in large shallow pan containing hot water about 1 inch up sides of pan. Bake at 350 degrees 1 hour and 10-15 minutes. The center should barely jiggle when you shake the pan.
Cool on wire rack 1 hour. Cover with plastic wrap and refrigerate overnight.
Microwave ¾ cup chocolate chips and 1/3 cup whipping cream in a glass bowl at HIGH 1 minute; stir until chocolate melts. Chill 30 minutes. Pour over cheesecake.
Microwave reserved caramel mixture for 15 seconds just before serving cheesecake; drizzle over cheesecake. Sprinkle with remaining ½ cup pecans.


"America is my country, but Paris is my hometown." A character in a movie we were watching quoted Gertrude Stein, and I felt a pang.
"That's us, isn't it?" said D. The others nodded.
We just rented out our Paris apartment for two years.
Two years til you have it again - how sad - but how wonderful to have such a thing to look forward to! Regards, Pollyanna!
"America is my country, but Paris is my hometown." That's how I feel, living the perfect expat life in Santa Monica, California. Yet I could also say, France is my (true) country, but Santa Monica is my hometown (for now). How deliciously confusing... That's what makes (expat) life interesting, non?
It's chilly and raining in Paris and the Loire Valley today. And that's August weather! It's all downhill from here, weather-wise, until next May. Enjoy the blue skies and warm temperatures in L.A.


text:
The City, Not Long After
Released: Apr 15, 2014
Publisher: Open Road Media
A chilling postapocalyptic novel of hope, despair, art, and war from the Nebula and Philip K. Dick Award–winning author of The Falling Woman. A plague wiped out most of the population, but some have been spared. In San Francisco, those who were left—painters, writers, dreamers—began rebuilding the city in their image: a society based on art, community, and peace. But not everyone has the same pacifist ideals. When a mysterious young woman, Jax, appears in San Francisco, she brings disturbing news. There's a power-hungry man, a general, moving across California, annexing cities and rebuilding his own version of America, willing to destroy anyone who stands in his way. His sights are set on the Golden Gate Bridge, and his army will soon descend, bringing guns, determination, and violence. If Jax and her allies are to survive, they'll have to defend themselves with nothing more than their creativity—and the soul of a city that refuses to be dominated. Drawing comparisons to the mind-bending work of Gabriel Garcia MArquez, this lush and thought-provoking dystopian novel is an examination of human spirit, for better or worse, and a magical journey into what it means to survive.
Author(s): Pat Murphy
Genre: Fantasy, Sci Fi, Urban Fiction
Original Publish Date: Apr 15, 2014
Narrator(s): Marguerite Gavin
Genre: Suspense Thriller, General Fiction, Sci Fi, Fantasy
Product Number DD6930
Publisher: Blackstone Audio, Inc.
by Willa Cather
by Louisa May Alcott
Three Soldiers
by John Dos Passos
by H.G. Wells
by Anna Sewell
by Emily Bronte
The Prince and the P...

redpajama_set_name: RedPajamaCommonCrawl


Photo by Jeffery Beall on Flickr.
**UPDATE - June 15, 2017** WE WON!
The 14th Street corridor is booming, and its bus service has not kept up. In last five years the number of businesses along this corridor have doubled to over 14,000. On an average weekday over 15,000 riders take the current 14th Street buses, making them among the most used in the region.
Bus service has not kept pace. The current lines stop too often, get backed up and spread out, and congestion and ride times are getting worse. This is only exacerbated by the work being done on Beach Drive and the Metro system's struggles.
It doesn't have to be this way. Express bus service could shorten commutes for thousands, better connect communities to jobs, and stimulate revenue and taxes in the area. WMATA already has the plans, they just need $1.4 million in the budget to implement them.
Map by Peter Dovak. Used with permission.
Do you know others who would also be in support? Make sure to share with them! Are you connected with an organization or business that is willing to sign on in support? Ask them to join a growing list of organizational supporters!


text:
Saul Panzer è un personaggio di fantasia nato dalla penna dello scrittore statunitense Rex Stout, che compare nelle opere della serie di Nero Wolfe.

Il personaggio
Panzer è uno dei migliori detective in circolazione, per cui di frequente è assunto da Nero Wolfe per aiutare Archie Goodwin o per svolgere lavori che Wolfe preferisce tenere segreti al suo aiutante. Non è un uomo che si faccia notare; veste sciatto, ha un grande naso, e dà sempre l'impressione di aver bisogno di un rasoio. Nonostante ciò, Archie e Wolfe nutrono un enorme rispetto per lui. I suoi prezzi sono i più alti di tutta New York, ma Archie è sicuro che valga ogni centesimo:

Saul ha una memoria fotografica che gli consente di collegare a prima vista e in maniera permanente nomi e identità di ogni persona che incontra con il suo personale archivio mentale.

Come per altri personaggi, Stout fornisce informazioni biografiche contraddittorie su Saul Panzer. Nei primi romanzi è detto esplicitamente che è scapolo. Successivamente, nei racconti Non credo agli alibi (1948) e Nero Wolfe nella camera a gas (1949), si fa menzione della moglie di Saul e dei suoi bambini, così come nei romanzi Nient'altro che la verità (1949) e Nelle migliori famiglie (1950). In seguito la famiglia di Saul non viene più menzionata e Stout non chiarisce se abbia divorziato oppure se l'autore faccia ricorso all'espediente narrativo della continuità retroattiva.

Nei romanzi di Wolfe, Saul occupa diverse residenze. Nel già citato Nero Wolfe nella camera a gas vive con la moglie a Brooklyn. Nel racconto Nero Wolfe raggira l'accusa (1955), ha un appartamento da scapolo al quinto piano di un edificio rimodernato sulla 38ª Strada Est a Manhattan, tra la Lexington Avenue e la Terza Avenue. Il soggiorno ha quattro lampade, un grande pianoforte a coda, una parete con diverse finestre, un'altra piena di libri e le altre hanno quadri e ripiani con diversi oggetti, da campioni di minerali a zanne di tricheco. Stout ripete la descrizione del soggiorno di Saul quasi con le stesse identiche parole nel racconto Il picnic del quattro luglio e nel romanzo Nero Wolfe apre la porta al delitto.

Serie TV
Nella serie televisiva trasmessa dalla RAI negli anni settanta, con Tino Buazzelli nella parte di Nero Wolfe, il personaggio di Saul Panzer è interpretato da Roberto Pistone.

Nella serie di telefilm del 1981 della NBC, andata in onda in Italia negli anni ottanta, il personaggio di Saul Panzer è interpretato da George Wyner.

Note

Collegamenti esterni

Panzer, Saul
Investigatori immaginari

redpajama_set_name: RedPajamaWikipedia


text:
Home > STUDENT WORK > 2122
Schools as Criminal 'Hot Spots': A Replication and Extension
Paula M. Kautt, University of Nebraska at Omaha
Dr. Miriam A. DeLon
The rise of youth involvement in crime and the increase in crime associated with schools has prompted growing national concern and evoked serious scholarly attention. Traditionally, research involving youth and crime centers on offender rather than environmental characteristics. The purpose of this work is to shift the emphasis from the individual to the environment by replicating and extending the work of Roncek and associates which was based, in part, on Cohen and Felson's Routine Activities theory. The work by Roncek and associates demonstrated that residential blocks with or adjacent to public high schools have higher incidence of crime than other residential blocks. In this study, all Cleveland schools registered with the Ohio Department of Education were used as independent variable measures for the dependent variable of Cleveland burglaries from 1989 to 1991. The school measures were decomposed into separate categories for public and private as well as for grade levels served. Thus, these distinctions differentiate between elementary, middle and high schools. Additionally, measures of adjacency and the effects of enrollment size were taken into account as independent variables. Other independent variables that controlled for social and environmental characteristics were also included. The analyses conducted were t-tests, regression analysis and Tobit analysis. The results are somewhat surprising. Unlike the work by Roncek and associates, here public high schools were not found to have a significant effect—either for presence or adjacency. In fact, the only schools found to have significant effects were public elementary schools serving grades kindergarten through five (k-5)—which had statistical significance for presence and primary adjacency. Also, unlike previous findings, this study found that size of enrollment was a statistically significant variable. As indicated by the Tobit analyses, the effect above the limit for k-5 enrollment/presence shows an increase of .101 in burglaries per additional student on blocks with burglaries while the probability effect shows a .019 increase in the probability of a block without burglaries having one. For primary adjacency the effect above the limit shows an increase in the number of burglaries by .028 per additional student in the school to which the block with burglaries is adjacent while the probability effect indicates a .005 increase in the probability of an adjacent block without burglaries to have a burglary per additional student. It is unclear from the data why these public elementary schools demonstrated an effect while other public elementary schools did not. Since most of the grades serviced overlap, the overall environment, facilities and activity levels should be relatively comparable for all public elementary schools. One possible explanation of this difference is that the majority of the public elementary schools are k-5 rather than any of the other variations. The effect could be based on sheer numbers. In any case, the need for further replications of these findings is clearly necessary before any meaningful conclusions can be drawn regarding the relationship between burglary and such schools. Clearly, the potential dividends of reducing burglary through controlling school enrollments are great and merit further attention.
A Thesis Presented to the Department of Criminal Justice and the Faculty of the Graduate College University of Nebraska In Partial Fulfillment of the Requirements for the Degree Master of Arts University of Nebraska at Omaha. Copyright Paula M. Kautt November, 1996.
Kautt, Paula M., "Schools as Criminal 'Hot Spots': A Replication and Extension" (1996). Student Work. 2122.
https://digitalcommons.unomaha.edu/studentwork/2122


Texting is a way of providing information to willing customers who have texted an advertised word to a specific SMS abbreviated phone number. Upon receipt of the consumer's text message, the advertiser sends a reply, such as a game, video, coupon, weblink, or product-related information. Since mobile is an interactive mass media, you can utilize valuable viral marketing methods and build a database of interested consumers.
Other methods such as Bluetooth can also be used to download content and send information to people's mobile devices. This technology allows shoppers to access information and download content to their PDAs directly from mall advertising panels. It seeks out Bluetooth devices so if a Bluetooth-enabled device is activated within the vicinity, this product will try to communicate with it. The user will always have the choice to accept or reject the content.
Please contact your JCDecaux representative for final approval.


text:
kierra sheard booking
Two gifted and Anointed talents from the same family! Her second CD, This is Me, was released in 2006, and debuted at #1 on Billboard's Top Gospel Albums chart. They appreciate the sound that God has given me and my brother, and they say they can see our growth." Kierra hopes that others who hear this CD will also see her growth and maturity. "I know I try to claim that I'm flawless then I look in the mirror," says Sheard, who confesses to an ongoing battle with weight. SISTHER MENTORSHIP PROGRAM. The estimated booking fee range to book Kierra Sheard for your event, Please Contact.
You can contact Kierra Sheard through... Read more.
Kierra continues to make music and has released several other albums. "I wanted to do nails—acrylic nails. Your entered and confirmed passwords are not matching. Fan safety is our priority.
It was important to Kierra that she and her brother completed this album on their own, without their parents' assistance or influence. Rather than taking the time to dig through the internet, I can just go to Booking Agent Info and its all there for me. — Matthew Ardill, Comedy Album Book Club Podcast. The hour long episodes are primarily told through the eyes of Kierra and J. "'Mighty' was originally a studio track," she says. Want create site? "But you have to get to the place where you're content with what God has given you and not go by what society says is beautiful. All Rights Reserved.
Bring his one of a kind, dynamic ministry to your event! We may have Kierra Sheard's manager information, along with their booking agents info as well. I want them to understand that she's poured into me and she's instilled ministry into me.", A self-proclaimed "daddy's girl," Kierra also has always had a very special relationship with her mother. Its members include the singer's three aunts and her mother, Karen Clark Sheard. You can find new, Singer | Song Writer | Actress | Activist.
Trying to find the right performance to entertain your audience?
Both J. Moss and Kierra Sheard were great! Katching Kierra The Experience Virtual Tour - WEST. The cds' first single, "Mighty," written by Kierra, is an upbeat, high praise worship song, which has been creating a huge buzz at radio. Sheard's quest began when she launched her professional solo career in 2004. ..with the contact information for Kierra Sheard agent, manager, and publicist.
Book Kierra Sheard. 945 members.
That was followed by 2006's This Is Me. It's one thing to be blessed with the voice of an angel. If you would like to speak to someone immediately, feel free to give us a call. You can get the contact details for Kierra Sheard press team at Booking Agent Info. Hit singles include "You Don't Know," "Why Me" and "God in Me. All American Entertainment (AAE) exclusively represents the interests of talent buyers, and does not claim to be the agency or management for any artist or celebrity on this site. Find Free WordPress Themes and plugins. });
Leading off with the exuberant pop-infused single "2nd Win," the set is now spinning off its second single, the ballad "Flaws," which provides an introspective about life's insecurities. Kierra was also nominated for four Stellar Awards for that CD: Female Vocalist of the Year, Contemporary Female Vocalist of the Year, Contemporary CD of the Year and Artist of the Year. Leave your message and contact information below. Drew ("2nd Win") and songwriters Justin Jones, Justin Brooks and Lakisha Barnes.
Sheard delivers that and more on her Stellar Award-nominated fifth album, Graceland (Karew Records), which debuted at #1 on Billboard's and iTunes' Gospel Albums charts.
Kierra released three chart-topping and award-winning CDs at EMI Gospel. "EMI gave me a great opportunity and they did an awesome job because they put me on the map," says Kierra. Whether you are looking to get in touch with Kierra Sheard's agent for an event, or Kierra Sheard management for an endorsement, we aim to provide you with the best and most accurate contacts. Our website aims to provide the agent, manager, and publicist contact details for Kierra Sheard.
I am so looking forward to her next event!!! listeners: [], "I am a worshipper, and, surprisingly, I never recorded any worship songs on my previous CD projects. I enjoyed every moment of it. Facebook is showing information to help you better understand the purpose of a Page.
forms : { A budding entrepreneur as well, she started her own clothing line June 20, 2015 entitled Eleven60 (www.myeleven60.com).
AAE Music is a talent booking agency for paid events only. She's the founder of BRL (Bold! But on this album, you'll hear my praise and worship songs, as well as other great sounds.
Our extensive relationships and reputation in the music industry allow us to book virtually any artist in the world. While at Wayne State, Kierra developed an interest in clinical psychology, and she hopes to pursue a master's degree in that subject area. callback: callback Both of my parents have really taught me what it means to be a disciple, which is to do ministry and spread the Gospel and to meet the needs of the people. Page Transparency See More.
Kierra also struggles with juggling her new found independence with her strong family bonds, losing weight and love interests. Submit your inquiry by completing the form below. "My hope for this CD is that it rebrands me as an artist and that people are not just associating me with 'little KiKi,' or 'little Kierra,' who is out here just because mommy pushed me to do something. At Kierra's age, she has already taken this world by storm and have made a great impact. If you want the Kierra Sheard email address for their management team, or booking agency, we have that available for you to view by signing up.
Sheard delivers that and more on her Stellar Award-nominated fifth album, Graceland (Karew Records), which debuted at #1 on Billboard's and iTunes' Gospel Albums charts. voice? CONTACT. By 2003, Kierra had a label deal with EMI Gospel (now Motown Gospel), which propelled her into music stardom—churning out hits that showed her vocal prowess and diversity, such as "You Don't Know," "Love Like Crazy," "Praise Him Now," and "Invisible.". The CD won a GMA Dove Award for Best Recorded Urban Gospel Album and Kierra won a Stellar Award for Contemporary Female Vocalist of the Year.
During normal business hours, we respond to most inquiries within 4 hours. Kierra Sheard email, contact Kierra Sheard management, Kierra Sheard manager for business, bookings, pricing, hire. Kierra exudes both humility and confidence over her new project. She was also nominated in the Contemporary Artist of the Year category. That colorful versatility provides the creative blueprint for Sheard's contemporary urban inspirational sound. Brotha Dre has shared the stage with Lecrae, Andy Mineo, Da' T.R.U.T.H., Derek Minor, Steven Malcolm, Canon, nobigdyl., Kierra Sheard, Tye Tribbett, Todd Dulaney and more!
Ddg Valedictorian Numbers, Minecraft Weebly Chromebook, Défi Sportif 2021, Desiree Lindstrom Net Worth, Insta Story Viewer, Rule Of Thirds Reservations, Kakashi Susanoo Vs Sasuke Susanoo, Used Olympic Weight Sets, Andrea Ali Hair, Skutt Kiln 1027, Kenmore Elite 795 Ice Maker Leaking, Geoffrey Garrett Actor Cats, Creepy Bunny Mask Roblox, Kathy Staff Net Worth, What Did Pumpkin The Raccoon Die From, Chris Tucker Net Worth 2000, Famous Dog And Dragon Couples, Danalock V4 Release Date, Aicpa Ethics Exam Answers Pdf, Geoffrey Garrett Actor Cats,
kierra sheard booking 2020


1KW Solar Panel Charger PV (4) 255W Watt 1000W Poly Power System Off/On Grid. Click here to view full size.
Click to close full size. This solar panel has the junction box with diode on the backside to make it easy to connect to your charge controller or other device. Our panels are made to the higher degree of quality and craftsmanship. They are all made using true. Grade solar cells made in Germany by one of the worlds largest solar cell manufactures.
This ensures the panel will be putting out the highest power possible at all light angles. We also use 3.2mm high transmission tempered glass and encapsulated in EVA to make sure there is no damage to the cells from the environment. The cells are not chipped up like the other off grid solar panels on the market. High Efficiency 3 Bus Bar 30 Volt Solar Panels.
3 Bus Bar achieves a higher efficiency under all light angles and cloudy conditions. Compared to a traditional 2 Bus Bar Solar cells that our competitors carry. We are located in Silicon Valley, which continues to be the leading hub for high-tech innovation and development. Our product lines range in assisting the weekend DIY'ers to light commercial construction projects with the highest quality products available on the market today. With the combined years of experience in the solar industry and NABCEP certification, we are dedicated to fulfilling all of our customers' solar needs. Sometimes we need to contact you for additional verification. These high quality products are guaranteed to work. HOW MANY WATTS AND AMPS IS EACH CELL? For the 3x6 cells, all WHOLE cells are.
5 volts and 3.6 amps peak = 1.8 watts peak power. For the 6x6 cells, power varies from 3-4 watts peak power. POWER = VOLTAGE x CURRENT WHAT IS A DIODE AND HOW DO I USE IT IN MY SOLAR SYSTEM? A diode allows current flow in one direction. It can be used to block backflow current from the battery to the solar panel.
The gray band (red taped side) is the positive side which points toward the charge controller and the white taped side is the negative side. HOW DO YOU CORRECTLY TEST SOLAR CELLS?
When you test one solar cell in full sun, your meter will not be able to test it correctly. You must string 3 or 4 cells together to get the correct current. This listing is currently undergoing maintenance, we apologise for any inconvenience caused. The item "1KW Solar Panel Charger PV (4) 255W Watt 1000W Poly Power System Off/On Grid" is in sale since Tuesday, April 28, 2015. This item is in the category "Home & Garden\Home Improvement\Electrical & Solar\Alternative & Solar Energy\Solar Panels". The seller is "mlsolar" and is located in Campbell, California. This item can be shipped to United States.


Can't understand nothing on this map, no work has been done. We can't know when the door will break.
Big Wat is a nice map to play co-op, i recommand it. No incredible textures and effects, but some good stuff in it.


Some systems don't work, others work for a while, and yet more are evergreen perennials that should form the backbone of any smart marketer's ongoing systems for a steady passive income. As a newbie, it can be really difficult to understand which is which. That comes with experience, and also keeping a close eye on the latest things that top marketers are doing right now.
One exciting new software has just been launched with a unique new system that's getting a lot of today's top marketers all hot under the collar. It's called Hijax, and the reason this is causing such a stir is simple: it's a proven system that can raise an astounding $6,000 in just 72 hours.
That's a lot of money, and the creator is now pulling in an easy $17,000 a week. That kind of money doesn't just give you financial freedom, it also gives you the ability to truly do whatever you want. So, for that reason alone, everyone is crowding around this new system and begging for a piece of it.
Now that day has come, and you can start using it yourself. To give you a feel for how devastatingly effective it is, I tested it and got almost 2,000 clicks and just under $800 in 24 hours on my first test. That's without fully understanding the system and just quickly firing off a test.
This is incredibly exciting stuff, and needless to say, I'm now putting all my time into this to make it grow my business like never before. In short, it adds a video to any sales page, and sends the affiliate money your way. It's incredible, and it works.


text:
White and Nerdy är en låt av "Weird Al" Yankovic. Låten är en parodi av Chamillionaires och Krayzie Bones låt Ridin'. Det är hans andra singel från albumet Straight Outta Lynwood och hans första låt på Billboard Hot 100-listans tio högsta. Den nådde som bäst nionde plats. I låten nämner han bland annat att han redigerar Wikipedia, man ser Weird Al redigera engelskspråkiga Wikipedias artikel om Atlantic Records skrivandes "YOU SUCK!" med stora bokstäver.

Externa länkar
Musikvideon på Youtube

Sånger 2006


text:
Men's Pro+
LPGA+
Amateur+
Course Design+
Senior Amateur Stalwart Lutz Scales Back
By John Steinbreder • November 29, 2019
MOHNTON, PENNSYLVANIA | In the world of senior amateur golf, few people have assembled as impressive a playing résumé over the past decade as Chip Lutz. A native of the Reading, Pa., area, he has captured three British Senior Amateur Championships during that period as well as a pair of Canadian Men's Senior Championships and the U.S. Senior Amateur.
Lutz has also been low amateur at both the U.S. Senior Open and the Senior Open Championship and has taken his share of titles on the cocktail party circuit, among them the senior divisions of the George L. Coleman Invitational, the Crump Cup and the George C. Thomas Invitational. Those were big victories that came in both stroke and match play on some of the toughest courses in the game – and against formidable foes. They were also a big reason why Lutz was inducted in 2015 into the National Senior Amateur Hall of Fame.
Remarkably, Lutz remains competitive even as he approaches his 65th birthday, which is in January. In addition to prevailing in the senior division of this year's C...
Get access to this article and all the quality, in-depth journalism of Global Golf Post Plus.
Sign Up for a FREE 14-Day Trial
Sign Up For Our Free Weekly Digital Magazine!
Terms of Service/Privacy Policy Longform Articles Contact Us Media Kit Our Writers
Unlock All Content, Become A Subscriber Today!
©2020 Global Golf Post
Become the Smartest Golfer in Your Regular Foursome
i F t
'); jQuery('.the_champ_login_ul > li:first-child').append('Continue with Facebook'); // console.log('fb');


I work for a government agency so "officially" we have no Christmas decorations in the building.
After two cups of coffee, Monday morning the creative process kicked in and I finished decorating the Christmas Tree, 2013--with Oscar's help!
People are pinning these Christmas ideas like crazy and you will instantly see why!
... Christmas Trees Shopping Home & Garden Holiday Decorations · Photo of Decorator's Warehouse - Arlington, TX, United States. Beautiful trees!
I've been spending a very lazy, warm, and cozy Christmas at home this year with my family.
See how I decorate my Fifth Wheel for the holidays.
Gorgeous white Christmas tree with jewel toned ornaments!
Book tree! And check out the paper angel made with sheet music - potential DIY?
Disclaimer: I was given products in this post for the purpose of review. I was not paid in anyway to write this review all opinions are my own.
From a frosting-covered replica of the Hancock Tower to popcorn garlands, here's how Chicago restaurants celebrate Christmas in Chicago.
How to make Christmas Trees from wrapping paper. A fun and easy Christmas craft!
... Pottery Barn Christmas tree. Whether it's in the magazine or in the store, they're always festive, fun and styled to perfection.
Christmas trees and beautiful decorations inspire me to incorporate more traditional red tones in at least one room of my house.
Our theme for Christmas decorating this year is Scandinavian Christmas. We are using lots of white, natural, silver, grey and a sprinkle of red.
Here's a little special something that Jesse put in my stocking last year. Nothing says "Christmas spirit" like a cross-stitched Omar Little.
Professional holiday decorating services can spruce up the inside and outside of your home and make sure it is ready for the holidays.
My mother-in-law handed this down to Andy and I during our first Christmas together.


An interesting solution is high-quality leather goods. Ladies can choose from handbags, while men can pick out an elegant wallet and briefcase. These are items that, when properly chosen, will not only highlight your unique style, but will add chic and timeless elegance to your look.
Where can such leather accessories be found? An interesting place on the Internet is the Bentley store, offering mainly leather goods and exclusive travel suitcases by the best brands.
The carefully selected wide range of products impresses with its diversity. Each product is manufactured with the utmost attention to detail. You can see for youself by watching the videos prepared by the store that show selected accessories from the range. Close-ups on the decorative details and finishes show that they are of the highest quality.
Most importantly, all handbags and wallets perfectly match the latest fashion trends. When deciding to purchase an item from this store, we have the assurance that our style will be fashionable.


Mrs. Vaughn was born on April 24, 1926 in Lamar County, Ga. She is preceded in death by her parents, Nannie Mae Harper Ross and Larris A. Ross. Mrs. Vaughn was retired from Roses Department Store. She was a member of Bethel Baptist Church.
She is survived by her husband of 71 years, Gerald O. Vaughn; children, Wayne Vaughn, Nancy Hughes and husband Greg, Mike Vaughn; grandchildren, Heather and Will Rustin, Dr. Mandi Vaughn, Lauren and Parker McGee, Justin Hughes; great-grandchildren, Ava Grace, Audrey Leigh, Miriam, Rebekah; sisters in law, Darlene Carter, Cora Norton, Marjorie Vaughn Weldon; several nieces and nephews.
A visitation for Mrs. Larris Vaughn will be Thursday, April 26 from 6-8 p.m. at Conner-Westbury Funeral Home. A funeral service will be conducted on Friday, April 27 at 3 p.m. at Bethel Baptist Church in Milner. Rev. Danny Wilson and Rev. Jack Landham will officiate. Interment will follow in Friendship Baptist Church Cemetery.
Conner-Westbury Funeral Home, 1891 W. McIntosh Rd., Griffin is in charge of arrangements, www.conner-westburyfuneralhome.com.
Please join the family and friends in honoring the life of Mrs. Larris Vaughn by visiting www.conner-westburyfuneralhome.com and posting your tributes and memories.


text:
Ten St. Thomas Students Recognized by the National Merit Scholarship Corporation for Academic Achievements
St. Thomas High School is proud of the young men who have been recognized by the National Merit Scholarship Corporation (NMSC) for their academic achievements. Each year over one million students compete for academic acknowledgement, scholarships and a chance at being acknowledged by this esteemed academic corporation. This year we are honored to announce that 10 of our students have been commended in the following areas: two semi-finalists, four commended scholars and four Hispanic scholars.
In early September, officials of the National Merit Scholarship Corporation (NMSC) announced the names of the 16,000 semifinalists in the 65th annual National Merit Scholarship program. Of those 16,000, two of them were St. Thomas High School Seniors, Harrison Held and Grant McCoy. These academically talented students, Harrison and Grant, have been named National Merit Semifinalists, an achievement given only to the top 1.25 percent of PSAT takers in the country.
Most of these students prepare for the exam long before taking the PSAT. "A lot of hard work and studying has gone into the process, but it all paid off in the end. Being recognized as a semifinalist is truly an honor," said Held.
While both young men are academic all-stars at St. Thomas High School, they represent the range of personalities and interests of STH students. Grant is known for his work ethic, dedication, and sense of service; Harry is known for his humility, quick wit, and hilarious sense of humor.
McCoy adds, "I'm really happy that I can put this on my resume and show colleges that I've been recognized for my academic achievements."
Next, these Seniors will compete for one of 7,600 National Merit Scholarships worth more than $31 million to be awarded next spring. Three types of Merit Scholarship awards will be offered in 2020: National Merit $2,500 scholarships, corporate-sponsored scholarships, and college-sponsored scholarships.
Fast forward one week later, about 34,000 commended students throughout the nation were recognized for their exceptional academic promise. Of those 34,000, four of these were St. Thomas High School senior students including, Grayson Drinkard, Adam Dunn, Nathan Lee, and Joseph "Wade" Swan.
The commended students placed among the top 50,000 scorers of more than 1.5 million students who entered the 2020 competition by taking the 2018 Preliminary SAT/National Merit Scholarship Qualifying Test (PSAT/NMSQT).
These students represent a valuable national resource; recognizing their accomplishments, as well as the key role their schools play in their academic development, is vital to the advancement of educational excellence in our nation. "I think the academic institution of St. Thomas High School prepared me for the PSAT and helped me to do well by pushing me to do my very best," said Adam Dunn.
While each student brings something different to the table, all share one thing in common: their brotherhood. Whether it's motivating their peers or being determined to work hard for their goals, they continue to push themselves through and through while upholding the principles of Goodness, Discipline, and Knowledge.
In addition to working hard academically, these students have portrayed the true meaning of brotherhood as senior leaders. "Despite being involved in many different clubs at STH, Grayson makes sure that he is giving it his all whether it is in the classroom, running with the cross country boys at 5:00 am, or leading a group of freshmen though a leadership activity. Grayson continues to maintain a positive outlook" said Andrew Quintteton, Dean of Theology.
We hope that this recognition will broaden their educational opportunities and encourage them to continue their pursuit of academic success. "This is a huge honor and I look forward to putting this on my resume as I continue to apply for schools this year," said Nathan Lee.
Finally, last week, 5,000 Hispanic/Latin high school students were recognized as scholars based off their scores on the PSAT/NSQT. Of those 5,000 students, four students from St. Thomas High School were Trent Butler, Charles Boutte, Ryan Mercado, and Mason Ritchie.
Our Hispanic National Merit Scholars met the requirements of being at least one-fourth Hispanic and/or Latino, achieving a score within the top 2.5% of all Hispanic and Latino PSAT test takers in their region, and upholding at least a 3.5 cumulative GPA midway through their junior year.
"Trent Butler is one of the most thoughtful and mature students I have ever taught. As an English student, Trent repeatedly sought to do extra, more challenging texts and writings simply because he wanted to know more. He wasn't simply after extra credit, he genuinely wanted to learn," said Will Nash, English teacher.
While the program does not award scholarship money, being recognized with this academic honor can help these students leverage their academic achievements during the college application process. "Considering that the College Board's National Hispanic Recognition Program only recognizes about 7,000 academically outstanding Hispanic/Latino high school juniors across the nation each year, our school is extremely proud of these four young men for their impressive achievement and for their outstanding representation of St. Thomas High School," said Jeffrey Tesone, School Counselor.
"No matter what happens, I feel incredibly grateful to be recognized by this program, and to represent St. Thomas High School on a national level," said Charles Boutte.
By St. Thomas High School|2019-10-08T08:00:25-05:00October 1st, 2019|Academics, Campus News, Press Releases|0 Comments


Every child of any society has identified that coloring is such a wonderful activity that they can participate in. Nonetheless, because the arrival of wonderful innovations like computers, web as well as printers, moms and dads as well as also children have acquired the accessibility of printable coloring pages. At any point, your child can try to find any cost-free coloring page just to keep themselves well-entertained.
cost-free coloring pages online are in fact an opportunity of showing your children that there is a world awaiting them. This idea also works well right into a pinch. If you have a variety of children as well as there is only one that are warm with printable coloring pages, after that it would certainly be very basic for you to keep an eye out for free coloring pages around the web.
So, ask your child concerning there concepts of cost-free coloring pages as well as try to find it. These tasks are in fact an advantage, coloring can aid make your child really feel that she or he is a fantastic musician. It will certainly aid them create a fantastic sense of self-confidence. So, as a moms and dad, it should start within your hands.
Related Posts of "Awesome Deadpool Vs Wolverine Coloring Pages Enjoy Coloring"


text:
103-year-old great-grandmother sets world record in U.S. track
CTVNews.ca Staff
Published Thursday, June 20, 2019 8:00AM EDT
Last Updated Thursday, June 20, 2019 9:44AM EDT
As the crowds cheered and with a big grin on her face, a 103-year-old great-grandmother set a new track record at the U.S. National Senior Games in New Mexico.
Julia "Hurricane" Hawkins crossed the finish line of the 50-metre dash with a time of 21.06 seconds on Monday, beating her previous world record in the 100-plus age division.
In a video of the race shared on Twitter, Hawkins can be seen steadily running alongside her fellow seniors, many of them younger than her, before she finishes the run to earn a gold medal in her division.
If that wasn't enough, the determined senior from Louisiana embarked on another record attempt in the 100-metre dash the following day.
Although she didn't beat her own world record from two years ago in that event, Hawkins still won gold in the 100-plus age division with a respectable time of 46.07 seconds.
Hawkins also became the oldest woman to ever compete on an American track.
Blazing a trail in lane 4 is 103yo Julia "Hurricane" Hawkins (red shirt), who I believe just set a National @SeniorGames1 50M record of 21.06 seconds for a woman over 100 (race included younger ages).
Tues 915 am (FREE) at @UNM she attempts to break her world record in the 100M pic.twitter.com/skTjq2f9Th
— Geoff Grammer (@GeoffGrammer) June 17, 2019
103-year-old Julia "Hurricane" Hawkins is hot on the track at the National Senior Games this week cementing her title as the oldest women to compete on an American track! Today, she spread inspiration with every step as she ran the 100-meter dash in 46.07.#RealSeniorMoments pic.twitter.com/sa6GzPjKg0
— NSGA (@SeniorGames1) June 18, 2019
'It's fun': 97-year-old among N.B. seniors who take boxing classes
Dance team for NBA's Washington Wizards proves it's never too late to bust a move
Julia "Hurricane" Hawkins is photographed running in the 100-metre dash during the U.S. National Senior Games in New Mexico. (National Senior Games Association)


A combination of both television programmes and Movies rumours, news, announcements and reviews!
Gilmore Girls: A Year in the Life – Fall ends with a full circle.
Gilmore Girls: A Year in the Life – Spring is more of a rocky period.
Gilmore Girls: A Year in the Life – Winter recaptures Stars Hallow's twinkle.
REPOST: Deadpool makes a fun, adventurous and raunchy debut to cinema screens.
'Doctor Who' prepares for an epic finale in 'Face The Raven'.


text:
women cricket
Indian women's cricket team needs nurturing too
Even the men's domestic season has been announced and Indian cricket board has shown intent to complete all fixtures involving men.
Women's T20 team trainer tests Covid positive
Shalini, a physical trainer for one of the three teams which are scheduled to play in a T20 series similar to the IPL format, has tested positive.
published on : 19th October 2020
Focus on unearthing more talent like Shafali Verma, says new chief selector Neetu David
One of the finest spinners to have come out of India, David very much understands the requirements on modern-day limited-overs cricket.
England, West Indies women cricket teams to support 'Black Lives Matter' movement in T20Is
England captain Heather Knight has been in contact with her West Indies counterpart, Stafanie Taylor, and the pair plan to further discuss how best to mark the movement during the series
Deepti Sharma feels Arjuna Award increases responsibility, says dream fulfilled
Indian women cricket team's Deepti Sharma, who received the Arjuna Award on Saturday, said it was her dream to get her name added in the list of the recipients of this prestigious award.
published on : 30th August 2020
Team India unable to handle big-game pressure: Outgoing women's chief selector
While pressure remains a factor, Kala believes in this current lot which she feels can beat England and Australia, consistently across two formats.
published on : 10th July 2020
India's women team set to tour England for tri-series involving South Africa too
While a formal announcement is expected in the coming days, this will be the first instance of any Indian team returning to action since the country went into coronavirus lockdown on March 23.
published on : 1st July 2020
Mithali Raj interview: Fighting through lockdown and craving for TV boost
India's ODI captain Mithali Raj says additional viewership is the next step forward for women's cricket in order to broaden its fan base.
published on : 16th June 2020
COVID-19: Indian women cricket team's tour of England postponed
Indian women were supposed to play four ODIs and two T20 Internationals during their short two-week trip that would have ended on July 9.
If there is a bad ball, it must be hit: Woman batsman Shafali Verma
For a youngster to say this after scoring 163 runs in 5 games at a strike-rate of 158.25 says a lot about how she puts team performance over individual glory.
published on : 6th April 2020
Shafali Verma loses top spot in ICC T20I player rankings to Beth Mooney, slips to third
New Zealand's Suzie Bates (750 points) remained in second position in the list that also features the Indian duo of Smriti Mandhana and Jemimah Rodrigues in the top ten.
I have faith in my team: Harmapreet Kaur after T20 World Cup defeat
Unbeaten throughout the tournament, India were outplayed in all departments of the game by the defending champions Australia who clinched their fifth title.
India's Taniya Bhatia suffers concussion during Women's T20 World Cup final
Taniya looked rattled after she was hit on her helmet while going for a sweep, forcing the Indian team's doctor and physio to rush out and check on her and subsequently taking her off the field.
Australia beat India by 85 runs to lift fifth ICC Women's T20 World Cup
Chasing a challenging target, India, featuring in their maiden final of the tournament, couldn't handle the pressure and were bundled out for 99 in 19.1 overs.
Shafali Verma becomes youngest player ever to play Cricket World Cup final
The record was previously held by West Indies' women's cricketer Shaquana Quintyne when she played the ODI World Cup final in 2013 at an age of 17 years and 45 days old.


Pink hooves, a metallic golden horn, rainbow mane and tails. And most of all, these Unicorn Plush Slippers will have you galloping with delight, day and night.Enter a magical realm with our plush slippers.
Are you planning to binge watch some Netflix show in the comfort of your room?
Have you felt the need to pamper your feet after a tiring day at work?
Your feet will never want to be bare ever again. Its like walking on a cloud.
You can wear them while you move around the house or do any work, they are unbelievably comfortable and the perfect choice for your feet. And the best part is, they look adorable!
Standard Size fits almost all feet. Fits up to Women's size 12 / Men's 9.
Like this ? Check out some more quirky products.
Got delivered to me in 2 days. Gift wrapping was neat.


UPPER WEST SIDE, Manhattan (WABC) -- Firefighters were on the scene after fire broke out in a garbage truck on the Upper West Side.
It happened around 6:30 a.m. Friday at Columbus Avenue and West 89th Street.
Initial reports indicated minor injuries may have resulted to at least one person.
Stay with Eyewitness News and abc7ny.com for more information as it becomes available.


Today on Kids Woot! you can grab the Discovery Kids Cardboard Blocks for just $9.99. That's 71% off the regular price of $34.99! Limit 5 per customer.
Note: The Discovery Kids Cardboard Blocks are no longer available on Woot.
Other Woot! deals today . . .
Shipping is a flat total of $5 for any orders you place in the same calendar day.


The IPCC has been troubled by a series of scandals in recent years, several of which center directly on its chairman — Rajendra Pachauri — who received (on behalf of the IPCC) the Nobel Prize with former Vice President Al Gore in 2007. In the aftermath of the "Climategate" revelations, which raised fundamental questions about the "scientific" character of the entire theory of manmade global warming, a series of less memorable, but still highly significant, scandals erupted under Pachauri's leadership at the IPCC.
Now, the $45 trillion has grown to an even more incomprehensible $76 trillion (based on the proposed 40 years of spending $1.9 trillion per year). Calling such a reckless demand "outrageous" and "unsustainable" still falls short — what is demanded is nothing less than the conversion of much of what remains of the economies of the developed world into a means of funneling wealth to the World Bank, which will, ostensibly, redistribute those funds to the Third World.
One lead author of the 2001 edition was a trainee at the Munich Reinsurance Company in 2000 and lacked a master's degree while on the panel. He did not earn a Ph.D. until ten years later.
Another lead author in 1994 earned his master's only two years earlier and had his first academic paper published in 1995.
In the funhouse mirror of the politics of global warming, scholarly critics of the theory (Henk Tennekes of the Royal Dutch Meteorological Institute, for example) are pilloried, while grad students are the "world's top experts." Polls have demonstrated that much of the public has already lost all confidence in the theory of manmade climate change. As more details regarding both the "science" of climate change and the horrific human costs of the solutions for climate change that have been proposed by the United Nations, public faith in any advocate of the theory is likely to plummet.


Congress has another two weeks to work on finishing up a highway bill, as President Obama Friday signed a bill extending federal transportation funding through Dec. 4. It was due to expire Friday night.
The House on Monday passed a bipartisan bill to extend the authorization for federal highway and transit programs – the 36th such road-funding stopgap since 2009. The Senate passed companion legislation later in the week.
The House measure was put forward by GOP leaders to provide more time for Congress to complete the conferencing process that will forge a compromise from the long-term highway bills that have separately been passed by the House and Senate.
The full conference committee is set to meet after the Congressional Thanksgiving recess to reconcile the discrepancies between the long-term House and Senate transportation bills.