diff --git a/qal/inc/qal_vbus_dev.h b/qal/inc/qal_vbus_dev.h index 21182c82ca..dcb6e597cb 100644 --- a/qal/inc/qal_vbus_dev.h +++ b/qal/inc/qal_vbus_dev.h @@ -60,6 +60,82 @@ qal_vbus_get_iorsc(int devnum, uint32_t flag, char *devname); QDF_STATUS qal_vbus_release_iorsc(int devnum); +/** + * qal_vbus_allocate_iorsc() - allocate io resource + * @pinnum: pin Number + * @label: pin name string + * + * This function will allocate the io resource for a device + * + * Return: QDF_STATUS_SUCCESS on success + */ +QDF_STATUS +qal_vbus_allocate_iorsc(unsigned int pinnum, const char *label); + +/** + * qal_vbus_iorsc_dir_output() - set pin dirction to output + * @pin: pin Number + * @val: value + * + * This function set the gpio pin direction to output + * + * Return: 0 on success, error no on failure + */ +QDF_STATUS +qal_vbus_iorsc_dir_output(unsigned int pin, int val); + +/** + * qal_vbus_iorsc_set_value() - set pin direction + * @pin: pin Number + * @val: value + * + * This function set the gpio pin direction based on value + * + * Return: QDF_STATUS_SUCCESS on success + */ +QDF_STATUS +qal_vbus_iorsc_set_value(unsigned int pin, int val); + +/** + * qal_vbus_iorsc_toirq() - set irq number to gpio + * @pin: pin Number + * + * This function set the irq number to gpio pin + * + * Return: QDF_STATUS_SUCCESS on success + */ +QDF_STATUS +qal_vbus_iorsc_toirq(unsigned int pin); + +/** + * qal_vbus_request_irq() - set interrupt handler + * @irqnum: irq Number + * @handler: function handler to be called + * @flags: irq flags + * @dev_name: device name + * @ctx: pointer to device context + * This function set up the handling of the interrupt + * + * Return: QDF_STATUS_SUCCESS on success, Error code on failure + */ +QDF_STATUS +qal_vbus_request_irq(unsigned int irqnum, + irqreturn_t (*handler)(int irq, void *arg), + unsigned long flags, const char *dev_name, + void *ctx); + +/** + * __qal_vbus_free_irq() - free irq + * @irqnum: irq Number + * @ctx: pointer to device context + * + * This function free the irq number set to gpio pin + * + * Return: QDF_STATUS_SUCCESS on success + */ +static inline QDF_STATUS +__qal_vbus_free_irq(unsigned int irqnum, void *ctx); + /** * qal_vbus_enable_devclk() - enable device clock * @clk: Device clock @@ -220,12 +296,50 @@ qal_vbus_get_iorsc(int devnum, uint32_t flag, char *devname) return __qal_vbus_get_iorsc(devnum, flag, devname); } +static inline QDF_STATUS +qal_vbus_allocate_iorsc(unsigned int pinnum, const char *label) +{ + return __qal_vbus_allocate_iorsc(pinnum, label); +} + +static inline QDF_STATUS +qal_vbus_iorsc_dir_output(unsigned int pin, int val) +{ + return __qal_vbus_iorsc_dir_output(pin, val); +} + +static inline QDF_STATUS +qal_vbus_iorsc_set_value(unsigned int pin, int val) +{ + return __qal_vbus_iorsc_set_value(pin, val); +} + static inline QDF_STATUS qal_vbus_release_iorsc(int devnum) { return __qal_vbus_release_iorsc(devnum); } +static inline QDF_STATUS +qal_vbus_iorsc_toirq(unsigned int pin) +{ + return __qal_vbus_iorsc_toirq(pin); +} + +static inline QDF_STATUS +qal_vbus_request_irq(unsigned int irqnum, + irqreturn_t (*handler)(int irq, void *arg), + unsigned long flags, const char *dev_name, void *ctx) +{ + return __qal_vbus_request_irq(irqnum, handler, flags, dev_name, ctx); +} + +static inline QDF_STATUS +qal_vbus_free_irq(unsigned int irqnum, void *ctx) +{ + return __qal_vbus_free_irq(irqnum, ctx); +} + static inline QDF_STATUS qal_vbus_enable_devclk(struct qdf_dev_clk *clk) { @@ -310,5 +424,4 @@ qal_vbus_rcu_read_unlock(void) return __qal_vbus_rcu_read_unlock(); } #endif - #endif /* __QAL_VBUS_DEV_H */ diff --git a/qal/linux/src/i_qal_vbus_dev.h b/qal/linux/src/i_qal_vbus_dev.h index 336583faa5..162d98524d 100644 --- a/qal/linux/src/i_qal_vbus_dev.h +++ b/qal/linux/src/i_qal_vbus_dev.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. 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 @@ -76,6 +77,117 @@ __qal_vbus_release_iorsc(int devnum) return QDF_STATUS_SUCCESS; } +/** + * __qal_vbus_allocate_iorsc() - allocate io resource + * @pinnum: pin Number + * @label: name of pin + * + * This function will allocate io resource + * + * Return: QDF_STATUS_SUCCESS on success + */ +static inline QDF_STATUS +__qal_vbus_allocate_iorsc(unsigned int pinnum, const char *label) +{ + int ret; + + ret = gpio_request(pinnum, label); + + return qdf_status_from_os_return(ret); +} + +/** + * __qal_vbus_iorsc_dir_output() - set pin dirction to output + * @pin: pin Number + * @val: value + * + * This function set the gpio pin direction to output + * + * Return: 0 on success, error no on failure + */ +static inline QDF_STATUS +__qal_vbus_iorsc_dir_output(unsigned int pin, int val) +{ + int ret; + + ret = gpio_direction_output(pin, val); + + return qdf_status_from_os_return(ret); +} + +/** + * __qal_vbus_iorsc_set_value() - set pin direction + * @pin: pin Number + * @val: value + * + * This function set the gpio pin direction based on value + * + * Return: QDF_STATUS_SUCCESS on success + */ +static inline QDF_STATUS +__qal_vbus_iorsc_set_value(unsigned int pin, int val) +{ + gpio_set_value(pin, val); + return QDF_STATUS_SUCCESS; +} + +/** + * __qal_vbus_iorsc_toirq() - set irq number to gpio + * @pin: pin Number + * + * This function set the irq number to gpio pin + * + * Return: QDF_STATUS_SUCCESS on success + */ +static inline QDF_STATUS +__qal_vbus_iorsc_toirq(unsigned int pin) +{ + int ret; + + ret = gpio_to_irq(pin); + + return qdf_status_from_os_return(ret); +} + +/** + * __qal_vbus_request_irq() - set interrupt handler + * @irqnum: irq Number + * @handler: function handler to be called + * @flags: irq flags + * @dev_name: device name + * @ctx: pointer to device context + * + * This function set up the handling of the interrupt + * + * Return: QDF_STATUS_SUCCESS on success, Error code on failure + */ +static inline QDF_STATUS +__qal_vbus_request_irq(unsigned int irqnum, + irqreturn_t (*handler)(int irq, void *arg), + unsigned long flags, const char *dev_name, void *ctx) +{ + int ret; + + ret = request_irq(irqnum, handler, flags, dev_name, ctx); + return qdf_status_from_os_return(ret); +} + +/** + * __qal_vbus_free_irq() - free irq + * @irqnum: irq Number + * @ctx: pointer to device context + * + * This function free the irq number set to gpio pin + * + * Return: QDF_STATUS_SUCCESS on success + */ +static inline QDF_STATUS +__qal_vbus_free_irq(unsigned int irqnum, void *ctx) +{ + free_irq(irqnum, ctx); + return QDF_STATUS_SUCCESS; +} + /** * __qal_vbus_enable_devclk() - enable device clock * @clk: Device clock diff --git a/qdf/inc/qdf_irq.h b/qdf/inc/qdf_irq.h index 77d5e36e70..84ad816bf3 100644 --- a/qdf/inc/qdf_irq.h +++ b/qdf/inc/qdf_irq.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. 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 @@ -49,4 +50,9 @@ #define QDF_IRQ_IS_POLLED __QDF_IRQ_IS_POLLED #define QDF_IRQ_DISABLE_UNLAZY __QDF_IRQ_DISABLE_UNLAZY +#define QDF_IRQF_SHARED __QDF_IRQF_SHARED +#define QDF_IRQF_TRIGGER_RISING __QDF_IRQF_TRIGGER_RISING +#define QDF_IRQ_NONE __QDF_IRQ_NONE +#define QDF_IRQ_HANDLED __QDF_IRQ_HANDLED + #endif /* __QDF_IRQ_H */ diff --git a/qdf/inc/qdf_time.h b/qdf/inc/qdf_time.h index a291c78c21..ebbc2c7637 100644 --- a/qdf/inc/qdf_time.h +++ b/qdf/inc/qdf_time.h @@ -102,7 +102,31 @@ int64_t qdf_ktime_to_us(qdf_ktime_t ktime); int64_t qdf_ktime_to_ns(qdf_ktime_t ktime); /** - * qdf_system_ticks() - Count the number of ticks elapsed from the time when + * qdf_time_ktime_set() - Set a ktime_t variable from a seconds/nanoseconds + * value + * @secs: seconds to set + * @nsecs: nanoseconds to set + * + * Return: The qdf_ktime_t representation of the value. + */ +qdf_ktime_t qdf_time_ktime_set(const s64 secs, const unsigned long nsecs); + +/** + * qdf_ktime_get_real_ns() - Gets the current time in ns using UTC + * + * Return: qdf_ktime_t in nano sec + */ +qdf_ktime_t qdf_ktime_get_real_ns(void); + +/** + * qdf_ktime_get_ns() - Gets the current time nano seconds + * + * Return: qdf_ktime_t in nano sec + */ +qdf_ktime_t qdf_ktime_get_ns(void); + +/** + * qdf_system_ticks - Count the number of ticks elapsed from the time when * the system booted * * Return: ticks @@ -283,50 +307,80 @@ void qdf_time_ktime_get_real_time(qdf_timespec_t *ts); * Return: current time in nanosec units. */ unsigned long long qdf_time_sched_clock(void); -#else +/** + * qdf_usleep_range - introduce sleep with min and max time + * @min: Minimum time in usecs to sleep + * @max: Maximum time in usecs to sleep + * + * Return: none + */ +void qdf_usleep_range(unsigned long min, unsigned long max); + +/** + * qdf_ktime_compare - compare two qdf_ktime_t objects + * @ktime1: time as qdf_ktime_t object + * @ktime2: time as qdf_ktime_t object + * + * Return: + * * ktime1 < ktime2 - return <0 + * * ktime1 == ktime2 - return 0 + * * ktime1 > ktime2 - return >0 + */ +int qdf_ktime_compare(qdf_ktime_t ktime1, qdf_ktime_t ktime2); + +#else static inline qdf_ktime_t qdf_ns_to_ktime(uint64_t ns) { return __qdf_ns_to_ktime(ns); } - static inline qdf_ktime_t qdf_ktime_add(qdf_ktime_t ktime1, qdf_ktime_t ktime2) { return __qdf_ktime_add(ktime1, ktime2); } - static inline qdf_ktime_t qdf_ktime_get(void) { return __qdf_ktime_get(); } - static inline qdf_ktime_t qdf_ktime_real_get(void) { return __qdf_ktime_real_get(); } +static inline qdf_ktime_t qdf_ktime_get_real_ns(void) +{ + return __qdf_ktime_get_real_ns(); +} + +static inline uint64_t qdf_ktime_get_ns(void) +{ + return __qdf_ktime_get_ns(); +} + +static inline qdf_ktime_t qdf_ktime_compare(qdf_ktime_t ktime1, + qdf_ktime_t ktime2) +{ + return __qdf_ktime_compare(ktime1, ktime2); +} static inline qdf_ktime_t qdf_ktime_add_ns(qdf_ktime_t ktime, int64_t ns) { return __qdf_ktime_add_ns(ktime, ns); } - static inline int64_t qdf_ktime_to_ms(qdf_ktime_t ktime) { return __qdf_ktime_to_ms(ktime); } - static inline int64_t qdf_ktime_to_us(qdf_ktime_t ktime) { return __qdf_time_ktime_to_us(ktime); } - static inline int64_t qdf_ktime_to_ns(qdf_ktime_t ktime) { return __qdf_ktime_to_ns(ktime); @@ -338,7 +392,6 @@ static inline qdf_time_t qdf_system_ticks(void) } #define qdf_system_ticks_per_sec __qdf_system_ticks_per_sec - static inline uint32_t qdf_system_ticks_to_msecs(unsigned long clock_ticks) { return __qdf_system_ticks_to_msecs(clock_ticks); @@ -354,7 +407,6 @@ static inline qdf_time_t qdf_get_system_uptime(void) return __qdf_get_system_uptime(); } - static inline uint64_t qdf_get_bootbased_boottime_ns(void) { return __qdf_get_bootbased_boottime_ns(); @@ -510,6 +562,10 @@ static inline unsigned long long qdf_time_sched_clock(void) { return __qdf_time_sched_clock(); } -#endif +static inline void qdf_usleep_range(unsigned long min, unsigned long max) +{ + __qdf_usleep_range(min, max); +} +#endif #endif diff --git a/qdf/inc/qdf_types.h b/qdf/inc/qdf_types.h index b834ce3f68..3b92643f39 100644 --- a/qdf/inc/qdf_types.h +++ b/qdf/inc/qdf_types.h @@ -57,6 +57,9 @@ typedef struct qdf_sglist { #define QDF_MAX_SCATTER __QDF_MAX_SCATTER #define QDF_NSEC_PER_MSEC __QDF_NSEC_PER_MSEC +#define QDF_NSEC_PER_USEC __QDF_NSEC_PER_USEC +#define QDF_USEC_PER_MSEC __QDF_USEC_PER_MSEC +#define QDF_NSEC_PER_SEC __QDF_NSEC_PER_SEC /** * QDF_SWAP_U16 - swap input u16 value diff --git a/qdf/linux/src/i_qdf_irq.h b/qdf/linux/src/i_qdf_irq.h index 7591d924c2..8755ce909f 100644 --- a/qdf/linux/src/i_qdf_irq.h +++ b/qdf/linux/src/i_qdf_irq.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. 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 @@ -25,6 +26,7 @@ #define _I_QDF_IRQ_H #include +#include #define __QDF_IRQ_TYPE_NONE IRQ_TYPE_NONE #define __QDF_IRQ_TYPE_EDGE_RISING IRQ_TYPE_EDGE_RISING @@ -48,5 +50,9 @@ #define __QDF_IRQ_PER_CPU_DEVID IRQ_PER_CPU_DEVID #define __QDF_IRQ_IS_POLLED IRQ_IS_POLLED #define __QDF_IRQ_DISABLE_UNLAZY IRQ_DISABLE_UNLAZY +#define __QDF_IRQF_SHARED IRQF_SHARED +#define __QDF_IRQF_TRIGGER_RISING IRQF_TRIGGER_RISING +#define __QDF_IRQ_NONE IRQ_NONE +#define __QDF_IRQ_HANDLED IRQ_HANDLED #endif /* _I_QDF_IRQ_H */ diff --git a/qdf/linux/src/i_qdf_time.h b/qdf/linux/src/i_qdf_time.h index d9db5e2fa1..17d25f9ac2 100644 --- a/qdf/linux/src/i_qdf_time.h +++ b/qdf/linux/src/i_qdf_time.h @@ -103,6 +103,41 @@ static inline ktime_t __qdf_ktime_real_get(void) return ktime_get_real(); } +/** + * __qdf_ktime_get_ns() - Gets the current time nano seconds + * + * Return: ktime in nano sec + */ +static inline ktime_t __qdf_ktime_get_ns(void) +{ + return ktime_get_ns(); +} + +/** + * __qdf_ktime_get_real_ns() - Gets the current time in ns using UTC + * + * Return: ktime in nano sec + */ +static inline ktime_t __qdf_ktime_get_real_ns(void) +{ + return ktime_get_real_ns(); +} + +/** + * __qdf_ktime_compare - compare two qdf_ktime_t objects + * @ktime1: time as qdf_ktime_t object + * @ktime2: time as qdf_ktime_t object + * + * Return: + * * ktime1 < ktime2 - return <0 + * * ktime1 == ktime2 - return 0 + * * ktime1 > ktime2 - return >0 + */ +static inline int __qdf_ktime_compare(ktime_t ktime1, ktime_t ktime2) +{ + return ktime_compare(ktime1, ktime2); +} + /** * __qdf_ktime_add_ns() - Adds ktime object and nanoseconds value and * returns the ktime object @@ -138,7 +173,6 @@ static inline int64_t __qdf_ktime_to_ms(ktime_t ktime) return ktime_to_ms(ktime); } - /** * __qdf_system_ticks() - get system ticks * @@ -150,7 +184,6 @@ static inline __qdf_time_t __qdf_system_ticks(void) } #define __qdf_system_ticks_per_sec HZ - /** * __qdf_system_ticks_to_msecs() - convert system ticks into milli seconds * @ticks: System ticks @@ -304,7 +337,6 @@ static inline uint64_t __qdf_get_monotonic_boottime(void) } #if defined (MSM_PLATFORM) - /** * __qdf_get_log_timestamp() - get msm timer ticks * @@ -474,4 +506,8 @@ static inline void __qdf_time_ktime_get_real_time(__qdf_timespec_t *ts) } #endif +static inline void __qdf_usleep_range(unsigned long min, unsigned long max) +{ + usleep_range(min, max); +} #endif diff --git a/qdf/linux/src/i_qdf_types.h b/qdf/linux/src/i_qdf_types.h index 7acc74ad3e..6b958c01a2 100644 --- a/qdf/linux/src/i_qdf_types.h +++ b/qdf/linux/src/i_qdf_types.h @@ -142,6 +142,9 @@ typedef unsigned long __sgtable_t; */ #define __QDF_MAX_SCATTER 1 #define __QDF_NSEC_PER_MSEC NSEC_PER_MSEC +#define __QDF_NSEC_PER_USEC NSEC_PER_USEC +#define __QDF_USEC_PER_MSEC USEC_PER_MSEC +#define __QDF_NSEC_PER_SEC NSEC_PER_SEC #if defined(__LITTLE_ENDIAN_BITFIELD) #define QDF_LITTLE_ENDIAN_MACHINE diff --git a/qdf/linux/src/qdf_time.c b/qdf/linux/src/qdf_time.c index a1bda24e80..77fa7f9a3c 100644 --- a/qdf/linux/src/qdf_time.c +++ b/qdf/linux/src/qdf_time.c @@ -82,6 +82,13 @@ int64_t qdf_ktime_to_ns(qdf_ktime_t ktime) qdf_export_symbol(qdf_ktime_to_ns); +qdf_ktime_t qdf_time_ktime_set(const s64 secs, const unsigned long nsecs) +{ + return __qdf_time_ktime_set(secs, nsecs); +} + +qdf_export_symbol(qdf_time_ktime_set); + qdf_time_t qdf_system_ticks(void) { return __qdf_system_ticks(); @@ -249,3 +256,31 @@ unsigned long long qdf_time_sched_clock(void) } qdf_export_symbol(qdf_time_sched_clock); + +void qdf_usleep_range(unsigned long min, unsigned long max) +{ + __qdf_usleep_range(min, max); +} + +qdf_export_symbol(qdf_usleep_range); + +qdf_ktime_t qdf_ktime_get_ns(void) +{ + return __qdf_ktime_get_ns(); +} + +qdf_export_symbol(qdf_ktime_get_ns); + +qdf_ktime_t qdf_ktime_get_real_ns(void) +{ + return __qdf_ktime_get_real_ns(); +} + +qdf_export_symbol(qdf_ktime_get_real_ns); + +int qdf_ktime_compare(qdf_ktime_t ktime1, qdf_ktime_t ktime2) +{ + return __qdf_ktime_compare(ktime1, ktime2); +} + +qdf_export_symbol(qdf_ktime_compare);