qcacmn: Add changes for per NAPI or per Rx CE LRO manager

Make changes for per per Rx context LRO manager, this addresses
all parallel Rx concurrency issues. There by removes all the contention.

Change-Id: I90604ffdf7b7fd930eee636426a4c7fc9b92c7d7
CRs-Fixed: 1079320
Цей коміт міститься в:
Manjunathappa Prakash
2016-10-13 14:47:47 -07:00
зафіксовано qcabuildsw
джерело 4b7565cba3
коміт 2146da30dd
12 змінених файлів з 251 додано та 23 видалено

Переглянути файл

@@ -182,6 +182,10 @@ struct qca_napi_info {
uint8_t id;
int irq;
struct qca_napi_stat stats[NR_CPUS];
/* will only be present for data rx CE's */
void (*lro_flush_cb)(void *);
void *lro_ctx;
qdf_spinlock_t lro_unloading_lock;
};
/**
@@ -696,8 +700,10 @@ void hif_crash_shutdown(struct hif_opaque_softc *hif_ctx);
void hif_get_hw_info(struct hif_opaque_softc *scn, u32 *version, u32 *revision,
const char **target_name);
void hif_lro_flush_cb_register(struct hif_opaque_softc *scn,
void (handler)(void *), void *data);
void hif_lro_flush_cb_deregister(struct hif_opaque_softc *scn);
void (lro_flush_handler)(void *),
void *(lro_init_handler)(void));
void hif_lro_flush_cb_deregister(struct hif_opaque_softc *scn,
void (lro_deinit_cb)(void *));
bool hif_needs_bmi(struct hif_opaque_softc *scn);
enum qdf_bus_type hif_get_bus_type(struct hif_opaque_softc *hif_hdl);
struct hif_target_info *hif_get_target_info_handle(struct hif_opaque_softc *
@@ -734,6 +740,7 @@ int hif_bus_reset_resume(struct hif_opaque_softc *scn);
void hif_set_attribute(struct hif_opaque_softc *osc, uint8_t hif_attrib);
void *hif_get_lro_info(int ctx_id, struct hif_opaque_softc *hif_hdl);
#ifdef WLAN_SUSPEND_RESUME_TEST
typedef void (*hif_fake_resume_callback)(uint32_t val);
void hif_fake_apps_suspend(struct hif_opaque_softc *hif_ctx,

Переглянути файл

@@ -77,13 +77,21 @@ enum qca_napi_event {
NAPI_EVT_USR_NORMAL
};
/**
* Macros to map ids -returned by ...create()- to pipes and vice versa
*/
#define NAPI_ID2PIPE(i) ((i)-1)
#define NAPI_PIPE2ID(p) ((p)+1)
int hif_napi_lro_flush_cb_register(struct hif_opaque_softc *hif_hdl,
void (lro_flush_handler)(void *),
void *(lro_init_handler)(void));
void hif_napi_lro_flush_cb_deregister(struct hif_opaque_softc *hif_hdl,
void (lro_deinit_cb)(void *));
void *hif_napi_get_lro_info(struct hif_opaque_softc *hif_hdl, int napi_id);
#ifdef FEATURE_NAPI
/**