summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Neumann2015-06-08 20:30:34 +0200
committerMarco Neumann2015-06-08 20:30:34 +0200
commit4fec57de0894c5aeaef62f1173a39ab7ecf2239c (patch)
tree78daf7b67785250caa5fdf8bc8bdf56ff45eec0e
downloadaur-4fec57de0894c5aeaef62f1173a39ab7ecf2239c.tar.gz
Initial import
-rw-r--r--.SRCINFO22
-rw-r--r--PKGBUILD41
-rw-r--r--dkms.conf5
-rw-r--r--grsecurity.patch157
-rw-r--r--kernel-3.16.patch12
-rw-r--r--sixfireusb.install19
6 files changed, 256 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..3cad008c2145
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,22 @@
+pkgbase = sixfireusb-dkms
+ pkgdesc = Kernel modules for the Terratec DMX6FireUSB soundcard
+ pkgver = 0.6.1
+ pkgrel = 2
+ url = http://sourceforge.net/projects/sixfireusb
+ install = sixfireusb.install
+ arch = i686
+ arch = x86_64
+ license = GPL
+ depends = dkms
+ optdepends = linux-headers: build the module against Arch kernel
+ source = http://sourceforge.net/projects/sixfireusb/files/sixfireusb-0.6.1.tar.bz2
+ source = kernel-3.16.patch
+ source = grsecurity.patch
+ source = dkms.conf
+ sha512sums = 6428fe074dd2717bcf6f2bdb38b5612694d66254021cc5a627ef5bccf2a7cbfd0e8cb9ca4be4f9855fe89d9be47a9943bbf368d8aec45eda08e4290ede9e9d34
+ sha512sums = 9d612518c48873d1ae9bd28a55b7a54cbb8e4836a87cf9c8870ae5038850107539b3b13684610f31aa2543dae3123cc88f02e477a891d2c3baae6157b0151083
+ sha512sums = 1c5ed0652f83f68c12c05b6675af85ded4b31696db0c07047555ee028f82ecf5c69a1de3d452e82ee137187254f6c27305ee650cc636e003ba1ebeedc007017a
+ sha512sums = 43880b03da504b390471084e140e3b119080621792a9aad41e92e7372fb56fe88321289419f04ce33687955d45dfff049d3ba9b2df5eefee3d061ecb597372d8
+
+pkgname = sixfireusb-dkms
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..b613d573653f
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,41 @@
+# Author (initial package): Patrick Auernig <patrick.auernig@gmail.com>
+# Author (fixes): Marco Neumann <marco@crepererum.net>
+
+pkgname=sixfireusb-dkms
+pkgver=0.6.1
+pkgrel=2
+pkgdesc="Kernel modules for the Terratec DMX6FireUSB soundcard"
+arch=('i686' 'x86_64')
+url="http://sourceforge.net/projects/sixfireusb"
+license=('GPL')
+depends=('dkms')
+optdepends=('linux-headers: build the module against Arch kernel')
+source=(http://sourceforge.net/projects/sixfireusb/files/sixfireusb-$pkgver.tar.bz2
+ kernel-3.16.patch
+ grsecurity.patch
+ dkms.conf
+)
+sha512sums=(
+ '6428fe074dd2717bcf6f2bdb38b5612694d66254021cc5a627ef5bccf2a7cbfd0e8cb9ca4be4f9855fe89d9be47a9943bbf368d8aec45eda08e4290ede9e9d34'
+ '9d612518c48873d1ae9bd28a55b7a54cbb8e4836a87cf9c8870ae5038850107539b3b13684610f31aa2543dae3123cc88f02e477a891d2c3baae6157b0151083'
+ '1c5ed0652f83f68c12c05b6675af85ded4b31696db0c07047555ee028f82ecf5c69a1de3d452e82ee137187254f6c27305ee650cc636e003ba1ebeedc007017a'
+ '43880b03da504b390471084e140e3b119080621792a9aad41e92e7372fb56fe88321289419f04ce33687955d45dfff049d3ba9b2df5eefee3d061ecb597372d8'
+)
+install=sixfireusb.install
+
+build() {
+ cd "${srcdir}"/sixfireusb-$pkgver
+ patch -Np1 -i ../kernel-3.16.patch
+ patch -Np1 -i ../grsecurity.patch
+}
+
+package() {
+ cd ${srcdir}
+
+ install -dm755 "${pkgdir}/usr/src/sixfireusb-${pkgver}"
+
+ cp -r ${srcdir}/sixfireusb-${pkgver}/* "${pkgdir}/usr/src/sixfireusb-${pkgver}/"
+ cp ${srcdir}/dkms.conf "${pkgdir}/usr/src/sixfireusb-${pkgver}/dkms.conf"
+ sed -i -e "s/@VERSION@/${pkgver}/" "${pkgdir}/usr/src/sixfireusb-${pkgver}/dkms.conf"
+}
+
diff --git a/dkms.conf b/dkms.conf
new file mode 100644
index 000000000000..8c2488752e64
--- /dev/null
+++ b/dkms.conf
@@ -0,0 +1,5 @@
+PACKAGE_NAME="sixfireusb"
+PACKAGE_VERSION="@VERSION@"
+BUILT_MODULE_NAME[0]="snd-usb-6fire"
+DEST_MODULE_LOCATION[0]="/extramodules"
+AUTOINSTALL="yes"
diff --git a/grsecurity.patch b/grsecurity.patch
new file mode 100644
index 000000000000..94c342d47658
--- /dev/null
+++ b/grsecurity.patch
@@ -0,0 +1,157 @@
+diff -aur sixfireusb-0.6.1/firmware.c sixfireusb-0.6.1/firmware.c
+--- sixfireusb-0.6.1/firmware.c 2014-08-15 18:33:06.000000000 +0200
++++ sixfireusb-0.6.1/firmware.c 2014-12-11 00:40:40.234928691 +0100
+@@ -207,7 +207,7 @@
+ unsigned int postaddr, u8 *postdata, unsigned int postlen)
+ {
+ int ret;
+- u8 data;
++ u8 *data;
+ struct usb_device *device = interface_to_usbdev(intf);
+ const struct firmware *fw = NULL;
+ struct ihex_record *rec = kmalloc(sizeof(struct ihex_record),
+@@ -216,8 +216,15 @@
+ if (!rec)
+ return -ENOMEM;
+
++ data = kmalloc(1, GFP_KERNEL);
++ if (!data) {
++ kfree(rec);
++ return -ENOMEM;
++ }
++
+ ret = request_firmware(&fw, fwname, &device->dev);
+ if (ret < 0) {
++ kfree(data);
+ kfree(rec);
+ snd_printk(KERN_ERR PREFIX "error requesting ezusb "
+ "firmware %s.\n", fwname);
+@@ -225,6 +232,7 @@
+ }
+ ret = usb6fire_fw_ihex_init(fw, rec);
+ if (ret < 0) {
++ kfree(data);
+ kfree(rec);
+ release_firmware(fw);
+ snd_printk(KERN_ERR PREFIX "error validating ezusb "
+@@ -232,9 +240,10 @@
+ return ret;
+ }
+ /* upload firmware image */
+- data = 0x01; /* stop ezusb cpu */
+- ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, &data, 1);
++ *data = 0x01; /* stop ezusb cpu */
++ ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, data, 1);
+ if (ret < 0) {
++ kfree(data);
+ kfree(rec);
+ release_firmware(fw);
+ snd_printk(KERN_ERR PREFIX "unable to upload ezusb "
+@@ -246,6 +255,7 @@
+ ret = usb6fire_fw_ezusb_write(device, 0xa0, rec->address,
+ rec->data, rec->len);
+ if (ret < 0) {
++ kfree(data);
+ kfree(rec);
+ release_firmware(fw);
+ snd_printk(KERN_ERR PREFIX "unable to upload ezusb "
+@@ -262,12 +272,14 @@
+ if (ret < 0) {
+ snd_printk(KERN_ERR PREFIX "unable to upload ezusb "
+ "firmware %s: post urb.\n", fwname);
++ kfree(data);
+ return ret;
+ }
+ }
+
+- data = 0x00; /* resume ezusb cpu */
+- ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, &data, 1);
++ *data = 0x00; /* resume ezusb cpu */
++ ret = usb6fire_fw_ezusb_write(device, 0xa0, 0xe600, data, 1);
++ kfree(data);
+ if (ret < 0) {
+ snd_printk(KERN_ERR PREFIX "unable to upload ezusb "
+ "firmware %s: end message.\n", fwname);
+@@ -361,12 +373,13 @@
+ struct usb_device *device = interface_to_usbdev(intf);
+ /* buffer: 8 receiving bytes from device and
+ * sizeof(EP_W_MAX_PACKET_SIZE) bytes for non-const copy */
+- u8 buffer[12];
++ u8 *buffer = kmalloc(12, GFP_KERNEL);
+
+ ret = usb6fire_fw_ezusb_read(device, 1, 0, buffer, 8);
+ if (ret < 0) {
+ snd_printk(KERN_ERR PREFIX "unable to receive device "
+ "firmware state.\n");
++ kfree(buffer);
+ return ret;
+ }
+
+@@ -376,44 +389,60 @@
+ for (i = 0; i < 8; i++)
+ snd_printk("%02x ", buffer[i]);
+ snd_printk("\n");
++ kfree(buffer);
+ return -EIO;
+ }
+ /* do we need fpga loader ezusb firmware? */
+ if (buffer[3] == 0x01) {
+ ret = usb6fire_fw_ezusb_upload(intf,
+ "6fire/dmx6firel2.ihx", 0, NULL, 0);
+- if (ret < 0)
++ if (ret < 0) {
++ kfree(buffer);
+ return ret;
++ }
++ kfree(buffer);
+ return FW_NOT_READY;
+ }
+ /* do we need fpga firmware and application ezusb firmware? */
+ else if (buffer[3] == 0x02) {
+ ret = usb6fire_fw_check(buffer + 4);
+- if (ret < 0)
++ if (ret < 0) {
++ kfree(buffer);
+ return ret;
++ }
+ ret = usb6fire_fw_fpga_upload(intf, "6fire/dmx6firecf.bin");
+- if (ret < 0)
++ if (ret < 0) {
++ kfree(buffer);
+ return ret;
++ }
+ memcpy(buffer, ep_w_max_packet_size,
+ sizeof(ep_w_max_packet_size));
+ ret = usb6fire_fw_ezusb_upload(intf, "6fire/dmx6fireap.ihx",
+ 0x0003, buffer, sizeof(ep_w_max_packet_size));
+- if (ret < 0)
++ if (ret < 0) {
++ kfree(buffer);
+ return ret;
++ }
++ kfree(buffer);
+ return FW_NOT_READY;
+ }
+ /* all fw loaded? */
+- else if (buffer[3] == 0x03)
+- return usb6fire_fw_check(buffer + 4);
++ else if (buffer[3] == 0x03) {
++ ret = usb6fire_fw_check(buffer + 4);;
++ kfree(buffer);
++ return ret;
+ /* unknown data? */
+- else {
++ } else {
+ snd_printk(KERN_ERR PREFIX "unknown device firmware state "
+ "received from device: ");
+ for (i = 0; i < 8; i++)
+ snd_printk("%02x ", buffer[i]);
+ snd_printk("\n");
++ kfree(buffer);
+ return -EIO;
+ }
++
++ kfree(buffer);
+ return 0;
+ }
+
diff --git a/kernel-3.16.patch b/kernel-3.16.patch
new file mode 100644
index 000000000000..5f5b197e819b
--- /dev/null
+++ b/kernel-3.16.patch
@@ -0,0 +1,12 @@
+diff -aur sixfireusb-0.6.1/chip.c sixfireusb-0.6.1/chip.c
+--- sixfireusb-0.6.1/chip.c 2013-12-10 04:46:22.000000000 +0100
++++ sixfireusb-0.6.1/chip.c 2014-10-04 23:04:38.663734490 +0200
+@@ -143,7 +143,7 @@
+ snd_printk(KERN_ERR PREFIX "can't set first interface.\n");
+ return -EIO;
+ }
+- ret = snd_card_create(index[regidx], id[regidx], THIS_MODULE,
++ ret = snd_card_new(&intf->dev, index[regidx], id[regidx], THIS_MODULE,
+ sizeof(struct sfire_chip), &card);
+ if (ret < 0) {
+ snd_printk(KERN_ERR PREFIX "cannot create alsa card.\n");
diff --git a/sixfireusb.install b/sixfireusb.install
new file mode 100644
index 000000000000..ccd692eabf80
--- /dev/null
+++ b/sixfireusb.install
@@ -0,0 +1,19 @@
+post_install() {
+ dkms install -m sixfireusb -v ${1%%-*}
+}
+
+pre_upgrade() {
+ local curver=${2%%-*}
+ # $2 is unset due to a bug. See, https://bugs.archlinux.org/task/32278
+ # Query current version using pacman as fallback
+ [ -n "$curver" ] || curver=$(pacman -Q sixfireusb-dkms | cut -d' ' -f2)
+ pre_remove $curver
+}
+
+post_upgrade() {
+ post_install ${1%%-*}
+}
+
+pre_remove() {
+ dkms remove -m sixfireusb -v ${1%%-*} --all
+}