static ssize_t show_dump_regs(struct device *dev, struct device_attribute *attr, char *buf) { struct pcf50633 *pcf = dev_get_drvdata(dev); u8 dump[16]; int n, n1, idx = 0; char *buf1 = buf; static u8 address_no_read[] = { PCF50633_REG_INT1, PCF50633_REG_INT2, PCF50633_REG_INT3, PCF50633_REG_INT4, PCF50633_REG_INT5, 0 }; for (n = 0; n < 256; n += sizeof(dump)) { for (n1 = 0; n1 < sizeof(dump); n1++) if (n == address_no_read[idx]) { idx++; dump[n1] = 0x00; } else dump[n1] = pcf50633_reg_read(pcf, n + n1); hex_dump_to_buffer(dump, sizeof(dump), 16, 1, buf1, 128, 0); buf1 += strlen(buf1); *buf1++ = '\n'; *buf1 = '\0'; } return buf1 - buf; }
static ssize_t lis302dl_dump(struct device *dev, struct device_attribute *attr, char *buf) { struct lis302dl_info *lis = dev_get_drvdata(dev); int n = 0; uint8_t reg[0x40]; char *end = buf; unsigned long flags; local_irq_save(flags); for (n = 0; n < sizeof(reg); n++) reg[n] = lis_reg_read(lis, n); local_irq_restore(flags); for (n = 0; n < sizeof(reg); n += 16) { hex_dump_to_buffer(reg + n, 16, 16, 1, end, 128, 0); end += strlen(end); *end++ = '\n'; *end++ = '\0'; } return end - buf; }
static void z180_dump_ringbuffer(struct kgsl_device *device) { unsigned int rb_size; unsigned int *rb_hostptr; unsigned int rb_words; unsigned int rb_gpuaddr; struct z180_device *z180_dev = Z180_DEVICE(device); unsigned int i; char linebuf[CHARS_PER_LINE]; KGSL_LOG_DUMP(device, "Z180 ringbuffer dump\n"); rb_hostptr = (unsigned int *) z180_dev->ringbuffer.cmdbufdesc.hostptr; rb_size = Z180_RB_SIZE; rb_gpuaddr = z180_dev->ringbuffer.cmdbufdesc.gpuaddr; rb_words = rb_size/sizeof(unsigned int); KGSL_LOG_DUMP(device, "ringbuffer size: %u\n", rb_size); KGSL_LOG_DUMP(device, "rb_words: %d\n", rb_words); for (i = 0; i < rb_words; i += WORDS_PER_LINE) { hex_dump_to_buffer(rb_hostptr+i, rb_size - i*sizeof(unsigned int), WORDS_PER_LINE*sizeof(unsigned int), sizeof(unsigned int), linebuf, sizeof(linebuf), false); KGSL_LOG_DUMP(device, "RB: %04X: %s\n", rb_gpuaddr + i*sizeof(unsigned int), linebuf); } }
/* * send msg to ISAR mailbox * if msg is NULL use isar->buf */ static int send_mbox(struct isar_hw *isar, u8 his, u8 creg, u8 len, u8 *msg) { if (!waitforHIA(isar, 1000)) return 0; pr_debug("send_mbox(%02x,%02x,%d)\n", his, creg, len); isar->write_reg(isar->hw, ISAR_CTRL_H, creg); isar->write_reg(isar->hw, ISAR_CTRL_L, len); isar->write_reg(isar->hw, ISAR_WADR, 0); if (!msg) msg = isar->buf; if (msg && len) { isar->write_fifo(isar->hw, ISAR_MBOX, msg, len); if (isar->ch[0].bch.debug & DEBUG_HW_BFIFO) { int l = 0; while (l < (int)len) { hex_dump_to_buffer(msg + l, len - l, 32, 1, isar->log, 256, 1); pr_debug("%s: %s %02x: %s\n", isar->name, __func__, l, isar->log); l += 32; } } } isar->write_reg(isar->hw, ISAR_HIS, his); waitforHIA(isar, 1000); return 1; }
static void debug_hexdump(struct debug_command *cmd, const char *arg, debug_printf_cb cb) { const u8 *ptr; unsigned groupsize; unsigned i, linelen; unsigned rowsize = 32; unsigned len; unsigned remaining; unsigned char linebuf[32 * 3 + 2 + 32 + 1]; if (sscanf(arg, "%u 0x%x@0x%x", &groupsize, &len, &ptr) != 3) { cb("Usage: %s 1|2|4|8 <hex size>@<hex VA address>\n", cmd->name); return; } remaining = len; for (i = 0; i < len; i += rowsize) { linelen = min(remaining, rowsize); remaining -= rowsize; cb("%p: ", ptr + i); if (!tlb_check((vaddr_t) (ptr + i), (vaddr_t) (ptr + linelen), true, false)) { cb("fault\n"); break; } hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, linebuf, sizeof(linebuf), true); cb("%s\n", linebuf); } }
int get_input_lines_info(struct hdpvr_device *dev) { #ifdef HDPVR_DEBUG char print_buf[9]; #endif int ret, lines; mutex_lock(&dev->usbc_mutex); ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), 0x81, 0x80 | 0x38, 0x1800, 0x0003, dev->usbc_buf, 3, 1000); #ifdef HDPVR_DEBUG if (hdpvr_debug & MSG_INFO) { hex_dump_to_buffer(dev->usbc_buf, 3, 16, 1, print_buf, sizeof(print_buf), 0); v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, "get input lines info returned: %d, %s\n", ret, print_buf); } #endif lines = dev->usbc_buf[1] << 8 | dev->usbc_buf[0]; mutex_unlock(&dev->usbc_mutex); return lines; }
/** * print_hex_dump - print a text hex dump to syslog for a binary blob of data * @level: kernel log level (e.g. KERN_DEBUG) * @prefix_str: string to prefix each line with; * caller supplies trailing spaces for alignment if desired * @prefix_type: controls whether prefix of an offset, address, or none * is printed (%DUMP_PREFIX_OFFSET, %DUMP_PREFIX_ADDRESS, %DUMP_PREFIX_NONE) * @rowsize: number of bytes to print per line; must be 16 or 32 * @groupsize: number of bytes to print at a time (1, 2, 4, 8; default = 1) * @buf: data blob to dump * @len: number of bytes in the @buf * @ascii: include ASCII after the hex output * * Given a buffer of u8 data, print_hex_dump() prints a hex + ASCII dump * to the kernel log at the specified kernel log level, with an optional * leading prefix. * * print_hex_dump() works on one "line" of output at a time, i.e., * 16 or 32 bytes of input data converted to hex + ASCII output. * print_hex_dump() iterates over the entire input @buf, breaking it into * "line size" chunks to format and print. * * E.g.: * print_hex_dump(KERN_DEBUG, "raw data: ", DUMP_PREFIX_ADDRESS, * 16, 1, frame->data, frame->len, true); * * Example output using %DUMP_PREFIX_OFFSET and 1-byte mode: * 0009ab42: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f @ABCDEFGHIJKLMNO * Example output using %DUMP_PREFIX_ADDRESS and 4-byte mode: * ffffffff88089af0: 73727170 77767574 7b7a7978 7f7e7d7c pqrstuvwxyz{|}~. */ void print_hex_dump(const char *level, const char *prefix_str, int prefix_type, int rowsize, int groupsize, const void *buf, size_t len, bool ascii) { const u8 *ptr = buf; int i, linelen, remaining = len; unsigned char linebuf[32 * 3 + 2 + 32 + 1]; if (rowsize != 16 && rowsize != 32) rowsize = 16; for (i = 0; i < len; i += rowsize) { linelen = min(remaining, rowsize); remaining -= rowsize; hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, linebuf, sizeof(linebuf), ascii); switch (prefix_type) { case DUMP_PREFIX_ADDRESS: printk("%s%s%p: %s\n", level, prefix_str, ptr + i, linebuf); break; case DUMP_PREFIX_OFFSET: printk("%s%s%.8x: %s\n", level, prefix_str, i, linebuf); break; default: printk("%s%s%s\n", level, prefix_str, linebuf); break; } } }
static void __init test_hexdump(size_t len, int rowsize, int groupsize, bool ascii) { char test[32 * 3 + 2 + 32 + 1]; char real[32 * 3 + 2 + 32 + 1]; char *p; const char **result; size_t l = len; int gs = groupsize, rs = rowsize; unsigned int i; hex_dump_to_buffer(data_b, l, rs, gs, real, sizeof(real), ascii); if (rs != 16 && rs != 32) rs = 16; if (l > rs) l = rs; if (!is_power_of_2(gs) || gs > 8 || (len % gs != 0)) gs = 1; if (gs == 8) result = test_data_8_le; else if (gs == 4) result = test_data_4_le; else if (gs == 2) result = test_data_2_le; else result = test_data_1_le; memset(test, ' ', sizeof(test)); /* hex dump */ p = test; for (i = 0; i < l / gs; i++) { const char *q = *result++; size_t amount = strlen(q); strncpy(p, q, amount); p += amount + 1; } if (i) p--; /* ASCII part */ if (ascii) { p = test + rs * 2 + rs / gs + 1; strncpy(p, data_a, l); p += l; } *p = '\0'; if (strcmp(test, real)) { pr_err("Len: %zu row: %d group: %d\n", len, rowsize, groupsize); pr_err("Result: '%s'\n", real); pr_err("Expect: '%s'\n", test); } }
static void wil_seq_hexdump(struct seq_file *s, void *p, int len, const char *prefix) { char printbuf[16 * 3 + 2]; int i = 0; while (i < len) { int l = min(len - i, 16); hex_dump_to_buffer(p + i, l, 16, 1, printbuf, sizeof(printbuf), false); seq_printf(s, "%s%s\n", prefix, printbuf); i += l; } }
static ssize_t mbox_test_message_read(struct file *filp, char __user *userbuf, size_t count, loff_t *ppos) { struct mbox_test_device *tdev = filp->private_data; unsigned long flags; char *touser, *ptr; int l = 0; int ret; touser = kzalloc(MBOX_HEXDUMP_MAX_LEN + 1, GFP_KERNEL); if (!touser) return -ENOMEM; if (!tdev->rx_channel) { ret = snprintf(touser, 20, "<NO RX CAPABILITY>\n"); ret = simple_read_from_buffer(userbuf, count, ppos, touser, ret); goto out; } if (tdev->rx_buffer[0] == '\0') { ret = snprintf(touser, 9, "<EMPTY>\n"); ret = simple_read_from_buffer(userbuf, count, ppos, touser, ret); goto out; } spin_lock_irqsave(&tdev->lock, flags); ptr = tdev->rx_buffer; while (l < MBOX_HEXDUMP_MAX_LEN) { hex_dump_to_buffer(ptr, MBOX_BYTES_PER_LINE, MBOX_BYTES_PER_LINE, 1, touser + l, MBOX_HEXDUMP_LINE_LEN, true); ptr += MBOX_BYTES_PER_LINE; l += MBOX_HEXDUMP_LINE_LEN; *(touser + (l - 1)) = '\n'; } *(touser + l) = '\0'; memset(tdev->rx_buffer, 0, MBOX_MAX_MSG_LEN); spin_unlock_irqrestore(&tdev->lock, flags); ret = simple_read_from_buffer(userbuf, count, ppos, touser, MBOX_HEXDUMP_MAX_LEN); out: kfree(touser); return ret; }
static void ufsdbg_pr_buf_to_std(struct seq_file *file, void *buff, int size, char *str) { int i; char linebuf[38]; int lines = size/BUFF_LINE_CAPACITY + (size % BUFF_LINE_CAPACITY ? 1 : 0); for (i = 0; i < lines; i++) { hex_dump_to_buffer(buff + i * BUFF_LINE_CAPACITY, BUFF_LINE_CAPACITY, BUFF_LINE_CAPACITY, 4, linebuf, sizeof(linebuf), false); seq_printf(file, "%s [%x]: %s\n", str, i * BUFF_LINE_CAPACITY, linebuf); } }
static int wil_txdesc_debugfs_show(struct seq_file *s, void *data) { struct wil6210_priv *wil = s->private; struct vring *vring = &(wil->vring_tx[0]); if (!vring->va) { seq_printf(s, "No Tx VRING\n"); return 0; } if (dbg_txdesc_index < vring->size) { volatile struct vring_tx_desc *d = &(vring->va[dbg_txdesc_index].tx); volatile u32 *u = (volatile u32 *)d; struct sk_buff *skb = vring->ctx[dbg_txdesc_index]; seq_printf(s, "Tx[%3d] = {\n", dbg_txdesc_index); seq_printf(s, " MAC = 0x%08x 0x%08x 0x%08x 0x%08x\n", u[0], u[1], u[2], u[3]); seq_printf(s, " DMA = 0x%08x 0x%08x 0x%08x 0x%08x\n", u[4], u[5], u[6], u[7]); seq_printf(s, " SKB = %p\n", skb); if (skb) { char printbuf[16 * 3 + 2]; int i = 0; int len = skb_headlen(skb); void *p = skb->data; seq_printf(s, " len = %d\n", len); while (i < len) { int l = min(len - i, 16); hex_dump_to_buffer(p + i, l, 16, 1, printbuf, sizeof(printbuf), false); seq_printf(s, " : %s\n", printbuf); i += l; } } seq_printf(s, "}\n"); } else { seq_printf(s, "TxDesc index (%d) >= size (%d)\n", dbg_txdesc_index, vring->size); } return 0; }
static ssize_t il_dbgfs_nvm_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { ssize_t ret; struct il_priv *il = file->private_data; int pos = 0, ofs = 0, buf_size = 0; const u8 *ptr; char *buf; u16 eeprom_ver; size_t eeprom_len = il->cfg->eeprom_size; buf_size = 4 * eeprom_len + 256; if (eeprom_len % 16) { IL_ERR("NVM size is not multiple of 16.\n"); return -ENODATA; } ptr = il->eeprom; if (!ptr) { IL_ERR("Invalid EEPROM memory\n"); return -ENOMEM; } /* 4 characters for byte 0xYY */ buf = kzalloc(buf_size, GFP_KERNEL); if (!buf) { IL_ERR("Can not allocate Buffer\n"); return -ENOMEM; } eeprom_ver = il_eeprom_query16(il, EEPROM_VERSION); pos += scnprintf(buf + pos, buf_size - pos, "EEPROM " "version: 0x%x\n", eeprom_ver); for (ofs = 0; ofs < eeprom_len; ofs += 16) { pos += scnprintf(buf + pos, buf_size - pos, "0x%.4x ", ofs); hex_dump_to_buffer(ptr + ofs, 16, 16, 2, buf + pos, buf_size - pos, 0); pos += strlen(buf + pos); if (buf_size - pos > 0) buf[pos++] = '\n'; } ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos); kfree(buf); return ret; }
static void __init test_hexdump_overflow(size_t buflen, size_t len, int rowsize, int groupsize, bool ascii) { char test[TEST_HEXDUMP_BUF_SIZE]; char buf[TEST_HEXDUMP_BUF_SIZE]; int rs = rowsize, gs = groupsize; int ae, he, e, f, r; bool a; total_tests++; memset(buf, FILL_CHAR, sizeof(buf)); r = hex_dump_to_buffer(data_b, len, rs, gs, buf, buflen, ascii); /* * Caller must provide the data length multiple of groupsize. The * calculations below are made with that assumption in mind. */ ae = rs * 2 /* hex */ + rs / gs /* spaces */ + 1 /* space */ + len /* ascii */; he = (gs * 2 /* hex */ + 1 /* space */) * len / gs - 1 /* no trailing space */; if (ascii) e = ae; else e = he; f = min_t(int, e + 1, buflen); if (buflen) { test_hexdump_prepare_test(len, rs, gs, test, sizeof(test), ascii); test[f - 1] = '\0'; } memset(test + f, FILL_CHAR, sizeof(test) - f); a = r == e && !memcmp(test, buf, TEST_HEXDUMP_BUF_SIZE); buf[sizeof(buf) - 1] = '\0'; if (!a) { pr_err("Len: %zu buflen: %zu strlen: %zu\n", len, buflen, strnlen(buf, sizeof(buf))); pr_err("Result: %d '%s'\n", r, buf); pr_err("Expect: %d '%s'\n", e, test); failed_tests++; } }
static ssize_t iwl_dbgfs_nvm_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { ssize_t ret; struct iwl_priv *priv = (struct iwl_priv *)file->private_data; int pos = 0, ofs = 0, buf_size = 0; const u8 *ptr; char *buf; size_t eeprom_len = priv->cfg->eeprom_size; buf_size = 4 * eeprom_len + 256; if (eeprom_len % 16) { IWL_ERR(priv, "NVM size is not multiple of 16.\n"); return -ENODATA; } ptr = priv->eeprom; if (!ptr) { IWL_ERR(priv, "Invalid EEPROM/OTP memory\n"); return -ENOMEM; } /* 4 characters for byte 0xYY */ buf = kzalloc(buf_size, GFP_KERNEL); if (!buf) { IWL_ERR(priv, "Can not allocate Buffer\n"); return -ENOMEM; } pos += scnprintf(buf + pos, buf_size - pos, "NVM Type: %s\n", (priv->nvm_device_type == NVM_DEVICE_TYPE_OTP) ? "OTP" : "EEPROM"); for (ofs = 0 ; ofs < eeprom_len ; ofs += 16) { pos += scnprintf(buf + pos, buf_size - pos, "0x%.4x ", ofs); hex_dump_to_buffer(ptr + ofs, 16 , 16, 2, buf + pos, buf_size - pos, 0); pos += strlen(buf); if (buf_size - pos > 0) buf[pos++] = '\n'; } ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos); kfree(buf); return ret; }
void print_hex_dump(int rowsize, int groupsize, const void *buf, size_t len, bool ascii) { const uint8_t *ptr = buf; int i, linelen, remaining = len; unsigned char linebuf[200]; if (rowsize != 16 && rowsize != 32) rowsize = 16; for (i = 0; i < len; i += rowsize) { linelen = ((remaining) < (rowsize) ? (remaining) : (rowsize)); remaining -= rowsize; hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, linebuf, sizeof(linebuf), ascii); printf("%s\n", linebuf); } }
struct hdpvr_video_info *get_video_info(struct hdpvr_device *dev) { struct hdpvr_video_info *vidinf = NULL; #ifdef HDPVR_DEBUG char print_buf[15]; #endif int ret; vidinf = kzalloc(sizeof(struct hdpvr_video_info), GFP_KERNEL); if (!vidinf) { v4l2_err(&dev->v4l2_dev, "out of memory\n"); goto err; } mutex_lock(&dev->usbc_mutex); ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), 0x81, 0x80 | 0x38, 0x1400, 0x0003, dev->usbc_buf, 5, 1000); if (ret == 5) { vidinf->width = dev->usbc_buf[1] << 8 | dev->usbc_buf[0]; vidinf->height = dev->usbc_buf[3] << 8 | dev->usbc_buf[2]; vidinf->fps = dev->usbc_buf[4]; } #ifdef HDPVR_DEBUG if (hdpvr_debug & MSG_INFO) { hex_dump_to_buffer(dev->usbc_buf, 5, 16, 1, print_buf, sizeof(print_buf), 0); v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, "get video info returned: %d, %s\n", ret, print_buf); } #endif mutex_unlock(&dev->usbc_mutex); if (!vidinf->width || !vidinf->height || !vidinf->fps) { kfree(vidinf); vidinf = NULL; } err: return vidinf; }
static int kgsl_hex_dump(const char *prefix, int c, uint8_t *data, int rowc, int linec, char __user *buff) { int ss; /* Prefix of 20 chars max, 32 bytes per row, in groups of four - that's * 8 groups at 8 chars per group plus a space, plus new-line, plus * ending character */ char linebuf[20 + 64 + 1 + 1]; ss = snprintf(linebuf, sizeof(linebuf), prefix, c); hex_dump_to_buffer(data, linec, rowc, 4, linebuf+ss, sizeof(linebuf)-ss, 0); strlcat(linebuf, "\n", sizeof(linebuf)); linebuf[sizeof(linebuf)-1] = 0; ss = strlen(linebuf); if (copy_to_user(buff, linebuf, ss+1)) return -EFAULT; return ss; }
static void __hexdump(void *mem, unsigned long size) { #define WORDS_PER_LINE 4 #define WORD_SIZE 4 #define LINE_SIZE (WORDS_PER_LINE * WORD_SIZE) #define LINE_BUF_SIZE (WORDS_PER_LINE * WORD_SIZE * 3 \ + WORDS_PER_LINE + 4) unsigned long addr; char linebuf[LINE_BUF_SIZE]; int numline = size / LINE_SIZE; int i; for (i = 0; i < numline; i++) { addr = (unsigned long)mem + i * LINE_SIZE; hex_dump_to_buffer((const void *)addr, LINE_SIZE, LINE_SIZE, WORD_SIZE, linebuf, sizeof(linebuf), 1); pr_info(" %lx : %s\n", addr, linebuf); } }
void fbtft_dbg_hex(const struct device *dev, int groupsize, void *buf, size_t len, const char *fmt, ...) { va_list args; static char textbuf[512]; char *text = textbuf; size_t text_len; va_start(args, fmt); text_len = vscnprintf(text, sizeof(textbuf), fmt, args); va_end(args); hex_dump_to_buffer(buf, len, 32, groupsize, text + text_len, 512 - text_len, false); if (len > 32) dev_info(dev, "%s ...\n", text); else dev_info(dev, "%s\n", text); }
void visorchannel_dump_section(VISORCHANNEL *chan, char *s, int off, int len, struct seq_file *seq) { char *buf, *tbuf, *fmtbuf; int fmtbufsize = 0; int i; int errcode = 0; fmtbufsize = 100 * COVQ(len, 16); buf = kmalloc(len, GFP_KERNEL|__GFP_NORETRY); fmtbuf = kmalloc(fmtbufsize, GFP_KERNEL|__GFP_NORETRY); if (buf == NULL || fmtbuf == NULL) goto Away; errcode = visorchannel_read(chan, off, buf, len); if (errcode < 0) { ERRDRV("%s failed to read %s from channel errcode=%d", s, __func__, errcode); goto Away; } seq_printf(seq, "channel %s:\n", s); tbuf = buf; while (len > 0) { i = (len < 16) ? len : 16; hex_dump_to_buffer(tbuf, i, 16, 1, fmtbuf, fmtbufsize, TRUE); seq_printf(seq, "%s\n", fmtbuf); tbuf += 16; len -= 16; } Away: if (buf != NULL) { kfree(buf); buf = NULL; } if (fmtbuf != NULL) { kfree(fmtbuf); fmtbuf = NULL; } }
/** * print_hex_dump - print a text hex dump to syslog for a binary blob of data * @level: kernel log level (e.g. KERN_DEBUG) * @prefix_str: string to prefix each line with; * caller supplies trailing spaces for alignment if desired * @rowsize: number of bytes to print per line; must be 16 or 32 * @groupsize: number of bytes to print at a time (1, 2, 4, 8; default = 1) * @buf: data blob to dump * @len: number of bytes in the @buf * @ascii: include ASCII after the hex output * * Given a buffer of u8 data, print_hex_dump() prints a hex + ASCII dump * to the kernel log at the specified kernel log level, with an optional * leading prefix. * * print_hex_dump() works on one "line" of output at a time, i.e., * 16 or 32 bytes of input data converted to hex + ASCII output. * print_hex_dump() iterates over the entire input @buf, breaking it into * "line size" chunks to format and print. * * E.g.: * print_hex_dump(LOG_NOTICE, "data: ", 16, 1, frame->data, frame->len, 0); */ void print_hex_dump(log_module_level_t level, const char *prefix_str, int rowsize, int groupsize, const void *buf, int len, int ascii) { const uint8_t *ptr = buf; int i, linelen, remaining = len; char linebuf[32 * 3 + 2 + 32 + 1]; if (rowsize != 16 && rowsize != 32) rowsize = 16; for (i = 0; i < len; i += rowsize) { linelen = min(remaining, rowsize); remaining -= rowsize; hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, linebuf, sizeof(linebuf), ascii); LOG(lm_main, level, ("%s%s\n", prefix_str, linebuf)); } }
/* * receive message from ISAR mailbox * if msg is NULL use isar->buf */ static void rcv_mbox(struct isar_hw *isar, u8 *msg) { if (!msg) msg = isar->buf; isar->write_reg(isar->hw, ISAR_RADR, 0); if (msg && isar->clsb) { isar->read_fifo(isar->hw, ISAR_MBOX, msg, isar->clsb); if (isar->ch[0].bch.debug & DEBUG_HW_BFIFO) { int l = 0; while (l < (int)isar->clsb) { hex_dump_to_buffer(msg + l, isar->clsb - l, 32, 1, isar->log, 256, 1); pr_debug("%s: %s %02x: %s\n", isar->name, __func__, l, isar->log); l += 32; } } } isar->write_reg(isar->hw, ISAR_IIA, 0); }
static char * get_hex_data(char *dbuf, struct urb *urb, int event, int status, size_t max_len) { char *ubuf = urb->transfer_buffer; size_t len = event ? urb->actual_length : urb->transfer_buffer_length; if (status == -EINPROGRESS) status = 0; /*Only dump ep in completions and epout submissions*/ if (len && !status && ((usb_urb_dir_in(urb) && event) || (usb_urb_dir_in(urb) && !event))) { if (len >= max_len) len = max_len; hex_dump_to_buffer(ubuf, len, 32, 4, dbuf, HEX_DUMP_LEN, 0); } else { dbuf = ""; } return dbuf; }
static void __init test_hexdump_overflow(bool ascii) { char buf[56]; const char *t = test_data_1_le[0]; size_t l = get_random_int() % sizeof(buf); bool a; int e, r; memset(buf, ' ', sizeof(buf)); r = hex_dump_to_buffer(data_b, 1, 16, 1, buf, l, ascii); if (ascii) e = 50; else e = 2; buf[e + 2] = '\0'; if (!l) { a = r == e && buf[0] == ' '; } else if (l < 3) { a = r == e && buf[0] == '\0'; } else if (l < 4) { a = r == e && !strcmp(buf, t); } else if (ascii) { if (l < 51) a = r == e && buf[l - 1] == '\0' && buf[l - 2] == ' '; else a = r == e && buf[50] == '\0' && buf[49] == '.'; } else { a = r == e && buf[e] == '\0'; } if (!a) { pr_err("Len: %zu rc: %u strlen: %zu\n", l, r, strlen(buf)); pr_err("Result: '%s'\n", buf); } }
static char *get_hex_data(char *dbuf, struct urb *urb, int event, int status) { int ep_addr = urb->ep->desc.bEndpointAddress; char *ubuf = urb->transfer_buffer; size_t len = event ? urb->actual_length : urb->transfer_buffer_length; if (status == -EINPROGRESS) status = 0; /*Only dump ep in completions and epout submissions*/ if (len && !status && (((ep_addr & USB_DIR_IN) && event) || (!(ep_addr & USB_DIR_IN) && !event))) { if (len >= 32) len = 32; hex_dump_to_buffer(ubuf, len, 32, 4, dbuf, HEX_DUMP_LEN, 0); } else { dbuf = ""; } return dbuf; }
static void __init test_hexdump(size_t len, int rowsize, int groupsize, bool ascii) { char test[TEST_HEXDUMP_BUF_SIZE]; char real[TEST_HEXDUMP_BUF_SIZE]; total_tests++; memset(real, FILL_CHAR, sizeof(real)); hex_dump_to_buffer(data_b, len, rowsize, groupsize, real, sizeof(real), ascii); memset(test, FILL_CHAR, sizeof(test)); test_hexdump_prepare_test(len, rowsize, groupsize, test, sizeof(test), ascii); if (memcmp(test, real, TEST_HEXDUMP_BUF_SIZE)) { pr_err("Len: %zu row: %d group: %d\n", len, rowsize, groupsize); pr_err("Result: '%s'\n", real); pr_err("Expect: '%s'\n", test); failed_tests++; } }
bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector) { struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; u8 msg[DP_DPCD_SIZE]; int ret; char dpcd_hex_dump[DP_DPCD_SIZE * 3]; ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, DP_DPCD_SIZE); if (ret > 0) { memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); hex_dump_to_buffer(dig_connector->dpcd, sizeof(dig_connector->dpcd), 32, 1, dpcd_hex_dump, sizeof(dpcd_hex_dump), false); DRM_DEBUG_KMS("DPCD: %s\n", dpcd_hex_dump); radeon_dp_probe_oui(radeon_connector); return true; } dig_connector->dpcd[0] = 0; return false; }
static irqreturn_t wcd9xxx_irq_thread(int irq, void *data) { int ret; int i; struct intr_data irqdata; char linebuf[128]; static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 1); struct wcd9xxx_core_resource *wcd9xxx_res = data; int num_irq_regs = wcd9xxx_res->num_irq_regs; u8 status[num_irq_regs], status1[num_irq_regs]; if (unlikely(wcd9xxx_lock_sleep(wcd9xxx_res) == false)) { dev_err(wcd9xxx_res->dev, "Failed to hold suspend\n"); return IRQ_NONE; } if (!wcd9xxx_res->codec_bulk_read) { dev_err(wcd9xxx_res->dev, "%s: Codec Bulk Register read callback not supplied\n", __func__); goto err_disable_irq; } ret = wcd9xxx_res->codec_bulk_read(wcd9xxx_res, WCD9XXX_A_INTR_STATUS0, num_irq_regs, status); if (ret < 0) { dev_err(wcd9xxx_res->dev, "Failed to read interrupt status: %d\n", ret); goto err_disable_irq; } for (i = 0; i < num_irq_regs; i++) status[i] &= ~wcd9xxx_res->irq_masks_cur[i]; memcpy(status1, status, sizeof(status1)); for (i = 0; i < wcd9xxx_res->intr_table_size; i++) { irqdata = wcd9xxx_res->intr_table[i]; if (status[BIT_BYTE(irqdata.intr_num)] & BYTE_BIT_MASK(irqdata.intr_num)) { wcd9xxx_irq_dispatch(wcd9xxx_res, &irqdata); status1[BIT_BYTE(irqdata.intr_num)] &= ~BYTE_BIT_MASK(irqdata.intr_num); } } if (unlikely(!memcmp(status, status1, sizeof(status)))) { if (__ratelimit(&ratelimit)) { pr_warn("%s: Unhandled irq found\n", __func__); hex_dump_to_buffer(status, sizeof(status), 16, 1, linebuf, sizeof(linebuf), false); pr_warn("%s: status0 : %s\n", __func__, linebuf); hex_dump_to_buffer(status1, sizeof(status1), 16, 1, linebuf, sizeof(linebuf), false); pr_warn("%s: status1 : %s\n", __func__, linebuf); } memset(status, 0xff, num_irq_regs); wcd9xxx_res->codec_bulk_write(wcd9xxx_res, WCD9XXX_A_INTR_CLEAR0, num_irq_regs, status); if (wcd9xxx_get_intf_type() == WCD9XXX_INTERFACE_TYPE_I2C) wcd9xxx_res->codec_reg_write(wcd9xxx_res, WCD9XXX_A_INTR_MODE, 0x02); } wcd9xxx_unlock_sleep(wcd9xxx_res); return IRQ_HANDLED; err_disable_irq: dev_err(wcd9xxx_res->dev, "Disable irq %d\n", wcd9xxx_res->irq); disable_irq_wake(wcd9xxx_res->irq); disable_irq_nosync(wcd9xxx_res->irq); wcd9xxx_unlock_sleep(wcd9xxx_res); return IRQ_NONE; }
static int _osd_print_system_info(struct osd_dev *od, void *caps) { struct osd_request *or; struct osd_attr get_attrs[] = { ATTR_DEF_RI(OSD_ATTR_RI_VENDOR_IDENTIFICATION, 8), ATTR_DEF_RI(OSD_ATTR_RI_PRODUCT_IDENTIFICATION, 16), ATTR_DEF_RI(OSD_ATTR_RI_PRODUCT_MODEL, 32), ATTR_DEF_RI(OSD_ATTR_RI_PRODUCT_REVISION_LEVEL, 4), ATTR_DEF_RI(OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER, 64 /*variable*/), ATTR_DEF_RI(OSD_ATTR_RI_OSD_NAME, 64 /*variable*/), ATTR_DEF_RI(OSD_ATTR_RI_TOTAL_CAPACITY, 8), ATTR_DEF_RI(OSD_ATTR_RI_USED_CAPACITY, 8), ATTR_DEF_RI(OSD_ATTR_RI_NUMBER_OF_PARTITIONS, 8), ATTR_DEF_RI(OSD_ATTR_RI_CLOCK, 6), /* IBM-OSD-SIM Has a bug with this one put it last */ ATTR_DEF_RI(OSD_ATTR_RI_OSD_SYSTEM_ID, 20), }; void *iter = NULL, *pFirst; int nelem = ARRAY_SIZE(get_attrs), a = 0; int ret; or = osd_start_request(od, GFP_KERNEL); if (!or) return -ENOMEM; /* get attrs */ osd_req_get_attributes(or, &osd_root_object); osd_req_add_get_attr_list(or, get_attrs, ARRAY_SIZE(get_attrs)); ret = osd_finalize_request(or, 0, caps, NULL); if (ret) goto out; ret = osd_execute_request(or); if (ret) { OSD_ERR("Failed to detect %s => %d\n", _osd_ver_desc(or), ret); goto out; } osd_req_decode_get_attr_list(or, get_attrs, &nelem, &iter); OSD_INFO("Detected %s device\n", _osd_ver_desc(or)); pFirst = get_attrs[a++].val_ptr; OSD_INFO("VENDOR_IDENTIFICATION [%s]\n", (char *)pFirst); pFirst = get_attrs[a++].val_ptr; OSD_INFO("PRODUCT_IDENTIFICATION [%s]\n", (char *)pFirst); pFirst = get_attrs[a++].val_ptr; OSD_INFO("PRODUCT_MODEL [%s]\n", (char *)pFirst); pFirst = get_attrs[a++].val_ptr; OSD_INFO("PRODUCT_REVISION_LEVEL [%u]\n", pFirst ? get_unaligned_be32(pFirst) : ~0U); pFirst = get_attrs[a++].val_ptr; OSD_INFO("PRODUCT_SERIAL_NUMBER [%s]\n", (char *)pFirst); pFirst = get_attrs[a].val_ptr; OSD_INFO("OSD_NAME [%s]\n", (char *)pFirst); a++; pFirst = get_attrs[a++].val_ptr; OSD_INFO("TOTAL_CAPACITY [0x%llx]\n", pFirst ? _LLU(get_unaligned_be64(pFirst)) : ~0ULL); pFirst = get_attrs[a++].val_ptr; OSD_INFO("USED_CAPACITY [0x%llx]\n", pFirst ? _LLU(get_unaligned_be64(pFirst)) : ~0ULL); pFirst = get_attrs[a++].val_ptr; OSD_INFO("NUMBER_OF_PARTITIONS [%llu]\n", pFirst ? _LLU(get_unaligned_be64(pFirst)) : ~0ULL); if (a >= nelem) goto out; /* FIXME: Where are the time utilities */ pFirst = get_attrs[a++].val_ptr; OSD_INFO("CLOCK [0x%02x%02x%02x%02x%02x%02x]\n", ((char *)pFirst)[0], ((char *)pFirst)[1], ((char *)pFirst)[2], ((char *)pFirst)[3], ((char *)pFirst)[4], ((char *)pFirst)[5]); if (a < nelem) { /* IBM-OSD-SIM bug, Might not have it */ unsigned len = get_attrs[a].len; char sid_dump[32*4 + 2]; /* 2nibbles+space+ASCII */ hex_dump_to_buffer(get_attrs[a].val_ptr, len, 32, 1, sid_dump, sizeof(sid_dump), true); OSD_INFO("OSD_SYSTEM_ID(%d)\n" " [%s]\n", len, sid_dump); a++; } out: osd_end_request(or); return ret; }