Lines Matching full:fru
6146 * FRU specific functions
6156 struct bfa_fru_s *fru = cbarg; in bfa_fru_notify() local
6158 bfa_trc(fru, event); in bfa_fru_notify()
6163 if (fru->op_busy) { in bfa_fru_notify()
6164 fru->status = BFA_STATUS_IOC_FAILURE; in bfa_fru_notify()
6165 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_notify()
6166 fru->op_busy = 0; in bfa_fru_notify()
6176 * Send fru write request.
6183 struct bfa_fru_s *fru = cbarg; in bfa_fru_write_send() local
6185 (struct bfi_fru_write_req_s *) fru->mb.msg; in bfa_fru_write_send()
6188 msg->offset = cpu_to_be32(fru->addr_off + fru->offset); in bfa_fru_write_send()
6189 len = (fru->residue < BFA_FRU_DMA_BUF_SZ) ? in bfa_fru_write_send()
6190 fru->residue : BFA_FRU_DMA_BUF_SZ; in bfa_fru_write_send()
6196 msg->last = (len == fru->residue) ? 1 : 0; in bfa_fru_write_send()
6198 msg->trfr_cmpl = (len == fru->residue) ? fru->trfr_cmpl : 0; in bfa_fru_write_send()
6199 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); in bfa_fru_write_send()
6200 bfa_alen_set(&msg->alen, len, fru->dbuf_pa); in bfa_fru_write_send()
6202 memcpy(fru->dbuf_kva, fru->ubuf + fru->offset, len); in bfa_fru_write_send()
6203 bfa_ioc_mbox_queue(fru->ioc, &fru->mb); in bfa_fru_write_send()
6205 fru->residue -= len; in bfa_fru_write_send()
6206 fru->offset += len; in bfa_fru_write_send()
6210 * Send fru read request.
6217 struct bfa_fru_s *fru = cbarg; in bfa_fru_read_send() local
6219 (struct bfi_fru_read_req_s *) fru->mb.msg; in bfa_fru_read_send()
6222 msg->offset = cpu_to_be32(fru->addr_off + fru->offset); in bfa_fru_read_send()
6223 len = (fru->residue < BFA_FRU_DMA_BUF_SZ) ? in bfa_fru_read_send()
6224 fru->residue : BFA_FRU_DMA_BUF_SZ; in bfa_fru_read_send()
6226 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); in bfa_fru_read_send()
6227 bfa_alen_set(&msg->alen, len, fru->dbuf_pa); in bfa_fru_read_send()
6228 bfa_ioc_mbox_queue(fru->ioc, &fru->mb); in bfa_fru_read_send()
6239 /* min driver doesn't need fru */ in bfa_fru_meminfo()
6249 * @param[in] fru - fru structure
6256 bfa_fru_attach(struct bfa_fru_s *fru, struct bfa_ioc_s *ioc, void *dev, in bfa_fru_attach() argument
6259 fru->ioc = ioc; in bfa_fru_attach()
6260 fru->trcmod = trcmod; in bfa_fru_attach()
6261 fru->cbfn = NULL; in bfa_fru_attach()
6262 fru->cbarg = NULL; in bfa_fru_attach()
6263 fru->op_busy = 0; in bfa_fru_attach()
6265 bfa_ioc_mbox_regisr(fru->ioc, BFI_MC_FRU, bfa_fru_intr, fru); in bfa_fru_attach()
6266 bfa_q_qe_init(&fru->ioc_notify); in bfa_fru_attach()
6267 bfa_ioc_notify_init(&fru->ioc_notify, bfa_fru_notify, fru); in bfa_fru_attach()
6268 list_add_tail(&fru->ioc_notify.qe, &fru->ioc->notify_q); in bfa_fru_attach()
6270 /* min driver doesn't need fru */ in bfa_fru_attach()
6272 fru->dbuf_kva = NULL; in bfa_fru_attach()
6273 fru->dbuf_pa = 0; in bfa_fru_attach()
6278 * Claim memory for fru
6280 * @param[in] fru - fru structure
6286 bfa_fru_memclaim(struct bfa_fru_s *fru, u8 *dm_kva, u64 dm_pa, in bfa_fru_memclaim() argument
6292 fru->dbuf_kva = dm_kva; in bfa_fru_memclaim()
6293 fru->dbuf_pa = dm_pa; in bfa_fru_memclaim()
6294 memset(fru->dbuf_kva, 0, BFA_FRU_DMA_BUF_SZ); in bfa_fru_memclaim()
6300 * Update fru vpd image.
6302 * @param[in] fru - fru structure
6312 bfa_fruvpd_update(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset, in bfa_fruvpd_update() argument
6315 bfa_trc(fru, BFI_FRUVPD_H2I_WRITE_REQ); in bfa_fruvpd_update()
6316 bfa_trc(fru, len); in bfa_fruvpd_update()
6317 bfa_trc(fru, offset); in bfa_fruvpd_update()
6319 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2 && in bfa_fruvpd_update()
6320 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_update()
6323 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK) in bfa_fruvpd_update()
6326 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_update()
6329 if (fru->op_busy) { in bfa_fruvpd_update()
6330 bfa_trc(fru, fru->op_busy); in bfa_fruvpd_update()
6334 fru->op_busy = 1; in bfa_fruvpd_update()
6336 fru->cbfn = cbfn; in bfa_fruvpd_update()
6337 fru->cbarg = cbarg; in bfa_fruvpd_update()
6338 fru->residue = len; in bfa_fruvpd_update()
6339 fru->offset = 0; in bfa_fruvpd_update()
6340 fru->addr_off = offset; in bfa_fruvpd_update()
6341 fru->ubuf = buf; in bfa_fruvpd_update()
6342 fru->trfr_cmpl = trfr_cmpl; in bfa_fruvpd_update()
6344 bfa_fru_write_send(fru, BFI_FRUVPD_H2I_WRITE_REQ); in bfa_fruvpd_update()
6350 * Read fru vpd image.
6352 * @param[in] fru - fru structure
6362 bfa_fruvpd_read(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset, in bfa_fruvpd_read() argument
6365 bfa_trc(fru, BFI_FRUVPD_H2I_READ_REQ); in bfa_fruvpd_read()
6366 bfa_trc(fru, len); in bfa_fruvpd_read()
6367 bfa_trc(fru, offset); in bfa_fruvpd_read()
6369 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_fruvpd_read()
6372 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK && in bfa_fruvpd_read()
6373 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_read()
6376 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_read()
6379 if (fru->op_busy) { in bfa_fruvpd_read()
6380 bfa_trc(fru, fru->op_busy); in bfa_fruvpd_read()
6384 fru->op_busy = 1; in bfa_fruvpd_read()
6386 fru->cbfn = cbfn; in bfa_fruvpd_read()
6387 fru->cbarg = cbarg; in bfa_fruvpd_read()
6388 fru->residue = len; in bfa_fruvpd_read()
6389 fru->offset = 0; in bfa_fruvpd_read()
6390 fru->addr_off = offset; in bfa_fruvpd_read()
6391 fru->ubuf = buf; in bfa_fruvpd_read()
6392 bfa_fru_read_send(fru, BFI_FRUVPD_H2I_READ_REQ); in bfa_fruvpd_read()
6398 * Get maximum size fru vpd image.
6400 * @param[in] fru - fru structure
6401 * @param[out] size - maximum size of fru vpd data
6406 bfa_fruvpd_get_max_size(struct bfa_fru_s *fru, u32 *max_size) in bfa_fruvpd_get_max_size() argument
6408 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_fruvpd_get_max_size()
6411 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_fruvpd_get_max_size()
6414 if (fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK || in bfa_fruvpd_get_max_size()
6415 fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK2) in bfa_fruvpd_get_max_size()
6424 * @param[in] fru - fru structure
6434 bfa_tfru_write(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset, in bfa_tfru_write() argument
6437 bfa_trc(fru, BFI_TFRU_H2I_WRITE_REQ); in bfa_tfru_write()
6438 bfa_trc(fru, len); in bfa_tfru_write()
6439 bfa_trc(fru, offset); in bfa_tfru_write()
6440 bfa_trc(fru, *((u8 *) buf)); in bfa_tfru_write()
6442 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_tfru_write()
6445 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_tfru_write()
6448 if (fru->op_busy) { in bfa_tfru_write()
6449 bfa_trc(fru, fru->op_busy); in bfa_tfru_write()
6453 fru->op_busy = 1; in bfa_tfru_write()
6455 fru->cbfn = cbfn; in bfa_tfru_write()
6456 fru->cbarg = cbarg; in bfa_tfru_write()
6457 fru->residue = len; in bfa_tfru_write()
6458 fru->offset = 0; in bfa_tfru_write()
6459 fru->addr_off = offset; in bfa_tfru_write()
6460 fru->ubuf = buf; in bfa_tfru_write()
6462 bfa_fru_write_send(fru, BFI_TFRU_H2I_WRITE_REQ); in bfa_tfru_write()
6470 * @param[in] fru - fru structure
6480 bfa_tfru_read(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset, in bfa_tfru_read() argument
6483 bfa_trc(fru, BFI_TFRU_H2I_READ_REQ); in bfa_tfru_read()
6484 bfa_trc(fru, len); in bfa_tfru_read()
6485 bfa_trc(fru, offset); in bfa_tfru_read()
6487 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) in bfa_tfru_read()
6490 if (!bfa_ioc_is_operational(fru->ioc)) in bfa_tfru_read()
6493 if (fru->op_busy) { in bfa_tfru_read()
6494 bfa_trc(fru, fru->op_busy); in bfa_tfru_read()
6498 fru->op_busy = 1; in bfa_tfru_read()
6500 fru->cbfn = cbfn; in bfa_tfru_read()
6501 fru->cbarg = cbarg; in bfa_tfru_read()
6502 fru->residue = len; in bfa_tfru_read()
6503 fru->offset = 0; in bfa_tfru_read()
6504 fru->addr_off = offset; in bfa_tfru_read()
6505 fru->ubuf = buf; in bfa_tfru_read()
6506 bfa_fru_read_send(fru, BFI_TFRU_H2I_READ_REQ); in bfa_tfru_read()
6512 * Process fru response messages upon receiving interrupts.
6514 * @param[in] fruarg - fru structure
6520 struct bfa_fru_s *fru = fruarg; in bfa_fru_intr() local
6524 bfa_trc(fru, msg->mh.msg_id); in bfa_fru_intr()
6526 if (!fru->op_busy) { in bfa_fru_intr()
6530 bfa_trc(fru, 0x9999); in bfa_fru_intr()
6538 bfa_trc(fru, status); in bfa_fru_intr()
6540 if (status != BFA_STATUS_OK || fru->residue == 0) { in bfa_fru_intr()
6541 fru->status = status; in bfa_fru_intr()
6542 fru->op_busy = 0; in bfa_fru_intr()
6543 if (fru->cbfn) in bfa_fru_intr()
6544 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_intr()
6546 bfa_trc(fru, fru->offset); in bfa_fru_intr()
6548 bfa_fru_write_send(fru, in bfa_fru_intr()
6551 bfa_fru_write_send(fru, in bfa_fru_intr()
6558 bfa_trc(fru, status); in bfa_fru_intr()
6561 fru->status = status; in bfa_fru_intr()
6562 fru->op_busy = 0; in bfa_fru_intr()
6563 if (fru->cbfn) in bfa_fru_intr()
6564 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_intr()
6568 bfa_trc(fru, fru->offset); in bfa_fru_intr()
6569 bfa_trc(fru, len); in bfa_fru_intr()
6571 memcpy(fru->ubuf + fru->offset, fru->dbuf_kva, len); in bfa_fru_intr()
6572 fru->residue -= len; in bfa_fru_intr()
6573 fru->offset += len; in bfa_fru_intr()
6575 if (fru->residue == 0) { in bfa_fru_intr()
6576 fru->status = status; in bfa_fru_intr()
6577 fru->op_busy = 0; in bfa_fru_intr()
6578 if (fru->cbfn) in bfa_fru_intr()
6579 fru->cbfn(fru->cbarg, fru->status); in bfa_fru_intr()
6582 bfa_fru_read_send(fru, in bfa_fru_intr()
6585 bfa_fru_read_send(fru, in bfa_fru_intr()