static void iwm_sdio_isr_worker(struct work_struct *work) { struct iwm_sdio_priv *hw; struct iwm_priv *iwm; struct iwm_rx_info *rx_info; struct sk_buff *skb; u8 *rx_buf; unsigned long rx_size; hw = container_of(work, struct iwm_sdio_priv, isr_worker); iwm = hw_to_iwm(hw); while (!skb_queue_empty(&iwm->rx_list)) { skb = skb_dequeue(&iwm->rx_list); rx_info = skb_to_rx_info(skb); rx_size = rx_info->rx_size; rx_buf = skb->data; IWM_HEXDUMP(iwm, DBG, SDIO, "RX: ", rx_buf, rx_size); if (iwm_rx_handle(iwm, rx_buf, rx_size) < 0) IWM_WARN(iwm, "RX error\n"); kfree_skb(skb); } }
int iwm_eeprom_init(struct iwm_priv *iwm) { int i, ret = 0; char name[32]; iwm->eeprom = kzalloc(IWM_EEPROM_LEN, GFP_KERNEL); if (!iwm->eeprom) return -ENOMEM; for (i = IWM_EEPROM_FIRST; i < IWM_EEPROM_LAST; i++) { ret = iwm_eeprom_read(iwm, i); if (ret < 0) { IWM_ERR(iwm, "Couldn't read eeprom entry #%d: %s\n", i, eeprom_map[i].name); break; } } IWM_DBG_BOOT(iwm, DBG, "EEPROM dump:\n"); for (i = IWM_EEPROM_FIRST; i < IWM_EEPROM_LAST; i++) { memset(name, 0, 32); sprintf(name, "%s: ", eeprom_map[i].name); IWM_HEXDUMP(iwm, DBG, BOOT, name, iwm->eeprom + eeprom_map[i].offset, eeprom_map[i].length); } return ret; }