예제 #1
0
파일: callofw.c 프로젝트: Bootz/OpenFW
int callofw(char *name, int numargs, int numres, ...)
{
	va_list ap;
	u32 argarray[MAXARGS+3];
	int argnum = 3;
	int retval;
	int *intp;
	unsigned long flags;

	argarray[0] = (u32)name;
	argarray[1] = numargs;
	argarray[2] = numres;

	if ((numargs + numres) > MAXARGS)
		return -1;

	va_start(ap, numres);
	while (numargs--)
		argarray[argnum++] = va_arg(ap, int);

	retval = call_firmware(argarray);

	if (retval == 0) {
		while (numres--) {
			intp = va_arg(ap, int *);
			*intp = argarray[argnum++];
		}
	}
	va_end(ap);
	return retval;
}
예제 #2
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
VOID
OFEnter( VOID )
{
	ULONG argarray[] = { (ULONG)"enter",0,0};

	call_firmware(argarray);
}
예제 #3
0
파일: main.c 프로젝트: sielenk/Logomatic
int main (void)
{
	boot_up();						//Initialize USB port pins and set up the UART
	rprintf("Boot up complete\n");	

	if(IOPIN0 & (1<<23))			//Check to see if the USB cable is plugged in
	{
		main_msc();					//If so, run the USB device driver.
	}
	else{
		rprintf("No USB Detected\n");
	}
	
	//Init SD
	if(sd_raw_init())				//Initialize the SD card
	{
		openroot();					//Open the root directory on the SD card
		rprintf("Root open\n");
		if(root_file_exists(FW_FILE))	//Check to see if the firmware file is residing in the root directory
		{
			rprintf("New firmware found\n");
			load_fw(FW_FILE);			//If we found the firmware file, then program it's contents into memory.
			rprintf("New firmware loaded\n");
		}
	}
	else{
		//Didn't find a card to initialize
		rprintf("No SD Card Detected\n");
		delay_ms(250);
	}
	rprintf("Boot Done. Calling firmware...\n");
	call_firmware();					//Run the new code!

	while(1);
}
예제 #4
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
ULONG
OFMilliseconds( VOID )
{
	ULONG argarray[] = { (ULONG)"milliseconds",0,1,0};
	if (call_firmware(argarray) != 0)
	{
		return (ULONG)0;
	}
	return (argarray[CIF_HANDLER_IN+0]);
}
예제 #5
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFBoot(
    char *bootspec
    )
{
	ULONG argarray[] = { (ULONG)"boot",1,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)bootspec;
	call_firmware(argarray);
}
예제 #6
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
/* volatile VOID */
 VOID
