sys_ioctl: truncate 'cmd' from 'unsigned long' to 'unsigned int'

During implementing new ioctl, it was discovered that on x86-64 systems
'cmd' argument of 'sys_ioctl' sometimes has 32 most significant bits 0 and
sometimes 1.

As I understand kernel receive arguments for syscall as if they have type
'[unsigned] long', but signature of 'sys_ioctl' is

   long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);

So 32 most significant bits of 'cmd' are discarded in kernel. Therefore
ioctl(15, 0xffffffffc008551a, 0x1041bf0) and
ioctl(15, 0x00000000c008551a, 0x1041bf0) are the same ioctls.

This patch truncate 'cmd' from 'unsigned long' to 'unsigned int' in
valgrind.
sys_ioctl: implement a few SNDDRV_CTL_* ioctls

Currently valgrind prints lots of false positives on any alsa mixer program,
due to unimplemented VKI_SNDRV_CTL_IOCTL_TLV_READ ioctl:

==2862== Conditional jump or move depends on uninitialised value(s)
==2862==    at 0x4E72307: snd_tlv_get_dB_range (tlv.c:170)
==2862==    by 0x4E8A74D: get_dB_range (simple_none.c:1162)
==2862==    by 0x4E8A7EE: get_dB_range_ops (simple_none.c:1176)
==2862==    by 0x4E8559C: snd_mixer_selem_get_playback_dB_range (simple.c:298)
==2862==  Uninitialised value was created by a heap allocation
==2862==    at 0x4C2CD7B: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2862==    by 0x4E8A57E: init_db_range (simple_none.c:1114)
==2862==    by 0x4E8A714: get_dB_range (simple_none.c:1159)
==2862==    by 0x4E8A7EE: get_dB_range_ops (simple_none.c:1176)
==2862==    by 0x4E8559C: snd_mixer_selem_get_playback_dB_range (simple.c:298)

The problem is that this ioctl uses flexible array member and valgrind doesn't know
how many elements of this array are initialized.

Also this patch implement 5 other VKI_SNDRV_CTL_IOCTL_* althought they are
not caused any false positives on real programs that use alsa-lib.