msm: sdio: Keep certain messages in a local buffer
While logging to the kernel log, keep the last 20 or so messages in
a local buffer. This can be accessed by debugfs or through a crash
dump. This is useful when there is heavy logging to the kernel log
and sdio messages are lost.
Signed-off-by: Krishna Konda <kkonda@codeaurora.org>
diff --git a/arch/arm/mach-msm/sdio_al.c b/arch/arm/mach-msm/sdio_al.c
index caf0b62..2213f9f 100644
--- a/arch/arm/mach-msm/sdio_al.c
+++ b/arch/arm/mach-msm/sdio_al.c
@@ -38,6 +38,8 @@
#include <linux/debugfs.h>
#include <linux/uaccess.h>
#include <linux/syscalls.h>
+#include <linux/time.h>
+#include <linux/spinlock.h>
#include <mach/dma.h>
#include <mach/gpio.h>
@@ -151,9 +153,31 @@
#define SDIO_TEST_POSTFIX "_TEST"
-#define DATA_DEBUG(x...) if (sdio_al->debug.debug_data_on) pr_info(x)
-#define LPM_DEBUG(x...) if (sdio_al->debug.debug_lpm_on) pr_info(x)
+#define DATA_DEBUG(x, y...) \
+ do { \
+ if (sdio_al->debug.debug_data_on) \
+ pr_info(y); \
+ sdio_al_log(x, y); \
+ } while (0)
+#define LPM_DEBUG(x, y...) \
+ do { \
+ if (sdio_al->debug.debug_lpm_on) \
+ pr_info(y); \
+ sdio_al_log(x, y); \
+ } while (0)
+
+#define sdio_al_loge(x, y...) \
+ do { \
+ pr_err(y); \
+ sdio_al_log(x, y); \
+ } while (0)
+
+#define sdio_al_logi(x, y...) \
+ do { \
+ pr_info(y); \
+ sdio_al_log(x, y); \
+ } while (0)
/* The index of the SDIO card used for the sdio_al_dloader */
#define SDIO_BOOTLOADER_CARD_INDEX 1
@@ -167,13 +191,13 @@
};
struct sdio_al_debug {
-
u8 debug_lpm_on;
u8 debug_data_on;
struct dentry *sdio_al_debug_root;
struct dentry *sdio_al_debug_lpm_on;
struct dentry *sdio_al_debug_data_on;
struct dentry *sdio_al_debug_info;
+ struct dentry *sdio_al_debug_log_buffers[MAX_NUM_OF_SDIO_DEVICES + 1];
};
/* Polling time for the inactivity timer for devices that doesn't have
@@ -284,6 +308,16 @@
struct peer_sdioc_channel_config ch_config[SDIO_AL_MAX_CHANNELS];
};
+#define SDIO_AL_DEBUG_LOG_SIZE 3000
+struct sdio_al_local_log {
+ char buffer[SDIO_AL_DEBUG_LOG_SIZE];
+ unsigned int buf_cur_pos;
+ spinlock_t log_lock;
+};
+
+#define SDIO_AL_DEBUG_TMP_LOG_SIZE 250
+static int sdio_al_log(struct sdio_al_local_log *, const char *fmt, ...);
+
/**
* SDIO Abstraction Layer driver context.
*
@@ -299,6 +333,8 @@
*
*/
struct sdio_al {
+ struct sdio_al_local_log gen_log;
+ struct sdio_al_local_log device_log[MAX_NUM_OF_SDIO_DEVICES];
struct sdio_al_platform_data *pdata;
struct sdio_al_debug debug;
struct sdio_al_device *devices[MAX_NUM_OF_SDIO_DEVICES];
@@ -358,6 +394,7 @@
*
*/
struct sdio_al_device {
+ struct sdio_al_local_log *dev_log;
struct mmc_card *card;
struct sdio_mailbox *mailbox;
struct sdio_channel channel[SDIO_AL_MAX_CHANNELS];
@@ -487,6 +524,8 @@
.write = debug_info_write,
};
+struct debugfs_blob_wrapper sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES + 1];
+
/*
*
* Trigger on/off for debug messages
@@ -501,6 +540,8 @@
*/
static int sdio_al_debugfs_init(void)
{
+ int i, blob_errs = 0;
+
sdio_al->debug.sdio_al_debug_root = debugfs_create_dir("sdio_al", NULL);
if (!sdio_al->debug.sdio_al_debug_root)
return -ENOENT;
@@ -523,39 +564,125 @@
NULL,
&debug_info_ops);
+ for (i = 0; i < MAX_NUM_OF_SDIO_DEVICES; ++i) {
+ char temp[18];
+
+ scnprintf(temp, 18, "sdio_al_log_dev_%d", i + 1);
+ sdio_al->debug.sdio_al_debug_log_buffers[i] =
+ debugfs_create_blob(temp,
+ S_IRUGO | S_IWUGO,
+ sdio_al->debug.sdio_al_debug_root,
+ &sdio_al_dbgfs_log[i]);
+ }
+
+ sdio_al->debug.sdio_al_debug_log_buffers[MAX_NUM_OF_SDIO_DEVICES] =
+ debugfs_create_blob("sdio_al_gen_log",
+ S_IRUGO | S_IWUGO,
+ sdio_al->debug.sdio_al_debug_root,
+ &sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES]);
+
+ for (i = 0; i < (MAX_NUM_OF_SDIO_DEVICES + 1); ++i) {
+ if (!sdio_al->debug.sdio_al_debug_log_buffers[i]) {
+ pr_err(MODULE_NAME ": Failed to create debugfs buffer"
+ " entry for "
+ "sdio_al->debug.sdio_al_debug_log_buffers[%d]",
+ i);
+ blob_errs = 1;
+ }
+ }
+
+ if (blob_errs) {
+ for (i = 0; i < (MAX_NUM_OF_SDIO_DEVICES + 1); ++i)
+ if (sdio_al->debug.sdio_al_debug_log_buffers[i])
+ debugfs_remove(
+ sdio_al->
+ debug.sdio_al_debug_log_buffers[i]);
+ }
+
+
if ((!sdio_al->debug.sdio_al_debug_data_on) &&
(!sdio_al->debug.sdio_al_debug_lpm_on) &&
- (!sdio_al->debug.sdio_al_debug_info)
- ) {
+ (!sdio_al->debug.sdio_al_debug_info) &&
+ blob_errs) {
debugfs_remove(sdio_al->debug.sdio_al_debug_root);
sdio_al->debug.sdio_al_debug_root = NULL;
return -ENOENT;
}
+
+ sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES].data =
+ sdio_al->gen_log.buffer;
+ sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES].size =
+ SDIO_AL_DEBUG_LOG_SIZE;
+
return 0;
}
static void sdio_al_debugfs_cleanup(void)
{
- debugfs_remove(sdio_al->debug.sdio_al_debug_lpm_on);
- debugfs_remove(sdio_al->debug.sdio_al_debug_data_on);
+ int i;
+
+ debugfs_remove(sdio_al->debug.sdio_al_debug_lpm_on);
+ debugfs_remove(sdio_al->debug.sdio_al_debug_data_on);
debugfs_remove(sdio_al->debug.sdio_al_debug_info);
- debugfs_remove(sdio_al->debug.sdio_al_debug_root);
+
+ for (i = 0; i < (MAX_NUM_OF_SDIO_DEVICES + 1); ++i)
+ debugfs_remove(sdio_al->debug.sdio_al_debug_log_buffers[i]);
+
+ debugfs_remove(sdio_al->debug.sdio_al_debug_root);
}
#endif
+static int sdio_al_log(struct sdio_al_local_log *log, const char *fmt, ...)
+{
+ va_list args;
+ int r;
+ char *tp, *log_buf;
+ unsigned int *log_cur_pos;
+ struct timeval kt;
+ unsigned long flags;
+ static char sdio_al_log_tmp[SDIO_AL_DEBUG_TMP_LOG_SIZE];
+
+ spin_lock_irqsave(&log->log_lock, flags);
+
+ kt = ktime_to_timeval(ktime_get());
+ r = scnprintf(sdio_al_log_tmp, SDIO_AL_DEBUG_TMP_LOG_SIZE,
+ "[%8ld.%6ld] ", kt.tv_sec, kt.tv_usec);
+
+ va_start(args, fmt);
+ r += vscnprintf(&sdio_al_log_tmp[r], (SDIO_AL_DEBUG_TMP_LOG_SIZE - r),
+ fmt, args);
+ va_end(args);
+
+ log_buf = log->buffer;
+ log_cur_pos = &(log->buf_cur_pos);
+
+ for (tp = sdio_al_log_tmp; tp < (sdio_al_log_tmp + r); tp++) {
+ log_buf[(*log_cur_pos)++] = *tp;
+ if ((*log_cur_pos) == SDIO_AL_DEBUG_LOG_SIZE)
+ *log_cur_pos = 0;
+ }
+
+ spin_unlock_irqrestore(&log->log_lock, flags);
+
+ return r;
+}
+
static int sdio_al_verify_func1(struct sdio_al_device *sdio_al_dev,
char const *func)
{
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": %s: NULL sdio_al_dev\n", func);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+ "sdio_al_dev\n", func);
return -ENODEV;
}
if (!sdio_al_dev->card) {
- pr_err(MODULE_NAME ": %s: NULL card\n", func);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": %s: NULL "
+ "card\n", func);
return -ENODEV;
}
if (!sdio_al_dev->card->sdio_func[0]) {
- pr_err(MODULE_NAME ": %s: NULL func1\n", func);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": %s: NULL "
+ "func1\n", func);
return -ENODEV;
}
return 0;
@@ -573,8 +700,8 @@
if ((sdio_al_dev->state == MODEM_RESTART) ||
(sdio_al_dev->state == CARD_REMOVED)) {
- pr_err(MODULE_NAME ": %s: device state %d\n", func,
- sdio_al_dev->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": %s: device "
+ "state %d\n", func, sdio_al_dev->state);
return -ENODEV;
}
return 0;
@@ -598,8 +725,8 @@
(struct sdio_al_device *) device_handle;
if (!sdio_al_dev) {
- pr_err(MODULE_NAME ": %s - device_handle is NULL\n",
- __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - "
+ "device_handle is NULL\n", __func__);
return;
}
@@ -608,8 +735,10 @@
lpm_callback((void *)sdio_al_dev,
sdio_al_dev->is_ok_to_sleep);
}
- LPM_DEBUG(MODULE_NAME ": %s - device %d registered for wakeup "
- "callback\n", __func__, sdio_al_dev->card->host->index);
+
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": %s - device %d "
+ "registered for wakeup callback\n", __func__,
+ sdio_al_dev->card->host->index);
}
void sdio_al_unregister_lpm_cb(void *device_handle)
@@ -618,14 +747,15 @@
(struct sdio_al_device *) device_handle;
if (!sdio_al_dev) {
- pr_err(MODULE_NAME ": %s - device_handle is NULL\n",
- __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - "
+ "device_handle is NULL\n", __func__);
return;
}
sdio_al_dev->lpm_callback = NULL;
- LPM_DEBUG(MODULE_NAME ": %s - device %d unregister for wakeup "
- "callback\n", __func__, sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": %s - device %d "
+ "unregister for wakeup callback\n", __func__,
+ sdio_al_dev->card->host->index);
}
static void sdio_al_vote_for_sleep(struct sdio_al_device *sdio_al_dev,
@@ -634,7 +764,8 @@
pr_debug(MODULE_NAME ": %s()", __func__);
if (!sdio_al_dev) {
- pr_err(MODULE_NAME ": %s - sdio_al_dev is NULL\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - sdio_al_dev"
+ " is NULL\n", __func__);
return;
}
@@ -648,11 +779,11 @@
}
if (sdio_al_dev->lpm_callback != NULL) {
- LPM_DEBUG(MODULE_NAME ": %s - is_vote_for_sleep=%d for "
- "card#%d, calling callback...",
- __func__,
- is_vote_for_sleep,
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": %s - "
+ "is_vote_for_sleep=%d for card#%d, "
+ "calling callback...", __func__,
+ is_vote_for_sleep,
+ sdio_al_dev->card->host->index);
sdio_al_dev->lpm_callback((void *)sdio_al_dev,
is_vote_for_sleep);
}
@@ -673,8 +804,9 @@
int ret;
if (sdio_al_dev->lpm_chan == INVALID_SDIO_CHAN) {
- pr_err(MODULE_NAME ":Invalid lpm_chan for card %d\n",
- sdio_al_dev->card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Invalid "
+ "lpm_chan for card %d\n",
+ sdio_al_dev->card->host->index);
return -EINVAL;
}
@@ -685,8 +817,9 @@
ret = sdio_memcpy_toio(lpm_func, SDIOC_SW_MAILBOX_ADDR+offset,
&sdio_al_dev->is_ok_to_sleep, sizeof(u32));
if (ret) {
- pr_err(MODULE_NAME ":failed to write lpm info for card %d\n",
- sdio_al_dev->card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":failed to "
+ "write lpm info for card %d\n",
+ sdio_al_dev->card->host->index);
return ret;
}
@@ -742,7 +875,8 @@
masked_user_irq = (user_irq >> offset) && 0xFF;
if (masked_user_irq == 0x1) {
- pr_info(MODULE_NAME ":user_irq enabled\n");
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":user_irq "
+ "enabled\n");
return 1;
}
@@ -784,8 +918,8 @@
write_lpm_info(sdio_al_dev);
msmsdcc_lpm_enable(host);
- LPM_DEBUG(MODULE_NAME ":Finished sleep sequence for card %d. "
- "Sleep now.\n",
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":Finished sleep sequence"
+ " for card %d. Sleep now.\n",
sdio_al_dev->card->host->index);
/* Release wakelock */
sdio_al_vote_for_sleep(sdio_al_dev, 1);
@@ -844,9 +978,9 @@
HW_MAILBOX_ADDR, sizeof(*mailbox));
pr_debug(MODULE_NAME ":after sdio_memcpy_fromio.\n");
if (ret) {
- pr_err(MODULE_NAME ":Fail to read Mailbox for card %d,"
- " goto error state\n",
- sdio_al_dev->card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to read "
+ "Mailbox for card %d, goto error state\n",
+ sdio_al_dev->card->host->index);
sdio_al_get_into_err_state(sdio_al_dev);
/* Stop the timer to stop reading the mailbox */
sdio_al_dev->poll_delay_msec = 0;
@@ -867,15 +1001,15 @@
(mailbox->mask_thresh_above_limit_pipe_8_15<<8);
if (overflow_pipe || underflow_pipe)
- pr_err(MODULE_NAME ":Mailbox ERROR "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Mailbox ERROR "
"overflow=0x%x, underflow=0x%x\n",
overflow_pipe, underflow_pipe);
/* In case of modem reset we would like to read the daya from the modem
to clear the interrupts but do not process it */
if (sdio_al_dev->state != CARD_INSERTED) {
- pr_err(MODULE_NAME ":sdio_al_device (card %d) is in invalid "
- "state %d\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_al_device"
+ " (card %d) is in invalid state %d\n",
sdio_al_dev->card->host->index,
sdio_al_dev->state);
return -ENODEV;
@@ -900,8 +1034,8 @@
if ((ch->state == SDIO_CHANNEL_STATE_CLOSED) &&
(read_avail > 0)) {
- pr_err(MODULE_NAME ":%s: Invalid read_avail 0x%x, "
- "for CLOSED ch %s\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":%s: Invalid read_avail 0x%x, for CLOSED ch %s\n",
__func__, read_avail, ch->name);
sdio_read_from_closed_ch(ch, read_avail);
}
@@ -910,7 +1044,7 @@
continue;
if (read_avail > INVALID_DATA_AVAILABLE) {
- pr_err(MODULE_NAME
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
":Invalid read_avail 0x%x for pipe %d\n",
read_avail, ch->rx_pipe_index);
continue;
@@ -923,17 +1057,19 @@
if (ch->is_packet_mode) {
if ((eot_pipe & (1<<ch->rx_pipe_index)) &&
sdio_al_dev->print_after_interrupt) {
- LPM_DEBUG(MODULE_NAME ":Interrupt on ch %s, "
- "card %d", ch->name,
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME
+ ":Interrupt on ch %s, "
+ "card %d", ch->name,
+ sdio_al_dev->card->host->index);
}
new_packet_size = check_pending_rx_packet(ch, eot_pipe);
} else {
if ((thresh_pipe & (1<<ch->rx_pipe_index)) &&
sdio_al_dev->print_after_interrupt) {
- LPM_DEBUG(MODULE_NAME ":Interrupt on ch %s, "
- "card %d", ch->name,
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME
+ ":Interrupt on ch %s, "
+ "card %d", ch->name,
+ sdio_al_dev->card->host->index);
}
ch->read_avail = read_avail;
/* Restore default thresh for non packet channels */
@@ -970,7 +1106,7 @@
new_write_avail = mailbox->pipe_bytes_avail[ch->tx_pipe_index];
if (new_write_avail > INVALID_DATA_AVAILABLE) {
- pr_err(MODULE_NAME
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
":Invalid write_avail 0x%x for pipe %d\n",
new_write_avail, ch->tx_pipe_index);
continue;
@@ -1011,18 +1147,18 @@
if ((rx_notify_bitmask == 0) && (tx_notify_bitmask == 0) &&
!any_read_avail && !any_write_pending) {
- DATA_DEBUG(MODULE_NAME ":Nothing to Notify for card %d,"
- " is_closing=%d\n",
+ DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":Nothing to "
+ "Notify for card %d, is_closing=%d\n",
sdio_al_dev->card->host->index, is_closing);
if (is_closing)
restart_inactive_time(sdio_al_dev);
else if (is_inactive_time_expired(sdio_al_dev))
sdio_al_sleep(sdio_al_dev, host);
} else {
- DATA_DEBUG(MODULE_NAME ":Notify bitmask for card %d "
- "rx=0x%x, tx=0x%x.\n",
- sdio_al_dev->card->host->index, rx_notify_bitmask,
- tx_notify_bitmask);
+ DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":Notify bitmask"
+ " for card %d rx=0x%x, tx=0x%x.\n",
+ sdio_al_dev->card->host->index,
+ rx_notify_bitmask, tx_notify_bitmask);
/* Restart inactivity timer if any activity on the channel */
restart_inactive_time(sdio_al_dev);
}
@@ -1045,8 +1181,8 @@
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": NULL sdio_al_dev for channel %s\n",
- ch->name);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL sdio_al_dev"
+ " for channel %s\n", ch->name);
return -EINVAL;
}
@@ -1067,17 +1203,20 @@
new_packet_size = rx_avail - rx_pending;
if ((rx_avail <= rx_pending)) {
- pr_err(MODULE_NAME ":Invalid new packet size."
- " rx_avail=%d.\n", rx_avail);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": Invalid new packet size."
+ " rx_avail=%d.\n", rx_avail);
new_packet_size = 0;
goto exit_err;
}
p = kzalloc(sizeof(*p), GFP_KERNEL);
if (p == NULL) {
- pr_err(MODULE_NAME ":failed to allocate item for "
- "rx_pending list. rx_avail=%d, rx_pending=%d.\n",
- rx_avail, rx_pending);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": failed to allocate item for "
+ "rx_pending list. rx_avail=%d, "
+ "rx_pending=%d.\n",
+ rx_avail, rx_pending);
new_packet_size = 0;
goto exit_err;
}
@@ -1115,8 +1254,9 @@
list_del(&p->list);
kfree(p);
} else {
- pr_err(MODULE_NAME ":%s: ch %s: unexpected empty list!!\n",
- __func__, ch->name);
+ sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: ch "
+ "%s: unexpected empty list!!\n",
+ __func__, ch->name);
}
if (list_empty(&ch->rx_size_list_head)) {
@@ -1150,20 +1290,23 @@
work);
if (sdio_al_work == NULL) {
- pr_err(MODULE_NAME ": %s: NULL sdio_al_work\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+ "sdio_al_work\n", __func__);
return;
}
sdio_al_dev = sdio_al_work->sdio_al_dev;
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": %s: NULL sdio_al_dev\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+ "sdio_al_dev\n", __func__);
return;
}
- pr_info(MODULE_NAME ":Bootloader Worker Started, "
- "wait for bootloader_done event..\n");
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":Bootloader Worker Started"
+ ", wait for bootloader_done event..\n");
wait_event(sdio_al_dev->wait_mbox,
sdio_al_dev->bootloader_done);
- pr_info(MODULE_NAME ":Got bootloader_done event..\n");
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":Got bootloader_done "
+ "event..\n");
/* Do polling until MDM is up */
for (i = 0; i < 5000; ++i) {
if (sdio_al_verify_dev(sdio_al_dev, __func__))
@@ -1174,11 +1317,10 @@
sdio_al_dev->bootloader_done = 0;
ret = sdio_al_client_setup(sdio_al_dev);
if (ret) {
- pr_err(MODULE_NAME ":"
- "sdio_al_client_setup failed, "
- "for card %d ret=%d\n",
- sdio_al_dev->card->host->index,
- ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": sdio_al_client_setup failed, "
+ "for card %d ret=%d\n",
+ sdio_al_dev->card->host->index, ret);
sdio_al_get_into_err_state(sdio_al_dev);
}
goto done;
@@ -1186,8 +1328,9 @@
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
msleep(100);
}
- pr_err(MODULE_NAME ":Timeout waiting for user_irq for card %d\n",
- sdio_al_dev->card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Timeout waiting for "
+ "user_irq for card %d\n",
+ sdio_al_dev->card->host->index);
sdio_al_get_into_err_state(sdio_al_dev);
done:
@@ -1210,13 +1353,15 @@
struct sdio_al_work,
work);
if (sdio_al_work == NULL) {
- pr_err(MODULE_NAME ": worker: NULL sdio_al_work\n");
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": worker: NULL "
+ "sdio_al_work\n");
return;
}
sdio_al_dev = sdio_al_work->sdio_al_dev;
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": worker: NULL sdio_al_dev\n");
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": worker: NULL "
+ "sdio_al_dev\n");
return;
}
pr_debug(MODULE_NAME ":Worker Started..\n");
@@ -1311,15 +1456,21 @@
/* host driver already reported errors */
} else {
if (cmd.resp[0] & R5_ERROR) {
- pr_err(MODULE_NAME ":%s: R5_ERROR", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+ ":%s: R5_ERROR for card %d",
+ __func__, card->host->index);
return -EIO;
}
if (cmd.resp[0] & R5_FUNCTION_NUMBER) {
- pr_err(MODULE_NAME ":%s: R5_FUNCTION_NUMBER", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+ ":%s: R5_FUNCTION_NUMBER for card %d",
+ __func__, card->host->index);
return -EINVAL;
}
if (cmd.resp[0] & R5_OUT_OF_RANGE) {
- pr_err(MODULE_NAME ":%s: R5_OUT_OF_RANGE", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+ ":%s: R5_OUT_OF_RANGE for card %d",
+ __func__, card->host->index);
return -ERANGE;
}
}
@@ -1342,9 +1493,21 @@
struct mmc_card *card = NULL;
u32 fn = ch->func->num;
+ if (!ch) {
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+ "channel\n", __func__);
+ return -ENODEV;
+ }
+
+ if (!ch->sdio_al_dev) {
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+ "sdio_al_dev\n", __func__);
+ return -ENODEV;
+ }
+
if (len == 0) {
- pr_err(MODULE_NAME ":channel %s trying to write 0 bytes\n",
- ch->name);
+ sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":channel "
+ "%s trying to write 0 bytes\n", ch->name);
return -EINVAL;
}
@@ -1356,9 +1519,10 @@
ret = sdio_memcpy_toio(ch->func, PIPE_TX_FIFO_ADDR,
(void *) buf, blocks*blksz);
if (ret != 0) {
- pr_err(MODULE_NAME ":%s: sdio_memcpy_toio "
- "failed for channel %s\n",
- __func__, ch->name);
+ sdio_al_loge(ch->sdio_al_dev->dev_log,
+ MODULE_NAME ":%s: sdio_memcpy_toio "
+ "failed for channel %s\n",
+ __func__, ch->name);
ch->sdio_al_dev->is_err = true;
return ret;
}
@@ -1374,9 +1538,9 @@
}
if (ret != 0) {
- pr_err(MODULE_NAME ":%s: sdio_write_cmd54 "
- "failed for channel %s\n",
- __func__, ch->name);
+ sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "sdio_write_cmd54 failed for channel %s\n",
+ __func__, ch->name);
ch->sdio_al_dev->is_err = true;
return ret;
}
@@ -1420,9 +1584,10 @@
*/
ret = enable_mask_irq(sdio_al_dev, 0, 1, 0);
if (ret) {
- pr_err(MODULE_NAME ":Enable_mask_irq for card %d failed, "
- "ret=%d\n",
- sdio_al_dev->card->host->index, ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": Enable_mask_irq for card %d failed, "
+ "ret=%d\n",
+ sdio_al_dev->card->host->index, ret);
sdio_release_host(func1);
return ret;
}
@@ -1448,19 +1613,21 @@
struct sdio_al_device *bootloader_dev = sdio_al->bootloader_dev;
if (bootloader_dev == NULL) {
- pr_err(MODULE_NAME ":No bootloader_dev\n");
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+ ": No bootloader_dev\n");
return -ENODEV;
}
-
if (bootloader_dev->flashless_boot_on) {
- pr_info(MODULE_NAME ":Already in boot process.\n");
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":Already "
+ "in boot process.\n");
return 0;
}
func1 = bootloader_dev->card->sdio_func[0];
if (!func1) {
- pr_err(MODULE_NAME ": %s: NULL func1\n", __func__);
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME
+ ": %s: NULL func1\n", __func__);
return -ENODEV;
}
@@ -1468,7 +1635,8 @@
= kzalloc(sizeof(*bootloader_dev->sdioc_boot_sw_header),
GFP_KERNEL);
if (bootloader_dev->sdioc_boot_sw_header == NULL) {
- pr_err(MODULE_NAME ":fail to allocate sdioc boot sw header.\n");
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":fail to "
+ "allocate sdioc boot sw header.\n");
return -ENOMEM;
}
@@ -1479,15 +1647,17 @@
SDIOC_SW_HEADER_ADDR,
sizeof(struct peer_sdioc_boot_sw_header));
if (ret) {
- pr_err(MODULE_NAME ":fail to read sdioc boot sw header.\n");
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":fail to "
+ "read sdioc boot sw header.\n");
sdio_release_host(func1);
goto exit_err;
}
if (bootloader_dev->sdioc_boot_sw_header->signature !=
(u32) PEER_SDIOC_SW_MAILBOX_BOOT_SIGNATURE) {
- pr_err(MODULE_NAME ":invalid mailbox signature 0x%x.\n",
- bootloader_dev->sdioc_boot_sw_header->signature);
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":invalid "
+ "mailbox signature 0x%x.\n",
+ bootloader_dev->sdioc_boot_sw_header->signature);
sdio_release_host(func1);
ret = -EINVAL;
goto exit_err;
@@ -1496,18 +1666,19 @@
/* Upper byte has to be equal - no backward compatibility for unequal */
if ((bootloader_dev->sdioc_boot_sw_header->version >> 16) !=
(sdio_al->pdata->peer_sdioc_boot_version_major)) {
- pr_err(MODULE_NAME ": HOST(0x%x) and CLIENT(0x%x) SDIO_AL BOOT "
- "VERSION don't match\n",
- ((sdio_al->pdata->peer_sdioc_boot_version_major<<16)+
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ": HOST(0x%x)"
+ " and CLIENT(0x%x) SDIO_AL BOOT VERSION don't match\n",
+ ((sdio_al->pdata->peer_sdioc_boot_version_major<<16)+
sdio_al->pdata->peer_sdioc_boot_version_minor),
- bootloader_dev->sdioc_boot_sw_header->version);
+ bootloader_dev->sdioc_boot_sw_header->version);
sdio_release_host(func1);
ret = -EIO;
goto exit_err;
}
- pr_info(MODULE_NAME ": SDIOC BOOT SW version 0x%x\n",
- bootloader_dev->sdioc_boot_sw_header->version);
+ sdio_al_logi(bootloader_dev->dev_log, MODULE_NAME ": SDIOC BOOT SW "
+ "version 0x%x\n",
+ bootloader_dev->sdioc_boot_sw_header->version);
bootloader_dev->flashless_boot_on = true;
@@ -1515,8 +1686,9 @@
ret = sdio_al_wait_for_bootloader_comp(bootloader_dev);
if (ret) {
- pr_err(MODULE_NAME ":sdio_al_wait_for_bootloader_comp failed, "
- "err=%d\n", ret);
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME
+ ": sdio_al_wait_for_bootloader_comp failed, "
+ "err=%d\n", ret);
goto exit_err;
}
@@ -1525,17 +1697,18 @@
sdio_al_bootloader_completed);
if (ret) {
- pr_err(MODULE_NAME ":sdio_downloader_setup failed, err=%d\n",
- ret);
+ sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME
+ ": sdio_downloader_setup failed, err=%d\n", ret);
goto exit_err;
}
- pr_info(MODULE_NAME ":In Flashless boot, waiting for its "
- "completion\n");
+ sdio_al_logi(bootloader_dev->dev_log, MODULE_NAME ":In Flashless boot,"
+ " waiting for its completion\n");
exit_err:
- pr_info(MODULE_NAME ":free sdioc_boot_sw_header.\n");
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":free "
+ "sdioc_boot_sw_header.\n");
kfree(bootloader_dev->sdioc_boot_sw_header);
bootloader_dev->sdioc_boot_sw_header = NULL;
bootloader_dev = NULL;
@@ -1564,22 +1737,25 @@
ret = sdio_memcpy_fromio(sdio_al_dev->card->sdio_func[0], header,
SDIOC_SW_HEADER_ADDR, sizeof(*header));
if (ret) {
- pr_err(MODULE_NAME ":fail to read sdioc sw header.\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":fail to read "
+ "sdioc sw header.\n");
goto exit_err;
}
if (header->signature == (u32)PEER_SDIOC_SW_MAILBOX_UT_SIGNATURE) {
- pr_info(MODULE_NAME ":SDIOC SW unittest signature. 0x%x\n",
- header->signature);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":SDIOC SW "
+ "unittest signature. 0x%x\n",
+ header->signature);
sdio_al->unittest_mode = true;
/* Verify test code compatibility with the modem */
sdioc_test_version = (header->version & 0xFF00) >> 8;
test_version = sdio_al->pdata->peer_sdioc_version_minor >> 8;
if (test_version != sdioc_test_version) {
- pr_err(MODULE_NAME ":HOST(0x%x) and CLIENT(0x%x) "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": HOST(0x%x) and CLIENT(0x%x) "
"testing VERSION don't match\n",
- test_version,
- sdioc_test_version);
+ test_version,
+ sdioc_test_version);
msleep(500);
BUG();
}
@@ -1587,8 +1763,8 @@
if ((header->signature != (u32) PEER_SDIOC_SW_MAILBOX_SIGNATURE) &&
(header->signature != (u32) PEER_SDIOC_SW_MAILBOX_UT_SIGNATURE)) {
- pr_err(MODULE_NAME ":SDIOC SW invalid signature. 0x%x\n",
- header->signature);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":SDIOC SW "
+ "invalid signature. 0x%x\n", header->signature);
goto exit_err;
}
/* Upper byte has to be equal - no backward compatibility for unequal */
@@ -1597,29 +1773,31 @@
if ((sdio_al->sdioc_major !=
sdio_al->pdata->peer_sdioc_version_major) &&
(sdio_al->sdioc_major != PEER_SDIOC_OLD_VERSION_MAJOR)) {
- pr_err(MODULE_NAME ": HOST(0x%x) and CLIENT(0x%x) "
- "SDIO_AL VERSION don't match\n",
- ((sdio_al->pdata->peer_sdioc_version_major<<16)+
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": HOST(0x%x) and CLIENT(0x%x) "
+ "SDIO_AL VERSION don't match\n",
+ ((sdio_al->pdata->peer_sdioc_version_major<<16)+
sdio_al->pdata->peer_sdioc_version_minor),
- header->version);
+ header->version);
goto exit_err;
}
} else {
if (sdio_al->sdioc_major !=
sdio_al->pdata->peer_sdioc_version_major) {
- pr_err(MODULE_NAME ": HOST(0x%x) and CLIENT(0x%x) "
- "SDIO_AL VERSION don't match\n",
- ((sdio_al->pdata->peer_sdioc_version_major<<16)+
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": HOST(0x%x) and CLIENT(0x%x) "
+ "SDIO_AL VERSION don't match\n",
+ ((sdio_al->pdata->peer_sdioc_version_major<<16)+
sdio_al->pdata->peer_sdioc_version_minor),
- header->version);
+ header->version);
goto exit_err;
}
}
sdio_al_dev->ch_close_supported = (header->version & 0x000F) >=
(sdio_al->pdata->peer_sdioc_version_minor & 0xF);
- pr_info(MODULE_NAME ":SDIOC SW version 0x%x, sdio_al major 0x%x"
- " minor 0x%x\n", header->version,
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":SDIOC SW version 0x%x,"
+ " sdio_al major 0x%x minor 0x%x\n", header->version,
sdio_al->sdioc_major,
sdio_al->pdata->peer_sdioc_version_minor);
@@ -1656,8 +1834,8 @@
ch->state = SDIO_CHANNEL_STATE_INVALID;
}
- pr_info(MODULE_NAME ":Channel=%s, state=%d\n", ch->name,
- ch->state);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":Channel=%s, "
+ "state=%d\n", ch->name, ch->state);
}
return 0;
@@ -1681,8 +1859,8 @@
struct sdio_al_device *sdio_al_dev = ch->sdio_al_dev;
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": NULL sdio_al_dev for channel %s\n",
- ch->name);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL sdio_al_dev"
+ " for channel %s\n", ch->name);
return -EINVAL;
}
@@ -1698,7 +1876,8 @@
ret = sdio_memcpy_fromio(ch->func, sw_mailbox,
SDIOC_SW_MAILBOX_ADDR, sizeof(*sw_mailbox));
if (ret) {
- pr_err(MODULE_NAME ":fail to read sw mailbox.\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":fail to read "
+ "sw mailbox.\n");
goto exit_err;
}
@@ -1707,7 +1886,8 @@
sizeof(struct peer_sdioc_channel_config));
if (!ch_config->is_ready) {
- pr_err(MODULE_NAME ":sw mailbox channel not ready.\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sw mailbox "
+ "channel not ready.\n");
goto exit_err;
}
@@ -1731,7 +1911,8 @@
if (ch->min_write_avail > ch->write_threshold)
ch->min_write_avail = ch->write_threshold;
- pr_info(MODULE_NAME ":ch %s read_threshold=%d, write_threshold=%d,"
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":ch %s "
+ "read_threshold=%d, write_threshold=%d,"
" min_write_avail=%d, max_rx_threshold=%d,"
" max_tx_threshold=%d\n", ch->name, ch->read_threshold,
ch->write_threshold, ch->min_write_avail,
@@ -1745,7 +1926,8 @@
return 0;
exit_err:
- pr_info(MODULE_NAME ":Reading SW Mailbox error.\n");
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":Reading SW Mailbox "
+ "error.\n");
kfree(sw_mailbox);
return -1;
@@ -1825,7 +2007,8 @@
mask = sdio_readl(func1, addr, &ret);
if (ret) {
- pr_err(MODULE_NAME ":enable_mask_irq fail\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "enable_mask_irq fail\n");
goto exit_err;
}
@@ -1903,7 +2086,8 @@
sdio_writel(func1, threshold,
PIPES_THRESHOLD_ADDR+pipe_index*4, &ret);
if (ret)
- pr_err(MODULE_NAME ":set_pipe_threshold err=%d\n", -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "set_pipe_threshold err=%d\n", -ret);
return ret;
}
@@ -1942,8 +2126,8 @@
struct sdio_al_device *sdio_al_dev = ch->sdio_al_dev;
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": NULL sdio_al_dev for channel %s\n",
- ch->name);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL "
+ "sdio_al_dev for channel %s\n", ch->name);
return -EINVAL;
}
@@ -1971,15 +2155,16 @@
/* Init SDIO Function */
ret = sdio_al_enable_func_retry(ch->func, ch->name);
if (ret) {
- pr_err(MODULE_NAME ":sdio_enable_func() err=%d\n", -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "sdio_enable_func() err=%d\n", -ret);
goto exit_err;
}
/* Note: Patch Func CIS tuple issue */
ret = sdio_set_block_size(ch->func, SDIO_AL_BLOCK_SIZE);
if (ret) {
- pr_err(MODULE_NAME ":sdio_set_block_size()failed, err=%d\n",
- -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "sdio_set_block_size()failed, err=%d\n", -ret);
goto exit_err;
}
@@ -2098,26 +2283,35 @@
}
if (!sdio_al_dev->is_ok_to_sleep) {
- LPM_DEBUG(MODULE_NAME ":card %d already awake, "
- "no need to wake up\n",
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":card %d already"
+ " awake, no need to wake up\n",
+ sdio_al_dev->card->host->index);
+ return 0;
+ }
+
+ if (!sdio_al_dev->is_ok_to_sleep) {
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":card %d "
+ "already awake, no need to wake up\n",
+ sdio_al_dev->card->host->index);
return 0;
}
/* Wake up sequence */
if (not_from_int) {
if (ch) {
- LPM_DEBUG(MODULE_NAME ": Wake up card %d (not by "
- "interrupt), ch %s",
- sdio_al_dev->card->host->index, ch->name);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": Wake up"
+ " card %d (not by interrupt), ch %s",
+ sdio_al_dev->card->host->index,
+ ch->name);
} else {
- LPM_DEBUG(MODULE_NAME ": Wake up card %d (not "
- "by interrupt)",
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": Wake up"
+ " card %d (not by interrupt)",
+ sdio_al_dev->card->host->index);
}
} else {
- LPM_DEBUG(MODULE_NAME ": Wake up card %d by interrupt",
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": Wake up card "
+ "%d by interrupt",
+ sdio_al_dev->card->host->index);
sdio_al_dev->print_after_interrupt = 1;
}
@@ -2138,21 +2332,22 @@
/* Here get_mdm2ap_status() returning 0 is not an error condition */
if (sdio_al->pdata->get_mdm2ap_status() == 0)
- LPM_DEBUG(MODULE_NAME ": get_mdm2ap_status() is 0\n");
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "get_mdm2ap_status() is 0\n");
/* Enable Wake up Function */
ret = sdio_al_enable_func_retry(wk_func, "wakeup func");
if (ret) {
- pr_err(MODULE_NAME ":sdio_enable_func() err=%d\n",
- -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "sdio_enable_func() err=%d\n", -ret);
goto error_exit;
}
/* Mark NOT OK_TOSLEEP */
sdio_al_dev->is_ok_to_sleep = 0;
ret = write_lpm_info(sdio_al_dev);
if (ret) {
- pr_err(MODULE_NAME ":write_lpm_info() failed, err=%d\n",
- -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "write_lpm_info() failed, err=%d\n", -ret);
sdio_al_dev->is_ok_to_sleep = 1;
sdio_disable_func(wk_func);
goto error_exit;
@@ -2164,8 +2359,8 @@
sdio_al_dev->poll_delay_msec = get_min_poll_time_msec(sdio_al_dev);
start_timer(sdio_al_dev);
- LPM_DEBUG(MODULE_NAME "Finished Wake up sequence for card %d",
- sdio_al_dev->card->host->index);
+ LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME "Finished Wake up sequence"
+ " for card %d", sdio_al_dev->card->host->index);
msmsdcc_set_pwrsave(sdio_al_dev->card->host, 1);
pr_debug(MODULE_NAME ":Turn clock off\n");
@@ -2201,8 +2396,8 @@
pr_debug(MODULE_NAME ":start %s.\n", __func__);
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": NULL sdio_al_dev for card %d\n",
- func->card->host->index);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL sdio_al_dev"
+ " for card %d\n", func->card->host->index);
return;
}
@@ -2224,13 +2419,13 @@
{
struct sdio_al_device *sdio_al_dev = (struct sdio_al_device *)data;
if (sdio_al_dev == NULL) {
- pr_err(MODULE_NAME ": NULL sdio_al_dev for data %lu\n",
- data);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": NULL "
+ "sdio_al_dev for data %lu\n", data);
return;
}
if (sdio_al_dev->state != CARD_INSERTED) {
- pr_err(MODULE_NAME ": sdio_al_dev is in invalid state %d\n",
- sdio_al_dev->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": sdio_al_dev "
+ "is in invalid state %d\n", sdio_al_dev->state);
return;
}
pr_debug(MODULE_NAME " Timer Expired\n");
@@ -2253,19 +2448,21 @@
int fn = 0;
if (card == NULL) {
- pr_err(MODULE_NAME ":sdio_al_setup: No Card detected\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "sdio_al_setup: No Card detected\n");
return -ENODEV;
}
- pr_info(MODULE_NAME ":sdio_al_setup for card %d\n",
- sdio_al_dev->card->host->index);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":sdio_al_setup for "
+ "card %d\n", sdio_al_dev->card->host->index);
func1 = card->sdio_func[0];
ret = sdio_al->pdata->config_mdm2ap_status(1);
if (ret) {
- pr_err(MODULE_NAME "Could not request GPIO\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME "Could not "
+ "request GPIO\n");
return ret;
}
@@ -2282,13 +2479,14 @@
sdio_disable_func(card->sdio_func[fn-1]);
sdio_set_drvdata(func1, sdio_al_dev);
- pr_info(MODULE_NAME ":claim IRQ for card %d\n",
- card->host->index);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":claim IRQ for card "
+ "%d\n", card->host->index);
ret = sdio_claim_irq(func1, sdio_func_irq);
if (ret) {
- pr_err(MODULE_NAME ":Fail to claim IRQ for card %d\n",
- card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to claim"
+ " IRQ for card %d\n",
+ card->host->index);
goto exit_err;
}
@@ -2305,7 +2503,7 @@
exit_err:
sdio_release_host(func1);
- pr_err(MODULE_NAME ":Setup Failure.\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Setup Failure.\n");
return ret;
}
@@ -2338,8 +2536,9 @@
sdio_al_vote_for_sleep(sdio_al_dev, 1);
if (sdio_al_verify_func1(sdio_al_dev, __func__)) {
- pr_err(MODULE_NAME ": %s: Invalid func1",
- __func__);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": %s: Invalid func1",
+ __func__);
return;
}
func1 = sdio_al_dev->card->sdio_func[0];
@@ -2428,7 +2627,8 @@
ch = find_channel_by_name(name);
if (ch == NULL) {
- pr_err(MODULE_NAME ":Can't find channel name %s\n", name);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":Can't find "
+ "channel name %s\n", name);
return -EINVAL;
}
@@ -2440,14 +2640,16 @@
if ((ch->state != SDIO_CHANNEL_STATE_IDLE) &&
(ch->state != SDIO_CHANNEL_STATE_CLOSED)) {
- pr_err(MODULE_NAME ":Wrong ch %s state %d\n", name, ch->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Wrong ch %s "
+ "state %d\n", name, ch->state);
ret = -EPERM;
goto exit_err;
}
if (sdio_al_dev->state != CARD_INSERTED) {
- pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
- __func__, sdio_al_dev->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "sdio_al_dev is in invalid state %d\n",
+ __func__, sdio_al_dev->state);
ret = -ENODEV;
goto exit_err;
}
@@ -2470,21 +2672,25 @@
ret = open_channel(ch);
if (ret) {
- pr_err(MODULE_NAME ":sdio_open %s err=%d\n", name, -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_open %s "
+ "err=%d\n", name, -ret);
goto exit_err;
}
- pr_info(MODULE_NAME ":sdio_open %s completed OK\n", name);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":sdio_open %s "
+ "completed OK\n", name);
if (sdio_al_dev->lpm_chan == INVALID_SDIO_CHAN) {
if (sdio_al->sdioc_major == PEER_SDIOC_OLD_VERSION_MAJOR) {
if (!ch->is_packet_mode) {
- pr_info(MODULE_NAME ":setting channel %s as "
- "lpm_chan\n", name);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME
+ ":setting channel %s as "
+ "lpm_chan\n", name);
sdio_al_dev->lpm_chan = ch->num;
}
} else {
- pr_info(MODULE_NAME ":setting channel %s as lpm_chan\n",
- name);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": "
+ "setting channel %s as lpm_chan\n",
+ name);
sdio_al_dev->lpm_chan = ch->num;
}
}
@@ -2512,8 +2718,9 @@
wk_func = sdio_al_dev->card->sdio_func[SDIO_AL_WAKEUP_FUNC-1];
if (!wk_func) {
- pr_err(MODULE_NAME ":%s: NULL wakeup func:%d\n",
- __func__, SDIO_AL_WAKEUP_FUNC);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: NULL "
+ "wakeup func:%d\n", __func__,
+ SDIO_AL_WAKEUP_FUNC);
ret = -ENODEV;
goto exit;
}
@@ -2524,7 +2731,8 @@
ret = sdio_al_wake_up(sdio_al_dev, 1, ch);
if (ret) {
- pr_err(MODULE_NAME ":Fail to wake up\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+ "wake up\n");
goto exit;
}
/* request operation from MDM peer */
@@ -2532,12 +2740,14 @@
ret = sdio_memcpy_toio(ch->func, SDIOC_SW_MAILBOX_ADDR+offset,
&peer_operation, sizeof(u32));
if (ret) {
- pr_err(MODULE_NAME ":failed to request close operation\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":failed to "
+ "request close operation\n");
goto exit;
}
ret = sdio_al_enable_func_retry(wk_func, "wk_func");
if (ret) {
- pr_err(MODULE_NAME ":Fail to enable Func#%d\n", wk_func->num);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to enable"
+ " Func#%d\n", wk_func->num);
goto exit;
}
pr_debug(MODULE_NAME ":%s: wk_func enabled on ch %s\n",
@@ -2547,12 +2757,14 @@
ret = sdio_memcpy_toio(ch->func, SDIOC_SW_MAILBOX_ADDR+offset,
&peer_operation, sizeof(u32));
if (ret) {
- pr_err(MODULE_NAME ":failed to send start close operation\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":failed to "
+ "send start close operation\n");
goto exit;
}
ret = sdio_disable_func(wk_func);
if (ret) {
- pr_err(MODULE_NAME ":Fail to disable Func#%d\n", wk_func->num);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+ "disable Func#%d\n", wk_func->num);
goto exit;
}
/* poll for peer operation ack */
@@ -2562,14 +2774,16 @@
SDIOC_SW_MAILBOX_ADDR+offset,
sizeof(u32));
if (ret) {
- pr_err(MODULE_NAME ":failed to request ack on close"
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":failed to request ack on close"
" operation, loop_count = %d\n",
loop_count);
goto exit;
}
loop_count++;
if (loop_count > 10) {
- pr_info(MODULE_NAME ":%s: peer_operation=0x%x wait loop"
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "peer_operation=0x%x wait loop"
" %d on ch %s\n", __func__,
peer_operation, loop_count, ch->name);
}
@@ -2590,7 +2804,8 @@
ulong flush_expires;
if (!ch) {
- pr_err(MODULE_NAME ":%s: NULL channel\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+ "channel\n", __func__);
return -ENODEV;
}
sdio_al_dev = ch->sdio_al_dev;
@@ -2598,14 +2813,15 @@
return -ENODEV;
if (!sdio_al_dev->ch_close_supported) {
- pr_info(MODULE_NAME ":%s: Not supported by mdm, ch %s\n",
- __func__, ch->name);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: Not "
+ "supported by mdm, ch %s\n",
+ __func__, ch->name);
return -ENOTSUPP;
}
if (!ch->func) {
- pr_err(MODULE_NAME ":%s: NULL func on channel:%d\n",
- __func__, ch->num);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: NULL func"
+ " on channel:%d\n", __func__, ch->num);
return -ENODEV;
}
sdio_claim_host(sdio_al_dev->card->sdio_func[0]);
@@ -2616,7 +2832,8 @@
return -ENODEV;
}
if (sdio_al_dev->state != CARD_INSERTED) {
- pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "sdio_al_dev is in invalid state %d\n",
__func__, sdio_al_dev->state);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -ENODEV;
@@ -2624,7 +2841,8 @@
ch->state = SDIO_CHANNEL_STATE_CLOSING;
ret = peer_set_operation(PEER_OP_CODE_CLOSE, sdio_al_dev, ch);
if (ret) {
- pr_err(MODULE_NAME ":%s: peer_set_operation() failed: %d\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "peer_set_operation() failed: %d\n",
__func__, ret);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -ENODEV;
@@ -2645,23 +2863,25 @@
ret = sdio_read_internal(ch, sdio_al_dev->rx_flush_buf,
flush_len);
if (ret) {
- pr_err(MODULE_NAME ":%s failed to"
- " sdio_read: %d, ch %s\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":%s failed to sdio_read: %d, ch %s\n",
__func__, ret, ch->name);
return ret;
}
if (time_after(jiffies, flush_expires) != 0) {
- pr_err(MODULE_NAME ":%s flush rx packets"
- " timeout: ch %s\n",
- __func__, ch->name);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":%s flush rx packets"
+ " timeout: ch %s\n",
+ __func__, ch->name);
sdio_al_get_into_err_state(sdio_al_dev);
return -EBUSY;
}
}
msleep(100);
if (ch->signature != SDIO_AL_SIGNATURE) {
- pr_err(MODULE_NAME ":%s: after sleep, invalid signature"
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+ "after sleep, invalid signature"
" 0x%x\n", __func__, ch->signature);
return -ENODEV;
}
@@ -2682,7 +2902,8 @@
/* disable function to be able to open the channel again */
ret = sdio_disable_func(ch->func);
if (ret) {
- pr_err(MODULE_NAME ":Fail to disable Func#%d\n", ch->func->num);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+ "disable Func#%d\n", ch->func->num);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return ret;
}
@@ -2700,16 +2921,19 @@
int sdio_write_avail(struct sdio_channel *ch)
{
if (!ch) {
- pr_err(MODULE_NAME ":%s: NULL channel\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+ "channel\n", __func__);
return -ENODEV;
}
if (ch->signature != SDIO_AL_SIGNATURE) {
- pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n", __func__,
- ch->signature);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+ "Invalid signature 0x%x\n", __func__,
+ ch->signature);
return -ENODEV;
}
if (ch->state != SDIO_CHANNEL_STATE_OPEN) {
- pr_err(MODULE_NAME ":%s: channel %s state is not open (%d)\n",
+ sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "channel %s state is not open (%d)\n",
__func__, ch->name, ch->state);
return -ENODEV;
}
@@ -2727,16 +2951,19 @@
int sdio_read_avail(struct sdio_channel *ch)
{
if (!ch) {
- pr_err(MODULE_NAME ":%s: NULL channel\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+ "channel\n", __func__);
return -ENODEV;
}
if (ch->signature != SDIO_AL_SIGNATURE) {
- pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n", __func__,
- ch->signature);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+ "Invalid signature 0x%x\n", __func__,
+ ch->signature);
return -ENODEV;
}
if (ch->state != SDIO_CHANNEL_STATE_OPEN) {
- pr_err(MODULE_NAME ":%s: channel %s state is not open (%d)\n",
+ sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "channel %s state is not open (%d)\n",
__func__, ch->name, ch->state);
return -ENODEV;
}
@@ -2792,22 +3019,24 @@
struct sdio_al_device *sdio_al_dev = NULL;
if (!ch) {
- pr_err(MODULE_NAME ":%s: NULL channel\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+ "channel\n", __func__);
return -ENODEV;
}
if (!data) {
- pr_err(MODULE_NAME ":%s: NULL data\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL data\n",
+ __func__);
return -ENODEV;
}
if (len == 0) {
- pr_err(MODULE_NAME ":channel %s trying to read 0 bytes\n",
- ch->name);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":channel %s trying"
+ " to read 0 bytes\n", ch->name);
return -EINVAL;
}
if (ch->signature != SDIO_AL_SIGNATURE) {
- pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n", __func__,
- ch->signature);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: Invalid "
+ "signature 0x%x\n", __func__, ch->signature);
return -ENODEV;
}
@@ -2824,8 +3053,9 @@
}
if (sdio_al_dev->state != CARD_INSERTED) {
- pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
- __func__, sdio_al_dev->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+ "sdio_al_dev is in invalid state %d\n",
+ __func__, sdio_al_dev->state);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -ENODEV;
}
@@ -2834,39 +3064,40 @@
so either we had rx interrupt and woken up, or we never went to
sleep */
if (sdio_al_dev->is_ok_to_sleep) {
- pr_err(MODULE_NAME ":%s: called when is_ok_to_sleep is set "
- "for ch %s, len=%d, last_any_read_avail=%d,"
- "last_read_avail=%d, last_old_read_avail=%d",
- __func__, ch->name, len,
- ch->statistics.last_any_read_avail,
- ch->statistics.last_read_avail,
- ch->statistics.last_old_read_avail);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: called "
+ "when is_ok_to_sleep is set for ch %s, len=%d,"
+ " last_any_read_avail=%d, last_read_avail=%d, "
+ "last_old_read_avail=%d", __func__, ch->name,
+ len, ch->statistics.last_any_read_avail,
+ ch->statistics.last_read_avail,
+ ch->statistics.last_old_read_avail);
}
BUG_ON(sdio_al_dev->is_ok_to_sleep);
if ((ch->state != SDIO_CHANNEL_STATE_OPEN) &&
(ch->state != SDIO_CHANNEL_STATE_CLOSING)) {
- pr_err(MODULE_NAME ":%s wrong channel %s state %d\n",
- __func__, ch->name, ch->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s wrong "
+ "channel %s state %d\n",
+ __func__, ch->name, ch->state);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -EINVAL;
}
- DATA_DEBUG(MODULE_NAME ":start ch %s read %d avail %d.\n",
- ch->name, len, ch->read_avail);
+ DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":start ch %s read %d "
+ "avail %d.\n", ch->name, len, ch->read_avail);
restart_inactive_time(sdio_al_dev);
if ((ch->is_packet_mode) && (len != ch->read_avail)) {
- pr_err(MODULE_NAME ":sdio_read ch %s len != read_avail\n",
- ch->name);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_read ch "
+ "%s len != read_avail\n", ch->name);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -EINVAL;
}
if (len > ch->read_avail) {
- pr_err(MODULE_NAME ":ERR ch %s: reading more bytes (%d) than"
- " the avail(%d).\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":ERR ch %s: "
+ "reading more bytes (%d) than the avail(%d).\n",
ch->name, len, ch->read_avail);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -ENOMEM;
@@ -2875,8 +3106,9 @@
ret = sdio_memcpy_fromio(ch->func, data, PIPE_RX_FIFO_ADDR, len);
if (ret) {
- pr_err(MODULE_NAME ":ch %s: sdio_read err=%d, len=%d, "
- "read_avail=%d, last_read_avail=%d, last_old_read_avail=%d\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":ch %s: "
+ "sdio_read err=%d, len=%d, read_avail=%d, "
+ "last_read_avail=%d, last_old_read_avail=%d\n",
ch->name, -ret, len, ch->read_avail,
ch->statistics.last_read_avail,
ch->statistics.last_old_read_avail);
@@ -2894,8 +3126,9 @@
ch->read_avail -= len;
ch->total_rx_bytes += len;
- DATA_DEBUG(MODULE_NAME ":end ch %s read %d avail %d total %d.\n",
- ch->name, len, ch->read_avail, ch->total_rx_bytes);
+ DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":end ch %s read %d "
+ "avail %d total %d.\n", ch->name, len,
+ ch->read_avail, ch->total_rx_bytes);
if ((ch->read_avail == 0) && !(ch->is_packet_mode))
ask_reading_mailbox(sdio_al_dev);
@@ -2915,18 +3148,20 @@
int sdio_read(struct sdio_channel *ch, void *data, int len)
{
if (!ch) {
- pr_err(MODULE_NAME ":%s: NULL channel\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+ "channel\n", __func__);
return -ENODEV;
}
if (ch->signature != SDIO_AL_SIGNATURE) {
- pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n", __func__,
- ch->signature);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+ "Invalid signature 0x%x\n", __func__, ch->signature);
return -ENODEV;
}
if (ch->state == SDIO_CHANNEL_STATE_OPEN) {
return sdio_read_internal(ch, data, len);
} else {
- pr_err(MODULE_NAME ":%s: Invalid channel %s state %d\n",
+ sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME
+ ":%s: Invalid channel %s state %d\n",
__func__, ch->name, ch->state);
}
return -ENODEV;
@@ -2943,22 +3178,24 @@
struct sdio_al_device *sdio_al_dev = NULL;
if (!ch) {
- pr_err(MODULE_NAME ":%s: NULL channel\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+ "channel\n", __func__);
return -ENODEV;
}
if (!data) {
- pr_err(MODULE_NAME ":%s: NULL data\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL data\n",
+ __func__);
return -ENODEV;
}
if (len == 0) {
- pr_err(MODULE_NAME ":channel %s trying to write 0 bytes\n",
- ch->name);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":channel %s trying"
+ " to write 0 bytes\n", ch->name);
return -EINVAL;
}
if (ch->signature != SDIO_AL_SIGNATURE) {
- pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n", __func__,
- ch->signature);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: Invalid "
+ "signature 0x%x\n", __func__, ch->signature);
return -ENODEV;
}
@@ -2970,8 +3207,9 @@
if (sdio_al_dev->state != CARD_INSERTED) {
- pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
- __func__, sdio_al_dev->state);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":%s: sdio_al_dev is in invalid state %d\n",
+ __func__, sdio_al_dev->state);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -ENODEV;
}
@@ -2984,8 +3222,8 @@
}
if (ch->state != SDIO_CHANNEL_STATE_OPEN) {
- pr_err(MODULE_NAME ":writing to closed channel %s\n",
- ch->name);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":writing to "
+ "closed channel %s\n", ch->name);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -EINVAL;
}
@@ -3000,12 +3238,12 @@
restart_inactive_time(sdio_al_dev);
}
- DATA_DEBUG(MODULE_NAME ":start ch %s write %d avail %d.\n",
- ch->name, len, ch->write_avail);
+ DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":start ch %s write %d "
+ "avail %d.\n", ch->name, len, ch->write_avail);
if (len > ch->write_avail) {
- pr_err(MODULE_NAME ":ERR ch %s: write more bytes (%d) than "
- " available %d.\n",
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":ERR ch %s: "
+ "write more bytes (%d) than available %d.\n",
ch->name, len, ch->write_avail);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return -ENOMEM;
@@ -3013,15 +3251,16 @@
ret = sdio_ch_write(ch, data, len);
if (ret) {
- pr_err(MODULE_NAME ":sdio_write on channel %s err=%d\n",
- ch->name, -ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_write "
+ "on channel %s err=%d\n", ch->name, -ret);
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
return ret;
}
ch->total_tx_bytes += len;
- DATA_DEBUG(MODULE_NAME ":end ch %s write %d avail %d total %d.\n",
- ch->name, len, ch->write_avail, ch->total_tx_bytes);
+ DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":end ch %s write %d "
+ "avail %d total %d.\n", ch->name, len,
+ ch->write_avail, ch->total_tx_bytes);
/* Round up to whole buffer size */
len = ROUND_UP(len, ch->peer_tx_buf_size);
@@ -3060,7 +3299,8 @@
struct sdio_func *func1 = NULL;
int ret;
- pr_info("Initiating msm_sdio_al_shutdown...");
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: Initiating "
+ "msm_sdio_al_shutdown...", __func__);
for (i = 0; i < MAX_NUM_OF_SDIO_DEVICES; i++) {
struct sdio_al_device *sdio_al_dev = NULL;
@@ -3071,19 +3311,20 @@
}
sdio_al_dev = sdio_al->devices[i];
if (sdio_al_dev->state == CARD_REMOVED) {
- pr_info(MODULE_NAME ": %s: card %d is already removed",
- __func__, sdio_al_dev->card->host->index);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": %s: "
+ "card %d is already removed", __func__,
+ sdio_al_dev->card->host->index);
continue;
}
if (sdio_al_dev->state == MODEM_RESTART) {
- pr_info(MODULE_NAME ": %s: card %d was already "
- "notified for modem reset",
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": %s: "
+ "card %d was already notified for modem reset",
__func__, sdio_al_dev->card->host->index);
continue;
}
- pr_info(MODULE_NAME ": %s: Set the state to MODEM_RESTART"
- " for card %d",
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": %s: Set the "
+ "state to MODEM_RESTART for card %d",
__func__, sdio_al_dev->card->host->index);
sdio_al_dev->state = MODEM_RESTART;
sdio_al_dev->is_ready = false;
@@ -3117,9 +3358,9 @@
sdio_al_dev->card->host->index);
ret = sdio_al_wake_up(sdio_al_dev, 1, NULL);
if (ret == 0) {
- pr_info(MODULE_NAME ": %s: "
- "sdio_release_irq"
- " for card %d",
+ sdio_al_logi(sdio_al_dev->dev_log,
+ MODULE_NAME ": %s: "
+ "sdio_release_irq for card %d",
__func__,
sdio_al_dev->card->host->index);
sdio_release_irq(func1);
@@ -3151,7 +3392,8 @@
sdio_al_dev->card->host->index);
sdio_al_vote_for_sleep(sdio_al_dev, 1);
}
- pr_info("msm_sdio_al_shutdown complete.");
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: "
+ "msm_sdio_al_shutdown complete.", __func__);
}
static struct platform_driver msm_sdio_al_driver = {
@@ -3213,16 +3455,18 @@
sdio_al_dev->channel[i].name, -1);
}
if (!sdio_al_dev->channel[i].pdev) {
- pr_err(MODULE_NAME ":NULL platform device for ch %s",
- sdio_al_dev->channel[i].name);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":NULL platform device for ch %s",
+ sdio_al_dev->channel[i].name);
sdio_al_dev->channel[i].state =
SDIO_CHANNEL_STATE_INVALID;
continue;
}
ret = platform_device_add(sdio_al_dev->channel[i].pdev);
if (ret) {
- pr_err(MODULE_NAME ":platform_device_add failed, "
- "ret=%d\n", ret);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ":platform_device_add failed, "
+ "ret=%d\n", ret);
sdio_al_dev->channel[i].state =
SDIO_CHANNEL_STATE_INVALID;
}
@@ -3258,27 +3502,31 @@
signature = sdio_readl(func1, SDIOC_SW_HEADER_ADDR, &ret);
sdio_release_host(func1);
if (ret) {
- pr_err(MODULE_NAME ":fail to read signature from sw header.\n");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":fail to read "
+ "signature from sw header.\n");
return ret;
}
switch (signature) {
case PEER_SDIOC_SW_MAILBOX_BOOT_SIGNATURE:
if (sdio_al_dev == sdio_al->bootloader_dev) {
- pr_info(MODULE_NAME ":setup bootloader on card %d\n",
- sdio_al_dev->card->host->index);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":setup "
+ "bootloader on card %d\n",
+ sdio_al_dev->card->host->index);
return sdio_al_bootloader_setup();
} else {
- pr_info(MODULE_NAME ":wait for bootloader completion "
- "on card %d\n",
- sdio_al_dev->card->host->index);
+ sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":wait "
+ "for bootloader completion "
+ "on card %d\n",
+ sdio_al_dev->card->host->index);
return sdio_al_wait_for_bootloader_comp(sdio_al_dev);
}
case PEER_SDIOC_SW_MAILBOX_SIGNATURE:
case PEER_SDIOC_SW_MAILBOX_UT_SIGNATURE:
return init_channels(sdio_al_dev);
default:
- pr_err(MODULE_NAME ":Invalid signature 0x%x\n", signature);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Invalid "
+ "signature 0x%x\n", signature);
return -EINVAL;
}
@@ -3297,13 +3545,15 @@
struct mmc_card *card = NULL;
if (!func) {
- pr_err(MODULE_NAME ": %s: NULL func\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL func\n",
+ __func__);
return -ENODEV;
}
card = func->card;
if (!card) {
- pr_err(MODULE_NAME ": %s: NULL card\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL card\n",
+ __func__);
return -ENODEV;
}
@@ -3336,11 +3586,18 @@
for (i = 0; i < MAX_NUM_OF_SDIO_DEVICES ; ++i)
if (sdio_al->devices[i] == NULL) {
sdio_al->devices[i] = sdio_al_dev;
+ sdio_al_dev->dev_log = &sdio_al->device_log[i];
+ spin_lock_init(&sdio_al_dev->dev_log->log_lock);
+#ifdef CONFIG_DEBUG_FS
+ sdio_al_dbgfs_log[i].data =
+ sdio_al_dev->dev_log->buffer;
+ sdio_al_dbgfs_log[i].size = SDIO_AL_DEBUG_LOG_SIZE;
+#endif
break;
}
if (i == MAX_NUM_OF_SDIO_DEVICES) {
- pr_err(MODULE_NAME ":No space in devices array for the "
- "device\n");
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":No space in "
+ "devices array for the device\n");
return -ENOMEM;
}
@@ -3384,16 +3641,16 @@
/* Init Func#1 */
ret = sdio_al_enable_func_retry(card->sdio_func[0], "Init Func#1");
if (ret) {
- pr_err(MODULE_NAME ":Fail to enable Func#%d\n",
- card->sdio_func[0]->num);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+ "enable Func#%d\n", card->sdio_func[0]->num);
goto exit;
}
/* Patch Func CIS tuple issue */
ret = sdio_set_block_size(card->sdio_func[0], SDIO_AL_BLOCK_SIZE);
if (ret) {
- pr_err(MODULE_NAME ":Fail to set block size, Func#%d\n",
- card->sdio_func[0]->num);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to set "
+ "block size, Func#%d\n", card->sdio_func[0]->num);
goto exit;
}
sdio_al_dev->card->sdio_func[0]->max_blksize = SDIO_AL_BLOCK_SIZE;
@@ -3417,13 +3674,15 @@
struct mmc_card *card = NULL;
if (!func) {
- pr_err(MODULE_NAME ": %s: NULL func\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL func\n",
+ __func__);
return;
}
card = func->card;
if (!card) {
- pr_err(MODULE_NAME ": %s: NULL card\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL card\n",
+ __func__);
return;
}
@@ -3443,14 +3702,14 @@
return;
}
- pr_info(MODULE_NAME ":%s for card %d\n",
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s for card %d\n",
__func__, card->host->index);
if (card->sdio_func[0])
sdio_claim_host(card->sdio_func[0]);
else
- pr_err(MODULE_NAME ":%s: NULL func1 for card %d\n",
- __func__, card->host->index);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL func1 "
+ "for card %d\n", __func__, card->host->index);
if (sdio_al_dev->state == CARD_REMOVED)
return;
@@ -3461,22 +3720,23 @@
for (i = 0; i < SDIO_AL_MAX_CHANNELS; i++)
sdio_al_dev->channel[i].signature = 0x0;
- pr_info(MODULE_NAME ":%s: ask_reading_mailbox for card %d\n",
- __func__, card->host->index);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: ask_reading_mailbox "
+ "for card %d\n", __func__, card->host->index);
sdio_al_dev->is_ready = false; /* Flag worker to exit */
sdio_al_dev->ask_mbox = false;
ask_reading_mailbox(sdio_al_dev); /* Wakeup worker */
if (state != MODEM_RESTART) {
if (sdio_al_dev->is_timer_initialized) {
- pr_info(MODULE_NAME ": %s: Stop timer for card %d",
- __func__, sdio_al_dev->card->host->index);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: Stop"
+ " timer for card %d", __func__,
+ sdio_al_dev->card->host->index);
sdio_al_dev->poll_delay_msec = 0;
del_timer_sync(&sdio_al_dev->timer);
}
- pr_info(MODULE_NAME ":%s: notifying clients for "
- "card %d\n",
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: "
+ "notifying clients for card %d\n",
__func__, card->host->index);
for (i = 0; i < SDIO_AL_MAX_CHANNELS; i++) {
if (sdio_al_dev->channel[i].state ==
@@ -3490,25 +3750,26 @@
if (card->sdio_func[0])
sdio_release_host(card->sdio_func[0]);
- pr_info(MODULE_NAME ":%s: vote for sleep for card %d\n",
- __func__, card->host->index);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: vote for sleep for "
+ "card %d\n", __func__, card->host->index);
sdio_al_vote_for_sleep(sdio_al_dev, 1);
- pr_info(MODULE_NAME ":%s: flush_workqueue for card %d\n",
- __func__, card->host->index);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: flush_workqueue for "
+ "card %d\n", __func__, card->host->index);
flush_workqueue(sdio_al_dev->workqueue);
destroy_workqueue(sdio_al_dev->workqueue);
wake_lock_destroy(&sdio_al_dev->wake_lock);
- pr_info(MODULE_NAME ":%s: delete data structures for card %d\n",
- __func__, card->host->index);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: delete data "
+ "structures for card %d\n", __func__,
+ card->host->index);
kfree(sdio_al_dev->sdioc_sw_header);
kfree(sdio_al_dev->mailbox);
kfree(sdio_al_dev->rx_flush_buf);
kfree(sdio_al_dev);
- pr_info(MODULE_NAME ":%s: sdio card %d removed.\n", __func__,
- card->host->index);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: sdio card %d removed."
+ "\n", __func__, card->host->index);
}
static void sdio_print_mailbox(char *prefix_str, struct sdio_mailbox *mailbox)
@@ -3518,12 +3779,13 @@
char buf1[10];
if (!mailbox) {
- pr_err(MODULE_NAME ": mailbox is NULL\n");
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": mailbox is "
+ "NULL\n");
return;
}
- pr_err(MODULE_NAME ": %s: pipes 0_7: eot=0x%x, "
- "thresh=0x%x, overflow=0x%x, "
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: pipes 0_7: eot=0x%x,"
+ " thresh=0x%x, overflow=0x%x, "
"underflow=0x%x, mask_thresh=0x%x\n",
prefix_str, mailbox->eot_pipe_0_7,
mailbox->thresh_above_limit_pipe_0_7,
@@ -3540,7 +3802,7 @@
strncat(buf, buf1, sizeof(buf));
}
- pr_err(MODULE_NAME "%s", buf);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME "%s", buf);
}
static void sdio_al_print_info(void)
@@ -3563,15 +3825,16 @@
atomic_set(&first_time, 1);
- pr_err(MODULE_NAME ": %s - SDIO DEBUG INFO\n", __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - SDIO DEBUG INFO\n",
+ __func__);
if (!sdio_al) {
- pr_err(MODULE_NAME ": %s - ERROR - sdio_al is NULL\n",
- __func__);
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - ERROR - "
+ "sdio_al is NULL\n", __func__);
return;
}
- pr_err(MODULE_NAME ": GPIO mdm2ap_status=%d\n",
+ sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": GPIO mdm2ap_status=%d\n",
sdio_al->pdata->get_mdm2ap_status());
for (j = 0 ; j < MAX_NUM_OF_SDIO_DEVICES ; ++j) {
@@ -3582,8 +3845,8 @@
}
if (!sdio_al_dev->card && !sdio_al_dev->card->host) {
- pr_err(MODULE_NAME ": Card or Host fields "
- "are NULL\n);");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": Card"
+ " or Host fields are NULL\n);");
continue;
}
@@ -3594,13 +3857,13 @@
mailbox = sdio_al_dev->mailbox;
sdio_print_mailbox(buf, mailbox);
- pr_err(MODULE_NAME ": Card#%d: "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": Card#%d: "
"is_ok_to_sleep=%d\n",
sdio_al_dev->card->host->index,
sdio_al_dev->is_ok_to_sleep);
- pr_err(MODULE_NAME ": Card#%d: "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": Card#%d: "
"Shadow channels SW MB:",
sdio_al_dev->card->host->index);
@@ -3617,7 +3880,8 @@
ch_config = &sdio_al_dev->channel[i].ch_config;
- pr_err(MODULE_NAME ": Ch %s: max_rx_thres=0x%x, "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": Ch %s: max_rx_thres=0x%x, "
"max_tx_thres=0x%x, tx_buf=0x%x, "
"is_packet_mode=%d, "
"max_packet=0x%x, min_write=0x%x",
@@ -3628,14 +3892,13 @@
ch_config->max_packet_size,
ch->min_write_avail);
- pr_err(MODULE_NAME ": total_rx=0x%x, "
- "total_tx=0x%x, "
- "read_avail=0x%x, "
- "write_avail=0x%x, rx_pending=0x%x, "
- "num_reads=0x%x, num_notifs=0x%x",
- ch->total_rx_bytes, ch->total_tx_bytes,
- ch->read_avail, ch->write_avail,
- ch->rx_pending_bytes,
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": total_rx=0x%x, total_tx=0x%x, "
+ "read_avail=0x%x, write_avail=0x%x, "
+ "rx_pending=0x%x, num_reads=0x%x, "
+ "num_notifs=0x%x", ch->total_rx_bytes,
+ ch->total_tx_bytes, ch->read_avail,
+ ch->write_avail, ch->rx_pending_bytes,
ch->statistics.total_read_times,
ch->statistics.total_notifs);
} /* end loop over all channels */
@@ -3650,15 +3913,16 @@
return;
if (!sdio_al_dev->card->host) {
- pr_err(MODULE_NAME ": Host is NULL");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": Host is NULL");
continue;
}
if (sdio_al_dev->lpm_chan == INVALID_SDIO_CHAN) {
- pr_err(MODULE_NAME ": %s - for "
- "Card#%d, is lpm_chan=="
- "INVALID_SDIO_CHAN. continuing...",
- __func__, sdio_al_dev->card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": %s - for Card#%d, is lpm_chan=="
+ "INVALID_SDIO_CHAN. continuing...",
+ __func__, sdio_al_dev->card->host->index);
continue;
}
@@ -3670,9 +3934,10 @@
lpm_func = sdio_al_dev->card->sdio_func[sdio_al_dev->
lpm_chan+1];
if (!lpm_func) {
- pr_err(MODULE_NAME ": %s - lpm_func is NULL for card#%d"
- " continuing...\n", __func__,
- sdio_al_dev->card->host->index);
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": %s - lpm_func is NULL for card#%d"
+ " continuing...\n", __func__,
+ sdio_al_dev->card->host->index);
continue;
}
@@ -3686,11 +3951,13 @@
sdio_release_host(sdio_al_dev->card->sdio_func[0]);
if (ret)
- pr_err(MODULE_NAME ": %s - fail to read "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": %s - fail to read "
"is_HOST_ok_to_sleep from mailbox for card %d",
__func__, sdio_al_dev->card->host->index);
else
- pr_err(MODULE_NAME ": Card#%d: "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": Card#%d: "
"is_HOST_ok_to_sleep=%d\n",
sdio_al_dev->card->host->index,
is_ok_to_sleep);
@@ -3703,7 +3970,8 @@
return;
if (!sdio_al_dev->card->host) {
- pr_err(MODULE_NAME ": Host is NULL");
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": Host is NULL");
continue;
}
@@ -3719,7 +3987,8 @@
sdio_release_host(func1);
if (ret) {
- pr_err(MODULE_NAME ": fail to read "
+ sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+ ": fail to read "
"mailbox for card#%d. "
"continuing...\n",
sdio_al_dev->card->host->index);
@@ -3760,8 +4029,8 @@
void *data)
{
if (notif_type != SUBSYS_BEFORE_SHUTDOWN) {
- pr_info(MODULE_NAME ": %s: got notification %ld",
- __func__, notif_type);
+ sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: got "
+ "notification %ld", __func__, notif_type);
return NOTIFY_DONE;
}
@@ -3821,6 +4090,9 @@
}
sdio_register_driver(&sdio_al_sdiofn_driver);
+
+ spin_lock_init(&sdio_al->gen_log.log_lock);
+
exit:
if (ret)
kfree(sdio_al);