OFExit( VOID )
{
#ifdef DEBUG
	ULONG argarray[] = { (ULONG)"enter",0,0};
#else
	ULONG argarray[] = { (ULONG)"exit",0,0};
#endif
	call_firmware(argarray);
}
예제 #7
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
void (*OFSetCallback(void (*func)(void)))(void)
{
	ULONG argarray[] = { (ULONG)"set-callback",1,1,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)func;
	if (call_firmware(argarray) != 0)
	{
		return (NULL);
	}
	return ((void (*)(void))argarray[CIF_HANDLER_IN+1]);
}
예제 #8
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
phandle
OFParent(phandle device_id)
{
	ULONG argarray[] = { (ULONG)"parent",1,1,0,0};
	argarray[CIF_HANDLER_IN+0] = device_id;
	if (call_firmware(argarray) != 0)
	{
		return (phandle)0;
	}
	return ((phandle)argarray[CIF_HANDLER_IN+1]);
}
예제 #9
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
VOID
OFRelease(
    char *addr,
    ULONG size
    )
{
	ULONG argarray[] = { (ULONG)"release",2,0,0,0};
	argarray[CIF_HANDLER_IN+0] = (ULONG)addr;
	argarray[CIF_HANDLER_IN+1] = size;
	call_firmware(argarray); 
}
예제 #10
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
ihandle
OFOpen( char *devicename)
{
	ULONG argarray[] = { (ULONG)"open",1,1,0,0};

	argarray[CIF_HANDLER_IN+0] = (long)devicename;
	if (call_firmware(argarray) != 0)
	{
		return (ihandle)0;
	}
	return ((ihandle) argarray[CIF_HANDLER_IN+1]);
}
예제 #11
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
phandle
OFFinddevice( char *devicename)
{
	ULONG argarray[] = { (ULONG)"finddevice",1,1,0,0};

	argarray[CIF_HANDLER_IN+0] = (long)devicename;
	if (call_firmware(argarray) != 0)
	{
		return (phandle)0;
	}
	return ((phandle) argarray[CIF_HANDLER_IN+1]);
}
예제 #12
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
phandle
OFInstanceToPackage(ihandle ih)
{
	ULONG argarray[] = { (ULONG)"instance-to-package",1,1,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)ih;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return ((LONG)argarray[CIF_HANDLER_IN+1]);
}
예제 #13
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
void
OFClose(ihandle id)
{
	ULONG argarray[] = { (ULONG)"close",1,1,0,0};
	argarray[CIF_HANDLER_IN+0] = (long)id;
	if (call_firmware(argarray) != 0)
	{
#ifdef notdef
		warn("OFClose(%x) failed\n", id);
#endif
	}
	
}
예제 #14
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFInterpret0(
    char *cmd
    )
{
	ULONG argarray[] = { (ULONG)"interpret",1,1,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)cmd;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return ((LONG)argarray[CIF_HANDLER_IN+1]);
}
예제 #15
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
phandle
OFParent(phandle device_id)
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"parent", 0,1, 0,1, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"parent", 1,1,0,0};
#endif
	argarray[CIF_HANDLER_IN+LOW(0)] = device_id;
	if (call_firmware(argarray) != 0)
	{
		return (phandle)0;
	}
	return ((phandle)argarray[CIF_HANDLER_IN+LOW(1)]);
}
예제 #16
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
VOID
OFRelease(
    char *addr,
    ULONG size
    )
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"release", 0,2, 0,0, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"release", 2,0,0,0};
#endif
	argarray[CIF_HANDLER_IN+LOW(0)] = (cell_t)addr;
	argarray[CIF_HANDLER_IN+LOW(1)] = size;
	call_firmware(argarray); 
}
예제 #17
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFGetproplen(
    phandle device_id,
    char *name
    )
{
	ULONG argarray[] = { (ULONG)"getproplen",2,1,0,0,0};
	argarray[CIF_HANDLER_IN+0] = (long)device_id;
	argarray[CIF_HANDLER_IN+1] = (long)name;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+2]);
}
예제 #18
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
phandle
OFInstanceToPackage(ihandle ih)
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"instance-to-package", 0,1, 0,1, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"instance-to-package", 1,1,0,0};
#endif

	argarray[CIF_HANDLER_IN+LOW(0)] = (cell_t)ih;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return ((LONG)argarray[CIF_HANDLER_IN+LOW(1)]);
}
예제 #19
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
/* FirmWorks extension */
ihandle
OFCreate( char *devicename)
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"firmworks,create", 0,1, 0,1, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"firmworks,create", 1,1,0,0};
#endif

	argarray[CIF_HANDLER_IN+LOW(0)] = (long)devicename;
	if (call_firmware(argarray) != 0)
	{
		return (ihandle)0;
	}
	return ((ihandle) argarray[CIF_HANDLER_IN+LOW(1)]);
}
예제 #20
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
void
OFClose(ihandle id)
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"close", 0,1, 0,1, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"close", 1,1,0,0};
#endif
	argarray[CIF_HANDLER_IN+LOW(0)] = (long)id;
	if (call_firmware(argarray) != 0)
	{
#ifdef notdef
		warn("OFClose(%x) failed\n", id);
#endif
	}
	
}
예제 #21
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFNextprop(
    phandle device_id,
    char *name,
    char *buf
    )
{
	ULONG argarray[] = { (ULONG)"nextprop",3,1,0,0,0,0};
	argarray[CIF_HANDLER_IN+0] = (long)device_id;
	argarray[CIF_HANDLER_IN+1] = (long)name;
	argarray[CIF_HANDLER_IN+2] = (long)buf;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+3]);
}
예제 #22
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFSeek(
    ihandle instance_id,
    ULONG poshi,
    ULONG poslo
    )
{
	ULONG argarray[] = { (ULONG)"seek",3,1,0,0,0,0};

	argarray[CIF_HANDLER_IN+0] = (long) instance_id;
	argarray[CIF_HANDLER_IN+1] = poshi;
	argarray[CIF_HANDLER_IN+2] = poslo;
	if (call_firmware(argarray) != 0) {
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+3]);
}
예제 #23
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFWrite(
    ihandle instance_id,
    char *addr,
    ULONG len
    )
{
	ULONG argarray[] = { (ULONG)"write",3,1,0,0,0,0};

	argarray[CIF_HANDLER_IN+0] = (long) instance_id;
	argarray[CIF_HANDLER_IN+1] = (ULONG)addr;
	argarray[CIF_HANDLER_IN+2] = len;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+3]);
}
예제 #24
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFCallMethod(
    char *method,
    ihandle id,
    ULONG arg
    )
{
	ULONG argarray[] = { (ULONG)"call-method",3,1,0,0,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)method;
	argarray[CIF_HANDLER_IN+1] = (ULONG)id;
	argarray[CIF_HANDLER_IN+2] = arg;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return ((LONG)argarray[CIF_HANDLER_IN+3]);
}
예제 #25
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFPackageToPath(
    phandle device_id,
    char *addr,
    ULONG buflen
    )
{
	ULONG argarray[] = { (ULONG)"package-to-path",3,1,0,0,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)device_id;
	argarray[CIF_HANDLER_IN+1] = (ULONG)addr;
	argarray[CIF_HANDLER_IN+2] = buflen;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return ((LONG)argarray[CIF_HANDLER_IN+3]);
}
예제 #26
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
ULONG
OFClaim(
    char *addr,
    ULONG size,
    ULONG align
    )
{
	ULONG argarray[] = { (ULONG)"claim",3,1,0,0,0,0};

	argarray[CIF_HANDLER_IN+0] = (ULONG)addr;
	argarray[CIF_HANDLER_IN+1] = size;
	argarray[CIF_HANDLER_IN+2] = align;
	if (call_firmware(argarray) != 0)
	{
		return (ULONG)0;
	}
	return (argarray[CIF_HANDLER_IN+3]);
}
예제 #27
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
long
OFGetproplen(
    phandle device_id,
    char *name
    )
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"getproplen", 0,2, 0,1, 0,0, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"getproplen", 2,1,0,0,0};
#endif
	argarray[CIF_HANDLER_IN+LOW(0)] = (long)device_id;
	argarray[CIF_HANDLER_IN+LOW(1)] = (long)name;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+LOW(2)]);
}
예제 #28
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
long
OFCallMethodV(
    char *method,
    ihandle id,
    int numargs,
    int numres,
    ...
    )
{
#ifdef CIF64
	ULONG argarray[(MAXARGS+6)*2] = { 0 };
#else
	cell_t argarray[MAXARGS+6] = { 0 };
#endif
	va_list ap;
	int retval;
	int *intp;
	int argnum = 0;
	unsigned long flags;

	argarray[LOW(argnum++)] = (cell_t)"call-method";
	argarray[LOW(argnum++)] = (cell_t)numargs+2;
	argarray[LOW(argnum++)] = (cell_t)numres+1;
	argarray[LOW(argnum++)] = (cell_t)method;
	argarray[LOW(argnum++)] = (cell_t)id;

	if ((numargs + numres) > MAXARGS)
		return -1;

	va_start(ap, numres);
	while (numargs--)
		argarray[LOW(argnum++)] = va_arg(ap, int);

	retval = call_firmware(argarray);
	if (retval == 0) {
		retval = argarray[LOW(argnum++)];  // Catch result
		if (retval == 0) {
			while (numres--) {
				intp = va_arg(ap, int *);
				*intp = argarray[LOW(argnum++)];
			}
		}
	}
예제 #29
0
파일: wrappers64.c 프로젝트: Bootz/OpenFW
long
OFSetprop(
    phandle device_id,
    char *name,
    char *buf,
    ULONG buflen
    )
{
	ULONG argarray[] = { (ULONG)"setprop",4,1,0,0,0,0,0};
	argarray[CIF_HANDLER_IN+0] = (long)device_id;
	argarray[CIF_HANDLER_IN+1] = (long)name;
	argarray[CIF_HANDLER_IN+2] = (long)buf;
	argarray[CIF_HANDLER_IN+3] = buflen;
	if (call_firmware(argarray) != 0)
	{
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+4]);
}
예제 #30
0
파일: wrappers.c 프로젝트: Bootz/OpenFW
long
OFSeek(
    ihandle instance_id,
    ULONG poshi,
    ULONG poslo
    )
{
#ifdef CIF64
	ULONG argarray[] = { 0,(ULONG)"seek", 0,3, 0,1, 0,0, 0,0, 0,0, 0,0};
#else
	cell_t argarray[] = { (cell_t)"seek", 3,1,0,0,0,0};
#endif

	argarray[CIF_HANDLER_IN+LOW(0)] = (long) instance_id;
	argarray[CIF_HANDLER_IN+LOW(1)] = poshi;
	argarray[CIF_HANDLER_IN+LOW(2)] = poslo;
	if (call_firmware(argarray) != 0) {
		return (-1);
	}
	return (argarray[CIF_HANDLER_IN+LOW(3)]);
}