#include "/usr/src/ql2200_fw.c" int qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr) { int jj=0; int rval, num, i; uint32_t cnt; uint16_t *risc_code; uint32_t risc_addr, risc_size; uint16_t *req_ring; rval = QLA_SUCCESS; *srisc_addr = fw2200tp_addr01; while (jj==0) { risc_code = fw2200tp_code01; risc_size = fw2200tp_length01; risc_addr = fw2200tp_addr01; num = 0; rval = 0; while (risc_size > 0 && !rval) { cnt = (uint16_t)(ha->fw_transfer_size >> 1); if (cnt > risc_size) cnt = risc_size; DEBUG7(printk("scsi(%ld): Loading risc segment@ " "addr %p, number of bytes 0x%x, offset 0x%lx.\n", ha->host_no, risc_code, cnt, risc_addr)); req_ring = (uint16_t *)ha->request_ring; for (i = 0; i < cnt; i++) req_ring[i] = cpu_to_le16(risc_code[i]); rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr, cnt); if (rval) { DEBUG(printk("scsi(%ld): [ERROR] Failed to " "load segment %d of firmware\n", ha->host_no, num)); qla_printk(KERN_WARNING, ha, "[ERROR] Failed to load segment %d of " "firmware\n", num); qla2x00_dump_regs(ha); break; } risc_code += cnt; risc_addr += cnt; risc_size -= cnt; num++; } /* Next firmware sequence */ jj++; } return rval; }