Exemplo n.º 1
0
unsigned int PerformLDF(const unsigned int opcode)
{
   unsigned int *pBase, *pAddress, *pFinal, nRc = 1,
     write_back = WRITE_BACK(opcode);

   //printk("PerformLDF(0x%08x), Fd = 0x%08x\n",opcode,getFd(opcode));

   pBase = (unsigned int*)readRegister(getRn(opcode));
   if (REG_PC == getRn(opcode))
   {
     pBase += 2;
     write_back = 0;
   }

   pFinal = pBase;
   if (BIT_UP_SET(opcode))
     pFinal += getOffset(opcode);
   else
     pFinal -= getOffset(opcode);

   if (PREINDEXED(opcode)) pAddress = pFinal; else pAddress = pBase;

   switch (opcode & MASK_TRANSFER_LENGTH)
   {
      case TRANSFER_SINGLE  : loadSingle(getFd(opcode),pAddress);   break;
      case TRANSFER_DOUBLE  : loadDouble(getFd(opcode),pAddress);   break;
      case TRANSFER_EXTENDED: loadExtended(getFd(opcode),pAddress); break;
      default: nRc = 0;
   }
   
   if (write_back) writeRegister(getRn(opcode),(unsigned int)pFinal);
   return nRc;
}
Exemplo n.º 2
0
int FwLoader::load(const char *path, unsigned int pid)
{
    if (!dev.open(IODevice::SIFTEO_VID, pid)) {
        fprintf(stderr, "Note: Please ensure your device is in update mode, with the red LED illuminated\n");
        return ENODEV;
    }

    FILE *f = fopen(path, "rb");
    if (!f) {
        fprintf(stderr, "could not open %s: %s\n", path, strerror(errno));
        return ENOENT;
    }

    uint64_t magic;
    if (fread(&magic, sizeof(magic), 1, f) != 1) {
        fprintf(stderr, "magic number mismatch\n");
        return EIO;
    }

    int rv;

    if (magic == Deployer::MAGIC) {
        rv = loadSingle(f);
    } else if (magic == Deployer::MAGIC_CONTAINER) {
        rv = loadContainer(f);
    } else {
        fprintf(stderr, "invalid file format\n");
        rv = EINVAL;
    }

    fclose(f);

    return rv;
}
Exemplo n.º 3
0
int CCPreLoad::loadAll()
{
	int ret = -1;
	CCArray* arr = m_dict->allKeys();
	do{
		unsigned int i;
		for(i=0; i<arr->count(); ++i)
		{
			CCString* p = dynamic_cast<CCString*>(arr->objectAtIndex(i));
			if(!p)
				break;

			CCDictionary* pdic = dynamic_cast<CCDictionary*>(m_dict->objectForKey(p->getCString()));
			if(!pdic)
				break;

			if(loadSingle(p->getCString(), pdic)!=0)
				break;
		}
			
		if(i!=arr->count())
		{
			break;
		}

		ret = 0;

	}while(0);
	delete arr;

	return ret;
}
Exemplo n.º 4
0
int CCPreLoad::loadCurFile()
{
	if(!m_dict || !m_tmpKeyArr || m_tmpIdx >= (int)m_dict->count())
		return -1;

	CCString* p = dynamic_cast<CCString*>(m_tmpKeyArr->objectAtIndex(m_tmpIdx));
	if(!p)
		return -1;

	CCDictionary* pdic = dynamic_cast<CCDictionary*>(m_dict->objectForKey(p->getCString()));
	if(!pdic)
		return -1;

	if(loadSingle(p->getCString(), pdic)!=0)
		return -1;

	return 0;
}
Exemplo n.º 5
0
unsigned int PerformLDF(const unsigned int opcode)
{
	unsigned int __user *pBase, *pAddress, *pFinal;
	unsigned int nRc = 1, write_back = WRITE_BACK(opcode);

	pBase = (unsigned int __user *) readRegister(getRn(opcode));
	if (REG_PC == getRn(opcode)) {
		pBase += 2;
		write_back = 0;
	}

	pFinal = pBase;
	if (BIT_UP_SET(opcode))
		pFinal += getOffset(opcode);
	else
		pFinal -= getOffset(opcode);

	if (PREINDEXED(opcode))
		pAddress = pFinal;
	else
		pAddress = pBase;

	switch (opcode & MASK_TRANSFER_LENGTH) {
	case TRANSFER_SINGLE:
		loadSingle(getFd(opcode), pAddress);
		break;
	case TRANSFER_DOUBLE:
		loadDouble(getFd(opcode), pAddress);
		break;
#ifdef CONFIG_FPE_NWFPE_XP
	case TRANSFER_EXTENDED:
		loadExtended(getFd(opcode), pAddress);
		break;
#endif
	default:
		nRc = 0;
	}

	if (write_back)
		writeRegister(getRn(opcode), (unsigned long) pFinal);
	return nRc;
}