Index: uspace/app/usbinfo/desctree.c
===================================================================
--- uspace/app/usbinfo/desctree.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/app/usbinfo/desctree.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -50,5 +50,5 @@
 
 static void browse_descriptor_tree_internal(usb_dp_parser_t *parser,
-    usb_dp_parser_data_t *data, uint8_t *root, size_t depth,
+    usb_dp_parser_data_t *data, const uint8_t *root, size_t depth,
     dump_descriptor_in_tree_t callback, void *arg)
 {
@@ -57,5 +57,5 @@
 	}
 	callback(root, depth, arg);
-	uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
+	const uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
 	do {
 		browse_descriptor_tree_internal(parser, data, child, depth + 1,
Index: uspace/app/usbinfo/dump.c
===================================================================
--- uspace/app/usbinfo/dump.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/app/usbinfo/dump.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -110,10 +110,10 @@
 }
 
-static void dump_tree_descriptor(uint8_t *descriptor, size_t depth)
+static void dump_tree_descriptor(const uint8_t *descriptor, size_t depth)
 {
 	if (descriptor == NULL) {
 		return;
 	}
-	int type = (int) *(descriptor + 1);
+	int type = descriptor[1];
 	const char *name = "unknown";
 	switch (type) {
@@ -136,6 +136,7 @@
 }
 
-static void dump_tree_internal(usb_dp_parser_t *parser, usb_dp_parser_data_t *data,
-    uint8_t *root, size_t depth)
+static void dump_tree_internal(
+    usb_dp_parser_t *parser, usb_dp_parser_data_t *data,
+    const uint8_t *root, size_t depth)
 {
 	if (root == NULL) {
@@ -143,5 +144,5 @@
 	}
 	dump_tree_descriptor(root, depth);
-	uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
+	const uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
 	do {
 		dump_tree_internal(parser, data, child, depth + 1);
Index: uspace/app/usbinfo/hid.c
===================================================================
--- uspace/app/usbinfo/hid.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/app/usbinfo/hid.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -55,5 +55,5 @@
 } descriptor_walk_context_t;
 
-static bool is_descriptor_kind(uint8_t *d, usb_descriptor_type_t t)
+static bool is_descriptor_kind(const uint8_t *d, usb_descriptor_type_t t)
 {
 	if (d == NULL) {
@@ -180,5 +180,5 @@
  * @param arg Custom argument, passed as descriptor_walk_context_t.
  */
-static void descriptor_walk_callback(uint8_t *raw_descriptor,
+static void descriptor_walk_callback(const uint8_t *raw_descriptor,
     size_t depth, void *arg)
 {
Index: uspace/app/usbinfo/info.c
===================================================================
--- uspace/app/usbinfo/info.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/app/usbinfo/info.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -51,6 +51,6 @@
 }
 
-static void dump_match_ids_from_interface(uint8_t *descriptor, size_t depth,
-    void *arg)
+static void dump_match_ids_from_interface(
+    const uint8_t *descriptor, size_t depth, void *arg)
 {
 	if (depth != 1) {
@@ -165,6 +165,6 @@
 
 
-static void dump_descriptor_tree_callback(uint8_t *descriptor,
-    size_t depth, void *arg)
+static void dump_descriptor_tree_callback(
+    const uint8_t *descriptor, size_t depth, void *arg)
 {
 	const char *indent = get_indent(depth + 1);
@@ -246,6 +246,6 @@
 }
 
-static void find_string_indexes_callback(uint8_t *descriptor,
-    size_t depth, void *arg)
+static void find_string_indexes_callback(
+    const uint8_t *descriptor, size_t depth, void *arg)
 {
 	size_t descriptor_length = descriptor[0];
Index: uspace/app/usbinfo/usbinfo.h
===================================================================
--- uspace/app/usbinfo/usbinfo.h	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/app/usbinfo/usbinfo.h	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -74,5 +74,5 @@
 void destroy_device(usbinfo_device_t *);
 
-typedef void (*dump_descriptor_in_tree_t)(uint8_t *, size_t, void *);
+typedef void (*dump_descriptor_in_tree_t)(const uint8_t *, size_t, void *);
 void browse_descriptor_tree(uint8_t *, size_t, usb_dp_descriptor_nesting_t *,
     dump_descriptor_in_tree_t, size_t, void *);
Index: uspace/drv/bus/usb/usbmid/dump.c
===================================================================
--- uspace/drv/bus/usb/usbmid/dump.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/drv/bus/usb/usbmid/dump.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -47,10 +47,10 @@
  * @param depth Nesting depth.
  */
-static void dump_tree_descriptor(uint8_t *data, size_t depth)
+static void dump_tree_descriptor(const uint8_t *data, size_t depth)
 {
 	if (data == NULL) {
 		return;
 	}
-	int type = (int) *(data + 1);
+	const int type = data[1];
 	if (type == USB_DESCTYPE_INTERFACE) {
 		usb_standard_interface_descriptor_t *descriptor
@@ -71,6 +71,7 @@
  * @param depth Nesting depth.
  */
-static void dump_tree_internal(usb_dp_parser_t *parser, usb_dp_parser_data_t *data,
-    uint8_t *root, size_t depth)
+static void dump_tree_internal(
+    usb_dp_parser_t *parser, usb_dp_parser_data_t *data,
+    const uint8_t *root, size_t depth)
 {
 	if (root == NULL) {
@@ -78,5 +79,5 @@
 	}
 	dump_tree_descriptor(root, depth);
-	uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
+	const uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
 	do {
 		dump_tree_internal(parser, data, child, depth + 1);
Index: uspace/drv/bus/usb/usbmid/explore.c
===================================================================
--- uspace/drv/bus/usb/usbmid/explore.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/drv/bus/usb/usbmid/explore.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -86,6 +86,6 @@
 	};
 
-	uint8_t *interface_ptr = usb_dp_get_nested_descriptor(&parser, &data,
-	    data.data);
+	const uint8_t *interface_ptr =
+	    usb_dp_get_nested_descriptor(&parser, &data, data.data);
 	if (interface_ptr == NULL) {
 		return;
Index: uspace/lib/usbdev/include/usb/dev/dp.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/dp.h	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/lib/usbdev/include/usb/dev/dp.h	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -59,5 +59,5 @@
 typedef struct {
 	/** Used descriptor nesting. */
-	usb_dp_descriptor_nesting_t *nesting;
+	const usb_dp_descriptor_nesting_t *nesting;
 } usb_dp_parser_t;
 
@@ -72,11 +72,13 @@
 } usb_dp_parser_data_t;
 
-uint8_t *usb_dp_get_nested_descriptor(usb_dp_parser_t *,
-    usb_dp_parser_data_t *, uint8_t *);
-uint8_t *usb_dp_get_sibling_descriptor(usb_dp_parser_t *,
-    usb_dp_parser_data_t *, uint8_t *, uint8_t *);
+typedef void (*walk_callback_t)(const uint8_t *, size_t, void *);
 
-void usb_dp_walk_simple(uint8_t *, size_t, usb_dp_descriptor_nesting_t *,
-    void (*)(uint8_t *, size_t, void *), void *);
+const uint8_t *usb_dp_get_nested_descriptor(const usb_dp_parser_t *,
+    const usb_dp_parser_data_t *, const uint8_t *);
+const uint8_t *usb_dp_get_sibling_descriptor(const usb_dp_parser_t *,
+    const usb_dp_parser_data_t *, const uint8_t *, const uint8_t *);
+
+void usb_dp_walk_simple(uint8_t *, size_t, const usb_dp_descriptor_nesting_t *,
+    walk_callback_t, void *);
 
 #endif
Index: uspace/lib/usbdev/include/usb/dev/driver.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/driver.h	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/lib/usbdev/include/usb/dev/driver.h	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -53,7 +53,7 @@
 typedef struct {
 	/** Interface descriptor. */
-	usb_standard_interface_descriptor_t *interface;
+	const usb_standard_interface_descriptor_t *interface;
 	/** Pointer to start of descriptor tree bound with this interface. */
-	uint8_t *nested_descriptors;
+	const uint8_t *nested_descriptors;
 	/** Size of data pointed by nested_descriptors in bytes. */
 	size_t nested_descriptors_size;
Index: uspace/lib/usbdev/src/altiface.c
===================================================================
--- uspace/lib/usbdev/src/altiface.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/lib/usbdev/src/altiface.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -54,8 +54,8 @@
 	assert(config_descr_size > 0);
 
-	usb_dp_parser_t dp_parser = {
+	const usb_dp_parser_t dp_parser = {
 		.nesting = usb_dp_standard_descriptor_nesting
 	};
-	usb_dp_parser_data_t dp_data = {
+	const usb_dp_parser_data_t dp_data = {
 		.data = config_descr,
 		.size = config_descr_size,
@@ -65,5 +65,5 @@
 	size_t alternate_count = 0;
 
-	uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
+	const uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
 	    &dp_data, config_descr);
 	while (iface_ptr != NULL) {
@@ -140,5 +140,5 @@
 	    = &alternates->alternatives[0];
 
-	uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
+	const uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
 	    &dp_data, dp_data.data);
 	while (iface_ptr != NULL) {
Index: uspace/lib/usbdev/src/dp.c
===================================================================
--- uspace/lib/usbdev/src/dp.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/lib/usbdev/src/dp.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -75,6 +75,6 @@
  * @return Whether @p ptr points inside <code>data->data</code> field.
  */
-static bool is_valid_descriptor_pointer(usb_dp_parser_data_t *data,
-    uint8_t *ptr)
+static bool is_valid_descriptor_pointer(const usb_dp_parser_data_t *data,
+    const uint8_t *ptr)
 {
 	if (ptr == NULL) {
@@ -100,11 +100,11 @@
  * @retval NULL Invalid input or no next descriptor.
  */
-static uint8_t *get_next_descriptor(usb_dp_parser_data_t *data,
-    uint8_t *current)
+static const uint8_t *get_next_descriptor(const usb_dp_parser_data_t *data,
+    const uint8_t *current)
 {
 	assert(is_valid_descriptor_pointer(data, current));
 
-	uint8_t current_length = *current;
-	uint8_t *next = current + current_length;
+	const uint8_t current_length = *current;
+	const uint8_t *next = current + current_length;
 
 	if (!is_valid_descriptor_pointer(data, next)) {
@@ -124,5 +124,5 @@
  * @retval -1 Invalid input.
  */
-static int get_descriptor_type(usb_dp_parser_data_t *data, uint8_t *start)
+static int get_descriptor_type(const usb_dp_parser_data_t *data, const uint8_t *start)
 {
 	if (start == NULL) {
@@ -145,8 +145,8 @@
  * @return Whether @p child could be child of @p parent.
  */
-static bool is_nested_descriptor_type(usb_dp_parser_t *parser,
+static bool is_nested_descriptor_type(const usb_dp_parser_t *parser,
     int child, int parent)
 {
-	usb_dp_descriptor_nesting_t *nesting = parser->nesting;
+	const usb_dp_descriptor_nesting_t *nesting = parser->nesting;
 	while ((nesting->child > 0) && (nesting->parent > 0)) {
 		if ((nesting->child == child) && (nesting->parent == parent)) {
@@ -166,6 +166,6 @@
  * @return Whether @p child could be child of @p parent.
  */
-static bool is_nested_descriptor(usb_dp_parser_t *parser,
-    usb_dp_parser_data_t *data, uint8_t *child, uint8_t *parent)
+static bool is_nested_descriptor(const usb_dp_parser_t *parser,
+    const usb_dp_parser_data_t *data, const uint8_t *child, const uint8_t *parent)
 {
 	return is_nested_descriptor_type(parser,
@@ -183,6 +183,6 @@
  * @retval NULL Invalid input.
  */
-uint8_t *usb_dp_get_nested_descriptor(usb_dp_parser_t *parser,
-    usb_dp_parser_data_t *data, uint8_t *parent)
+const uint8_t *usb_dp_get_nested_descriptor(const usb_dp_parser_t *parser,
+    const usb_dp_parser_data_t *data, const uint8_t *parent)
 {
 	if (!is_valid_descriptor_pointer(data, parent)) {
@@ -190,5 +190,5 @@
 	}
 
-	uint8_t *next = get_next_descriptor(data, parent);
+	const uint8_t *next = get_next_descriptor(data, parent);
 	if (next == NULL) {
 		return NULL;
@@ -211,12 +211,14 @@
  * @retval NULL Invalid input.
  */
-static uint8_t *skip_nested_descriptors(usb_dp_parser_t *parser,
-    usb_dp_parser_data_t *data, uint8_t *parent)
-{
-	uint8_t *child = usb_dp_get_nested_descriptor(parser, data, parent);
+static const uint8_t *skip_nested_descriptors(const usb_dp_parser_t *parser,
+    const usb_dp_parser_data_t *data, const uint8_t *parent)
+{
+	const uint8_t *child =
+	    usb_dp_get_nested_descriptor(parser, data, parent);
 	if (child == NULL) {
 		return get_next_descriptor(data, parent);
 	}
-	uint8_t *next_child = skip_nested_descriptors(parser, data, child);
+	const uint8_t *next_child =
+	    skip_nested_descriptors(parser, data, child);
 	while (is_nested_descriptor(parser, data, next_child, parent)) {
 		next_child = skip_nested_descriptors(parser, data, next_child);
@@ -236,6 +238,7 @@
  * @retval NULL Invalid input.
  */
-uint8_t *usb_dp_get_sibling_descriptor(usb_dp_parser_t *parser,
-    usb_dp_parser_data_t *data, uint8_t *parent, uint8_t *sibling)
+const uint8_t *usb_dp_get_sibling_descriptor(
+    const usb_dp_parser_t *parser, const usb_dp_parser_data_t *data,
+    const uint8_t *parent, const uint8_t *sibling)
 {
 	if (!is_valid_descriptor_pointer(data, parent)
@@ -244,5 +247,6 @@
 	}
 
-	uint8_t *possible_sibling = skip_nested_descriptors(parser, data, sibling);
+	const uint8_t *possible_sibling =
+	    skip_nested_descriptors(parser, data, sibling);
 	if (possible_sibling == NULL) {
 		return NULL;
@@ -269,7 +273,7 @@
  * @param arg Custom (user) argument.
  */
-static void usb_dp_browse_simple_internal(usb_dp_parser_t *parser,
-    usb_dp_parser_data_t *data, uint8_t *root, size_t depth,
-    void (*callback)(uint8_t *, size_t, void *), void *arg)
+static void usb_dp_browse_simple_internal(const usb_dp_parser_t *parser,
+    const usb_dp_parser_data_t *data, const uint8_t *root, size_t depth,
+    void (*callback)(const uint8_t *, size_t, void *), void *arg)
 {
 	if (root == NULL) {
@@ -277,5 +281,5 @@
 	}
 	callback(root, depth, arg);
-	uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
+	const uint8_t *child = usb_dp_get_nested_descriptor(parser, data, root);
 	do {
 		usb_dp_browse_simple_internal(parser, data, child, depth + 1,
@@ -301,6 +305,6 @@
  */
 void usb_dp_walk_simple(uint8_t *descriptors, size_t descriptors_size,
-    usb_dp_descriptor_nesting_t *descriptor_nesting,
-    void (*callback)(uint8_t *, size_t, void *), void *arg)
+    const usb_dp_descriptor_nesting_t *descriptor_nesting,
+    walk_callback_t callback, void *arg)
 {
 	if ((descriptors == NULL) || (descriptors_size == 0)
@@ -309,5 +313,5 @@
 	}
 
-	usb_dp_parser_data_t data = {
+	const usb_dp_parser_data_t data = {
 		.data = descriptors,
 		.size = descriptors_size,
@@ -315,5 +319,5 @@
 	};
 
-	usb_dp_parser_t parser = {
+	const usb_dp_parser_t parser = {
 		.nesting = descriptor_nesting
 	};
Index: uspace/lib/usbdev/src/pipesinit.c
===================================================================
--- uspace/lib/usbdev/src/pipesinit.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/lib/usbdev/src/pipesinit.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -68,5 +68,5 @@
  * @return Whether the given descriptor is endpoint descriptor.
  */
-static inline bool is_endpoint_descriptor(uint8_t *descriptor)
+static inline bool is_endpoint_descriptor(const uint8_t *descriptor)
 {
 	return descriptor[1] == USB_DESCTYPE_ENDPOINT;
@@ -80,5 +80,5 @@
  */
 static bool endpoint_fits_description(const usb_endpoint_description_t *wanted,
-    usb_endpoint_description_t *found)
+    const usb_endpoint_description_t *found)
 {
 #define _SAME(fieldname) ((wanted->fieldname) == (found->fieldname))
@@ -120,5 +120,5 @@
 static usb_endpoint_mapping_t *find_endpoint_mapping(
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
-    usb_endpoint_description_t *found_endpoint,
+    const usb_endpoint_description_t *found_endpoint,
     int interface_number, int interface_setting)
 {
@@ -160,5 +160,4 @@
     usb_device_connection_t *wire)
 {
-	usb_endpoint_description_t description;
 
 	/*
@@ -167,18 +166,19 @@
 
 	/* Actual endpoint number is in bits 0..3 */
-	usb_endpoint_t ep_no = endpoint->endpoint_address & 0x0F;
-
-	/* Endpoint direction is set by bit 7 */
-	description.direction = (endpoint->endpoint_address & 128)
-	    ? USB_DIRECTION_IN : USB_DIRECTION_OUT;
-	/* Transfer type is in bits 0..2 and the enum values corresponds 1:1 */
-	description.transfer_type = endpoint->attributes & 3;
-
-	/*
-	 * Get interface characteristics.
-	 */
-	description.interface_class = interface->interface_class;
-	description.interface_subclass = interface->interface_subclass;
-	description.interface_protocol = interface->interface_protocol;
+	const usb_endpoint_t ep_no = endpoint->endpoint_address & 0x0F;
+
+	const usb_endpoint_description_t description = {
+		/* Endpoint direction is set by bit 7 */
+		.direction = (endpoint->endpoint_address & 128)
+		    ? USB_DIRECTION_IN : USB_DIRECTION_OUT,
+		/* Transfer type is in bits 0..2 and
+		 * the enum values corresponds 1:1 */
+		.transfer_type = endpoint->attributes & 3,
+
+		/* Get interface characteristics. */
+		.interface_class = interface->interface_class,
+		.interface_subclass = interface->interface_subclass,
+		.interface_protocol = interface->interface_protocol,
+	};
 
 	/*
@@ -225,7 +225,7 @@
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     usb_dp_parser_t *parser, usb_dp_parser_data_t *parser_data,
-    uint8_t *interface_descriptor)
-{
-	uint8_t *descriptor = usb_dp_get_nested_descriptor(parser,
+    const uint8_t *interface_descriptor)
+{
+	const uint8_t *descriptor = usb_dp_get_nested_descriptor(parser,
 	    parser_data, interface_descriptor);
 
@@ -322,5 +322,5 @@
 	 * Iterate through all interfaces.
 	 */
-	uint8_t *interface = usb_dp_get_nested_descriptor(&dp_parser,
+	const uint8_t *interface = usb_dp_get_nested_descriptor(&dp_parser,
 	    &dp_data, configuration_descriptor);
 	if (interface == NULL) {
@@ -329,6 +329,5 @@
 	do {
 		(void) process_interface(mapping, mapping_count,
-		    &dp_parser, &dp_data,
-		    interface);
+		    &dp_parser, &dp_data, interface);
 		interface = usb_dp_get_sibling_descriptor(&dp_parser, &dp_data,
 		    configuration_descriptor, interface);
Index: uspace/lib/usbhid/src/hidreport.c
===================================================================
--- uspace/lib/usbhid/src/hidreport.c	(revision 2a5b62b53750c7ae2c795af4b93bb10c1bafe435)
+++ uspace/lib/usbhid/src/hidreport.c	(revision 8a121b1fdd1be03445fd6d5c9d9a38c69090c325)
@@ -69,5 +69,5 @@
 	 * First nested descriptor of the configuration descriptor.
 	 */
-	uint8_t *d = 
+	const uint8_t *d = 
 	    usb_dp_get_nested_descriptor(&parser, &parser_data, 
 	    dev->descriptors.configuration);
@@ -92,5 +92,5 @@
 	 * First nested descriptor of the interface descriptor.
 	 */
-	uint8_t *iface_desc = d;
+	const uint8_t *iface_desc = d;
 	d = usb_dp_get_nested_descriptor(&parser, &parser_data, iface_desc);
 	
