Merge remote-tracking branch 'origin/q' into auto-kernel
* origin/q:
techpack: Remove audio-kernel subtree from source
techpack: audio: Remove Android.mk files
ASoC: Avoid spk_id_get duplicate defination
ASoC: sm8150: do not export all the variables
ASoC: msm-dai-q6-v2: Mark msm-dai-q6 drivers as sync probe.
config: sm8150: Build all modules in-kernel
ASoC: dsp: elliptic: Fix No newline at end of elliptic_version.h
ASoC: sm8150: Split sa8155 driver into separate config option
techpack: audio: Remove build timestamp injection
techpack/audio: codecs: Fix potential buffer overflows
ASoC: Remove -Werror definations
SoC: Fix symbolic links
ASoC: Add non DSP stereo support for tfa98xx
ASoC: Add Support for tfa98xx driver
Squashed 'asoc/codecs/tfa98xx/' content from commit 37440d98
ASoC: sm8150: copy dai links based on device soc id
ASoC: sm8150: Add tfa9874 codec dai link support
ASoC: sm8150: Add cs35l41 codec dai link support
ASoC: sm8150: Add tas2557 codec dai link support
ASoC: sm8150: Add snd-soc-dummy codec dai link support
ASoC: sm8150: Disable LPASS_BE_QUAT_MI2S_RX route
ASoC: sm8150: Fix mi2s clock frequency
ASoC: sm8150: modify button configuration
ASoC: msm-dai-fe: Add Support for packed 24 bit
ASoC: msm-compress-q6-v2: Set decoder output to 24 bit
ASoC: msm-pcm-routing-v2: Fix external EC reference for AUDIO_REF_EC_UL10 MUX
ASoC: dsp: q6afe: don't validate payload size check before memory copy
ASoC: dsp: q6afe: Remove payload size check on param_id_pos
ASoC: dsp: set channel_mode as 1 for ADM_TOPOLOGY_ID_AUDIO_RX_FVSAM topology
ASoC: dsp: Add AFE_PORT_ID_PSEUDOPORT_01 routing support
ASoC: wcd-spi: Return I/O error if WCD SPI suspended
ASoC: wcd-dsp-mgr: Import WDSP firmware load changes
ASoC: wcd9xxx-common-v2: set hph mode on hph class-h state
ASoC: wcd934x: Boost HPH volume
ASoC: wcd934x: Bringup tavil micbias support
ASoC: wcd-mbhc-v2: Add Support for USB-C analog Audio
ASoC: wcd-mbhc-v2: Set insertion debounce time to 256ms
ASoC: wcd-mbhc: Modify mbhc mic bias control
ASoC: Add Speaker ID platform driver
ASoC: Add Support for msm cirrus playback driver
ASoC: Add Support for MI US proximity driver
ASoC: Add Support for Elliptic US proximity driver
ASoC: Add Support for tas2557 driver
ASoC: Add Support for cs35l41 driver
ASoC: Revert sm8150 fix for i2s
ASoC: codec: Remove qcom USB analog headset support
qcacld-3.0: disable debug configs added in LA.UM.8.1.r1-15800-sm8150.0
Linux 4.14.195
KVM: arm/arm64: Don't reschedule in unmap_stage2_range()
clk: Evict unregistered clks from parent caches
xen: don't reschedule in preemption off sections
mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible
do_epoll_ctl(): clean the failure exits up a bit
epoll: Keep a reference on files added to the check list
powerpc/pseries: Do not initiate shutdown when system is running on UPS
net: dsa: b53: check for timeout
hv_netvsc: Fix the queue_mapping in netvsc_vf_xmit()
bonding: fix active-backup failover for current ARP slave
vfio/type1: Add proper error unwind for vfio_iommu_replay()
ASoC: intel: Fix memleak in sst_media_open
ASoC: msm8916-wcd-analog: fix register Interrupt offset
bonding: fix a potential double-unregister
bonding: show saner speed for broadcast mode
net: fec: correct the error path for regulator disable in probe
i40e: Fix crash during removing i40e driver
i40e: Set RX_ONLY mode for unicast promiscuous on VLAN
ext4: fix potential negative array index in do_split()
alpha: fix annotation of io{read,write}{16,32}be()
xfs: Fix UBSAN null-ptr-deref in xfs_sysfs_init
virtio_ring: Avoid loop when vq is broken in virtqueue_poll
scsi: libfc: Free skb in fc_disc_gpn_id_resp() for valid cases
cpufreq: intel_pstate: Fix cpuinfo_max_freq when MSR_TURBO_RATIO_LIMIT is 0
jffs2: fix UAF problem
xfs: fix inode quota reservation checks
m68knommu: fix overwriting of bits in ColdFire V3 cache control
Input: psmouse - add a newline when printing 'proto' by sysfs
media: vpss: clean up resources in init
rtc: goldfish: Enable interrupt in set_alarm() when necessary
media: budget-core: Improve exception handling in budget_register()
scsi: ufs: Add DELAY_BEFORE_LPM quirk for Micron devices
spi: Prevent adding devices below an unregistering controller
jbd2: add the missing unlock_buffer() in the error path of jbd2_write_superblock()
ext4: fix checking of directory entry validity for inline directories
mm, page_alloc: fix core hung in free_pcppages_bulk()
mm: include CMA pages in lowmem_reserve at boot
kernel/relay.c: fix memleak on destroy relay channel
romfs: fix uninitialized memory leak in romfs_dev_read()
btrfs: sysfs: use NOFS for device creation
btrfs: inode: fix NULL pointer dereference if inode doesn't need compression
btrfs: Move free_pages_out label in inline extent handling branch in compress_file_range
btrfs: don't show full path of bind mounts in subvol=
btrfs: export helpers for subvolume name/id resolution
powerpc: Allow 4224 bytes of stack expansion for the signal frame
powerpc/mm: Only read faulting instruction when necessary in do_page_fault()
khugepaged: adjust VM_BUG_ON_MM() in __khugepaged_enter()
khugepaged: khugepaged_test_exit() check mmget_still_valid()
perf probe: Fix memory leakage when the probe point is not found
drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset()
ANDROID: virtio_gpu.h: move map/unmap to 3d group
ANDROID: tty: fix tty name overflow
ANDROID: fix a bug in quota2
Release 5.2.03.30B
qcacld-3.0: Fix issues about uninitialized variables
ANDROID: Incremental fs: fix magic compatibility again
qcacmn: Fix NULL pointer dereference of roam stats event param buf
qcacmn: Fix the nol timeout panic
qcacmn: Do not hold the lock for a long time in timer delete function
Release 5.2.03.30A
qcacld-3.0: Do not send HT, VHT and HE ie's to FW in all the modes
qcacmn: Improve 'Not set force_set if event completed'
Release 5.2.03.30
qcacld-3.0: Disable tx beam forming for NDI vdev
Release 5.2.03.29Z
qcacld-3.0: Check refill debt count during rx data stall
qcacld-3.0: Enhance logging in RX path to check refill failures
fw-api: CL 11245227 - update fw common interface files
Release 5.2.03.29Y
qcacld-3.0: Fix Mem leak during GTK/IGTK rekey in FT-SuiteB roam
fw-api: CL 11237513 - update fw common interface files
fw-api: CL 11228391 - update fw common interface files
fw-api: CL 11216157 - update fw common interface files
fw-api: CL 11212157 - update fw common interface files
fw-api: CL 11199621 - update fw common interface files
fw-api: CL 11198984 - update fw common interface files
uapi: Remove ADM_AUDPROC_PERSISTENT_CAL_TYPE cal type
qcacmn: Fix OOB issue in wlan_parse_rsn_ie
asoc : codec : enable usb analog headset support
Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 194
|
||||
SUBLEVEL = 195
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
||||
@@ -493,10 +493,10 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define ioread16be(p) be16_to_cpu(ioread16(p))
|
||||
#define ioread32be(p) be32_to_cpu(ioread32(p))
|
||||
#define iowrite16be(v,p) iowrite16(cpu_to_be16(v), (p))
|
||||
#define iowrite32be(v,p) iowrite32(cpu_to_be32(v), (p))
|
||||
#define ioread16be(p) swab16(ioread16(p))
|
||||
#define ioread32be(p) swab32(ioread32(p))
|
||||
#define iowrite16be(v,p) iowrite16(swab16(v), (p))
|
||||
#define iowrite32be(v,p) iowrite32(swab32(v), (p))
|
||||
|
||||
#define inb_p inb
|
||||
#define inw_p inw
|
||||
|
||||
@@ -89,9 +89,9 @@
|
||||
* coherency though in all cases. And for copyback caches we will need
|
||||
* to push cached data as well.
|
||||
*/
|
||||
#define CACHE_INIT CACR_CINVA
|
||||
#define CACHE_INVALIDATE CACR_CINVA
|
||||
#define CACHE_INVALIDATED CACR_CINVA
|
||||
#define CACHE_INIT (CACHE_MODE + CACR_CINVA - CACR_EC)
|
||||
#define CACHE_INVALIDATE (CACHE_MODE + CACR_CINVA)
|
||||
#define CACHE_INVALIDATED (CACHE_MODE + CACR_CINVA)
|
||||
|
||||
#define ACR0_MODE ((CONFIG_RAMBASE & 0xff000000) + \
|
||||
(0x000f0000) + \
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/errno.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/mman.h>
|
||||
#include <linux/mm.h>
|
||||
@@ -66,15 +67,11 @@ static inline bool notify_page_fault(struct pt_regs *regs)
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether the instruction at regs->nip is a store using
|
||||
* Check whether the instruction inst is a store using
|
||||
* an update addressing form which will update r1.
|
||||
*/
|
||||
static bool store_updates_sp(struct pt_regs *regs)
|
||||
static bool store_updates_sp(unsigned int inst)
|
||||
{
|
||||
unsigned int inst;
|
||||
|
||||
if (get_user(inst, (unsigned int __user *)regs->nip))
|
||||
return false;
|
||||
/* check for 1 in the rA field */
|
||||
if (((inst >> 16) & 0x1f) != 1)
|
||||
return false;
|
||||
@@ -227,20 +224,24 @@ static bool bad_kernel_fault(bool is_exec, unsigned long error_code,
|
||||
return is_exec || (address >= TASK_SIZE);
|
||||
}
|
||||
|
||||
// This comes from 64-bit struct rt_sigframe + __SIGNAL_FRAMESIZE
|
||||
#define SIGFRAME_MAX_SIZE (4096 + 128)
|
||||
|
||||
static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address,
|
||||
struct vm_area_struct *vma,
|
||||
bool store_update_sp)
|
||||
struct vm_area_struct *vma, unsigned int flags,
|
||||
bool *must_retry)
|
||||
{
|
||||
/*
|
||||
* N.B. The POWER/Open ABI allows programs to access up to
|
||||
* 288 bytes below the stack pointer.
|
||||
* The kernel signal delivery code writes up to about 1.5kB
|
||||
* The kernel signal delivery code writes a bit over 4KB
|
||||
* below the stack pointer (r1) before decrementing it.
|
||||
* The exec code can write slightly over 640kB to the stack
|
||||
* before setting the user r1. Thus we allow the stack to
|
||||
* expand to 1MB without further checks.
|
||||
*/
|
||||
if (address + 0x100000 < vma->vm_end) {
|
||||
unsigned int __user *nip = (unsigned int __user *)regs->nip;
|
||||
/* get user regs even if this fault is in kernel mode */
|
||||
struct pt_regs *uregs = current->thread.regs;
|
||||
if (uregs == NULL)
|
||||
@@ -258,7 +259,21 @@ static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address,
|
||||
* between the last mapped region and the stack will
|
||||
* expand the stack rather than segfaulting.
|
||||
*/
|
||||
if (address + 2048 < uregs->gpr[1] && !store_update_sp)
|
||||
if (address + SIGFRAME_MAX_SIZE >= uregs->gpr[1])
|
||||
return false;
|
||||
|
||||
if ((flags & FAULT_FLAG_WRITE) && (flags & FAULT_FLAG_USER) &&
|
||||
access_ok(VERIFY_READ, nip, sizeof(*nip))) {
|
||||
unsigned int inst;
|
||||
int res;
|
||||
|
||||
pagefault_disable();
|
||||
res = __get_user_inatomic(inst, nip);
|
||||
pagefault_enable();
|
||||
if (!res)
|
||||
return !store_updates_sp(inst);
|
||||
*must_retry = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -392,7 +407,7 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
int is_user = user_mode(regs);
|
||||
int is_write = page_fault_is_write(error_code);
|
||||
int fault, major = 0;
|
||||
bool store_update_sp = false;
|
||||
bool must_retry = false;
|
||||
|
||||
if (notify_page_fault(regs))
|
||||
return 0;
|
||||
@@ -439,9 +454,6 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
* can result in fault, which will cause a deadlock when called with
|
||||
* mmap_sem held
|
||||
*/
|
||||
if (is_write && is_user)
|
||||
store_update_sp = store_updates_sp(regs);
|
||||
|
||||
if (is_user)
|
||||
flags |= FAULT_FLAG_USER;
|
||||
if (is_write)
|
||||
@@ -488,9 +500,18 @@ retry:
|
||||
return bad_area(regs, address);
|
||||
|
||||
/* The stack is being expanded, check if it's valid */
|
||||
if (unlikely(bad_stack_expansion(regs, address, vma, store_update_sp)))
|
||||
if (unlikely(bad_stack_expansion(regs, address, vma, flags,
|
||||
&must_retry))) {
|
||||
if (!must_retry)
|
||||
return bad_area(regs, address);
|
||||
|
||||
up_read(&mm->mmap_sem);
|
||||
if (fault_in_pages_readable((const char __user *)regs->nip,
|
||||
sizeof(unsigned int)))
|
||||
return bad_area_nosemaphore(regs, address);
|
||||
goto retry;
|
||||
}
|
||||
|
||||
/* Try to expand it */
|
||||
if (unlikely(expand_stack(vma, address)))
|
||||
return bad_area(regs, address);
|
||||
|
||||
@@ -115,7 +115,6 @@ static void handle_system_shutdown(char event_modifier)
|
||||
case EPOW_SHUTDOWN_ON_UPS:
|
||||
pr_emerg("Loss of system power detected. System is running on"
|
||||
" UPS/battery. Check RTAS error log for details\n");
|
||||
orderly_poweroff(true);
|
||||
break;
|
||||
|
||||
case EPOW_SHUTDOWN_LOSS_OF_CRITICAL_FUNCTIONS:
|
||||
|
||||
@@ -63,6 +63,17 @@ static DEFINE_MUTEX(vdd_class_list_lock);
|
||||
*/
|
||||
static LIST_HEAD(clk_rate_change_list);
|
||||
|
||||
static struct hlist_head *all_lists[] = {
|
||||
&clk_root_list,
|
||||
&clk_orphan_list,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct hlist_head *orphan_list[] = {
|
||||
&clk_orphan_list,
|
||||
NULL,
|
||||
};
|
||||
|
||||
/*** private data structures ***/
|
||||
|
||||
struct clk_core {
|
||||
@@ -2693,17 +2704,6 @@ static u32 debug_suspend;
|
||||
static DEFINE_MUTEX(clk_debug_lock);
|
||||
static HLIST_HEAD(clk_debug_list);
|
||||
|
||||
static struct hlist_head *all_lists[] = {
|
||||
&clk_root_list,
|
||||
&clk_orphan_list,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct hlist_head *orphan_list[] = {
|
||||
&clk_orphan_list,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static void clk_state_subtree(struct clk_core *c)
|
||||
{
|
||||
int vdd_level = 0;
|
||||
@@ -3982,6 +3982,34 @@ static const struct clk_ops clk_nodrv_ops = {
|
||||
.set_parent = clk_nodrv_set_parent,
|
||||
};
|
||||
|
||||
static void clk_core_evict_parent_cache_subtree(struct clk_core *root,
|
||||
struct clk_core *target)
|
||||
{
|
||||
int i;
|
||||
struct clk_core *child;
|
||||
|
||||
for (i = 0; i < root->num_parents; i++)
|
||||
if (root->parents[i] == target)
|
||||
root->parents[i] = NULL;
|
||||
|
||||
hlist_for_each_entry(child, &root->children, child_node)
|
||||
clk_core_evict_parent_cache_subtree(child, target);
|
||||
}
|
||||
|
||||
/* Remove this clk from all parent caches */
|
||||
static void clk_core_evict_parent_cache(struct clk_core *core)
|
||||
{
|
||||
struct hlist_head **lists;
|
||||
struct clk_core *root;
|
||||
|
||||
lockdep_assert_held(&prepare_lock);
|
||||
|
||||
for (lists = all_lists; *lists; lists++)
|
||||
hlist_for_each_entry(root, *lists, child_node)
|
||||
clk_core_evict_parent_cache_subtree(root, core);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* clk_unregister - unregister a currently registered clock
|
||||
* @clk: clock to unregister
|
||||
@@ -4020,6 +4048,8 @@ void clk_unregister(struct clk *clk)
|
||||
clk_core_set_parent(child, NULL);
|
||||
}
|
||||
|
||||
clk_core_evict_parent_cache(clk->core);
|
||||
|
||||
hlist_del_init(&clk->core->child_node);
|
||||
|
||||
if (clk->core->prepare_count)
|
||||
|
||||
@@ -1378,6 +1378,7 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
|
||||
|
||||
intel_pstate_get_hwp_max(cpu->cpu, &phy_max, ¤t_max);
|
||||
cpu->pstate.turbo_freq = phy_max * cpu->pstate.scaling;
|
||||
cpu->pstate.turbo_pstate = phy_max;
|
||||
} else {
|
||||
cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
|
||||
}
|
||||
|
||||
@@ -220,32 +220,6 @@ static int vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vgem_gem_dumb_map(struct drm_file *file, struct drm_device *dev,
|
||||
uint32_t handle, uint64_t *offset)
|
||||
{
|
||||
struct drm_gem_object *obj;
|
||||
int ret;
|
||||
|
||||
obj = drm_gem_object_lookup(file, handle);
|
||||
if (!obj)
|
||||
return -ENOENT;
|
||||
|
||||
if (!obj->filp) {
|
||||
ret = -EINVAL;
|
||||
goto unref;
|
||||
}
|
||||
|
||||
ret = drm_gem_create_mmap_offset(obj);
|
||||
if (ret)
|
||||
goto unref;
|
||||
|
||||
*offset = drm_vma_node_offset_addr(&obj->vma_node);
|
||||
unref:
|
||||
drm_gem_object_put_unlocked(obj);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct drm_ioctl_desc vgem_ioctls[] = {
|
||||
DRM_IOCTL_DEF_DRV(VGEM_FENCE_ATTACH, vgem_fence_attach_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
|
||||
DRM_IOCTL_DEF_DRV(VGEM_FENCE_SIGNAL, vgem_fence_signal_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
|
||||
@@ -439,7 +413,6 @@ static struct drm_driver vgem_driver = {
|
||||
.fops = &vgem_driver_fops,
|
||||
|
||||
.dumb_create = vgem_gem_dumb_create,
|
||||
.dumb_map_offset = vgem_gem_dumb_map,
|
||||
|
||||
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|
||||
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
|
||||
|
||||
@@ -2012,7 +2012,7 @@ static int psmouse_get_maxproto(char *buffer, const struct kernel_param *kp)
|
||||
{
|
||||
int type = *((unsigned int *)kp->arg);
|
||||
|
||||
return sprintf(buffer, "%s", psmouse_protocol_by_type(type)->name);
|
||||
return sprintf(buffer, "%s\n", psmouse_protocol_by_type(type)->name);
|
||||
}
|
||||
|
||||
static int __init psmouse_init(void)
|
||||
|
||||
@@ -383,20 +383,25 @@ static int budget_register(struct budget *budget)
|
||||
ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto err_release_dmx;
|
||||
|
||||
budget->mem_frontend.source = DMX_MEMORY_FE;
|
||||
ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto err_release_dmx;
|
||||
|
||||
ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto err_release_dmx;
|
||||
|
||||
dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);
|
||||
|
||||
return 0;
|
||||
|
||||
err_release_dmx:
|
||||
dvb_dmxdev_release(&budget->dmxdev);
|
||||
dvb_dmx_release(&budget->demux);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void budget_unregister(struct budget *budget)
|
||||
|
||||
@@ -514,19 +514,31 @@ static void vpss_exit(void)
|
||||
|
||||
static int __init vpss_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!request_mem_region(VPSS_CLK_CTRL, 4, "vpss_clock_control"))
|
||||
return -EBUSY;
|
||||
|
||||
oper_cfg.vpss_regs_base2 = ioremap(VPSS_CLK_CTRL, 4);
|
||||
if (unlikely(!oper_cfg.vpss_regs_base2)) {
|
||||
release_mem_region(VPSS_CLK_CTRL, 4);
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto err_ioremap;
|
||||
}
|
||||
|
||||
writel(VPSS_CLK_CTRL_VENCCLKEN |
|
||||
VPSS_CLK_CTRL_DACCLKEN, oper_cfg.vpss_regs_base2);
|
||||
|
||||
return platform_driver_register(&vpss_driver);
|
||||
ret = platform_driver_register(&vpss_driver);
|
||||
if (ret)
|
||||
goto err_pd_register;
|
||||
|
||||
return 0;
|
||||
|
||||
err_pd_register:
|
||||
iounmap(oper_cfg.vpss_regs_base2);
|
||||
err_ioremap:
|
||||
release_mem_region(VPSS_CLK_CTRL, 4);
|
||||
return ret;
|
||||
}
|
||||
subsys_initcall(vpss_init);
|
||||
module_exit(vpss_exit);
|
||||
|
||||
@@ -2010,7 +2010,8 @@ static int bond_release_and_destroy(struct net_device *bond_dev,
|
||||
int ret;
|
||||
|
||||
ret = __bond_release_one(bond_dev, slave_dev, false, true);
|
||||
if (ret == 0 && !bond_has_slaves(bond)) {
|
||||
if (ret == 0 && !bond_has_slaves(bond) &&
|
||||
bond_dev->reg_state != NETREG_UNREGISTERING) {
|
||||
bond_dev->priv_flags |= IFF_DISABLE_NETPOLL;
|
||||
netdev_info(bond_dev, "Destroying bond %s\n",
|
||||
bond_dev->name);
|
||||
@@ -2752,6 +2753,9 @@ static int bond_ab_arp_inspect(struct bonding *bond)
|
||||
if (bond_time_in_interval(bond, last_rx, 1)) {
|
||||
bond_propose_link_state(slave, BOND_LINK_UP);
|
||||
commit++;
|
||||
} else if (slave->link == BOND_LINK_BACK) {
|
||||
bond_propose_link_state(slave, BOND_LINK_FAIL);
|
||||
commit++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -2862,6 +2866,19 @@ static void bond_ab_arp_commit(struct bonding *bond)
|
||||
|
||||
continue;
|
||||
|
||||
case BOND_LINK_FAIL:
|
||||
bond_set_slave_link_state(slave, BOND_LINK_FAIL,
|
||||
BOND_SLAVE_NOTIFY_NOW);
|
||||
bond_set_slave_inactive_flags(slave,
|
||||
BOND_SLAVE_NOTIFY_NOW);
|
||||
|
||||
/* A slave has just been enslaved and has become
|
||||
* the current active slave.
|
||||
*/
|
||||
if (rtnl_dereference(bond->curr_active_slave))
|
||||
RCU_INIT_POINTER(bond->current_arp_slave, NULL);
|
||||
continue;
|
||||
|
||||
default:
|
||||
netdev_err(bond->dev, "impossible: new_link %d on slave %s\n",
|
||||
slave->link_new_state, slave->dev->name);
|
||||
@@ -2911,8 +2928,6 @@ static bool bond_ab_arp_probe(struct bonding *bond)
|
||||
return should_notify_rtnl;
|
||||
}
|
||||
|
||||
bond_set_slave_inactive_flags(curr_arp_slave, BOND_SLAVE_NOTIFY_LATER);
|
||||
|
||||
bond_for_each_slave_rcu(bond, slave, iter) {
|
||||
if (!found && !before && bond_slave_is_up(slave))
|
||||
before = slave;
|
||||
@@ -4156,13 +4171,23 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u32 bond_mode_bcast_speed(struct slave *slave, u32 speed)
|
||||
{
|
||||
if (speed == 0 || speed == SPEED_UNKNOWN)
|
||||
speed = slave->speed;
|
||||
else
|
||||
speed = min(speed, slave->speed);
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev,
|
||||
struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct bonding *bond = netdev_priv(bond_dev);
|
||||
unsigned long speed = 0;
|
||||
struct list_head *iter;
|
||||
struct slave *slave;
|
||||
u32 speed = 0;
|
||||
|
||||
cmd->base.duplex = DUPLEX_UNKNOWN;
|
||||
cmd->base.port = PORT_OTHER;
|
||||
@@ -4174,8 +4199,13 @@ static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev,
|
||||
*/
|
||||
bond_for_each_slave(bond, slave, iter) {
|
||||
if (bond_slave_can_tx(slave)) {
|
||||
if (slave->speed != SPEED_UNKNOWN)
|
||||
if (slave->speed != SPEED_UNKNOWN) {
|
||||
if (BOND_MODE(bond) == BOND_MODE_BROADCAST)
|
||||
speed = bond_mode_bcast_speed(slave,
|
||||
speed);
|
||||
else
|
||||
speed += slave->speed;
|
||||
}
|
||||
if (cmd->base.duplex == DUPLEX_UNKNOWN &&
|
||||
slave->duplex != DUPLEX_UNKNOWN)
|
||||
cmd->base.duplex = slave->duplex;
|
||||
|
||||
@@ -1160,6 +1160,8 @@ static int b53_arl_op(struct b53_device *dev, int op, int port,
|
||||
return ret;
|
||||
|
||||
switch (ret) {
|
||||
case -ETIMEDOUT:
|
||||
return ret;
|
||||
case -ENOSPC:
|
||||
dev_dbg(dev->dev, "{%pM,%.4d} no space left in ARL\n",
|
||||
addr, vid);
|
||||
|
||||
@@ -3536,11 +3536,11 @@ failed_mii_init:
|
||||
failed_irq:
|
||||
failed_init:
|
||||
fec_ptp_stop(pdev);
|
||||
if (fep->reg_phy)
|
||||
regulator_disable(fep->reg_phy);
|
||||
failed_reset:
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (fep->reg_phy)
|
||||
regulator_disable(fep->reg_phy);
|
||||
failed_regulator:
|
||||
clk_disable_unprepare(fep->clk_ahb);
|
||||
failed_clk_ahb:
|
||||
|
||||
@@ -1175,7 +1175,7 @@ struct i40e_aqc_set_vsi_promiscuous_modes {
|
||||
#define I40E_AQC_SET_VSI_PROMISC_BROADCAST 0x04
|
||||
#define I40E_AQC_SET_VSI_DEFAULT 0x08
|
||||
#define I40E_AQC_SET_VSI_PROMISC_VLAN 0x10
|
||||
#define I40E_AQC_SET_VSI_PROMISC_TX 0x8000
|
||||
#define I40E_AQC_SET_VSI_PROMISC_RX_ONLY 0x8000
|
||||
__le16 seid;
|
||||
#define I40E_AQC_VSI_PROM_CMD_SEID_MASK 0x3FF
|
||||
__le16 vlan_tag;
|
||||
|
||||
@@ -1914,6 +1914,21 @@ i40e_status i40e_aq_set_phy_debug(struct i40e_hw *hw, u8 cmd_flags,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_is_aq_api_ver_ge
|
||||
* @aq: pointer to AdminQ info containing HW API version to compare
|
||||
* @maj: API major value
|
||||
* @min: API minor value
|
||||
*
|
||||
* Assert whether current HW API version is greater/equal than provided.
|
||||
**/
|
||||
static bool i40e_is_aq_api_ver_ge(struct i40e_adminq_info *aq, u16 maj,
|
||||
u16 min)
|
||||
{
|
||||
return (aq->api_maj_ver > maj ||
|
||||
(aq->api_maj_ver == maj && aq->api_min_ver >= min));
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_add_vsi
|
||||
* @hw: pointer to the hw struct
|
||||
@@ -2039,18 +2054,16 @@ i40e_status i40e_aq_set_vsi_unicast_promiscuous(struct i40e_hw *hw,
|
||||
|
||||
if (set) {
|
||||
flags |= I40E_AQC_SET_VSI_PROMISC_UNICAST;
|
||||
if (rx_only_promisc &&
|
||||
(((hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver >= 5)) ||
|
||||
(hw->aq.api_maj_ver > 1)))
|
||||
flags |= I40E_AQC_SET_VSI_PROMISC_TX;
|
||||
if (rx_only_promisc && i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
|
||||
flags |= I40E_AQC_SET_VSI_PROMISC_RX_ONLY;
|
||||
}
|
||||
|
||||
cmd->promiscuous_flags = cpu_to_le16(flags);
|
||||
|
||||
cmd->valid_flags = cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_UNICAST);
|
||||
if (((hw->aq.api_maj_ver >= 1) && (hw->aq.api_min_ver >= 5)) ||
|
||||
(hw->aq.api_maj_ver > 1))
|
||||
cmd->valid_flags |= cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_TX);
|
||||
if (i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
|
||||
cmd->valid_flags |=
|
||||
cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_RX_ONLY);
|
||||
|
||||
cmd->seid = cpu_to_le16(seid);
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
@@ -2147,11 +2160,17 @@ enum i40e_status_code i40e_aq_set_vsi_uc_promisc_on_vlan(struct i40e_hw *hw,
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_set_vsi_promiscuous_modes);
|
||||
|
||||
if (enable)
|
||||
if (enable) {
|
||||
flags |= I40E_AQC_SET_VSI_PROMISC_UNICAST;
|
||||
if (i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
|
||||
flags |= I40E_AQC_SET_VSI_PROMISC_RX_ONLY;
|
||||
}
|
||||
|
||||
cmd->promiscuous_flags = cpu_to_le16(flags);
|
||||
cmd->valid_flags = cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_UNICAST);
|
||||
if (i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
|
||||
cmd->valid_flags |=
|
||||
cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_RX_ONLY);
|
||||
cmd->seid = cpu_to_le16(seid);
|
||||
cmd->vlan_tag = cpu_to_le16(vid | I40E_AQC_SET_VSI_VLAN_VALID);
|
||||
|
||||
|
||||
@@ -11822,6 +11822,9 @@ static void i40e_remove(struct pci_dev *pdev)
|
||||
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), 0);
|
||||
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), 0);
|
||||
|
||||
while (test_bit(__I40E_RESET_RECOVERY_PENDING, pf->state))
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
/* no more scheduling of any task */
|
||||
set_bit(__I40E_SUSPENDED, pf->state);
|
||||
set_bit(__I40E_DOWN, pf->state);
|
||||
|
||||
@@ -500,7 +500,7 @@ static int netvsc_vf_xmit(struct net_device *net, struct net_device *vf_netdev,
|
||||
int rc;
|
||||
|
||||
skb->dev = vf_netdev;
|
||||
skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping;
|
||||
skb_record_rx_queue(skb, qdisc_skb_cb(skb)->slave_dev_queue_mapping);
|
||||
|
||||
rc = dev_queue_xmit(skb);
|
||||
if (likely(rc == NET_XMIT_SUCCESS || rc == NET_XMIT_CN)) {
|
||||
|
||||
@@ -87,6 +87,7 @@ static int goldfish_rtc_set_alarm(struct device *dev,
|
||||
rtc_alarm64 = rtc_alarm * NSEC_PER_SEC;
|
||||
writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
|
||||
writel(rtc_alarm64, base + TIMER_ALARM_LOW);
|
||||
writel(1, base + TIMER_IRQ_ENABLED);
|
||||
} else {
|
||||
/*
|
||||
* if this function was called with enabled=0
|
||||
|
||||
@@ -605,8 +605,12 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
|
||||
|
||||
if (PTR_ERR(fp) == -FC_EX_CLOSED)
|
||||
goto out;
|
||||
if (IS_ERR(fp))
|
||||
goto redisc;
|
||||
if (IS_ERR(fp)) {
|
||||
mutex_lock(&disc->disc_mutex);
|
||||
fc_disc_restart(disc);
|
||||
mutex_unlock(&disc->disc_mutex);
|
||||
goto out;
|
||||
}
|
||||
|
||||
cp = fc_frame_payload_get(fp, sizeof(*cp));
|
||||
if (!cp)
|
||||
@@ -633,7 +637,7 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
|
||||
new_rdata->disc_id = disc->disc_id;
|
||||
fc_rport_login(new_rdata);
|
||||
}
|
||||
goto out;
|
||||
goto free_fp;
|
||||
}
|
||||
rdata->disc_id = disc->disc_id;
|
||||
mutex_unlock(&rdata->rp_mutex);
|
||||
@@ -650,6 +654,8 @@ redisc:
|
||||
fc_disc_restart(disc);
|
||||
mutex_unlock(&disc->disc_mutex);
|
||||
}
|
||||
free_fp:
|
||||
fc_frame_free(fp);
|
||||
out:
|
||||
kref_put(&rdata->kref, fc_rport_destroy);
|
||||
if (!IS_ERR(fp))
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#define UFS_ANY_VENDOR 0xFFFF
|
||||
#define UFS_ANY_MODEL "ANY_MODEL"
|
||||
|
||||
#define UFS_VENDOR_MICRON 0x12C
|
||||
#define UFS_VENDOR_TOSHIBA 0x198
|
||||
#define UFS_VENDOR_SAMSUNG 0x1CE
|
||||
#define UFS_VENDOR_SKHYNIX 0x1AD
|
||||
|
||||
@@ -405,6 +405,8 @@ static inline bool ufshcd_is_valid_pm_lvl(int lvl)
|
||||
|
||||
static struct ufs_dev_fix ufs_fixups[] = {
|
||||
/* UFS cards deviations table */
|
||||
UFS_FIX(UFS_VENDOR_MICRON, UFS_ANY_MODEL,
|
||||
UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM),
|
||||
UFS_FIX(UFS_VENDOR_SAMSUNG, UFS_ANY_MODEL,
|
||||
UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM),
|
||||
UFS_FIX(UFS_VENDOR_SAMSUNG, UFS_ANY_MODEL,
|
||||
|
||||
@@ -839,4 +839,7 @@ config SPI_SLAVE_SYSTEM_CONTROL
|
||||
|
||||
endif # SPI_SLAVE
|
||||
|
||||
config SPI_DYNAMIC
|
||||
def_bool ACPI || OF_DYNAMIC || SPI_SLAVE
|
||||
|
||||
endif # SPI
|
||||
|
||||
@@ -428,6 +428,12 @@ static LIST_HEAD(spi_controller_list);
|
||||
*/
|
||||
static DEFINE_MUTEX(board_lock);
|
||||
|
||||
/*
|
||||
* Prevents addition of devices with same chip select and
|
||||
* addition of devices below an unregistering controller.
|
||||
*/
|
||||
static DEFINE_MUTEX(spi_add_lock);
|
||||
|
||||
/**
|
||||
* spi_alloc_device - Allocate a new SPI device
|
||||
* @ctlr: Controller to which device is connected
|
||||
@@ -506,7 +512,6 @@ static int spi_dev_check(struct device *dev, void *data)
|
||||
*/
|
||||
int spi_add_device(struct spi_device *spi)
|
||||
{
|
||||
static DEFINE_MUTEX(spi_add_lock);
|
||||
struct spi_controller *ctlr = spi->controller;
|
||||
struct device *dev = ctlr->dev.parent;
|
||||
int status;
|
||||
@@ -534,6 +539,13 @@ int spi_add_device(struct spi_device *spi)
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Controller may unregister concurrently */
|
||||
if (IS_ENABLED(CONFIG_SPI_DYNAMIC) &&
|
||||
!device_is_registered(&ctlr->dev)) {
|
||||
status = -ENODEV;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ctlr->cs_gpios)
|
||||
spi->cs_gpio = ctlr->cs_gpios[spi->chip_select];
|
||||
|
||||
@@ -2265,6 +2277,10 @@ void spi_unregister_controller(struct spi_controller *ctlr)
|
||||
struct spi_controller *found;
|
||||
int id = ctlr->bus_num;
|
||||
|
||||
/* Prevent addition of new devices, unregister existing ones */
|
||||
if (IS_ENABLED(CONFIG_SPI_DYNAMIC))
|
||||
mutex_lock(&spi_add_lock);
|
||||
|
||||
device_for_each_child(&ctlr->dev, NULL, __unregister);
|
||||
|
||||
/* First make sure that this controller was ever added */
|
||||
@@ -2285,6 +2301,9 @@ void spi_unregister_controller(struct spi_controller *ctlr)
|
||||
if (found == ctlr)
|
||||
idr_remove(&spi_master_idr, id);
|
||||
mutex_unlock(&board_lock);
|
||||
|
||||
if (IS_ENABLED(CONFIG_SPI_DYNAMIC))
|
||||
mutex_unlock(&spi_add_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(spi_unregister_controller);
|
||||
|
||||
|
||||
@@ -1745,6 +1745,19 @@ typedef enum HTT_PPDU_STATS_RESP_TYPE HTT_PPDU_STATS_RESP_TYPE;
|
||||
((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_RTS_FAILURE_S)); \
|
||||
} while (0)
|
||||
|
||||
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M 0x00040000
|
||||
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S 18
|
||||
|
||||
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_GET(_var) \
|
||||
(((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M) >> \
|
||||
HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S)
|
||||
|
||||
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_SET (_var , _val) \
|
||||
do { \
|
||||
HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX, _val); \
|
||||
((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S)); \
|
||||
} while (0)
|
||||
|
||||
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_M 0xffffffff
|
||||
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S 0
|
||||
|
||||
@@ -1868,11 +1881,15 @@ typedef struct {
|
||||
* BIT [ 15: 13] :- medium protection type
|
||||
* BIT [ 16: 16] :- rts_success
|
||||
* BIT [ 17: 17] :- rts_failure
|
||||
* BIT [ 31: 18] :- reserved
|
||||
* BIT [ 18: 18] :- pream_punc_tx
|
||||
* BIT [ 31: 19] :- reserved
|
||||
*/
|
||||
union {
|
||||
A_UINT32 resp_type_is_ampdu__short_retry__long_retry; /* older name */
|
||||
A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure; /* newer name */
|
||||
/* older names */
|
||||
A_UINT32 resp_type_is_ampdu__short_retry__long_retry;
|
||||
A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure;
|
||||
/* newest name */
|
||||
A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure__pream_punc_tx;
|
||||
struct { /* bitfield names */
|
||||
A_UINT32 long_retries: 4,
|
||||
short_retries: 4,
|
||||
@@ -1881,7 +1898,8 @@ typedef struct {
|
||||
mprot_type: 3,
|
||||
rts_success: 1,
|
||||
rts_failure: 1,
|
||||
reserved0: 14;
|
||||
pream_punc_tx: 1,
|
||||
reserved0: 13;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -475,6 +475,8 @@ typedef enum {
|
||||
|
||||
WMI_SERVICE_CFR_CAPTURE_COUNT_SUPPORT = 256, /* indicates FW support to program CFR capture mode and capture count */
|
||||
WMI_SERVICE_OCV_SUPPORT = 257, /* FW supports OCV (Operating Channel Validation) */
|
||||
WMI_SERVICE_LL_STATS_PER_CHAN_RX_TX_TIME_SUPPORT = 258, /* Indicates firmware support sending per channel own tx & rx time in radio stats of LL stats. */
|
||||
WMI_SERVICE_THERMAL_MULTI_CLIENT_SUPPORT = 259, /* Indicates FW Thermal Mgr will support multiple clients for mitigation */
|
||||
|
||||
|
||||
WMI_MAX_EXT2_SERVICE
|
||||
|
||||
@@ -1100,6 +1100,7 @@ typedef enum {
|
||||
WMITLV_TAG_STRUC_wmi_configure_roam_trigger_parameters,
|
||||
WMITLV_TAG_STRUC_wmi_vdev_extd_stats,
|
||||
WMITLV_TAG_STRUC_wmi_twt_add_dialog_additional_params,
|
||||
WMITLV_TAG_STRUC_WMI_SCAN_RADIO_CAPABILITIES_EXT2,
|
||||
} WMITLV_TAG_ID;
|
||||
|
||||
/*
|
||||
@@ -4517,7 +4518,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT_EVENTID);
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_spectral_bin_scaling_params, wmi_bin_scaling_params, WMITLV_SIZE_VAR) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_MAC_PHY_CAPABILITIES_EXT, mac_phy_caps, WMITLV_SIZE_VAR) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_HAL_REG_CAPABILITIES_EXT2, hal_reg_caps, WMITLV_SIZE_VAR) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_capabilities, wmi_nan_capabilities, nan_cap, WMITLV_SIZE_FIX)
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_capabilities, wmi_nan_capabilities, nan_cap, WMITLV_SIZE_FIX) \
|
||||
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_SCAN_RADIO_CAPABILITIES_EXT2, wmi_scan_radio_caps, WMITLV_SIZE_VAR)
|
||||
WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT2_EVENTID);
|
||||
|
||||
#define WMITLV_TABLE_WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENTID(id,op,buf,len) \
|
||||
|
||||
@@ -6861,6 +6861,9 @@ typedef enum {
|
||||
*/
|
||||
WMI_PDEV_PARAM_SR_TRIGGER_MARGIN,
|
||||
|
||||
/* Param to enable/disable PCIE HW ILP */
|
||||
WMI_PDEV_PARAM_PCIE_HW_ILP,
|
||||
|
||||
} WMI_PDEV_PARAM;
|
||||
|
||||
#define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1)
|
||||
@@ -8060,6 +8063,12 @@ typedef struct {
|
||||
A_UINT32 tx_time;
|
||||
/** msecs the radio is in active receive (32 bits number accruing over time) */
|
||||
A_UINT32 rx_time;
|
||||
/*** NOTE ***
|
||||
* Be cautious about adding new fields in wmi_channel_stats.
|
||||
* STA-centric targets may instantiate many instances of per-channel
|
||||
* stats, and consequently may consume a non-trivial amount of on-chip
|
||||
* memory for storing the channel stats.
|
||||
*/
|
||||
} wmi_channel_stats;
|
||||
|
||||
/*
|
||||
@@ -9515,6 +9524,11 @@ typedef struct {
|
||||
* VDEV_FLAGS_NON_TRANSMIT_AP classify it as either Tx vap
|
||||
* or non Tx vap.
|
||||
*/
|
||||
#define VDEV_FLAGS_SCAN_MODE_VAP 0x00000010 /* for Scan Radio vdev will be special vap.
|
||||
* There will not be WMI_VDEV_UP_CMD, there will be only WMI_VDEV_CREATE_CMD
|
||||
* and WMI_VDEV_START_REQUEST_CMD. Based on this parameter need to make decision like
|
||||
* vdev Pause/Unpause at WMI_VDEV_START_REQUEST_CMD.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_create_cmd_fixed_param */
|
||||
@@ -11774,6 +11788,10 @@ typedef struct {
|
||||
A_UINT32 frame_inject_period;
|
||||
/** Destination address of frame */
|
||||
wmi_mac_addr frame_addr1;
|
||||
/** Frame control duration field to be set in CTS_TO_SELF.
|
||||
* Applicable to frame_type WMI_FRAME_INJECT_TYPE_CTS_TO_SELF only.
|
||||
*/
|
||||
A_UINT32 fc_duration;
|
||||
/** variable buffer length. Can be used for frame template.
|
||||
* data is in TLV data[]
|
||||
*/
|
||||
@@ -25913,6 +25931,38 @@ typedef struct {
|
||||
A_UINT32 wireless_modes_ext;
|
||||
} WMI_HAL_REG_CAPABILITIES_EXT2;
|
||||
|
||||
/*
|
||||
* This TLV used for Scan Radio RDP
|
||||
* We have an RDP which supports Multiband-Frequency (2Ghz, 5Ghz and 6Ghz)
|
||||
* on a single radio.
|
||||
* The AP acts as a special VAP. There will not be WMI_VDEV_UP_CMD.
|
||||
* This radio is used only for scanning purpose and to send few MGMT frames.
|
||||
* The DFS feature is disabled on this scan radio, since there will not be
|
||||
* much TX traffic.
|
||||
* The Host has to disable CAC timer because DFS feature not supported here.
|
||||
* In order to know about the scan radio RDP and DFS disabled case,
|
||||
* the target has to send this information to Host per pdev via
|
||||
* WMI_SERVICE_READY_EXT2_EVENT.
|
||||
* The target is notified of the special scan VAP by the flags variable
|
||||
* in the WMI_CREATE_CMD.
|
||||
*/
|
||||
typedef struct {
|
||||
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_SCAN_RADIO_CAPABILITIES_EXT2 */
|
||||
A_UINT32 phy_id;
|
||||
/*
|
||||
* [0] 1 - SCAN_RADIO supported 0 - SCAN_RADIO not supported
|
||||
* [1] 1 - DFS enabled 0 - DFS disabled
|
||||
* [2:31] reserved
|
||||
*/
|
||||
A_UINT32 flags;
|
||||
} WMI_SCAN_RADIO_CAPABILITIES_EXT2;
|
||||
|
||||
#define WMI_SCAN_RADIO_CAP_SCAN_RADIO_FLAG_GET(flag) WMI_GET_BITS(flag, 0, 1)
|
||||
#define WMI_SCAN_RADIO_CAP_SCAN_RADIO_FLAG_SET(flag, val) WMI_SET_BITS(flag, 0, 1, val)
|
||||
|
||||
#define WMI_SCAN_RADIO_CAP_DFS_FLAG_GET(flag) WMI_GET_BITS(flag, 1, 1)
|
||||
#define WMI_SCAN_RADIO_CAP_DFS_FLAG_SET(flag, val) WMI_SET_BITS(flag, 1, 1, val)
|
||||
|
||||
typedef struct {
|
||||
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_SOC_HAL_REG_CAPABILITIES */
|
||||
A_UINT32 num_phy;
|
||||
@@ -26035,6 +26085,16 @@ typedef struct {
|
||||
A_UINT32 prio;
|
||||
} wmi_therm_throt_level_config_info;
|
||||
|
||||
typedef enum {
|
||||
WMI_THERMAL_CLIENT_UNSPECIFIED = 0,
|
||||
WMI_THERMAL_CLIENT_APPS = 1,
|
||||
WMI_THERMAL_CLIENT_WPSS = 2,
|
||||
WMI_THERMAL_CLIENT_FW = 3,
|
||||
WMI_THERMAL_CLIENT_MAX
|
||||
} WMI_THERMAL_MITIGATION_CLIENTS;
|
||||
|
||||
#define WMI_THERMAL_CLIENT_MAX_PRIORITY 10
|
||||
|
||||
typedef struct {
|
||||
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_therm_throt_config_request_fixed_param */
|
||||
A_UINT32 pdev_id; /* config for each pdev */
|
||||
@@ -26042,6 +26102,8 @@ typedef struct {
|
||||
A_UINT32 dc; /* duty cycle in ms */
|
||||
A_UINT32 dc_per_event; /* how often (after how many duty cycles) the FW sends stats to host */
|
||||
A_UINT32 therm_throt_levels; /* Indicates the number of thermal zone configuration */
|
||||
A_UINT32 client_id; /* Indicates the client from whom the request is being forwarded to FW. Refer to WMI_THERMAL_MITIGATION_CLIENTS. */
|
||||
A_UINT32 priority; /* Indicates the priority, higher the value, higher the priority. Varies from 1 to WMI_THERMAL_CLIENT_MAX_PRIORITY. */
|
||||
/*
|
||||
* Following this structure is the TLV:
|
||||
* struct wmi_therm_throt_level_config_info therm_throt_level_config_info[therm_throt_levels];
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#define __WMI_VER_MINOR_ 0
|
||||
/** WMI revision number has to be incremented when there is a
|
||||
* change that may or may not break compatibility. */
|
||||
#define __WMI_REVISION_ 872
|
||||
#define __WMI_REVISION_ 878
|
||||
|
||||
/** The Version Namespace should not be normally changed. Only
|
||||
* host and firmware of the same WMI namespace will work
|
||||
|
||||
@@ -30,11 +30,13 @@
|
||||
* qdf_event_t - manages events
|
||||
* @complete: instance to completion
|
||||
* @cookie: unsigned int
|
||||
* @done: indicate completion
|
||||
* @force_set: indicate forceful completion
|
||||
*/
|
||||
typedef struct qdf_evt {
|
||||
struct completion complete;
|
||||
uint32_t cookie;
|
||||
bool done;
|
||||
bool force_set;
|
||||
} __qdf_event_t;
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ QDF_STATUS qdf_event_set(qdf_event_t *event)
|
||||
if (event->cookie != LINUX_EVENT_COOKIE)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
event->done = true;
|
||||
complete(&event->complete);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -133,6 +134,7 @@ QDF_STATUS qdf_event_reset(qdf_event_t *event)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
/* (re)initialize event */
|
||||
event->done = false;
|
||||
event->force_set = false;
|
||||
INIT_COMPLETION(event->complete);
|
||||
|
||||
@@ -252,8 +254,10 @@ void qdf_complete_wait_events(void)
|
||||
event_node = qdf_container_of(list_node,
|
||||
struct qdf_evt_node, node);
|
||||
|
||||
if (!event_node->pevent->done) {
|
||||
event_node->pevent->force_set = true;
|
||||
qdf_event_set(event_node->pevent);
|
||||
}
|
||||
|
||||
status = qdf_list_peek_next(&qdf_wait_event_list,
|
||||
&event_node->node, &list_node);
|
||||
|
||||
@@ -116,20 +116,24 @@ static os_timer_func(dfs_nol_timeout)
|
||||
static void dfs_nol_elem_free_work_cb(void *context)
|
||||
{
|
||||
struct wlan_dfs *dfs = (struct wlan_dfs *)context;
|
||||
struct dfs_nolelem *tmp_nol_entry, *nol_entry;
|
||||
struct dfs_nolelem *nol_head;
|
||||
|
||||
while (true) {
|
||||
WLAN_DFSNOL_LOCK(dfs);
|
||||
if (!TAILQ_EMPTY(&dfs->dfs_nol_free_list))
|
||||
TAILQ_FOREACH_SAFE(nol_entry,
|
||||
&dfs->dfs_nol_free_list,
|
||||
nolelem_list,
|
||||
tmp_nol_entry) {
|
||||
TAILQ_REMOVE(&dfs->dfs_nol_free_list,
|
||||
nol_entry, nolelem_list);
|
||||
qdf_timer_free(&nol_entry->nol_timer);
|
||||
qdf_mem_free(nol_entry);
|
||||
}
|
||||
|
||||
nol_head = TAILQ_FIRST(&dfs->dfs_nol_free_list);
|
||||
if (nol_head) {
|
||||
TAILQ_REMOVE(&dfs->dfs_nol_free_list, nol_head,
|
||||
nolelem_list);
|
||||
WLAN_DFSNOL_UNLOCK(dfs);
|
||||
|
||||
qdf_timer_free(&nol_head->nol_timer);
|
||||
qdf_mem_free(nol_head);
|
||||
} else {
|
||||
WLAN_DFSNOL_UNLOCK(dfs);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dfs_nol_timer_init(struct wlan_dfs *dfs)
|
||||
@@ -542,23 +546,22 @@ void dfs_nol_timer_cleanup(struct wlan_dfs *dfs)
|
||||
{
|
||||
struct dfs_nolelem *nol;
|
||||
|
||||
WLAN_DFSNOL_LOCK(dfs);
|
||||
nol = dfs->dfs_nol;
|
||||
while (nol) {
|
||||
dfs->dfs_nol = nol->nol_next;
|
||||
dfs->dfs_nol_count--;
|
||||
/*
|
||||
* Unlock is required so that when we sync with the
|
||||
* nol_timeout timer we do not run into deadlock.
|
||||
*/
|
||||
WLAN_DFSNOL_UNLOCK(dfs);
|
||||
qdf_timer_free(&nol->nol_timer);
|
||||
while (true) {
|
||||
WLAN_DFSNOL_LOCK(dfs);
|
||||
|
||||
qdf_mem_free(nol);
|
||||
nol = dfs->dfs_nol;
|
||||
}
|
||||
if (nol) {
|
||||
dfs->dfs_nol = nol->nol_next;
|
||||
dfs->dfs_nol_count--;
|
||||
WLAN_DFSNOL_UNLOCK(dfs);
|
||||
|
||||
qdf_timer_free(&nol->nol_timer);
|
||||
qdf_mem_free(nol);
|
||||
} else {
|
||||
WLAN_DFSNOL_UNLOCK(dfs);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dfs_nol_workqueue_cleanup(struct wlan_dfs *dfs)
|
||||
|
||||
@@ -23962,7 +23962,12 @@ extract_roam_scan_ap_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf,
|
||||
uint8_t i;
|
||||
|
||||
param_buf = (WMI_ROAM_STATS_EVENTID_param_tlvs *)evt_buf;
|
||||
if (!param_buf || ap_idx >= param_buf->num_roam_ap_info) {
|
||||
if (!param_buf) {
|
||||
WMI_LOGE("%s Param buf is NULL", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (ap_idx >= param_buf->num_roam_ap_info) {
|
||||
WMI_LOGE("Invalid roam scan AP tlv ap_idx:%d total_ap:%d",
|
||||
ap_idx, param_buf->num_roam_ap_info);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
@@ -1708,6 +1708,8 @@ cppflags-$(CONFIG_WLAN_HANG_EVENT) += -DWLAN_HANG_EVENT
|
||||
|
||||
cppflags-$(CONFIG_WLAN_FEATURE_PERIODIC_STA_STATS) += -DWLAN_FEATURE_PERIODIC_STA_STATS
|
||||
|
||||
cppflags-$(CONFIG_RX_HASH_DEBUG) += -DRX_HASH_DEBUG
|
||||
|
||||
ifeq ($(CONFIG_CNSS), y)
|
||||
ifeq ($(CONFIG_CNSS_SDIO), y)
|
||||
cppflags-y += -DCONFIG_PLD_SDIO_CNSS
|
||||
|
||||
@@ -611,7 +611,16 @@ ifeq ($(CONFIG_ARCH_MSM8996), y)
|
||||
CONFIG_CHANNEL_HOPPING_ALL_BANDS := y
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_HIF_USB), y)
|
||||
CONFIG_WLAN_LOGGING_SOCK_SVC := n
|
||||
endif
|
||||
|
||||
ifneq ($(TARGET_BUILD_VARIANT),user)
|
||||
CONFIG_DESC_DUP_DETECT_DEBUG := n
|
||||
endif
|
||||
|
||||
CONFIG_DP_TRACE := n
|
||||
#Enable Beacon Reception Stats
|
||||
CONFIG_FEATURE_BECN_STATS := n
|
||||
|
||||
#enable MPTA helper for QCS405
|
||||
@@ -635,8 +644,6 @@ ifeq ($(CONFIG_ARCH_SDM660), y)
|
||||
CONFIG_WLAN_FEATURE_PKT_CAPTURE := y
|
||||
endif
|
||||
|
||||
CONFIG_WLAN_HANG_EVENT := n
|
||||
|
||||
#Flag to enable/disable kernel panic calls
|
||||
CONFIG_PANIC_ON_WLAN_QDF_BUG=y
|
||||
PANIC_ON_BUG := n
|
||||
@@ -646,3 +653,11 @@ ifeq ($(CONFIG_SLUB_DEBUG), y)
|
||||
PANIC_ON_BUG := y
|
||||
endif
|
||||
endif
|
||||
|
||||
#Enable RX RING buffers debug
|
||||
CONFIG_DEBUG_RX_RING_BUFFER := n
|
||||
|
||||
#Enable Hash debug
|
||||
CONFIG_RX_HASH_DEBUG := n
|
||||
|
||||
CONFIG_WLAN_HANG_EVENT := n
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -804,10 +804,15 @@ void htt_log_rx_ring_info(htt_pdev_handle pdev)
|
||||
"%s: Data Stall Detected with reason 4 (=FW_RX_REFILL_FAILED)."
|
||||
"src htt rx ring: space for %d elements, filled with %d buffers, buffers in the ring %d, refill debt %d",
|
||||
__func__, pdev->rx_ring.size, pdev->rx_ring.fill_level,
|
||||
pdev->rx_ring.fill_cnt,
|
||||
qdf_atomic_read(&pdev->rx_ring.fill_cnt),
|
||||
qdf_atomic_read(&pdev->rx_ring.refill_debt));
|
||||
}
|
||||
|
||||
void htt_rx_refill_failure(htt_pdev_handle pdev)
|
||||
{
|
||||
QDF_BUG(qdf_atomic_read(&pdev->rx_ring.refill_debt));
|
||||
}
|
||||
|
||||
#if HTT_DEBUG_LEVEL > 5
|
||||
void htt_display(htt_pdev_handle pdev, int indent)
|
||||
{
|
||||
|
||||
@@ -160,7 +160,11 @@ struct htt_host_rx_desc_base {
|
||||
* @posted: time-stamp when HTT message is recived
|
||||
* @recvd : 0x48545452584D5367 ('HTTRXMSG')
|
||||
*/
|
||||
#ifdef CONFIG_SLUB_DEBUG_ON
|
||||
#define HTT_RX_RING_BUFF_DBG_LIST (8 * 1024)
|
||||
#else
|
||||
#define HTT_RX_RING_BUFF_DBG_LIST (4 * 1024)
|
||||
#endif
|
||||
struct rx_buf_debug {
|
||||
qdf_dma_addr_t paddr;
|
||||
qdf_nbuf_t nbuf;
|
||||
@@ -1017,7 +1021,7 @@ static inline qdf_nbuf_t
|
||||
htt_rx_in_order_netbuf_pop(htt_pdev_handle pdev, qdf_dma_addr_t paddr)
|
||||
{
|
||||
HTT_ASSERT1(htt_rx_in_order_ring_elems(pdev) != 0);
|
||||
pdev->rx_ring.fill_cnt--;
|
||||
qdf_atomic_dec(&pdev->rx_ring.fill_cnt);
|
||||
paddr = htt_paddr_trim_to_37(paddr);
|
||||
return htt_rx_hash_list_lookup(pdev, paddr);
|
||||
}
|
||||
|
||||
@@ -739,7 +739,7 @@ moretofill:
|
||||
}
|
||||
|
||||
pdev->rx_ring.buf.paddrs_ring[idx] = paddr_marked;
|
||||
pdev->rx_ring.fill_cnt++;
|
||||
qdf_atomic_inc(&pdev->rx_ring.fill_cnt);
|
||||
|
||||
num--;
|
||||
idx++;
|
||||
@@ -1220,7 +1220,7 @@ static inline qdf_nbuf_t htt_rx_netbuf_pop(htt_pdev_handle pdev)
|
||||
idx++;
|
||||
idx &= pdev->rx_ring.size_mask;
|
||||
pdev->rx_ring.sw_rd_idx.msdu_payld = idx;
|
||||
pdev->rx_ring.fill_cnt--;
|
||||
qdf_atomic_dec(&pdev->rx_ring.fill_cnt);
|
||||
return msdu;
|
||||
}
|
||||
|
||||
@@ -2505,7 +2505,8 @@ static void htt_rx_fill_ring_count(htt_pdev_handle pdev)
|
||||
{
|
||||
int num_to_fill;
|
||||
|
||||
num_to_fill = pdev->rx_ring.fill_level - pdev->rx_ring.fill_cnt;
|
||||
num_to_fill = pdev->rx_ring.fill_level -
|
||||
qdf_atomic_read(&pdev->rx_ring.fill_cnt);
|
||||
htt_rx_ring_fill_n(pdev, num_to_fill /* okay if <= 0 */);
|
||||
}
|
||||
#endif
|
||||
@@ -2992,7 +2993,7 @@ int htt_rx_attach(struct htt_pdev_t *pdev)
|
||||
htt_rx_ring_refill_retry, (void *)pdev,
|
||||
QDF_TIMER_TYPE_SW);
|
||||
|
||||
pdev->rx_ring.fill_cnt = 0;
|
||||
qdf_atomic_init(&pdev->rx_ring.fill_cnt);
|
||||
pdev->rx_ring.pop_fail_cnt = 0;
|
||||
#ifdef DEBUG_DMA_DONE
|
||||
pdev->rx_ring.dbg_ring_idx = 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -288,7 +288,8 @@ struct htt_pdev_t {
|
||||
uint32_t size_mask; /* size - 1, at least 16 bits long */
|
||||
|
||||
int fill_level; /* how many rx buffers to keep in the ring */
|
||||
int fill_cnt; /* # of rx buffers (full+empty) in the ring */
|
||||
/* # of rx buffers (full+empty) in the ring */
|
||||
qdf_atomic_t fill_cnt;
|
||||
int pop_fail_cnt; /* # of nebuf pop failures */
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -195,6 +195,14 @@ void htt_t2h_stats_print(uint8_t *stats_data, int concise);
|
||||
*/
|
||||
void htt_log_rx_ring_info(htt_pdev_handle pdev);
|
||||
|
||||
/**
|
||||
* htt_rx_refill_failure() - During refill failure check if debt is zero
|
||||
* @pdev: handle to the HTT instance
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void htt_rx_refill_failure(htt_pdev_handle pdev);
|
||||
|
||||
#ifndef HTT_DEBUG_LEVEL
|
||||
#if defined(DEBUG)
|
||||
#define HTT_DEBUG_LEVEL 10
|
||||
|
||||
@@ -6202,8 +6202,10 @@ static void ol_txrx_post_data_stall_event(
|
||||
data_stall_info->recovery_type = recovery_type;
|
||||
|
||||
if (data_stall_info->data_stall_type ==
|
||||
DATA_STALL_LOG_FW_RX_REFILL_FAILED)
|
||||
DATA_STALL_LOG_FW_RX_REFILL_FAILED) {
|
||||
htt_log_rx_ring_info(pdev->htt_pdev);
|
||||
htt_rx_refill_failure(pdev->htt_pdev);
|
||||
}
|
||||
|
||||
sys_build_message_header(SYS_MSG_ID_DATA_STALL_MSG, &msg);
|
||||
/* Save callback and data */
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
#define QWLAN_VERSION_MAJOR 5
|
||||
#define QWLAN_VERSION_MINOR 2
|
||||
#define QWLAN_VERSION_PATCH 03
|
||||
#define QWLAN_VERSION_EXTRA "X"
|
||||
#define QWLAN_VERSION_BUILD 29
|
||||
#define QWLAN_VERSION_EXTRA "B"
|
||||
#define QWLAN_VERSION_BUILD 30
|
||||
|
||||
#define QWLAN_VERSIONSTR "5.2.03.29X"
|
||||
#define QWLAN_VERSIONSTR "5.2.03.30B"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
||||
@@ -353,7 +353,8 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx,
|
||||
bool *pmf_connection)
|
||||
{
|
||||
tDot11fIERSN *rsn_ie;
|
||||
uint8_t i, j, match, only_non_ht_cipher = 1;
|
||||
bool match = false;
|
||||
uint8_t i, j, only_non_ht_cipher = 1;
|
||||
#ifdef WLAN_FEATURE_11W
|
||||
bool we_are_pmf_capable;
|
||||
bool we_require_pmf;
|
||||
@@ -380,7 +381,7 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx,
|
||||
if (!qdf_mem_cmp(&rx_rsn_ie->akm_suite[0],
|
||||
&rsn_ie->akm_suite[i],
|
||||
sizeof(rsn_ie->akm_suite[i]))) {
|
||||
match = 1;
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
if (!match) {
|
||||
@@ -400,13 +401,13 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx,
|
||||
* For each Pairwise cipher suite check whether we support
|
||||
* received pairwise
|
||||
*/
|
||||
match = 0;
|
||||
match = false;
|
||||
for (i = 0; i < rx_rsn_ie->pwise_cipher_suite_count; i++) {
|
||||
for (j = 0; j < rsn_ie->pwise_cipher_suite_count; j++) {
|
||||
if (!qdf_mem_cmp(&rx_rsn_ie->pwise_cipher_suites[i],
|
||||
&rsn_ie->pwise_cipher_suites[j],
|
||||
sizeof(rsn_ie->pwise_cipher_suites[j]))) {
|
||||
match = 1;
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -488,7 +489,8 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie,
|
||||
tpPESession session_entry, uint8_t sta_is_ht)
|
||||
{
|
||||
tDot11fIEWPA *wpa_ie;
|
||||
uint8_t i, j, match, only_non_ht_cipher = 1;
|
||||
bool match = false;
|
||||
uint8_t i, j, only_non_ht_cipher = 1;
|
||||
|
||||
/* WPA IE should be received from PE */
|
||||
wpa_ie = &session_entry->gStartBssWPAIe;
|
||||
@@ -504,7 +506,7 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie,
|
||||
if (!qdf_mem_cmp(&rx_wpaie.auth_suites[0],
|
||||
&wpa_ie->auth_suites[i],
|
||||
sizeof(wpa_ie->auth_suites[i]))) {
|
||||
match = 1;
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
if (!match) {
|
||||
@@ -524,12 +526,12 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie,
|
||||
* For each Pairwise cipher suite check whether we support
|
||||
* received pairwise
|
||||
*/
|
||||
match = 0;
|
||||
match = false;
|
||||
for (i = 0; i < rx_wpaie.unicast_cipher_count; i++) {
|
||||
for (j = 0; j < wpa_ie->unicast_cipher_count; j++) {
|
||||
if (!qdf_mem_cmp(rx_wpaie.unicast_ciphers[i],
|
||||
wpa_ie->unicast_ciphers[j], 4)) {
|
||||
match = 1;
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -517,6 +517,14 @@ static void lim_handle_assoc_reject_status(tpAniSirGlobal mac_ctx,
|
||||
}
|
||||
#endif
|
||||
|
||||
static void clean_up_ft_sha384(tpSirAssocRsp assoc_rsp, bool sha384_akm)
|
||||
{
|
||||
if (sha384_akm) {
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_process_assoc_rsp_frame() - Processes assoc response
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
@@ -550,6 +558,8 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
#endif
|
||||
tSirMacEdcaParamRecord mu_edca_set[MAX_NUM_AC];
|
||||
int8_t rssi;
|
||||
enum ani_akm_type auth_type;
|
||||
bool sha384_akm;
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
sme_sessionid = session_entry->smeSessionId;
|
||||
@@ -729,6 +739,9 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
lim_update_ese_tspec(mac_ctx, session_entry, assoc_rsp);
|
||||
#endif
|
||||
|
||||
auth_type = session_entry->connected_akm;
|
||||
sha384_akm = lim_is_sha384_akm(auth_type);
|
||||
|
||||
if (assoc_rsp->capabilityInfo.ibss) {
|
||||
/*
|
||||
* Received Re/Association Response from peer
|
||||
@@ -737,6 +750,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
* failure timeout.
|
||||
*/
|
||||
pe_err("received Re/AssocRsp frame with IBSS capability");
|
||||
clean_up_ft_sha384(assoc_rsp, sha384_akm);
|
||||
qdf_mem_free(assoc_rsp);
|
||||
qdf_mem_free(beacon);
|
||||
return;
|
||||
@@ -744,6 +758,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
|
||||
if (cfg_get_capability_info(mac_ctx, &caps, session_entry)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
clean_up_ft_sha384(assoc_rsp, sha384_akm);
|
||||
qdf_mem_free(assoc_rsp);
|
||||
qdf_mem_free(beacon);
|
||||
pe_err("could not retrieve Capabilities");
|
||||
@@ -837,6 +852,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
NULL) != QDF_STATUS_SUCCESS) {
|
||||
pe_err("Set link state to POSTASSOC failed");
|
||||
qdf_mem_free(beacon);
|
||||
clean_up_ft_sha384(assoc_rsp, sha384_akm);
|
||||
qdf_mem_free(assoc_rsp);
|
||||
return;
|
||||
}
|
||||
@@ -969,6 +985,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
assoc_cnf.protStatusCode = eSIR_SME_SUCCESS;
|
||||
lim_post_sme_message(mac_ctx, LIM_MLM_ASSOC_CNF,
|
||||
(uint32_t *) &assoc_cnf);
|
||||
clean_up_ft_sha384(assoc_rsp, sha384_akm);
|
||||
qdf_mem_free(assoc_rsp);
|
||||
qdf_mem_free(beacon);
|
||||
return;
|
||||
@@ -1034,6 +1051,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
|
||||
beacon,
|
||||
&session_entry->pLimJoinReq->bssDescription, true,
|
||||
session_entry)) {
|
||||
clean_up_ft_sha384(assoc_rsp, sha384_akm);
|
||||
qdf_mem_free(assoc_rsp);
|
||||
qdf_mem_free(beacon);
|
||||
return;
|
||||
|
||||
@@ -324,6 +324,7 @@ void lim_perform_deauth(tpAniSirGlobal mac_ctx, tpPESession pe_session,
|
||||
tLimMlmAssocCnf mlmAssocCnf;
|
||||
uint16_t aid;
|
||||
tpDphHashNode sta_ds;
|
||||
tpSirAssocRsp assoc_rsp;
|
||||
|
||||
sta_ds = dph_lookup_hash_entry(mac_ctx, addr, &aid,
|
||||
&pe_session->dph.dphHashTable);
|
||||
@@ -539,6 +540,10 @@ void lim_perform_deauth(tpAniSirGlobal mac_ctx, tpPESession pe_session,
|
||||
lim_delete_pre_auth_node(mac_ctx, addr);
|
||||
|
||||
if (pe_session->limAssocResponseData) {
|
||||
assoc_rsp = (tpSirAssocRsp) pe_session->
|
||||
limAssocResponseData;
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
|
||||
qdf_mem_free(pe_session->limAssocResponseData);
|
||||
pe_session->limAssocResponseData = NULL;
|
||||
}
|
||||
|
||||
@@ -348,6 +348,7 @@ void lim_perform_disassoc(tpAniSirGlobal mac_ctx, int32_t frame_rssi,
|
||||
tLimMlmDisassocInd mlmDisassocInd;
|
||||
uint16_t aid;
|
||||
tpDphHashNode sta_ds;
|
||||
tpSirAssocRsp assoc_rsp;
|
||||
|
||||
sta_ds = dph_lookup_hash_entry(mac_ctx, addr, &aid,
|
||||
&pe_session->dph.dphHashTable);
|
||||
@@ -378,6 +379,10 @@ void lim_perform_disassoc(tpAniSirGlobal mac_ctx, int32_t frame_rssi,
|
||||
pe_debug("received Disassoc from AP while waiting for Reassoc Rsp");
|
||||
|
||||
if (pe_session->limAssocResponseData) {
|
||||
assoc_rsp = (tpSirAssocRsp) pe_session->
|
||||
limAssocResponseData;
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
|
||||
qdf_mem_free(pe_session->limAssocResponseData);
|
||||
pe_session->limAssocResponseData = NULL;
|
||||
}
|
||||
|
||||
@@ -3062,7 +3062,7 @@ void __lim_process_sme_assoc_cnf_new(tpAniSirGlobal mac_ctx, uint32_t msg_type,
|
||||
|
||||
if (msg_buf == NULL) {
|
||||
pe_err("msg_buf is NULL");
|
||||
goto end;
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_copy(&assoc_cnf, msg_buf, sizeof(struct sSirSmeAssocCnf));
|
||||
|
||||
@@ -208,6 +208,8 @@ void lim_handle_del_bss_in_re_assoc_context(tpAniSirGlobal pMac,
|
||||
qdf_mem_free(beacon_struct);
|
||||
goto error;
|
||||
}
|
||||
qdf_mem_free(assocRsp->sha384_ft_subelem.gtk);
|
||||
qdf_mem_free(assocRsp->sha384_ft_subelem.igtk);
|
||||
qdf_mem_free(assocRsp);
|
||||
qdf_mem_free(beacon_struct);
|
||||
psessionEntry->limAssocResponseData = NULL;
|
||||
@@ -334,6 +336,8 @@ void lim_handle_add_bss_in_re_assoc_context(tpAniSirGlobal pMac,
|
||||
qdf_mem_free(pBeaconStruct);
|
||||
goto Error;
|
||||
}
|
||||
qdf_mem_free(assocRsp->sha384_ft_subelem.gtk);
|
||||
qdf_mem_free(assocRsp->sha384_ft_subelem.igtk);
|
||||
qdf_mem_free(assocRsp);
|
||||
psessionEntry->limAssocResponseData = NULL;
|
||||
qdf_mem_free(pBeaconStruct);
|
||||
|
||||
@@ -797,6 +797,7 @@ void pe_delete_session(tpAniSirGlobal mac_ctx, tpPESession session)
|
||||
uint16_t i = 0;
|
||||
uint16_t n;
|
||||
TX_TIMER *timer_ptr;
|
||||
tpSirAssocRsp assoc_rsp;
|
||||
|
||||
if (!session || (session && !session->valid)) {
|
||||
pe_debug("session already deleted or not valid");
|
||||
@@ -913,6 +914,9 @@ void pe_delete_session(tpAniSirGlobal mac_ctx, tpPESession session)
|
||||
session->parsedAssocReq = NULL;
|
||||
}
|
||||
if (NULL != session->limAssocResponseData) {
|
||||
assoc_rsp = (tpSirAssocRsp) session->limAssocResponseData;
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
|
||||
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
|
||||
qdf_mem_free(session->limAssocResponseData);
|
||||
session->limAssocResponseData = NULL;
|
||||
}
|
||||
|
||||
@@ -6487,38 +6487,95 @@ end:
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_send_ies_per_band() - gets ht and vht capability and send to firmware via
|
||||
* wma
|
||||
* is_dot11mode_support_ht_cap() - Check dot11mode supports HT capability
|
||||
* @dot11mode: dot11mode
|
||||
*
|
||||
* This function checks whether dot11mode support HT capability or not
|
||||
*
|
||||
* Return: True, if supports. False otherwise
|
||||
*/
|
||||
static bool is_dot11mode_support_ht_cap(enum csr_cfgdot11mode dot11mode)
|
||||
{
|
||||
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11N) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11N_ONLY) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* is_dot11mode_support_vht_cap() - Check dot11mode supports VHT capability
|
||||
* @dot11mode: dot11mode
|
||||
*
|
||||
* This function checks whether dot11mode support VHT capability or not
|
||||
*
|
||||
* Return: True, if supports. False otherwise
|
||||
*/
|
||||
static bool is_dot11mode_support_vht_cap(enum csr_cfgdot11mode dot11mode)
|
||||
{
|
||||
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* is_dot11mode_support_he_cap() - Check dot11mode supports HE capability
|
||||
* @dot11mode: dot11mode
|
||||
*
|
||||
* This function checks whether dot11mode support HE capability or not
|
||||
*
|
||||
* Return: True, if supports. False otherwise
|
||||
*/
|
||||
static bool is_dot11mode_support_he_cap(enum csr_cfgdot11mode dot11mode)
|
||||
{
|
||||
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_send_ht_caps_ie() - gets HT capability and send to firmware via wma
|
||||
* @mac_ctx: global mac context
|
||||
* @session: pe session. This can be NULL. In that case self cap will be sent
|
||||
* @device_mode: VDEV op mode
|
||||
* @vdev_id: vdev for which IE is targeted
|
||||
*
|
||||
* This funciton gets ht and vht capability and send to firmware via wma
|
||||
* This function gets HT capability and send to firmware via wma
|
||||
*
|
||||
* Return: status of operation
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
|
||||
static QDF_STATUS lim_send_ht_caps_ie(tpAniSirGlobal mac_ctx,
|
||||
tpPESession session,
|
||||
enum QDF_OPMODE device_mode,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
uint8_t ht_caps[DOT11F_IE_HTCAPS_MIN_LEN + 2] = {0};
|
||||
uint8_t vht_caps[DOT11F_IE_VHTCAPS_MAX_LEN + 2] = {0};
|
||||
tHtCaps *p_ht_cap = (tHtCaps *)(&ht_caps[2]);
|
||||
tSirMacVHTCapabilityInfo *p_vht_cap =
|
||||
(tSirMacVHTCapabilityInfo *)(&vht_caps[2]);
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS status_5g, status_2g;
|
||||
|
||||
/*
|
||||
* Note: Do not use Dot11f VHT structure, since 1 byte present flag in
|
||||
* it is causing weird padding errors. Instead use Sir Mac VHT struct
|
||||
* to send IE to wma.
|
||||
*/
|
||||
ht_caps[0] = DOT11F_EID_HTCAPS;
|
||||
ht_caps[1] = DOT11F_IE_HTCAPS_MIN_LEN;
|
||||
lim_set_ht_caps(mac_ctx, session, ht_caps,
|
||||
DOT11F_IE_HTCAPS_MIN_LEN + 2);
|
||||
/* Get LDPC and over write for 2G */
|
||||
p_ht_cap->advCodingCap = lim_get_rx_ldpc(mac_ctx, CHAN_ENUM_6);
|
||||
p_ht_cap->advCodingCap = lim_get_rx_ldpc(mac_ctx,
|
||||
CHAN_ENUM_6);
|
||||
/* Get self cap for HT40 support in 2G */
|
||||
if (mac_ctx->roam.configParam.channelBondingMode24GHz) {
|
||||
p_ht_cap->supportedChannelWidthSet = 1;
|
||||
@@ -6527,11 +6584,18 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
|
||||
p_ht_cap->supportedChannelWidthSet = 0;
|
||||
p_ht_cap->shortGI40MHz = 0;
|
||||
}
|
||||
|
||||
lim_populate_mcs_set_ht_per_vdev(mac_ctx, p_ht_cap, vdev_id,
|
||||
NSS_CHAINS_BAND_2GHZ);
|
||||
if (device_mode == QDF_NDI_MODE) {
|
||||
p_ht_cap->txBF = 0;
|
||||
p_ht_cap->implicitTxBF = 0;
|
||||
p_ht_cap->explicitCSITxBF = 0;
|
||||
}
|
||||
|
||||
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
|
||||
CDS_BAND_2GHZ, &ht_caps[2], DOT11F_IE_HTCAPS_MIN_LEN);
|
||||
status_2g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
|
||||
CDS_BAND_2GHZ, &ht_caps[2],
|
||||
DOT11F_IE_HTCAPS_MIN_LEN);
|
||||
/*
|
||||
* Get LDPC and over write for 5G - using channel 64 because it
|
||||
* is available in all reg domains.
|
||||
@@ -6547,9 +6611,37 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
|
||||
}
|
||||
lim_populate_mcs_set_ht_per_vdev(mac_ctx, p_ht_cap, vdev_id,
|
||||
NSS_CHAINS_BAND_5GHZ);
|
||||
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
|
||||
CDS_BAND_5GHZ, &ht_caps[2],
|
||||
DOT11F_IE_HTCAPS_MIN_LEN);
|
||||
|
||||
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
|
||||
CDS_BAND_5GHZ, &ht_caps[2], DOT11F_IE_HTCAPS_MIN_LEN);
|
||||
if (QDF_IS_STATUS_SUCCESS(status_2g) &&
|
||||
QDF_IS_STATUS_SUCCESS(status_5g))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_send_vht_caps_ie() - gets VHT capability and send to firmware via wma
|
||||
* @mac_ctx: global mac context
|
||||
* @session: pe session. This can be NULL. In that case self cap will be sent
|
||||
* @device_mode: VDEV op mode
|
||||
* @vdev_id: vdev for which IE is targeted
|
||||
*
|
||||
* This function gets VHT capability and send to firmware via wma
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS lim_send_vht_caps_ie(tpAniSirGlobal mac_ctx,
|
||||
tpPESession session,
|
||||
enum QDF_OPMODE device_mode,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
uint8_t vht_caps[DOT11F_IE_VHTCAPS_MAX_LEN + 2] = {0};
|
||||
tSirMacVHTCapabilityInfo *p_vht_cap =
|
||||
(tSirMacVHTCapabilityInfo *)(&vht_caps[2]);
|
||||
QDF_STATUS status_5g, status_2g;
|
||||
|
||||
vht_caps[0] = DOT11F_EID_VHTCAPS;
|
||||
vht_caps[1] = DOT11F_IE_VHTCAPS_MAX_LEN;
|
||||
@@ -6560,12 +6652,22 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
|
||||
* is available in all reg domains.
|
||||
*/
|
||||
p_vht_cap->ldpcCodingCap = lim_get_rx_ldpc(mac_ctx, CHAN_ENUM_64);
|
||||
/* Self VHT channel width for 5G is already negotiated with FW */
|
||||
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps,
|
||||
vdev_id, NSS_CHAINS_BAND_5GHZ);
|
||||
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps, vdev_id,
|
||||
NSS_CHAINS_BAND_5GHZ);
|
||||
|
||||
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
|
||||
CDS_BAND_5GHZ, &vht_caps[2], DOT11F_IE_VHTCAPS_MIN_LEN);
|
||||
if (device_mode == QDF_NDI_MODE) {
|
||||
p_vht_cap->muBeamformeeCap = 0;
|
||||
p_vht_cap->muBeamformerCap = 0;
|
||||
p_vht_cap->suBeamformeeCap = 0;
|
||||
p_vht_cap->suBeamFormerCap = 0;
|
||||
}
|
||||
/*
|
||||
* Self VHT channel width for 5G is already negotiated
|
||||
* with FW
|
||||
*/
|
||||
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
|
||||
CDS_BAND_5GHZ, &vht_caps[2],
|
||||
DOT11F_IE_VHTCAPS_MIN_LEN);
|
||||
|
||||
/* Get LDPC and over write for 2G */
|
||||
p_vht_cap->ldpcCodingCap = lim_get_rx_ldpc(mac_ctx, CHAN_ENUM_6);
|
||||
@@ -6573,15 +6675,76 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
|
||||
p_vht_cap->supportedChannelWidthSet = 0;
|
||||
p_vht_cap->shortGI80MHz = 0;
|
||||
p_vht_cap->shortGI160and80plus80MHz = 0;
|
||||
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps,
|
||||
vdev_id, NSS_CHAINS_BAND_2GHZ);
|
||||
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps, vdev_id,
|
||||
NSS_CHAINS_BAND_2GHZ);
|
||||
status_2g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
|
||||
CDS_BAND_2GHZ, &vht_caps[2],
|
||||
DOT11F_IE_VHTCAPS_MIN_LEN);
|
||||
|
||||
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
|
||||
CDS_BAND_2GHZ, &vht_caps[2], DOT11F_IE_VHTCAPS_MIN_LEN);
|
||||
if (QDF_IS_STATUS_SUCCESS(status_2g) &&
|
||||
QDF_IS_STATUS_SUCCESS(status_5g))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
status = lim_send_he_caps_ie(mac_ctx, session, vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return status;
|
||||
/**
|
||||
* lim_send_ies_per_band() - gets ht and vht capability and send to firmware via
|
||||
* wma
|
||||
* @mac_ctx: global mac context
|
||||
* @session: pe session. This can be NULL. In that case self cap will be sent
|
||||
* @vdev_id: vdev for which IE is targeted
|
||||
*
|
||||
* This funciton gets ht and vht capability and send to firmware via wma
|
||||
*
|
||||
* Return: status of operation
|
||||
*/
|
||||
QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
|
||||
tpPESession session,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
enum QDF_OPMODE device_mode;
|
||||
QDF_STATUS status_ht = QDF_STATUS_SUCCESS;
|
||||
QDF_STATUS status_vht = QDF_STATUS_SUCCESS;
|
||||
QDF_STATUS status_he = QDF_STATUS_SUCCESS;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
mac_ctx->psoc, vdev_id,
|
||||
WLAN_LEGACY_MAC_ID);
|
||||
if (!vdev) {
|
||||
pe_err("vdev is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
device_mode = wlan_vdev_mlme_get_opmode(vdev);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
|
||||
|
||||
/*
|
||||
* Note: Do not use Dot11f VHT structure, since 1 byte present flag in
|
||||
* it is causing weird padding errors. Instead use Sir Mac VHT struct
|
||||
* to send IE to wma.
|
||||
*/
|
||||
if (is_dot11mode_support_ht_cap(
|
||||
mac_ctx->roam.configParam.uCfgDot11Mode))
|
||||
status_ht = lim_send_ht_caps_ie(mac_ctx, session,
|
||||
device_mode, vdev_id);
|
||||
|
||||
if (is_dot11mode_support_vht_cap(
|
||||
mac_ctx->roam.configParam.uCfgDot11Mode))
|
||||
status_vht = lim_send_vht_caps_ie(mac_ctx, session,
|
||||
device_mode, vdev_id);
|
||||
|
||||
if (is_dot11mode_support_he_cap(
|
||||
mac_ctx->roam.configParam.uCfgDot11Mode))
|
||||
status_he = lim_send_he_caps_ie(mac_ctx, session,
|
||||
device_mode, vdev_id);
|
||||
|
||||
if (QDF_IS_STATUS_SUCCESS(status_ht) &&
|
||||
QDF_IS_STATUS_SUCCESS(status_vht) &&
|
||||
QDF_IS_STATUS_SUCCESS(status_he))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -7856,12 +8019,17 @@ void lim_set_he_caps(tpAniSirGlobal mac, tpPESession session, uint8_t *ie_start,
|
||||
}
|
||||
}
|
||||
|
||||
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx, tpPESession session,
|
||||
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx,
|
||||
tpPESession session,
|
||||
enum QDF_OPMODE device_mode,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
uint8_t he_caps[SIR_MAC_HE_CAP_MIN_LEN + 3];
|
||||
struct he_capability_info *he_cap;
|
||||
QDF_STATUS status_5g, status_2g;
|
||||
uint8_t he_cap_total_len = SIR_MAC_HE_CAP_MIN_LEN + HE_CAP_OUI_LEN +
|
||||
HE_CAP_160M_MCS_MAP_LEN +
|
||||
HE_CAP_80P80_MCS_MAP_LEN;
|
||||
|
||||
/* Sending only minimal info(no PPET) to FW now, update if required */
|
||||
qdf_mem_zero(he_caps, SIR_MAC_HE_CAP_MIN_LEN + 3);
|
||||
@@ -7872,7 +8040,17 @@ QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx, tpPESession session,
|
||||
SIR_MAC_HE_CAP_MIN_LEN + 3);
|
||||
he_cap = (struct he_capability_info *) (&he_caps[2 + HE_CAP_OUI_SIZE]);
|
||||
he_cap->ppet_present = 0;
|
||||
|
||||
if (device_mode == QDF_NDI_MODE) {
|
||||
he_cap->su_beamformee = 0;
|
||||
he_cap->su_beamformer = 0;
|
||||
he_cap->mu_beamformer = 0;
|
||||
he_cap->bfee_sts_gt_80 = 0;
|
||||
he_cap->bfee_sts_lt_80 = 0;
|
||||
he_cap->num_sounding_gt_80 = 0;
|
||||
he_cap->num_sounding_lt_80 = 0;
|
||||
he_cap->su_feedback_tone16 = 0;
|
||||
he_cap->mu_feedback_tone16 = 0;
|
||||
}
|
||||
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HE_CAP,
|
||||
CDS_BAND_5GHZ, &he_caps[2],
|
||||
SIR_MAC_HE_CAP_MIN_LEN + 1);
|
||||
|
||||
@@ -1159,13 +1159,16 @@ void lim_set_he_caps(tpAniSirGlobal mac, tpPESession session,
|
||||
* lim_send_he_caps_ie() - gets HE capability and send to firmware via wma
|
||||
* @mac_ctx: global mac context
|
||||
* @session: pe session. This can be NULL. In that case self cap will be sent
|
||||
* @device_mode: VDEV op mode
|
||||
* @vdev_id: vdev for which IE is targeted
|
||||
*
|
||||
* This function gets HE capability and send to firmware via wma
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx, tpPESession session,
|
||||
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx,
|
||||
tpPESession session,
|
||||
enum QDF_OPMODE device_mode,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
@@ -1301,6 +1304,7 @@ static inline void lim_set_he_caps(tpAniSirGlobal mac, tpPESession session,
|
||||
|
||||
static inline QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx,
|
||||
tpPESession session,
|
||||
enum QDF_OPMODE device_mode,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
@@ -3120,7 +3120,7 @@ QDF_STATUS wlansap_update_owe_info(struct sap_context *sap_ctx,
|
||||
struct owe_assoc_ind *owe_assoc_ind;
|
||||
tSirSmeAssocInd *assoc_ind = NULL;
|
||||
qdf_list_node_t *node = NULL, *next_node = NULL;
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (!wlansap_validate_owe_ies(ie, ie_len)) {
|
||||
QDF_TRACE_ERROR(QDF_MODULE_ID_SAP, "Invalid OWE IE");
|
||||
|
||||
@@ -1088,13 +1088,16 @@ static int vfio_bus_type(struct device *dev, void *data)
|
||||
static int vfio_iommu_replay(struct vfio_iommu *iommu,
|
||||
struct vfio_domain *domain)
|
||||
{
|
||||
struct vfio_domain *d;
|
||||
struct vfio_domain *d = NULL;
|
||||
struct rb_node *n;
|
||||
unsigned long limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
|
||||
int ret;
|
||||
|
||||
/* Arbitrarily pick the first domain in the list for lookups */
|
||||
d = list_first_entry(&iommu->domain_list, struct vfio_domain, next);
|
||||
if (!list_empty(&iommu->domain_list))
|
||||
d = list_first_entry(&iommu->domain_list,
|
||||
struct vfio_domain, next);
|
||||
|
||||
n = rb_first(&iommu->dma_list);
|
||||
|
||||
for (; n; n = rb_next(n)) {
|
||||
@@ -1112,6 +1115,11 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu,
|
||||
phys_addr_t p;
|
||||
dma_addr_t i;
|
||||
|
||||
if (WARN_ON(!d)) { /* mapped w/o a domain?! */
|
||||
ret = -EINVAL;
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
phys = iommu_iova_to_phys(d->domain, iova);
|
||||
|
||||
if (WARN_ON(!phys)) {
|
||||
@@ -1141,7 +1149,7 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu,
|
||||
if (npage <= 0) {
|
||||
WARN_ON(!npage);
|
||||
ret = (int)npage;
|
||||
return ret;
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
phys = pfn << PAGE_SHIFT;
|
||||
@@ -1150,14 +1158,67 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu,
|
||||
|
||||
ret = iommu_map(domain->domain, iova, phys,
|
||||
size, dma->prot | domain->prot);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (ret) {
|
||||
if (!dma->iommu_mapped)
|
||||
vfio_unpin_pages_remote(dma, iova,
|
||||
phys >> PAGE_SHIFT,
|
||||
size >> PAGE_SHIFT,
|
||||
true);
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
iova += size;
|
||||
}
|
||||
}
|
||||
|
||||
/* All dmas are now mapped, defer to second tree walk for unwind */
|
||||
for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
|
||||
struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
|
||||
|
||||
dma->iommu_mapped = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
unwind:
|
||||
for (; n; n = rb_prev(n)) {
|
||||
struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
|
||||
dma_addr_t iova;
|
||||
|
||||
if (dma->iommu_mapped) {
|
||||
iommu_unmap(domain->domain, dma->iova, dma->size);
|
||||
continue;
|
||||
}
|
||||
|
||||
iova = dma->iova;
|
||||
while (iova < dma->iova + dma->size) {
|
||||
phys_addr_t phys, p;
|
||||
size_t size;
|
||||
dma_addr_t i;
|
||||
|
||||
phys = iommu_iova_to_phys(domain->domain, iova);
|
||||
if (!phys) {
|
||||
iova += PAGE_SIZE;
|
||||
continue;
|
||||
}
|
||||
|
||||
size = PAGE_SIZE;
|
||||
p = phys + size;
|
||||
i = iova + size;
|
||||
while (i < dma->iova + dma->size &&
|
||||
p == iommu_iova_to_phys(domain->domain, i)) {
|
||||
size += PAGE_SIZE;
|
||||
p += PAGE_SIZE;
|
||||
i += PAGE_SIZE;
|
||||
}
|
||||
|
||||
iommu_unmap(domain->domain, iova, size);
|
||||
vfio_unpin_pages_remote(dma, iova, phys >> PAGE_SHIFT,
|
||||
size >> PAGE_SHIFT, true);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -829,6 +829,9 @@ bool virtqueue_poll(struct virtqueue *_vq, unsigned last_used_idx)
|
||||
{
|
||||
struct vring_virtqueue *vq = to_vvq(_vq);
|
||||
|
||||
if (unlikely(vq->broken))
|
||||
return false;
|
||||
|
||||
virtio_mb(vq->weak_barriers);
|
||||
return (u16)last_used_idx != virtio16_to_cpu(_vq->vdev, vq->vring.used->idx);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ EXPORT_SYMBOL_GPL(xen_in_preemptible_hcall);
|
||||
asmlinkage __visible void xen_maybe_preempt_hcall(void)
|
||||
{
|
||||
if (unlikely(__this_cpu_read(xen_in_preemptible_hcall)
|
||||
&& need_resched())) {
|
||||
&& need_resched() && !preempt_count())) {
|
||||
/*
|
||||
* Clear flag as we may be rescheduled on a different
|
||||
* cpu.
|
||||
|
||||
@@ -3262,6 +3262,8 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size);
|
||||
int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
||||
unsigned long new_flags);
|
||||
int btrfs_sync_fs(struct super_block *sb, int wait);
|
||||
char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
|
||||
u64 subvol_objectid);
|
||||
|
||||
static inline __printf(2, 3)
|
||||
void btrfs_no_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
|
||||
|
||||
@@ -56,7 +56,7 @@ static int btrfs_encode_fh(struct inode *inode, u32 *fh, int *max_len,
|
||||
return type;
|
||||
}
|
||||
|
||||
static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
|
||||
struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
|
||||
u64 root_objectid, u32 generation,
|
||||
int check_generation)
|
||||
{
|
||||
@@ -151,7 +151,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh,
|
||||
return btrfs_get_dentry(sb, objectid, root_objectid, generation, 1);
|
||||
}
|
||||
|
||||
static struct dentry *btrfs_get_parent(struct dentry *child)
|
||||
struct dentry *btrfs_get_parent(struct dentry *child)
|
||||
{
|
||||
struct inode *dir = d_inode(child);
|
||||
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
|
||||
|
||||
@@ -17,4 +17,9 @@ struct btrfs_fid {
|
||||
u64 parent_root_objectid;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
|
||||
u64 root_objectid, u32 generation,
|
||||
int check_generation);
|
||||
struct dentry *btrfs_get_parent(struct dentry *child);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -630,7 +630,21 @@ cont:
|
||||
btrfs_free_reserved_data_space_noquota(inode,
|
||||
start,
|
||||
end - start + 1);
|
||||
goto free_pages_out;
|
||||
|
||||
/*
|
||||
* Ensure we only free the compressed pages if we have
|
||||
* them allocated, as we can still reach here with
|
||||
* inode_need_compress() == false.
|
||||
*/
|
||||
if (pages) {
|
||||
for (i = 0; i < nr_pages; i++) {
|
||||
WARN_ON(pages[i]->mapping);
|
||||
put_page(pages[i]);
|
||||
}
|
||||
kfree(pages);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -709,13 +723,6 @@ cleanup_and_bail_uncompressed:
|
||||
*num_added += 1;
|
||||
|
||||
return;
|
||||
|
||||
free_pages_out:
|
||||
for (i = 0; i < nr_pages; i++) {
|
||||
WARN_ON(pages[i]->mapping);
|
||||
put_page(pages[i]);
|
||||
}
|
||||
kfree(pages);
|
||||
}
|
||||
|
||||
static void free_async_extent_pages(struct async_extent *async_extent)
|
||||
|
||||
@@ -939,7 +939,7 @@ out:
|
||||
return error;
|
||||
}
|
||||
|
||||
static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
|
||||
char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
|
||||
u64 subvol_objectid)
|
||||
{
|
||||
struct btrfs_root *root = fs_info->tree_root;
|
||||
@@ -1221,6 +1221,7 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
|
||||
{
|
||||
struct btrfs_fs_info *info = btrfs_sb(dentry->d_sb);
|
||||
char *compress_type;
|
||||
const char *subvol_name;
|
||||
|
||||
if (btrfs_test_opt(info, DEGRADED))
|
||||
seq_puts(seq, ",degraded");
|
||||
@@ -1307,8 +1308,13 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
|
||||
#endif
|
||||
seq_printf(seq, ",subvolid=%llu",
|
||||
BTRFS_I(d_inode(dentry))->root->root_key.objectid);
|
||||
subvol_name = btrfs_get_subvol_name_from_objectid(info,
|
||||
BTRFS_I(d_inode(dentry))->root->root_key.objectid);
|
||||
if (!IS_ERR(subvol_name)) {
|
||||
seq_puts(seq, ",subvol=");
|
||||
seq_dentry(seq, dentry, " \t\n\\");
|
||||
seq_escape(seq, subvol_name, " \t\n\\");
|
||||
kfree(subvol_name);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1427,8 +1433,8 @@ static struct dentry *mount_subvol(const char *subvol_name, u64 subvol_objectid,
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
subvol_name = get_subvol_name_from_objectid(btrfs_sb(mnt->mnt_sb),
|
||||
subvol_objectid);
|
||||
subvol_name = btrfs_get_subvol_name_from_objectid(
|
||||
btrfs_sb(mnt->mnt_sb), subvol_objectid);
|
||||
if (IS_ERR(subvol_name)) {
|
||||
root = ERR_CAST(subvol_name);
|
||||
subvol_name = NULL;
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <linux/bug.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/sched/mm.h>
|
||||
|
||||
#include "ctree.h"
|
||||
#include "disk-io.h"
|
||||
@@ -749,7 +750,9 @@ int btrfs_sysfs_add_device_link(struct btrfs_fs_devices *fs_devices,
|
||||
{
|
||||
int error = 0;
|
||||
struct btrfs_device *dev;
|
||||
unsigned int nofs_flag;
|
||||
|
||||
nofs_flag = memalloc_nofs_save();
|
||||
list_for_each_entry(dev, &fs_devices->devices, dev_list) {
|
||||
struct hd_struct *disk;
|
||||
struct kobject *disk_kobj;
|
||||
@@ -768,6 +771,7 @@ int btrfs_sysfs_add_device_link(struct btrfs_fs_devices *fs_devices,
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
memalloc_nofs_restore(nofs_flag);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -1910,11 +1910,13 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
|
||||
* not already there, and calling reverse_path_check()
|
||||
* during ep_insert().
|
||||
*/
|
||||
if (list_empty(&epi->ffd.file->f_tfile_llink))
|
||||
if (list_empty(&epi->ffd.file->f_tfile_llink)) {
|
||||
get_file(epi->ffd.file);
|
||||
list_add(&epi->ffd.file->f_tfile_llink,
|
||||
&tfile_check_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
mutex_unlock(&ep->mtx);
|
||||
|
||||
return error;
|
||||
@@ -1956,6 +1958,7 @@ static void clear_tfile_check_list(void)
|
||||
file = list_first_entry(&tfile_check_list, struct file,
|
||||
f_tfile_llink);
|
||||
list_del_init(&file->f_tfile_llink);
|
||||
fput(file);
|
||||
}
|
||||
INIT_LIST_HEAD(&tfile_check_list);
|
||||
}
|
||||
@@ -2106,13 +2109,13 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
|
||||
mutex_lock(&epmutex);
|
||||
if (is_file_epoll(tf.file)) {
|
||||
error = -ELOOP;
|
||||
if (ep_loop_check(ep, tf.file) != 0) {
|
||||
clear_tfile_check_list();
|
||||
if (ep_loop_check(ep, tf.file) != 0)
|
||||
goto error_tgt_fput;
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
get_file(tf.file);
|
||||
list_add(&tf.file->f_tfile_llink,
|
||||
&tfile_check_list);
|
||||
}
|
||||
mutex_lock_nested(&ep->mtx, 0);
|
||||
if (is_file_epoll(tf.file)) {
|
||||
tep = tf.file->private_data;
|
||||
@@ -2136,8 +2139,6 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
|
||||
error = ep_insert(ep, &epds, tf.file, fd, full_check);
|
||||
} else
|
||||
error = -EEXIST;
|
||||
if (full_check)
|
||||
clear_tfile_check_list();
|
||||
break;
|
||||
case EPOLL_CTL_DEL:
|
||||
if (epi)
|
||||
@@ -2160,8 +2161,10 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
|
||||
mutex_unlock(&ep->mtx);
|
||||
|
||||
error_tgt_fput:
|
||||
if (full_check)
|
||||
if (full_check) {
|
||||
clear_tfile_check_list();
|
||||
mutex_unlock(&epmutex);
|
||||
}
|
||||
|
||||
fdput(tf);
|
||||
error_fput:
|
||||
|
||||
@@ -1391,8 +1391,8 @@ int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
|
||||
ext4_match(dir, fname, de)) {
|
||||
/* found a match - just to be sure, do
|
||||
* a full check */
|
||||
if (ext4_check_dir_entry(dir, NULL, de, bh, bh->b_data,
|
||||
bh->b_size, offset))
|
||||
if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf,
|
||||
buf_size, offset))
|
||||
return -1;
|
||||
*res_dir = de;
|
||||
return 1;
|
||||
@@ -1853,7 +1853,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
|
||||
blocksize, hinfo, map);
|
||||
map -= count;
|
||||
dx_sort_map(map, count);
|
||||
/* Split the existing block in the middle, size-wise */
|
||||
/* Ensure that neither split block is over half full */
|
||||
size = 0;
|
||||
move = 0;
|
||||
for (i = count-1; i >= 0; i--) {
|
||||
@@ -1863,8 +1863,18 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
|
||||
size += map[i].size;
|
||||
move++;
|
||||
}
|
||||
/* map index at which we will split */
|
||||
/*
|
||||
* map index at which we will split
|
||||
*
|
||||
* If the sum of active entries didn't exceed half the block size, just
|
||||
* split it in half by count; each resulting block will have at least
|
||||
* half the space free.
|
||||
*/
|
||||
if (i > 0)
|
||||
split = count - move;
|
||||
else
|
||||
split = count/2;
|
||||
|
||||
hash2 = map[split].hash;
|
||||
continued = hash2 == map[split - 1].hash;
|
||||
dxtrace(printk(KERN_INFO "Split block %lu at %x, %i/%i\n",
|
||||
@@ -2473,7 +2483,7 @@ int ext4_generic_delete_entry(handle_t *handle,
|
||||
de = (struct ext4_dir_entry_2 *)entry_buf;
|
||||
while (i < buf_size - csum_size) {
|
||||
if (ext4_check_dir_entry(dir, NULL, de, bh,
|
||||
bh->b_data, bh->b_size, i))
|
||||
entry_buf, buf_size, i))
|
||||
return -EFSCORRUPTED;
|
||||
if (de == de_del) {
|
||||
if (pde)
|
||||
|
||||
@@ -1356,8 +1356,10 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags)
|
||||
int ret;
|
||||
|
||||
/* Buffer got discarded which means block device got invalidated */
|
||||
if (!buffer_mapped(bh))
|
||||
if (!buffer_mapped(bh)) {
|
||||
unlock_buffer(bh);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
trace_jbd2_write_superblock(journal, write_flags);
|
||||
if (!(journal->j_flags & JBD2_BARRIER))
|
||||
|
||||
@@ -590,10 +590,14 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
|
||||
int ret;
|
||||
uint32_t now = get_seconds();
|
||||
|
||||
mutex_lock(&f->sem);
|
||||
for (fd = f->dents ; fd; fd = fd->next) {
|
||||
if (fd->ino)
|
||||
if (fd->ino) {
|
||||
mutex_unlock(&f->sem);
|
||||
return -ENOTEMPTY;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&f->sem);
|
||||
|
||||
ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
|
||||
dentry->d_name.len, f, now);
|
||||
|
||||
@@ -221,10 +221,8 @@ int romfs_dev_read(struct super_block *sb, unsigned long pos,
|
||||
size_t limit;
|
||||
|
||||
limit = romfs_maxsize(sb);
|
||||
if (pos >= limit)
|
||||
if (pos >= limit || buflen > limit - pos)
|
||||
return -EIO;
|
||||
if (buflen > limit - pos)
|
||||
buflen = limit - pos;
|
||||
|
||||
#ifdef CONFIG_ROMFS_ON_MTD
|
||||
if (sb->s_mtd)
|
||||
|
||||
@@ -44,9 +44,11 @@ xfs_sysfs_init(
|
||||
struct xfs_kobj *parent_kobj,
|
||||
const char *name)
|
||||
{
|
||||
struct kobject *parent;
|
||||
|
||||
parent = parent_kobj ? &parent_kobj->kobject : NULL;
|
||||
init_completion(&kobj->complete);
|
||||
return kobject_init_and_add(&kobj->kobject, ktype,
|
||||
&parent_kobj->kobject, "%s", name);
|
||||
return kobject_init_and_add(&kobj->kobject, ktype, parent, "%s", name);
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
||||
@@ -669,7 +669,7 @@ xfs_trans_dqresv(
|
||||
}
|
||||
}
|
||||
if (ninos > 0) {
|
||||
total_count = be64_to_cpu(dqp->q_core.d_icount) + ninos;
|
||||
total_count = dqp->q_res_icount + ninos;
|
||||
timer = be32_to_cpu(dqp->q_core.d_itimer);
|
||||
warns = be16_to_cpu(dqp->q_core.d_iwarns);
|
||||
warnlimit = dqp->q_mount->m_quotainfo->qi_iwarnlimit;
|
||||
|
||||
@@ -85,8 +85,6 @@ enum virtio_gpu_ctrl_type {
|
||||
VIRTIO_GPU_CMD_GET_EDID,
|
||||
VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID,
|
||||
VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
|
||||
VIRTIO_GPU_CMD_RESOURCE_MAP,
|
||||
VIRTIO_GPU_CMD_RESOURCE_UNMAP,
|
||||
|
||||
/* 3d commands */
|
||||
VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
|
||||
@@ -97,6 +95,8 @@ enum virtio_gpu_ctrl_type {
|
||||
VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
|
||||
VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
|
||||
VIRTIO_GPU_CMD_SUBMIT_3D,
|
||||
VIRTIO_GPU_CMD_RESOURCE_MAP,
|
||||
VIRTIO_GPU_CMD_RESOURCE_UNMAP,
|
||||
|
||||
/* cursor commands */
|
||||
VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
|
||||
|
||||
@@ -197,6 +197,7 @@ free_buf:
|
||||
static void relay_destroy_channel(struct kref *kref)
|
||||
{
|
||||
struct rchan *chan = container_of(kref, struct rchan, kref);
|
||||
free_percpu(chan->buf);
|
||||
kfree(chan);
|
||||
}
|
||||
|
||||
|
||||
20
mm/hugetlb.c
20
mm/hugetlb.c
@@ -4578,25 +4578,21 @@ static bool vma_shareable(struct vm_area_struct *vma, unsigned long addr)
|
||||
void adjust_range_if_pmd_sharing_possible(struct vm_area_struct *vma,
|
||||
unsigned long *start, unsigned long *end)
|
||||
{
|
||||
unsigned long check_addr = *start;
|
||||
unsigned long a_start, a_end;
|
||||
|
||||
if (!(vma->vm_flags & VM_MAYSHARE))
|
||||
return;
|
||||
|
||||
for (check_addr = *start; check_addr < *end; check_addr += PUD_SIZE) {
|
||||
unsigned long a_start = check_addr & PUD_MASK;
|
||||
unsigned long a_end = a_start + PUD_SIZE;
|
||||
/* Extend the range to be PUD aligned for a worst case scenario */
|
||||
a_start = ALIGN_DOWN(*start, PUD_SIZE);
|
||||
a_end = ALIGN(*end, PUD_SIZE);
|
||||
|
||||
/*
|
||||
* If sharing is possible, adjust start/end if necessary.
|
||||
* Intersect the range with the vma range, since pmd sharing won't be
|
||||
* across vma after all
|
||||
*/
|
||||
if (range_in_vma(vma, a_start, a_end)) {
|
||||
if (a_start < *start)
|
||||
*start = a_start;
|
||||
if (a_end > *end)
|
||||
*end = a_end;
|
||||
}
|
||||
}
|
||||
*start = max(vma->vm_start, a_start);
|
||||
*end = min(vma->vm_end, a_end);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -394,7 +394,7 @@ static void insert_to_mm_slots_hash(struct mm_struct *mm,
|
||||
|
||||
static inline int khugepaged_test_exit(struct mm_struct *mm)
|
||||
{
|
||||
return atomic_read(&mm->mm_users) == 0;
|
||||
return atomic_read(&mm->mm_users) == 0 || !mmget_still_valid(mm);
|
||||
}
|
||||
|
||||
int __khugepaged_enter(struct mm_struct *mm)
|
||||
@@ -407,7 +407,7 @@ int __khugepaged_enter(struct mm_struct *mm)
|
||||
return -ENOMEM;
|
||||
|
||||
/* __khugepaged_exit() must not run from under us */
|
||||
VM_BUG_ON_MM(khugepaged_test_exit(mm), mm);
|
||||
VM_BUG_ON_MM(atomic_read(&mm->mm_users) == 0, mm);
|
||||
if (unlikely(test_and_set_bit(MMF_VM_HUGEPAGE, &mm->flags))) {
|
||||
free_mm_slot(mm_slot);
|
||||
return 0;
|
||||
@@ -1008,9 +1008,6 @@ static void collapse_huge_page(struct mm_struct *mm,
|
||||
* handled by the anon_vma lock + PG_lock.
|
||||
*/
|
||||
down_write(&mm->mmap_sem);
|
||||
result = SCAN_ANY_PROCESS;
|
||||
if (!mmget_still_valid(mm))
|
||||
goto out;
|
||||
result = hugepage_vma_revalidate(mm, address, &vma);
|
||||
if (result)
|
||||
goto out;
|
||||
|
||||
@@ -1191,6 +1191,11 @@ static void free_pcppages_bulk(struct zone *zone, int count,
|
||||
spin_lock(&zone->lock);
|
||||
isolated_pageblocks = has_isolate_pageblock(zone);
|
||||
|
||||
/*
|
||||
* Ensure proper count is passed which otherwise would stuck in the
|
||||
* below while (list_empty(list)) loop.
|
||||
*/
|
||||
count = min(pcp->count, count);
|
||||
while (count) {
|
||||
struct page *page;
|
||||
struct list_head *list;
|
||||
@@ -7297,7 +7302,7 @@ int __meminit init_per_zone_wmark_min(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
core_initcall(init_per_zone_wmark_min)
|
||||
postcore_initcall(init_per_zone_wmark_min)
|
||||
|
||||
/*
|
||||
* min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
#define CDC_D_REVISION1 (0xf000)
|
||||
#define CDC_D_PERPH_SUBTYPE (0xf005)
|
||||
#define CDC_D_INT_EN_SET (0x015)
|
||||
#define CDC_D_INT_EN_CLR (0x016)
|
||||
#define CDC_D_INT_EN_SET (0xf015)
|
||||
#define CDC_D_INT_EN_CLR (0xf016)
|
||||
#define MBHC_SWITCH_INT BIT(7)
|
||||
#define MBHC_MIC_ELECTRICAL_INS_REM_DET BIT(6)
|
||||
#define MBHC_BUTTON_PRESS_DET BIT(5)
|
||||
|
||||
@@ -339,7 +339,7 @@ static int sst_media_open(struct snd_pcm_substream *substream,
|
||||
|
||||
ret_val = power_up_sst(stream);
|
||||
if (ret_val < 0)
|
||||
return ret_val;
|
||||
goto out_power_up;
|
||||
|
||||
/* Make sure, that the period size is always even */
|
||||
snd_pcm_hw_constraint_step(substream->runtime, 0,
|
||||
@@ -348,8 +348,9 @@ static int sst_media_open(struct snd_pcm_substream *substream,
|
||||
return snd_pcm_hw_constraint_integer(runtime,
|
||||
SNDRV_PCM_HW_PARAM_PERIODS);
|
||||
out_ops:
|
||||
kfree(stream);
|
||||
mutex_unlock(&sst_lock);
|
||||
out_power_up:
|
||||
kfree(stream);
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,msmnile),true)
|
||||
TARGET := msmnile
|
||||
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
|
||||
else
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE)),true)
|
||||
TARGET := talos
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(TRINKET)),true)
|
||||
TARGET := trinket
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
TARGET := kona
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
TARGET := lito
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
TARGET := atoll
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=platform_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_platform.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := platform_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list, ),true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_cpe_lsm.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := cpe_lsm_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_machine_$(TARGET).ko
|
||||
LOCAL_MODULE_KBUILD_NAME := machine_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -1,145 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,msmnile),true)
|
||||
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au))
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
|
||||
else
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=wcd_core_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd_core.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd_core_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd9xxx.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd9xxx_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list, ),true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd_cpe.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd_cpe_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET)),true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd_spi.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd_spi_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list, ),true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd9335.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd9335_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wsa881x.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wsa881x_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_mbhc.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := mbhc_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
############################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_stub.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := stub_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
##########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_hdmi.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := hdmi_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -1,94 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=bolero_cdc_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_bolero_cdc.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := bolero_cdc_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wsa_macro.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wsa_macro_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_va_macro.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := va_macro_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_tx_macro.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := tx_macro_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_rx_macro.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := rx_macro_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -389,9 +389,10 @@ static int bolero_copy_dais_from_macro(struct bolero_priv *priv)
|
||||
|
||||
/* memcpy into bolero_dais all macro dais */
|
||||
if (!priv->bolero_dais)
|
||||
priv->bolero_dais = devm_kcalloc(priv->dev,
|
||||
priv->num_dais,
|
||||
sizeof(struct snd_soc_dai_driver),
|
||||
priv->bolero_dais = devm_kzalloc(priv->dev,
|
||||
priv->num_dais *
|
||||
sizeof(
|
||||
struct snd_soc_dai_driver),
|
||||
GFP_KERNEL);
|
||||
if (!priv->bolero_dais)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -640,7 +640,7 @@ static int bolero_clk_rsc_probe(struct platform_device *pdev)
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
clk_name_array = devm_kcalloc(&pdev->dev, clk_cnt, sizeof(char *),
|
||||
clk_name_array = devm_kzalloc(&pdev->dev, clk_cnt * sizeof(char *),
|
||||
GFP_KERNEL);
|
||||
if (!clk_name_array) {
|
||||
ret = -ENOMEM;
|
||||
|
||||
@@ -1516,10 +1516,6 @@ static const struct snd_soc_dapm_widget tx_macro_dapm_widgets_v2[] = {
|
||||
SND_SOC_DAPM_MIXER("TX_AIF3_CAP Mixer", SND_SOC_NOPM,
|
||||
TX_MACRO_AIF3_CAP, 0,
|
||||
tx_aif3_cap_mixer_v2, ARRAY_SIZE(tx_aif3_cap_mixer_v2)),
|
||||
|
||||
SND_SOC_DAPM_SUPPLY_S("TX_SWR_CLK", 0, SND_SOC_NOPM, 0, 0,
|
||||
tx_macro_tx_swr_clk_event,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_widget tx_macro_dapm_widgets_v3[] = {
|
||||
|
||||
@@ -2057,172 +2057,6 @@ static const struct snd_soc_dapm_widget va_macro_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v2[] = {
|
||||
SND_SOC_DAPM_MIXER("VA_AIF1_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF1_CAP, 0,
|
||||
va_aif1_cap_mixer_v2, ARRAY_SIZE(va_aif1_cap_mixer_v2)),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF2_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF2_CAP, 0,
|
||||
va_aif2_cap_mixer_v2, ARRAY_SIZE(va_aif2_cap_mixer_v2)),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF3_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF3_CAP, 0,
|
||||
va_aif3_cap_mixer_v2, ARRAY_SIZE(va_aif3_cap_mixer_v2)),
|
||||
|
||||
SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_swr_pwr_event_v2,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_SUPPLY_S("VA_TX_SWR_CLK", 0, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_tx_swr_clk_event_v2,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v3[] = {
|
||||
SND_SOC_DAPM_MIXER("VA_AIF1_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF1_CAP, 0,
|
||||
va_aif1_cap_mixer_v3, ARRAY_SIZE(va_aif1_cap_mixer_v3)),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF2_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF2_CAP, 0,
|
||||
va_aif2_cap_mixer_v3, ARRAY_SIZE(va_aif2_cap_mixer_v3)),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF3_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF3_CAP, 0,
|
||||
va_aif3_cap_mixer_v3, ARRAY_SIZE(va_aif3_cap_mixer_v3)),
|
||||
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX2", 0, va_dmic2),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX3", 0, va_dmic3),
|
||||
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX2", 0, va_smic2_v3),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX3", 0, va_smic3_v3),
|
||||
|
||||
SND_SOC_DAPM_MUX_E("VA DEC2 MUX", SND_SOC_NOPM, VA_MACRO_DEC2, 0,
|
||||
&va_dec2_mux, va_macro_enable_dec,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_MUX_E("VA DEC3 MUX", SND_SOC_NOPM, VA_MACRO_DEC3, 0,
|
||||
&va_dec3_mux, va_macro_enable_dec,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_swr_pwr_event,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_widget va_macro_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_AIF_OUT_E("VA_AIF1 CAP", "VA_AIF1 Capture", 0,
|
||||
SND_SOC_NOPM, VA_MACRO_AIF1_CAP, 0,
|
||||
va_macro_enable_tx, SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT_E("VA_AIF2 CAP", "VA_AIF2 Capture", 0,
|
||||
SND_SOC_NOPM, VA_MACRO_AIF2_CAP, 0,
|
||||
va_macro_enable_tx, SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT_E("VA_AIF3 CAP", "VA_AIF3 Capture", 0,
|
||||
SND_SOC_NOPM, VA_MACRO_AIF3_CAP, 0,
|
||||
va_macro_enable_tx, SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF1_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF1_CAP, 0,
|
||||
va_aif1_cap_mixer, ARRAY_SIZE(va_aif1_cap_mixer)),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF2_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF2_CAP, 0,
|
||||
va_aif2_cap_mixer, ARRAY_SIZE(va_aif2_cap_mixer)),
|
||||
|
||||
SND_SOC_DAPM_MIXER("VA_AIF3_CAP Mixer", SND_SOC_NOPM,
|
||||
VA_MACRO_AIF3_CAP, 0,
|
||||
va_aif3_cap_mixer, ARRAY_SIZE(va_aif3_cap_mixer)),
|
||||
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX0", 0, va_dmic0),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX1", 0, va_dmic1),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX2", 0, va_dmic2),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX3", 0, va_dmic3),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX4", 0, va_dmic4),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX5", 0, va_dmic5),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX6", 0, va_dmic6),
|
||||
VA_MACRO_DAPM_MUX("VA DMIC MUX7", 0, va_dmic7),
|
||||
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX0", 0, va_smic0),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX1", 0, va_smic1),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX2", 0, va_smic2),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX3", 0, va_smic3),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX4", 0, va_smic4),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX5", 0, va_smic5),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX6", 0, va_smic6),
|
||||
VA_MACRO_DAPM_MUX("VA SMIC MUX7", 0, va_smic7),
|
||||
|
||||
SND_SOC_DAPM_MICBIAS_E("VA MIC BIAS1", SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_micbias,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC0", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC1", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC2", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC3", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC4", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC5", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC6", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("VA DMIC7", NULL, SND_SOC_NOPM, 0, 0,
|
||||
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
|
||||
SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_INPUT("VA SWR_ADC0"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_ADC1"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_ADC2"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_ADC3"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC0"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC1"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC2"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC3"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC4"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC5"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC6"),
|
||||
SND_SOC_DAPM_INPUT("VA SWR_MIC7"),
|
||||
|
||||
SND_SOC_DAPM_MUX_E("VA DEC0 MUX", SND_SOC_NOPM, VA_MACRO_DEC0, 0,
|
||||
&va_dec0_mux, va_macro_enable_dec,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_MUX_E("VA DEC1 MUX", SND_SOC_NOPM, VA_MACRO_DEC1, 0,
|
||||
&va_dec1_mux, va_macro_enable_dec,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_MUX_E("VA DEC2 MUX", SND_SOC_NOPM, VA_MACRO_DEC2, 0,
|
||||
&va_dec2_mux, va_macro_enable_dec,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_MUX_E("VA DEC3 MUX", SND_SOC_NOPM, VA_MACRO_DEC3, 0,
|
||||
&va_dec3_mux, va_macro_enable_dec,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
|
||||
@@ -843,6 +843,7 @@ correct_plug_type:
|
||||
plug_type == MBHC_PLUG_TYPE_HEADPHONE))
|
||||
if (mbhc->mbhc_cb->bcs_enable)
|
||||
mbhc->mbhc_cb->bcs_enable(mbhc, true);
|
||||
|
||||
if (!wrk_complete) {
|
||||
/*
|
||||
* If plug_tye is headset, we might have already reported either
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) atoll),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=wcd937x_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd937x.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd937x_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd937x_slave.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd937x_slave_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -1,69 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,kona lito atoll $(MSMSTEPPE)),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=wcd938x_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd938x.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd938x_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd938x_slave.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wcd938x_slave_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -179,7 +179,7 @@ static int wcd9xxx_slim_multi_reg_write(struct wcd9xxx *wcd9xxx,
|
||||
if (num_regs == 0)
|
||||
return -EINVAL;
|
||||
|
||||
bulk_reg = kcalloc(num_regs, sizeof(struct wcd9xxx_reg_val),
|
||||
bulk_reg = kzalloc(num_regs * (sizeof(struct wcd9xxx_reg_val)),
|
||||
GFP_KERNEL);
|
||||
if (!bulk_reg)
|
||||
return -ENOMEM;
|
||||
@@ -484,7 +484,7 @@ int wcd9xxx_slim_bulk_write(struct wcd9xxx *wcd9xxx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
msgs = kcalloc(size, sizeof(struct slim_val_inf), GFP_KERNEL);
|
||||
msgs = kzalloc(size * (sizeof(struct slim_val_inf)), GFP_KERNEL);
|
||||
if (!msgs) {
|
||||
ret = -ENOMEM;
|
||||
goto mem_fail;
|
||||
|
||||
@@ -4463,8 +4463,8 @@ static int msm_auxpcm_dev_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
auxpcm_pdata->mode_8k.slot_mapping =
|
||||
kcalloc(auxpcm_pdata->mode_8k.num_slots,
|
||||
sizeof(uint16_t),
|
||||
kzalloc(sizeof(uint16_t) *
|
||||
auxpcm_pdata->mode_8k.num_slots,
|
||||
GFP_KERNEL);
|
||||
if (!auxpcm_pdata->mode_8k.slot_mapping) {
|
||||
dev_err(&pdev->dev, "%s No mem for mode_8k slot mapping\n",
|
||||
@@ -4478,8 +4478,8 @@ static int msm_auxpcm_dev_probe(struct platform_device *pdev)
|
||||
(u16)be32_to_cpu(slot_mapping_array[i]);
|
||||
|
||||
auxpcm_pdata->mode_16k.slot_mapping =
|
||||
kcalloc(auxpcm_pdata->mode_16k.num_slots,
|
||||
sizeof(uint16_t),
|
||||
kzalloc(sizeof(uint16_t) *
|
||||
auxpcm_pdata->mode_16k.num_slots,
|
||||
GFP_KERNEL);
|
||||
|
||||
if (!auxpcm_pdata->mode_16k.slot_mapping) {
|
||||
|
||||
@@ -492,8 +492,8 @@ static int msm_dai_slim_populate_dai_data(struct device *dev,
|
||||
SET_DAI_STATE(dai_data_t->status,
|
||||
DAI_STATE_INITIALIZED);
|
||||
|
||||
dai_data_t->chan_h = devm_kcalloc(dev,
|
||||
num_ch, sizeof(u16),
|
||||
dai_data_t->chan_h = devm_kzalloc(dev,
|
||||
sizeof(u16) * num_ch,
|
||||
GFP_KERNEL);
|
||||
if (!dai_data_t->chan_h) {
|
||||
dev_err(dev,
|
||||
@@ -503,8 +503,8 @@ static int msm_dai_slim_populate_dai_data(struct device *dev,
|
||||
goto err_mem_alloc;
|
||||
}
|
||||
|
||||
dai_data_t->sh_ch = devm_kcalloc(dev,
|
||||
num_ch, sizeof(u16),
|
||||
dai_data_t->sh_ch = devm_kzalloc(dev,
|
||||
sizeof(u16) * num_ch,
|
||||
GFP_KERNEL);
|
||||
if (!dai_data_t->sh_ch) {
|
||||
dev_err(dev,
|
||||
|
||||
@@ -2576,7 +2576,7 @@ static int msm_lsm_send_ch_mix_config(struct snd_pcm_substream *substream)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ch_wght_coeff = kcalloc(in_params->num_chs * pp_ch_cnt, sizeof(int),
|
||||
ch_wght_coeff = kzalloc(in_params->num_chs * pp_ch_cnt * sizeof(int),
|
||||
GFP_KERNEL);
|
||||
if (!ch_wght_coeff)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -10904,74 +10904,6 @@ static const struct snd_kcontrol_new sec_tdm_rx_2_mixer_controls[] = {
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new quin_tdm_tx_1_mixer_controls[] = {
|
||||
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia2", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia3", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia4", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia5", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia6", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia7", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia8", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia9", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia10", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia11", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia12", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia13", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia14", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia15", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia16", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new quin_tdm_rx_1_mixer_controls[] = {
|
||||
static const struct snd_kcontrol_new sec_tdm_rx_3_mixer_controls[] = {
|
||||
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_SEC_TDM_RX_3,
|
||||
@@ -11272,74 +11204,6 @@ static const struct snd_kcontrol_new tert_tdm_tx_0_mixer_controls[] = {
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new quin_tdm_tx_3_mixer_controls[] = {
|
||||
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia2", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia3", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia4", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia5", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia6", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia7", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia8", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia9", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia10", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia11", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia12", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia13", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia14", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia15", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
SOC_DOUBLE_EXT("MultiMedia16", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
|
||||
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
|
||||
msm_routing_put_audio_mixer),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new quin_tdm_rx_3_mixer_controls[] = {
|
||||
static const struct snd_kcontrol_new tert_tdm_rx_1_mixer_controls[] = {
|
||||
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
|
||||
MSM_BACKEND_DAI_TERT_TDM_RX_1,
|
||||
@@ -28869,186 +28733,6 @@ static const struct snd_soc_dapm_route intercon_tdm[] = {
|
||||
{"AUDIO_REF_EC_UL10 MUX", "TERT_TDM_RX_2", "TERT_TDM_RX_2"},
|
||||
{"AUDIO_REF_EC_UL10 MUX", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
|
||||
|
||||
{"AUDIO_REF_EC_UL16 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL16 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL16 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL16 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
|
||||
{"AUDIO_REF_EC_UL17 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL17 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL17 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL17 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
|
||||
{"AUDIO_REF_EC_UL18 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL18 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL18 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL18 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
|
||||
{"AUDIO_REF_EC_UL19 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL19 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL19 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL19 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
|
||||
{"AUDIO_REF_EC_UL28 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL28 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL28 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL28 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
|
||||
{"AUDIO_REF_EC_UL29 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL29 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL29 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"AUDIO_REF_EC_UL29 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
|
||||
{"LSM1_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM2_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM3_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM4_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM5_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM6_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM7_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"LSM8_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
|
||||
{"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"},
|
||||
{"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"},
|
||||
{"MM_UL3", NULL, "AUDIO_REF_EC_UL3 MUX"},
|
||||
{"MM_UL4", NULL, "AUDIO_REF_EC_UL4 MUX"},
|
||||
{"MM_UL5", NULL, "AUDIO_REF_EC_UL5 MUX"},
|
||||
{"MM_UL6", NULL, "AUDIO_REF_EC_UL6 MUX"},
|
||||
{"MM_UL8", NULL, "AUDIO_REF_EC_UL8 MUX"},
|
||||
{"MM_UL9", NULL, "AUDIO_REF_EC_UL9 MUX"},
|
||||
{"MM_UL10", NULL, "AUDIO_REF_EC_UL10 MUX"},
|
||||
{"MM_UL16", NULL, "AUDIO_REF_EC_UL16 MUX"},
|
||||
{"MM_UL17", NULL, "AUDIO_REF_EC_UL17 MUX"},
|
||||
{"MM_UL18", NULL, "AUDIO_REF_EC_UL18 MUX"},
|
||||
{"MM_UL19", NULL, "AUDIO_REF_EC_UL19 MUX"},
|
||||
{"MM_UL28", NULL, "AUDIO_REF_EC_UL28 MUX"},
|
||||
{"MM_UL29", NULL, "AUDIO_REF_EC_UL29 MUX"},
|
||||
{"MM_UL30", NULL, "AUDIO_REF_EC_UL30 MUX"},
|
||||
|
||||
{"VoiceMMode1_Tx Mixer", "PRI_TX_MMode1", "PRI_I2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SEC_MI2S_TX_MMode1", "SEC_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "TERT_MI2S_TX_MMode1", "TERT_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "INT3_MI2S_TX_MMode1", "INT3_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SLIM_0_TX_MMode1", "SLIMBUS_0_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SLIM_7_TX_MMode1", "SLIMBUS_7_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SLIM_8_TX_MMode1", "SLIMBUS_8_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "USB_AUDIO_TX_MMode1", "USB_AUDIO_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "INT_BT_SCO_TX_MMode1", "INT_BT_SCO_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "AFE_PCM_TX_MMode1", "PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "AUX_PCM_TX_MMode1", "AUX_PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SEC_AUX_PCM_TX_MMode1", "SEC_AUX_PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "TERT_AUX_PCM_TX_MMode1", "TERT_AUX_PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "QUAT_AUX_PCM_TX_MMode1", "QUAT_AUX_PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "QUIN_AUX_PCM_TX_MMode1", "QUIN_AUX_PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "SEN_AUX_PCM_TX_MMode1", "SEN_AUX_PCM_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "QUAT_TDM_TX_0_MMode1", "QUAT_TDM_TX_0"},
|
||||
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_0_MMode1", "TX_CDC_DMA_TX_0"},
|
||||
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_1_MMode1", "TX_CDC_DMA_TX_1"},
|
||||
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_2_MMode1", "TX_CDC_DMA_TX_2"},
|
||||
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_3_MMode1", "TX_CDC_DMA_TX_3"},
|
||||
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_4_MMode1", "TX_CDC_DMA_TX_4"},
|
||||
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_5_MMode1", "TX_CDC_DMA_TX_5"},
|
||||
{"VoiceMMode1_Tx Mixer", "QUAT_MI2S_TX_MMode1", "QUAT_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "QUIN_MI2S_TX_MMode1", "QUIN_MI2S_TX"},
|
||||
{"VoiceMMode1_Tx Mixer", "PRI_TDM_TX_3_MMode1", "PRI_TDM_TX_3"},
|
||||
{"VOICEMMODE1_UL", NULL, "VoiceMMode1_Tx Mixer"},
|
||||
|
||||
{"VoiceMMode2_Tx Mixer", "PRI_TX_MMode2", "PRI_I2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "PRI_MI2S_TX_MMode2", "PRI_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SEC_MI2S_TX_MMode2", "SEC_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "MI2S_TX_MMode2", "MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "TERT_MI2S_TX_MMode2", "TERT_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "INT3_MI2S_TX_MMode2", "INT3_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SLIM_0_TX_MMode2", "SLIMBUS_0_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SLIM_7_TX_MMode2", "SLIMBUS_7_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SLIM_8_TX_MMode2", "SLIMBUS_8_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "USB_AUDIO_TX_MMode2", "USB_AUDIO_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "INT_BT_SCO_TX_MMode2", "INT_BT_SCO_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "AFE_PCM_TX_MMode2", "PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "AUX_PCM_TX_MMode2", "AUX_PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SEC_AUX_PCM_TX_MMode2", "SEC_AUX_PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "TERT_AUX_PCM_TX_MMode2", "TERT_AUX_PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "QUAT_AUX_PCM_TX_MMode2", "QUAT_AUX_PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "QUIN_AUX_PCM_TX_MMode2", "QUIN_AUX_PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "SEN_AUX_PCM_TX_MMode2", "SEN_AUX_PCM_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_0_MMode2", "TX_CDC_DMA_TX_0"},
|
||||
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_1_MMode2", "TX_CDC_DMA_TX_1"},
|
||||
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_2_MMode2", "TX_CDC_DMA_TX_2"},
|
||||
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_3_MMode2", "TX_CDC_DMA_TX_3"},
|
||||
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_4_MMode2", "TX_CDC_DMA_TX_4"},
|
||||
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_5_MMode2", "TX_CDC_DMA_TX_5"},
|
||||
{"VoiceMMode2_Tx Mixer", "QUAT_MI2S_TX_MMode2", "QUAT_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "QUIN_MI2S_TX_MMode2", "QUIN_MI2S_TX"},
|
||||
{"VoiceMMode2_Tx Mixer", "PRI_TDM_TX_3_MMode2", "PRI_TDM_TX_3"},
|
||||
{"VOICEMMODE2_UL", NULL, "VoiceMMode2_Tx Mixer"},
|
||||
|
||||
{"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
|
||||
{"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "SEC_MI2S_TX_Voip", "SEC_MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "INT3_MI2S_TX_Voip", "INT3_MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
|
||||
{"Voip_Tx Mixer", "SLIM_7_TX_Voip", "SLIMBUS_7_TX"},
|
||||
{"Voip_Tx Mixer", "SLIM_8_TX_Voip", "SLIMBUS_8_TX"},
|
||||
{"Voip_Tx Mixer", "USB_AUDIO_TX_Voip", "USB_AUDIO_TX"},
|
||||
{"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
|
||||
{"Voip_Tx Mixer", "AFE_PCM_TX_Voip", "PCM_TX"},
|
||||
{"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"},
|
||||
{"Voip_Tx Mixer", "SEC_AUX_PCM_TX_Voip", "SEC_AUX_PCM_TX"},
|
||||
{"Voip_Tx Mixer", "TERT_AUX_PCM_TX_Voip", "TERT_AUX_PCM_TX"},
|
||||
{"Voip_Tx Mixer", "QUAT_AUX_PCM_TX_Voip", "QUAT_AUX_PCM_TX"},
|
||||
{"Voip_Tx Mixer", "QUIN_AUX_PCM_TX_Voip", "QUIN_AUX_PCM_TX"},
|
||||
{"Voip_Tx Mixer", "SEN_AUX_PCM_TX_Voip", "SEN_AUX_PCM_TX"},
|
||||
{"Voip_Tx Mixer", "PRI_MI2S_TX_Voip", "PRI_MI2S_TX"},
|
||||
{"Voip_Tx Mixer", "PRI_TDM_TX_3_Voip", "PRI_TDM_TX_3"},
|
||||
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_0_Voip", "TX_CDC_DMA_TX_0"},
|
||||
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_1_Voip", "TX_CDC_DMA_TX_1"},
|
||||
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_2_Voip", "TX_CDC_DMA_TX_2"},
|
||||
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_3_Voip", "TX_CDC_DMA_TX_3"},
|
||||
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_4_Voip", "TX_CDC_DMA_TX_4"},
|
||||
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_5_Voip", "TX_CDC_DMA_TX_5"},
|
||||
{"VOIP_UL", NULL, "Voip_Tx Mixer"},
|
||||
|
||||
{"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"},
|
||||
{"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"},
|
||||
{"SLIMBUS1_DL_HL", "Switch", "SLIM1_DL_HL"},
|
||||
{"SLIMBUS_1_RX", NULL, "SLIMBUS1_DL_HL"},
|
||||
{"SLIMBUS3_DL_HL", "Switch", "SLIM3_DL_HL"},
|
||||
{"SLIMBUS_3_RX", NULL, "SLIMBUS3_DL_HL"},
|
||||
{"SLIMBUS4_DL_HL", "Switch", "SLIM4_DL_HL"},
|
||||
{"SLIMBUS_4_RX", NULL, "SLIMBUS4_DL_HL"},
|
||||
{"SLIMBUS6_DL_HL", "Switch", "SLIM0_DL_HL"},
|
||||
{"SLIMBUS_6_RX", NULL, "SLIMBUS6_DL_HL"},
|
||||
{"SCO_SLIM7_DL_HL", "Switch", "SLIM7_DL_HL"},
|
||||
{"SLIMBUS_7_RX", NULL, "SCO_SLIM7_DL_HL"},
|
||||
{"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
|
||||
{"SLIM1_UL_HL", NULL, "SLIMBUS_1_TX"},
|
||||
{"SLIM3_UL_HL", NULL, "SLIMBUS_3_TX"},
|
||||
{"SLIM4_UL_HL", NULL, "SLIMBUS_4_TX"},
|
||||
{"SLIM8_UL_HL", NULL, "SLIMBUS_8_TX"},
|
||||
{"WSA_CDC_DMA_RX_0_DL_HL", "Switch", "CDC_DMA_DL_HL"},
|
||||
{"WSA_CDC_DMA_RX_0", NULL, "WSA_CDC_DMA_RX_0_DL_HL"},
|
||||
{"CDC_DMA_UL_HL", NULL, "VA_CDC_DMA_TX_0"},
|
||||
{"RX_CDC_DMA_RX_0_DL_HL", "Switch", "CDC_DMA_DL_HL"},
|
||||
{"RX_CDC_DMA_RX_0", NULL, "RX_CDC_DMA_RX_0_DL_HL"},
|
||||
{"RX_CDC_DMA_RX_1", NULL, "RX_CDC_DMA_RX_0_DL_HL"},
|
||||
{"RX_CDC_DMA_RX_1_DL_HL", "Switch", "CDC_DMA_DL_HL"},
|
||||
{"RX_CDC_DMA_RX_1", NULL, "RX_CDC_DMA_RX_1_DL_HL"},
|
||||
{"TX3_CDC_DMA_UL_HL", NULL, "TX_CDC_DMA_TX_3"},
|
||||
{"LSM1 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
|
||||
{"LSM1 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
|
||||
{"LSM1 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
|
||||
{"LSM1 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
|
||||
{"LSM1 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
|
||||
{"LSM1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
|
||||
{"LSM1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
|
||||
{"LSM1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
|
||||
{"LSM1 Mixer", "VA_CDC_DMA_TX_0", "VA_CDC_DMA_TX_0"},
|
||||
{"LSM1 Mixer", "VA_CDC_DMA_TX_1", "VA_CDC_DMA_TX_1"},
|
||||
{"LSM1 Mixer", "VA_CDC_DMA_TX_2", "VA_CDC_DMA_TX_2"},
|
||||
{"LSM1 Mixer", "TX_CDC_DMA_TX_3", "TX_CDC_DMA_TX_3"},
|
||||
{"LSM1 Mixer", "QUIN_TDM_TX_0", "QUIN_TDM_TX_0"},
|
||||
{"LSM1 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
|
||||
{"LSM2 Mixer", "QUIN_TDM_TX_0", "QUIN_TDM_TX_0"},
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,msmnile),true)
|
||||
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
|
||||
else
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform, kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform, lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform, atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=q6_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_q6.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := q6_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_adsp_loader.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := adsp_loader_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_q6_notifier.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := q6_notifier_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
############################################################
|
||||
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_usf.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := usf_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
##########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_q6_pdr.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := q6_pdr_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -371,8 +371,8 @@ static int adsp_loader_probe(struct platform_device *pdev)
|
||||
goto wqueue;
|
||||
}
|
||||
|
||||
adsp_fw_bit_values = devm_kcalloc(&pdev->dev,
|
||||
adsp_fw_cnt, sizeof(u32), GFP_KERNEL);
|
||||
adsp_fw_bit_values = devm_kzalloc(&pdev->dev,
|
||||
adsp_fw_cnt * sizeof(u32), GFP_KERNEL);
|
||||
if (!adsp_fw_bit_values)
|
||||
goto wqueue;
|
||||
|
||||
@@ -387,8 +387,8 @@ static int adsp_loader_probe(struct platform_device *pdev)
|
||||
goto wqueue;
|
||||
}
|
||||
|
||||
adsp_fw_name_array = devm_kcalloc(&pdev->dev,
|
||||
adsp_fw_cnt, sizeof(char *), GFP_KERNEL);
|
||||
adsp_fw_name_array = devm_kzalloc(&pdev->dev,
|
||||
adsp_fw_cnt * sizeof(char *), GFP_KERNEL);
|
||||
if (!adsp_fw_name_array)
|
||||
goto wqueue;
|
||||
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,msmnile),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=native_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_native.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := native_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -309,7 +309,7 @@ static ssize_t audio_output_latency_dbgfs_write(struct file *file,
|
||||
pr_err("%s: err count is more %zd\n", __func__, count);
|
||||
return -EINVAL;
|
||||
}
|
||||
temp = kmalloc(2, GFP_KERNEL);
|
||||
temp = kmalloc(2*sizeof(char), GFP_KERNEL);
|
||||
|
||||
out_cold_index = 0;
|
||||
|
||||
@@ -365,7 +365,7 @@ static ssize_t audio_input_latency_dbgfs_write(struct file *file,
|
||||
pr_err("%s: err count is more %zd\n", __func__, count);
|
||||
return -EINVAL;
|
||||
}
|
||||
temp = kmalloc(2, GFP_KERNEL);
|
||||
temp = kmalloc(2*sizeof(char), GFP_KERNEL);
|
||||
|
||||
if (temp) {
|
||||
if (copy_from_user(temp, buf, 2*sizeof(char))) {
|
||||
@@ -8472,7 +8472,7 @@ static int q6asm_memory_map_regions(struct audio_client *ac, int dir,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
buffer_node = kcalloc(bufcnt, sizeof(struct asm_buffer_node),
|
||||
buffer_node = kzalloc(sizeof(struct asm_buffer_node) * bufcnt,
|
||||
GFP_KERNEL);
|
||||
if (!buffer_node)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2554,9 +2554,8 @@ int q6lsm_lab_buffer_alloc(struct lsm_client *client, bool alloc)
|
||||
out_params->buf_sz;
|
||||
allocate_size = PAGE_ALIGN(allocate_size);
|
||||
client->lab_buffer =
|
||||
kcalloc(out_params->period_count,
|
||||
sizeof(struct lsm_lab_buffer),
|
||||
GFP_KERNEL);
|
||||
kzalloc(sizeof(struct lsm_lab_buffer) *
|
||||
out_params->period_count, GFP_KERNEL);
|
||||
if (!client->lab_buffer) {
|
||||
pr_err("%s: memory allocation for lab buffer failed count %d\n"
|
||||
, __func__,
|
||||
|
||||
@@ -306,7 +306,7 @@ struct us_client *q6usm_us_client_alloc(
|
||||
if (usc == NULL)
|
||||
return NULL;
|
||||
|
||||
p_mem_handle = kcalloc(4, sizeof(uint32_t), GFP_KERNEL);
|
||||
p_mem_handle = kzalloc(sizeof(uint32_t) * 4, GFP_KERNEL);
|
||||
if (p_mem_handle == NULL) {
|
||||
kfree(usc);
|
||||
return NULL;
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
# Use this by setting
|
||||
# LOCAL_HEADER_LIBRARIES := audio_kernel_headers
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
MYLOCAL_PATH := $(LOCAL_PATH)
|
||||
|
||||
UAPI_OUT := $(PRODUCT_OUT)/obj/vendor/qcom/opensource/audio-kernel/include
|
||||
|
||||
AUDIO_KERNEL_HEADERS := $(call all-named-files-under,*.h,linux) $(call all-named-files-under,*.h,sound)
|
||||
|
||||
HEADER_INSTALL_DIR := kernel/msm-$(TARGET_KERNEL_VERSION)/scripts
|
||||
|
||||
BUILD_ROOT_RELATIVE := ../../../../../../../
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := audio_kernel_headers
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_PREBUILT_INT_KERNEL)
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
|
||||
|
||||
GEN := $(addprefix $(UAPI_OUT)/,$(AUDIO_KERNEL_HEADERS))
|
||||
$(GEN): $(KERNEL_USR)
|
||||
$(GEN): PRIVATE_PATH := $(MYLOCAL_PATH)
|
||||
$(GEN): PRIVATE_CUSTOM_TOOL = $(shell cd $(PRODUCT_OUT)/obj/KERNEL_OBJ; $(BUILD_ROOT_RELATIVE)$(HEADER_INSTALL_DIR)/headers_install.sh $(BUILD_ROOT_RELATIVE)$(dir $@) $(BUILD_ROOT_RELATIVE)$(subst $(UAPI_OUT),$(MYLOCAL_PATH),$(dir $@)) $(notdir $@))
|
||||
$(GEN): $(addprefix $(MYLOCAL_PATH)/,$(AUDIO_KERNEL_HEADERS))
|
||||
$(transform-generated-source)
|
||||
|
||||
LOCAL_GENERATED_SOURCES := $(GEN)
|
||||
LOCAL_EXPORT_C_INCLUDE_DIRS := $(UAPI_OUT)
|
||||
|
||||
include $(BUILD_HEADER_LIBRARY)
|
||||
@@ -104,7 +104,6 @@ enum {
|
||||
ADM_LSM_TOPOLOGY_CAL_TYPE,
|
||||
ADM_LSM_AUDPROC_CAL_TYPE,
|
||||
ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE,
|
||||
ADM_AUDPROC_PERSISTENT_CAL_TYPE,
|
||||
MAX_CAL_TYPES,
|
||||
};
|
||||
|
||||
@@ -118,7 +117,6 @@ enum {
|
||||
#define ADM_LSM_TOPOLOGY_CAL_TYPE ADM_LSM_TOPOLOGY_CAL_TYPE
|
||||
#define ADM_LSM_AUDPROC_CAL_TYPE ADM_LSM_AUDPROC_CAL_TYPE
|
||||
#define ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE
|
||||
#define ADM_AUDPROC_PERSISTENT_CAL_TYPE ADM_AUDPROC_PERSISTENT_CAL_TYPE
|
||||
#define LSM_CAL_TYPES
|
||||
|
||||
#define TOPOLOGY_SPECIFIC_CHANNEL_INFO
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,msmnile),true)
|
||||
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
|
||||
else
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=apr_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_apr.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := apr_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET)),true)
|
||||
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_wglink.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := wglink_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
endif
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
@@ -1,103 +0,0 @@
|
||||
# Android makefile for audio kernel modules
|
||||
|
||||
# Assume no targets will be supported
|
||||
|
||||
# Check if this driver needs be built for current target
|
||||
ifeq ($(call is-board-platform,msmnile),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,kona),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,lito),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
|
||||
endif
|
||||
|
||||
ifeq ($(call is-board-platform,atoll),true)
|
||||
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
|
||||
endif
|
||||
|
||||
AUDIO_CHIPSET := audio
|
||||
# Build/Package only in case of supported target
|
||||
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
# This makefile is only for DLKM
|
||||
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
|
||||
|
||||
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
|
||||
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
|
||||
endif # opensource
|
||||
|
||||
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
|
||||
|
||||
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
|
||||
###########################################################
|
||||
# This is set once per LOCAL_PATH, not per (kernel) module
|
||||
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
|
||||
|
||||
# We are actually building audio.ko here, as per the
|
||||
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
|
||||
# This means we need to rename the module to <chipset>_audio.ko
|
||||
# after audio.ko is built.
|
||||
KBUILD_OPTIONS += MODNAME=soc_dlkm
|
||||
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
|
||||
KBUILD_OPTIONS += $(AUDIO_SELECT)
|
||||
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_pinctrl_lpi.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := pinctrl_lpi_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) kona), true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_pinctrl_wcd.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := pinctrl_wcd_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_swr.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := swr_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_swr_ctrl.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := swr_ctrl_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
###########################################################
|
||||
ifeq ($(call is-board-platform-in-list, $(MSMSTEPPE) kona lito atoll),true)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := $(AUDIO_CHIPSET)_snd_event.ko
|
||||
LOCAL_MODULE_KBUILD_NAME := snd_event_dlkm.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_DEBUG_ENABLE := true
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
endif
|
||||
###########################################################
|
||||
|
||||
endif # DLKM check
|
||||
endif # supported target check
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user