/* * wmfw.h - Wolfson firmware format information * * Copyright 2012 Wolfson Microelectronics plc * * Author: Mark Brown * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __WMFW_H #define __WMFW_H #include #define WMFW_MAX_ALG_NAME 256 #define WMFW_MAX_ALG_DESCR_NAME 256 #define WMFW_MAX_COEFF_NAME 256 #define WMFW_MAX_COEFF_DESCR_NAME 256 #define WMFW_CTL_FLAG_SYS 0x8000 #define WMFW_CTL_FLAG_VOLATILE 0x0004 #define WMFW_CTL_FLAG_WRITEABLE 0x0002 #define WMFW_CTL_FLAG_READABLE 0x0001 /* Non-ALSA coefficient types start at 0x1000 */ #define WMFW_CTL_TYPE_ACKED 0x1000 /* acked control */ #define WMFW_CTL_TYPE_HOSTEVENT 0x1001 /* event control */ struct wmfw_header { char magic[4]; __le32 len; __le16 rev; u8 core; u8 ver; } __packed; struct wmfw_footer { __le64 timestamp; __le32 checksum; } __packed; struct wmfw_adsp1_sizes { __le32 dm; __le32 pm; __le32 zm; } __packed; struct wmfw_adsp2_sizes { __le32 xm; __le32 ym; __le32 pm; __le32 zm; } __packed; struct wmfw_region { union { __be32 type; __le32 offset; }; __le32 len; u8 data[]; } __packed; struct wmfw_id_hdr { __be32 core_id; __be32 core_rev; __be32 id; __be32 ver; } __packed; struct wmfw_adsp1_id_hdr { struct wmfw_id_hdr fw; __be32 zm; __be32 dm; __be32 n_algs; } __packed; struct wmfw_adsp2_id_hdr { struct wmfw_id_hdr fw; __be32 zm; __be32 xm; __be32 ym; __be32 n_algs; } __packed; struct wmfw_alg_hdr { __be32 id; __be32 ver; } __packed; struct wmfw_adsp1_alg_hdr { struct wmfw_alg_hdr alg; __be32 zm; __be32 dm; } __packed; struct wmfw_adsp2_alg_hdr { struct wmfw_alg_hdr alg; __be32 zm; __be32 xm; __be32 ym; } __packed; struct wmfw_adsp_alg_data { __le32 id; u8 name[WMFW_MAX_ALG_NAME]; u8 descr[WMFW_MAX_ALG_DESCR_NAME]; __le32 ncoeff; u8 data[]; } __packed; struct wmfw_adsp_coeff_data { struct { __le16 offset; __le16 type; __le32 size; } hdr; u8 name[WMFW_MAX_COEFF_NAME]; u8 descr[WMFW_MAX_COEFF_DESCR_NAME]; __le16 ctl_type; __le16 flags; __le32 len; u8 data[]; } __packed; struct wmfw_coeff_hdr { u8 magic[4]; __le32 len; union { __be32 rev; __le32 ver; }; union { __be32 core; __le32 core_ver; }; u8 data[]; } __packed; struct wmfw_coeff_item { __le16 offset; __le16 type; __le32 id; __le32 ver; __le32 sr; __le32 len; u8 data[]; } __packed; #define WMFW_ADSP1 1 #define WMFW_ADSP2 2 #define WMFW_ABSOLUTE 0xf0 #define WMFW_ALGORITHM_DATA 0xf2 #define WMFW_NAME_TEXT 0xfe #define WMFW_INFO_TEXT 0xff #define WMFW_ADSP1_PM 2 #define WMFW_ADSP1_DM 3 #define WMFW_ADSP1_ZM 4 #define WMFW_ADSP2_PM 2 #define WMFW_ADSP2_ZM 4 #define WMFW_ADSP2_XM 5 #define WMFW_ADSP2_YM 6 #endif 1b276b4000b307339f269d3bf7db877d536f'>pci/maestro3.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-01-30 14:28:22 -0800
committerDavid S. Miller <davem@davemloft.net>2017-01-30 14:28:22 -0800
commit54791b276b4000b307339f269d3bf7db877d536f (patch)
tree1c2616bd373ce5ea28aac2a53e32f5b5834901ce /sound/pci/maestro3.c
parent5d0e7705774dd412a465896d08d59a81a345c1e4 (diff)
parent047487241ff59374fded8c477f21453681f5995c (diff)
Merge branch 'sparc64-non-resumable-user-error-recovery'
Liam R. Howlett says: ==================== sparc64: Recover from userspace non-resumable PIO & MEM errors A non-resumable error from userspace is able to cause a kernel panic or trap loop due to the setup and handling of the queued traps once in the kernel. This patch series addresses both of these issues. The queues are fixed by simply zeroing the memory before use. PIO errors from userspace will result in a SIGBUS being sent to the user process. The MEM errors form userspace will result in a SIGKILL and also cause the offending pages to be claimed so they are no longer used in future tasks. SIGKILL is used to ensure that the process does not try to coredump and result in an attempt to read the memory again from within kernel space. Although there is a HV call to scrub the memory (mem_scrub), there is no easy way to guarantee that the real memory address(es) are not used by other tasks. Clearing the error with mem_scrub would zero the memory and cause the other processes to proceed with bad data. The handling of other non-resumable errors remain unchanged and will cause a panic. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'sound/pci/maestro3.c')