Example #1
0
static void
mic_remove(struct pci_dev *pdev)
{
	int32_t brdnum;
	bd_info_t *bd_info;

	if (mic_data.dd_numdevs - 1 < 0)
		return;
	mic_data.dd_numdevs--;
	brdnum = mic_data.dd_numdevs;

	/* Make sure boards are shutdown and not available. */
	bd_info = mic_data.dd_bi[brdnum];

	spin_lock_bh(&bd_info->bi_ctx.sysfs_lock);
	sysfs_put(bd_info->bi_ctx.sysfs_state);
	bd_info->bi_ctx.sysfs_state = NULL;
	spin_unlock_bh(&bd_info->bi_ctx.sysfs_lock);

	if (bd_info->bi_ctx.bi_psmi.enabled) {
		device_remove_bin_file(bd_info->bi_sysfsdev, &mic_psmi_ptes_attr);
		sysfs_remove_group(&bd_info->bi_sysfsdev->kobj, &psmi_attr_group);
	}
	sysfs_remove_group(&bd_info->bi_sysfsdev->kobj, &bd_attr_group);

	free_sysfs_entries(&bd_info->bi_ctx);
	device_destroy(mic_lindata.dd_class,
		       mic_lindata.dd_dev + 2 + bd_info->bi_ctx.bi_id);

	adapter_stop_device(&bd_info->bi_ctx, 1, 0);
	/*
	 * Need to wait for reset since accessing the card while GDDR training
	 * is ongoing by adapter_remove(..) below for example can be fatal.
	 */
	wait_for_reset(&bd_info->bi_ctx);

	mic_disable_interrupts(&bd_info->bi_ctx);

	if (!bd_info->bi_ctx.msie) {
		free_irq(bd_info->bi_ctx.bi_pdev->irq, &bd_info->bi_ctx);
#ifdef CONFIG_PCI_MSI
	} else {
		free_irq(bd_info->bi_msix_entries[0].vector, &bd_info->bi_ctx);
		pci_disable_msix(bd_info->bi_ctx.bi_pdev);
#endif
	}
	adapter_remove(&bd_info->bi_ctx);
	release_mem_region(bd_info->bi_ctx.aper.pa, bd_info->bi_ctx.aper.len);
	release_mem_region(bd_info->bi_ctx.mmio.pa, bd_info->bi_ctx.mmio.len);
	pci_disable_device(bd_info->bi_ctx.bi_pdev);
	kfree(bd_info);
}
Example #2
0
/* DDS????: Display Error */
void display_error(enum error err)
{
	unsigned int language;
	struct image *bgimage;

	language = get_language();

	/* Draw background if we can, otherwise clear screen */
	bgimage = get_message_mayfail(language, MSG_BACKGROUND);
	if (bgimage) paste_image(0, 0, bgimage);
	else clear_screen();

	/* Message to tell them */
	play_audio(true, get_audio("error.raw"));

	/* Use electorate "1" here for the numbers. */
	draw_error(get_message_mayfail(language, MSG_ERROR),
		   get_preference_image_mayfail(1, (unsigned int)err),
		   err);

	/* Loop until reset. */
	wait_for_reset();
}