Package-Name: psplink
Requires: pspsdk
Homepage: http://ps2dev.org/psp/Tools/PspLink
Source: svn://svn/svn.ps2dev.org/psp/trunk/psplinkusb/psplink/(.*) $1
#Source: svn://svn/svn.ps2dev.org/psp/trunk/psplink/psplink/(.*) $1
#Source: svn://svn/svn.ps2dev.org/psp/trunk/psplink@1990/psplink/(.*) 2.0
Repack:
	tar xzvfp "$(SOURCE)"
	test -d psplink-"$(VERSION)" || mv psplink* psplink-"$(VERSION)"
Compile:
	$(MAKE) release
	rm -rf "$(PREFIX)"/*
	cp -av release/* "$(PREFIX)"/
	mkdir -p "$(PREFIX)"/v2.71
	cp -a release_oe/psplink "$(PREFIX)"/v2.71/
	$(MAKE) -C release/pc/pspsh
	mkdir -p "$(PREFIX)"/bin
	cp -p release/pc/pspsh/pspsh "$(PREFIX)"/bin/
	$(MAKE) -C release/pc/usbhostfs_pc READLINE_SHELL=1
	mkdir -p "$(PREFIX)"/sbin
	cp -p release/pc/usbhostfs_pc/usbhostfs_pc "$(PREFIX)"/sbin/
Install:
	chown root.console "$(PREFIX)"/sbin/usbhostfs_pc
	chmod 4750 "$(PREFIX)"/sbin/usbhostfs_pc
	$(MAKE) instbin BIN=pspsh
	$(MAKE) instsbin SBIN=usbhostfs_pc
	# Nothing to do!
Patch: <<EOT
######## begin patch to allow access to extra RAM on PSP Slim
--- psplink/decodeaddr.c.old	2007-09-30 22:14:41 +0900
+++ psplink/decodeaddr.c	2007-11-06 13:08:14 +0900
@@ -41,15 +41,12 @@
 	{ 0x40010000, (16 * 1024), MEM_ATTRIB_ALL, "Scratchpad (uncached)", 0 },
 	{ 0x04000000, (2 * 1024 * 1024), MEM_ATTRIB_ALL, "VRAM", 0 },
 	{ 0x44000000, (2 * 1024 * 1024), MEM_ATTRIB_ALL, "VRAM (uncached)", 0 },
-	{ 0x08800000, (24 * 1024 * 1024), MEM_ATTRIB_ALL, "User memory", 0 },
-	{ 0x48800000, (24 * 1024 * 1024), MEM_ATTRIB_ALL, "User memory (uncached)", 0 },
-	{ 0x88000000, (4 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (low)", 0 },
-	{ 0xA8000000, (4 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (low uncached)", 0 },
-	/* Don't use the following 2 on a 1.5, just crashes the psp */
-	{ 0x88400000, (4 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (mid v1.0 only)", 1 },
-	{ 0xA8400000, (4 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (mid v1.0 only uncached)", 1 },
-	{ 0x88800000, (24 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (high)", 0 },
-	{ 0xA8800000, (24 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (high uncached)", 0 },
+	{ 0x08800000, (56 * 1024 * 1024), MEM_ATTRIB_ALL, "User memory", 0 },
+	{ 0x48800000, (56 * 1024 * 1024), MEM_ATTRIB_ALL, "User memory (uncached)", 0 },
+	{ 0x88000000, (8 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (low)", 0 },
+	{ 0xA8000000, (8 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (low uncached)", 0 },
+	{ 0x88800000, (56 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (high)", 0 },
+	{ 0xA8800000, (56 * 1024 * 1024), MEM_ATTRIB_ALL, "Kernel memory (high uncached)", 0 },
 	{ 0xBFC00000, (1 * 1024 * 1024), MEM_ATTRIB_ALL, "Internal RAM", 0 },
 	{ 0, 0, 0, NULL }
 };
######## end patch to allow access to extra RAM on PSP Slim
EOT
NoPatch: <<EOT
######## begin patch to enforce 1s timeout on USB (libusb-0.1.12 workaround)
--- usbhostfs_pc/main.c.old	2007-09-30 22:14:45 +0900
+++ usbhostfs_pc/main.c	2007-11-20 14:33:59 +0900
@@ -58,7 +58,7 @@
 #ifdef __CYGWIN__
 #define USB_TIMEOUT 1000
 #else
-#define USB_TIMEOUT 0
+#define USB_TIMEOUT 1000
 #endif
 
 #define MAX_HOSTDRIVES 8
@@ -858,7 +858,7 @@
 	resp.cmd.magic = LE32(HOSTFS_MAGIC);
 	resp.cmd.command = LE32(HOSTFS_CMD_HELLO);
 
-	return usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+	return usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 }
 
 int handle_open(struct usb_dev_handle *hDev, struct HostFsOpenCmd *cmd, int cmdlen)
@@ -888,7 +888,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading open data cmd->extralen %ud, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -898,7 +898,7 @@
 		V_PRINTF(2, "Open command mode %08X mask %08X name %s\n", LE32(cmd->mode), LE32(cmd->mask), path);
 		resp.res = LE32(open_file(LE32(cmd->fsnum), path, LE32(cmd->mode), LE32(cmd->mask)));
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -932,7 +932,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading open data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -942,7 +942,7 @@
 		V_PRINTF(2, "Dopen command name %s\n", path);
 		resp.res = LE32(dir_open(LE32(cmd->fsnum), path));
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1008,7 +1008,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, write_block, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, write_block, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading write data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1035,7 +1035,7 @@
 			fprintf(stderr, "Error invalid fid %d\n", fid);
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1123,7 +1123,7 @@
 			fprintf(stderr, "Error invalid fid %d\n", fid);
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 		if(ret < 0)
 		{
 			fprintf(stderr, "Error writing read response (%d)\n", ret);
@@ -1132,7 +1132,7 @@
 
 		if(LE32(resp.cmd.extralen) > 0)
 		{
-			ret = euid_usb_bulk_write(hDev, 0x2, read_block, LE32(resp.cmd.extralen), 10000);
+			ret = euid_usb_bulk_write(hDev, 0x2, read_block, LE32(resp.cmd.extralen), 1000);
 		}
 	}
 	while(0);
@@ -1184,7 +1184,7 @@
 			fprintf(stderr, "Error invalid file id in close command (%d)\n", fid);
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1214,7 +1214,7 @@
 		V_PRINTF(2, "Dclose command did: %d\n", did);
 		resp.res = dir_close(did);
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1270,7 +1270,7 @@
 			fprintf(stderr, "Error invalid did %d\n", did);
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 		if(ret < 0)
 		{
 			fprintf(stderr, "Error writing dread response (%d)\n", ret);
@@ -1279,7 +1279,7 @@
 
 		if(LE32(resp.cmd.extralen) > 0)
 		{
-			ret = euid_usb_bulk_write(hDev, 0x2, (char *) dir, LE32(resp.cmd.extralen), 10000);
+			ret = euid_usb_bulk_write(hDev, 0x2, (char *) dir, LE32(resp.cmd.extralen), 1000);
 		}
 	}
 	while(0);
@@ -1327,7 +1327,7 @@
 			fprintf(stderr, "Error invalid file id in close command (%d)\n", fid);
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1362,7 +1362,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading remove data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1382,7 +1382,7 @@
 			}
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1417,7 +1417,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading rmdir data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1437,7 +1437,7 @@
 			}
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1472,7 +1472,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading mkdir data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1492,7 +1492,7 @@
 			}
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1529,7 +1529,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading getstat data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1546,7 +1546,7 @@
 			}
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 		if(ret < 0)
 		{
 			fprintf(stderr, "Error writing getstat response (%d)\n", ret);
@@ -1555,7 +1555,7 @@
 
 		if(LE32(resp.cmd.extralen) > 0)
 		{
-			ret = euid_usb_bulk_write(hDev, 0x2, (char *) &st, sizeof(st), 10000);
+			ret = euid_usb_bulk_write(hDev, 0x2, (char *) &st, sizeof(st), 1000);
 		}
 	}
 	while(0);
@@ -1679,7 +1679,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading chstat data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1692,7 +1692,7 @@
 			resp.res = LE32(psp_chstat(fullpath, cmd));
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1732,7 +1732,7 @@
 		/* TODO: Should check that length is within a valid range */
 
 		memset(path, 0, sizeof(path));
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading rename data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1775,7 +1775,7 @@
 			}
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1810,7 +1810,7 @@
 
 		/* TODO: Should check that length is within a valid range */
 
-		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 10000);
+		ret = euid_usb_bulk_read(hDev, 0x81, path, LE32(cmd->cmd.extralen), 1000);
 		if(ret != LE32(cmd->cmd.extralen))
 		{
 			fprintf(stderr, "Error reading chdir data cmd->extralen %d, ret %d\n", LE32(cmd->cmd.extralen), ret);
@@ -1826,7 +1826,7 @@
 			resp.res = 0;
 		}
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 	}
 	while(0);
 
@@ -1859,7 +1859,7 @@
 		{
 			/* TODO: Should check that length is within a valid range */
 
-			ret = euid_usb_bulk_read(hDev, 0x81, inbuf, inlen, 10000);
+			ret = euid_usb_bulk_read(hDev, 0x81, inbuf, inlen, 1000);
 			if(ret != inlen)
 			{
 				fprintf(stderr, "Error reading ioctl data cmd->extralen %d, ret %d\n", inlen, ret);
@@ -1869,7 +1869,7 @@
 
 		V_PRINTF(2, "Ioctl command fid %d, cmdno %d, inlen %d\n", LE32(cmd->fid), LE32(cmd->cmdno), inlen);
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 		if(ret < 0)
 		{
 			fprintf(stderr, "Error writing ioctl response (%d)\n", ret);
@@ -1878,7 +1878,7 @@
 
 		if(LE32(resp.cmd.extralen) > 0)
 		{
-			ret = euid_usb_bulk_write(hDev, 0x2, (char *) outbuf, LE32(resp.cmd.extralen), 10000);
+			ret = euid_usb_bulk_write(hDev, 0x2, (char *) outbuf, LE32(resp.cmd.extralen), 1000);
 		}
 	}
 	while(0);
@@ -1972,7 +1972,7 @@
 		{
 			/* TODO: Should check that length is within a valid range */
 
-			ret = euid_usb_bulk_read(hDev, 0x81, inbuf, inlen, 10000);
+			ret = euid_usb_bulk_read(hDev, 0x81, inbuf, inlen, 1000);
 			if(ret != inlen)
 			{
 				fprintf(stderr, "Error reading devctl data cmd->extralen %d, ret %d\n", inlen, ret);
@@ -1994,7 +1994,7 @@
 			default: break;
 		};
 
-		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 10000);
+		ret = euid_usb_bulk_write(hDev, 0x2, (char *) &resp, sizeof(resp), 1000);
 		if(ret < 0)
 		{
 			fprintf(stderr, "Error writing devctl response (%d)\n", ret);
@@ -2003,7 +2003,7 @@
 
 		if(LE32(resp.cmd.extralen) > 0)
 		{
-			ret = euid_usb_bulk_write(hDev, 0x2, (char *) outbuf, LE32(resp.cmd.extralen), 10000);
+			ret = euid_usb_bulk_write(hDev, 0x2, (char *) outbuf, LE32(resp.cmd.extralen), 1000);
 		}
 	}
 	while(0);
@@ -2220,7 +2220,7 @@
 		int readsize;
 
 		readsize = (len - read) > HOSTFS_MAX_BLOCK ? HOSTFS_MAX_BLOCK : (len - read);
-		ret = euid_usb_bulk_read(g_hDev, 0x81, &block[read], readsize, 10000);
+		ret = euid_usb_bulk_read(g_hDev, 0x81, &block[read], readsize, 1000);
 		if(ret != readsize)
 		{
 			fprintf(stderr, "Error reading write data readsize %d, ret %d\n", readsize, ret);
@@ -3083,7 +3083,7 @@
 							if(g_hDev)
 							{
 								cmd->channel = LE32(i);
-								euid_usb_bulk_write(g_hDev, 0x3, buf, readbytes+sizeof(struct AsyncCommand), 10000);
+								euid_usb_bulk_write(g_hDev, 0x3, buf, readbytes+sizeof(struct AsyncCommand), 1000);
 							}
 						}
 						else
######## end patch to enforce 1s timeout on USB (libusb-0.1.12 workaround)
EOT

/pkg/psplink/
/usr/bin/pspsh
/usr/sbin/usbhostfs_pc
