Index: uspace/drv/audio/sb16/dsp.c
===================================================================
--- uspace/drv/audio/sb16/dsp.c	(revision c5cbc1b77fecac0b1484597580975b90e17ad5b1)
+++ uspace/drv/audio/sb16/dsp.c	(revision f0241bdae09081419ccaf904a585df8e6359182d)
@@ -227,4 +227,23 @@
 }
 
+unsigned sb_dsp_query_cap(sb_dsp_t *dsp, audio_cap_t cap)
+{
+	switch(cap) {
+	case AUDIO_CAP_RECORD:
+	case AUDIO_CAP_PLAYBACK:
+	case AUDIO_CAP_INTERRUPT:
+		return 1;
+	case AUDIO_CAP_MAX_BUFFER:
+		return MAX_BUFFER_SIZE;
+	case AUDIO_CAP_INTERRUPT_MIN_FRAMES:
+		return 1;
+	case AUDIO_CAP_INTERRUPT_MAX_FRAMES:
+		return 16535;
+	case AUDIO_CAP_BUFFER_POS:
+	default:
+		return 0;
+	}
+}
+
 int sb_dsp_test_format(sb_dsp_t *dsp, unsigned *channels, unsigned *rate,
   pcm_sample_format_t *format)
Index: uspace/drv/audio/sb16/dsp.h
===================================================================
--- uspace/drv/audio/sb16/dsp.h	(revision c5cbc1b77fecac0b1484597580975b90e17ad5b1)
+++ uspace/drv/audio/sb16/dsp.h	(revision f0241bdae09081419ccaf904a585df8e6359182d)
@@ -39,4 +39,5 @@
 #include <errno.h>
 #include <pcm/sample_format.h>
+#include <audio_pcm_iface.h>
 
 #include "registers.h"
@@ -72,5 +73,5 @@
     int dma8, int dma16);
 void sb_dsp_interrupt(sb_dsp_t *dsp);
-
+unsigned sb_dsp_query_cap(sb_dsp_t *dsp, audio_cap_t cap);
 int sb_dsp_test_format(sb_dsp_t *dsp, unsigned *channels, unsigned *rate,
   pcm_sample_format_t *format);
Index: uspace/drv/audio/sb16/pcm_iface.c
===================================================================
--- uspace/drv/audio/sb16/pcm_iface.c	(revision c5cbc1b77fecac0b1484597580975b90e17ad5b1)
+++ uspace/drv/audio/sb16/pcm_iface.c	(revision f0241bdae09081419ccaf904a585df8e6359182d)
@@ -46,4 +46,13 @@
 	return EOK;
 }
+
+static unsigned sb_query_cap(ddf_fun_t *fun, audio_cap_t cap)
+{
+	assert(fun);
+	assert(fun->driver_data);
+	sb_dsp_t *dsp = fun->driver_data;
+	return sb_dsp_query_cap(dsp, cap);
+}
+
 static int sb_test_format(ddf_fun_t *fun, unsigned *channels, unsigned *rate,
     pcm_sample_format_t *format)
@@ -116,4 +125,5 @@
 	.get_info_str = sb_get_info_str,
 	.test_format = sb_test_format,
+	.query_cap = sb_query_cap,
 
 	.get_buffer = sb_get_buffer,
