Beispiel #1
0
static void mmc_error(SIM_HBA *hba, int mmc_status)
{
	SIM_MMC_EXT	*ext = (SIM_MMC_EXT *)hba->ext;
	CCB_SCSIIO	*ccb = ext->nexus;

	if (ccb) {
		switch (mmc_status) {
			case MMC_DATA_OVERRUN:
				ccb->cam_ch.cam_status = CAM_DATA_RUN_ERR;
				break;
			case MMC_NOT_PRESENT:
				mmc_sense(hba, SK_NOT_RDY, ASC_MEDIA_NOT_PRESENT, 0);
				break;
			case MMC_TIMEOUT:
			case MMC_COMMAND_FAILURE:
				mmc_reset(hba);
				ccb->cam_ch.cam_status = CAM_CMD_TIMEOUT;
				break;
			case MMC_READ_ERROR:			// CRC errors
			case MMC_WRITE_ERROR:
			default:
				ccb->cam_ch.cam_status = CAM_CMD_TIMEOUT;
				break;
		}
	}
}
Beispiel #2
0
void nes_reset(NES *nes)
{
    joypad_reset(&(nes->pad));
    mmc_reset   (&(nes->mmc));
    ppu_reset   (&(nes->ppu));
    apu_reset   (&(nes->apu));
    cpu_reset   (&(nes->cpu));
}
Beispiel #3
0
		void reset(bool hard_reset)
		{
			if(hard_reset) {
				memset(cpu_->mem_page[0], 0, NES_RAMSIZE);
				if(rominfo_->vram) {
					mem_trash_(rominfo_->vram, 0x2000 * rominfo_->vram_banks);
				}
			}
			apu_reset();
   			ppu_reset(hard_reset == true ? 1 : 0);
   			mmc_reset();
   			nes6502_reset();

			scanline_ = 241;
		}
static int tegra_mmc_core_init(struct mmc *mmc)
{
	struct mmc_host *host = mmc->priv;
	unsigned int mask;
	debug(" mmc_core_init called\n");

	mmc_reset(host, mmc);

	host->version = readw(&host->reg->hcver);
	debug("host version = %x\n", host->version);

	/* mask all */
	writel(0xffffffff, &host->reg->norintstsen);
	writel(0xffffffff, &host->reg->norintsigen);

	writeb(0xe, &host->reg->timeoutcon);	/* TMCLK * 2^27 */
	/*
	 * NORMAL Interrupt Status Enable Register init
	 * [5] ENSTABUFRDRDY : Buffer Read Ready Status Enable
	 * [4] ENSTABUFWTRDY : Buffer write Ready Status Enable
	 * [3] ENSTADMAINT   : DMA boundary interrupt
	 * [1] ENSTASTANSCMPLT : Transfre Complete Status Enable
	 * [0] ENSTACMDCMPLT : Command Complete Status Enable
	*/
	mask = readl(&host->reg->norintstsen);
	mask &= ~(0xffff);
	mask |= (TEGRA_MMC_NORINTSTSEN_CMD_COMPLETE |
		 TEGRA_MMC_NORINTSTSEN_XFER_COMPLETE |
		 TEGRA_MMC_NORINTSTSEN_DMA_INTERRUPT |
		 TEGRA_MMC_NORINTSTSEN_BUFFER_WRITE_READY |
		 TEGRA_MMC_NORINTSTSEN_BUFFER_READ_READY);
	writel(mask, &host->reg->norintstsen);

	/*
	 * NORMAL Interrupt Signal Enable Register init
	 * [1] ENSTACMDCMPLT : Transfer Complete Signal Enable
	 */
	mask = readl(&host->reg->norintsigen);
	mask &= ~(0xffff);
	mask |= TEGRA_MMC_NORINTSIGEN_XFER_COMPLETE;
	writel(mask, &host->reg->norintsigen);

	return 0;
}
Beispiel #5
0
static int mmc_core_init(struct mmc *mmc)
{
	struct mmc_host *host = (struct mmc_host *)mmc->priv;
	unsigned int mask;
#if 0
	if (mmc_card_detect(host) == 0) {
		printf("NO SD/MMC detected!\n");		
		return -1;
	}
#endif
	mmc_reset(host);

	host->version = readw(&host->reg->hcver);

	/* mask all */
	writel(0xffffffff, &host->reg->norintstsen);
	writel(0xffffffff, &host->reg->norintsigen);

	writeb(0xe, &host->reg->timeoutcon);	/* TMCLK * 2^27 */

	/*
	 * NORMAL Interrupt Status Enable Register init
	 * [5] ENSTABUFRDRDY : Buffer Read Ready Status Enable
	 * [4] ENSTABUFWTRDY : Buffer write Ready Status Enable
	 * [1] ENSTASTANSCMPLT : Transfre Complete Status Enable
	 * [0] ENSTACMDCMPLT : Command Complete Status Enable
	*/
	mask = readl(&host->reg->norintstsen);
	mask &= ~(0xffff);
	mask |= (1 << 5) | (1 << 4) | (1 << 1) | (1 << 0);
	writel(mask, &host->reg->norintstsen);

	/*
	 * NORMAL Interrupt Signal Enable Register init
	 * [1] ENSTACMDCMPLT : Transfer Complete Signal Enable
	 */
	mask = readl(&host->reg->norintsigen);
	mask &= ~(0xffff);
	mask |= (1 << 1);
	writel(mask, &host->reg->norintsigen);

	return 0;
}
Beispiel #6
0
// 内部函数实现
static void nes_do_reset(NES *nes)
{
    // mmc need reset first
    mmc_reset(&(nes->mmc));

    // reset cpu & ppu & apu
    cpu_reset(&(nes->cpu));
    ppu_reset(&(nes->ppu));
    apu_reset(&(nes->apu));

    // reset joypad
    joypad_reset(&(nes->pad));

    // reset replay
    replay_reset(&(nes->replay));

    // restart ndb
    ndb_set_debug(&(nes->ndb), NDB_DEBUG_MODE_RESTART);
}