浏览代码

Prevent USB commands from working when USB is stopped.

Bartlomiej Sieka 19 年之前
父节点
当前提交
e51aae3829
共有 3 个文件被更改,包括 12 次插入0 次删除
  1. 2 0
      CHANGELOG
  2. 5 0
      common/cmd_usb.c
  3. 5 0
      common/usb.c

+ 2 - 0
CHANGELOG

@@ -2,6 +2,8 @@
 Changes since U-Boot 1.1.4:
 ======================================================================
 
+* Prevent USB commands from working when USB is stopped.
+
 * Add rudimentary handling of alternate settings of USB interfaces.
   This is in order to fix issues with some USB sticks or knives timing
   out during initialisation. Some code readability improvements.

+ 5 - 0
common/cmd_usb.c

@@ -444,6 +444,7 @@ int do_usb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 	int i;
 	struct usb_device *dev = NULL;
+	extern char usb_started;
 #ifdef CONFIG_USB_STORAGE
 	block_dev_desc_t *stor_dev;
 #endif
@@ -477,6 +478,10 @@ int do_usb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 		usb_stop();
 		return 0;
 	}
+	if (!usb_started) {
+		printf("USB is stopped. Please issue 'usb start' first.\n");
+		return 1;
+	}
 	if (strncmp(argv[1],"tree",4) == 0) {
 		printf("\nDevice Tree:\n");
 		usb_show_tree(usb_get_dev_index(0));

+ 5 - 0
common/usb.c

@@ -72,6 +72,8 @@ static int running;
 static int asynch_allowed;
 static struct devrequest setup_packet;
 
+char usb_started; /* flag for the started/stopped USB status */
+
 /**********************************************************************
  * some forward declerations...
  */
@@ -110,10 +112,12 @@ int usb_init(void)
 		printf("scanning bus for devices... ");
 		running=1;
 		usb_scan_devices();
+		usb_started = 1;
 		return 0;
 	}
 	else {
 		printf("Error, couldn't init Lowlevel part\n");
+		usb_started = 0;
 		return -1;
 	}
 }
@@ -124,6 +128,7 @@ int usb_init(void)
 int usb_stop(void)
 {
 	asynch_allowed=1;
+	usb_started = 0;
 	usb_hub_reset();
 	return usb_lowlevel_stop();
 }